summaryrefslogtreecommitdiff
path: root/app/eudas/4.4/src/eudas.steuerung
diff options
context:
space:
mode:
Diffstat (limited to 'app/eudas/4.4/src/eudas.steuerung')
-rw-r--r--app/eudas/4.4/src/eudas.steuerung2761
1 files changed, 2761 insertions, 0 deletions
diff --git a/app/eudas/4.4/src/eudas.steuerung b/app/eudas/4.4/src/eudas.steuerung
new file mode 100644
index 0000000..817a8e7
--- /dev/null
+++ b/app/eudas/4.4/src/eudas.steuerung
@@ -0,0 +1,2761 @@
+PACKET eudas steuerung
+
+(*************************************************************************)
+(* *)
+(* Menuesteuerung von EUDAS *)
+(* *)
+(* Version 09 *)
+(* *)
+(* Autor: Thomas Berlage *)
+(* Stand: 01.10.87 *)
+(* *)
+(*************************************************************************)
+
+ DEFINES
+
+ eudas,
+
+ einzelsicherung,
+ suchen,
+ aendern,
+ einfuegen,
+ prueffehler editieren,
+ feldstruktur,
+
+ dateiverwaltung,
+ archivverwaltung,
+
+ edit,
+ dateinamen anfordern,
+ ausfuehrung,
+ einzelausfuehrung :
+
+
+(**************************** Variablen ***********************************)
+
+LET
+ file typ = 1003,
+ eudas typ = 3243;
+
+LET
+ niltext = "",
+ blank = " ",
+ esc z = ""27"z",
+ cleop = ""4"",
+ cleol = ""5"";
+
+
+FILE VAR test file;
+
+DATASPACE VAR test ds;
+
+INT VAR
+ belegter heap,
+ test version := dateiversion - 1;
+
+FENSTER VAR
+ ganz,
+ links,
+ rechts,
+ fuss;
+
+TEXT VAR
+ feldpuffer;
+
+fenster initialisieren (ganz);
+fenster initialisieren (links);
+fenster initialisieren (rechts);
+fenster initialisieren (fuss);
+fenstergroesse setzen (ganz, 1, 2, 79, 23);
+fenstergroesse setzen (links, 1, 2, 15, 22);
+fenstergroesse setzen (rechts, 16, 2, 64, 22);
+fenstergroesse setzen (fuss, 1, 24, 79, 1);
+dialogfenster (16, 2, 64, 22);
+anzeigefenster (16, 2, 64, 23);
+uebersichtsfenster (1, 2, 79, 23);
+
+
+(*************************** EUDAS ***************************************)
+
+TEXT VAR
+ fusszeile;
+
+BOOL VAR
+ eudas schon aktiv := FALSE;
+
+LET
+ menue 1 = #1001#
+ "EUDAS.Öffnen",
+ menue 2 = #1002#
+ "EUDAS.Einzelsatz",
+ menue 3 = #1003#
+ "EUDAS.Gesamtdatei",
+ menue 4 = #1004#
+ "EUDAS.Drucken",
+ menue 5 = #1005#
+ "EUDAS.Dateien",
+ menue 6 = #1006#
+ "EUDAS.Archiv";
+
+LET
+ kein rekursiver aufruf = #1007#
+ "EUDAS kann nicht unter EUDAS aufgerufen werden",
+ suchmuster eingeben = #1008#
+ "Suchbedingung einstellen",
+ alle saetze drucken = #1009#
+ "Alle Saetze drucken",
+ alle markierten saetze drucken = #1010#
+ "Alle markierten Satze drucken",
+ einzelsatz drucken = #1011#
+ "Aktuellen Satz drucken",
+ uebersicht wiederholen = #1012#
+ "Mit neuer Auswahl noch einmal",
+ akt datei = #1013#
+ "Akt.Datei: ",
+ datum doppelpunkt = #1014#
+ " Datum: ";
+
+
+PROC version ausgeben :
+
+ cursor (30, 6);
+ out ("EEEEE U U DDDD A SSSS");
+ cursor (30, 7);
+ out ("E U U D D A A S");
+ cursor (30, 8);
+ out ("EEE U U D D AAAAA SSS");
+ cursor (30, 9);
+ out ("E U U D D A A S");
+ cursor (30, 10);
+ out ("EEEEE UUU DDDD A A SSSS");
+ cursor (30, 12);
+ out ("Version 4.4");
+ cursor (30, 13);
+ out ("Stand: 01.10.87");
+ cursor (30, 15);
+ out ("(C) COPYRIGHT:");
+ cursor (30, 16);
+ out ("Thomas Berlage");
+ cursor (30, 17);
+ out ("Software-Systeme")
+
+END PROC version ausgeben;
+
+PROC eudas :
+
+ IF aktueller editor > 0 THEN
+ eudas kurzabfrage
+ ELIF eudas schon aktiv THEN
+ errorstop (kein rekursiver aufruf)
+ ELSE
+ eudas aufrufen
+ END IF .
+
+eudas aufrufen :
+ page; bildschirm neu;
+ version ausgeben;
+ belegter heap := heap size;
+ fusszeile aufbauen;
+ disable stop;
+ eudas schon aktiv := TRUE;
+ menue anbieten (ROW 6 TEXT : (menue 1, menue 2, menue 3,
+ menue 4, menue 5, menue 6),
+ links, TRUE,
+ PROC (INT CONST, INT CONST) eudas interpreter);
+ eudas schon aktiv := FALSE;
+ enable stop;
+ auf sicherung ueberpruefen;
+ page; bildschirm neu
+
+END PROC eudas;
+
+PROC eudas kurzabfrage :
+
+ TEXT VAR gewaehlte feldnamen;
+ bild frei;
+ auf sicherung ueberpruefen;
+ IF nicht alle gesichert THEN
+ LEAVE eudas kurzabfrage
+ END IF;
+ oeffnen im menue (FALSE);
+ auf satz (1);
+ feldauswahl fuer uebersicht (gewaehlte feldnamen);
+ REP
+ ggf suchmuster eingeben;
+ uebersicht (gewaehlte feldnamen, PROC uebersicht hilfe);
+ bild frei;
+ saetze drucken
+ UNTIL nicht noch einmal END REP;
+ dateien loeschen (FALSE) .
+
+nicht alle gesichert :
+ INT VAR datei nr;
+ FOR datei nr FROM 1 UPTO anzahl dateien REP
+ IF inhalt veraendert (datei nr) THEN
+ LEAVE nicht alle gesichert WITH TRUE
+ END IF
+ END REP;
+ FALSE .
+
+ggf suchmuster eingeben :
+ IF ja (suchmuster eingeben, "JA/Suchmuster") THEN
+ suchen; alles neu
+ END IF .
+
+saetze drucken :
+ IF markierte saetze = 0 CAND alle drucken THEN
+ dateinamen anfordern (name des druckmusters);
+ einzelausfuehrung (PROC (TEXT CONST) drucke uebersicht, file typ);
+ ELIF markierte saetze > 0 CAND alle markierten drucken THEN
+ dateinamen anfordern (name des druckmusters);
+ einzelausfuehrung (PROC (TEXT CONST) drucke uebersicht, file typ);
+ markierungen loeschen
+ ELIF einzelsatz THEN
+ markierungen loeschen; markierung aendern;
+ dateinamen anfordern (name des druckmusters);
+ einzelausfuehrung (PROC (TEXT CONST) drucke uebersicht, file typ);
+ markierungen loeschen
+ END IF .
+
+alle drucken :
+ ja (alle saetze drucken, "JA/alle Satze") .
+
+alle markierten drucken :
+ ja (alle markierten saetze drucken, "JA/alle markierten") .
+
+einzelsatz :
+ ja (einzelsatz drucken, "JA/Einzelsatz drucken") .
+
+nicht noch einmal :
+ NOT ja (uebersicht wiederholen, "JA/noch einmal") .
+
+END PROC eudas kurzabfrage;
+
+PROC bild frei :
+
+ bildschirm neu;
+ cursor (1, 1);
+ out (cleop);
+ cursor (15, 1);
+ 23 TIMESOUT (""10":"8"")
+
+END PROC bild frei;
+
+PROC drucke uebersicht (TEXT CONST dateiname) :
+
+ bild frei fuer uebersetzung;
+ disable stop;
+ drucke (dateiname);
+ uebersetzungsfehler behandeln;
+ bild frei
+
+END PROC drucke uebersicht;
+
+PROC eudas interpreter (INT CONST menuenr, wahl nr) :
+
+ enable stop;
+ SELECT menuenr OF
+ CASE 0 : waehlbarkeit setzen
+ CASE 1 : oeffnen interpreter (wahl nr)
+ CASE 2 : anzeigen interpreter (wahl nr)
+ CASE 3 : bearbeiten interpreter (wahl nr)
+ CASE 4 : drucken interpreter (wahl nr)
+ CASE 5 : dateiverwaltung (wahl nr)
+ CASE 6 : archivverwaltung (wahl nr)
+ END SELECT .
+
+waehlbarkeit setzen :
+ IF anzahl dateien = 0 THEN
+ oeffnen sperre (FALSE);
+ aendern sperre (FALSE)
+ ELIF NOT aendern erlaubt THEN
+ aendern sperre (FALSE)
+ END IF;
+ ketten koppeln sperre;
+ waehlbar (6, 6, ziel ist manager);
+ waehlbar (6, 9, NOT ziel ist manager);
+ IF single user THEN
+ waehlbar (1, 8, FALSE); (* Manager *)
+ waehlbar (6, 7, FALSE) (* Zielarchiv *)
+ END IF .
+
+single user :
+ FALSE .
+
+END PROC eudas interpreter;
+
+PROC oeffnen sperre (BOOL CONST wie) :
+
+ INT VAR i;
+ waehlbar (1, 4, wie);
+ waehlbar (1, 5, wie);
+ waehlbar (1, 7, wie);
+ FOR i FROM 1 UPTO 11 REP
+ waehlbar (2, i, wie)
+ END REP;
+ waehlbar (3, 1, wie);
+ waehlbar (3, 4, wie);
+ waehlbar (3, 6, wie);
+ waehlbar (4, 1, wie)
+
+END PROC oeffnen sperre;
+
+PROC ketten koppeln sperre :
+
+ BOOL VAR wie := anzahl dateien = 1 AND aendern erlaubt;
+ waehlbar (1, 6, wie);
+ waehlbar (3, 5, wie);
+ wie := anzahl dateien > 0 AND anzahl dateien < 10 AND NOT auf koppeldatei;
+ waehlbar (1, 2, wie);
+ waehlbar (1, 3, wie)
+
+END PROC ketten koppeln sperre;
+
+PROC aendern sperre (BOOL CONST wie) :
+
+ INT VAR i;
+ FOR i FROM 7 UPTO 10 REP
+ waehlbar (2, i, wie)
+ END REP;
+ waehlbar (3, 2, wie);
+ waehlbar (3, 3, wie)
+
+END PROC aendern sperre;
+
+PROC fusszeile aufbauen :
+
+ fenster veraendert (fuss);
+ fusszeile := ""6""23""0"";
+ fusszeile CAT akt datei;
+ IF anzahl dateien > 0 THEN
+ fusszeile CAT """";
+ fusszeile CAT eudas dateiname (1);
+ fusszeile CAT """"
+ END IF;
+ IF anzahl dateien > 1 THEN
+ fusszeile CAT " .. "
+ END IF;
+ fusszeile CAT ""5""6""23"";
+ fusszeile CAT code (79 - length (date) - length (datum doppelpunkt));
+ fusszeile CAT datum doppelpunkt;
+ fusszeile CAT date
+
+END PROC fusszeile aufbauen;
+
+PROC fusszeile ausgeben (TEXT CONST prompt, inhalt) :
+
+ BOOL VAR fuss veraendert;
+ fensterzugriff (fuss, fuss veraendert);
+ IF fuss veraendert THEN
+ out (fusszeile);
+ cursor (35, 24);
+ out (prompt);
+ IF inhalt <> niltext THEN
+ out (""""); outsubtext (inhalt, 1, 22 - length (prompt)); out (""" ")
+ END IF
+ END IF
+
+END PROC fusszeile ausgeben;
+
+
+(**************************** Menue 'Oeffnen' *****************************)
+
+THESAURUS VAR zusaetzliche namen := empty thesaurus;
+
+BOOL VAR
+ nach aendern fragen,
+ multi user manager eingestellt := FALSE;
+
+TASK VAR multi user manager;
+
+TEXT VAR
+ manager taskname := niltext,
+ herkunftszeichen := niltext;
+
+LET
+ p manager = #1015#
+ " Manager: ",
+ keine sicherung noetig = #1017#
+ "Keine Sicherung noetig.",
+ arbeitskopien loeschen = #1018#
+ "Interne Arbeitskopien loeschen",
+ t arbeitskopie = #1019#
+ "Arbeitskopie ",
+ t unveraendert = #1020#
+ " unveraendert.",
+ t veraendert = #1021#
+ " veraendert! Sichern",
+ alte version ueberschreiben = #1022#
+ "Alte Version ueberschreiben",
+ unter dem namen = #1023#
+ "Sondern unter dem Namen:",
+ ueberschreiben = #1024#
+ " ueberschreiben",
+ sortierung wiederherstellen = #1025#
+ "Datei wieder sortieren",
+ t notizen ansehen = #1026#
+ "Notizen",
+ name task = #1027#
+ "Name Managertask:",
+ task existiert nicht = #1028#
+ "Task existiert nicht !",
+ wollen sie etwas veraendern = #1029#
+ "Wollen Sie etwas veraendern (eine Arbeitskopie anlegen)",
+ markierungen geloescht = #1030#
+ "Alle Markierungen gelöscht.",
+ t pruefbedingungen = #1032#
+ "Pruefbedingungen",
+ felder aendern = #1033#
+ "Feldnamen oder Feldtypen aendern",
+ t feldnamen anfuegen = #1034#
+ "Feldnamen anfuegen",
+ neuer feldname = #1035#
+ "Neuer Feldname:",
+ neuer typ = #1036#
+ "Neuer Typ (TEXT,DIN,ZAHL,DATUM):",
+ neue feldnamen eingeben = #1037#
+ "Neue Feldnamen",
+ id text = #1038#
+ "TEXT",
+ id din = #1039#
+ "DIN",
+ id zahl = #1040#
+ "ZAHL",
+ id datum = #1041#
+ "DATUM",
+ alte feldreihenfolge aendern = #1042#
+ "Alte Feldreihenfolge aendern",
+ speicherengpass = #1043#
+ ""7"ACHTUNG: System voll, Dateien loeschen!";
+
+
+PROC oeffnen interpreter (INT CONST wahl nr) :
+
+ SELECT wahl nr OF
+ CASE 0 : auf geschlossene datei pruefen
+ CASE 1 : neue datei oeffnen
+ CASE 2 : datei ketten
+ CASE 3 : datei koppeln
+ CASE 4 : aktuelle datei sichern
+ CASE 5 : notizen editieren
+ CASE 6 : feldstruktur aendern
+ CASE 7 : pruefbedingungen aendern
+ CASE 8 : multi user manager einstellen
+ OTHERWISE ggf dialogfenster loeschen
+ END SELECT;
+ fusszeile ausgeben (p manager, manager taskname);
+ storage kontrollieren;
+ heap kontrollieren .
+
+auf geschlossene datei pruefen :
+ IF anzahl dateien = 0 THEN
+ eudas interpreter (0, 0)
+ END IF .
+
+neue datei oeffnen :
+ auf sicherung ueberpruefen;
+ oeffnen im menue (TRUE);
+ push (2) .
+
+datei ketten :
+ disable stop;
+ manager pre;
+ ausfuehrung (PROC (TEXT CONST) ketten, eudas typ);
+ manager post;
+ enable stop;
+ ketten koppeln sperre .
+
+datei koppeln :
+ disable stop;
+ manager pre;
+ ausfuehrung (PROC (TEXT CONST) koppeln, eudas typ);
+ manager post;
+ enable stop;
+ ketten koppeln sperre .
+
+aktuelle datei sichern :
+ IF aendern erlaubt THEN
+ einzeldateien abfragen
+ ELSE
+ dialog; out (keine sicherung noetig);
+ dateien aus manager loeschen
+ END IF;
+ sperre setzen .
+
+einzeldateien abfragen :
+ INT VAR datei nr;
+ FOR datei nr FROM 1 UPTO anzahl dateien REP
+ einzelsicherung (datei nr)
+ END REP;
+ IF ja (arbeitskopien loeschen, "JA/Dateien loeschen") THEN
+ dateien aus manager zuruecksichern;
+ dateien loeschen (TRUE)
+ END IF .
+
+sperre setzen :
+ IF anzahl dateien = 0 THEN
+ oeffnen sperre (FALSE);
+ aendern sperre (FALSE)
+ END IF;
+ ketten koppeln sperre;
+ fusszeile aufbauen .
+
+dateien aus manager loeschen :
+ INT CONST vorhandene dateien := anzahl dateien;
+ dateien loeschen (FALSE);
+ FOR datei nr FROM 1 UPTO vorhandene dateien REP
+ IF manager herkunft (datei nr) THEN
+ loeschen (eudas dateiname (datei nr))
+ END IF
+ END REP .
+
+notizen editieren :
+ notizen ansehen;
+ dialogfenster loeschen .
+
+feldstruktur aendern :
+ zugriff (PROC (EUDAT VAR) feldstruktur) .
+
+pruefbedingungen aendern :
+ pruefbedingungen;
+ dialogfenster loeschen .
+
+multi user manager einstellen :
+ manager taskname := "";
+ fenster veraendert (fuss);
+ editget (name task, manager taskname, "", "GET/multi task");
+ IF manager taskname = "" THEN
+ multi user manager eingestellt := FALSE
+ ELIF exists (/manager taskname) THEN
+ multi user manager := task (manager taskname);
+ multi user manager eingestellt := TRUE
+ ELSE
+ multi user manager eingestellt := FALSE;
+ manager taskname := "";
+ errorstop (task existiert nicht)
+ END IF .
+
+heap kontrollieren :
+ IF heap size - belegter heap > 4 THEN
+ collect heap garbage;
+ belegter heap := heap size
+ END IF .
+
+ggf dialogfenster loeschen :
+ IF wahl nr = -1 THEN
+ dialogfenster loeschen;
+ fenster veraendert (fuss);
+ LEAVE oeffnen interpreter
+ END IF .
+
+END PROC oeffnen interpreter;
+
+PROC auf sicherung ueberpruefen :
+
+ BOOL VAR notwendig := FALSE;
+ IF aendern erlaubt THEN
+ wirklich pruefen
+ END IF;
+ IF notwendig THEN dialog (* Leerzeile *) END IF .
+
+wirklich pruefen :
+ INT VAR datei nr;
+ FOR datei nr FROM 1 UPTO anzahl dateien REP
+ IF inhalt veraendert (datei nr) THEN
+ einzelsicherung (datei nr);
+ notwendig := TRUE;
+ ggf last param korrigieren
+ END IF
+ END REP .
+
+ggf last param korrigieren :
+ IF datei nr = 1 CAND std = eudas dateiname (1) THEN
+ last param (niltext)
+ END IF .
+
+END PROC auf sicherung ueberpruefen;
+
+PROC einzelsicherung (INT CONST datei nr) :
+
+ frage zusammenbauen;
+ IF inhalt veraendert (datei nr) THEN
+ IF ja (frage, "JA/sichere") THEN
+ sicherung durchfuehren
+ END IF
+ ELSE
+ dialog; out (frage)
+ END IF .
+
+frage zusammenbauen :
+ TEXT VAR frage := t arbeitskopie;
+ frage CAT textdarstellung (eudas dateiname (datei nr));
+ IF inhalt veraendert (datei nr) THEN
+ frage CAT t veraendert
+ ELSE
+ frage CAT t unveraendert
+ END IF .
+
+sicherung durchfuehren :
+ TEXT VAR name := eudas dateiname (datei nr);
+ IF ja (alte version ueberschreiben, "JA/alte version") THEN
+ forget (name, quiet)
+ ELIF manager herkunft (datei nr) THEN
+ errorstop (niltext)
+ ELSE
+ neuen namen erfragen
+ END IF;
+ sichere (datei nr, name);
+ eventuell sortierung wiederherstellen .
+
+neuen namen erfragen :
+ edit get (unter dem namen, name, "", "GET/Sicherungsname");
+ IF exists (name) THEN
+ eventuell ueberschreiben
+ END IF .
+
+eventuell ueberschreiben :
+ IF ja (textdarstellung (name) + ueberschreiben, "JA/ueber") THEN
+ forget (name, quiet)
+ ELSE
+ einzelsicherung (datei nr);
+ LEAVE einzelsicherung
+ END IF .
+
+eventuell sortierung wiederherstellen :
+ EUDAT VAR eudat;
+ oeffne (eudat, name);
+ IF war sortiert CAND soll sortiert werden THEN
+ bitte warten;
+ sortiere (eudat)
+ END IF .
+
+war sortiert :
+ sortierreihenfolge (eudat) <> niltext CAND unsortierte saetze (eudat) > 0 .
+
+soll sortiert werden :
+ ja (sortierung wiederherstellen, "JA/Sicherungssortierung") .
+
+END PROC einzelsicherung;
+
+PROC oeffnen im menue (BOOL CONST aendern fragen) :
+
+ IF aendern erlaubt THEN
+ dateien aus manager zuruecksichern
+ END IF;
+ dateien loeschen (TRUE);
+ oeffnen sperre (FALSE);
+ aendern sperre (FALSE);
+ forget (test ds);
+ disable stop;
+ manager pre;
+ nach aendern fragen := aendern fragen;
+ einzelausfuehrung (PROC (TEXT CONST) oeffnen, eudas typ);
+ manager post;
+ ketten koppeln sperre;
+ enable stop;
+ IF anzahl dateien > 0 THEN
+ oeffnen sperre (TRUE);
+ aendern sperre (aendern erlaubt)
+ END IF
+
+END PROC oeffnen im menue;
+
+PROC manager pre :
+
+ IF multi user manager eingestellt THEN
+ zusaetzliche namen := ALL multi user manager
+ END IF
+
+END PROC manager pre;
+
+PROC manager post :
+
+ zusaetzliche namen := empty thesaurus;
+ fusszeile aufbauen
+
+END PROC manager post;
+
+PROC dateien aus manager zuruecksichern :
+
+ INT VAR datei nr;
+ FOR datei nr FROM 1 UPTO anzahl dateien REP
+ IF manager herkunft (datei nr) THEN
+ save oder free an manager
+ END IF
+ END REP .
+
+save oder free an manager :
+ IF in manager ueberschreiben THEN
+ disable stop;
+ set command dialogue false;
+ save (eudas dateiname (datei nr), multi user manager);
+ reset command dialogue;
+ enable stop;
+ forget (eudas dateiname (datei nr), quiet)
+ ELSE
+ free (eudas dateiname (datei nr), multi user manager)
+ END IF;
+ herkunft eintragen (datei nr, FALSE) .
+
+in manager ueberschreiben :
+ exists (eudas dateiname (datei nr)) .
+
+END PROC dateien aus manager zuruecksichern;
+
+PROC multi datei loeschen :
+
+ IF manager herkunft (anzahl dateien) AND aendern erlaubt THEN
+ forget (eudas dateiname (anzahl dateien), quiet)
+ END IF
+
+END PROC multi datei loeschen;
+
+PROC oeffnen (TEXT CONST dateiname) :
+
+ BOOL VAR auch aendern;
+ eventuell neu einrichten;
+ oeffne (dateiname, auch aendern);
+ multi datei loeschen .
+
+eventuell neu einrichten :
+ IF datei existiert nicht AND nach aendern fragen THEN
+ frage ob einrichten (dateiname);
+ EUDAT VAR eudat;
+ oeffne (eudat, dateiname);
+ feldstruktur (eudat);
+ auch aendern := TRUE
+ ELSE
+ auch aendern :=
+ nach aendern fragen CAND ja (wollen sie etwas veraendern, "JA/oeffne");
+ aus manager besorgen (dateiname, auch aendern)
+ END IF .
+
+datei existiert nicht :
+ NOT exists (dateiname) AND NOT (zusaetzliche namen CONTAINS dateiname) .
+
+END PROC oeffnen;
+
+PROC ketten (TEXT CONST dateiname) :
+
+ aus manager besorgen (dateiname, aendern erlaubt);
+ kette (dateiname);
+ multi datei loeschen
+
+END PROC ketten;
+
+PROC koppeln (TEXT CONST dateiname) :
+
+ aus manager besorgen (dateiname, aendern erlaubt);
+ kopple (dateiname);
+ multi datei loeschen
+
+END PROC koppeln;
+
+PROC aus manager besorgen (TEXT CONST dateiname, BOOL CONST mit lock) :
+
+ BOOL VAR herkunft := FALSE;
+ IF multi user manager eingestellt THEN
+ manager abfragen
+ END IF;
+ herkunft eintragen (anzahl dateien + 1, herkunft) .
+
+manager abfragen :
+ IF (zusaetzliche namen CONTAINS dateiname) CAND
+ (NOT exists (dateiname) COR eigene datei ueberschreiben) THEN
+ IF mit lock THEN
+ lock (dateiname, multi user manager)
+ END IF;
+ forget (dateiname, quiet);
+ fetch (dateiname, multi user manager);
+ herkunft := TRUE
+ END IF .
+
+eigene datei ueberschreiben :
+ ja (textdarstellung (dateiname) + t im system ueberschreiben, "JA/fetch") .
+
+END PROC aus manager besorgen;
+
+PROC herkunft eintragen (INT CONST dateiindex, BOOL CONST herkunft) :
+
+ WHILE length (herkunftszeichen) < dateiindex REP
+ herkunftszeichen CAT blank
+ END REP;
+ replace (herkunftszeichen, dateiindex, entsprechendes zeichen) .
+
+entsprechendes zeichen :
+ IF herkunft THEN
+ "-"
+ ELSE
+ blank
+ END IF .
+
+END PROC herkunft eintragen;
+
+BOOL PROC manager herkunft (INT CONST dateiindex) :
+
+ IF length (herkunftszeichen) < dateiindex THEN
+ FALSE
+ ELSE
+ (herkunftszeichen SUB dateiindex) <> blank
+ END IF
+
+END PROC manager herkunft;
+
+PROC notizen ansehen :
+
+ notizen lesen (3, feldpuffer);
+ DATASPACE VAR ds := nilspace;
+ FILE VAR f := sequential file (output, ds);
+ disable stop;
+ headline (f, t notizen ansehen);
+ notizen anbieten (f, feldpuffer, ganz, "EDIT/Notizen");
+ forget (ds);
+ enable stop;
+ IF aendern erlaubt THEN
+ notizen aendern (3, feldpuffer)
+ END IF
+
+END PROC notizen ansehen;
+
+PROC notizen anbieten (FILE VAR f, TEXT VAR puffer,
+ FENSTER CONST edit fenster, TEXT CONST hilfsname) :
+
+ LET trennzeichen = "#-#";
+ enable stop;
+ notizen in datei;
+ datei editieren;
+ notizen aus datei .
+
+notizen in datei :
+ INT VAR
+ von := 1,
+ bis;
+ REP
+ bis := pos (puffer, trennzeichen, von);
+ IF bis = 0 THEN
+ putline (f, subtext (puffer, von))
+ ELSE
+ putline (f, subtext (puffer, von, bis - 1))
+ END IF;
+ von := bis + 3
+ UNTIL bis = 0 OR von > length (puffer) END REP .
+
+datei editieren :
+ modify (f);
+ edit (f, edit fenster, hilfsname, TRUE) .
+
+notizen aus datei :
+ TEXT VAR zeile;
+ puffer := niltext;
+ input (f);
+ WHILE NOT eof (f) REP
+ getline (f, zeile);
+ blank entfernen;
+ puffer CAT zeile;
+ puffer CAT trennzeichen
+ END REP .
+
+blank entfernen :
+ IF (zeile SUB length (zeile)) = blank THEN
+ zeile := subtext (zeile, 1, length (zeile) - 1)
+ END IF .
+
+END PROC notizen anbieten;
+
+PROC feldstruktur (EUDAT VAR eudat) :
+
+ SATZ VAR satz;
+ feldnamen lesen (eudat, satz);
+ IF feldnamen anfuegen THEN
+ feldnamen editieren
+ END IF;
+ IF ja (felder aendern, "JA/Feldaendern") THEN
+ auswahl zu aendernder felder
+ END IF .
+
+feldnamen anfuegen :
+ IF felderzahl (satz) > 0 THEN
+ ja (t feldnamen anfuegen, "JA/feldnamen")
+ ELSE
+ TRUE
+ END IF .
+
+feldnamen editieren :
+ DATASPACE VAR ds := nilspace;
+ FILE VAR f := sequential file (output, ds);
+ disable stop;
+ feldnamen anbieten (f, satz);
+ forget (ds);
+ enable stop;
+ feldnamen aendern (eudat, satz) .
+
+auswahl zu aendernder felder :
+ feldtypen dazuschreiben;
+ auswahl anbieten ("EUDAS-Felder", rechts, "AUSWAHL/Felder",
+ PROC (TEXT VAR, INT CONST) aus sammel);
+ INT VAR feldnr := 1;
+ WHILE wahl (feldnr) > 0 REP
+ ein feld aendern;
+ feldnr INCR 1
+ END REP;
+ feldnamen aendern (eudat, satz) .
+
+feldtypen dazuschreiben :
+ satz initialisieren (sammel);
+ FOR feldnr FROM 1 UPTO felderzahl (satz) REP
+ feld lesen (satz, feldnr, feldpuffer);
+ feld aendern (sammel, feldnr, info + textdarstellung (feldpuffer))
+ END REP .
+
+info :
+ "(" + typtext (feldinfo (eudat, feldnr)) + ") " .
+
+ein feld aendern :
+ TEXT VAR feldname;
+ feld lesen (satz, wahl (feldnr), feldname);
+ editget (neuer feldname, feldname, "", "GET/feldname");
+ feld aendern (satz, wahl (feldnr), feldname);
+ TEXT VAR typ := typtext (feldinfo (eudat, wahl (feldnr)));
+ REP
+ editget (neuer typ, typ, "", "GET/feldtyp")
+ UNTIL texttyp (typ) >= -1 END REP;
+ feldinfo (eudat, wahl (feldnr), texttyp (typ)) .
+
+END PROC feldstruktur;
+
+PROC pruefbedingungen :
+
+ enable stop;
+ DATASPACE VAR ds := nilspace;
+ FILE VAR f := sequential file (output, ds);
+ headline (f, t pruefbedingungen);
+ notizen lesen (1, feldpuffer);
+ disable stop;
+ notizen anbieten (f, feldpuffer, ganz, "EDIT/Pruefbed");
+ forget (ds);
+ enable stop;
+ IF aendern erlaubt THEN
+ notizen aendern (1, feldpuffer)
+ END IF .
+
+END PROC pruefbedingungen;
+
+PROC feldnamen anbieten (FILE VAR f, SATZ VAR satz) :
+
+ enable stop;
+ neue namen editieren;
+ neue namen zurueckschreiben .
+
+neue namen editieren :
+ modify (f);
+ headline (f, neue feldnamen eingeben);
+ edit (f, rechts, "EDIT/Feldnamen", TRUE) .
+
+neue namen zurueckschreiben :
+ INT VAR feldnr := felderzahl (satz);
+ input (f);
+ WHILE NOT eof (f) REP
+ getline (f, feldpuffer);
+ blank entfernen;
+ feldnr INCR 1;
+ feld aendern (satz, feldnr, feldpuffer)
+ END REP .
+
+blank entfernen :
+ IF (feldpuffer SUB length (feldpuffer)) = blank THEN
+ feldpuffer := subtext (feldpuffer, 1, length (feldpuffer) - 1)
+ END IF .
+
+END PROC feldnamen anbieten;
+
+TEXT PROC typtext (INT CONST typ) :
+
+ SELECT typ + 1 OF
+ CASE 0 : id text
+ CASE 1 : id din
+ CASE 2 : id zahl
+ CASE 3 : id datum
+ OTHERWISE niltext
+ END SELECT
+
+END PROC typtext;
+
+INT PROC texttyp (TEXT CONST t) :
+
+ IF t = id text THEN -1
+ ELIF t = id din THEN 0
+ ELIF t = id zahl THEN 1
+ ELIF t = id datum THEN 2
+ ELSE -2
+ END IF
+
+END PROC texttyp;
+
+PROC storage kontrollieren :
+
+ INT VAR size, used;
+ storage (size, used);
+ IF used > size THEN
+ neuer dialog; dialog;
+ out (speicherengpass)
+ END IF
+
+END PROC storage kontrollieren;
+
+
+(************************* Menue 'Einzelsatz' *****************************)
+
+BOOL VAR
+ satz leer,
+ umgeschaltet aus einfuegen := FALSE,
+ umgeschaltet aus aendern := FALSE;
+
+LET
+ aendern status = #1044#
+"SATZ AENDERN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?",
+ einfuegen status = #1045#
+"SATZ EINFUEGEN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?",
+ suchen status = #1046#
+"SUCHMUSTER EINGEBEN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?",
+ umschalten auf = #1047#
+ "Umschalten auf Koppeldatei ",
+ koppelfelder uebernehmen = #1048#
+ "Koppelfelder uebernehmen",
+ ungueltige satznummer = #1049#
+ "Ungueltige Satznummer",
+ neue satznummer = #1050#
+ "Neue Satznummer:",
+ t bitte warten = #1051#
+ " Bitte warten.. ",
+ wzk = #1052#
+ "wzK",
+ wz = #1053#
+ "wz";
+
+LET
+ blanks unten links = ""6""23""0" :",
+ blanks unten ganz = ""6""23""0" :"5"";
+
+
+PROC anzeigen interpreter (INT CONST wahl nr) :
+
+ SELECT wahl nr OF
+ CASE 0 : anzeige einschalten
+ CASE 1 : einen satz weiter
+ CASE 2 : einen satz zurueck
+ CASE 3 : direkt auf satz
+ CASE 4 : saetze auswaehlen
+ CASE 5 : auswahlbedingung loeschen
+ CASE 6 : aktuelle markierung aendern
+ CASE 7 : neuen satz einfuegen
+ CASE 8 : aktuellen satz aendern
+ CASE 9 : einzelsatz tragen
+ CASE 10: einzelsatz holen
+ CASE 11: felder auswaehlen
+ CASE 12: esc oben
+ CASE 13: esc unten
+ CASE 14: esc 1
+ CASE 15: esc 9
+ CASE 16: esc k
+ OTHERWISE anzeige update
+ END SELECT;
+ storage kontrollieren .
+
+anzeige einschalten :
+ exit zeichen (wz) .
+
+einen satz weiter :
+ bitte warten;
+ weiter (2);
+ bild ausgeben (FALSE) .
+
+einen satz zurueck :
+ bitte warten;
+ zurueck (2);
+ bild ausgeben (FALSE) .
+
+saetze auswaehlen :
+ suchen;
+ bild ausgeben (TRUE) .
+
+auswahlbedingung loeschen :
+ suchbedingung loeschen;
+ bild ausgeben (FALSE) .
+
+direkt auf satz :
+ TEXT VAR nr := niltext;
+ fusszeile ganz loeschen;
+ editget (neue satznummer, nr, "", "GET/auf satz");
+ INT CONST ziel := int (nr);
+ IF nr = niltext THEN
+ bild ausgeben (FALSE)
+ ELIF last conversion ok THEN
+ auf satz (ziel);
+ bild ausgeben (FALSE)
+ ELSE
+ errorstop (ungueltige satznummer)
+ END IF .
+
+neuen satz einfuegen :
+ einfuegen;
+ bild ausgeben (TRUE) .
+
+aktuellen satz aendern :
+ aendern;
+ bild ausgeben (TRUE) .
+
+aktuelle markierung aendern :
+ markierung aendern;
+ bild ausgeben (FALSE) .
+
+einzelsatz tragen :
+ last param darf nicht geoeffnet sein;
+ fusszeile ganz loeschen;
+ dateinamen anfordern (name der zieldatei);
+ einzelausfuehrung (PROC (TEXT CONST) trage satz und frage, eudas typ);
+ bild ausgeben (TRUE) .
+
+einzelsatz holen :
+ last param darf nicht geoeffnet sein;
+ fusszeile ganz loeschen;
+ dateinamen anfordern (name der quelldatei);
+ einzelausfuehrung (PROC (TEXT CONST) hole satz, eudas typ);
+ bild ausgeben (TRUE) .
+
+felder auswaehlen :
+ TEXT VAR wahlvektor;
+ fusszeile ganz loeschen;
+ felder waehlen lassen (wahlvektor);
+ IF wahlvektor <> niltext THEN
+ feldauswahl (wahlvektor)
+ END IF;
+ bild ausgeben (TRUE) .
+
+esc oben :
+ rollcursor;
+ rollen (-23);
+ IF anzahl dateien > 0 THEN
+ bild ausgeben (FALSE)
+ END IF .
+
+esc unten :
+ rollcursor;
+ rollen (23);
+ IF anzahl dateien > 0 THEN
+ bild ausgeben (FALSE)
+ END IF .
+
+esc 1 :
+ rollcursor;
+ rollen (-9999);
+ IF anzahl dateien > 0 THEN
+ bild ausgeben (FALSE)
+ END IF .
+
+esc 9 :
+ rollcursor;
+ rollen (9999);
+ IF anzahl dateien > 0 THEN
+ bild ausgeben (FALSE)
+ END IF .
+
+esc k :
+ IF auf koppeldatei THEN
+ zurueckschalten
+ ELSE
+ auf koppeldatei umschalten
+ END IF;
+ IF anzahl dateien > 0 THEN
+ bild ausgeben (TRUE)
+ END IF .
+
+zurueckschalten :
+ IF (umgeschaltet aus aendern OR umgeschaltet aus einfuegen) THEN
+ fragen ob koppelfelder uebernehmen;
+ wieder in alte operation
+ ELSE
+ auf koppeldatei (0)
+ END IF;
+ ketten koppeln sperre .
+
+fragen ob koppelfelder uebernehmen :
+ fusszeile ganz loeschen;
+ IF NOT dateiende CAND ja (koppelfelder uebernehmen, "JA/uebernehmen") THEN
+ auf koppeldatei (1)
+ ELSE
+ auf koppeldatei (0)
+ END IF .
+
+wieder in alte operation :
+ umgeschaltet aus einfuegen := FALSE;
+ IF umgeschaltet aus aendern THEN
+ umgeschaltet aus aendern := FALSE;
+ aendern
+ ELSE
+ einfuegen intern (TRUE)
+ END IF .
+
+anzeige update :
+ IF wahl nr = -2 THEN
+ IF anzahl dateien > 0 THEN
+ fusszeile links loeschen;
+ bild ausgeben (FALSE)
+ ELSE
+ fusszeile ganz loeschen
+ END IF
+ ELSE
+ dialogfenster loeschen;
+ fenster veraendert (fuss)
+ END IF .
+
+fusszeile links loeschen :
+ out (blanks unten links) .
+
+fusszeile ganz loeschen :
+ out (blanks unten ganz) .
+
+END PROC anzeigen interpreter;
+
+PROC suchen :
+
+ disable stop;
+ exit zeichen ("");
+ status anzeigen (suchen status);
+ suchen (PROC suchen hilfe);
+ exit zeichen (wz)
+
+END PROC suchen;
+
+PROC suchen hilfe :
+
+ hilfe anbieten ("EDIT/Suchen", rechts)
+
+END PROC suchen hilfe;
+
+PROC bitte warten :
+
+ status anzeigen (t bitte warten)
+
+END PROC bitte warten;
+
+PROC einfuegen :
+
+ einfuegen intern (FALSE)
+
+END PROC einfuegen;
+
+PROC einfuegen intern (BOOL CONST nach umschalten) :
+
+ BOOL VAR weiter aendern := nach umschalten;
+ exit zeichen setzen;
+ REP
+ status anzeigen (einfuegen status);
+ IF weiter aendern THEN
+ aendern (PROC einfuegen hilfe);
+ weiter aendern := FALSE
+ ELSE
+ einfuegen (PROC einfuegen hilfe)
+ END IF;
+ satz untersuchen;
+ exit zeichen bei einfuegen behandeln
+ END REP .
+
+exit zeichen bei einfuegen behandeln :
+ SELECT pos (wzk, exit durch) OF
+ CASE 0 : IF satz leer THEN
+ satz loeschen
+ END IF;
+ LEAVE einfuegen intern
+ CASE 1 : IF satz leer THEN
+ satz loeschen
+ ELSE
+ bitte warten; weiter (2)
+ END IF
+ CASE 2 : IF satz leer THEN
+ satz loeschen
+ ELSE
+ bitte warten; zurueck (2)
+ END IF
+ CASE 3 : auf koppeldatei umschalten;
+ IF auf koppeldatei THEN
+ umgeschaltet aus einfuegen := TRUE;
+ LEAVE einfuegen intern
+ END IF;
+ weiter aendern := TRUE
+ END SELECT .
+
+END PROC einfuegen intern;
+
+PROC einfuegen hilfe :
+
+ hilfe anbieten ("EDIT/Einfuegen", rechts)
+
+END PROC einfuegen hilfe;
+
+PROC exit zeichen setzen :
+
+ IF anzahl koppeldateien > 0 AND NOT auf koppeldatei THEN
+ exit zeichen (wzk)
+ ELSE
+ exit zeichen (wz)
+ END IF
+
+END PROC exit zeichen setzen;
+
+PROC aendern :
+
+ exit zeichen setzen;
+ kommando auf taste legen ("F", "prueffehler editieren");
+ REP
+ status anzeigen (aendern status);
+ aendern (PROC aendern hilfe);
+ satz untersuchen;
+ exit zeichen bei aendern behandeln
+ END REP .
+
+exit zeichen bei aendern behandeln :
+ SELECT pos (wzk, exit durch) OF
+ CASE 0 : IF satz leer THEN
+ satz loeschen
+ END IF;
+ LEAVE aendern
+ CASE 1 : IF satz leer THEN
+ satz loeschen
+ ELSE
+ bitte warten; weiter (2)
+ END IF
+ CASE 2 : IF satz leer THEN
+ satz loeschen
+ ELSE
+ bitte warten; zurueck (2)
+ END IF
+ CASE 3 : auf koppeldatei umschalten;
+ IF auf koppeldatei THEN
+ umgeschaltet aus aendern := TRUE;
+ LEAVE aendern
+ END IF
+ END SELECT .
+
+END PROC aendern;
+
+PROC aendern hilfe :
+
+ hilfe anbieten ("EDIT/Aendern", rechts)
+
+END PROC aendern hilfe;
+
+PROC prueffehler editieren :
+
+ IF test version = datei version THEN
+ modify (test file);
+ edit (test file)
+ END IF
+
+END PROC prueffehler editieren;
+
+PROC auf koppeldatei umschalten :
+
+ INT VAR datei nr := folgedatei (0);
+ WHILE datei nr > 0 REP
+ out (blanks unten ganz);
+ IF auf diese datei schalten THEN
+ auf koppeldatei (datei nr);
+ ketten koppeln sperre;
+ LEAVE auf koppeldatei umschalten
+ END IF;
+ datei nr := folgedatei (datei nr)
+ END REP .
+
+auf diese datei schalten :
+ ja (umschalten auf + textdarstellung (eudas dateiname (datei nr)),
+ "JA/umschalten") .
+
+END PROC auf koppeldatei umschalten;
+
+PROC zeilenrest ausgeben (TEXT CONST zeile, INT CONST dummy) :
+
+ outsubtext (zeile, anfang); out (cleol) .
+
+anfang :
+ pos (zeile, blank, 6) + 1 + dummy - dummy .
+
+END PROC zeilenrest ausgeben;
+
+PROC satz untersuchen :
+
+ feld bearbeiten (1, PROC (TEXT CONST, INT CONST, INT CONST) ob leer)
+
+END PROC satz untersuchen;
+
+PROC ob leer (TEXT CONST satz, INT CONST von, bis) :
+
+ satz leer := von < 3 OR von > length (satz) + bis - bis
+
+END PROC ob leer;
+
+PROC rollcursor :
+
+ cursor (15, 24)
+
+END PROC rollcursor;
+
+PROC trage satz und frage (TEXT CONST dateiname) :
+
+ IF exists (dateiname) THEN
+ teste auf offen
+ ELSE
+ frage ob einrichten (dateiname)
+ END IF;
+ bitte warten;
+ trage satz (dateiname) .
+
+teste auf offen :
+ IF index der arbeitskopie (dateiname) <> 0 THEN
+ errorstop (nicht in offene datei)
+ END IF .
+
+END PROC trage satz und frage;
+
+PROC felder waehlen lassen (TEXT VAR wahlvektor) :
+
+ auswahl anbieten ("EUDAS-Anzeigefelder", rechts, "AUSWAHL/Anzeigefelder",
+ PROC (TEXT VAR, INT CONST) gib namen);
+ wahlvektor := niltext;
+ INT VAR nr := 1;
+ WHILE wahl (nr) > 0 REP
+ wahlvektor CAT code (wahl (nr));
+ nr INCR 1
+ END REP
+
+END PROC felder waehlen lassen;
+
+
+(************************* Menue 'Gesamtdatei' ***************************)
+
+LET
+ felder auswaehlen = #1054#
+ "Angezeigte Felder auswaehlen",
+ aufsteigend sortieren = #1055#
+ " aufsteigend sortieren";
+
+DATASPACE VAR
+ kopier ds;
+
+
+PROC bearbeiten interpreter (INT CONST wahl nr) :
+
+ SELECT wahl nr OF
+ CASE 1 : saetze kopieren
+ CASE 2 : saetze tragen
+ CASE 3 : nach vorschrift aendern
+ CASE 4 : uebersicht ausgeben
+ CASE 5 : datei sortieren
+ CASE 6 : alle markierungen loeschen
+ OTHERWISE ggf dialogfenster loeschen
+ END SELECT;
+ storage kontrollieren .
+
+saetze tragen :
+ last param darf nicht geoeffnet sein;
+ dateinamen anfordern (name der zieldatei);
+ einzelausfuehrung (PROC (TEXT CONST) trage saetze, eudas typ) .
+
+saetze kopieren :
+ last param darf nicht geoeffnet sein;
+ dateinamen anfordern (name der zieldatei);
+ einzelausfuehrung (PROC (TEXT CONST) kopiere saetze, eudas typ);
+ dialogfenster loeschen;
+ fusszeile ausgeben ("", "") .
+
+nach vorschrift aendern :
+ dateinamen anfordern (name der verarbeitungsvorschrift);
+ ausfuehrung (PROC (TEXT CONST) verarbeite mit edit, file typ);
+ dialogfenster loeschen;
+ fusszeile ausgeben ("", "") .
+
+uebersicht ausgeben :
+ TEXT VAR uebersichtsauswahl;
+ feldauswahl fuer uebersicht (uebersichtsauswahl);
+ uebersicht (uebersichtsauswahl, PROC uebersicht hilfe);
+ dialogfenster loeschen;
+ fusszeile ausgeben ("", "") .
+
+datei sortieren :
+ zugriff (PROC (EUDAT VAR) einzelsortiere) .
+
+alle markierungen loeschen :
+ markierungen loeschen;
+ dialog; out (markierungen geloescht) .
+
+ggf dialogfenster loeschen :
+ IF wahl nr = -1 THEN
+ dialogfenster loeschen;
+ fenster veraendert (fuss)
+ ELIF wahl nr = -2 THEN
+ fusszeile ausgeben ("", "")
+ END IF .
+
+END PROC bearbeiten interpreter;
+
+PROC last param darf nicht geoeffnet sein :
+
+ IF index der arbeitskopie (std) <> 0 THEN
+ last param (niltext)
+ END IF
+
+END PROC last param darf nicht geoeffnet sein;
+
+PROC trage saetze (TEXT CONST dateiname) :
+
+ BOOL VAR mit test;
+ IF exists (dateiname) THEN
+ teste auf offen;
+ frage ob testen
+ ELSE
+ frage ob einrichten (dateiname);
+ mit test := FALSE
+ END IF;
+ BOOL CONST mit sortieren := ja (sortierfrage, "JA/sortieren");
+ bitte warten;
+ ggf datei initialisieren;
+ trage (dateiname, test file, mit test);
+ fehlerzahl ausgeben;
+ IF mit sortieren THEN
+ EUDAT VAR eudat;
+ oeffne (eudat, dateiname);
+ sortiere (eudat)
+ END IF .
+
+teste auf offen :
+ IF index der arbeitskopie (dateiname) <> 0 THEN
+ errorstop (nicht in offene datei)
+ END IF .
+
+frage ob testen :
+ mit test := ja (pruefbedingungen testen, "JA/testen") .
+
+ggf datei initialisieren :
+ IF mit test THEN
+ forget (test ds);
+ test ds := nilspace;
+ test file := sequential file (output, test ds);
+ test version := datei version
+ ELSE
+ forget (test ds);
+ test version := datei version - 1
+ END IF .
+
+fehlerzahl ausgeben :
+ IF mit test CAND lines (test file) > 0 THEN
+ dialog; put (lines (test file));
+ put (prueffehler festgestellt)
+ END IF .
+
+END PROC trage saetze;
+
+PROC verarbeite mit edit (TEXT CONST dateiname) :
+
+ IF NOT exists (dateiname) THEN
+ edit unten (dateiname, "EDIT/Verarbeite")
+ END IF;
+ bild frei fuer uebersetzung;
+ FILE VAR f := sequential file (input, dateiname);
+ disable stop;
+ verarbeite (f);
+ uebersetzungsfehler behandeln .
+
+END PROC verarbeite mit edit;
+
+PROC feldauswahl fuer uebersicht (TEXT VAR uebersichtsauswahl) :
+
+ uebersichtsauswahl := niltext;
+ IF ja (felder auswaehlen, "JA/Ub.Felder") THEN
+ felder waehlen lassen (uebersichtsauswahl)
+ END IF
+
+END PROC feldauswahl fuer uebersicht;
+
+PROC uebersicht hilfe :
+
+ hilfe anbieten ("UEBERSICHT", ganz)
+
+END PROC uebersicht hilfe;
+
+PROC kopiere saetze (TEXT CONST dateiname) :
+
+ disable stop;
+ kopier ds := nilspace;
+ kopiere saetze intern (dateiname);
+ forget (kopier ds)
+
+END PROC kopiere saetze;
+
+PROC kopiere saetze intern (TEXT CONST dateiname) :
+
+ TEXT VAR mustername := "";
+ FILE VAR f;
+ EUDAT VAR eudat;
+ BOOL VAR mit sortieren := FALSE;
+
+ enable stop;
+ IF exists (dateiname) THEN
+ teste auf offen und sortieren
+ ELSE
+ frage ob einrichten (dateiname)
+ END IF;
+ editget (name kopiermuster, mustername, "", "GET/kopiermuster");
+ IF exists (mustername) THEN
+ f := sequential file (input, mustername)
+ ELSE
+ ggf kopiermuster einrichten;
+ std kopiermuster (dateiname, f)
+ END IF;
+ modify (f);
+ wirklich kopieren;
+ ggf sortieren .
+
+teste auf offen und sortieren :
+ IF index der arbeitskopie (dateiname) <> 0 THEN
+ errorstop (nicht in offene datei)
+ END IF;
+ oeffne (eudat, dateiname);
+ IF sortierreihenfolge (eudat) <> niltext THEN
+ mit sortieren := ja (sortierfrage, "JA/sortieren")
+ END IF .
+
+ggf kopiermuster einrichten :
+ IF mustername = niltext THEN
+ f := sequential file (output, kopier ds)
+ ELSE
+ frage ob einrichten (mustername);
+ f := sequential file (output, mustername)
+ END IF .
+
+wirklich kopieren :
+ edit (f, ganz, "EDIT/Kopiermuster", TRUE);
+ bild frei fuer uebersetzung;
+ kopiere (dateiname, f) .
+
+ggf sortieren :
+ IF mit sortieren THEN
+ oeffne (eudat, dateiname);
+ sortiere (eudat)
+ END IF .
+
+END PROC kopiere saetze intern;
+
+INT PROC index der arbeitskopie (TEXT CONST dateiname) :
+
+ INT VAR dateinr;
+ FOR dateinr FROM 1 UPTO anzahl dateien REP
+ IF eudas dateiname (dateinr) = dateiname THEN
+ LEAVE index der arbeitskopie WITH dateinr
+ END IF
+ END REP;
+ 0
+
+END PROC index der arbeitskopie;
+
+PROC edit unten (TEXT CONST dateiname, hilfe) :
+
+ IF NOT exists (dateiname) THEN
+ frage ob einrichten (dateiname)
+ END IF;
+ FILE VAR f := sequential file (modify, dateiname);
+ edit (f, ganz, hilfe, TRUE)
+
+END PROC edit unten;
+
+PROC bild frei fuer uebersetzung :
+
+ bitte warten;
+ cursor (1, 2);
+ out (cl eop);
+ bildschirm neu
+
+END PROC bild frei fuer uebersetzung;
+
+PROC einzelsortiere (EUDAT VAR eudat) :
+
+ TEXT VAR reihenfolge := sortierreihenfolge (eudat);
+ IF reihenfolge = niltext COR alte reihenfolge aendern THEN
+ sortierreihenfolge aendern;
+ bitte warten;
+ sortiere (eudat, reihenfolge)
+ ELSE
+ bitte warten;
+ sortiere (eudat)
+ END IF .
+
+alte reihenfolge aendern :
+ ja (alte feldreihenfolge aendern, "JA/Sortierfelder") .
+
+sortierreihenfolge aendern :
+ feldnamen lesen (eudat, sammel);
+ auswahl anbieten ("EUDAS-Sortierfelder", rechts, "AUSWAHL/Sortierfelder",
+ PROC (TEXT VAR, INT CONST) aus sammel);
+ INT VAR feldnr := 1;
+ reihenfolge := niltext;
+ WHILE wahl (feldnr) <> 0 REP
+ reihenfolge CAT code (wahl (feldnr));
+ nach richtung fragen;
+ feldnr INCR 1
+ END REP .
+
+nach richtung fragen :
+ feld lesen (sammel, wahl (feldnr), feldpuffer);
+ IF ja (textdarstellung (feldpuffer) + aufsteigend sortieren,
+ "JA/Sortierrichtung") THEN
+ reihenfolge CAT "+"
+ ELSE
+ reihenfolge CAT "-"
+ END IF .
+
+END PROC einzelsortiere;
+
+PROC gib namen (TEXT VAR name, INT CONST nr) :
+
+ IF nr <= anzahl felder THEN
+ feldnamen lesen (nr, name)
+ ELSE
+ name := niltext
+ END IF
+
+END PROC gib namen;
+
+
+(************************* Menue 'Drucken' ********************************)
+
+LET
+ direkt ausgabe = #1056#
+ "Ausgabe automatisch zum Drucker",
+ in bestimmte datei = #1057#
+ "Ausgabe in bestimmte Datei",
+ name druckzieldatei = #1058#
+ "Name Ausgabedatei:",
+ sortierfrage = #1059#
+ "Zieldatei anschliessend sortieren",
+ pruefbedingungen testen = #1060#
+ "Pruefbedingungen testen",
+ prueffehler festgestellt = #1061#
+ "Prueffehler festgestellt",
+ nicht in offene datei = #1062#
+ "Zieldatei darf nicht geoeffnet sein",
+ name kopiermuster = #1063#
+ "Name Kopiermuster (RET=Std):";
+
+LET
+ z form = #1093#
+ " zeilenweise formatieren",
+ s form = #1094#
+ " seitenweise formatieren";
+
+BOOL VAR
+ zeilen automatisch := FALSE,
+ seiten automatisch := FALSE;
+
+
+PROC drucken interpreter (INT CONST wahl nr) :
+
+ SELECT wahl nr OF
+ CASE 1 : nach muster drucken
+ CASE 2 : ausgaberichtung umschalten
+ CASE 3 : musterdatei aendern
+ CASE 4 : textdatei drucken
+ CASE 5 : nachbearbeiten
+ OTHERWISE ggf dialogfenster loeschen
+ END SELECT;
+ storage kontrollieren .
+
+nach muster drucken :
+ dateinamen anfordern (name des druckmusters);
+ ausfuehrung (PROC (TEXT CONST) drucke mit edit, file typ);
+ dialogfenster loeschen;
+ fusszeile ausgeben ("", "") .
+
+ausgaberichtung umschalten :
+ direkt drucken (ja (direktausgabe, "JA/direkt drucken"));
+ IF NOT direkt drucken CAND ja (in bestimmte datei, "JA/Druckdatei") THEN
+ TEXT VAR dateiname := niltext;
+ editget (name druckzieldatei, dateiname, "", "GET/Druckdatei");
+ IF dateiname <> niltext THEN
+ druckdatei (dateiname)
+ END IF
+ END IF .
+
+musterdatei aendern :
+ ausfuehrung (PROC (TEXT CONST) muster edit, file typ);
+ dialogfenster loeschen;
+ fusszeile ausgeben ("", "") .
+
+textdatei drucken :
+ ausfuehrung (PROC (TEXT CONST) print, file typ) .
+
+nachbearbeiten :
+ ausfuehrung (PROC (TEXT CONST) nachbearbeitung, file typ);
+ dialogfenster loeschen;
+ fusszeile ausgeben ("", "") .
+
+ggf dialogfenster loeschen :
+ IF wahl nr = -1 THEN
+ dialogfenster loeschen;
+ fenster veraendert (fuss)
+ ELIF wahl nr = -2 THEN
+ fusszeile ausgeben ("", "")
+ END IF .
+
+END PROC drucken interpreter;
+
+PROC uebersetzungsfehler behandeln :
+
+ IF uebersetzungsfehler THEN
+ clear error
+ END IF .
+
+uebersetzungsfehler :
+ is error CAND errormessage = niltext .
+
+END PROC uebersetzungsfehler behandeln;
+
+PROC drucke mit edit (TEXT CONST dateiname) :
+
+ IF NOT exists (dateiname) THEN
+ muster edit (dateiname)
+ END IF;
+ bild frei fuer uebersetzung;
+ disable stop;
+ drucke (dateiname);
+ uebersetzungsfehler behandeln
+
+END PROC drucke mit edit;
+
+PROC muster edit (TEXT CONST dateiname) :
+
+ edit unten (dateiname, "EDIT/Druckmuster")
+
+END PROC muster edit;
+
+PROC print (TEXT CONST dateiname) :
+
+ do ("print (" + textdarstellung (dateiname) + ")")
+
+END PROC print;
+
+PROC nachbearbeitung (TEXT CONST dateiname) :
+
+ IF ja (textdarstellung (dateiname) + z form, "JA/zeilenform") THEN
+ zeilen formatieren
+ END IF;
+ IF ja (textdarstellung (dateiname) + s form, "JA/seitenform") THEN
+ seiten formatieren
+ END IF .
+
+zeilen formatieren :
+ IF zeilen automatisch THEN
+ autoform (dateiname)
+ ELSE
+ lineform (dateiname)
+ END IF;
+ page;
+ bildschirm neu .
+
+seiten formatieren :
+ IF seiten automatisch THEN
+ autopageform (dateiname)
+ ELSE
+ pageform (dateiname)
+ END IF;
+ bildschirm neu .
+
+END PROC nachbearbeitung;
+
+PROC formatieren automatisch (BOOL CONST za, sa) :
+
+ zeilen automatisch := za;
+ seiten automatisch := sa
+
+END PROC formatieren automatisch;
+
+
+(********************** Menue 'Dateien' ***********************************)
+
+TEXT VAR arbeitsbereich;
+
+LET
+ p task = #1064#
+ " Task: ",
+ t neuer name = #1065#
+ "Neuer Name:",
+ t zieldatei = #1066#
+ "Zieldatei:",
+ t belegt = #1067#
+ " belegt ",
+ t kb = #1068#
+ "KB.",
+ t existiert nicht = #1069#
+ " existiert nicht.",
+ t loeschen = #1070#
+ " im dieser Task loeschen",
+ t neu einrichten = #1071#
+ " neu einrichten";
+
+
+PROC dateiverwaltung (INT CONST wahl nr) :
+
+ enable stop;
+ SELECT wahl nr OF
+ CASE 0 : arbeitsbereich bestimmen
+ CASE 1 : dateiuebersicht
+ CASE 2 : datei loeschen
+ CASE 3 : datei umbenennen
+ CASE 4 : datei kopieren
+ CASE 5 : speicherbelegung datei
+ CASE 6 : datei reorganisieren
+ OTHERWISE ggf dialogfenster loeschen
+ END SELECT;
+ storage kontrollieren .
+
+arbeitsbereich bestimmen :
+ arbeitsbereich := name (myself) .
+
+datei reorganisieren :
+ ausfuehrung (PROC (TEXT CONST) aufraeumen, 0) .
+
+datei umbenennen :
+ ausfuehrung (PROC (TEXT CONST) umbenennen, 0) .
+
+datei loeschen :
+ ausfuehrung (PROC (TEXT CONST) loeschen, 0) .
+
+dateiuebersicht :
+ disable stop;
+ DATASPACE VAR list ds := nilspace;
+ FILE VAR f := sequential file (output, list ds);
+ list (f);
+ IF NOT is error THEN
+ edit (f, rechts, "SHOW/Uebersicht", FALSE)
+ END IF;
+ forget (list ds);
+ enable stop;
+ tastenpuffer loeschen .
+
+datei kopieren :
+ ausfuehrung (PROC (TEXT CONST) ds kopieren, 0) .
+
+speicherbelegung datei :
+ ausfuehrung (PROC (TEXT CONST) speicherbelegung, 0) .
+
+ggf dialogfenster loeschen :
+ IF wahl nr = -1 THEN
+ dialogfenster loeschen;
+ fenster veraendert (fuss)
+ ELIF wahl nr = -2 THEN
+ fusszeile ausgeben (p task, arbeitsbereich)
+ END IF .
+
+END PROC dateiverwaltung;
+
+PROC tastenpuffer loeschen :
+
+ WHILE getcharety <> niltext REP END REP
+
+END PROC tastenpuffer loeschen;
+
+PROC aufraeumen (TEXT CONST dateiname) :
+
+ IF type (old (dateiname)) = eudas typ THEN
+ reorganisiere (dateiname)
+ ELSE
+ reorganize (dateiname)
+ END IF
+
+END PROC aufraeumen;
+
+PROC umbenennen (TEXT CONST dateiname) :
+
+ TEXT VAR neuer name := dateiname;
+ IF exists (dateiname) THEN
+ editget (t neuer name, neuer name, "", "GET/rename")
+ END IF;
+ rename (dateiname, neuer name)
+
+END PROC umbenennen;
+
+PROC loeschen (TEXT CONST dateiname) :
+
+ IF offene datei THEN
+ errorstop (nicht in offene datei)
+ ELIF exists (dateiname) CAND frage bejaht THEN
+ forget (dateiname, quiet)
+ END IF .
+
+offene datei :
+ index der arbeitskopie (dateiname) <> 0 .
+
+frage bejaht :
+ ja (textdarstellung (dateiname) + t loeschen, "JA/forget") .
+
+END PROC loeschen;
+
+PROC ds kopieren (TEXT CONST dateiname) :
+
+ TEXT VAR zieldatei := niltext;
+ editget (t zieldatei, zieldatei, "", "GET/copy");
+ copy (dateiname, zieldatei)
+
+END PROC ds kopieren;
+
+PROC speicherbelegung (TEXT CONST dateiname) :
+
+ dialog;
+ out (textdarstellung (dateiname));
+ IF exists (dateiname) THEN
+ out (t belegt);
+ put (ds pages (old (dateiname)) DIV 2);
+ out (t kb)
+ ELSE
+ out (t existiert nicht)
+ END IF
+
+END PROC speicherbelegung;
+
+
+(*********************** Menue 'Archiv' ***********************************)
+
+TEXT VAR
+ letzter archivname := niltext,
+ zielarchiv := "ARCHIVE";
+
+INT VAR zielstation := 0;
+
+THESAURUS VAR archivinhalt;
+
+BOOL VAR
+ archivzugriff,
+ ziel ist manager := TRUE,
+ dialogue state;
+
+LET
+ p zielarchiv = #1072#
+ " Ziel: ",
+ archiv heisst = #1073#
+ "Archiv heisst ",
+ name des archivs = #1074#
+ "Name des Archivs:",
+ name zielarchiv = #1075#
+ "Name Zielarchiv:",
+ nr zielstation = #1076#
+ "Nr. der Zielstation (od. RETURN):",
+ ist ziel archivmanager = #1077#
+ "Ist das Zielarchiv ein Archivmanager",
+ diskette formatieren = #1078#
+ "Archivdiskette vorher formatieren",
+ neuer archivname = #1079#
+ "Neuer Archivname:",
+ t im system ueberschreiben = #1080#
+ " im System ueberschreiben",
+ t auf archiv loeschen = #1081#
+ " auf Archiv loeschen",
+ t archiv = #1082#
+ "Archiv ",
+ t ueberschreiben = #1083#
+ " ueberschreiben",
+ frage archiv initialisieren = #1084#
+ "Archiv initialisieren",
+ t auf archiv ueberschreiben = #1085#
+ " auf Archiv ueberschreiben";
+
+LET
+ t passwort = #1095#
+ "Passwort: ",
+ passwortwiederholung falsch = #1096#
+ "Passwort stimmt nicht mit der ersten Eingabe überein",
+ bitte passwort wiederholen = #1097#
+ "Passwort zur Kontrolle bitte nochmal eingeben.",
+ passwort loeschen = #1098#
+ "Passwort loeschen",
+ falsche stationsnr = #1099#
+ "Unzlaessige Stationsnummer",
+ task ist kein manager = #1100#
+ "Angegebene Task ist kein Manager";
+
+
+PROC archivverwaltung (INT CONST wahl nr) :
+
+ enable stop;
+ SELECT wahl nr OF
+ CASE 0 : eintritt
+ CASE 1 : archivuebersicht
+ CASE 2 : uebersicht drucken
+ CASE 3 : datei vom archiv holen
+ CASE 4 : datei auf archiv sichern
+ CASE 5 : auf archiv loeschen
+ CASE 6 : archiv initialisieren
+ CASE 7 : zielarchiv einstellen
+ CASE 8 : passwort einstellen
+ CASE 9 : reservieren
+ OTHERWISE verlassen
+ END SELECT;
+ storage kontrollieren .
+
+eintritt :
+ archivzugriff := FALSE .
+
+datei auf archiv sichern :
+ IF ziel ist manager THEN
+ archivnamen holen
+ END IF;
+ bitte warten;
+ archivinhalt := ALL eudas archiv;
+ ausfuehrung (PROC (TEXT CONST) archivieren, 0) .
+
+datei vom archiv holen :
+ disable stop;
+ archiv anmelden;
+ bitte warten;
+ archivinhalt := ALL eudas archiv;
+ IF falscher name THEN archivinhalt := ALL eudas archiv END IF;
+ enable stop;
+ auf archiv (PROC (TEXT CONST) holen) .
+
+auf archiv loeschen :
+ IF ziel ist manager THEN
+ archivnamen holen
+ END IF;
+ bitte warten;
+ archivinhalt := ALL eudas archiv;
+ auf archiv (PROC (TEXT CONST) auf archiv loeschen) .
+
+archivuebersicht :
+ archiv anmelden;
+ disable stop;
+ bitte warten;
+ DATASPACE VAR list ds := nilspace;
+ f :=sequential file (output, list ds);
+ list (f, eudas archiv);
+ IF falscher name THEN list (f, eudas archiv) END IF;
+ IF NOT is error THEN
+ modify (f); to line (f, 1);
+ write record (f, headline (f));
+ headline (f, niltext);
+ edit (f, rechts, "SHOW/Uebersicht", FALSE)
+ END IF;
+ forget (list ds);
+ tastenpuffer loeschen;
+ enable stop .
+
+uebersicht drucken :
+ archiv anmelden;
+ namen generieren;
+ FILE VAR f := sequential file (output, list name);
+ disable stop;
+ bitte warten;
+ list (f, eudas archiv);
+ IF falscher name THEN list (f, eudas archiv) END IF;
+ enable stop;
+ modify (f);
+ insert record (f);
+ write record (f, headline (f));
+ print (list name);
+ forget (list name, quiet) .
+
+namen generieren :
+ INT VAR i := 0;
+ TEXT VAR list name;
+ REP
+ i INCR 1;
+ list name := "Archivliste " + text (i)
+ UNTIL NOT exists (list name) END REP .
+
+archiv initialisieren :
+ archiv anmelden;
+ IF ja (diskette formatieren, "JA/format") THEN
+ archiv formatieren
+ ELIF benanntes archiv THEN
+ IF loeschen verneint THEN LEAVE archiv initialisieren END IF
+ ELSE
+ IF initialisieren verneint THEN LEAVE archiv initialisieren END IF
+ END IF;
+ neuen namen erfragen;
+ tatsaechlich initialisieren .
+
+archiv formatieren :
+ bitte warten;
+ disable stop;
+ set command dialogue false;
+ format (eudas archiv);
+ reset command dialogue;
+ enable stop .
+
+benanntes archiv :
+ reserve ("", eudas archiv);
+ bitte warten;
+ disable stop;
+ archivinhalt := ALL eudas archiv;
+ BOOL CONST ergebnis := falscher name;
+ clear error;
+ enable stop;
+ ergebnis .
+
+loeschen verneint :
+ NOT ja (t archiv + textdarstellung (letzter archivname) + t ueberschreiben,
+ "JA/archiv loeschen") .
+
+initialisieren verneint :
+ NOT ja (frage archiv initialisieren, "JA/archiv init") .
+
+neuen namen erfragen :
+ editget (neuer archivname, letzter archivname, "", "GET/Archivname");
+ reserve (letzter archivname, eudas archiv) .
+
+tatsaechlich initialisieren :
+ bitte warten;
+ disable stop;
+ set command dialogue false;
+ clear (eudas archiv);
+ reset command dialogue .
+
+zielarchiv einstellen :
+ TEXT VAR zieltaskname := zielarchiv;
+ IF archivzugriff THEN
+ release (eudas archiv); archivzugriff := FALSE
+ END IF;
+ editget (name zielarchiv, zieltaskname, "", "GET/Zielarchiv");
+ IF zieltaskname = niltext THEN
+ LEAVE zielarchiv einstellen
+ END IF;
+ zielstation einlesen;
+ ziel ist manager := ja (ist ziel archivmanager, "JA/Zielmanager");
+ werte uebertragen;
+ waehlbar (6, 6, ziel ist manager);
+ waehlbar (6, 9, NOT ziel ist manager);
+ bildschirm neu;
+ fusszeile ausgeben (p zielarchiv, stationsnr + zielarchiv) .
+
+zielstation einlesen :
+ TEXT VAR rechner := text (station (myself));
+ IF station (myself) <> 0 THEN
+ editget (nr zielstation, rechner, "", "GET/Zielstation")
+ END IF .
+
+werte uebertragen :
+ zielstation := int (rechner);
+ IF NOT last conversion ok THEN
+ errorstop (falsche stationsnr)
+ END IF;
+ zielarchiv := zieltaskname;
+ teste auf manager (eudas archiv) .
+
+stationsnr :
+ IF zielstation = 0 THEN
+ niltext
+ ELSE
+ text (zielstation) + "/"
+ END IF .
+
+reservieren :
+ TEXT VAR parameter := niltext;
+ editget (name des archivs, parameter, "", "GET/Archivname");
+ reserve (parameter, eudas archiv);
+ archivzugriff := TRUE .
+
+verlassen :
+ IF wahl nr = -1 THEN
+ IF archivzugriff THEN
+ release (eudas archiv)
+ END IF;
+ dialogfenster loeschen;
+ fenster veraendert (fuss)
+ ELIF wahl nr = -2 THEN
+ fusszeile ausgeben (p zielarchiv, stationsnr + zielarchiv)
+ END IF .
+
+END PROC archivverwaltung;
+
+TASK PROC eudas archiv :
+
+ IF zielstation = 0 THEN
+ task (zielarchiv)
+ ELSE
+ zielstation / zielarchiv
+ END IF
+
+END PROC eudas archiv;
+
+PROC teste auf manager (TASK CONST t) :
+
+ INT VAR i;
+ IF station (t) = station (myself) THEN
+ FOR i FROM 1 UPTO 5 REP
+ IF status (t) = 2 OR status (t) = 6 THEN
+ LEAVE teste auf manager
+ END IF;
+ pause (10)
+ END REP;
+ errorstop (task ist kein manager)
+ END IF
+
+END PROC teste auf manager;
+
+PROC archivnamen holen :
+
+ TEXT VAR neuer archivname := letzter archivname;
+ editget (name des archivs, neuer archivname, "", "GET/Archivname");
+ IF NOT archivzugriff OR neuer archivname <> letzter archivname THEN
+ reserve (neuer archivname, eudas archiv);
+ archivzugriff := TRUE
+ END IF;
+ letzter archivname := neuer archivname
+
+END PROC archivnamen holen;
+
+PROC archiv anmelden :
+
+ IF NOT archivzugriff AND ziel ist manager THEN
+ reserve (letzter archivname, eudas archiv);
+ archivzugriff := TRUE
+ END IF
+
+END PROC archiv anmelden;
+
+BOOL PROC falscher name :
+
+ IF ziel ist manager AND is error THEN
+ TEXT CONST meldung := errormessage;
+ IF subtext (meldung, 1, 14) = archiv heisst CAND
+ subtext (meldung, 16, 20) <> "?????" THEN
+ clear error;
+ nochmal anmelden;
+ LEAVE falscher name WITH TRUE
+ END IF
+ END IF;
+ FALSE .
+
+nochmal anmelden :
+ letzter archivname := subtext (meldung, 16, length (meldung) - 1);
+ reserve (letzter archivname, eudas archiv) .
+
+END PROC falscher name;
+
+PROC archivieren (TEXT CONST dateiname) :
+
+ disable stop;
+ IF NOT (archivinhalt CONTAINS dateiname) COR auf archiv ueberschreiben THEN
+ vorher eventuell sichern;
+ bitte warten;
+ set command dialogue false;
+ save (dateiname, eudas archiv);
+ reset command dialogue
+ END IF .
+
+auf archiv ueberschreiben :
+ ja (textdarstellung (dateiname) + t auf archiv ueberschreiben, "JA/save") .
+
+vorher eventuell sichern :
+ INT CONST nr := index der arbeitskopie (dateiname);
+ IF nr > 0 CAND aendern erlaubt CAND inhalt veraendert (nr) THEN
+ einzelsicherung (nr)
+ END IF .
+
+END PROC archivieren;
+
+PROC holen (TEXT CONST dateiname) :
+
+ disable stop;
+ IF NOT exists (dateiname) COR eigene datei ueberschreiben THEN
+ bitte warten;
+ set command dialogue false;
+ fetch (dateiname, eudas archiv);
+ reset command dialogue
+ END IF .
+
+eigene datei ueberschreiben :
+ ja (textdarstellung (dateiname) + t im system ueberschreiben, "JA/fetch") .
+
+END PROC holen;
+
+PROC auf archiv loeschen (TEXT CONST dateiname) :
+
+ disable stop;
+ IF NOT (archivinhalt CONTAINS dateiname) COR auf archiv loeschen THEN
+ bitte warten;
+ set command dialogue false;
+ erase (dateiname, eudas archiv);
+ reset command dialogue
+ END IF .
+
+auf archiv loeschen :
+ ja (textdarstellung (dateiname) + t auf archiv loeschen, "JA/erase") .
+
+END PROC auf archiv loeschen;
+
+PROC set command dialogue false :
+
+ dialogue state := command dialogue;
+ command dialogue (FALSE)
+
+END PROC set command dialogue false;
+
+PROC reset command dialogue :
+
+ command dialogue (dialogue state)
+
+END PROC reset command dialogue;
+
+PROC auf archiv (PROC (TEXT CONST) operation) :
+
+ TEXT VAR dateiname := niltext;
+ editget (name der datei, dateiname, "z", "GET/Dateiname");
+ IF dateiname = esc z THEN
+ uebersicht zeigen
+ ELSE
+ last param (dateiname);
+ operation (dateiname)
+ END IF .
+
+uebersicht zeigen :
+ dateinamen sammeln (archivinhalt, 0);
+ auswahl anbieten ("EUDAS-Archivauswahl", rechts, "AUSWAHL/Archiv",
+ PROC (TEXT VAR, INT CONST) als text);
+ operation ausfuehren (PROC (TEXT CONST) operation) .
+
+END PROC auf archiv;
+
+PROC passwort einstellen :
+
+ BOUND ROW 2 TEXT VAR pw;
+ DATASPACE VAR ds := nilspace;
+ pw := ds;
+ disable stop;
+ passwort holen (pw (1));
+ IF pw (1) = niltext THEN
+ fragen ob loeschen
+ ELSE
+ doppelt eingeben
+ END IF;
+ forget (ds) .
+
+fragen ob loeschen :
+ IF ja (passwort loeschen, "JA/pw loeschen") THEN
+ dialog; dialog;
+ enter password (niltext)
+ END IF .
+
+doppelt eingeben :
+ dialog; out (bitte passwort wiederholen);
+ passwort holen (pw (2));
+ IF pw (1) <> pw (2) THEN
+ errorstop (passwortwiederholung falsch)
+ ELSE
+ dialog; dialog;
+ enter password (pw (1))
+ END IF .
+
+END PROC passwort einstellen;
+
+PROC passwort holen (TEXT VAR wort) :
+
+ enable stop;
+ dialog; out (t passwort);
+ get secret line (wort)
+
+END PROC passwort holen;
+
+
+(******************** Parameter-Auswahl ***********************************)
+
+SATZ VAR sammel;
+
+LET
+ name der datei = #1086#
+ "Name der Datei:",
+ name der zieldatei = #1087#
+ "Name der Zieldatei:",
+ name der verarbeitungsvorschrift = #1088#
+ "Name der Verarbeitungsvorschrift:",
+ name des druckmusters = #1089#
+ "Name des Druckmusters:",
+ name der quelldatei = #1090#
+ "Name der Quelldatei:";
+
+LET
+ keine datei zur auswahl = #1101#
+ "Keine Datei zur Auswahl vorhanden.";
+
+TEXT VAR
+ aktueller prompt := name der datei,
+ offene;
+
+
+PROC dateinamen sammeln (THESAURUS CONST t, INT CONST typ) :
+
+ uebergebene namen sammeln;
+ offene dateien merken;
+ zusaetzliche namen dazu;
+ meldung falls keine datei .
+
+offene dateien merken :
+ offene := niltext;
+ INT VAR i;
+ FOR i FROM 1 UPTO anzahl dateien REP
+ INT CONST t link := feldindex (sammel, eudas dateiname (i));
+ IF t link > 0 THEN
+ offene CAT code (t link)
+ END IF
+ END REP .
+
+uebergebene namen sammeln :
+ INT VAR
+ stelle := 1,
+ von := 0;
+ satz initialisieren (sammel);
+ REP
+ get (t, feldpuffer, von);
+ IF feldpuffer = niltext THEN
+ LEAVE uebergebene namen sammeln
+ ELIF typ = 0 COR type (old (feldpuffer)) = typ THEN
+ feld aendern (sammel, stelle, feldpuffer);
+ stelle INCR 1
+ END IF
+ END REP .
+
+zusaetzliche namen dazu :
+ von := 0;
+ REP
+ get (zusaetzliche namen, feldpuffer, von);
+ IF feldpuffer = niltext THEN
+ LEAVE zusaetzliche namen dazu
+ ELIF NOT (t CONTAINS feldpuffer) THEN
+ feld aendern (sammel, stelle, feldpuffer);
+ stelle INCR 1
+ END IF
+ END REP .
+
+meldung falls keine datei :
+ IF stelle = 1 THEN
+ dialog; out (keine datei zur auswahl);
+ errorstop (niltext)
+ END IF .
+
+END PROC dateinamen sammeln;
+
+PROC als text (TEXT VAR inhalt, INT CONST stelle) :
+
+ IF stelle < 256 THEN
+ feld lesen (sammel, stelle, inhalt);
+ IF pos (offene, code (stelle)) > 0 THEN
+ inhalt := "<!> " + textdarstellung (inhalt)
+ ELIF inhalt <> niltext THEN
+ inhalt := textdarstellung (inhalt)
+ END IF
+ ELSE
+ inhalt := niltext
+ END IF
+
+END PROC als text;
+
+PROC operation ausfuehren (PROC (TEXT CONST) operation) :
+
+ INT VAR
+ stelle := 1;
+ REP
+ IF wahl (stelle) = 0 THEN
+ LEAVE operation ausfuehren
+ ELSE
+ feld lesen (sammel, wahl (stelle), feldpuffer);
+ dialog; out (text (stelle, 3)); out (". ");
+ out (textdarstellung (feldpuffer));
+ last param (feldpuffer);
+ operation (feldpuffer)
+ END IF;
+ stelle INCR 1
+ END REP
+
+END PROC operation ausfuehren;
+
+PROC ausfuehrung (PROC (TEXT CONST) operation, INT CONST typ) :
+
+ enable stop;
+ TEXT VAR dateiname;
+ dateinamen anfordern (dateiname, typ);
+ IF dateiname = esc z THEN
+ operation ausfuehren (PROC (TEXT CONST) operation)
+ ELSE
+ last param (dateiname);
+ operation (dateiname)
+ END IF
+
+END PROC ausfuehrung;
+
+PROC einzelausfuehrung (PROC (TEXT CONST) operation, INT CONST typ) :
+
+ enable stop;
+ TEXT VAR dateiname;
+ dateinamen anfordern (dateiname, typ);
+ IF dateiname = esc z THEN
+ IF wahl (1) = 0 THEN
+ errorstop (niltext)
+ ELSE
+ feld lesen (sammel, wahl (1), dateiname)
+ END IF
+ END IF;
+ last param (dateiname);
+ operation (dateiname)
+
+END PROC einzelausfuehrung;
+
+PROC dateinamen anfordern (TEXT CONST prompt) :
+
+ aktueller prompt := prompt
+
+END PROC dateinamen anfordern;
+
+PROC dateinamen anfordern (TEXT VAR dateiname, INT CONST typ) :
+
+ IF exists (std) AND (typ = 0 COR type (old (std)) = typ) THEN
+ dateiname := std
+ ELSE
+ dateiname := niltext
+ END IF;
+ disable stop;
+ editget (aktueller prompt, dateiname, "z", "GET/Dateiname");
+ aktueller prompt := name der datei;
+ enable stop;
+ IF dateiname = niltext THEN
+ errorstop (niltext)
+ ELIF dateiname = esc z THEN
+ dateinamen sammeln (all, typ);
+ auswahl anbieten ("EUDAS-Dateiauswahl", rechts, "AUSWAHL/Datei",
+ PROC (TEXT VAR, INT CONST) als text);
+ bitte warten
+ END IF
+
+END PROC dateinamen anfordern;
+
+PROC aus sammel (TEXT VAR inhalt, INT CONST stelle) :
+
+ IF stelle <= 256 THEN
+ feld lesen (sammel, stelle, inhalt)
+ ELSE
+ inhalt := niltext
+ END IF
+
+END PROC aus sammel;
+
+PROC frage ob einrichten (TEXT CONST dateiname) :
+
+ IF NOT ja (textdarstellung (dateiname) + t neu einrichten,
+ "JA/einrichten") THEN
+ errorstop (niltext)
+ END IF
+
+END PROC frage ob einrichten;
+
+
+(************************** Editor ****************************************)
+
+LET
+ edit status = #1091#
+"EDITIEREN: Abbruch: ESC h Verlassen: ESC q Hilfe: ESC ?",
+ show status = #1092#
+"ZEIGEN: Blättern: HOP OBEN, HOP UNTEN Ende: ESC q Hilfe: ESC ?";
+
+INT VAR return code;
+
+BOOL VAR
+ zeige edit status,
+ feldanzeige erlaubt;
+
+
+PROC edit (FILE VAR f, FENSTER CONST fenster, TEXT CONST hilfe,
+ BOOL CONST aendern) :
+
+ INT VAR x, y, x l, y l;
+ fenstergroesse (fenster, x, y, x l, y l);
+ fenster veraendert (fenster);
+ enable stop;
+ feldanzeige erlauben;
+ zeige edit status := aendern;
+ REP
+ edit status anzeigen;
+ open editor (groesster editor + 1, f, aendern, x, y, x l, y l);
+ edit (groesster editor, "eqvw19dpgn"9"?hF", PROC (TEXT CONST) kdo);
+ return code behandeln
+ END REP .
+
+feldanzeige erlauben :
+ IF aendern AND y < 3 AND y l > 22 AND x < 14 AND x l > 75 THEN
+ feldanzeige erlaubt := TRUE
+ ELSE
+ feldanzeige erlaubt := FALSE
+ END IF .
+
+return code behandeln :
+ SELECT return code OF
+ CASE 0 : LEAVE edit
+ CASE 1 : hilfe anbieten (hilfe, fenster)
+ CASE 2 : errorstop (niltext)
+ END SELECT .
+
+END PROC edit;
+
+PROC edit status anzeigen :
+
+ IF zeige edit status THEN
+ status anzeigen (edit status)
+ ELSE
+ status anzeigen (show status)
+ END IF
+
+END PROC edit status anzeigen;
+
+PROC kdo (TEXT CONST zeichen) :
+
+ return code := pos ("q?h", zeichen);
+ IF return code > 0 THEN
+ return code DECR 1;
+ quit
+ ELIF feldanzeige erlaubt CAND zeichen = "F" THEN
+ feldnamen anzeigen;
+ edit status anzeigen
+ ELSE
+ std kommando interpreter (zeichen);
+ edit status anzeigen;
+ bildschirm neu
+ END IF
+
+END PROC kdo;
+
+PROC feldnamen anzeigen :
+
+ IF anzahl felder > 0 THEN
+ feldnamen sammeln;
+ sammlung zur auswahl anbieten;
+ ergebnis in editor uebernehmen
+ END IF .
+
+feldnamen sammeln :
+ INT VAR feldnr;
+ satz initialisieren (sammel, anzahl felder);
+ FOR feldnr FROM 1 UPTO anzahl felder REP
+ feldnamen lesen (feldnr, feldpuffer);
+ feld aendern (sammel, feldnr, feldpuffer)
+ END REP .
+
+sammlung zur auswahl anbieten :
+ auswahl anbieten ("EUDAS-Editfelder", rechts, "AUSWAHL/Feldnamen",
+ PROC (TEXT VAR, INT CONST) aus sammel) .
+
+ergebnis in editor uebernehmen :
+ INT VAR stelle := 1;
+ WHILE wahl (stelle) > 0 REP
+ IF stelle > 1 THEN push (blank) END IF;
+ feldnamen lesen (wahl (stelle), feldpuffer);
+ push (""""); push (feldpuffer); push ("""");
+ stelle INCR 1
+ END REP .
+
+END PROC feldnamen anzeigen;
+
+END PACKET eudas steuerung;
+