1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
PACKET systembaumeditorDEFINES startsystembaumeditor,aktuellensenamenlesen,
baumausdatei,baumausdateizeigen,baumausdateiuebersetzen,
systembaumreorganisieren,listederteilbaumdateien,listederteilbaeume,
erwartereaktion,baumaendern,baumloeschen,eingangsbildschirmherstellen,
internenbaumzeigen,internenbaumuebersetzen:LET z="Teilbaumliste",trenner=",",
praefix="b.",standardanfang=2,maxfelder=10,reorg=0,dummy="dummy",baumdatei=1,
teilbaeume=2,maskese1="mb baumdateibearbeitung",maskese2=
"mb teilbaumbearbeitung",maxnamenlaenge=32,fehldat="Übersetzungsfehler:";;
BOOL VAR fehler:=FALSE ;FILE VAR f;TEXT VAR namen:="";TEXT VAR dnam:="";;TAG
VAR aktuellemaske;INT VAR aktuelleposition;ROW 100TEXT VAR feld;INT VAR prog,
teilbaumzahl;init(feld);PROC startsystembaumeditor(INT CONST kennung):
werbinich;frageentwicklernachdemnamen;aktuellensenamenlesen.werbinich:TEXT
VAR maskenname;SELECT kennungOF CASE baumdatei:maskenname:=maskese1CASE
teilbaeume:maskenname:=maskese2END SELECT ;prog:=kennung.
frageentwicklernachdemnamen:page;IF exists(dnam)THEN forget(dnam,quiet)FI ;
IF exists(namen)THEN rename(namen,praefix+namen)FI ;aktuelleposition:=
standardanfang;standardkopfmaskeausgeben(text(vergleichsknoten));initmaske(
aktuellemaske,maskenname);show(aktuellemaske).END PROC startsystembaumeditor;
PROC aktuellensenamenlesen:putget(aktuellemaske,feld,aktuelleposition);namen
:=eingegebenenamen;loeschemeldung(aktuellemaske).END PROC
aktuellensenamenlesen;PROC baumausdatei:IF namen=""THEN melde(aktuellemaske,
43);return(1)ELSE IF istree(namen)THEN meldeohneb;return(1)ELSE f:=
sequentialfile(output,praefix+namen);close(f);baumausdateizeigenFI FI .
meldeohneb:melde(aktuellemaske,44).END PROC baumausdatei;PROC
baumausdateizeigen:store(FALSE );page;TEXT VAR t:=praefix+namen;IF exists(t)
THEN rename(t,namen)FI ;IF exists(fehldat)THEN forget(fehldat,quiet)FI ;
editiere(namen,"ae",FALSE );store(TRUE )END PROC baumausdateizeigen;PROC
systembaumreorganisieren:FILE VAR f:=sequentialfile(output,dummy);close(f);
dnam:=dummy;baumverarbeitung(dnam,reorg);eingangsbildschirmherstellen(1)END
PROC systembaumreorganisieren;PROC baumausdateiuebersetzen:translate(namen,
fehler);rename(namen,praefix+namen);IF fehlerTHEN erwartereaktionELSE
eingangsbildschirmherstellen(2)FI END PROC baumausdateiuebersetzen;PROC
baumaendern:baumbearbeiten(1)END PROC baumaendern;PROC baumloeschen:
baumbearbeiten(2)END PROC baumloeschen;PROC baumbearbeiten(INT CONST wie):
TEXT VAR t:="";meldesuche;dnam:=subtext(namen,1,maxnamenlaenge);t:=
bearbeitung(namen,wie);IF (t="")CAND teilbaumzahl=1THEN meldemisserfolg;
return(1)ELSE loeschemeldung(aktuellemaske);IF loeschenundkeinfehlerTHEN
eingangsbildschirmherstellen(1);meldeloeschungELSE internenbaumzeigenFI FI .
meldesuche:melde(aktuellemaske,24).meldemisserfolg:melde(aktuellemaske,25).
meldeloeschung:melde(aktuellemaske,51).loeschenundkeinfehler:(wie=2)AND (t<>
"").END PROC baumbearbeiten;PROC internenbaumzeigen:IF exists(fehldat)THEN
forget(fehldat,quiet)FI ;store(FALSE );page;editiere(dnam,"a",FALSE );store(
TRUE )END PROC internenbaumzeigen;PROC internenbaumuebersetzen:store(FALSE );
translate(dnam,fehler);store(TRUE );IF fehlerTHEN erwartereaktionELSE
eingangsbildschirmherstellen(2)FI END PROC internenbaumuebersetzen;PROC
listederteilbaeume:meldezusammenstellung;transactionlistederteilbaeume;
zeigenderteilbaumliste.meldezusammenstellung:melde(aktuellemaske,7).END PROC
listederteilbaeume;PROC listederteilbaumdateien:melde(aktuellemaske,7);FILE
VAR f;f:=sequentialfile(output,z);line(f);beginlist;TEXT VAR s:="",t:=" ";
REP getlistentry(s,t);IF istree(s)THEN put(f,t);put(f,s);line(f)FI UNTIL t=""
PER ;close(f);sort(z);zeigenderteilbaumliste.END PROC listederteilbaumdateien
;BOOL PROC istree(TEXT VAR t):INT VAR i;i:=pos(t,praefix);IF i>0THEN t:=3*" "
+subtext(t,i+2,length(t))FI ;i>0END PROC istree;PROC zeigenderteilbaumliste:
page;editiere(z)END PROC zeigenderteilbaumliste;PROC erwartereaktion:store(
FALSE );page;store(TRUE );IF fehlerTHEN editiere(fehldat,"a")FI ;END PROC
erwartereaktion;PROC transactionlistederteilbaeume:f:=sequentialfile(output,z
);TEXT VAR dateiname:=z;baumverarbeitung(dateiname,1)END PROC
transactionlistederteilbaeume;PROC translate(TEXT CONST t,BOOL VAR b):TEXT
VAR dateiname:=t;baumverarbeitung(dateiname,2);b:=(dateiname<>t)END PROC
translate;TEXT PROC bearbeitung(TEXT CONST t,INT CONST wie):f:=sequentialfile
(output,dnam);putline(f,t);TEXT VAR dateiname:=dnam;INT VAR methode:=2+wie;
IF teilbaumzahl>1THEN methodeINCR 2FI ;baumverarbeitung(dateiname,methode);
dateinameEND PROC bearbeitung;PROC eingangsbildschirmherstellen(INT CONST i):
reorganizescreen;return(i);IF exists(dnam)THEN forget(dnam,quiet)FI ;
standardkopfmaskeaktualisierenEND PROC eingangsbildschirmherstellen;TEXT
PROC eingegebenenamen:IF prog=baumdateiTHEN teilbaumzahl:=1;feld(
standardanfang)ELSE teilbaumzahl:=0;INT VAR i;TEXT VAR t:="";FOR iFROM
standardanfangUPTO maxfelderREP IF feld(i)<>""THEN teilbaumzahlINCR 1;IF t<>
""THEN tCAT trennerFI ;tCAT feld(i)FI PER ;tFI END PROC eingegebenenamen;
PROC init(ROW 100TEXT VAR feld):INT VAR i;FOR iFROM 1UPTO 100REP feld(i):=""
PER END PROC init;END PACKET systembaumeditor;
|