(* ********************************************************** ********************************************************** ** ** ** 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: <" + 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 <" + 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: <" + 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 <" + 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 ; Cursor bewegen: "); 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 ; Cursor bewegen: "); 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 <" + 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 <" + 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: Bestätigen: "); 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 "); 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 "); 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: <" + 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