From afd4c3c448381f6eb706090911a15c162fdaf8af Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sun, 9 Oct 2016 11:28:19 +0200 Subject: Decompress source files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EUMEL’s TEXT dataspaces wastes a lot of storage space. Some files were therefore “compressed” by storing them as a single line, reducing overhead significantly. --- warenhaus/ls-Warenhaus 1 | 222 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 210 insertions(+), 12 deletions(-) (limited to 'warenhaus/ls-Warenhaus 1') diff --git a/warenhaus/ls-Warenhaus 1 b/warenhaus/ls-Warenhaus 1 index 81fd8ee..c3976b4 100644 --- a/warenhaus/ls-Warenhaus 1 +++ b/warenhaus/ls-Warenhaus 1 @@ -22,16 +22,214 @@ *) PACKET monitor alt DEFINES original monitor: - PROC original monitor:{} monitor{} END PROC originalmonitor{}END PACKET monitor alt;{}PACKET ls warenhaus 1 DEFINES{} zentrale,{} monitor,{} warenhaus direktstart,{} warenhaus hauptstelle,{} hauptstellenname:{}LET max kundenzahl = 31,{} min kundennummer = 129,{} kundendatei holen code = 100,{} kundendatei ergaenzen code = 200;{}TYPE KUNDENDATEN = STRUCT (TEXT nachname, vorname, geschlecht),{} KUNDENDATEI = ROW max kundenzahl KUNDENDATEN;{}{} -BOUND KUNDENDATEN VAR kundendaten;{}BOUND KUNDENDATEI VAR bound kundendatei;{}KUNDENDATEI VAR kundendatei;{}DATASPACE VAR ds;{}TASK VAR absender,{} zentraltask :: niltask,{} hauptstelle :: niltask,{} direktstartmanager :: niltask;{}BOOL VAR mit direktstart :: FALSE,{} mit loeschen :: FALSE;{}INT VAR codenummer;{}PROC zentrale:{} enable stop;{} IF pos (name (myself), ".Zentrale") = 0{} THEN errorstop ("Unzulaessiger Befehl!"){}{} - FI;{} disable stop;{} REP wait (ds, codenummer, absender);{} bearbeite auftrag;{} send (absender, codenummer, ds);{} IF is error THEN clear error FI{} PER.{} bearbeite auftrag:{} IF codenummer = kundendatei holen code{} THEN hole kundendatei{} ELIF codenummer = kundendatei ergaenzen code{} THEN ergaenze kundendatei{} ELIF codenummer >= min kundennummer{} THEN lies kundendaten{} ELSE speichere kundendaten{} FI.{}END PROC zentrale;{}{} -PROC hole kundendatei:{} bound kundendatei := ds;{} bound kundendatei := kundendatei{}END PROC hole kundendatei;{}PROC ergaenze kundendatei:{} INT VAR kundennummer;{} bound kundendatei := ds;{} FOR kundennummer FROM 1 UPTO max kundenzahl REP{} IF kundendatei [kundennummer].nachname = ""{} THEN kundendatei [kundennummer] := bound kundendatei [kundennummer]{} FI{} PER;{} init ds{}END PROC ergaenze kundendatei;{}PROC lies kundendaten:{} kundendaten := ds;{} kundendaten := kundendatei [platznummer].{}{} - platznummer: codenummer - min kundennummer + 1.{}END PROC lies kundendaten;{}PROC speichere kundendaten:{} kundendaten := ds;{} kundendatei [codenummer] := kundendaten;{} init ds{}END PROC speichere kundendaten;{}PROC warenhaus hauptstelle (BOOL CONST task soll hauptstelle sein):{} enable stop;{} IF task soll hauptstelle sein{} THEN mache task zur hauptstelle{} ELSE mache hauptstellenstatus rueckgaengig{} FI.{} mache task zur hauptstelle:{} sei eine hauptstelle;{} line (2);{}{} - IF NOT mit direktstart CAND yes ("Mit Direktstart"){} THEN warenhaus direktstart (TRUE){} ELSE global manager{} FI{}END PROC warenhaus hauptstelle;{}PROC sei eine hauptstelle:{} IF NOT (hauptstelle = niltask OR hauptstelle = myself){} THEN errorstop ("Hauptstelle ist bereits die Task '" +{} name (hauptstelle) + "'!"){} FI;{} disable stop;{} end (zentraltask);{} IF is error THEN clear error FI;{} enable stop;{} hauptstelle := niltask;{} begin (name (myself) + ".Zentrale", PROC zentrale, zentraltask);{}{} - hauptstelle := myself{}END PROC sei eine hauptstelle;{}PROC mache hauptstellenstatus rueckgaengig:{} IF NOT (hauptstelle = niltask OR hauptstelle = myself){} THEN errorstop ("Dieses Kommando darf nur in der Task '" +{} name (hauptstelle) + " gegeben werden!"){} FI;{} disable stop;{} end (zentraltask);{} IF is error THEN clear error FI;{} enable stop;{} hauptstelle := niltask;{} warenhaus direktstart (FALSE){}END PROC mache hauptstellenstatus rueckgaengig;{}PROC warenhaus direktstart (BOOL CONST wahl):{}{} - pruefe zulaessigkeit;{} mit direktstart := wahl;{} IF mit direktstart{} THEN direktstartmanager := myself;{} mit loeschen := yes ("Mit automatischem Löschen"){} ELSE direktstartmanager := niltask{} FI;{} global manager.{} pruefe zulaessigkeit:{} enable stop;{} IF NOT (direktstartmanager = niltask OR direktstartmanager = myself){} THEN errorstop ("Der Direktstart kann nur aus der Task '" +{} name (direktstartmanager) + "'geaendert werden!"){}{} - FI.{}END PROC warenhaus direktstart;{}TEXT PROC hauptstellenname:{} name (hauptstelle){}END PROC hauptstellenname;{}PROC monitor:{} IF mit direktstart{} THEN warenhaus monitor{} ELSE original monitor{} FI{}END PROC monitor;{}PROC warenhausmonitor:{} disable stop;{} INT VAR previous heapsize := heap size;{} REP command dialogue (TRUE);{} sysin (""); sysout ("");{} cry if not enough storage;{} reset dialog; erase menunotice;{} do ("warenhaus");{} IF is error{}{} - THEN clear error{} ELSE sitzungsende{} FI{} PER.{} sitzungsende:{} collect heap garbage if necessary;{} page;{} IF mit loeschen{} THEN break; end (myself){} ELSE end; break{} FI.{} collect heap garbage if necessary:{} IF heap size > previous heapsize + 10{} THEN collect heap garbage;{} previous heapsize := heap size{} FI.{} cry if not enough storage:{} INT VAR size, used;{} storage (size, used);{} IF used > size{} THEN out (""7"Speicher Engpass! Dateien loeschen!"13""10""){}{} - FI.{}END PROC warenhausmonitor;{}OP := (KUNDENDATEN VAR ziel, KUNDENDATEN CONST quelle):{} CONCR (ziel) := CONCR (quelle){}END OP :=;{}OP := (KUNDENDATEI VAR ziel, KUNDENDATEI CONST quelle):{} CONCR (ziel) := CONCR (quelle){}END OP :=;{}PROC init ds:{} forget (ds); ds := nilspace{}END PROC init ds;{}PROC initialisiere kundendatei:{} KUNDENDATEN CONST leer :: KUNDENDATEN : ("", "", "");{} INT VAR nr;{} FOR nr FROM 1 UPTO max kundenzahl REP{} kundendatei [nr] := leer{} PER{}END PROC initialisiere kundendatei;{}{} -initialisiere kundendatei{}END PACKET ls warenhaus 1{}{} + PROC original monitor: + monitor + END PROC originalmonitor +END PACKET monitor alt; +PACKET ls warenhaus 1 DEFINES + zentrale, + monitor, + warenhaus direktstart, + warenhaus hauptstelle, + hauptstellenname: +LET max kundenzahl = 31, + min kundennummer = 129, + kundendatei holen code = 100, + kundendatei ergaenzen code = 200; +TYPE KUNDENDATEN = STRUCT (TEXT nachname, vorname, geschlecht), + KUNDENDATEI = ROW max kundenzahl KUNDENDATEN; + + +BOUND KUNDENDATEN VAR kundendaten; +BOUND KUNDENDATEI VAR bound kundendatei; +KUNDENDATEI VAR kundendatei; +DATASPACE VAR ds; +TASK VAR absender, + zentraltask :: niltask, + hauptstelle :: niltask, + direktstartmanager :: niltask; +BOOL VAR mit direktstart :: FALSE, + mit loeschen :: FALSE; +INT VAR codenummer; +PROC zentrale: + enable stop; + IF pos (name (myself), ".Zentrale") = 0 + THEN errorstop ("Unzulaessiger Befehl!") + + + FI; + disable stop; + REP wait (ds, codenummer, absender); + bearbeite auftrag; + send (absender, codenummer, ds); + IF is error THEN clear error FI + PER. + bearbeite auftrag: + IF codenummer = kundendatei holen code + THEN hole kundendatei + ELIF codenummer = kundendatei ergaenzen code + THEN ergaenze kundendatei + ELIF codenummer >= min kundennummer + THEN lies kundendaten + ELSE speichere kundendaten + FI. +END PROC zentrale; + + +PROC hole kundendatei: + bound kundendatei := ds; + bound kundendatei := kundendatei +END PROC hole kundendatei; +PROC ergaenze kundendatei: + INT VAR kundennummer; + bound kundendatei := ds; + FOR kundennummer FROM 1 UPTO max kundenzahl REP + IF kundendatei [kundennummer].nachname = "" + THEN kundendatei [kundennummer] := bound kundendatei [kundennummer] + FI + PER; + init ds +END PROC ergaenze kundendatei; +PROC lies kundendaten: + kundendaten := ds; + kundendaten := kundendatei [platznummer]. + + + platznummer: codenummer - min kundennummer + 1. +END PROC lies kundendaten; +PROC speichere kundendaten: + kundendaten := ds; + kundendatei [codenummer] := kundendaten; + init ds +END PROC speichere kundendaten; +PROC warenhaus hauptstelle (BOOL CONST task soll hauptstelle sein): + enable stop; + IF task soll hauptstelle sein + THEN mache task zur hauptstelle + ELSE mache hauptstellenstatus rueckgaengig + FI. + mache task zur hauptstelle: + sei eine hauptstelle; + line (2); + + + IF NOT mit direktstart CAND yes ("Mit Direktstart") + THEN warenhaus direktstart (TRUE) + ELSE global manager + FI +END PROC warenhaus hauptstelle; +PROC sei eine hauptstelle: + IF NOT (hauptstelle = niltask OR hauptstelle = myself) + THEN errorstop ("Hauptstelle ist bereits die Task '" + + name (hauptstelle) + "'!") + FI; + disable stop; + end (zentraltask); + IF is error THEN clear error FI; + enable stop; + hauptstelle := niltask; + begin (name (myself) + ".Zentrale", PROC zentrale, zentraltask); + + + hauptstelle := myself +END PROC sei eine hauptstelle; +PROC mache hauptstellenstatus rueckgaengig: + IF NOT (hauptstelle = niltask OR hauptstelle = myself) + THEN errorstop ("Dieses Kommando darf nur in der Task '" + + name (hauptstelle) + " gegeben werden!") + FI; + disable stop; + end (zentraltask); + IF is error THEN clear error FI; + enable stop; + hauptstelle := niltask; + warenhaus direktstart (FALSE) +END PROC mache hauptstellenstatus rueckgaengig; +PROC warenhaus direktstart (BOOL CONST wahl): + + + pruefe zulaessigkeit; + mit direktstart := wahl; + IF mit direktstart + THEN direktstartmanager := myself; + mit loeschen := yes ("Mit automatischem Löschen") + ELSE direktstartmanager := niltask + FI; + global manager. + pruefe zulaessigkeit: + enable stop; + IF NOT (direktstartmanager = niltask OR direktstartmanager = myself) + THEN errorstop ("Der Direktstart kann nur aus der Task '" + + name (direktstartmanager) + "'geaendert werden!") + + + FI. +END PROC warenhaus direktstart; +TEXT PROC hauptstellenname: + name (hauptstelle) +END PROC hauptstellenname; +PROC monitor: + IF mit direktstart + THEN warenhaus monitor + ELSE original monitor + FI +END PROC monitor; +PROC warenhausmonitor: + disable stop; + INT VAR previous heapsize := heap size; + REP command dialogue (TRUE); + sysin (""); sysout (""); + cry if not enough storage; + reset dialog; erase menunotice; + do ("warenhaus"); + IF is error + + + THEN clear error + ELSE sitzungsende + FI + PER. + sitzungsende: + collect heap garbage if necessary; + page; + IF mit loeschen + THEN break; end (myself) + ELSE end; break + FI. + collect heap garbage if necessary: + IF heap size > previous heapsize + 10 + THEN collect heap garbage; + previous heapsize := heap size + FI. + cry if not enough storage: + INT VAR size, used; + storage (size, used); + IF used > size + THEN out (""7"Speicher Engpass! Dateien loeschen!"13""10"") + + + FI. +END PROC warenhausmonitor; +OP := (KUNDENDATEN VAR ziel, KUNDENDATEN CONST quelle): + CONCR (ziel) := CONCR (quelle) +END OP :=; +OP := (KUNDENDATEI VAR ziel, KUNDENDATEI CONST quelle): + CONCR (ziel) := CONCR (quelle) +END OP :=; +PROC init ds: + forget (ds); ds := nilspace +END PROC init ds; +PROC initialisiere kundendatei: + KUNDENDATEN CONST leer :: KUNDENDATEN : ("", "", ""); + INT VAR nr; + FOR nr FROM 1 UPTO max kundenzahl REP + kundendatei [nr] := leer + PER +END PROC initialisiere kundendatei; + + +initialisiere kundendatei +END PACKET ls warenhaus 1 + + -- cgit v1.2.3