(* ********************************************************** ********************************************************** ** ** ** ls-Prozess 4 ** ** ** ** Version 1.02 ** ** ** ** (Stand : 26.01.90) ** ** ** ** ** ** ** ** Autoren: Bruno Pollok, Bielefeld ** ** Wolfgang Weber, Bielefeld ** ** ** ** ** ** Copyright (C) 1988 Eva Latta-Weber, Bielefeld ** ** Copyright (C) 1990 ERGOS GmbH, Siegburg ** ********************************************************** ********************************************************** *) PACKET ls prozess 4 DEFINES pdv befehlsuebersicht anzeigen, pdv ausgabebefehle anzeigen, pdv eingabebefehle anzeigen, pdv testbefehle anzeigen, pdv weitere befehle anzeigen, pdv bitmuster erlaeutern, pdv symbole erlaeutern, pdv digital analog werte, pdv programm neu erstellen, pdv programm ansehen, pdv programm starten, pdv programm wiederholen, pdv dateien verzeichnis, pdv datei kopieren, pdv datei umbenennen, pdv dateien loeschen, pdv dateien drucken, init pdv, pdv: LET menukarte = "ls-MENUKARTE:Prozess", niltext = "", maxlaenge = 45, maxnamenslaenge = 35; WINDOW VAR w :: window (1, 3, 79, 19); TEXT VAR programmname :: ""; BOOL VAR noch kein programm gelaufen :: TRUE; PROC pdv: init pdv; install menu (menukarte, FALSE); handle menu ("PDV") END PROC pdv; PROC init pdv: programmname := ""; noch kein programm gelaufen := TRUE; cursor off; END PROC init pdv; PROC pdv befehlsuebersicht anzeigen: menuinfo (anwendungstext (20)) END PROC pdv befehlsuebersicht anzeigen; PROC pdv ausgabebefehle anzeigen: INT VAR i; REP i := menualternative (anwendungstext (1), anwendungstext (3), anwendungstext (4), 5, TRUE); SELECT i OF CASE 1, 101: menuinfo (anwendungstext (21)) CASE 2, 102: menuinfo (anwendungstext (22)) CASE 3, 103: menuinfo (anwendungstext (23)) CASE 4, 104: menuinfo (anwendungstext (24)) CASE 5, 105: menuinfo (anwendungstext (25)) END SELECT UNTIL i = 6 OR i = 106 PER; END PROC pdv ausgabebefehle anzeigen; PROC pdv eingabebefehle anzeigen: INT VAR i; REP i := menualternative (anwendungstext (2), anwendungstext (3), anwendungstext (4), 5, TRUE); SELECT i OF CASE 1, 101: menuinfo (anwendungstext (31)) CASE 2, 102: menuinfo (anwendungstext (32)) CASE 3, 103: menuinfo (anwendungstext (33)) CASE 4, 104: menuinfo (anwendungstext (34)) CASE 5, 105: menuinfo (anwendungstext (35)) END SELECT UNTIL i = 6 OR i = 106 PER; END PROC pdv eingabebefehle anzeigen; PROC pdv testbefehle anzeigen: INT VAR i; REP i := menualternative (anwendungstext (5), anwendungstext (7), anwendungstext (8), 5, TRUE); SELECT i OF CASE 1, 101: menuinfo (anwendungstext (41)) CASE 2, 102: menuinfo (anwendungstext (42)) END SELECT UNTIL i = 3 OR i = 103 PER; END PROC pdv testbefehle anzeigen; PROC pdv weitere befehle anzeigen: INT VAR i; REP i := menualternative (anwendungstext (6), anwendungstext (7), anwendungstext (8), 5, TRUE); SELECT i OF CASE 1, 101: menuinfo (anwendungstext (43)) CASE 2, 102: menuinfo (anwendungstext (44)) END SELECT UNTIL i = 3 OR i = 103 PER; END PROC pdv weitere befehle anzeigen; PROC pdv bitmuster erlaeutern: menuinfo (anwendungstext (46)) END PROC pdv bitmuster erlaeutern; PROC pdv symbole erlaeutern: menuinfo (anwendungstext (47)) END PROC pdv symbole erlaeutern; PROC pdv digital analog werte: menuinfo (anwendungstext (48)) END PROC pdv digital analog werte; PROC pdvdateien verzeichnis: disable stop; forget ("Verzeichnis der Dateien", quiet); THESAURUS VAR programme :: ALL myself; FILE VAR f :: sequential file (output, "Verzeichnis der Dateien"); f FILLBY programme; modify (f); to line (f, 1); insert record (f); menufootnote ("Verlassen: "); cursor on; show (w, f); cursor off; forget ("Verzeichnis der Dateien", quiet); IF is error THEN regenerate menuscreen; out (""7""); menuinfo (" " + invers ("FEHLER: " + errormessage)); clear error ELSE menu bildschirm FI; enable stop END PROC pdvdateien verzeichnis; PROC pdvprogramm neu erstellen: hole programmname; kontrolliere den programmnamen; command dialogue (FALSE); cursor on; disable stop; stdinfoedit (programmname, 3); cursor off; command dialogue (TRUE); IF is error THEN regenerate menuscreen; out (""7""); menuinfo (" " + invers (errormessage)); clear error ELSE menu bildschirm FI; enable stop. hole programmname: programmname := ""; programmname := menuanswer (ausgabe, programmname, 5). ausgabe: center (maxlaenge, invers ("Programm neu erstellen")) + ""13""13"" + " Bitte den Namen für das Programm "13""13"". kontrolliere den programmnamen: IF programmname = niltext THEN LEAVE pdvprogramm neu erstellen ELIF length (programmname) > maxnamenslaenge THEN meckere zu langen namen an; programmname := niltext; LEAVE pdvprogramm neu erstellen ELIF exists (programmname) THEN meckere existierendes programm an; LEAVE pdvprogramm neu erstellen FI. END PROC pdvprogramm neu erstellen; PROC pdvprogramm ansehen: IF programmname <> niltext CAND exists (programmname) THEN frage nach diesem programm ELSE lasse programm auswaehlen FI; cursor on; disable stop; stdinfoedit (programmname, 3); cursor off; IF is error THEN regenerate menuscreen; out (""7""); menuinfo (" " + invers ("FEHLER: " + errormessage)); clear error ELSE menu bildschirm FI; enable stop. frage nach diesem programm: IF menuno (ueberschrift + " Zuletzt bearbeitetes Programm: " + name + " Soll mit diesem Programm gearbeitet werden", 5) THEN lasse programm auswaehlen FI. ueberschrift: center (maxlaenge, invers ("Programm ansehen/ändern")) + ""13""13"". name: ""13""13" " + invers (programmname) + ""13""13"". lasse programm auswaehlen: THESAURUS VAR verfuegbare :: ALL myself; IF NOT not empty (verfuegbare) THEN noch kein programm; LEAVE pdvprogramm ansehen ELSE biete auswahl an FI. biete auswahl an: programmname := menuone (verfuegbare, "Programm ansehen/ändern", "Bitte das gewünschte Programm ankreuzen!", FALSE); IF programmname = niltext THEN menu bildschirm; LEAVE pdvprogramm ansehen FI. END PROC pdvprogramm ansehen; PROC pdvdateien drucken: lasse programme auswaehlen; drucke programme; menu bildschirm. lasse programme auswaehlen: THESAURUS VAR verfuegbare :: ALL myself; IF NOT not empty (verfuegbare) THEN noch kein programm; LEAVE pdvdateien drucken ELSE biete auswahl an FI. biete auswahl an: verfuegbare := menusome (verfuegbare, "Dateien drucken", "Bitte die Dateien ankreuzen, die gedruckt werden sollen!", FALSE). drucke programme: show menuwindow; steige ggf bei leerem thesaurus aus; menuwindowout (menuwindowcenter (invers ("Dateien drucken"))); menuwindowline (2); command dialogue (FALSE); fuehre einzelne operationen aus; command dialogue (TRUE); schlage ggf neue seite auf; menuwindowout (" Alle ausgewählten Dateien wurden gedruckt!"); menuwindowstop. fuehre einzelne operationen aus: INT VAR k; FOR k FROM 1 UPTO highest entry (verfuegbare) REP IF name (verfuegbare, k) <> "" THEN disable stop; menuwindowout ( " """ + name (verfuegbare, k) + """ wird gedruckt!"); menuwindowline; print (name (verfuegbare, k)); fehlerbehandlung FI PER. steige ggf bei leerem thesaurus aus: IF NOT not empty (verfuegbare) THEN menuwindowline (2); menuwindowout (" Es wurde keine Datei ausgewählt!"); menuwindowstop; menu bildschirm; LEAVE pdvdateien drucken FI. schlage ggf neue seite auf: IF remaining menuwindowlines < 7 THEN menuwindowpage; menuwindowline ELSE menuwindowline (2) FI. fehlerbehandlung: IF is error THEN regenerate menuscreen; out (""7""); menuinfo (" " + invers (errormessage)); clear error; enable stop; LEAVE pdvdateien drucken ELSE enable stop FI. END PROC pdvdateien drucken; PROC pdvdatei kopieren: ermittle alten programmnamen; erfrage neuen programmnamen; kopiere ggf das programm. ermittle alten programmnamen: IF NOT not empty (ALL myself) THEN noch kein programm; LEAVE pdvdatei kopieren ELSE biete auswahl an FI. biete auswahl an: TEXT VAR alter name := menuone (ALL myself, "Datei kopieren", "Bitte die Datei ankreuzen, das kopiert werden soll!",FALSE); menu bildschirm; IF alter name = niltext THEN LEAVE pdvdatei kopieren FI. erfrage neuen programmnamen: TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5). ausgabe: ueberschrift + " Name der 'alten' Datei: " + bisheriger name + " Bitte den Namen für die Kopie: ". ueberschrift: center (maxlaenge, invers ("Datei kopieren")) + ""13""13"". bisheriger name: ""13""13" " + invers (alter name) + ""13""13"". kopiere ggf das programm: IF neuer name = niltext THEN menuinfo (" " + invers ("Der gewünschte Name ist unzulässig!")); LEAVE pdvdatei kopieren ELIF exists (neuer name) THEN mache vorwurf; LEAVE pdvdatei kopieren ELSE copy (alter name, neuer name) FI. mache vorwurf: menuinfo (" " + invers ("Eine Datei mit diesem Namen gibt es bereits!")). END PROC pdvdatei kopieren; PROC pdvdatei umbenennen: ermittle alten programmnamen; erfrage neuen programmnamen; benenne ggf das programm um. ermittle alten programmnamen: IF NOT not empty (ALL myself) THEN noch kein programm; LEAVE pdvdatei umbenennen ELSE biete auswahl an FI. biete auswahl an: TEXT VAR alter name := menuone ( ALL myself, "Datei umbenennen", "Bitte die Datei ankreuzen, die umbenannt werden soll!", FALSE); menu bildschirm; IF alter name = niltext THEN LEAVE pdvdatei umbenennen FI. erfrage neuen programmnamen: TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5). ausgabe: ueberschrift + " Bisheriger Dateiname: " + bisheriger name + " Zukünftiger Dateiname: ". ueberschrift: center (maxlaenge, invers ("Datei umbenennen")) + ""13""13"". bisheriger name: ""13""13" " + invers (alter name) + ""13""13"". benenne ggf das programm um: IF neuer name = niltext THEN menuinfo (" " + invers ("Der gewünschte Name ist unzulässig!")); LEAVE pdvdatei umbenennen ELIF exists (neuer name) THEN mache vorwurf; LEAVE pdvdatei umbenennen ELSE rename (alter name, neuer name); programmname := neuer name FI. mache vorwurf: menuinfo (" " + invers ("Eine Datei mit diesem Namen gibt es bereits!")). END PROC pdvdatei umbenennen; PROC pdvdateien loeschen: lasse programme auswaehlen; loesche programme; menu bildschirm. lasse programme auswaehlen: THESAURUS VAR verfuegbare :: ALL myself; IF NOT not empty (verfuegbare) THEN noch kein programm; LEAVE pdvdateien loeschen ELSE biete auswahl an FI. biete auswahl an: verfuegbare := menusome (verfuegbare, "Dateien löschen", "Bitte alle Dateien ankreuzen, die gelöscht werden sollen!", FALSE). loesche programme: show menuwindow; steige ggf bei leerem thesaurus aus; menuwindowout (menuwindowcenter (invers ("Dateien löschen"))); menuwindowline (2); command dialogue (FALSE); fuehre einzelne operationen aus; command dialogue (TRUE); schlage ggf neue seite auf; menuwindowout (" Alle ausgewählten Dateien wurden gelöscht!"); menuwindowstop. fuehre einzelne operationen aus: INT VAR k; FOR k FROM 1 UPTO highest entry (verfuegbare) REP IF name (verfuegbare, k) <> "" THEN disable stop; IF menuwindowyes (" """ + name (verfuegbare, k) + """ löschen") THEN forget (name (verfuegbare, k), quiet) FI; fehlerbehandlung FI PER; programmname := "". steige ggf bei leerem thesaurus aus: IF NOT not empty (verfuegbare) THEN menuwindowline (2); menuwindowout (" Es wurde keine Datei ausgewählt!"); menuwindowstop; menu bildschirm; LEAVE pdvdateien loeschen FI. schlage ggf neue seite auf: IF remaining menuwindowlines < 7 THEN menuwindowpage; menuwindowline ELSE menuwindowline (2) FI. fehlerbehandlung: IF is error THEN regenerate menuscreen; out (""7""); menuinfo (" " + invers (errormessage)); clear error; enable stop; LEAVE pdvdateien loeschen ELSE enable stop FI. END PROC pdvdateien loeschen; PROC pdvprogramm starten: programmname ermitteln; bildschirm vorbereiten; cursor on; disable stop; warnings off; check on; run pdv (programmname); noch kein programm gelaufen := FALSE; cursor off; IF is error THEN fehler ggf melden; clear error ELSE regenerate menuscreen FI; enable stop. bildschirm vorbereiten: cursor (17, 2); out (waagerecht); cursor (38, 2); out (waagerecht); cursor ( 1, 3); out (""4""); menufootnote ("Programmabbruch: "); cursor (1, 5); out ("Das Programm wird übersetzt. Zeilen-Nr.: "). fehler ggf melden: IF errormessage <> "" THEN fehler melden FI. fehler melden: IF pos (errormessage, "'halt' vom Terminal") > 0 THEN regenerate menuscreen; out (""7""); menuinfo (" "15"'halt' vom Terminal "14"") ELIF pos (errormessage, "Programm-Abbruch durch ") > 0 THEN regenerate menuscreen; out (""7""); menuinfo (" "15"Programm-Abbruch durch "14"") ELIF pos (errormessage, "(bei Zeile") > 0 AND exists (programmname) THEN programm mit fehler im notebook zeigen; regenerate menuscreen ELSE regenerate menuscreen; out (""7""); menuinfo (" " + invers ("FEHLER: " + subtext (errormessage, 1, 61))) FI. programm mit fehler im notebook zeigen: noteline; note ("FEHLER: " + errormessage); INT VAR n; FOR n FROM 1 UPTO 9 REP noteline PER; note (""15"Verlassen: "14""); FILE VAR p :: sequential file (modify, programmname); to line (p, max (1, fehlerzeile)); col (1); clear error; out (""7""); cursor on; noteedit (p); cursor off. fehlerzeile: int (subtext (errormessage, zahlposition)). zahlposition: pos (errormessage, "(bei Zeile") + 10. programmname ermitteln: IF programmname <> niltext CAND exists (programmname) THEN frage nach diesem programm ELSE lasse programm auswaehlen FI. frage nach diesem programm: IF menuno (ueberschrift + " Zuletzt bearbeitetes Programm: " + name + " Soll mit diesem Programm gearbeitet werden", 5) THEN lasse programm auswaehlen FI. ueberschrift: center (maxlaenge, invers ("Programm starten")) + ""13""13"". name: ""13""13" " + invers (programmname) + ""13""13"". lasse programm auswaehlen: THESAURUS VAR verfuegbare :: ALL myself; IF NOT not empty (verfuegbare) THEN noch kein programm; LEAVE pdvprogramm starten ELSE biete auswahl an FI. biete auswahl an: programmname := menuone (verfuegbare, "Programm starten", "Bitte das gewünschte Programm ankreuzen!", FALSE); IF programmname = niltext THEN menubildschirm; LEAVE pdv programm starten FI. END PROC pdvprogramm starten; PROC pdv programm wiederholen: bildschirm vorbereiten; cursor on; disable stop; IF noch kein programm gelaufen THEN errorstop ("Eine Wiederholung ist nicht moeglich!") ELSE run pdv again FI; cursor off; regenerate menuscreen; IF is error THEN zeige fehler; clear error FI; enable stop. bildschirm vorbereiten: cursor (17, 2); out (waagerecht); cursor (38, 2); out (waagerecht); cursor ( 1, 3); out (""4""); menufootnote ("Programmabbruch: "); cursor (1,3). zeige fehler: out (""7""); IF errormessage = "'run again' nicht moeglich" THEN menuinfo (" "15"Eine Wiederholung ist nicht moeglich! "14"") ELIF pos (errormessage, "'halt' vom Terminal") > 0 THEN menuinfo (" "15"'halt' vom Terminal "14"") ELIF pos (errormessage, "Programm-Abbruch durch ") > 0 THEN menuinfo (" "15"Programm-Abbruch durch "14"") ELSE menuinfo (" " + invers ("FEHLER: " + subtext (errormessage, 1, 61))) FI. END PROC pdv programm wiederholen; PROC meckere zu langen namen an: menuinfo (" " + invers ("Hier dürfen Namen höchstens " + text (max namenslaenge) + " Zeichen lang sein!")) END PROC meckere zu langen namen an; PROC meckere existierendes programm an: menuinfo (" " + invers ("Ein Programm mit diesem Namen gibt es bereits!")) END PROC meckere existierendes programm an; PROC noch kein programm: menuinfo (" " + invers ("Es existiert noch kein Programm!")) END PROC noch kein programm; PROC menu bildschirm: cursor (1, 2); out (5 * waagerecht); cursor (1, 3); out (""4""); cursor (1,23); out (79 * waagerecht); refresh submenu END PROC menu bildschirm END PACKET ls prozess 4