(ACHTUNG! Dauerhaftes Abspeichern von BLOCKs nicht implementiert!)
Das Applet liest bis zu 100 BLOCKs von seiner Webseite ein. Es verwendet dabei Tags der Form:
<PARAM name=block3.2 value=" ( Forth code )">
Man betrachte den HTML-Code dieser Seite als ein Beispiel. Der Forth-Quelltext ist nicht ganz einfach zu programmieren, wenn Sie " und ' als Anführungszeichen in derselben Zeile haben..
Zur Zeit können noch keine Veränderungen, die Sie an BLOCK
vornehmen, permanent gespeichert werden. Java erlaubt keinen Datei-E/A-Zugriff
auf Ihren Computer. WebForth kann also die von Ihnen vorgenommenen Veränderungen
nicht abspeichern. In späteren Versionen wird es vielleicht möglich
sein, Ihre BLOCKS auf dem Server abzulegen.
WebForth liest auch ein PARAM-Tag der folgenden Form ein:
<PARAM name=boot value=" 1 10 INDEX">
Beim Hochfahren interpretiert das WebForth-Applet automatisch den Bootstring
und führt ihn aus.
WebForth bietet einen Einzelschritt-Mechanismus und einen ausgefeilten
TRACE-Debugger mit vielen Hilfsangaben. Um die Befehle der virtuellen Forth-Maschine
im Einzelschritt-Modus laufen zu lassen, gebe man STEP, gefolgt von dem
Namen desjenigen Wortes ein, das man überprüfen möchte.
Es werden die obersten Einträge von Daten- und Returnstack angezeigt,
der Befehlszeiger ip (instruction pointer) und der Name der als nächste
auszuführenden Colon- oder CODE-Definition. Ist die Datenstacktiefe
größer als 1, dann werden die Stacktiefen von sowohl Daten-
als auch Returnstack in einer zweiten Zeile angezeigt. Um zum nächsten
Befehl überzugehen, drücke man irgendeine Taste. Wenn Sie die
Escape-Taste drücken, dann wird das gerade bearbeitete Wort ohne Verzögerung
und ohne weitere Kommentare bis zum Ende abgearbeitet. TRACE arbeitet in
genau derselben Weise, hält aber zwischen den einzelnen Worten nicht
an. Die Escape-Taste arbeitet mit TRACE auf dieselbe Weise wie mit STEP.
WebForth überprüft den Speicherzugriff über Javas Mechanismus
zur Ausnahmebehandlung. Wenn Sie auf eine unzulässige Adresse zugreifen
wollen, wie bei 2000000 @, erhalten Sie die Fehlermeldung
"invalid memory address" und die Stacks werden gelöscht.
Dadurch wurde die Leistung des Systems kaum beeinträchtigt, für
Anfänger in Sachen Forth wird es aber leichter, Fehler im Umgang mit
dem Speicher aufzuspüren.
WebForth hat eine USER-Variable namens CAPS, die Sie
abfragen oder auch verändern können. Als Vorgabe ist sie auf
0 gesetzt, so daß zwischen Groß- oder Kleinbuchstaben
nicht unterschieden wird. Dadurch wird dem Anfänger der Ärger
erspart, dauernd Worte in Großbuchstaben eintippen zu müssen!
Bitte beachten Sie, daß in der augenblicklichen WebForth-Version,
auch wenn CAPS auf 0 gesetzt ist, Hexadezimalzahlen immer
noch nicht richtig umgewandelt werden, wenn sie als Ziffern Kleinbuchstaben
(a bis f) enthalten. Verwenden Sie also bitte A bis F. Um einen von Groß-
oder Kleinbuchstaben unabhängigen Stringvergleich zur Verfügung
zu haben, habe ich folgende Worte eingebaut:
ISLOWER? ( c -- f)
liefert TRUE, wenn c ein Kleinbuchstabe ('a' bis 'z') ist.UCASE ( c -- c')
ersetzt das Zeichen auf dem Stack durch den entsprechenden Großbuchstaben genau dann, wenn es sich um einen Kleinbuchstaben ('a' bis 'z') handelt.UCASE? ( c -- c')
ersetzt das Zeichen c durch den entsprechenden Großbuchstaben genau dann, wenn es sich um einen Kleinbuchstaben ('a' bis 'z') handelt und die Variable CAPS auf Null gesetzt ist.
Und weil es so schön ging, habe ich noch folgende Filter-Worte hinzugefügt:
@UCASE! ( a -- )
ersetzt das Zeichen an der Adresse a durch den entsprechenden Großbuchstaben genau dann, wenn es sich dabei um einen Kleinbuchstaben ('a' bis 'z') handelt.TOUPPER ( c$ -- )
ersetzt alle Kleinbuchstaben in dem 'counted String' c$ durch die entsprechenden Großbuchstaben.
Dann habe ich noch SAME? derart verändert, daß es nach jedem eingeholten Zeichen der zwei miteinander zu vergleichenden Strings UCASE? abfragt. Damit kann man dann Namen im Dictionary mit genau denselben Buchstaben (groß oder klein) abspeichern, mit denen sie eingetippt wurden, während bei der Ausgabe oder beim Compilieren nicht zwischen groß und klein beim Vergleich unterschieden wird, falls die Variable CAPS auf 0 gesetzt ist.
Um anderen Web-Entwicklern und Experimentatoren mehr Bewegungsfreiheit zu bieten, wurden einige Applet-Parameter eingeführt, die die Zahl der Zeilen und Spalten im Text flexibler gestalten. Vorgabe ist immer noch 72 mal 20, aber Sie können dies nach Belieben auch anders einstellen. Gleichermaßen können Sie auch die Schriftgröße verändern. Für die meisten Anwendungen erscheint 10, 12 oder 14 am vernünftigsten. Später werde ich vielleicht auch noch Parameter für Schriftform und Schriftstil einführen. Das Format für die genannten Größen innerhalb des Paares <applet ...> ... </applet> lautet:
<PARAM name=cols value="72">
<PARAM name=rows value="20">
<PARAM name=fontsize value="12">
In WebForth können Sie die Textfarben für die Ausgabe einstellen, indem Sie den Inhalt der beiden User-Variablen FGCOLOR and BGCOLOR verändern. Und zwar muß der Wert eine Ganzzahl sein, bei der die Bits 16-23 für Rot zuständig sind, die Bits 8-15 für Grün und die Bits 0-7 für Blau. (In hexadezimal: 00RRGGBB). Für einige Standard-Farben sind Standard-Namen vorgesehen: BLACK (Schwarz), WHITE (Weiß), RED (Rot), GREEN (Grün), BLUE (Blau), YELLOW (Gelb), CYAN (Zyan), MAGENTA (Magenta-Rot), GRAY (Grau), DARKGRAY (Dunkelgrau), LIGHTGRAY (Hellgrau), DARKRED (Dunkelrot), DARKGREEN (Dunkelgrün) und DARKBLUE (Dunkelblau). Die üblichen Worte EMIT und TYPE arbeiten mit der gerade eingestellten Farbe.
In WebForth löscht PAGE den Bildschirm (zur momentanen BGCOLOR hin) und AT-XY setzt den Cursor auf die auf dem Stack angegebene Zeile und Spalte. MS unterbricht die Ausführung für die anzugebende Zahl von Millisekunden.