summaryrefslogtreecommitdiff
path: root/dialog/ls-DIALOG 3
diff options
context:
space:
mode:
Diffstat (limited to 'dialog/ls-DIALOG 3')
-rw-r--r--dialog/ls-DIALOG 3414
1 files changed, 391 insertions, 23 deletions
diff --git a/dialog/ls-DIALOG 3 b/dialog/ls-DIALOG 3
index dce6507..2460820 100644
--- a/dialog/ls-DIALOG 3
+++ b/dialog/ls-DIALOG 3
@@ -22,27 +22,395 @@
*)
-PACKET ls dialog 3 DEFINES{} WINDOW, :=, window,{} show, page, erase,{} line, remaining lines,{} cursor, get cursor,{} out frame, out menuframe,{} out, put, putline, editget,{} get, getline, yes, no,{} edit, center, stop,{} area, areax, areay,{} areaxsize, areaysize:{}LET piep = ""7"",{} cr = ""13"";{}LET janeinkette = "jJyYnN",{} blank = " ",{} niltext = "";{}TYPE WINDOW = STRUCT (AREA fenster,{}
- INT cspalte, czeile, belegbare zeilen,{} BOOL fensterende erreicht);{}ROW 3 TEXT CONST aussage :: ROW 3 TEXT : ({} " 'Window' ungültig!",{} " (j/n) ?",{} " Zum Weitermachen bitte irgendeine Taste tippen!"{} );{}TEXT VAR number word, exit char;{}OP := (WINDOW VAR links, WINDOW CONST rechts):{} CONCR (links) := CONCR (rechts){}END OP :=;{}WINDOW PROC window (INT CONST x, y, xsize, ysize):{} WINDOW VAR w;{} fill (w.fenster, x, y, xsize, ysize);{} IF fenster ungueltig (w){}
- THEN errorstop (aussage [1]){} FI;{} initialize (w);{} w{}END PROC window;{}PROC initialize (WINDOW VAR w):{} w.czeile := 1;{} w.cspalte := 1;{} w.fensterende erreicht := FALSE;{} w.belegbare zeilen := areaysize (w.fenster){}END PROC initialize;{}BOOL PROC fenster ungueltig (WINDOW CONST w):{} IF areax (w.fenster) < 1 COR areax (w.fenster) > 79{} COR areay (w.fenster) < 1 COR areay (w.fenster) > 24{} COR areaxsize (w.fenster) < 6 COR areaysize (w.fenster) < 3{}
- COR areax (w.fenster) + areaxsize (w.fenster) > 80{} COR areay (w.fenster) + areaysize (w.fenster) > 25{} THEN TRUE{} ELSE FALSE{} FI.{}END PROC fenster ungueltig;{}PROC show (WINDOW VAR w):{} zeige rahmen;{} fenster putzen.{} zeige rahmen:{} out frame (w.fenster).{} fenster putzen:{} page (w).{}END PROC show;{}PROC page (WINDOW VAR w):{} initialize (w);{} page (w, FALSE){}END PROC page;{}PROC page (WINDOW CONST w, BOOL CONST mit rahmen ):{} IF areax (w) = 1 AND areay (w) = 1 AND{}
- areaxsize (w) = 79 AND areaysize (w) = 24{} THEN page;{} ELSE loesche bereich{} FI.{} loesche bereich:{} IF mit rahmen{} THEN page (areax (w) - 1, areay (w) - 1,{} areaxsize (w) + 2, areaysize (w) + 2){} ELSE page (area (w)){} FI{}END PROC page;{}PROC erase (WINDOW VAR w):{} page (w, TRUE){}END PROC erase;{}PROC line (WINDOW VAR w):{} w.cspalte := 1;{} IF w.czeile < w.belegbare zeilen{} THEN w.czeile INCR 1;{} ELSE w.czeile := 1;{}
- w.fensterende erreicht := TRUE{} FI;{} cursor (w, w.cspalte, w.czeile){}END PROC line;{}PROC line (WINDOW VAR w, INT CONST anzahl):{} INT VAR i; FOR i FROM 1 UPTO anzahl REP line (w) PER{}END PROC line;{}INT PROC remaining lines (WINDOW CONST w):{} INT VAR spalte, zeile;{} get cursor (w, spalte, zeile);{} IF spalte = 0 OR zeile = 0{} THEN 0{} ELSE w.belegbare zeilen - w.czeile{} FI{}END PROC remaining lines;{}PROC cursor (WINDOW VAR w, INT CONST spalte, zeile):{} IF spalte < 1 OR zeile < 1 OR spalte > areaxsize (w) OR zeile > areaysize (w){}
- THEN page (w);{} ELSE w.cspalte := spalte; w.czeile := zeile;{} FI;{} cursor (w.fenster, w.cspalte, w.czeile){}END PROC cursor;{}PROC get cursor (WINDOW CONST w, INT VAR spalte, zeile):{} IF (w.cspalte < 1) OR (w.cspalte > areaxsize (w.fenster)){} OR{} (w.czeile < 1) OR (w.czeile > areaysize (w.fenster)){} THEN spalte := 0; zeile := 0{} ELSE spalte := w.cspalte; zeile := w.czeile{} FI{}END PROC get cursor;{}PROC out (WINDOW VAR w, TEXT CONST text):{}
- INT VAR restlaenge;{} IF (w.cspalte >= 1) AND (w.cspalte <= areaxsize (w.fenster)){} AND{} (w.czeile >= 1) AND (w.czeile <= w.belegbare zeilen){} THEN putze ggf fenster;{} cursor (w.fenster, w.cspalte, w.czeile);{} outtext (text, 1, textende);{} setze fenstercursor neu;{} setze ausgabe ggf in naechster zeile fort{} FI.{} putze ggf fenster:{} IF w.fensterende erreicht{} THEN page (w);{} w.fensterende erreicht := FALSE{}
- FI.{} textende:{} restlaenge := areaxsize (w.fenster) - w.cspalte + 1;{} min (length (text), restlaenge).{} setze fenstercursor neu:{} IF length (text) >= restlaenge{} THEN w.cspalte := 1;{} w.czeile INCR 1;{} schlage ggf neue seite auf{} ELSE w.cspalte INCR length (text){} FI.{} schlage ggf neue seite auf:{} IF w.czeile > w.belegbare zeilen{} THEN page (w);{} w.czeile := 1{} FI.{} setze ausgabe ggf in naechster zeile fort:{}
- IF length (text) > restlaenge{} THEN out (w, subtext (text, restlaenge + 1)){} FI.{}END PROC out;{}PROC out frame (WINDOW VAR w):{} out frame (area (w)){}END PROC out frame;{}PROC out menuframe (WINDOW VAR w):{} out menu frame (area (w)){}END PROC out menuframe;{}PROC put (WINDOW VAR w, TEXT CONST word):{} out (w, word); out (w, blank){}END PROC put;{}PROC put (WINDOW VAR w, INT CONST number):{} put (w, text (number)){}END PROC put;{}PROC put (WINDOW VAR w, REAL VAR number):{} put (w, text (number)){}
-END PROC put;{}PROC putline (WINDOW VAR w, TEXT CONST textline):{} out (w, textline); line (w){}END PROC putline;{}PROC editget (WINDOW VAR w, TEXT VAR ausgabe,{} INT CONST max laenge, scroll,{} TEXT CONST sep, res, TEXT VAR exit char):{} INT VAR spalte, zeile;{} ggf zur naechsten zeile;{} get cursor (spalte, zeile); cursor on; cursor (spalte, zeile);{} editget (ausgabe, max laenge, min (scroll, restlaenge),{} sep, res, exitchar);{} get cursor (spalte, zeile); cursor off; cursor (spalte, zeile).{}
- ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{} restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{}END PROC editget;{}PROC editget (WINDOW VAR w, TEXT VAR ausgabe):{} TEXT VAR dummy;{} editget (w, ausgabe, 79, 79, "", "", dummy){}END PROC editget;{}PROC get (WINDOW VAR w, TEXT VAR word):{} INT VAR spa, zei;{} ggf zur naechsten zeile;{} get cursor (spa, zei); cursor on; cursor (spa, zei);{} REP{} word := "";{} editget (word, maxtextlength, restlaenge, " ", "", exit char);{}
- out (w, subtext (word, 1, restlaenge));{} IF compress (word) <> ""{} THEN echoe exit char (w){} FI{} UNTIL word <> niltext AND word <> blank PER;{} get cursor (spa, zei); cursor off; cursor (spa, zei);{} delete leading blanks.{} ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{} restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{} delete leading blanks:{} WHILE (word SUB 1) = blank REP word := subtext (word, 2) PER.{}END PROC get;{}PROC get (WINDOW VAR w, TEXT VAR word, TEXT CONST separator):{}
- INT VAR spa, zei;{} ggf zur naechsten zeile;{} get cursor (spa, zei); cursor on; cursor (spa, zei);{} REP{} word := "";{} editget (word, maxtextlength, restlaenge, separator, "", exit char);{} out (w, subtext (word, 1, restlaenge));{} echoe exit char (w);{} UNTIL word <> niltext AND word <> blank PER;{} get cursor (spa, zei); cursor off; cursor (spa, zei).{} ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{} restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{}
-END PROC get;{}PROC get (WINDOW VAR w, TEXT VAR word, INT CONST length):{} INT VAR spa, zei;{} ggf zur naechsten zeile;{} get cursor (spa, zei); cursor on; cursor (spa, zei);{} REP{} word := "";{} editget (word, maxtextlength, laenge, "", "", exit char);{} out (w, subtext (word, 1, laenge));{} echoe exit char (w){} UNTIL word <> niltext AND word <> blank PER;{} get cursor (spa, zei); cursor off; cursor (spa, zei).{} ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{}
- restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{} laenge:{} min (length, restlaenge).{}END PROC get;{}PROC get (WINDOW VAR w, INT VAR number):{} get (w, number word);{} number := int (number word){}END PROC get;{}PROC get (WINDOW VAR w, REAL VAR number):{} get (w, number word);{} number := real (number word){}END PROC get;{}PROC getline (WINDOW VAR w, TEXT VAR textline):{} INT VAR spa, zei;{} ggf zur naechsten zeile;{} get cursor (spa, zei); cursor on; cursor (spa, zei);{} REP{}
- textline := "";{} editget (textline, maxtextlength, restlaenge, "", "", exit char);{} out (w, subtext (word, 1, restlaenge));{} echoe exit char (w);{} UNTIL textline <> niltext AND textline <> blank PER;{} get cursor (spa, zei); cursor off; cursor (spa, zei).{} ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{} restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{}END PROC getline;{}PROC echoe exit char (WINDOW VAR fenster):{} IF exit char = cr{} THEN line (fenster){}
- ELSE out (fenster, exit char){} FI{}END PROC echoe exit char;{}TEXT PROC center (WINDOW CONST w, TEXT CONST text):{} IF length (text) >= areaxsize (w.fenster){} THEN subtext (text, 1, areaxsize (w.fenster)){} ELSE center (areaxsize (w.fenster), text){} FI{}END PROC center;{}BOOL PROC yes (WINDOW VAR w, TEXT CONST frage):{} TEXT VAR zeichen, interne frage :: frage;{} interne frage CAT aussage [2];{} wechsel ggf auf neue seite;{} out (w, interne frage);{} hole eingabezeichen;{}
- werte zeichen aus.{} wechsel ggf auf neue seite:{} IF remaining lines (w) < 1{} THEN page (w){} FI.{} hole eingabezeichen:{} cursor on; clear buffer;{} REP{} inchar (zeichen);{} piepse ggf{} UNTIL pos (janeinkette, zeichen) > 0 PER;{} out (w, blank + zeichen);{} cursor off; line (w).{} piepse ggf:{} IF pos (janeinkette, zeichen) = 0 THEN out (piep) FI.{} werte zeichen aus:{} IF pos (janeinkette, zeichen) < 5{} THEN TRUE{} ELSE FALSE{} FI.{}
-END PROC yes;{}PROC edit (WINDOW VAR w, FILE VAR f):{} out frame (w.fenster);{} loesche rechte spalten (w);{} cursor on;{} edit (f, areax (w.fenster), areay (w.fenster),{} areaxsize (w.fenster) - 1, areaysize (w.fenster));{} cursor off{}END PROC edit;{}PROC edit (WINDOW VAR w, TEXT CONST dateiname):{} FILE VAR f :: sequential file (modify, dateiname);{} to line (f, 1);{} edit (w, f){}END PROC edit;{}PROC show (WINDOW VAR w, FILE VAR f):{} out frame (w.fenster);{} loesche rechte spalten (w);{}
- open editor (groesster editor + 1, f, FALSE,{} areax (w.fenster), areay (w.fenster),{} areaxsize (w.fenster) - 1, areaysize (w.fenster));{} cursor on;{} edit (groesster editor, "eqvw19dpgn"9"",{} PROC (TEXT CONST) std kommando interpreter);{} cursor off{}END PROC show;{}PROC show (WINDOW VAR w, TEXT CONST dateiname):{} FILE VAR f :: sequential file (modify, dateiname);{} to line (f, 1);{} show (w, f){}END PROC show;{}PROC loesche rechte spalten (WINDOW VAR w):{}
- INT VAR i;{} FOR i FROM 1 UPTO areaysize (w.fenster) REP{} cursor (w, areaxsize (w.fenster) - 2, i); out (3 * blank){} PER{}END PROC loesche rechte spalten;{}BOOL PROC no (WINDOW VAR w, TEXT CONST frage):{} NOT yes (w, frage){}END PROC no;{}PROC stop (WINDOW VAR w):{} stop (w, 2){}END PROC stop;{}PROC stop (WINDOW VAR w, INT CONST zeilenzahl):{} INT VAR i; FOR i FROM 1 UPTO zeilenzahl REP line (w) PER;{} out (w, aussage [3]);{} pause{}END PROC stop;{}AREA PROC area (WINDOW CONST w):{}
- w.fenster{}END PROC area;{}INT PROC areax (WINDOW CONST w):{} areax (w.fenster){}END PROC areax;{}INT PROC areay (WINDOW CONST w):{} areay (w.fenster){}END PROC areay;{}INT PROC areaxsize (WINDOW CONST w):{} areaxsize (w.fenster){}END PROC areaxsize;{}INT PROC areaysize (WINDOW CONST w):{} areaysize (w.fenster){}END PROC areaysize;{}END PACKET ls dialog 3;{}
+PACKET ls dialog 3 DEFINES
+ WINDOW, :=, window,
+ show, page, erase,
+ line, remaining lines,
+ cursor, get cursor,
+ out frame, out menuframe,
+ out, put, putline, editget,
+ get, getline, yes, no,
+ edit, center, stop,
+ area, areax, areay,
+ areaxsize, areaysize:
+LET piep = ""7"",
+ cr = ""13"";
+LET janeinkette = "jJyYnN",
+ blank = " ",
+ niltext = "";
+TYPE WINDOW = STRUCT (AREA fenster,
+
+ INT cspalte, czeile, belegbare zeilen,
+ BOOL fensterende erreicht);
+ROW 3 TEXT CONST aussage :: ROW 3 TEXT : (
+ " 'Window' ungültig!",
+ " (j/n) ?",
+ " Zum Weitermachen bitte irgendeine Taste tippen!"
+ );
+TEXT VAR number word, exit char;
+OP := (WINDOW VAR links, WINDOW CONST rechts):
+ CONCR (links) := CONCR (rechts)
+END OP :=;
+WINDOW PROC window (INT CONST x, y, xsize, ysize):
+ WINDOW VAR w;
+ fill (w.fenster, x, y, xsize, ysize);
+ IF fenster ungueltig (w)
+
+ THEN errorstop (aussage [1])
+ FI;
+ initialize (w);
+ w
+END PROC window;
+PROC initialize (WINDOW VAR w):
+ w.czeile := 1;
+ w.cspalte := 1;
+ w.fensterende erreicht := FALSE;
+ w.belegbare zeilen := areaysize (w.fenster)
+END PROC initialize;
+BOOL PROC fenster ungueltig (WINDOW CONST w):
+ IF areax (w.fenster) < 1 COR areax (w.fenster) > 79
+ COR areay (w.fenster) < 1 COR areay (w.fenster) > 24
+ COR areaxsize (w.fenster) < 6 COR areaysize (w.fenster) < 3
+
+ COR areax (w.fenster) + areaxsize (w.fenster) > 80
+ COR areay (w.fenster) + areaysize (w.fenster) > 25
+ THEN TRUE
+ ELSE FALSE
+ FI.
+END PROC fenster ungueltig;
+PROC show (WINDOW VAR w):
+ zeige rahmen;
+ fenster putzen.
+ zeige rahmen:
+ out frame (w.fenster).
+ fenster putzen:
+ page (w).
+END PROC show;
+PROC page (WINDOW VAR w):
+ initialize (w);
+ page (w, FALSE)
+END PROC page;
+PROC page (WINDOW CONST w, BOOL CONST mit rahmen ):
+ IF areax (w) = 1 AND areay (w) = 1 AND
+
+ areaxsize (w) = 79 AND areaysize (w) = 24
+ THEN page;
+ ELSE loesche bereich
+ FI.
+ loesche bereich:
+ IF mit rahmen
+ THEN page (areax (w) - 1, areay (w) - 1,
+ areaxsize (w) + 2, areaysize (w) + 2)
+ ELSE page (area (w))
+ FI
+END PROC page;
+PROC erase (WINDOW VAR w):
+ page (w, TRUE)
+END PROC erase;
+PROC line (WINDOW VAR w):
+ w.cspalte := 1;
+ IF w.czeile < w.belegbare zeilen
+ THEN w.czeile INCR 1;
+ ELSE w.czeile := 1;
+
+ w.fensterende erreicht := TRUE
+ FI;
+ cursor (w, w.cspalte, w.czeile)
+END PROC line;
+PROC line (WINDOW VAR w, INT CONST anzahl):
+ INT VAR i; FOR i FROM 1 UPTO anzahl REP line (w) PER
+END PROC line;
+INT PROC remaining lines (WINDOW CONST w):
+ INT VAR spalte, zeile;
+ get cursor (w, spalte, zeile);
+ IF spalte = 0 OR zeile = 0
+ THEN 0
+ ELSE w.belegbare zeilen - w.czeile
+ FI
+END PROC remaining lines;
+PROC cursor (WINDOW VAR w, INT CONST spalte, zeile):
+ IF spalte < 1 OR zeile < 1 OR spalte > areaxsize (w) OR zeile > areaysize (w)
+
+ THEN page (w);
+ ELSE w.cspalte := spalte; w.czeile := zeile;
+ FI;
+ cursor (w.fenster, w.cspalte, w.czeile)
+END PROC cursor;
+PROC get cursor (WINDOW CONST w, INT VAR spalte, zeile):
+ IF (w.cspalte < 1) OR (w.cspalte > areaxsize (w.fenster))
+ OR
+ (w.czeile < 1) OR (w.czeile > areaysize (w.fenster))
+ THEN spalte := 0; zeile := 0
+ ELSE spalte := w.cspalte; zeile := w.czeile
+ FI
+END PROC get cursor;
+PROC out (WINDOW VAR w, TEXT CONST text):
+
+ INT VAR restlaenge;
+ IF (w.cspalte >= 1) AND (w.cspalte <= areaxsize (w.fenster))
+ AND
+ (w.czeile >= 1) AND (w.czeile <= w.belegbare zeilen)
+ THEN putze ggf fenster;
+ cursor (w.fenster, w.cspalte, w.czeile);
+ outtext (text, 1, textende);
+ setze fenstercursor neu;
+ setze ausgabe ggf in naechster zeile fort
+ FI.
+ putze ggf fenster:
+ IF w.fensterende erreicht
+ THEN page (w);
+ w.fensterende erreicht := FALSE
+
+ FI.
+ textende:
+ restlaenge := areaxsize (w.fenster) - w.cspalte + 1;
+ min (length (text), restlaenge).
+ setze fenstercursor neu:
+ IF length (text) >= restlaenge
+ THEN w.cspalte := 1;
+ w.czeile INCR 1;
+ schlage ggf neue seite auf
+ ELSE w.cspalte INCR length (text)
+ FI.
+ schlage ggf neue seite auf:
+ IF w.czeile > w.belegbare zeilen
+ THEN page (w);
+ w.czeile := 1
+ FI.
+ setze ausgabe ggf in naechster zeile fort:
+
+ IF length (text) > restlaenge
+ THEN out (w, subtext (text, restlaenge + 1))
+ FI.
+END PROC out;
+PROC out frame (WINDOW VAR w):
+ out frame (area (w))
+END PROC out frame;
+PROC out menuframe (WINDOW VAR w):
+ out menu frame (area (w))
+END PROC out menuframe;
+PROC put (WINDOW VAR w, TEXT CONST word):
+ out (w, word); out (w, blank)
+END PROC put;
+PROC put (WINDOW VAR w, INT CONST number):
+ put (w, text (number))
+END PROC put;
+PROC put (WINDOW VAR w, REAL VAR number):
+ put (w, text (number))
+
+END PROC put;
+PROC putline (WINDOW VAR w, TEXT CONST textline):
+ out (w, textline); line (w)
+END PROC putline;
+PROC editget (WINDOW VAR w, TEXT VAR ausgabe,
+ INT CONST max laenge, scroll,
+ TEXT CONST sep, res, TEXT VAR exit char):
+ INT VAR spalte, zeile;
+ ggf zur naechsten zeile;
+ get cursor (spalte, zeile); cursor on; cursor (spalte, zeile);
+ editget (ausgabe, max laenge, min (scroll, restlaenge),
+ sep, res, exitchar);
+ get cursor (spalte, zeile); cursor off; cursor (spalte, zeile).
+
+ ggf zur naechsten zeile:
+ IF restlaenge < 5 THEN line (w) FI.
+ restlaenge:
+ areaxsize (w.fenster) - w.cspalte - 1.
+END PROC editget;
+PROC editget (WINDOW VAR w, TEXT VAR ausgabe):
+ TEXT VAR dummy;
+ editget (w, ausgabe, 79, 79, "", "", dummy)
+END PROC editget;
+PROC get (WINDOW VAR w, TEXT VAR word):
+ INT VAR spa, zei;
+ ggf zur naechsten zeile;
+ get cursor (spa, zei); cursor on; cursor (spa, zei);
+ REP
+ word := "";
+ editget (word, maxtextlength, restlaenge, " ", "", exit char);
+
+ out (w, subtext (word, 1, restlaenge));
+ IF compress (word) <> ""
+ THEN echoe exit char (w)
+ FI
+ UNTIL word <> niltext AND word <> blank PER;
+ get cursor (spa, zei); cursor off; cursor (spa, zei);
+ delete leading blanks.
+ ggf zur naechsten zeile:
+ IF restlaenge < 5 THEN line (w) FI.
+ restlaenge:
+ areaxsize (w.fenster) - w.cspalte - 1.
+ delete leading blanks:
+ WHILE (word SUB 1) = blank REP word := subtext (word, 2) PER.
+END PROC get;
+PROC get (WINDOW VAR w, TEXT VAR word, TEXT CONST separator):
+
+ INT VAR spa, zei;
+ ggf zur naechsten zeile;
+ get cursor (spa, zei); cursor on; cursor (spa, zei);
+ REP
+ word := "";
+ editget (word, maxtextlength, restlaenge, separator, "", exit char);
+ out (w, subtext (word, 1, restlaenge));
+ echoe exit char (w);
+ UNTIL word <> niltext AND word <> blank PER;
+ get cursor (spa, zei); cursor off; cursor (spa, zei).
+ ggf zur naechsten zeile:
+ IF restlaenge < 5 THEN line (w) FI.
+ restlaenge:
+ areaxsize (w.fenster) - w.cspalte - 1.
+
+END PROC get;
+PROC get (WINDOW VAR w, TEXT VAR word, INT CONST length):
+ INT VAR spa, zei;
+ ggf zur naechsten zeile;
+ get cursor (spa, zei); cursor on; cursor (spa, zei);
+ REP
+ word := "";
+ editget (word, maxtextlength, laenge, "", "", exit char);
+ out (w, subtext (word, 1, laenge));
+ echoe exit char (w)
+ UNTIL word <> niltext AND word <> blank PER;
+ get cursor (spa, zei); cursor off; cursor (spa, zei).
+ ggf zur naechsten zeile:
+ IF restlaenge < 5 THEN line (w) FI.
+
+ restlaenge:
+ areaxsize (w.fenster) - w.cspalte - 1.
+ laenge:
+ min (length, restlaenge).
+END PROC get;
+PROC get (WINDOW VAR w, INT VAR number):
+ get (w, number word);
+ number := int (number word)
+END PROC get;
+PROC get (WINDOW VAR w, REAL VAR number):
+ get (w, number word);
+ number := real (number word)
+END PROC get;
+PROC getline (WINDOW VAR w, TEXT VAR textline):
+ INT VAR spa, zei;
+ ggf zur naechsten zeile;
+ get cursor (spa, zei); cursor on; cursor (spa, zei);
+ REP
+
+ textline := "";
+ editget (textline, maxtextlength, restlaenge, "", "", exit char);
+ out (w, subtext (word, 1, restlaenge));
+ echoe exit char (w);
+ UNTIL textline <> niltext AND textline <> blank PER;
+ get cursor (spa, zei); cursor off; cursor (spa, zei).
+ ggf zur naechsten zeile:
+ IF restlaenge < 5 THEN line (w) FI.
+ restlaenge:
+ areaxsize (w.fenster) - w.cspalte - 1.
+END PROC getline;
+PROC echoe exit char (WINDOW VAR fenster):
+ IF exit char = cr
+ THEN line (fenster)
+
+ ELSE out (fenster, exit char)
+ FI
+END PROC echoe exit char;
+TEXT PROC center (WINDOW CONST w, TEXT CONST text):
+ IF length (text) >= areaxsize (w.fenster)
+ THEN subtext (text, 1, areaxsize (w.fenster))
+ ELSE center (areaxsize (w.fenster), text)
+ FI
+END PROC center;
+BOOL PROC yes (WINDOW VAR w, TEXT CONST frage):
+ TEXT VAR zeichen, interne frage :: frage;
+ interne frage CAT aussage [2];
+ wechsel ggf auf neue seite;
+ out (w, interne frage);
+ hole eingabezeichen;
+
+ werte zeichen aus.
+ wechsel ggf auf neue seite:
+ IF remaining lines (w) < 1
+ THEN page (w)
+ FI.
+ hole eingabezeichen:
+ cursor on; clear buffer;
+ REP
+ inchar (zeichen);
+ piepse ggf
+ UNTIL pos (janeinkette, zeichen) > 0 PER;
+ out (w, blank + zeichen);
+ cursor off; line (w).
+ piepse ggf:
+ IF pos (janeinkette, zeichen) = 0 THEN out (piep) FI.
+ werte zeichen aus:
+ IF pos (janeinkette, zeichen) < 5
+ THEN TRUE
+ ELSE FALSE
+ FI.
+
+END PROC yes;
+PROC edit (WINDOW VAR w, FILE VAR f):
+ out frame (w.fenster);
+ loesche rechte spalten (w);
+ cursor on;
+ edit (f, areax (w.fenster), areay (w.fenster),
+ areaxsize (w.fenster) - 1, areaysize (w.fenster));
+ cursor off
+END PROC edit;
+PROC edit (WINDOW VAR w, TEXT CONST dateiname):
+ FILE VAR f :: sequential file (modify, dateiname);
+ to line (f, 1);
+ edit (w, f)
+END PROC edit;
+PROC show (WINDOW VAR w, FILE VAR f):
+ out frame (w.fenster);
+ loesche rechte spalten (w);
+
+ open editor (groesster editor + 1, f, FALSE,
+ areax (w.fenster), areay (w.fenster),
+ areaxsize (w.fenster) - 1, areaysize (w.fenster));
+ cursor on;
+ edit (groesster editor, "eqvw19dpgn"9"",
+ PROC (TEXT CONST) std kommando interpreter);
+ cursor off
+END PROC show;
+PROC show (WINDOW VAR w, TEXT CONST dateiname):
+ FILE VAR f :: sequential file (modify, dateiname);
+ to line (f, 1);
+ show (w, f)
+END PROC show;
+PROC loesche rechte spalten (WINDOW VAR w):
+
+ INT VAR i;
+ FOR i FROM 1 UPTO areaysize (w.fenster) REP
+ cursor (w, areaxsize (w.fenster) - 2, i); out (3 * blank)
+ PER
+END PROC loesche rechte spalten;
+BOOL PROC no (WINDOW VAR w, TEXT CONST frage):
+ NOT yes (w, frage)
+END PROC no;
+PROC stop (WINDOW VAR w):
+ stop (w, 2)
+END PROC stop;
+PROC stop (WINDOW VAR w, INT CONST zeilenzahl):
+ INT VAR i; FOR i FROM 1 UPTO zeilenzahl REP line (w) PER;
+ out (w, aussage [3]);
+ pause
+END PROC stop;
+AREA PROC area (WINDOW CONST w):
+
+ w.fenster
+END PROC area;
+INT PROC areax (WINDOW CONST w):
+ areax (w.fenster)
+END PROC areax;
+INT PROC areay (WINDOW CONST w):
+ areay (w.fenster)
+END PROC areay;
+INT PROC areaxsize (WINDOW CONST w):
+ areaxsize (w.fenster)
+END PROC areaxsize;
+INT PROC areaysize (WINDOW CONST w):
+ areaysize (w.fenster)
+END PROC areaysize;
+END PACKET ls dialog 3;
+