====== Gforth — GNU Forth für Android ====== Ziel ist es, Gforth als Programmierumgebung für Android zu verwenden. ===== Pfad ===== Wenn im folgenden von `/sdcard` die Rede ist, dann ist das je nach Gerät und Android-Version ein anderern Pfad. s" HOME" getenv type würde `/sdcard/gforth/home` ergeben; alles vor `gforth/home` ist der gerätespezifische Präfix. ===== Stand der Dinge ===== * Es gibt [[https://play.google.com/store/apps/details?id=gnu.gforth|Gforth im Play Store]] das man direkt ab Android 4.0 installieren kann, Android 2.3-Support wurde am 31.3.2018 aufgegeben, weil es zu alt ist für diverse Features. * Das kann über OpenGL eine Terminal-Emulation zeigen oder einen Terminal-Server bedienen (in der Datei ''/sdcard/gforth/site-forth/starta.fs'' festgelegt). Den Terminal-Server kann man mit einem einfachen ''t'' und Return schnell vom Terminal starten, und sich dann mit ''telnet //adresse// 4444'' einloggen. Für das Gerät in der ''.telnetrc'' im Home-Verzeichnis ''//hostname// mode character'' eintragen. * Touchs werden auch schon erkannt, und der Menü-Button/Softkey togglet die Softwaretastatur Beim ersten Mal Starten packt die App die Gforth-Dateien auf die SD-Karte aus. Das sind ein paar Megabyte, und dauert deshalb. Gforths Loader zeigt in dem Zustand einen Spinner, der am Ende kurz die Message "done; restart Gforth" anzeigt. Falls diese länger sichtbar bleibt, sollte man Gforth killen und neustarten. Das Terminal verwendet einen Fragment Shader, der weitgehend selbständig ein farbiges ASCII-Terminal realisiert - es bekommt dazu zwei Texturen, eine mit dem Zeichensatz, die andere mit Zeichen und Farbinformationen. Da dauert dann das Update des Terminal-Screens nur einige Millisekunden - so wie früher auch. Das Terminal ist auf einigen billigen Handys mit lausigen OpenGL-Implementierungen getestet, sollte also überall funktionieren. Als Tastaturen empfehle ich: * [[https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard|Hackers Keyboard]] * [[https://play.google.com/store/apps/details?id=de.ubuntix.android.mygermankeyboard|Deutsche Tastatur]] * [[https://play.google.com/store/apps/details?id=com.jb.gokeyboard|Go Keyboard]] Da Android-Apps nicht über die Kommandozeile gestartet werden, kann man Optionen für den Start in die Datei ''/sdcard/gforth/home/.options'' eintragen. Jede Option eine Zeile. ''-d64k'' setzt z.B. den Stack auf 64kB, ''-m16M'' das Dictionary auf 16MB, siehe [[http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Invoking-Gforth.html]] ===== Beispiele ===== Alle Android-Beispiele finden sich in ''/sdcard/gforth//minos2''. Es gibt * ''[[https://github.com/forthy42/gforth/tree/master/minos2/gl-sample.fs|minos2/gl-sample.fs]]'': Eine einfache OpenGL-Demo * ''[[https://github.com/forthy42/gforth/tree/master/minos2/omx-example.fs|minos2/omx-example.fs]]'': Spielt Videos ab. Lade mein Beispielvideo [[http://bernd-paysan.de/jb.mkv|Jingle Bells]] als Test-Stream nach ''/storage/extSdCard/Filme'', dann kann man es mit ''jb'' abspielen, oder jede andere Datei mit ''"" play-ts'' für MPEG Transport Streams, oder ''play-mkv'' für Matroska. * ''[[https://github.com/forthy42/gforth/tree/master/minos2/gl-slideshow.fs|minos2/gl-slideshow.fs]]'': Zeigt eine Slideshow. Lege Bilder in ein Verzeichnis, und füge eine Liste der Dateinamen (mit Pfad). Lade diese Liste mit ''"" slide-show''. * ''[[https://github.com/forthy42/gforth/tree/master/minos2/android-recorder.fs|minos2/android-recorder.fs]]'': Zeichnet ein Video auf, wenn man ''camera-test'' aufruft. Das aufgezeichnete Video wird in ''/storage/extSdCard/Filme/test.mp4'' abgelegt. * ''[[https://github.com/forthy42/gforth/tree/master/unix/sensors.fs|unix/sensors.fs]]'': Liest die Sensoren aus. ===== Troubleshooting ===== Gforth schreibt ein Log in die Dateien ''/sdcard/gfortherr.log'' und ''/sdcard/gforthout.log''. Falls etwas schief geht, erst mal hier nachsehen, ob eine Fehlermeldung zu finden ist. Sollte eine Quelldatei fehlen oder kaputt sein, hilft es, ''/sdcard/gforth/'' zu löschen, wobei es eigentlich reicht, im Unterordner mit der aktuellen Versionsnummer die Datei ''sha256sum'' zu löschen. Manchmal verschieben sich Dateien nach einem Update, dann sollte man ''/sdcard/gforth/'' löschen, damit die alten Dateien auch wirklich verschwinden. ===== Dokumentation ===== Gforth hat ein [[http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/|dickes Manual]], das es hier auch als {{:projects:gforth-android:gforth-ebook.pdf|eBook PDF}} gibt (einige nicht umbrechbare Texte sind in der eBook-Version rechts abgeschnitten).