On 17 Jun 06 at group /de/etc/beruf/selbstaendig in article
Post by Hans-Peter PopowskiHallo Wolfgang,
Post by Wolfgang AllingerIrgendswie blickst Du nicht durch. Ich wollte wissen, wie Du das
Progrämmchen "Feueralarm_bearbeiten" schreibst und nicht wissen, wie
Du mit dem Fuss aufstampfst, dass kann meine kleine Nichte schon
ausreichend gut :-)
Ich hab hier gezeigt, dass man in Forth Programme in Klartext
schreiben kann, die jeder Nichtprogrammierer auf Anhieb lesen und
verstehen kann.
Das hast Du leider nicht gezeigt. Denn Dein Beispiel macht genau nicht
das im ersten Absatz geforderte. Auch wenn ich Forth nicht näher
kenne, fehlen da auf jeden Fall noch einige weitere Statements. Und um
die Lesbarkeit eines Programms zu beurteilen, muß man das gesamte
Programm sehen.
Bitteschön:
\ 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..."
Oder mal praktisch alle Kommentare raus, ist das immer noch leserlich:
<quote>
\ FEUER Demo FEUERMELDER Anwendung 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 !!!
DECIMAL
-1 CONSTANT ja
VARIABLE Meldung
5 Meldung !
: Melder@ @ ;
Meldung CONSTANT Melder0
: Rauch ;
16 CONSTANT bits/Meldung
16 CONSTANT alle
VARIABLE Rauchmelder
: anwählen NIP ! ;
: abfragen
@ 1- bits/Meldung /MOD
Melder0 + Melder@
1 ROT
SHIFT
SWAP ;
: entdeckt? AND 0> ;
: Feueralarm
" Rauch an Melder Nr.: "
Rauchmelder @ ;
: melden CR SWAP COUNT TYPE . 7 EMIT ;
: nächsten Rauchmelder @ 1+ 0 ;
: abgefragt? @ 1- <= ;
: Feueralarm? 1. Rauchmelder anwählen
BEGIN
Rauchmelder abfragen
Rauch entdeckt? IF Feueralarm melden THEN
nächsten Rauchmelder anwählen
alle Rauchmelder abgefragt?
ja = UNTIL ;
: 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
: 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 ;
Feueralarm_bearbeiten
</quote>
Post by Hans-Peter PopowskiPost by Wolfgang AllingerDu hast behauptet, Forth Programme seien so leserlich, wie
Binärcode. Du bist damit widerlegt :-P
In der Tat. Für Binärcode gibt's immerhin Disassembler.
Bring ein Beispiel für einen leserlichen Feueralarm.
Post by Hans-Peter PopowskiPost by Wolfgang AllingerIch warte (schon seit 20 Jahren) vergeblich, dass es mit einem
Progrämmchen wie mein Beispiel auch in einer anderen
Programiersprache derart klar geht.
Im Ernst? Ist noch keiner mit ELAN gekommen?
Nein, aber Du bist herzlich eingeladen.
Tschüß Wolfgang
--
Ich gehe nach Paraguay in den Unruhestand! Verkaufe: Porsche 968, 120qm
Maisonette Wohnung in 3 Fam.Haus (2Bäder, DSL, ISDN, DVB-T, 2 Keller je
10qm), Garage, Stellplatz, div. Möbel sowie Segelklamotten (XXL). Alles
Top-Zustand. Dipl.-Ing. Wolfgang Allinger 0212/66811, reply address set