PACKET mathe verwaltung DEFINES mathe, installiere mathesystem: (**************************************************) (* G l o b a l e D e k l a r a t i o n e n *) (**************************************************) (* L E T - D e n o t e r *) (* Ausgabetexte *) LET systemname = "s c h u l i s - Mathematiksystem Version 1.0", titel 1 = "Systemverwaltung", titel 2 = "Installation", titel 3 = "Installation: Drucker", meldung 1 = "Das Mathematiksystem ist noch nicht installiert.", meldung 2 = "Kein Druckertreiber für Graphiken installiert.", meldung 3 = "1 ... Mathematiksystem - Ebene 1", meldung 4 = "2 ... Mathematiksystem - Ebene 2", meldung 5 = "3 ... Zeichnungen drucken", meldung 6 = "---------------------------------------", meldung 7 = "4 ... Neuinstallation: Mathematiksystem", meldung 8 = "5 ... Neuinstallation: Graphikdrucker", meldung 9 = "q ... Mathematiksystem verlassen", meldung 10 = "Gewünschte Funktion:", meldung 11 = "Bitte wählen Sie unter folgenden Anpassungen eine", meldung 12 = "für Ihr Terminal und die zugehörige Grafikkarte", meldung 13 = "angemessene heraus:", meldung 14 = " hercules-Anpassung", meldung 15 = " cga-Anpassung", meldung 16 = " ega-Anpassung", meldung 17 = " vga-Anpassung", meldung 18 = "Solange vorgeschlagene Anpassung verneinen ", meldung 19 = "bis passende genannt wird.", meldung 20 = "Diese bejahen .", meldung 21 = "Installation korrekt beendet", meldung 22 = "Installation wegen Systemfehler gestoppt", meldung 23 = "Verfügt das Terminal über den IBM-Zeichensatz", meldung 24 = "Soll das vorhandene Mathematiksystem gelöscht werden", meldung 25 = "Soll der vorhandene Druckertreiber gelöscht werden", meldung 26 = "Weiter mit beliebiger Taste", meldung 27 = "Geladen wird Datei Nr. ", meldung 28 = "Die benötigten Dateien sind vollständig geladen.", meldung 29 = "Sie können die Diskette aus dem Laufwerk nehmen.", meldung 30 = "Bitte warten - das Mathematiksystem wird installiert.", meldung 31 = "Installiert wird Datei von ", meldung 32 = "Fehler bei der Übersetzung der Programme.", meldung 33 = " richtige Anpassung", meldung 34 = "für Ihren Drucker geeigenete aus:", meldung 35 = " DRUCKER PLOTTER", meldung 36 = " xerox 4045 hp 72xx", meldung 37 = " epson sq hp 74xx", meldung 38 = " epson fx", meldung 39 = " binder 8600", meldung 40 = " kyocera", meldung 41 = " hp laserjet", meldung 42 = "Bitte warten - der Druckertreiber wird installiert", meldung 43 = "Bitte zunächst das Mathematiksystem installieren.", meldung 44 = "Zunächst müssen die erforderlichen Dateien geladen werden.", meldung 45 = "Passwort: ", meldung 46 = "Soll das System mit einem Passwort geschützt werden", meldung 47 = "Fehler: Die Diskette ist ungültig oder nicht korrekt eingelegt!", meldung 49 = "Installation vorzeitig abgebrochen", meldung 50 = "Bitte legen sie eine Diskette der Anwendung", meldung 51 = "in das Laufwerk und schließen es.", meldung 52 = "Installation fortsetzen: ", meldung 53 = "Installation abbrechen : ", meldung 54 = "Bitte legen Sie eine weitere Diskette der Anwendung", menutasten = "12345q", zeilen menu 1 = 10, zeilen menu 2 = 12, zeilen menu 3 = 14, (* d o - Kommandos *) menu ankoppeln = "install menu (""ls-MENUKARTE:Mathematik"", FALSE)", ebene 1 handle = "handle menu (""Ebene 1"")", ebene 2 handle = "handle menu (""Ebene 2"")", druckmenu handle = "handle menu (""Drucken"")", ibmsatzzeichen = "ibmgraphicchar", stdsatzzeichen = "stdgraphicchar", ibmops ankoppeln = "load ops (""ibmoperatoren"")", stdops ankoppeln = "load ops (""standardoperatoren"")", fe manager = "formelmanager", plotter ein = "plotter eingestellt (TRUE)", plotter aus = "plotter eingestellt (FALSE)", (* Tasknamen *) depot taskname = "mathe depot", ls mk taskname = "ls-MENUKARTEN", ls taskname = "ls-ANWENDUNG", fe taskname = "FORMELEDITOR", mathe taskname = "Mathematik", printer taskname = "MATHE-PRINTER", pridepot taskname = "MATHE-PRINTERDEPOT", umstell taskname = "DRUCKERANPASSUNGEN", archivname = "mathe", (* Bezeichner für Menükarte, Maskendatenraum und Programmanzahl *) menukarte = "ls-MENUKARTE:Mathematik", maskenname = "mathe formulare", mathe kuerzel = "mat.", plot kuerzel = " plot", ls kuerzel = "ls-DIALOG ", mathe extension = ".mathe", operatorendatei 1 = "ibmoperatoren", operatorendatei 2 = "standardoperatoren", anzahl gesamt = 29, anzahl feprocs = 6, anzahl ls procs = 5, anzahl matheprocs = 18, anzahl pri procs = 6, anzahl drucker ds = 16, (* Codes für Task-Kommunikation *) ok = 1111, fehler = 9999, insertieren = 2525, drucker erzeugen = 3260, drucker1 erzeugen = 3261, drucker8 erzeugen = 3268, system starten = 4444, ebene 1 behandeln = 4445, ebene 2 behandeln = 4446, arbeitskanal = 1, (* Es wird ohnehin nur das Terminal 1 genutzt!*) (* Sonstiges *) del = ""5"", delpage = ""4"", bell = ""7"", left = ""8"", beginmark = ""15"", endmark = ""14"", weiter = "w", abbruch = ""27"", niltext = ""; (* G l o b a l e V a r i a b l e n *) TASK VAR depot task, ls mk task, fe task, mathe task, ls task, pridepot task, printer task, order task, umstelltask; THESAURUS VAR archivinhalt; TEXT VAR graphicart, installationspassword := niltext; INT VAR druckerindex; BOOL VAR ibmsatz; INT VAR installationszaehler, antwort, order code; DATASPACE VAR message ds; BOOL VAR mathematiksystem installiert := FALSE, graphikdrucker installiert := FALSE; ROW anzahl druckerds TEXT CONST druckerdatei :: ROW anzahl druckerds TEXT : ("ZEICHEN 8*8", "ZEICHEN 6*10", "ZEICHEN 8*16", "spool cmd", "mat.xerox4045 plot", "mat.epson-sq plot", "mat.epson-fx plot", "mat.binder plot", "mat.kyocera plot", "mat.laserjet plot", "mat.hp72xx plot", "mat.hp74xx plot", "mat.basis plot", "mat.picture", "mat.ausgabe", "mat.druckermenu"); ROW zeilen menu 1 TEXT CONST menu 1 :: ROW zeilen menu 1 TEXT : (meldung 3, meldung 4, meldung 5, meldung 6, meldung 7, meldung 8, niltext, meldung 9, niltext, meldung 10); ROW zeilen menu 2 TEXT CONST menu 2 :: ROW zeilen menu 2 TEXT : (meldung 11, meldung 12, meldung 13, niltext, meldung 14, meldung 15, meldung 16, meldung 17, niltext, meldung 18, meldung 19, meldung 20); ROW zeilen menu 3 TEXT CONST menu 3 :: ROW zeilen menu 3 TEXT : (meldung 11, meldung 34, niltext, meldung 35, meldung 36, meldung 37, meldung 38, meldung 39, meldung 40, meldung 41, niltext, meldung 18, meldung 19, meldung 20); (**************************************************************************) (* H a u p t m e n ü *) (**************************************************************************) (* Die folgende Prozeduren realisieren ein Menü mit 6 Optionen: *) (* 1, 2: Ausführung des Mathematiksystems - sofern es noch nicht ein- *) (* gerichtet ist erfolgt eine Meldung. *) (* Die Ausführung erfolgt durch Übergabe des Bildschirms an die *) (* Task 'Mathematik' *) (* 3 : Ausführung eines Menüs in der Druckertask. Die Option setzt *) (* voraus, daß eine entsprechende Task eingerichtet ist. Ist dies*) (* nicht der Fall erfolgt eine Meldung *) (* 4 : Installation des Mathematiksystems. Sofern es schon eingerich-*) (* tet ist, erfolgt die Installation nur bei der Bejahung einer *) (* Abfrage, ob das vorhandene System gelöscht werden soll. *) (* 5 : Installation des Druckertreibers. Sofern er schon eingerichtet*) (* ist, erfolgt die Installation nur bei der Bejahung einer Ab- *) (* frage, ob das vorhandene System gelöscht werden soll. *) (* Ferner gilt: Ohne Mathematiksystem kann kein Druckertreiber *) (* eingerichtet werden. Ein Löschen des Mathematik- *) (* systems löscht automatisch auch den Druckertrei- *) (* ber *) (* q : Verlassen des Menüs *) (* *) (* Die exportierte Schnittstelle 'mathe' dient als Fängerebene für die *) (* eigentliche Menü-Prozedur 'start system' *) (**************************************************************************) PROC mathe: disable stop; zeige kopierhinweis; (* 5.2.1991 *) start system; WHILE is error REP clear error; command dialogue (FALSE); forget (all); commanddialogue (TRUE); zeige titelzeile (titel 1); gib meldung (errormessage); start system END REP END PROC mathe; PROC start system: TEXT VAR ch; INT VAR rang, zeile, xpos, ypos; grundeinstellungen; REP zeige verwaltungsmenu; warte auf korrekte eingabe; werte eingabe aus END REP. grundeinstellungen: enable stop; check off; warnings off. zeige verwaltungsmenu: zeige titelzeile (titel 1); FOR zeile FROM 7 UPTO 16 REP cursor (24, zeile); out (menu 1 (zeile - 6)) END REP; clear buffer. warte auf korrekte eingabe: get cursor (xpos, ypos); REP inchar (ch); rang := pos (menutasten, ch); IF rang = 0 THEN out (bell) ELSE cursor (xpos + 1, ypos); out (ch); END IF UNTIL rang <> 0 END REP. werte eingabe aus: SELECT rang OF CASE 1, 2: fuehre mathesystem aus CASE 3 : fuehre druckermenu aus CASE 4 : installiere mathesystem CASE 5 : installiere druckeranpassung OTHERWISE LEAVE start system (* = 6 *) END SELECT. fuehre mathesystem aus: IF NOT mathematiksystem installiert THEN out (bell); gib meldung (meldung 1); LEAVE fuehre mathesystem aus END IF; uebergib bildschirm (mathe task, system starten + rang). fuehre druckermenu aus: IF NOT graphikdrucker installiert THEN out (bell); gib meldung (meldung 2); LEAVE fuehre druckermenu aus END IF; uebergib bildschirm (/printer taskname, system starten). installiere druckeranpassung: IF NOT mathematiksystem installiert THEN out (bell); gib meldung (meldung 43); LEAVE installiere druckeranpassung END IF; IF graphikdrucker installiert CAND NOT ja (meldung 25) THEN LEAVE installiere druckeranpassung END IF; start printer installation; IF is error THEN clear error; gib meldung (errormessage); ELSE zeige installationsergebnis (titel 3, graphikdrucker installiert) END IF END PROC start system; PROC zeige kopierhinweis: (* Eingefügt 5.2.1991 - R.Kraft *) LET z1 = "schulis - Mathematiksystem", z2 = "Lizenzfreie Software der", z3 = "Gesellschaft für Mathematik und Datenverarbeitung mbH", z4 = "Die Nutzung der Software ist nur im Schul- und Hochschulbereich", z5 = "für nichtkommerzielle Zwecke gestattet.", z6 = "Gewährleistung und Haftung werden ausgeschlossen.", z7 = "Weiter mit beliebiger Taste"; page; cursor (26, 3); out (z1); cursor (27, 8); out (z2); cursor (13,10); out (z3); cursor ( 8,14); out (z4); cursor (20,15); out (z5); cursor (16,17); out (z6); cursor (26,23); out (z7); pause (50) END PROC zeige kopierhinweis; (***********************************************************************) (* I n s t a l l a t i o n d e s M a t h e m a t i k s y s t e m s *) (***********************************************************************) (* Das folgende Programm installiert das Mathematiksystem. *) (* Dabei werden ggf existierende Tasks eines alten Mathematiksystems *) (* gelöscht. Es handelt sich dabei um die ls-Task als Vatertask für *) (* Druckeranpassung, Formeleditor und Mathematiksystem sowie die *) (* Depottask (= Zwischenspeicher für die benötigten Quelldateien). *) (* Die erforderliche Graphik und Halbgraphikanpassung werden im Dialog *) (* bestimmt. *) (* Die Dateien werden vom Archiv gelesen und in die Zwischenspeicher *) (* Tasks geschickt. Anschließend erfolgt die Installation folgender *) (* Taskstruktur: ls-ANWENDUNG *) (* Mathematik *) (* FORMELEDITOR *) (* ls-MENUKARTEN *) (* DRUCKERANPASSUNGEN *) (* Die Zwischenspeichertask wird abschließend gelöscht. *) (***********************************************************************) PROC installiere mathesystem: IF NOT korrektes password THEN LEAVE installiere mathesystem END IF; IF mathematiksystem installiert CAND NOT ja (meldung 24) THEN LEAVE installiere mathesystem END IF; start mathe installation; zeige installationsergebnis (titel 2, mathematiksystem installiert); IF mathematiksystem installiert THEN definiere password END IF; graphikdrucker installiert := FALSE. END PROC installiere mathesystem; PROC start mathe installation: INT VAR i; bestimme graphic und halbgraphic; IF NOT erforderliche systemdateien eingelesen THEN errorstop (meldung 49) END IF; loesche ggf vorhandene tasks; richte ggf lsmenukarten ein; richte sicherungstasks ein; sichere dateien; melde installationsbeginn; richte ls task ein; richte formeleditor ein; richte mathetask ein; loesche depottask. bestimme graphic und halbgraphic: graphicart := graphikkarte; ibmsatz := ja (meldung 23). loesche ggf vorhandene tasks: IF exists task (depot taskname) THEN end (/depot taskname) END IF; IF exists task (ls taskname) THEN end (/ls taskname) END IF. richte ggf lsmenukarten ein: IF NOT exists task (ls mk taskname) THEN begin (ls mk taskname, PROC free global manager, ls mk task) ELSE ls mk task := /ls mk taskname END IF. richte sicherungstasks ein: begin (depot taskname, PROC free global manager, depot task); IF NOT exists task (umstell taskname) THEN begin (umstell taskname, PROC free global manager, umstell task) ELSE umstell task := /umstell taskname END IF. sichere dateien: commanddialogue (FALSE); save (menukarte, ls mk task); save (maskenname, ls mk task); save (archivinhalt, depot task); FOR i FROM 1 UPTO anzahl drucker ds REP IF NOT exists (druckerdatei (i), umstelltask) THEN save (druckerdatei (i), umstelltask) END IF END REP; forget (archivinhalt). melde installationsbeginn: zeige titelzeile (titel 2); cursor (15, 10); out (meldung 30); cursor (15, 12); out (meldung 31 + text (anzahl gesamt) + " Dateien"); installationszaehler := 0. richte ls task ein: begin (ls taskname, PROC install ls, ls task); FOR i FROM 1 UPTO anzahl ls procs REP insertiere programme (ls task) END REP. richte formeleditor ein: REP UNTIL exists task (fe taskname) CAND status (/fe taskname) = 2 END REP; fe task := /fe taskname; FOR i FROM 1 UPTO anzahl fe procs REP insertiere programme (fe task) END REP. richte mathetask ein: REP UNTIL exists task (mathe taskname) CAND status (/mathe taskname) = 2 END REP; mathe task := /mathe taskname; FOR i FROM 1 UPTO anzahl mathe procs REP insertiere programme (mathe task) END REP. loesche depottask: end (depot task) END PROC start mathe installation; (* Einlesen der benötigten Dateien *) BOOL PROC erforderliche systemdateien eingelesen: LET dateien = 53, nicht geladen = "0", geladen = "1"; ROW dateien TEXT CONST systemdatei :: ROW dateien TEXT : ("mat.ega plot", "mat.cga plot", "mat.hercules plot", "mat.vga plot", "ls-DIALOG 1.mathe", "ls-DIALOG 2.mathe", "ls-DIALOG 3.mathe", "ls-DIALOG 4.mathe", "ls-DIALOG 5.mathe", "PAC text row", "PAC element row", "PAC op store-anpassung", "PAC formula analyzer", "PAC formula editor-anpassung", "mat.formeleditormanager", "mat.vector", "mat.referenzobjekte", "mat.funktionsbibliothek", "mat.abbildung", "mat.parser", "mat.basis plot", "mat.picture", "mat.specialgraphic", "mat.dialoghilfen", "mat.masken", "mat.menufunktionen", "mat.wertetabelle", "mat.graphicverfahren", "mat.integrationsverfahren", "mat.iterationsverfahren", "mat.nullstellen", "mat.umformung", "mat.xerox4045 plot", "mat.epson-sq plot", "mat.epson-fx plot", "mat.binder plot", "mat.kyocera plot", "mat.laserjet plot", "mat.hp72xx plot", "mat.hp74xx plot", "spool cmd", "mat.ausgabe", "mat.druckermenu", "ZEICHEN 8*8", "ZEICHEN 9*14", "ZEICHEN 8*19", "ZEICHEN 8*14", "ZEICHEN 6*10", "ZEICHEN 8*16", "mathe formulare", "ls-MENUKARTE:Mathematik", "ibmoperatoren", "standardoperatoren"); TEXT VAR anweisung := meldung 50, pruefleiste := dateien * nicht geladen; TEXT CONST ziel := dateien * geladen, anpassung := mathe kuerzel + graphicart + plot kuerzel; INT VAR i, zaehler := 1; THESAURUS VAR diskinhalt; zeige titelzeile (titel 2); archivinhalt := empty thesaurus; FOR i FROM 1 UPTO 4 REP IF systemdatei (i) <> anpassung THEN replace (pruefleiste, i, geladen) END IF END REP; REP warte auf eingabe; FOR i FROM 1 UPTO dateien REP IF (pruefleiste SUB i) = nicht geladen CAND (diskinhalt CONTAINS systemdatei (i)) THEN lade die datei END IF END REP; anweisung := meldung 54 UNTIL pruefleiste = ziel END REP; abschlussaktivitaeten; TRUE. zeige texte: cursor (8, 8); out (meldung 44); cursor (8, 9); out (anweisung); cursor (8, 10); out (meldung 51); cursor (8, 12); out (meldung 52); cursor (8, 13); out (meldung 53). warte auf eingabe: TEXT VAR ch; REP zeige texte; inchar (ch); IF ch = abbruch THEN release (archive); LEAVE erforderliche systemdateien eingelesen WITH FALSE ELIF ch = weiter THEN disable stop; cursor (8, 9); out (del); cursor (8,10); out (del); cursor (8,12); out (del); cursor (8,13); out (del); cursor (8,15); out (del); archive (archivname); diskinhalt := ALL archive; IF is error THEN clear error; cursor (8, 15); out (meldung 47); enable stop; ELSE enable stop; LEAVE warte auf eingabe END IF ELSE out (bell) END IF END REP. lade die datei: cursor (8, 9); out (meldung 27 + text (zaehler) + " von 50 Dateien"); fetch (systemdatei (i), archive); replace (pruefleiste, i, geladen); insert (archivinhalt, systemdatei (i)); zaehler INCR 1. abschlussaktivitaeten: release (archive); cursor (8, 8); out (meldung 28 + del); cursor (8, 9); out (meldung 29 + del); pause (50) END PROC erforderliche systemdateien eingelesen; (* Installation der ls task *) PROC install ls: INT VAR i; FOR i FROM 1 UPTO anzahl ls procs REP insertiere (lskuerzel + text (i) + mathe extension, depot task) END REP; do (menu ankoppeln); IF ibmsatz THEN do (ibmsatzzeichen) ELSE do (stdsatzzeichen) END IF; begin (fe taskname, PROC install formeleditor, fe task); begin (mathe taskname, PROC install mathe, mathe task); disable stop; REP REP warte auf auftrag UNTIL order code >= drucker1 erzeugen CAND order code <= drucker8 erzeugen END REP; druckerindex := order code - drucker erzeugen; begin (printer taskname, PROC install printer, printer task); gib antwort (ok) END REP END PROC install ls; (* Installation des Formeleditors *) PROC install formeleditor: ROW anzahl feprocs TEXT CONST feproc :: ROW anzahl feprocs TEXT : ("PAC text row", "PAC element row", "PAC op store-anpassung", "PAC formula analyzer", "PAC formula editor-anpassung", "mat.formeleditormanager"); INT VAR i; FOR i FROM 1 UPTO anzahl fe procs REP insertiere (feproc (i), depot task) END REP; do (menu ankoppeln); hole notfalls (operatorendatei 1, depot task); hole notfalls (operatorendatei 2, depot task); IF ibmsatz THEN do (ibmops ankoppeln) ELSE do (std ops ankoppeln) END IF; do (fe manager) END PROC install formeleditor; (* Installation des eigentlichen Mathematiksystems *) PROC install mathe: ROW anzahl matheprocs TEXT CONST dname := ROW anzahl matheprocs TEXT : ("mat.vector", "mat.referenzobjekte", "mat.funktionsbibliothek", "mat.abbildung", "mat.parser", "mat.masken", mathekuerzel + graphicart + plotkuerzel, "mat.basis plot", "mat.picture", "mat.specialgraphic", "mat.dialoghilfen", "mat.menufunktionen", "mat.graphicverfahren", "mat.wertetabelle", "mat.nullstellen", "mat.umformung", "mat.integrationsverfahren", "mat.iterationsverfahren"); INT VAR i; TEXT CONST zugehoerende zeichen := passender zeichensatz; insertiere mathesystem; beende installation. passenderzeichensatz: IF graphicart = "vga" THEN "ZEICHEN 8*19" ELIF graphicart = "ega" THEN "ZEICHEN 8*14" ELIF graphicart = "cga" THEN "ZEICHEN 8*8" ELSE (* "hercules" *) "ZEICHEN 9*14" END IF. insertiere mathesystem: do (menu ankoppeln); hole notfalls (zugehoerende zeichen, depot task); FOR i FROM 1 UPTO anzahl matheprocs REP insertiere (dname (i), depot task) PER. beende installation: TEXT VAR arbeitsauftrag; commanddialogue (FALSE); forget (all - maskenname); commanddialogue (TRUE); disable stop; REP REP warte auf auftrag UNTIL order code = ebene 1 behandeln COR order code = ebene 2 behandeln END REP; continue (arbeitskanal); IF order code = ebene 1 behandeln THEN arbeitsauftrag := ebene 1 handle ELSE arbeitsauftrag := ebene 2 handle END IF; do (arbeitsauftrag); gib bildschirm frei (ok) END REP END PROC install mathe; (*********************************************************************) (* I n s t a l l a t i o n d e s D r u c k e r t r e i b e r s *) (*********************************************************************) PROC start printer installation: loesche ggf vorhandene task; bestimme druckeranpassung; melde installationsbeginn; richte druckertasks ein. loesche ggf vorhandene task: IF exists task (printer taskname) THEN end (/printer taskname) END IF. bestimme druckeranpassung: druckerindex := druckertreiber. melde installationsbeginn: INT VAR ende := anzahl pri procs; IF druckerindex > 6 THEN ende DECR 1 END IF; zeige titelzeile (titel 2); cursor (15, 10); out (meldung 42); cursor (15, 12); out (meldung 31 + text (ende) + " Dateien"); installationszaehler := 0. richte druckertasks ein: INT VAR i; IF NOT exists task (pridepot taskname) THEN begin (pridepot taskname, PROC free global manager, pridepot task) END IF; ls task := /ls taskname; rufe (ls task, drucker erzeugen + druckerindex); REP UNTIL exists task (printer taskname) CAND status (/printer taskname) = 2 END REP; printer task := /printer taskname; FOR i FROM 1 UPTO ende REP insertiere programme (printer task) END REP END PROC start printer installation; (* Installation des Druckers *) PROC install printer: LET anzahl zeichensaetze = 3; ROW anzahl priprocs TEXT CONST programm :: ROW anzahl priprocs TEXT : (druckerdatei (4), druckerdatei (4 + druckerindex), druckerdatei (13), druckerdatei (14), druckerdatei (15), druckerdatei (16)); INT VAR i; BOOL VAR plotter wird installiert := druckerindex > 6; do (menu ankoppeln); IF NOT plotter wird installiert THEN hole zeichensaetze END IF; insertiere die einzelnen programme; abschlussaktivitaet. hole zeichensaetze: FOR i FROM 1 UPTO anzahl zeichensaetze REP hole notfalls (druckerdatei (i), /umstell taskname) PER. insertiere die einzelnen programme: INT VAR anfang := 1; IF plotter wird installiert THEN anfang := 2 END IF; FOR i FROM anfang UPTO anzahl pri procs REP insertiere (programm (i), /umstell taskname) END REP. abschlussaktivitaet: IF NOT plotter wird installiert THEN FOR i FROM 1 UPTO anzahl zeichensaetze REP forget (druckerdatei (i), quiet) END REP END IF; IF plotter wird installiert THEN do (plotter ein) ELSE do (plotter aus) END IF; disable stop; REP REP warte auf auftrag UNTIL order code = system starten END REP; continue (arbeitskanal); do (druckmenu handle); gib bildschirm frei (ok) END REP END PROC install printer; (*********************************) (* H i l f s p r o g r a m m e *) (*********************************) (* Programme zur Ausführung des 'insert' *) PROC insertiere programme (TASK VAR zieltask): installationszaehler INCR 1; cursor (40, 12); out (text (installationszaehler)); rufe (zieltask, insertieren); IF antwort <> ok THEN errorstop (meldung 32) END IF END PROC insertiere programme; PROC insertiere (TEXT CONST name, TASK CONST herkunft): REP warte auf auftrag UNTIL order code = insertieren END REP; disable stop; hole notfalls (name, herkunft); insert (name); IF is error THEN clear error; gib antwort (fehler) ELSE gib antwort (ok) END IF; forget (name, quiet); enable stop END PROC insertiere; PROC hole notfalls (TEXT CONST name, TASK CONST herkunft): IF NOT exists (name) THEN fetch (name, herkunft) END IF END PROC hole notfalls; (***********************************************) (* Prozeduren zur Intertaskkommunikation *) (***********************************************) (* Die folgenden Prozeduren werden immer da eingesetzt, wo bei 'call', 'send' und 'wait' der übergebene Datenraum ignoriert werden kann *) PROC rufe (TASK CONST zieltask, INT CONST auftrag): message ds := nilspace; call (zieltask, auftrag, message ds, antwort); forget (message ds) END PROC rufe; PROC warte auf auftrag: wait (message ds, order code, order task); forget (message ds) END PROC warte auf auftrag; PROC gib antwort (INT CONST antwortcode): message ds := nilspace; send (order task, antwortcode, message ds); (*forget (message ds) *) END PROC gib antwort; PROC uebergib bildschirm (TASK CONST t, INT CONST auftrag): break (quiet); rufe (t, auftrag); continue (arbeitskanal) END PROC uebergib bildschirm; PROC gib bildschirm frei (INT CONST antwortcode): break (quiet); gib antwort (antwortcode) END PROC gib bildschirm frei; (********************************************************) (* Auswahlmenüs für Endgeräteanpassungen *) (********************************************************) TEXT PROC graphikkarte: LET anzahl plotprocs = 4; ROW anzahl plotprocs TEXT CONST plotname := ROW anzahl plotprocs TEXT : ("hercules","cga","ega","vga"); INT VAR i := 1, zeile; commanddialogue (TRUE); zeige titelzeile (titel 2); FOR zeile FROM 6 UPTO 17 REP cursor (16, zeile); out (menu 2 (zeile - 5)) END REP; REP cursor (16, 20); out (invers (text (plotname (i), 11))); IF yes (meldung 33) THEN commanddialogue (FALSE); LEAVE graphikkarte WITH plotname (i) END IF; i := i MOD anzahl plotprocs + 1 END REP; plotname (i) END PROC graphikkarte; INT PROC druckertreiber: LET anzahl plotterprocs = 8; ROW anzahl plotterprocs TEXT CONST plotname := ROW anzahl plotterprocs TEXT : ("xerox4045", "epson-sq", "epson-fx", "binder", "kyocera", "laserjet", "hp72xx", "hp74xx"); INT VAR i, zeile; commanddialogue (TRUE); zeige titelzeile (titel 3); FOR zeile FROM 3 UPTO 16 REP cursor (16, zeile); out (menu 3 (zeile - 2)) END REP; i := 1; REP cursor (16, 20); out (invers (text (plotname (i), 11))); IF yes (meldung 33) THEN commanddialogue (FALSE); LEAVE druckertreiber WITH i END IF; i := i MOD anzahl plotterprocs + 1 END REP; i END PROC druckertreiber; (************************************************) (* Bildschirmausgaben *) (************************************************) PROC zeige titelzeile (TEXT CONST fktbezeichner): TEXT CONST zeile := text (systemname, 78 - length (fktbezeichner)) + fktbezeichner; page; cursor (1,1); out (invers (text (zeile, 79))) END PROC zeige titelzeile; PROC zeige installationsergebnis (TEXT CONST ziel, BOOL VAR erfolg): zeige titelzeile (ziel); IF is error THEN clear error; gib meldung (meldung 22); erfolg := FALSE ELSE gib meldung (meldung 21); erfolg := TRUE END IF END PROC zeige installationsergebnis; PROC gib meldung (TEXT CONST meldungstext): cursor (1, 23); out (meldungstext); cursor (1, 24); out (invers (text (meldung 26, 77))); clear buffer; pause END PROC gib meldung; PROC clear buffer: REP UNTIL incharety = niltext PER END PROC clear buffer; BOOL PROC ja (TEXT CONST frage): BOOL VAR antwort; commanddialogue (TRUE); cursor (1, 22); antwort := yes (frage); cursor (1, 22); out (del); commanddialogue (FALSE); antwort END PROC ja; TEXT PROC invers (TEXT CONST t): beginmark + t + endmark END PROC invers; (*************************************************************************) (* P a s s w o r t s c h u t z *) (*************************************************************************) (* Zur Vermeidung einer irrtümlichen oder 'böswilligen' Neuinstallation *) (* des Mathesystems kann nach erfolgter Installation ein Passwort verge- *) (* ben werden, das beim Versuch der Neuinstallation abgefragt wird. *) (*************************************************************************) BOOL PROC korrektes password: installationspassword = niltext COR password getroffen. password getroffen: TEXT VAR eingabe; cursor (24, 18); out (meldung 45 + del); get secret line (eingabe); IF eingabe = installationspassword THEN cursor (24, 18); out (del); LEAVE password getroffen WITH TRUE END IF; out (bell); FALSE END PROC korrektes password; PROC definiere password: installationspassword := niltext; cursor (1, 23); out (delpage); IF ja (meldung 46) THEN cursor (1, 23); out (meldung 45 + beginmark + left); editget (installationspassword, 40, 20); out (endmark) END IF END PROC definiere password; END PACKET mathe verwaltung;