summaryrefslogtreecommitdiff
path: root/warenhaus/ls-Warenhaus 3
diff options
context:
space:
mode:
Diffstat (limited to 'warenhaus/ls-Warenhaus 3')
-rw-r--r--warenhaus/ls-Warenhaus 3986
1 files changed, 0 insertions, 986 deletions
diff --git a/warenhaus/ls-Warenhaus 3 b/warenhaus/ls-Warenhaus 3
deleted file mode 100644
index 71ef216..0000000
--- a/warenhaus/ls-Warenhaus 3
+++ /dev/null
@@ -1,986 +0,0 @@
-(*
-
- **********************************************************
- **********************************************************
- ** **
- ** ls-Warenhaus 3 **
- ** **
- ** Version 1.01 **
- ** **
- ** **
- ** (Stand: 30.08.89) **
- ** **
- ** **
- ** **
- ** Autor: Bruno Pollok, Bielefeld **
- ** **
- ** Copyright (C) 1988 Eva Latta-Weber, Bielefeld **
- ** Copyright (C) 1990 ERGOS GmbH, Siegburg **
- ** **
- **********************************************************
- **********************************************************
-
- *)
-PACKET ls warenhaus 3 DEFINES
- artikelnummer lesen,
- artikeldaten eingeben,
- kundennummer lesen,
- kundendaten eingeben,
- neues blatt,
- rechnungskopf,
- artikel kaufen,
- abrechnung,
- nachbestellen,
- auskunft,
- stoptaste gedrueckt,
- stoptaste gedrückt,
- dezimalwert lesen,
- bitmuster lesen,
- bildschirm neu,
-(* ------------------------------ *)
- tastatureingabe,
- eingabesicherheit,
- eingabe mit codekartenleser,
-
- cursor w3 1 1:
-LET esc = ""27"",
- stopzeichen = "q",
- abbruchzeichen = "h";
-WINDOW VAR w1 :: window (43, 3, 36, 16),
- w2 :: window (43, 20, 36, 3),
- w3k :: window ( 2, 4, 40, 3),
- w3 :: window ( 2, 7, 40, 16),
- w4 :: window ( 8, 4, 66, 18);
-BOOL VAR ende gewuenscht := FALSE,
- artikelnummer ist eingelesen := FALSE,
- kundennummer ist eingelesen := FALSE,
- codekartenleser aktiviert := FALSE,
-
- auf neuem blatt := TRUE;
-INT VAR artikelnummer :: 0,
- mindestbestand :: 0,
- bestand :: 0,
- kundennummer :: 0,
- sicherheit :: 5;
-TEXT VAR artikelname :: "",
- nachname :: "",
- vorname :: "",
- geschlecht :: "",
- ueberschrift :: " RECHNUNG",
- hilfstext, exit char;
-REAL VAR preis :: 0.0,
- summe :: 0.0;
-PROC eingabesicherheit (INT CONST wert):
-
- sicherheit := abs (wert)
-END PROC eingabesicherheit;
-PROC cursor w3 1 1:
- cursor (w1, 1, 1);
- cursor (w2, 1, 1);
- cursor (w3, 1, 1);
- cursor (w3k, 1, 1);
- forget ("WARENHAUS:Rechnung", quiet);
- setze variable in anfangszustand
-END PROC cursor w3 1 1;
-PROC setze variable in anfangszustand:
- ende gewuenscht := FALSE;
- artikelnummer ist eingelesen := FALSE;
- kundennummer ist eingelesen := FALSE;
- artikelnummer := 0;
- mindestbestand := 0;
- bestand := 0;
-
- kundennummer := 0;
- artikelname := "";
- nachname := "";
- vorname := "";
- geschlecht := "";
- ueberschrift := " RECHNUNG";
- preis := 0.0;
- summe := 0.0
-END PROC setze variable in anfangszustand;
-PROC bildschirm neu:
- cursor off;
- pruefe abbruch;
- cursor (w1, 1, 1);
- cursor (w2, 1, 1);
- cursor (w3, 1, 1);
- cursor (w3k,1, 1);
- auf neuem blatt := TRUE;
- page;
- out ("WARENHAUS: Info Eingabeart Kommandos "15"Programme "14" " +
-
- "Filialdaten Archiv"); line;
- out (ecke oben links + (40 * waagerecht) + balken oben
- + (36 * waagerecht) + ecke oben rechts);
- INT VAR zeile;
- FOR zeile FROM 3 UPTO 22 REP
- cursor ( 1, zeile); out (senkrecht);
- cursor (42, zeile); out (senkrecht);
- cursor (79, zeile); out (senkrecht)
- PER;
- cursor (1, 23);
- out (ecke unten links + (40 * waagerecht) + balken unten
- + (36 * waagerecht) + ecke unten rechts);
-
- cursor (42, 19);
- out (balken links + (36 * waagerecht) + balken rechts);
- cursor (2, 24);
- out ("Programmabbruch: <ESC><" + abbruchzeichen + ">");
- cursor on
-END PROC bildschirm neu;
-PROC pruefe abbruch:
- IF pressed key = esc
- THEN pruefe weiter
- FI.
- pruefe weiter:
- TEXT VAR naechstes zeichen :: pressed key (20);
- IF naechstes zeichen = stopzeichen
- THEN ende gewuenscht := TRUE
- ELIF naechstes zeichen = abbruch zeichen
-
- THEN setze variable in anfangszustand;
- cursor off;
- errorstop (1951, "Programm - Abbruch durch <ESC><"
- + abbruchzeichen + ">")
- FI
-END PROC pruefe abbruch;
-PROC regeneriere w2:
- cursor (42, 19);
- out (ecke oben links + (36 * waagerecht));
- INT VAR zeile;
- FOR zeile FROM 20 UPTO 22 REP
- cursor (42, zeile); out (senkrecht);
- PER;
- cursor (42, 23); out (balken unten);
- page (w2)
-
-END PROC regeneriere w2;
-PROC fenster putzen:
- page (w1);
- page (w2)
-END PROC fenster putzen;
-PROC lies nummer ein (INT VAR nummer):
- line (w2, 2);
- out (w2, " Stoptaste: <ESC><" + stopzeichen + ">");
- hilfstext := text (nummer);
- REP cursor (w1, 19, 2);
- editget (w1, hilfstext, 4, 4, "", stopzeichen + abbruchzeichen,
- exit char);
- pruefe exit char;
- change all (hilfstext, " ", "")
- UNTIL hilfstext >= "0" AND hilfstext <= "9999" PER;
-
- nummer := int (hilfstext).
- pruefe exit char:
- IF exit char = esc + stopzeichen
- THEN ende gewuenscht := TRUE;
- cursor off; fenster putzen; cursor on;
- nummer := 0;
- LEAVE lies nummer ein
- ELIF exit char = esc + abbruchzeichen
- THEN setze variable in anfangszustand;
- errorstop (1951, "Progamm - Abbruch durch <ESC><"
- + abbruchzeichen + ">")
- ELSE ende gewuenscht := FALSE
- FI.
-
-END PROC lies nummer ein;
-PROC lies artikelnummer ein:
- page (w2);
- cursor (w1, 2, 2);
- out (w1, "Artikelnummer : ");
- IF codekartenleser aktiviert
- THEN artikelnummer := gesicherter wert von interface
- (min artikelnummer , max artikelnummer, "Warenkarte")
- ELSE artikelnummer von tastatur lesen
- FI;
- IF ende gewuenscht
- THEN artikelnummer ist eingelesen := FALSE
- ELSE artikelnummer ist eingelesen := TRUE
-
- FI.
- artikelnummer von tastatur lesen:
- cursor on;
- REP out (w2, " Artikelnummer eingeben");
- lies nummer ein (artikelnummer);
- UNTIL ende gewuenscht COR artikelnummer zulaessig PER.
- artikelnummer zulaessig:
- IF (artikelnummer < min artikelnummer OR
- artikelnummer > max artikelnummer)
- THEN page (w2); out (""7"");
- out (w2, " Unzulässige Artikelnummer!");
- line (w2, 2);
- out (w2, " Bitte irgendeine Taste tippen!");
-
- pause; page (w2);
- FALSE
- ELSE TRUE
- FI.
-END PROC lies artikelnummer ein;
-PROC artikelnummer lesen:
- pruefe abbruch;
- lies artikelnummer ein;
- IF artikelnummer ist eingelesen
- THEN hole artikeldaten (artikelnummer, artikelname, preis,
- mindestbestand, bestand)
- FI
-END PROC artikelnummer lesen;
-PROC kundennummer lesen:
- pruefe abbruch;
- lies kundennummer ein;
- IF kundennummer ist eingelesen
- THEN hole kundendaten (kundennummer, nachname, vorname, geschlecht)
-
- FI
-END PROC kundennummer lesen;
-PROC lies kundennummer ein:
- page (w2);
- cursor (w1, 2, 2);
- out (w1, "Kundennummer : ");
- IF codekartenleser aktiviert
- THEN kundennummer := gesicherter wert von interface
- (min kundennummer , max kundennummer, "Kundenkarte")
- ELSE kundennummer von tastatur lesen
- FI;
- IF ende gewuenscht
- THEN kundennummer ist eingelesen := FALSE
- ELSE kundennummer ist eingelesen := TRUE
- FI.
- kundennummer von tastatur lesen:
-
- cursor on;
- REP out (w2, " Kundennummer eingeben");
- lies nummer ein (kundennummer)
- UNTIL ende gewuenscht COR kundennummer zulaessig PER.
- kundennummer zulaessig:
- IF (kundennummer < min kundennummer OR
- kundennummer > max kundennummer)
- THEN page (w2); out (""7"");
- out (w2, " Unzulässige Kundennummer!");
- line (w2, 2);
- out (w2, " Bitte irgendeine Taste tippen!");
- pause; page (w2);
- FALSE
-
- ELSE TRUE
- FI.
-END PROC lies kundennummer ein;
-PROC zeige artikeldaten:
- cursor (w1, 2, 6);
- out (w1, "Artikelname : " + text (artikelname, 16));
- cursor (w1, 2, 8);
- out (w1, "Preis : " + text preis + " ");
- cursor (w1, 2, 10);
- out (w1, "Mindestbestand : " + text (mindestbestand) + " ");
- cursor (w1, 2, 12);
- out (w1, "Bestand : " + text (bestand) + " ").
- text preis:
- TEXT VAR hilfe :: text (preis, min (8, pos(text(preis),".")+2), 2);
-
- change (hilfe, " ", "0");
- hilfe.
-END PROC zeige artikeldaten;
-PROC zeige kundendaten:
- cursor (w1, 2, 6);
- out (w1, "Nachname : " + text (nachname, 16));
- cursor (w1, 2, 8);
- out (w1, "Vorname : " + text (vorname , 16));
- cursor (w1, 2, 10);
- out (w1, "Geschlecht : " + geschlecht + " ");
-END PROC zeige kundendaten;
-PROC artikeldaten speichern:
- pruefe abbruch;
- page (w2); line (w2);
- out (w2, " Artikeldaten werden gespeichert") ;
-
- speichere artikeldaten (artikelnummer, artikelname, preis,
- mindestbestand, bestand);
- pause (10);
- IF codekartenleser aktiviert
- THEN lasse karte entfernen (FALSE)
- FI
-END PROC artikeldaten speichern;
-PROC kundendaten speichern:
- pruefe abbruch;
- page (w2); line (w2);
- out (w2, " Kundendaten werden gespeichert") ;
- speichere kundendaten (kundennummer, nachname,vorname, geschlecht);
- pause (10);
- IF codekartenleser aktiviert
- THEN lasse karte entfernen (FALSE)
-
- FI
-END PROC kundendaten speichern;
-BOOL PROC stoptaste gedrueckt:
- pruefe abbruch;
- ende gewuenscht
-END PROC stoptaste gedrueckt;
-BOOL PROC stoptaste gedrückt:
- stoptaste gedrueckt
-END PROC stoptaste gedrückt;
-PROC neues blatt:
- pruefe abbruch;
- page (w3k);
- page (w3);
- auf neuem blatt := TRUE;
- forget ("WARENHAUS:Rechnung", quiet)
-END PROC neues blatt;
-PROC nachbestellen:
- pruefe abbruch;
- FILE VAR f;
- warten in w2;
- hole bestelliste (f);
- pruefe abbruch;
- cursor (2,24);
-
- out ("Weiter mit <ESC><q>; Cursor bewegen: <Pfeile>");
- cursor on;
- show (w4, f);
- cursor off;
- cursor (1, 24); out (""5"");
- WINDOW VAR w :: window(45,18,25,3);
- outframe (w);
- IF yes (w, "Bestelliste drucken", FALSE)
- THEN drucke (headline (f))
- FI;
- cursor on;
- forget (headline (f), quiet)
-END PROC nachbestellen;
-PROC warten in w2:
- cursor off;
- page (w2);
- line (w2);
- out (w2, " Bitte warten!");
- cursor on
-END PROC warten in w2;
-PROC codenummer von tastatur lesen (INT VAR codenummer):
-
- codenummer := 0;
- out (w2, " Codenummer eingeben");
- cursor on;
- lies nummer ein (codenummer)
-END PROC codenummer von tastatur lesen;
-PROC auskunft:
- pruefe abbruch;
- FILE VAR f;
- INT VAR codenummer :: 0;
- cursor (w1, 2, 2);
- out (w1, "Codenummer : ");
- page (w2);
- IF codekartenleser aktiviert
- THEN codenummer := gesicherter wert von interface (0,254, "Codekarte");
- lasse karte entfernen (FALSE)
- ELSE codenummer von tastatur lesen (codenummer)
-
- FI;
- IF ende gewuenscht THEN LEAVE auskunft FI;
- SELECT codenummer OF CASE 66, 67, 68 : hitliste
- CASE 73, 74, 75 : kaeuferliste
- CASE 77, 78, 79 : kundenliste
- CASE 84, 85, 86 : einkaufsliste
- CASE 89, 90, 91 : lageruebersicht
- OTHERWISE teste auf artikel oder kundennummer
- END SELECT;
- IF codekartenleser aktiviert CAND wert von interface <> 255
- THEN karte entfernen
- FI.
- karte entfernen:
-
- SELECT codenummer OF
- CASE 66, 67, 68, 73, 74, 75, 77, 78, 79, 84, 85, 86, 89, 90,
- 91: lasse karte entfernen (TRUE)
- OTHERWISE lasse karte entfernen (FALSE)
- END SELECT.
- teste auf artikel oder kundennummer:
- IF codenummer >= min artikelnummer AND codenummer <= max artikelnummer
- THEN gib auskunft ueber artikeldaten
- ELIF codenummer >= min kundennummer AND codenummer <= max kundennummer
- THEN gib auskunft ueber kundendaten
- ELSE unzulaessige codenummer
-
- FI.
- unzulaessige codenummer:
- out (10 * ""7"");
- page (w2);
- out (w2, " Unzulässige Codenummer !!!");
- line (w2, 2);
- out (w2, " Bitte irgendeine Taste tippen!");
- pause;
- page (w2).
- gib auskunft ueber artikeldaten:
- hole artikeldaten (codenummer, artikelname, preis,
- mindestbestand, bestand);
- zeige artikeldaten;
- artikelnummer ist eingelesen := FALSE;
- stop w2;
- page (w1).
- gib auskunft ueber kundendaten:
- hole kundendaten (codenummer, nachname, vorname, geschlecht);
-
- zeige kundendaten;
- kundennummer ist eingelesen := FALSE;
- stop w2;
- page (w1).
- hitliste:
- warten in w2;
- hole auskunft ein (codenummer, 0, f);
- zeige f.
- kundenliste:
- warten in w2;
- hole auskunft ein (codenummer, 0, f);
- zeige f.
- zeige f:
- pruefe abbruch;
- cursor (2, 24);
- out ("Weiter mit <ESC><q>; Cursor bewegen: <Pfeile>");
- show (w4, f);
- cursor (1, 24); out (""5"");
- evtl drucken.
- lageruebersicht:
- warten in w2;
-
- hole auskunft ein (codenummer, 0, f);
- zeige f.
- kaeuferliste:
- lies artikelnummer ein;
- IF artikelnummer ist eingelesen
- THEN artikelnummer ist eingelesen := FALSE;
- warten in w2;
- hole auskunft ein (codenummer, artikelnummer, f);
- zeige f
- FI.
- einkaufsliste:
- lies kundennummer ein;
- IF kundennummer ist eingelesen
- THEN kundennummer ist eingelesen := FALSE;
- warten in w2;
- hole auskunft ein (codenummer, kundennummer, f);
-
- zeige f
- FI.
- evtl drucken:
- WINDOW VAR w :: window(46,18,22,3);
- cursor off;
- outframe (w);
- IF yes (w, "Auskunft drucken", FALSE)
- THEN drucke (headline (f))
- FI;
- cursor on;
- forget (headline (f), quiet).
-END PROC auskunft;
-PROC rechnungskopf:
- pruefe abbruch;
- IF kundennummer ist eingelesen AND nachname <> ""
- THEN ueberschrift := " RECHNUNG für " + anrede + (vorname SUB 1) +
- ". " + text (nachname, 10)
- ELSE ueberschrift := " RECHNUNG"
-
- FI;
- summe := 0.0;
- schreibe ueberschrift auf bildschirm;
- schreibe in rechnungsdatei;
- IF codekartenleser aktiviert
- THEN lasse karte entfernen (FALSE)
- FI.
- schreibe in rechnungsdatei:
- sysout ("WARENHAUS:Rechnung");
- line;
- put (ueberschrift);
- line;
- put (" ==================================");
- line (2);
- sysout ("").
- anrede:
- IF geschlecht = "m"
- THEN "Herrn "
- ELIF geschlecht = "w"
- THEN "Frau "
- ELSE ""
-
- FI.
-END PROC rechnungskopf;
-PROC schreibe ueberschrift auf bildschirm:
- INT VAR spalte, zeile;
- get cursor (w3, spalte, zeile);
- IF zeile = 1
- THEN auf neuem blatt := TRUE;
- schreibe in w3k
- ELSE auf neuem blatt := FALSE;
- schreibe in w3
- FI.
- schreibe in w3:
- IF remaining lines (w3) < 7
- THEN page (w3);
- page (w3k);
- auf neuem blatt := TRUE;
- schreibe in w3k
- ELSE line (w3);
- out (w3, ueberschrift);
-
- line (w3);
- out (w3, " ==================================");
- line (w3, 2)
- FI.
- schreibe in w3k:
- out (w3k, ueberschrift);
- line (w3k);
- out (w3k, " ==================================").
-END PROC schreibe ueberschrift auf bildschirm;
-PROC artikel kaufen:
- pruefe abbruch;
- IF artikelnummer ist eingelesen
- THEN kauf registrieren
- ELSE setze variable in anfangszustand;
- errorstop ("Es ist keine Artikelnummer eingelesen worden!")
-
- FI;
- IF codekartenleser aktiviert
- THEN lasse karte entfernen (FALSE)
- FI.
- kauf registrieren:
- artikelnummer ist eingelesen := FALSE;
- IF bestand > 0
- THEN artikel auf rechnung setzen;
- registrieren
- ELSE page (w2); out (""7"");
- IF artikelname = ""
- THEN out (w2, " Artikel hier nicht erhältlich!")
- ELSE out (w2, " Der Artikel ist ausverkauft!")
- FI;
- line (w2, 2);
- out (w2, " Weiter durch Tippen einer Taste");
-
- pause
- FI.
- registrieren:
- IF kundennummer ist eingelesen
- THEN registriere verkauf (kundennummer, artikelnummer)
- ELSE registriere verkauf (min kundennummer - 1, artikelnummer)
- FI.
- artikel auf rechnung setzen:
- summe INCR preis;
- IF remaining lines (w3) < 3
- THEN beginne wieder oben
- FI;
- out (w3, " " + text (artikelname, 15) + text (preis, 12, 2));
- line (w3);
- sysout ("WARENHAUS:Rechnung");
- put (" " + text (artikelname, 15) + text preis);
-
- line;
- sysout ("").
- beginne wieder oben:
- IF auf neuem blatt
- THEN page (w3)
- ELSE schreibe ueberschrift auf bildschirm
- FI.
- text preis:
- TEXT VAR hilfe :: text (preis, 12, 2);
- INT VAR vor punkt :: pos (hilfe, ".") - 1;
- IF (hilfe SUB vor punkt) = " "
- THEN change (hilfe, vor punkt, vor punkt, "0")
- FI;
- hilfe.
-END PROC artikel kaufen;
-PROC abrechnung:
- pruefe abbruch;
- schreibe summe auf bildschirm;
-
- schreibe summe in rechnungsdatei;
- setze variable zurueck;
- frage ob drucken;
- IF codekartenleser aktiviert
- THEN lasse karte entfernen (FALSE)
- FI.
- schreibe summe auf bildschirm:
- IF remaining lines (w3) < 2
- THEN beginne wieder oben
- FI;
- put (w3, " -------------");
- line (w3);
- put (w3, " Summe " + text (summe, 12, 2));
- line (w3).
- beginne wieder oben:
- IF auf neuem blatt
- THEN page (w3)
- ELSE schreibe ueberschrift auf bildschirm
-
- FI.
- schreibe summe in rechnungsdatei:
- sysout ("WARENHAUS:Rechnung");
- put (" -------------");
- line;
- put (" Summe " + text (summe, 12, 2));
- line;
- sysout ("").
- setze variable zurueck:
- BOOL VAR alter wert :: ende gewuenscht;
- setze variable in anfangszustand;
- ende gewuenscht := alter wert.
- frage ob drucken:
- IF yes (w2, "Rechnung drucken", FALSE)
- THEN cursor (3, 22);
- disable stop;
- print ("WARENHAUS:Rechnung");
-
- IF is error THEN clear error FI;
- enable stop
- FI.
-END PROC abrechnung;
-PROC artikeldaten eingeben:
- pruefe abbruch;
- IF artikelnummer ist eingelesen
- THEN lies artikeldaten ein;
- artikeldaten speichern
- ELSE setze variable in anfangszustand;
- errorstop ("Es ist keine Artikelnummer eingelesen worden!")
- FI.
- lies artikeldaten ein:
- zeige artikeldaten;
- IF artikelname <> ""
- THEN vielleicht schon fertig
- ELSE page (w2)
-
- FI;
- REP line (w2);
- put (w2, " Artikeldaten eingeben");
- eingabe
- UNTIL yes (w2, "Alles richtig", TRUE)
- PER;
- artikelnummer ist eingelesen := FALSE.
- vielleicht schon fertig:
- IF yes (w2, "Alles richtig", TRUE)
- THEN artikelnummer ist eingelesen := FALSE;
- IF codekartenleser aktiviert
- THEN lasse karte entfernen (FALSE)
- FI;
- LEAVE artikeldaten eingeben
- FI.
- eingabe:
- name holen;
-
- preis holen;
- mindestbestand holen;
- bestand holen.
- name holen:
- REP cursor (w1, 19, 6);
- editget (w1, artikelname, 80, 80, "", abbruchzeichen + stopzeichen,
- exit char);
- teste auf abbruch
- UNTIL artikelname <> "" PER.
- preis holen:
- hilfstext := text (preis, pos(text(preis),".") + 2, 2);
- change (hilfstext, " ", "0");
- REP cursor (w1, 19, 8);
- editget (w1, hilfstext, 8, 8, "", abbruch zeichen + stopzeichen,
-
- exit char);
- change (hilfstext, ",", ".");
- preis := round (real (hilfstext), 2);
- teste auf abbruch
- UNTIL preis >= 0.0 PER.
- mindestbestand holen:
- hilfstext := text (mindestbestand);
- REP cursor (w1, 19, 10);
- editget (w1, hilfstext, 4, 4, "", abbruch zeichen + stopzeichen,
- exit char);
- mindestbestand := int (hilfstext);
- teste auf abbruch
- UNTIL mindestbestand >= 0 PER.
-
- bestand holen:
- hilfstext := text (bestand);
- REP cursor (w1, 19, 12);
- editget (w1, hilfstext, 4, 4, "", abbruch zeichen + stopzeichen,
- exit char);
- bestand := int (hilfstext);
- teste auf abbruch
- UNTIL bestand >= 0 PER.
- teste auf abbruch:
- IF exit char = esc + stopzeichen
- THEN ende gewuenscht := TRUE
- ELIF exit char = esc + abbruchzeichen
- THEN setze variable in anfangszustand;
- errorstop (1951, "Programm - Abbruch durch <ESC><"
-
- + abbruchzeichen + ">")
- FI.
-END PROC artikeldaten eingeben;
-PROC kundendaten eingeben:
- IF kundennummer ist eingelesen
- THEN lies kundendaten ein;
- kundendaten speichern
- ELSE setze variable in anfangszustand;
- errorstop ("Es ist keine Kundennummer eingelesen worden!")
- FI.
- lies kundendaten ein:
- zeige kundendaten;
- IF nachname <> ""
- THEN vielleicht schon fertig
- ELSE page (w2)
- FI;
- REP line (w2);
-
- put (w2, " Kundendaten eingeben");
- eingabe
- UNTIL yes (w2, "Alles richtig", TRUE) PER;
- kundennummer ist eingelesen := FALSE.
- vielleicht schon fertig:
- IF yes (w2, "Alles richtig", TRUE)
- THEN kundennummer ist eingelesen := FALSE;
- IF codekartenleser aktiviert
- THEN lasse karte entfernen (FALSE)
- FI;
- LEAVE kundendaten eingeben
- FI.
- eingabe:
- nachname holen;
- vorname holen;
- geschlecht holen.
-
- nachname holen:
- REP cursor (w1, 19, 6);
- editget (w1, nachname, 80, 80, "", abbruch zeichen + stopzeichen,
- exit char);
- teste auf abbruch
- UNTIL nachname <> "" PER.
- vorname holen:
- REP cursor (w1, 19, 8);
- editget (w1, vorname, 80, 80, "", abbruch zeichen + stopzeichen,
- exit char);
- teste auf abbruch
- UNTIL vorname <> "" PER.
- geschlecht holen:
- REP cursor (w1, 19, 10);
-
- editget (w1, geschlecht, 9, 9, "", abbruchzeichen + stopzeichen,
- exit char);
- geschlecht := geschlecht SUB 1;
- teste auf abbruch
- UNTIL geschlecht = "m" OR geschlecht = "w" PER.
- teste auf abbruch:
- IF exit char = esc + stopzeichen
- THEN ende gewuenscht := TRUE
- ELIF exit char = esc + abbruchzeichen
- THEN setze variable in anfangszustand;
- errorstop (1951, "Programm - Abbruch durch <ESC><"
-
- + abbruchzeichen + ">")
- FI.
-END PROC kundendaten eingeben;
-PROC drucke (TEXT CONST name):
- TEXT VAR zeile;
- FILE VAR f :: sequential file (modify, name);
- to line (f, 1);
- insert record (f);
- write record (f, "#center#" + name);
- down (f);
- insert record (f);
- down (f);
- WHILE NOT eof (f) REP
- read record (f, zeile);
- IF pos (zeile, ""15"") > 0
- THEN change (zeile, ""15"", "#on(""r"")#");
- change (zeile, ""14"", "#off(""r"")#");
-
- write record (f, zeile)
- FI;
- down (f)
- PER;
- cursor (3, 22);
- print (name)
-END PROC drucke;
-PROC stop w2:
- cursor off;
- page (w2);
- out (w2," Zum Weitermachen bitte");line(w2);
- out (w2," irgendeine Taste tippen!");
- pause;
- page (w2);
- cursor on
-END PROC stop w2;
-BOOL PROC yes (WINDOW VAR w, TEXT CONST frage, BOOL CONST default):
- BOOL VAR antwort :: default;
- TEXT VAR taste;
- INT CONST ja pos :: (areaxsize (w) - 9) DIV 2;
- cursor off;
- cursor (42,24); out ("Ändern: <Pfeile> Bestätigen: <RETURN>");
-
- page (w);
- out (w, center (w, frage + " ?"));
- cursor (w, ja pos, 3);
- IF default
- THEN out (w, ""15"Ja "14" Nein ");
- cursor (w, ja pos, 3)
- ELSE out (w, " Ja "15"Nein "14"");
- cursor (w, ja pos + 5, 3)
- FI;
- tastendruck auswerten;
- page (w);
- cursor (42,24); out (""5"");
- cursor on;
- antwort.
- tastendruck auswerten:
- REP inchar (taste);
- SELECT code (taste) OF CASE 2, 8 : position aendern
- CASE 13 : LEAVE tastendruck auswerten
-
- CASE 74, 106 : antwort := TRUE; (*Jj*)
- LEAVE tastendruck auswerten
- CASE 78, 110 : antwort := FALSE; (*Nn*)
- LEAVE tastendruck auswerten
- OTHERWISE out (""7"") END SELECT
- PER.
- position aendern:
- IF antwort THEN antwort := FALSE;
- cursor (w, ja pos, 3);
- out (w, " Ja "15"Nein "14"");
-
- cursor (w, ja pos + 5, 3)
- ELSE antwort := TRUE;
- cursor (w, ja pos, 3);
- out (w, ""15"Ja "14" Nein ");
- cursor (w, ja pos, 3)
- FI.
-END PROC yes;
-PROC tastatureingabe (BOOL CONST erwuenscht, INT VAR rueckmeldung):
- IF erwuenscht
- THEN rueckmeldung := 0;
- codekartenleser aktiviert := FALSE;
- schliesse interface
- ELSE oeffne interface (rueckmeldung);
- IF rueckmeldung >= 0
-
- THEN codekartenleser aktiviert := TRUE
- ELSE codekartenleser aktiviert := FALSE
- FI
- FI
-END PROC tastatureingabe;
-BOOL PROC eingabe mit codekartenleser:
- codekartenleser aktiviert
-END PROC eingabe mit codekartenleser;
-PROC dezimalwert lesen:
- pruefe abbruch;
- IF codekartenleser aktiviert
- THEN interfacewerte zeigen
- ELSE setze variable in anfangszustand;
- errorstop ("Eingabeart ist auf Tastatur eingestellt!")
- FI.
- interfacewerte zeigen:
-
- cursor off;
- fenster putzen;
- line (w1, 4); line (w2);
- out (w1, " Dezimalwert :");
- out (w2, " Lesen beenden mit <ESC><q>");
- ende gewuenscht := FALSE;
- REP pruefe abbruch;
- cursor (w1, 17, 5);
- out (w1, text (wert von interface, 3))
- UNTIL ende gewuenscht PER;
- page (w2); cursor (w1, 1, 5); out (" ");
- cursor on.
-END PROC dezimalwert lesen;
-PROC bitmuster lesen:
- pruefe abbruch;
- IF codekartenleser aktiviert
-
- THEN interfacewerte zeigen
- ELSE setze variable in anfangszustand;
- errorstop ("Eingabeart ist auf Tastatur eingestellt!")
- FI.
- interfacewerte zeigen:
- cursor off;
- fenster putzen;
- line (w1, 4); line (w2);
- out (w1, " Bitmuster :");
- out (w2, " Lesen beenden mit <ESC><q>");
- ende gewuenscht := FALSE;
- REP pruefe abbruch;
- cursor (w1, 16, 5);
- out (w1, bitmuster (wert von interface))
- UNTIL ende gewuenscht PER;
- page (w2); cursor (w1, 1, 5); out (" ");
-
- cursor on.
-END PROC bitmuster lesen;
-TEXT PROC bitmuster (INT CONST wert):
- INT VAR bitnr;
- TEXT VAR muster :: "";
- FOR bitnr FROM 7 DOWNTO 0 REP
- IF bit (wert, bitnr)
- THEN muster CAT "I"
- ELSE muster CAT "O"
- FI
- PER;
- muster
-END PROC bitmuster;
-PROC lasse karte entfernen (BOOL CONST mit rahmen):
- IF wert von interface <> 255
- THEN cursor off;
- IF mit rahmen THEN regeneriere w2 ELSE page (w2) FI;
- line (w2);
- out (w2, " Bitte Karte entfernen");
-
- REP pruefe abbruch
- UNTIL (wert von interface = 255) OR ende gewuenscht PER;
- cursor on
- FI
-END PROC lasse karte entfernen;
-INT PROC gesicherter wert von interface (INT CONST von, bis,
- TEXT CONST kartenart):
- INT VAR wert, zaehler;
- ende gewuenscht := FALSE;
- cursor off;
- REP out (w2, " Bitte " + kartenart + " einschieben");
- line (w2, 2);
- out (w2, " Stoptaste: <ESC><" + stopzeichen + ">");
- cursor (79, 24);
-
- gesicherten wert einlesen;
- cursor (w1, 19, 2);
- out (w1, text (wert, 3));
- IF wert < von OR wert > bis
- THEN warnung
- FI
- UNTIL wert >= von AND wert <= bis PER;
- cursor on;
- wert.
- gesicherten wert einlesen:
- REP zaehler := 0;
- warte auf karte;
- wert := wert von interface;
- lies wert
- UNTIL wert gesichert AND wert <> 255 PER.
- warte auf karte:
- REP beachte esc q
- UNTIL wert von interface <> 255 PER.
- beachte esc q:
-
- pruefe abbruch;
- IF ende gewuenscht
- THEN cursor on;
- LEAVE gesicherter wert von interface WITH 0
- FI.
- lies wert:
- REP beachte esc q;
- IF wert = wert von interface
- THEN zaehler INCR 1
- ELSE LEAVE lies wert
- FI
- UNTIL wert gesichert PER.
- wert gesichert: zaehler = sicherheit.
- warnung:
- page (w2); out (""7"");
- out (w2, " Dies ist keine " + kartenart + "!");
- line (w2, 2);
- out (w2, " Bitte Karte entfernen");
-
- REP beachte esc q
- UNTIL wert von interface = 255 PER;
- page (w2).
-END PROC gesicherter wert von interface
-END PACKET ls warenhaus 3
-
-