Forth-Worte müssen erst erzeugt werden ( unter Verwendung von : ... ; ), bevor sie angewandt werden können. Sie werden also das Wort TRAFFIC-LIGHT, das eigentlich das gesamte Programm darstellt, erst ganz am Ende vorfinden.
"\" steht am Anfang eines Kommentars. Forth überspringt dann den Rest der Zeile.
Neue Worte werden wir in Fettschrift darstellen. Unmittelbare Kommandos an Forth im Quelltext fassen wir kursiv.
Dieses Programm benutzt einige WebForth-Worte,
welche hier erklärt werden.
Ein vollständiges Glossar aller in WebForth auftretenden Worte steht ebenfalls zur Verfügung.
CR .( Traffic Lights wird geladen ) CR \ Meldung bei Einladen des Quelltextes \ CR beginnt eine neue Zeile auf dem Bildschirm \ Variablen vereinbaren, Anfangswerte setzen VARIABLE RED-WAIT 10 RED-WAIT ! \ 20 Zehntel = 2 Sekunden VARIABLE YELLOW-WAIT 10 YELLOW-WAIT ! \ 10 Zehntel = 1 Sekunde VARIABLE GREEN-WAIT 20 GREEN-WAIT ! VARIABLE %WAIT 100 %WAIT ! \ Verwende 100, um 1 <sec/sec> nachzuahmen : ESC? ( -- EscGedrueckt ) \ TRUE, wenn Esc-Taste gedrückt KEY? IF \ Wurde eine Taste gedrückt? KEY 27 = \ Erkunde, ob es die Esc-Taste ist oder nicht ELSE FALSE THEN \ andernfalls liefere FALSE ; : WAIT ( Zehntel -- ) \ Zehntel einer Sekunde lang warten CR CR %WAIT @ * MS \ MS wartet 1 Millisekunde lang ESC? ABORT" Esc gedruckt" ; : COLOR-SPACES ( X Y Zwischenräume Farbe -- ) BG-CLR @ >R \ Hintergrundfarbe aufbewahren, BG-CLR ! \ dann auf Farbe setzen. ROT ROT AT-XY \ Cursor auf die Position X,Y setzen. SPACES \ Zwischenräume in der Hintergrundfarbe setzen R> BG-CLR ! \ und dann wiederherstellen. ; COLS @ 2/ \ Bildschirmmitte berechnen 1- CONSTANT X \ Die Verkehrsampel beginnt X Zwischenräume vom Rand entfernt 5 CONSTANT Y \ Die oberste Lampe beginnt Y Zwischenräume vom oberen Rand entfernt : LAMP ( Y -- ) X OVER 4 GRAY COLOR-SPACES \ wie in XXXX 1 + X OVER 4 GRAY COLOR-SPACES \ XXXX 1 + X SWAP 4 GRAY COLOR-SPACES \ XXXX ; : LENS ( Y Farbe -- ) X 1 + ROT ROT 2 SWAP COLOR-SPACES \ wie in OO ; : POST ( Y -- ) X 1 + OVER 2 GRAY COLOR-SPACES \ wie in XXXX 1 + X 1 + OVER 2 GRAY COLOR-SPACES \ XX 1 + X 1 + SWAP 2 GRAY COLOR-SPACES \ XX ; : LAMP-&-POST ( -- ) \ wie in XXXX PAGE \ Löscht den Bildschirm \ XOOX Y LAMP Y 1 + DARK-RED LENS \ XXXX Y 2 + LAMP Y 3 + DARK-YELLOW LENS \ XOOX Y 4 + LAMP Y 5 + DARK-GREEN LENS \ XXXX Y 7 + POST \ XOOX 0 0 AT-XY \ XXXX ; \ XX \ XX \ XX \ Helle Leuchtfläche zeigen, etwas warten und Leuchtfläche dann wieder abdunkeln. : RED ( -- ) Y 1 + RED LENS \ Leuchtfläche in heller Farbe zeichnen RED-WAIT @ WAIT Y 1 + DARK-RED LENS \ Leuchtfläche noch einmal in dunkler Farbe zeichnen CR ; : RED-&-YELLOW ( -- ) Y 1 + RED LENS Y 3 + YELLOW LENS YELLOW-WAIT @ WAIT Y 1 + DARK-RED LENS Y 3 + DARK-YELLOW LENS CR ; : YELLOW ( -- ) Y 3 + YELLOW LENS YELLOW-WAIT @ WAIT Y 3 + DARK-YELLOW LENS CR ; : GREEN ( -- ) Y 5 + GREEN LENS GREEN-WAIT @ WAIT Y 5 + DARK-GREEN LENS CR ; \ Wort, das die Verkehrsampel aufbaut und eine Meldung an den Anwender absetzt : LAMP-POST ( -- ) LAMP-&-POST ." Programm verlassen uber die Esc-Taste" CR ; \ Jetzt das Wort von eben ausführen LAMP-POST \ ( Verkehrsampel-Beispiel - vom Benutzer einzugebende Worte ) \ : PHASES ( -- ) \ RED RED-&-YELLOW GREEN YELLOW \ ; \ : TRAFFIC-LIGHT ( -- ) \ LAMP-POST BEGIN PHASES AGAIN \ ;[ Lehrtext | Anfang ] Copyright © WebForth-Team 2001