From afd4c3c448381f6eb706090911a15c162fdaf8af Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sun, 9 Oct 2016 11:28:19 +0200 Subject: Decompress source files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EUMEL’s TEXT dataspaces wastes a lot of storage space. Some files were therefore “compressed” by storing them as a single line, reducing overhead significantly. --- dialog/ls-DIALOG 2 | 871 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 819 insertions(+), 52 deletions(-) (limited to 'dialog/ls-DIALOG 2') diff --git a/dialog/ls-DIALOG 2 b/dialog/ls-DIALOG 2 index 1750162..7fb5d36 100644 --- a/dialog/ls-DIALOG 2 +++ b/dialog/ls-DIALOG 2 @@ -22,56 +22,823 @@ *) PACKET ls dialog 2 DEFINES - some,{} one,{} infix namen,{} ohne praefix,{} not empty:{}LET maxentries = 200;{}LET zeichenstring = ""1""27""3""10""13""12"xo?",{} oben unten return rubout kreuz kringel = ""3""10""13""12"xo",{} q eins neun h = "q19h";{}LET zurueck = ""8"",{} piep = ""7"";{}LET hop = 1,{} esc = 2,{} oben = 3,{} unten = 4,{} return = 5,{} rubout = 6,{} - kreuz = 7,{} kringel = 8,{} frage = 9;{}LET punkt = ".",{} gleich = "=",{} blank = " ";{}INT VAR x,{} y,{} xsize,{} ysize,{} maxeintraege,{} anzahl,{} erste auswahlzeile,{} virtueller cursor,{} reeller cursor;{}TEXT VAR kennzeile 1,{} kennzeile 2,{} registrierkette :: "";{}BOOL VAR abbruch,{} auswahlende;{}BOUND ROW max entries TEXT VAR eintrag;{}ROW 2 TEXT CONST fehlermeldung :: ROW 2 TEXT : ({} - "Unzulässige Cursorwerte bei der Auswahl",{} "Fenster für Auswahl zu klein (x < 56 / y < 15)");{}ROW 24 TEXT CONST hinweis :: ROW 24 TEXT : ({} " Bitte warten... Ich sortiere und räume auf!",{} " Info: Fertig: Abbrechen: ",{} " Zum Weitermachen bitte irgendeine Taste tippen!",{} "Weitere Dateien!",{} "INFORMATIONEN: Auswahl mehrerer Dateien",{} "INFORMATIONEN: Auswahl einer Datei",{} " "15"Positionierungen: "14"",{} " hoch : zum vorausgehenden Namen",{} - " runter : zum folgenden Namen",{} " HOP hoch : auf den ersten Namen der Seite", (***********){} " HOP runter : auf den letzten Namen der Seite", (* bitte *){} " ESC 1 : auf den ersten Namen der Liste", (* diese *){} " ESC 9 : auf den letzten Namen der Liste", (* Länge *){} " "15"Auswahl treffen: "14"", (* nicht *){} " RETURN / x : diesen Namen ankreuzen ", (* über- *){} - " RUBOUT / o : Kreuz vor dem Namen loeschen", (* schrei-*){} " HOP RETURN / HOP x : alle folgende Namen ankreuzen", (* ten! *){} " HOP RUBOUT / HOP o : alle folgende Kreuze loeschen", (***********){} " "15"Auswahl verlassen: "14"",{} " ESC q : Auswahl verlassen",{} " ESC h : Auswahl abbrechen",{} " Auswahl m e h r e r e r Dateien durch Ankreuzen",{} " Auswahl e i n e r Datei durch Ankreuzen",{} " Bitte warten... Ich breche die Auswahl ab!"{} - );{}THESAURUS PROC auswahl (THESAURUS CONST t,{} BOOL CONST mehrere moeglich,{} TEXT CONST t1, t2):{} werte initialisieren;{} namen besorgen;{} bildschirm aufbauen;{} auswaehlen lassen;{} abgang vorbereiten.{} werte initialisieren:{} THESAURUS VAR ausgabe :: empty thesaurus;{} DATASPACE VAR ds := nilspace;{} eintrag := ds;{} kennzeile 1 := t1;{} kennzeile 2 := t2;{} abbruch := FALSE;{} - erste auswahlzeile := y + 7;{} anzahl := 0;{} maxeintraege := ysize - 11;{} virtueller cursor := 1;{} reeller cursor := 1.{} namen besorgen:{} fische die namen aus dem thesaurus;{} IF kein eintrag vorhanden{} THEN LEAVE auswahl WITH ausgabe{} FI.{} bildschirm aufbauen:{} schreibe kopfzeile;{} gib hinweis aus (kennzeile 1, kennzeile 2);{} gib erklaerungszeile aus (mehrere moeglich);{} baue bildschirm auf (1);{} footnote (x, y, xsize, ysize, hinweis [2]);{} - schreibe fusszeile;{} reellen cursor setzen .{} schreibe kopfzeile:{} cursor (x, y);{} out(ecke oben links);{} (xsize - 2) TIMESOUT waagerecht;{} out(ecke oben rechts).{} schreibe fusszeile:{} cursor (x, y + ysize - 1);{} out (ecke unten links);{} (xsize - 2) TIMESOUT waagerecht;{} out (ecke unten rechts).{} auswaehlen lassen:{} kreuze an (mehrere moeglich).{} abgang vorbereiten:{} IF abbruch{} THEN change footnote (x, y, xsize, ysize, hinweis [24]){} - ELSE change footnote (x, y, xsize, ysize, hinweis [ 1]){} FI;{} cursor (x + 1, y + ysize - 1);{} ausgabe erzeugen;{} forget (ds);{} ausgabe.{} fische die namen aus dem thesaurus:{} INT VAR zeiger;{} FOR zeiger FROM 1 UPTO highest entry (t) REP{} IF name (t, zeiger) <> ""{} THEN anzahl INCR 1;{} eintrag [anzahl] := name (t, zeiger){} FI{} PER.{} kein eintrag vorhanden:{} anzahl = 0.{} ausgabe erzeugen:{} TEXT VAR nummer;{} WHILE registrierkette <> "" REP{} - nummer := subtext (registrierkette, 1, 3);{} registrierkette := subtext (registrierkette, 5);{} insert (ausgabe, eintrag [ int (nummer)]){} PER.{}END PROC auswahl;{}PROC reellen cursor setzen:{} cursor (x + 1, erste auswahlzeile + reeller cursor - 1);{} out (marke (virtueller cursor, TRUE) + (8 * zurueck)){}END PROC reellen cursor setzen;{}PROC baue bildschirm auf (INT CONST anfang):{} gib kopfzeile aus;{} gib namenstabelle aus;{} gib fusszeile aus;{} loesche ggf restbereich.{} - gib kopfzeile aus:{} cursor (x, erste auswahlzeile - 1); out (senkrecht);{} IF reeller cursor = virtueller cursor{} THEN (xsize - 2) TIMESOUT punkt{} ELSE (xsize - length (hinweis [4]) - 5) TIMESOUT punkt;{} out (invers (hinweis [4])){} FI;{} out (senkrecht);{} line.{} gib namenstabelle aus:{} INT VAR zeiger, zaehler :: -1;{} FOR zeiger FROM anfang UPTO grenze REP{} zaehler INCR 1;{} cursor (x, erste auswahlzeile + zaehler);{} out (senkrecht); out (marke (zeiger, FALSE));{} - outtext (subtext (eintrag [zeiger], 1, xsize - 10), 1, xsize - 10);{} out (senkrecht);{} PER.{} gib fusszeile aus:{} cursor (x, erste auswahlzeile + zaehler + 1);{} out (senkrecht);{} IF NOT ((virtueller cursor + maxeintraege - reeller cursor) < anzahl){} THEN (xsize - 2) TIMESOUT punkt{} ELSE (xsize - length (hinweis [4]) - 5) TIMESOUT punkt;{} out (invers (hinweis [4])){} FI;{} out (senkrecht).{} loesche ggf restbereich:{} IF zaehler + 1 < maxeintraege{} - THEN loesche bildschirmrest{} FI.{} loesche bildschirmrest:{} FOR zeiger FROM restanfang UPTO restende REP{} cursor (x, zeiger); out (senkrecht);{} (xsize - 2) TIMESOUT blank;{} out (senkrecht){} PER.{} restanfang:{} erste auswahlzeile + zaehler + 2.{} restende:{} erste auswahlzeile + maxeintraege.{} grenze:{} min (anzahl, anfang + max eintraege - 1).{}END PROC baue bildschirm auf;{}TEXT PROC marke (INT CONST zeiger, BOOL CONST mit cursor):{} - INT VAR platz := nr (zeiger);{} IF platz = 0{} THEN leer{} ELSE mit zahl{} FI.{} mit zahl:{} IF mit cursor{} THEN "==>" + (3 - length (text (platz))) * blank + text (platz) + "x "{} ELSE " " + (3 - length (text (platz))) * blank + text (platz) + "x "{} FI.{} leer:{} IF mit cursor{} THEN "==> o "{} ELSE " o "{} FI.{}END PROC marke;{}INT PROC nr (INT CONST zeiger):{} IF pos (registrierkette, textstring (zeiger)) = 0{} THEN 0{} ELSE (pos (registrierkette, textstring (zeiger)) DIV 4) + 1{} - FI{}END PROC nr;{}TEXT PROC textstring (INT CONST nr):{} text (nr, 3) + "!"{}END PROC textstring;{}PROC info (BOOL CONST mehrere):{} notiere hinweisueberschrift;{} notiere positionierhinweise;{} IF noch platz vorhanden{} THEN notiere auswahlmoeglichkeiten auf alter seite{} ELSE wechsle auf naechste seite;{} notiere hinweisueberschrift;{} notiere auswahlmoeglichtkeiten auf neuer seite{} FI;{} stelle alten bildschirmzustand wieder her.{} notiere hinweisueberschrift:{} - cursor (x + 1, y + 1);{} IF mehrere{} THEN out (center(xsize - 2, invers (hinweis [5]))){} ELSE out (center(xsize - 2, invers (hinweis [6]))){} FI;{} cursor (x + 1, y + 2); out ("", xsize - 2).{} notiere positionierhinweise:{} cursor (x + 1, y + 3); out (hinweis [ 7], xsize - 2);{} cursor (x + 1, y + 4); out (hinweis [ 8], xsize - 2);{} cursor (x + 1, y + 5); out (hinweis [ 9], xsize - 2);{} cursor (x + 1, y + 6); out (hinweis [10], xsize - 2);{} cursor (x + 1, y + 7); out (hinweis [11], xsize - 2);{} - cursor (x + 1, y + 8); out (hinweis [12], xsize - 2);{} cursor (x + 1, y + 9); out (hinweis [13], xsize - 2).{} notiere auswahlmoeglichkeiten auf alter seite:{} cursor (x + 1, y + 10); out ("", xsize - 2);{} cursor (x + 1, y + 11); out (hinweis [14], xsize - 2);{} cursor (x + 1, y + 12); out (hinweis [15], xsize - 2);{} IF mehrere{} THEN gib alle auswahlmoeglichkeiten auf der alten seite an{} ELSE gib eine auswahlmoeglichkeit auf der alten seite an{} FI;{} - notiere verlassmoeglichkeiten auf der alten seite;{} loesche die restlichen zeilen;{} change footnote (x, y, xsize, ysize, hinweis [3]);{} cursor in ruhestellung;{} clear buffer.{} gib alle auswahlmoeglichkeiten auf der alten seite an:{} cursor (x + 1, y + 13); out (hinweis [16], xsize - 2);{} cursor (x + 1, y + 14); out (hinweis [17], xsize - 2);{} cursor (x + 1, y + 15); out (hinweis [18], xsize - 2).{} gib eine auswahlmoeglichkeit auf der alten seite an:{} cursor (x + 1, y + 13); out ("", xsize - 2);{} - cursor (x + 1, y + 14); out ("", xsize - 2);{} cursor (x + 1, y + 15); out ("", xsize - 2).{} notiere verlassmoeglichkeiten auf der alten seite:{} cursor (x + 1, y + 16); out ("", xsize - 2);{} cursor (x + 1, y + 17); out (hinweis [19], xsize - 2);{} cursor (x + 1, y + 18); out (hinweis [20], xsize - 2);{} cursor (x + 1, y + 19); out (hinweis [21], xsize - 2).{} loesche die restlichen zeilen:{} IF ysize = 24{} THEN cursor (x + 1, y + 20); out ("", xsize - 2){} FI.{} - wechsle auf naechste seite:{} loesche seitenrest;{} change footnote (x, y, xsize, ysize, hinweis [3]);{} cursor in ruhestellung;{} clear buffer;{} pause.{} loesche seitenrest:{} INT VAR zaehler;{} FOR zaehler FROM 10 UPTO ysize - 4 REP{} cursor (x + 1, y + zaehler); out ("", xsize - 2){} PER.{} notiere auswahlmoeglichtkeiten auf neuer seite:{} cursor (x + 1, y + 3); out (hinweis [14], xsize - 2);{} cursor (x + 1, y + 4); out (hinweis [15], xsize - 2);{} IF mehrere{} - THEN gib alle auswahlmoeglichkeiten auf der neuen seite an{} ELSE gib eine auswahlmoeglichkeit auf der neuen seite an{} FI;{} notiere verlassmoeglichkeiten auf der neuen seite.{} gib alle auswahlmoeglichkeiten auf der neuen seite an:{} cursor (x + 1, y + 5); out (hinweis [16], xsize - 2);{} cursor (x + 1, y + 6); out (hinweis [17], xsize - 2);{} cursor (x + 1, y + 7); out (hinweis [18], xsize - 2).{} gib eine auswahlmoeglichkeit auf der neuen seite an:{} cursor (x + 1, y + 5); out ("", xsize - 2);{} - cursor (x + 1, y + 6); out ("", xsize - 2);{} cursor (x + 1, y + 7); out ("", xsize - 2).{} notiere verlassmoeglichkeiten auf der neuen seite:{} cursor (x + 1, y + 8); out ("", xsize - 2);{} cursor (x + 1, y + 9); out (hinweis [19], xsize - 2);{} cursor (x + 1, y + 10); out (hinweis [20], xsize - 2);{} cursor (x + 1, y + 11); out (hinweis [21], xsize - 2);{} cursor in ruhestellung.{} cursor in ruhestellung:{} cursor (x + 1, y + ysize - 2).{} stelle alten bildschirmzustand wieder her:{} - clear buffer;{} pause;{} gib hinweis aus (kennzeile 1, kennzeile 2);{} gib erklaerungszeile aus (mehrere);{} virtueller cursor := 1;{} reeller cursor := 1;{} baue bildschirm auf (1);{} change footnote (x, y, xsize, ysize, hinweis [2]);{} reellen cursor setzen.{} noch platz vorhanden:{} (ysize - 4) > 18.{}END PROC info;{}PROC kreuze an (BOOL CONST mehrere):{} auswahlende := FALSE;{} REP{} zeichen lesen; zeichen interpretieren{} UNTIL auswahlende PER.{} zeichen lesen:{} - TEXT VAR zeichen;{} getchar (zeichen).{} zeichen interpretieren:{} SELECT pos (zeichenstring, zeichen) OF{} CASE hop : hop kommando verarbeiten (mehrere){} CASE esc : esc kommando verarbeiten{} CASE oben : nach oben{} CASE unten : nach unten{} CASE kreuz : ankreuzen; evtl aufhoeren{} CASE return : ankreuzen weiter; evtl aufhoeren{} CASE rubout : auskreuzen weiter{} CASE kringel : auskreuzen{} CASE frage : info (mehrere){} - OTHERWISE out (piep){} END SELECT.{} evtl aufhoeren:{} IF NOT mehrere{} THEN LEAVE kreuze an{} FI.{}END PROC kreuze an;{}PROC hop kommando verarbeiten (BOOL CONST mehrere):{} zweites zeichen lesen;{} zeichen interpretieren.{} zweites zeichen lesen:{} TEXT VAR zweites zeichen;{} getchar(zweites zeichen).{} zeichen interpretieren:{} SELECT pos (oben unten return rubout kreuz kringel, zweites zeichen) OF{} CASE 1 : hop nach oben{} CASE 2 : hop nach unten{} - CASE 3, 5 : IF mehrere THEN alle darunter ankreuzen FI{} CASE 4, 6 : IF mehrere THEN alle darunter loeschen FI{} OTHERWISE out (piep){} END SELECT.{} alle darunter ankreuzen:{} INT VAR i;{} FOR i FROM virtueller cursor UPTO anzahl REP{} IF nr (i) = 0{} THEN ankreuzen{} FI{} PER;{} bild aktualisieren ;{} reellen cursor setzen .{} ankreuzen:{} registrierkette CAT textstring (i).{} alle darunter loeschen:{} INT VAR j, position;{} FOR j FROM virtueller cursor UPTO anzahl REP{} - position := nr (j);{} IF position > 0{} THEN rausschmeissen;{} FI{} PER;{} bild aktualisieren;{} reellen cursor setzen.{} rausschmeissen:{} registrierkette := subtext (registrierkette, 1, (4 * position) - 4) +{} subtext (registrierkette, (4 * position) + 1).{} hop nach oben:{} IF ganz oben{} THEN out (piep){} ELIF oben auf der seite{} THEN raufblaettern{} ELSE top of page{} FI.{} ganz oben:{} virtueller cursor = 1.{} - oben auf der seite:{} reeller cursor = 1.{} raufblaettern:{} virtueller cursor DECR max eintraege;{} virtueller cursor := max (virtueller cursor, 1);{} baue bildschirm auf (virtueller cursor);{} reellen cursor setzen.{} top of page:{} loesche marke;{} virtueller cursor DECR (reeller cursor - 1);{} reeller cursor := 1;{} reellen cursor setzen.{} hop nach unten:{} IF ganz unten{} THEN out (piep){} ELIF unten auf der seite{} THEN runterblaettern{} - ELSE bottom of page{} FI.{} ganz unten:{} virtueller cursor = anzahl.{} unten auf der seite:{} reeller cursor > max eintraege - 1.{} runterblaettern:{} INT VAR alter virtueller cursor :: virtueller cursor;{} virtueller cursor INCR max eintraege;{} virtueller cursor := min (virtueller cursor, anzahl);{} reeller cursor := virtueller cursor - alter virtueller cursor;{} baue bildschirm auf (alter virtueller cursor + 1);{} reellen cursor setzen.{} bottom of page:{} - loesche marke;{} alter virtueller cursor := virtueller cursor;{} virtueller cursor INCR (max eintraege - reeller cursor);{} virtueller cursor := min (anzahl, virtueller cursor);{} reeller cursor INCR (virtueller cursor - alter virtueller cursor);{} reellen cursor setzen.{}END PROC hop kommando verarbeiten;{}PROC esc kommando verarbeiten:{} TEXT VAR zweites zeichen;{} getchar (zweites zeichen);{} SELECT pos (q eins neun h, zweites zeichen) OF{} CASE 1 : auswahlende := TRUE{} - CASE 2 : zeige anfang{} CASE 3 : zeige ende{} CASE 4 : abbruch := TRUE;{} auswahlende := TRUE;{} registrierkette := ""{} OTHERWISE out (piep){} END SELECT.{} zeige anfang:{} IF virtueller cursor = 1{} THEN out (piep){} ELIF virtueller cursor = reeller cursor{} THEN loesche marke;{} virtueller cursor := 1;{} reeller cursor := 1;{} reellen cursor setzen{} ELSE virtueller cursor := 1;{} - reeller cursor := 1;{} baue bildschirm auf (1);{} reellen cursor setzen{} FI.{} zeige ende:{} IF virtueller cursor = anzahl{} THEN out (piep){} ELIF ende auf bildschirm{} THEN loesche marke;{} reeller cursor INCR (anzahl - virtueller cursor);{} virtueller cursor := anzahl;{} reellen cursor setzen{} ELSE virtueller cursor := anzahl;{} reeller cursor := max eintraege;{} - baue bildschirm auf (anzahl - (max eintraege - 1));{} reellen cursor setzen{} FI.{} ende auf bildschirm:{} (reeller cursor + anzahl - virtueller cursor) < max eintraege + 1.{}END PROC esc kommando verarbeiten;{}PROC ankreuzen:{} INT VAR platz :: nr (virtueller cursor);{} IF platz <> 0{} THEN out (piep);{} LEAVE ankreuzen{} FI;{} registrierkette CAT textstring (virtueller cursor);{} reellen cursor setzen{}END PROC ankreuzen;{}PROC ankreuzen weiter:{} - INT VAR platz :: nr (virtueller cursor);{} IF platz <> 0{} THEN out (piep);{} LEAVE ankreuzen weiter{} FI;{} registrierkette CAT textstring (virtueller cursor);{} IF virtueller cursor < anzahl{} THEN nach unten{} FI;{} IF virtueller cursor = anzahl{} THEN reellen cursor setzen{} FI{}END PROC ankreuzen weiter;{}PROC auskreuzen weiter:{} INT VAR position :: nr (virtueller cursor);{} IF position = 0{} THEN out (piep);{} LEAVE auskreuzen weiter{} FI;{} rausschmeissen;{} - IF virtueller cursor < anzahl{} THEN nach unten{} ELSE loesche marke{} FI;{} bild aktualisieren;{} reellen cursor setzen.{} rausschmeissen:{} registrierkette := subtext (registrierkette, 1, 4 * position - 4) +{} subtext (registrierkette, 4 * position + 1).{}END PROC auskreuzen weiter;{}PROC auskreuzen:{} INT VAR position :: nr (virtueller cursor);{} IF position = 0{} THEN out (piep);{} LEAVE auskreuzen{} FI;{} rausschmeissen;{} loesche marke;{} - bild aktualisieren;{} reellen cursor setzen.{} rausschmeissen:{} registrierkette := subtext (registrierkette, 1, 4 * position - 4) +{} subtext (registrierkette, 4 * position + 1).{}END PROC auskreuzen;{}PROC bild aktualisieren:{} INT VAR ob, un, i, zaehler :: -1;{} ob := virtueller cursor - reeller cursor + 1;{} un := min (ob + max eintraege - 1, anzahl);{} FOR i FROM ob UPTO un REP{} zaehler INCR 1;{} cursor (x + 1, erste auswahlzeile + zaehler);{} out (marke (i,FALSE)) PER{} -END PROC bild aktualisieren;{}PROC nach oben:{} IF noch nicht oben (*virtuell*){} THEN gehe nach oben{} ELSE out (piep){} FI.{} noch nicht oben:{} virtueller cursor > 1.{} gehe nach oben:{} IF reeller cursor = 1 THEN scroll down ELSE cursor up FI.{} scroll down:{} virtueller cursor DECR 1;{} baue bildschirm auf (virtueller cursor);{} reellen cursor setzen.{} cursor up:{} loesche marke;{} virtueller cursor DECR 1;{} reeller cursor DECR 1;{} reellen cursor setzen{} -END PROC nach oben;{}PROC nach unten:{} IF noch nicht unten (*virtuell*){} THEN gehe nach unten{} ELSE out (piep){} FI.{} noch nicht unten:{} virtueller cursor < anzahl.{} gehe nach unten:{} IF reeller cursor > max eintraege - 1 THEN scroll up ELSE cursor down FI.{} scroll up:{} virtueller cursor INCR 1;{} baue bildschirm auf (virtueller cursor - (max eintraege - 1));{} reellen cursor setzen.{} cursor down:{} loesche marke;{} virtueller cursor INCR 1;{} reeller cursor INCR 1;{} - reellen cursor setzen{}END PROC nach unten;{}PROC loesche marke:{} out (marke (virtueller cursor, FALSE)){}END PROC loesche marke;{}PROC footnote (INT CONST x, y, xsize, ysize, TEXT CONST text):{} cursor (x, y + ysize - 3);{} out (balken links); (xsize - 2) TIMESOUT waagerecht; out (balken rechts);{} change footnote (x, y, xsize, ysize, text){}END PROC footnote;{}PROC change footnote (INT CONST x, y, xsize, ysize, TEXT CONST text):{} cursor (x, y + ysize - 2);{} out (senkrecht); outtext (text, 1, xsize - 2); out (senkrecht){} -END PROC change footnote;{}PROC gib hinweis aus (TEXT CONST t1, t2):{} cursor (x, y + 1); out (senkrecht);{} out (center (xsize - 2, invers (t1)));{} out (senkrecht);{} cursor (x, y + 2); out (senkrecht);{} out ("", xsize - 2);{} out (senkrecht);{} cursor (x, y + 3); out (senkrecht);{} out (center (xsize - 2, t2));{} out (senkrecht){}END PROC gib hinweis aus;{}PROC gib erklaerungszeile aus (BOOL CONST mehrere):{} - cursor (x, y + 4); out (senkrecht);{} out ((xsize - 2) * gleich);{} out (senkrecht);{} cursor (x, y + 5); out (senkrecht);{} IF mehrere{} THEN out (erklaerungszeile mehrere){} ELSE out (erklaerungszeile eine){} FI;{} out (senkrecht).{} erklaerungszeile mehrere:{} invers (text 1 + (rest1 * blank)).{} erklaerungszeile eine:{} invers (text 2 + (rest2 * blank)).{} - text1:{} hinweis [22].{} text2:{} hinweis [23].{} rest1: (***************************){} xsize - length (text1) - 5. (* durch 'invers' wird ein *){} (* Blank angehängt und zu- *){} rest2: (* sätzlich noch durch *){} xsize - length (text2) - 5. (* 'relativcenter' - außer-*){}END PROC gib erklaerungszeile aus; (* dem nimmt die Markierung*){} (* selbst eine Position ein*){} - (***************************){}THESAURUS PROC infix namen (THESAURUS CONST t, TEXT CONST infix):{} THESAURUS VAR tt :: empty thesaurus;{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} TEXT VAR eintrag :: name (t,i);{} IF eintrag enthaelt infix{} THEN insert (tt, eintrag){} FI{} PER;{} tt.{} eintrag enthaelt infix:{} pos (eintrag, infix) <> 0{}END PROC infix namen;{}THESAURUS PROC infix namen (THESAURUS CONST t, INT CONST dateityp):{} - THESAURUS VAR tt :: empty thesaurus;{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} TEXT VAR eintrag :: name (t,i);{} IF eintrag enthaelt infix{} THEN insert (tt, eintrag){} FI{} PER;{} tt.{} eintrag enthaelt infix:{} type (old (eintrag)) = dateityp.{}END PROC infix namen;{}THESAURUS PROC infix namen (THESAURUS CONST t,{} TEXT CONST infix 1, INT CONST dateityp):{} THESAURUS VAR tt :: empty thesaurus;{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} - TEXT VAR eintrag :: name (t,i);{} IF eintrag enthaelt infix{} THEN insert (tt, eintrag){} FI{} PER;{} tt.{} eintrag enthaelt infix:{} (pos (eintrag, infix 1) <> 0) AND (type (old (eintrag)) = dateityp).{}END PROC infix namen;{}THESAURUS PROC infix namen (THESAURUS CONST t,{} TEXT CONST infix 1, infix 2):{} THESAURUS VAR tt :: empty thesaurus;{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} TEXT VAR eintrag :: name (t,i);{} IF eintrag enthaelt infix{} - THEN insert (tt, eintrag){} FI{} PER;{} tt.{} eintrag enthaelt infix:{} (pos (eintrag, infix 1) <> 0) OR (pos (eintrag, infix 2) <> 0){}END PROC infix namen;{}THESAURUS PROC infix namen (TEXT CONST infix):{} infix namen (ALL myself, infix){}END PROC infix namen;{}THESAURUS PROC infix namen (TEXT CONST infix 1, infix 2):{} infix namen (ALL myself, infix 1, infix 2){}END PROC infix namen;{}THESAURUS PROC ohne praefix (THESAURUS CONST thesaurus, TEXT CONST praefix):{} THESAURUS VAR t :: empty thesaurus;{} - INT VAR zaehler;{} FOR zaehler FROM 1 UPTO highest entry (thesaurus) REP{} IF name (thesaurus, zaehler) <> ""{} AND pos (name (thesaurus, zaehler), praefix) = 1{} THEN insert (t, subtext (name (thesaurus, zaehler),{} length (praefix) + 1)){} FI;{} PER;{} t{}END PROC ohne praefix;{}BOOL PROC not empty (THESAURUS CONST t):{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} IF name (t, i) <> ""{} THEN LEAVE not empty WITH TRUE{} - FI{} PER;{} FALSE{}END PROC not empty;{}PROC untersuche bildschirmmasszahlen (TEXT CONST t1, t2):{} IF unzulaessige cursorwerte{} THEN errorstop (fehlermeldung [1]){} ELIF fenster ist zu klein{} THEN errorstop (fehlermeldung [2]){} FI.{} unzulaessige cursorwerte:{} (x + xsize) > 80 COR (y + ysize) > 25 COR x < 1 COR y < 1{} COR xsize > 79 COR ysize > 24.{} fenster ist zu klein:{} (xsize) < 56 COR (ysize) < 15{} COR length (t1) > (xsize - 5) COR length (t2) > (xsize - 5).{} -END PROC untersuche bildschirmmasszahlen;{}TEXT PROC ggf gekuerzter text (TEXT CONST text):{} IF length (text) > (xsize - 5){} THEN subtext (text, 1, xsize - 7) + ".."{} ELSE text{} FI{}END PROC ggf gekuerzter text;{}THESAURUS PROC some (INT CONST spa, zei, breite, hoehe,{} THESAURUS CONST t,{} TEXT CONST t1, t2):{} TEXT VAR text 1, text 2;{} x := spa;{} y := zei;{} xsize := breite;{} ysize := hoehe;{} text 1 := ggf gekuerzter text (t1);{} - text 2 := ggf gekuerzter text (t2);{} untersuche bildschirmmasszahlen (text 1, text 2);{} auswahl (t, TRUE, text 1, text 2){}END PROC some;{}THESAURUS PROC some (INT CONST spa, zei,{} THESAURUS CONST t,{} TEXT CONST t1, t2):{} some (spa, zei, 79 - spa + 1, 24 - zei + 1, t, t1, t2){}END PROC some;{}THESAURUS PROC some (THESAURUS CONST t,{} TEXT CONST t1, t2):{} some (1, 1, 79, 24, t, t1, t2){}END PROC some;{}TEXT PROC one (INT CONST spa, zei, breite, hoehe,{} - THESAURUS CONST t,{} TEXT CONST t1, t2):{} TEXT VAR text 1, text 2;{} x := spa;{} y := zei;{} xsize := breite;{} ysize := hoehe;{} text 1 := ggf gekuerzter text (t1);{} text 2 := ggf gekuerzter text (t2);{} untersuche bildschirmmasszahlen (text 1, text 2);{} name (auswahl (t, FALSE, text 1, text 2), 1){}END PROC one;{}TEXT PROC one (INT CONST spa, zei,{} THESAURUS CONST t,{} TEXT CONST t1, t2):{} one (spa, zei, 79 - spa + 1, 24 - zei + 1, t, t1, t2){} -END PROC one;{}TEXT PROC one (THESAURUS CONST t, TEXT CONST t1, t2):{} one (1, 1, 79, 24, t, t1, t2){}END PROC one;{}END PACKET ls dialog 2;{} + some, + one, + infix namen, + ohne praefix, + not empty: +LET maxentries = 200; +LET zeichenstring = ""1""27""3""10""13""12"xo?", + oben unten return rubout kreuz kringel = ""3""10""13""12"xo", + q eins neun h = "q19h"; +LET zurueck = ""8"", + piep = ""7""; +LET hop = 1, + esc = 2, + oben = 3, + unten = 4, + return = 5, + rubout = 6, + + kreuz = 7, + kringel = 8, + frage = 9; +LET punkt = ".", + gleich = "=", + blank = " "; +INT VAR x, + y, + xsize, + ysize, + maxeintraege, + anzahl, + erste auswahlzeile, + virtueller cursor, + reeller cursor; +TEXT VAR kennzeile 1, + kennzeile 2, + registrierkette :: ""; +BOOL VAR abbruch, + auswahlende; +BOUND ROW max entries TEXT VAR eintrag; +ROW 2 TEXT CONST fehlermeldung :: ROW 2 TEXT : ( + + "Unzulässige Cursorwerte bei der Auswahl", + "Fenster für Auswahl zu klein (x < 56 / y < 15)"); +ROW 24 TEXT CONST hinweis :: ROW 24 TEXT : ( + " Bitte warten... Ich sortiere und räume auf!", + " Info: Fertig: Abbrechen: ", + " Zum Weitermachen bitte irgendeine Taste tippen!", + "Weitere Dateien!", + "INFORMATIONEN: Auswahl mehrerer Dateien", + "INFORMATIONEN: Auswahl einer Datei", + " "15"Positionierungen: "14"", + " hoch : zum vorausgehenden Namen", + + " runter : zum folgenden Namen", + " HOP hoch : auf den ersten Namen der Seite", (***********) + " HOP runter : auf den letzten Namen der Seite", (* bitte *) + " ESC 1 : auf den ersten Namen der Liste", (* diese *) + " ESC 9 : auf den letzten Namen der Liste", (* Länge *) + " "15"Auswahl treffen: "14"", (* nicht *) + " RETURN / x : diesen Namen ankreuzen ", (* über- *) + + " RUBOUT / o : Kreuz vor dem Namen loeschen", (* schrei-*) + " HOP RETURN / HOP x : alle folgende Namen ankreuzen", (* ten! *) + " HOP RUBOUT / HOP o : alle folgende Kreuze loeschen", (***********) + " "15"Auswahl verlassen: "14"", + " ESC q : Auswahl verlassen", + " ESC h : Auswahl abbrechen", + " Auswahl m e h r e r e r Dateien durch Ankreuzen", + " Auswahl e i n e r Datei durch Ankreuzen", + " Bitte warten... Ich breche die Auswahl ab!" + + ); +THESAURUS PROC auswahl (THESAURUS CONST t, + BOOL CONST mehrere moeglich, + TEXT CONST t1, t2): + werte initialisieren; + namen besorgen; + bildschirm aufbauen; + auswaehlen lassen; + abgang vorbereiten. + werte initialisieren: + THESAURUS VAR ausgabe :: empty thesaurus; + DATASPACE VAR ds := nilspace; + eintrag := ds; + kennzeile 1 := t1; + kennzeile 2 := t2; + abbruch := FALSE; + + erste auswahlzeile := y + 7; + anzahl := 0; + maxeintraege := ysize - 11; + virtueller cursor := 1; + reeller cursor := 1. + namen besorgen: + fische die namen aus dem thesaurus; + IF kein eintrag vorhanden + THEN LEAVE auswahl WITH ausgabe + FI. + bildschirm aufbauen: + schreibe kopfzeile; + gib hinweis aus (kennzeile 1, kennzeile 2); + gib erklaerungszeile aus (mehrere moeglich); + baue bildschirm auf (1); + footnote (x, y, xsize, ysize, hinweis [2]); + + schreibe fusszeile; + reellen cursor setzen . + schreibe kopfzeile: + cursor (x, y); + out(ecke oben links); + (xsize - 2) TIMESOUT waagerecht; + out(ecke oben rechts). + schreibe fusszeile: + cursor (x, y + ysize - 1); + out (ecke unten links); + (xsize - 2) TIMESOUT waagerecht; + out (ecke unten rechts). + auswaehlen lassen: + kreuze an (mehrere moeglich). + abgang vorbereiten: + IF abbruch + THEN change footnote (x, y, xsize, ysize, hinweis [24]) + + ELSE change footnote (x, y, xsize, ysize, hinweis [ 1]) + FI; + cursor (x + 1, y + ysize - 1); + ausgabe erzeugen; + forget (ds); + ausgabe. + fische die namen aus dem thesaurus: + INT VAR zeiger; + FOR zeiger FROM 1 UPTO highest entry (t) REP + IF name (t, zeiger) <> "" + THEN anzahl INCR 1; + eintrag [anzahl] := name (t, zeiger) + FI + PER. + kein eintrag vorhanden: + anzahl = 0. + ausgabe erzeugen: + TEXT VAR nummer; + WHILE registrierkette <> "" REP + + nummer := subtext (registrierkette, 1, 3); + registrierkette := subtext (registrierkette, 5); + insert (ausgabe, eintrag [ int (nummer)]) + PER. +END PROC auswahl; +PROC reellen cursor setzen: + cursor (x + 1, erste auswahlzeile + reeller cursor - 1); + out (marke (virtueller cursor, TRUE) + (8 * zurueck)) +END PROC reellen cursor setzen; +PROC baue bildschirm auf (INT CONST anfang): + gib kopfzeile aus; + gib namenstabelle aus; + gib fusszeile aus; + loesche ggf restbereich. + + gib kopfzeile aus: + cursor (x, erste auswahlzeile - 1); out (senkrecht); + IF reeller cursor = virtueller cursor + THEN (xsize - 2) TIMESOUT punkt + ELSE (xsize - length (hinweis [4]) - 5) TIMESOUT punkt; + out (invers (hinweis [4])) + FI; + out (senkrecht); + line. + gib namenstabelle aus: + INT VAR zeiger, zaehler :: -1; + FOR zeiger FROM anfang UPTO grenze REP + zaehler INCR 1; + cursor (x, erste auswahlzeile + zaehler); + out (senkrecht); out (marke (zeiger, FALSE)); + + outtext (subtext (eintrag [zeiger], 1, xsize - 10), 1, xsize - 10); + out (senkrecht); + PER. + gib fusszeile aus: + cursor (x, erste auswahlzeile + zaehler + 1); + out (senkrecht); + IF NOT ((virtueller cursor + maxeintraege - reeller cursor) < anzahl) + THEN (xsize - 2) TIMESOUT punkt + ELSE (xsize - length (hinweis [4]) - 5) TIMESOUT punkt; + out (invers (hinweis [4])) + FI; + out (senkrecht). + loesche ggf restbereich: + IF zaehler + 1 < maxeintraege + + THEN loesche bildschirmrest + FI. + loesche bildschirmrest: + FOR zeiger FROM restanfang UPTO restende REP + cursor (x, zeiger); out (senkrecht); + (xsize - 2) TIMESOUT blank; + out (senkrecht) + PER. + restanfang: + erste auswahlzeile + zaehler + 2. + restende: + erste auswahlzeile + maxeintraege. + grenze: + min (anzahl, anfang + max eintraege - 1). +END PROC baue bildschirm auf; +TEXT PROC marke (INT CONST zeiger, BOOL CONST mit cursor): + + INT VAR platz := nr (zeiger); + IF platz = 0 + THEN leer + ELSE mit zahl + FI. + mit zahl: + IF mit cursor + THEN "==>" + (3 - length (text (platz))) * blank + text (platz) + "x " + ELSE " " + (3 - length (text (platz))) * blank + text (platz) + "x " + FI. + leer: + IF mit cursor + THEN "==> o " + ELSE " o " + FI. +END PROC marke; +INT PROC nr (INT CONST zeiger): + IF pos (registrierkette, textstring (zeiger)) = 0 + THEN 0 + ELSE (pos (registrierkette, textstring (zeiger)) DIV 4) + 1 + + FI +END PROC nr; +TEXT PROC textstring (INT CONST nr): + text (nr, 3) + "!" +END PROC textstring; +PROC info (BOOL CONST mehrere): + notiere hinweisueberschrift; + notiere positionierhinweise; + IF noch platz vorhanden + THEN notiere auswahlmoeglichkeiten auf alter seite + ELSE wechsle auf naechste seite; + notiere hinweisueberschrift; + notiere auswahlmoeglichtkeiten auf neuer seite + FI; + stelle alten bildschirmzustand wieder her. + notiere hinweisueberschrift: + + cursor (x + 1, y + 1); + IF mehrere + THEN out (center(xsize - 2, invers (hinweis [5]))) + ELSE out (center(xsize - 2, invers (hinweis [6]))) + FI; + cursor (x + 1, y + 2); out ("", xsize - 2). + notiere positionierhinweise: + cursor (x + 1, y + 3); out (hinweis [ 7], xsize - 2); + cursor (x + 1, y + 4); out (hinweis [ 8], xsize - 2); + cursor (x + 1, y + 5); out (hinweis [ 9], xsize - 2); + cursor (x + 1, y + 6); out (hinweis [10], xsize - 2); + cursor (x + 1, y + 7); out (hinweis [11], xsize - 2); + + cursor (x + 1, y + 8); out (hinweis [12], xsize - 2); + cursor (x + 1, y + 9); out (hinweis [13], xsize - 2). + notiere auswahlmoeglichkeiten auf alter seite: + cursor (x + 1, y + 10); out ("", xsize - 2); + cursor (x + 1, y + 11); out (hinweis [14], xsize - 2); + cursor (x + 1, y + 12); out (hinweis [15], xsize - 2); + IF mehrere + THEN gib alle auswahlmoeglichkeiten auf der alten seite an + ELSE gib eine auswahlmoeglichkeit auf der alten seite an + FI; + + notiere verlassmoeglichkeiten auf der alten seite; + loesche die restlichen zeilen; + change footnote (x, y, xsize, ysize, hinweis [3]); + cursor in ruhestellung; + clear buffer. + gib alle auswahlmoeglichkeiten auf der alten seite an: + cursor (x + 1, y + 13); out (hinweis [16], xsize - 2); + cursor (x + 1, y + 14); out (hinweis [17], xsize - 2); + cursor (x + 1, y + 15); out (hinweis [18], xsize - 2). + gib eine auswahlmoeglichkeit auf der alten seite an: + cursor (x + 1, y + 13); out ("", xsize - 2); + + cursor (x + 1, y + 14); out ("", xsize - 2); + cursor (x + 1, y + 15); out ("", xsize - 2). + notiere verlassmoeglichkeiten auf der alten seite: + cursor (x + 1, y + 16); out ("", xsize - 2); + cursor (x + 1, y + 17); out (hinweis [19], xsize - 2); + cursor (x + 1, y + 18); out (hinweis [20], xsize - 2); + cursor (x + 1, y + 19); out (hinweis [21], xsize - 2). + loesche die restlichen zeilen: + IF ysize = 24 + THEN cursor (x + 1, y + 20); out ("", xsize - 2) + FI. + + wechsle auf naechste seite: + loesche seitenrest; + change footnote (x, y, xsize, ysize, hinweis [3]); + cursor in ruhestellung; + clear buffer; + pause. + loesche seitenrest: + INT VAR zaehler; + FOR zaehler FROM 10 UPTO ysize - 4 REP + cursor (x + 1, y + zaehler); out ("", xsize - 2) + PER. + notiere auswahlmoeglichtkeiten auf neuer seite: + cursor (x + 1, y + 3); out (hinweis [14], xsize - 2); + cursor (x + 1, y + 4); out (hinweis [15], xsize - 2); + IF mehrere + + THEN gib alle auswahlmoeglichkeiten auf der neuen seite an + ELSE gib eine auswahlmoeglichkeit auf der neuen seite an + FI; + notiere verlassmoeglichkeiten auf der neuen seite. + gib alle auswahlmoeglichkeiten auf der neuen seite an: + cursor (x + 1, y + 5); out (hinweis [16], xsize - 2); + cursor (x + 1, y + 6); out (hinweis [17], xsize - 2); + cursor (x + 1, y + 7); out (hinweis [18], xsize - 2). + gib eine auswahlmoeglichkeit auf der neuen seite an: + cursor (x + 1, y + 5); out ("", xsize - 2); + + cursor (x + 1, y + 6); out ("", xsize - 2); + cursor (x + 1, y + 7); out ("", xsize - 2). + notiere verlassmoeglichkeiten auf der neuen seite: + cursor (x + 1, y + 8); out ("", xsize - 2); + cursor (x + 1, y + 9); out (hinweis [19], xsize - 2); + cursor (x + 1, y + 10); out (hinweis [20], xsize - 2); + cursor (x + 1, y + 11); out (hinweis [21], xsize - 2); + cursor in ruhestellung. + cursor in ruhestellung: + cursor (x + 1, y + ysize - 2). + stelle alten bildschirmzustand wieder her: + + clear buffer; + pause; + gib hinweis aus (kennzeile 1, kennzeile 2); + gib erklaerungszeile aus (mehrere); + virtueller cursor := 1; + reeller cursor := 1; + baue bildschirm auf (1); + change footnote (x, y, xsize, ysize, hinweis [2]); + reellen cursor setzen. + noch platz vorhanden: + (ysize - 4) > 18. +END PROC info; +PROC kreuze an (BOOL CONST mehrere): + auswahlende := FALSE; + REP + zeichen lesen; zeichen interpretieren + UNTIL auswahlende PER. + zeichen lesen: + + TEXT VAR zeichen; + getchar (zeichen). + zeichen interpretieren: + SELECT pos (zeichenstring, zeichen) OF + CASE hop : hop kommando verarbeiten (mehrere) + CASE esc : esc kommando verarbeiten + CASE oben : nach oben + CASE unten : nach unten + CASE kreuz : ankreuzen; evtl aufhoeren + CASE return : ankreuzen weiter; evtl aufhoeren + CASE rubout : auskreuzen weiter + CASE kringel : auskreuzen + CASE frage : info (mehrere) + + OTHERWISE out (piep) + END SELECT. + evtl aufhoeren: + IF NOT mehrere + THEN LEAVE kreuze an + FI. +END PROC kreuze an; +PROC hop kommando verarbeiten (BOOL CONST mehrere): + zweites zeichen lesen; + zeichen interpretieren. + zweites zeichen lesen: + TEXT VAR zweites zeichen; + getchar(zweites zeichen). + zeichen interpretieren: + SELECT pos (oben unten return rubout kreuz kringel, zweites zeichen) OF + CASE 1 : hop nach oben + CASE 2 : hop nach unten + + CASE 3, 5 : IF mehrere THEN alle darunter ankreuzen FI + CASE 4, 6 : IF mehrere THEN alle darunter loeschen FI + OTHERWISE out (piep) + END SELECT. + alle darunter ankreuzen: + INT VAR i; + FOR i FROM virtueller cursor UPTO anzahl REP + IF nr (i) = 0 + THEN ankreuzen + FI + PER; + bild aktualisieren ; + reellen cursor setzen . + ankreuzen: + registrierkette CAT textstring (i). + alle darunter loeschen: + INT VAR j, position; + FOR j FROM virtueller cursor UPTO anzahl REP + + position := nr (j); + IF position > 0 + THEN rausschmeissen; + FI + PER; + bild aktualisieren; + reellen cursor setzen. + rausschmeissen: + registrierkette := subtext (registrierkette, 1, (4 * position) - 4) + + subtext (registrierkette, (4 * position) + 1). + hop nach oben: + IF ganz oben + THEN out (piep) + ELIF oben auf der seite + THEN raufblaettern + ELSE top of page + FI. + ganz oben: + virtueller cursor = 1. + + oben auf der seite: + reeller cursor = 1. + raufblaettern: + virtueller cursor DECR max eintraege; + virtueller cursor := max (virtueller cursor, 1); + baue bildschirm auf (virtueller cursor); + reellen cursor setzen. + top of page: + loesche marke; + virtueller cursor DECR (reeller cursor - 1); + reeller cursor := 1; + reellen cursor setzen. + hop nach unten: + IF ganz unten + THEN out (piep) + ELIF unten auf der seite + THEN runterblaettern + + ELSE bottom of page + FI. + ganz unten: + virtueller cursor = anzahl. + unten auf der seite: + reeller cursor > max eintraege - 1. + runterblaettern: + INT VAR alter virtueller cursor :: virtueller cursor; + virtueller cursor INCR max eintraege; + virtueller cursor := min (virtueller cursor, anzahl); + reeller cursor := virtueller cursor - alter virtueller cursor; + baue bildschirm auf (alter virtueller cursor + 1); + reellen cursor setzen. + bottom of page: + + loesche marke; + alter virtueller cursor := virtueller cursor; + virtueller cursor INCR (max eintraege - reeller cursor); + virtueller cursor := min (anzahl, virtueller cursor); + reeller cursor INCR (virtueller cursor - alter virtueller cursor); + reellen cursor setzen. +END PROC hop kommando verarbeiten; +PROC esc kommando verarbeiten: + TEXT VAR zweites zeichen; + getchar (zweites zeichen); + SELECT pos (q eins neun h, zweites zeichen) OF + CASE 1 : auswahlende := TRUE + + CASE 2 : zeige anfang + CASE 3 : zeige ende + CASE 4 : abbruch := TRUE; + auswahlende := TRUE; + registrierkette := "" + OTHERWISE out (piep) + END SELECT. + zeige anfang: + IF virtueller cursor = 1 + THEN out (piep) + ELIF virtueller cursor = reeller cursor + THEN loesche marke; + virtueller cursor := 1; + reeller cursor := 1; + reellen cursor setzen + ELSE virtueller cursor := 1; + + reeller cursor := 1; + baue bildschirm auf (1); + reellen cursor setzen + FI. + zeige ende: + IF virtueller cursor = anzahl + THEN out (piep) + ELIF ende auf bildschirm + THEN loesche marke; + reeller cursor INCR (anzahl - virtueller cursor); + virtueller cursor := anzahl; + reellen cursor setzen + ELSE virtueller cursor := anzahl; + reeller cursor := max eintraege; + + baue bildschirm auf (anzahl - (max eintraege - 1)); + reellen cursor setzen + FI. + ende auf bildschirm: + (reeller cursor + anzahl - virtueller cursor) < max eintraege + 1. +END PROC esc kommando verarbeiten; +PROC ankreuzen: + INT VAR platz :: nr (virtueller cursor); + IF platz <> 0 + THEN out (piep); + LEAVE ankreuzen + FI; + registrierkette CAT textstring (virtueller cursor); + reellen cursor setzen +END PROC ankreuzen; +PROC ankreuzen weiter: + + INT VAR platz :: nr (virtueller cursor); + IF platz <> 0 + THEN out (piep); + LEAVE ankreuzen weiter + FI; + registrierkette CAT textstring (virtueller cursor); + IF virtueller cursor < anzahl + THEN nach unten + FI; + IF virtueller cursor = anzahl + THEN reellen cursor setzen + FI +END PROC ankreuzen weiter; +PROC auskreuzen weiter: + INT VAR position :: nr (virtueller cursor); + IF position = 0 + THEN out (piep); + LEAVE auskreuzen weiter + FI; + rausschmeissen; + + IF virtueller cursor < anzahl + THEN nach unten + ELSE loesche marke + FI; + bild aktualisieren; + reellen cursor setzen. + rausschmeissen: + registrierkette := subtext (registrierkette, 1, 4 * position - 4) + + subtext (registrierkette, 4 * position + 1). +END PROC auskreuzen weiter; +PROC auskreuzen: + INT VAR position :: nr (virtueller cursor); + IF position = 0 + THEN out (piep); + LEAVE auskreuzen + FI; + rausschmeissen; + loesche marke; + + bild aktualisieren; + reellen cursor setzen. + rausschmeissen: + registrierkette := subtext (registrierkette, 1, 4 * position - 4) + + subtext (registrierkette, 4 * position + 1). +END PROC auskreuzen; +PROC bild aktualisieren: + INT VAR ob, un, i, zaehler :: -1; + ob := virtueller cursor - reeller cursor + 1; + un := min (ob + max eintraege - 1, anzahl); + FOR i FROM ob UPTO un REP + zaehler INCR 1; + cursor (x + 1, erste auswahlzeile + zaehler); + out (marke (i,FALSE)) PER + +END PROC bild aktualisieren; +PROC nach oben: + IF noch nicht oben (*virtuell*) + THEN gehe nach oben + ELSE out (piep) + FI. + noch nicht oben: + virtueller cursor > 1. + gehe nach oben: + IF reeller cursor = 1 THEN scroll down ELSE cursor up FI. + scroll down: + virtueller cursor DECR 1; + baue bildschirm auf (virtueller cursor); + reellen cursor setzen. + cursor up: + loesche marke; + virtueller cursor DECR 1; + reeller cursor DECR 1; + reellen cursor setzen + +END PROC nach oben; +PROC nach unten: + IF noch nicht unten (*virtuell*) + THEN gehe nach unten + ELSE out (piep) + FI. + noch nicht unten: + virtueller cursor < anzahl. + gehe nach unten: + IF reeller cursor > max eintraege - 1 THEN scroll up ELSE cursor down FI. + scroll up: + virtueller cursor INCR 1; + baue bildschirm auf (virtueller cursor - (max eintraege - 1)); + reellen cursor setzen. + cursor down: + loesche marke; + virtueller cursor INCR 1; + reeller cursor INCR 1; + + reellen cursor setzen +END PROC nach unten; +PROC loesche marke: + out (marke (virtueller cursor, FALSE)) +END PROC loesche marke; +PROC footnote (INT CONST x, y, xsize, ysize, TEXT CONST text): + cursor (x, y + ysize - 3); + out (balken links); (xsize - 2) TIMESOUT waagerecht; out (balken rechts); + change footnote (x, y, xsize, ysize, text) +END PROC footnote; +PROC change footnote (INT CONST x, y, xsize, ysize, TEXT CONST text): + cursor (x, y + ysize - 2); + out (senkrecht); outtext (text, 1, xsize - 2); out (senkrecht) + +END PROC change footnote; +PROC gib hinweis aus (TEXT CONST t1, t2): + cursor (x, y + 1); out (senkrecht); + out (center (xsize - 2, invers (t1))); + out (senkrecht); + cursor (x, y + 2); out (senkrecht); + out ("", xsize - 2); + out (senkrecht); + cursor (x, y + 3); out (senkrecht); + out (center (xsize - 2, t2)); + out (senkrecht) +END PROC gib hinweis aus; +PROC gib erklaerungszeile aus (BOOL CONST mehrere): + + cursor (x, y + 4); out (senkrecht); + out ((xsize - 2) * gleich); + out (senkrecht); + cursor (x, y + 5); out (senkrecht); + IF mehrere + THEN out (erklaerungszeile mehrere) + ELSE out (erklaerungszeile eine) + FI; + out (senkrecht). + erklaerungszeile mehrere: + invers (text 1 + (rest1 * blank)). + erklaerungszeile eine: + invers (text 2 + (rest2 * blank)). + + text1: + hinweis [22]. + text2: + hinweis [23]. + rest1: (***************************) + xsize - length (text1) - 5. (* durch 'invers' wird ein *) + (* Blank angehängt und zu- *) + rest2: (* sätzlich noch durch *) + xsize - length (text2) - 5. (* 'relativcenter' - außer-*) +END PROC gib erklaerungszeile aus; (* dem nimmt die Markierung*) + (* selbst eine Position ein*) + + (***************************) +THESAURUS PROC infix namen (THESAURUS CONST t, TEXT CONST infix): + THESAURUS VAR tt :: empty thesaurus; + INT VAR i; + FOR i FROM 1 UPTO highest entry (t) REP + TEXT VAR eintrag :: name (t,i); + IF eintrag enthaelt infix + THEN insert (tt, eintrag) + FI + PER; + tt. + eintrag enthaelt infix: + pos (eintrag, infix) <> 0 +END PROC infix namen; +THESAURUS PROC infix namen (THESAURUS CONST t, INT CONST dateityp): + + THESAURUS VAR tt :: empty thesaurus; + INT VAR i; + FOR i FROM 1 UPTO highest entry (t) REP + TEXT VAR eintrag :: name (t,i); + IF eintrag enthaelt infix + THEN insert (tt, eintrag) + FI + PER; + tt. + eintrag enthaelt infix: + type (old (eintrag)) = dateityp. +END PROC infix namen; +THESAURUS PROC infix namen (THESAURUS CONST t, + TEXT CONST infix 1, INT CONST dateityp): + THESAURUS VAR tt :: empty thesaurus; + INT VAR i; + FOR i FROM 1 UPTO highest entry (t) REP + + TEXT VAR eintrag :: name (t,i); + IF eintrag enthaelt infix + THEN insert (tt, eintrag) + FI + PER; + tt. + eintrag enthaelt infix: + (pos (eintrag, infix 1) <> 0) AND (type (old (eintrag)) = dateityp). +END PROC infix namen; +THESAURUS PROC infix namen (THESAURUS CONST t, + TEXT CONST infix 1, infix 2): + THESAURUS VAR tt :: empty thesaurus; + INT VAR i; + FOR i FROM 1 UPTO highest entry (t) REP + TEXT VAR eintrag :: name (t,i); + IF eintrag enthaelt infix + + THEN insert (tt, eintrag) + FI + PER; + tt. + eintrag enthaelt infix: + (pos (eintrag, infix 1) <> 0) OR (pos (eintrag, infix 2) <> 0) +END PROC infix namen; +THESAURUS PROC infix namen (TEXT CONST infix): + infix namen (ALL myself, infix) +END PROC infix namen; +THESAURUS PROC infix namen (TEXT CONST infix 1, infix 2): + infix namen (ALL myself, infix 1, infix 2) +END PROC infix namen; +THESAURUS PROC ohne praefix (THESAURUS CONST thesaurus, TEXT CONST praefix): + THESAURUS VAR t :: empty thesaurus; + + INT VAR zaehler; + FOR zaehler FROM 1 UPTO highest entry (thesaurus) REP + IF name (thesaurus, zaehler) <> "" + AND pos (name (thesaurus, zaehler), praefix) = 1 + THEN insert (t, subtext (name (thesaurus, zaehler), + length (praefix) + 1)) + FI; + PER; + t +END PROC ohne praefix; +BOOL PROC not empty (THESAURUS CONST t): + INT VAR i; + FOR i FROM 1 UPTO highest entry (t) REP + IF name (t, i) <> "" + THEN LEAVE not empty WITH TRUE + + FI + PER; + FALSE +END PROC not empty; +PROC untersuche bildschirmmasszahlen (TEXT CONST t1, t2): + IF unzulaessige cursorwerte + THEN errorstop (fehlermeldung [1]) + ELIF fenster ist zu klein + THEN errorstop (fehlermeldung [2]) + FI. + unzulaessige cursorwerte: + (x + xsize) > 80 COR (y + ysize) > 25 COR x < 1 COR y < 1 + COR xsize > 79 COR ysize > 24. + fenster ist zu klein: + (xsize) < 56 COR (ysize) < 15 + COR length (t1) > (xsize - 5) COR length (t2) > (xsize - 5). + +END PROC untersuche bildschirmmasszahlen; +TEXT PROC ggf gekuerzter text (TEXT CONST text): + IF length (text) > (xsize - 5) + THEN subtext (text, 1, xsize - 7) + ".." + ELSE text + FI +END PROC ggf gekuerzter text; +THESAURUS PROC some (INT CONST spa, zei, breite, hoehe, + THESAURUS CONST t, + TEXT CONST t1, t2): + TEXT VAR text 1, text 2; + x := spa; + y := zei; + xsize := breite; + ysize := hoehe; + text 1 := ggf gekuerzter text (t1); + + text 2 := ggf gekuerzter text (t2); + untersuche bildschirmmasszahlen (text 1, text 2); + auswahl (t, TRUE, text 1, text 2) +END PROC some; +THESAURUS PROC some (INT CONST spa, zei, + THESAURUS CONST t, + TEXT CONST t1, t2): + some (spa, zei, 79 - spa + 1, 24 - zei + 1, t, t1, t2) +END PROC some; +THESAURUS PROC some (THESAURUS CONST t, + TEXT CONST t1, t2): + some (1, 1, 79, 24, t, t1, t2) +END PROC some; +TEXT PROC one (INT CONST spa, zei, breite, hoehe, + + THESAURUS CONST t, + TEXT CONST t1, t2): + TEXT VAR text 1, text 2; + x := spa; + y := zei; + xsize := breite; + ysize := hoehe; + text 1 := ggf gekuerzter text (t1); + text 2 := ggf gekuerzter text (t2); + untersuche bildschirmmasszahlen (text 1, text 2); + name (auswahl (t, FALSE, text 1, text 2), 1) +END PROC one; +TEXT PROC one (INT CONST spa, zei, + THESAURUS CONST t, + TEXT CONST t1, t2): + one (spa, zei, 79 - spa + 1, 24 - zei + 1, t, t1, t2) + +END PROC one; +TEXT PROC one (THESAURUS CONST t, TEXT CONST t1, t2): + one (1, 1, 79, 24, t, t1, t2) +END PROC one; +END PACKET ls dialog 2; + -- cgit v1.2.3