Forums Neueste Beiträge
 

FORTH Beispiel

09/04/2009 - 04:49 von all2001 | Report spam
\ FEUER Demo FEUERMELDER Anwendung ALL 11:26 14MAY93
\ Last changed screen # 000 ALL 11:26 14MAY93

\ (C) 1993 by Dipl.-Ing. Wolfgang Allinger 'ALL0593'
\ c/o Ingenieurbuero Allinger
\ Brander Weg 6 Tel/FAX: (+49)+212/66811
\ D-42699 Solingen Germany
\ noncommercial use granted !!!

\ Diese lauffàhige Demo zeigt, wie eine anwenderfreundliche,
\ selbstdokumentierende Sprache am Beispiel eines FEUERMELDER
\ aussieht. Hinweis: alles in "( )" und nach "\" ist Kommentar.
\ ":" ... ";" sind neue Definitionen.
\ "Feueralarm?" und "Feueralarm_bearbeiten" sind 2!! Programme.
\ Diese Demo belegt weniger als 700 byte Programmspeicher und
\ làuft praktisch auf beliebigen Rechnern ohne Änderung.
\ HISTORY MASTER LOAD SCREEN ALL 11:19 14MAY93

DECIMAL \ default base

000 CONSTANT $VFEUER \ Version Kontrolle

: -FEUER FORGET $VFEUER ; \ entfernt dieses Programm wieder

\ 2 ?SCREENS THRU \ 1 LOAD làdt dann die Anwendungsblöcke
\ bei SEQ file system auskommentieren !

\ ALL0593 v0.00 first release




\ .VFEUER ... constants ... USER Interface ALL 10:16 14MAY93

: .VFEUER $VFEUER CR . ; \ zeige Versionsnr.

-1 CONSTANT ja

\ Bereich Meldung .. alle für die jeweilige Umgebung anpassen

VARIABLE Meldung \ bits gesetzt wenns qualmt, n. Zeile setzt
5 Meldung ! \ zB: bit0 = Melder1, bit2 = Melder3
: Melder@ ( a -- u ) @ ; \ liefert Datum aus Adresse
Meldung CONSTANT Melder0 \ liefert Adresse der 1. Meldung
: Rauch ; \ evtl eine Maske.. für geràuchertes
16 CONSTANT bits/Meldung \ zB 16bit oder was auch immer
16 CONSTANT alle \ Anzahl Melder

\ Rauchmelder anwàhlen abfragen entdeckt? ALL 11:15 14MAY93

VARIABLE Rauchmelder \ 1 ... n

: anwàhlen ( d a -- ) NIP ( n 0 a -- n a ) ! ;

: abfragen ( a -- uMASKE uDATA )

@ 1- bits/Meldung /MOD ( -- rem qot )
Melder0 + Melder@ ( -- rem uDATA )
1 ROT ( -- uDATA 1 rem )
SHIFT ( -- uDATA uMASKE ) \ rem -> MASKE
SWAP ; ( -- uMASKE uDATA )

: entdeckt? ( uMASKE uDATA -- t=RAUCH) AND 0> ;

\ Feueralarm melden nàchsten abgefragt? ALL 11:15 14MAY93

: Feueralarm ( -- ^string nMelder )

" Rauch an Melder Nr.: " ( -- ^string )
Rauchmelder @ ;

: melden ( ^string n -- ) CR SWAP COUNT TYPE . 7 EMIT ;

: nàchsten ( -- d ) Rauchmelder @ 1+ 0 ;

: abgefragt? ( n a -- ? ) @ 1- <= ;




\ Feueralarm? ALL 11:02 14MAY93

: Feueralarm? 1. Rauchmelder anwàhlen
BEGIN
Rauchmelder abfragen
Rauch entdeckt? IF Feueralarm melden THEN
nàchsten Rauchmelder anwàhlen
alle Rauchmelder abgefragt?
ja = UNTIL ;

\ Schlüsselworte GROSS, damits wenigstens noch ein bischen wie
\ Programm aussieht und nicht gleich von jedem verstanden wird!

\ Das ist gemein, aber es kommt noch besser!
\ Der GROSSEN Worte ist genug gewechselt, es folgen Taten!

\ Ab hier wirds gefàhrlich für Computer-Freaks ALL 11:01 14MAY93

\ Ein paar harmlose(?) Definitionen.. Vorsichtig anschleichen..
: abfragen. abfragen ; : anwàhlen, anwàhlen ;
: Falls ; : melden. melden ;
: dann ja = ;
: beginne [COMPILE] BEGIN ; IMMEDIATE
: aufhören [COMPILE] UNTIL ; IMMEDIATE
: ja, [COMPILE] IF ; IMMEDIATE
: Den [COMPILE] THEN ; IMMEDIATE

\ WARNUNG! Gleich haut's Sie möglicherweise vom Schemel,
\ denn nun kommt FORTH rücksichtslos mit seiner ganzen Kraft!!
\ Lassen Sie das nachfolgende bloß nicht Ihren Chef sehen!
\ Nicht weiterlesen, es könnte ein Weltbild zusammenbrechen!!!

\ Feueralarm_bearbeiten ist nun total einfach ALL 11:16 14MAY93

: Feueralarm_bearbeiten 1. Rauchmelder anwàhlen,
beginne
Rauchmelder abfragen.
Rauch entdeckt? Falls ja, Feueralarm melden.
Den nàchsten Rauchmelder anwàhlen,
alle Rauchmelder abgefragt?
dann aufhören ;

\ Das soll ein Programm sein? Das versteht kein Programmierer!
\ Lieber (*(void(*)())0)() das ist doch wenigstens KERNIGhan.
\ ABER NICHT FÜR MICH und meine Kunden!!!

Feueralarm_bearbeiten \ und so einfach noch sofort zu starten!
\ Aufkleber am Heck: "TSCHÜSS C..."

-x8--

Saludos Wolfgang
Meine 7 Sinne:
Unsinn, Schwachsinn, Blödsinn, Wahnsinn, Stumpfsinn, Irrsinn, Lötzinn.
Wolfgang Allinger Paraguay reply Adresse gesetzt !
ca. 15h00..21h00 MEZ SKYPE:wolfgang.allinger
 

Lesen sie die antworten

#1 Frank Buss
09/04/2009 - 05:20 | Warnen spam
Wolfgang Allinger wrote:

\ Ein paar harmlose(?) Definitionen.. Vorsichtig anschleichen..
: abfragen. abfragen ; : anwàhlen, anwàhlen ;
: Falls ; : melden. melden ;
: dann ja = ;
: beginne [COMPILE] BEGIN ; IMMEDIATE
: aufhören [COMPILE] UNTIL ; IMMEDIATE
: ja, [COMPILE] IF ; IMMEDIATE
: Den [COMPILE] THEN ; IMMEDIATE

\ WARNUNG! Gleich haut's Sie möglicherweise vom Schemel,
\ denn nun kommt FORTH rücksichtslos mit seiner ganzen Kraft!!
\ Lassen Sie das nachfolgende bloß nicht Ihren Chef sehen!
\ Nicht weiterlesen, es könnte ein Weltbild zusammenbrechen!!!

\ Feueralarm_bearbeiten ist nun total einfach ALL 11:16 14MAY93

: Feueralarm_bearbeiten 1. Rauchmelder anwàhlen,
beginne
Rauchmelder abfragen.
Rauch entdeckt? Falls ja, Feueralarm melden.
Den nàchsten Rauchmelder anwàhlen,
alle Rauchmelder abgefragt?
dann aufhören ;



Das ist aber schon ein wenig getrickst und könnte man so àhnlich mit
C-Makros auch machen. Es suggeriert eine Natürlichsprachigkeit, die so
nicht vorhanden ist. Z.B. würde

aufhören falls Rauch entdeckt?

bei einigen Systemen zu Fehlermeldungen oder Warnungen beim Compilieren
führen und bei anderen zu Abstürzen zur Laufzeit. Gibt bessere Beispiele,
wie man Forth, und speziell immediate-Wörter, einsetzen kann.

Frank Buss,
http://www.frank-buss.de, http://www.it4-systems.de

Ähnliche fragen