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
|
PACKET sybifunktionenDEFINES initsybifunktionen,setzebenutzerberechtigung,
holeberechtigungswert,setzeprogrammende,programmende,
setzeeditorschalterzurueck,gesetztdurcheditor,setzeschalterfuermenueausgabe,
loeschetastendruck,tastendruck,setzetastendruck,bittedasmenuezeigen,
menuedraussen,seteingabe,vpwunsch,npwunsch,vpgewaehlt,npgewaehlt,enter,return
,reenter,leave,setzevergleichsknoten,vergleichsknoten,knotenaufstackablegen,
legehistorieknotenab,holehistorietext,stopbaisy,setzeverteilteanwendung,
beendendessystembauminterpreters:TEXT VAR gedruecktetaste;BOOL VAR
programmendeschalter:=FALSE ,editorschalter:=FALSE ,schalterfuermenueausgabe
:=FALSE ,vornachschalter,verteilteanwendung:=FALSE ;KNOTEN VAR k;STACK VAR s;
INT VAR zurueckknotenanz;LET schaltervorprozedur=TRUE ,schalternachprozedur=
FALSE ;TEXT VAR benutzerberechtigung:="";LET maxmenueebenen=4;LET
HISTORIEKNOTEN =STRUCT (TEXT knotentext,INT anwahlpos);ROW maxmenueebenen
HISTORIEKNOTEN VAR hk;INT VAR aktebene;PROC setzeverteilteanwendung:
verteilteanwendung:=TRUE END PROC setzeverteilteanwendung;PROC seteingabe(
TEXT CONST t):gedruecktetaste:=t;editorschalter:=TRUE END PROC seteingabe;
PROC setzeeditorschalterzurueck:editorschalter:=FALSE END PROC
setzeeditorschalterzurueck;BOOL PROC gesetztdurcheditor:editorschalterEND
PROC gesetztdurcheditor;PROC setzebenutzerberechtigung(TEXT CONST t):
benutzerberechtigung:=tEND PROC setzebenutzerberechtigung;PROC
holeberechtigungswert(TEXT VAR t):t:=benutzerberechtigungEND PROC
holeberechtigungswert;PROC setzeprogrammende(BOOL CONST wahrwert):
programmendeschalter:=wahrwertEND PROC setzeprogrammende;BOOL PROC
programmende:programmendeschalterEND PROC programmende;PROC
setzeschalterfuermenueausgabe(BOOL CONST sfma):schalterfuermenueausgabe:=sfma
END PROC setzeschalterfuermenueausgabe;BOOL PROC menuedraussen:
schalterfuermenueausgabeEND PROC menuedraussen;BOOL PROC bittedasmenuezeigen:
schalterfuermenueausgabeEND PROC bittedasmenuezeigen;PROC loeschetastendruck:
gedruecktetaste:=""END PROC loeschetastendruck;TEXT PROC tastendruck:
gedruecktetasteEND PROC tastendruck;PROC setzetastendruck(TEXT CONST taste):
gedruecktetaste:=tasteEND PROC setzetastendruck;PROC vpwunsch:vornachschalter
:=schaltervorprozedurEND PROC vpwunsch;PROC npwunsch:vornachschalter:=
schalternachprozedurEND PROC npwunsch;BOOL PROC vpgewaehlt:vornachschalter
END PROC vpgewaehlt;BOOL PROC npgewaehlt:NOT vornachschalterEND PROC
npgewaehlt;PROC return(INT CONST zurueckknotenanzahl):zurueckknotenanz:=
zurueckknotenanzahl;INT VAR knotenstackhoehe;knotenstackhoehe:=hoehe(s);
npwunsch;IF knotenstackhoehe<zurueckknotenanzahlTHEN holeerstenstackknoten
ELSE holenaechstenstackknotenFI END PROC return;PROC enter(INT CONST
zurueckknotenanzahl):zurueckknotenanz:=zurueckknotenanzahl;INT VAR
knotenstackhoehe;knotenstackhoehe:=hoehe(s);vpwunsch;IF knotenstackhoehe<
zurueckknotenanzahlTHEN holeerstenstackknotenELSE holenaechstenstackknotenFI
END PROC enter;PROC reenter(INT CONST zurueckknotenanzahl):enter(
zurueckknotenanzahl)END PROC reenter;PROC leave(INT CONST zurueckknotenanzahl
):return(zurueckknotenanzahl)END PROC leave;PROC holeerstenstackknoten:IF
verteilteanwendungTHEN zurueckverzweigenvorbereitenELSE
lokalerstenstackknotenholenFI .zurueckverzweigenvorbereiten:
programmendeschalter:=TRUE .lokalerstenstackknotenholen:REP pop(s,k)UNTIL
leer(s)PER ;aktebene:=0.END PROC holeerstenstackknoten;PROC
holenaechstenstackknoten:INT VAR zurueckknotenzaehler:=0;WHILE (
zurueckknotenzaehler<zurueckknotenanz)REP pop(s,k);IF aktebene>0THEN IF text(
k)=hk(aktebene).knotentextTHEN aktebeneDECR 1FI ;FI ;zurueckknotenzaehler
INCR 1PER ;END PROC holenaechstenstackknoten;PROC knotenaufstackablegen(
KNOTEN VAR stackknoten):push(s,k)END PROC knotenaufstackablegen;PROC
setzevergleichsknoten(KNOTEN CONST vglknoten):k:=vglknotenEND PROC
setzevergleichsknoten;KNOTEN PROC vergleichsknoten:kEND PROC vergleichsknoten
;PROC beendendessystembauminterpreters:setzeprogrammende(TRUE );return(1)END
PROC beendendessystembauminterpreters;PROC initsybifunktionen:
programmendeschalter:=FALSE ;verteilteanwendung:=FALSE ;s:=leererstack;
aktebene:=0;store(TRUE );INT VAR ind;FOR indFROM 1UPTO maxmenueebenenREP hk(
ind).knotentext:="";hk(ind).anwahlpos:=0;PER END PROC initsybifunktionen;
PROC legehistorieknotenab(TEXT CONST ktext,INT CONST mpkt):IF aktebene<
maxmenueebenenTHEN aktebeneINCR 1;hk(aktebene).knotentext:=ktext;hk(aktebene)
.anwahlpos:=mpktFI END PROC legehistorieknotenab;PROC holehistorietext(TEXT
VAR ktext,INT VAR kpos,INT CONST nletzter):INT VAR hkzeiger;hkzeiger:=
aktebene-nletzter+1;IF hkzeiger<1THEN ktext:=""ELSE ktext:=hk(hkzeiger).
knotentext;kpos:=hk(hkzeiger).anwahlposFI END PROC holehistorietext;PROC
stopbaisy:logbucheintragabmeldung;benutzerberechtigung:="";enter(1);breakEND
PROC stopbaisy;PROC logbucheintragabmeldung:TEXT VAR eintrag:="Abmeldung """;
eintragCAT name(myself);eintragCAT """";logeintrag(eintrag)END PROC
logbucheintragabmeldung;END PACKET sybifunktionen
|