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
|
PACKETfensterDEFINES FENSTER,fensterinitialisieren,fenstergroessesetzen,fenstergroesse,fensterveraendert,fensterzugriff,bildschirmneu:TYPE FENSTER=STRUCT(INTb0,c0);LETd0=16,BITVEKTOR=INT,GROESSE=STRUCT(INTe0,f0,g0,h0);ROWd0STRUCT(INTi0,j0,BITVEKTORk0,GROESSEl0)VARm0;INT VARn0:=1;BITVEKTOR VARo0;INT VARp0;FORp0FROM2UPTOd0REPm0(p0).i0:=0END REP;m0(1).i0:=1;m0(1).j0:=0;m0(1).k0:=0;m0(1).l0:=GROESSE:(1,1,79,24);PROCfensterinitialisieren(FENSTER VARf):f.b0:=1;m0(1).i0INCR1;f.c0:=n0;n0INCR1;IFn0>=32000THENn0:=-32000END IF END PROCfensterinitialisieren;PROCfenstergroessesetzen(FENSTER VARf,INT CONSTe0,f0,g0,h0):INT VARq0;r0;IFq0>d0THENs0;t0;u0END IF;v0.r0:q0:=1;WHILEq0<=d0REP IFw0THEN LEAVEr0END IF;q0INCR1END REP.w0:x0.e0=e0ANDx0.f0=f0ANDx0.g0=g0ANDx0.h0=h0.x0:m0(q0).l0.s0:q0:=1;WHILEq0<=d0REP IFm0(q0).i0=0THEN LEAVEs0END IF;q0INCR1END REP;errorstop("zu viele Fenstergroessen");LEAVEfenstergroessesetzen.t0:m0(q0).i0:=0;m0(q0).j0:=0;m0(q0).l0:=GROESSE:(e0,f0,g0,h0);m0(q0).k0:=0.u0:INT VARy0;FOR
y0FROM1UPTOd0REP IFm0(y0).i0>0THENz0END IF END REP.z0:IFa1(b1,c1)THENsetbit(m0(q0).k0,y0);setbit(m0(y0).k0,q0)ELSEresetbit(m0(y0).k0,q0)END IF.b1:m0(q0).l0.c1:m0(y0).l0.v0:m0(f.b0).i0DECR1;f.b0:=q0;m0(q0).i0INCR1.END PROCfenstergroessesetzen;BOOL PROCa1(GROESSE CONSTa,d1):e1ANDf1.e1:IFa.e0<=d1.e0THENd1.e0<=a.e0+a.g0ELSEa.e0<=d1.e0+d1.g0END IF.f1:IFa.f0<=d1.f0THENd1.f0<=a.f0+a.h0ELSEa.f0<=d1.f0+d1.h0END IF.END PROCa1;PROCfenstergroesse(FENSTER CONSTf,INT VARe0,f0,g0,h0):e0:=x0.e0;f0:=x0.f0;g0:=x0.g0;h0:=x0.h0.x0:m0(f.b0).l0.END PROCfenstergroesse;PROCfensterveraendert(FENSTER CONSTf):m0(f.b0).j0:=0;o0:=o0ORg1.g1:m0(f.b0).k0.END PROCfensterveraendert;PROCfensterzugriff(FENSTER CONSTf,BOOL VARh1):h1:=bit(o0,f.b0);IFm0(f.b0).j0<>f.c0THENm0(f.b0).j0:=f.c0;h1:=TRUE END IF;o0:=o0ORg1;resetbit(o0,f.b0).g1:m0(f.b0).k0.END PROCfensterzugriff;PROCbildschirmneu:o0:=-1END PROCbildschirmneu;ROW16INT VARi1:=ROW16INT:(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,-32767-1);PROCsetbit(
BITVEKTOR VARj1,INT CONSTq0):j1:=j1ORi1(q0)END PROCsetbit;PROCresetbit(BITVEKTOR VARj1,INT CONSTq0):j1:=j1AND(-1-i1(q0))END PROCresetbit;BOOL PROCbit(BITVEKTOR CONSTj1,INT CONSTq0):(j1ANDi1(q0))<>0END PROCbit;END PACKETfenster;
PACKETeudasmenuesDEFINESersetzungstext,
##globalmanager,menuemanager,
##menuedateneinlesen,menuenamen,menueloeschen,menueanbieten,auswahlanbieten,wahl,eschopausfuehren,hilfeanbieten,statuszeile,statusanzeigen,dialogfenster,dialog,neuerdialog,ja,editget,fehlerausgeben:ROW9TEXT VARk1;PROCersetzungstext(INT CONSTl1,TEXT CONSTm1):k1(l1):=m1END PROCersetzungstext;PROCn1(INT CONSTl1,TEXT VARm1):SELECTl1OF CASE1:m1:=timeofdayCASE2:m1:=date
##CASE3:m1:=name(myself)
##OTHERWISEm1:=k1(l1)END SELECT END PROCn1;ROW10TEXT VARo1:=ROW10TEXT:("MENUE","BILD","FELD","ERSETZE","ENDE","AUSWAHL","VORSPANN","HILFE","SEITE","");LETp1=1,q1=2,r1=3,s1=4,t1=5,u1=6,v1=7,w1=8,x1=9;LETy1=2,integer=3,z1=4,a2=7;LETb2="FEHLER in Zeile ";FILE VARc2;TEXT VARd2,e2;PROCf2:IFeof(c2)THENd2:="%DUMMY"ELSEreadrecord(c2,d2);IFd2=g2THENd2:=h2END IF;cout(lineno(c2));down(c2)END IF END PROCf2;BOOL PROCi2:IF(d2SUB1)=j2THENk2ELSE FALSE END IF.k2:INT VARl2;replace(d2,1,h2);scan(d2);replace(d2,1,j2);nextsymbol(e2,l2);IFl2<>y1THENm2(n2);FALSE ELSE TRUE END IF.END PROCi2;BOOL PROCo2(INT CONSTp2):o1(p2)=e2END PROCo2;INT PROCq2:TEXT VARr2;INT VARl2;nextsymbol(r2,l2);IFl2=integerTHENint(r2)ELSE IFl2<>a2THENm2(s2)END IF;-1END IF END PROCq2;TEXT PROCt2:TEXT VARr2;INT VARl2;nextsymbol(r2,l2);IFl2=z1THENr2ELSE IFl2<>a2THENm2(u2)END IF;g2END IF END PROCt2;PROCm2(TEXT CONSTv2):note(b2);note(lineno(c2)-1);noteline;note(v2);noteline;line;putline(v2)END PROCm2;INT VARh0,g0,w2,x2;PROCy2(INT CONSTz2,a3)
:cursor(w2+z2-1,x2+a3-1)END PROCy2;LETb3="Zeile ist ohne Zusammenhang",c3="K Menuedaten im Speicher";PROCmenuedateneinlesen(FILE VARf):d3;modify(f);toline(f,1);c2:=f;WHILE NOTeof(c2)REPf2;IFi2THENe3ELIF NOTanythingnotedTHENm2(b3)END IF END REP;f3.e3:IFo2(p1)THENg3ELIFo2(u1)THENh3ELIFo2(w1)THENi3ELIF NOTanythingnotedTHENm2(b3)END IF.f3:IFonlineTHENline;put(j3DIV2);putline(c3)END IF.j3:dspages(k3(1))+dspages(k3(2))+dspages(k3(3)).END PROCmenuedateneinlesen;TYPE MENUE=STRUCT(SATZl3,m3,n3,o3,TEXTp3,q3,r3);BOUND ROW200MENUE VARs3;INT VARt3;TEXT VARu3,v3;LETg2="",h2=" ",w3="",j2="%",x3="&",y3=""7"",z3=""27"",a4=""5"",b4="-"8"",c4="+";LETd4="% BILD erwartet",e4="Feldnummer beim %FELD-Kommando fehlt",f4="% ENDE erwartet",g4="Zeile muss mit '&' beginnen",h4="ein Parameter fehlt",i4="Ersetzungstexte gehen nur von 1 bis 9",j4="Name fehlt",n2="Kommandozeile enthaelt kein Kommando",s2="Parameter soll eine Zahl sein",u2="Parameter soll ein TEXT sein",k4="Wiederholungszeile fehlt";PROCg3:TEXT VAR
name:=t2;IFname=g2THENm2(j4)ELSE INT VARindex;l4;g3(s3(index))END IF.l4:index:=link(m4(2),name);IFindex=0THENinsert(m4(2),name,index)END IF.END PROCg3;PROCg3(MENUE VARn4):o4;p4;q4;r4.o4:satzinitialisieren(n4.l3);satzinitialisieren(n4.m3);satzinitialisieren(n4.n3);satzinitialisieren(n4.o3);n4.p3:=g2;n4.q3:=g2;n4.r3:=g2.p4:s4;INT VARt4:=1;REPf2;IFi2THEN LEAVEp4ELSEu4;t4INCR1END IF END REP.s4:f2;IF NOT(i2CANDo2(q1))THENm2(d4)END IF.u4:INT VARv4:=0;REPv4:=pos(d2,w3,v4+1);IFv4>0THENn4.q3CATcode(v4);n4.r3CATcode(t4)END IF UNTILv4=0END REP;feldaendern(n4.l3,t4,d2).q4:WHILEo2(r1)REPw4END REP.w4:INT VARx4:=q2;IFx4=-1THENm2(e4);x4:=100END IF;y4;z4;a5.y4:feldaendern(n4.m3,x4,t2).z4:TEXT CONSTb5:=t2;INT VARc5;FORc5FROM1UPTOlength(b5)REPn4.p3CATcode(x4);n4.p3CAT(b5SUBc5)END REP.a5:TEXT VARd5:=g2;f2;WHILE NOTi2REPd5CATd2;f2END REP;feldaendern(n4.n3,x4,d5).r4:IFo2(s1)THENe5END IF;IF NOTo2(t1)THENm2(f4)END IF.e5:f2;WHILE NOTi2REPf5;f2END REP.f5:g5(n4.o3);h5(n4.l3).END PROCg3;PROCg5(SATZ VARo3):IF(d2
SUB1)<>x3THENm2(g4);u3:=g2ELSEi5;j5END IF.i5:INT CONSTk5:=pos(d2,h2);IFk5=0THENm2(h4);u3:=g2ELSEu3:=subtext(d2,2,k5-1);scan(subtext(d2,k5))END IF.j5:t3:=q2;IFt3<1ORt3>9THENm2(i4)ELSE TEXT CONSTl5:=t2;feldaendern(o3,t3,l5);feldaendern(o3,t3+10,u3)END IF.END PROCg5;PROCh5(SATZ VARl3):IFu3=g2THEN LEAVEh5END IF;INT VARt4;FORt4FROM1UPTOfelderzahl(l3)REPfeldlesen(l3,t4,v3);m5;n5END REP.m5:INT VARq0;BOOL VARo5:=FALSE;REPq0:=pos(v3,x3+u3);IFq0>0THENo5:=TRUE;replace(v3,q0+1,text(t3))END IF UNTILq0=0END REP.n5:IFo5THENfeldaendern(l3,t4,v3)END IF.END PROCh5;LETp5="Auswaehlen: PFEILE Ausfuehren: LEER Zurueck: ESC q Hilfe: ESC ?",q5="Eingabe beenden: RETURN Eingabe abbrechen: ESC h Hilfe: ESC ?",r5="Kommando wird ausgefuehrt ..",s5=""15"gib kommando: ",t5=""14"",u5=" existiert nicht.";TEXT VARv5,w5:=g2;PROCmenueanbieten(TEXT CONSTname,FENSTER VARf,BOOL CONSTx5,PROC(INT CONST)y5):d3;INT CONSTindex:=link(m4(2),name);IFindex=0THENz5(name)ELSEa6(s3(index),f,x5,PROC(INT CONST)y5)END IF
END PROCmenueanbieten;PROCa6(MENUE CONSTn4,FENSTER VARf,BOOL CONSTx5,PROC(INT CONST)y5):disablestop;INT VARwahl,b6:=1,c6:=0;fensterveraendert(f);REPd6;IFwahl>0THENy5(wahl)END IF;b6:=abs(wahl)UNTILwahl=0END REP;fensterveraendert(f).d6:INT VARe6:=0;f6;g6(f,c6);neuerdialog;statusanzeigen(p5);h6;REPi6;j6END REP.f6:wahl:=1;IFiserrorTHENfehlerausgeben;k6END IF.h6:IFc6>=code(n4.r3SUBb6)THENy2(code(n4.q3SUBb6),code(n4.r3SUBb6));out(b4)END IF.i6:REPl6;IFiserrorTHENclearerror;c6:=0ELSE LEAVEi6END IF END REP.l6:TEXT VARm6;WHILEc6<h0REPm6:=getcharety;n6END REP;o6;p6(m6).n6:IFm6=g2THENc6INCR1;y2(1,c6);q6(n4.l3,n4.o3,c6)ELSE LEAVEl6END IF.o6:y2(code(n4.q3SUBwahl),code(n4.r3SUBwahl)).j6:INT VARr6;SELECTe6OF CASE0:s6CASE1:t6CASE2:u6END SELECT.s6:SELECTpos(""1""2""3""8""9""10""13""27" ",m6)OF CASE1:e6:=1CASE2:v6CASE3:w6CASE4:x6CASE5:y6CASE6:z6CASE7:a7CASE8:e6:=2CASE9:b7OTHERWISEc7END SELECT.t6:SELECTpos(""1""2""3""8""10"",m6)OF CASE1:d7CASE2:e7CASE3:f7CASE4:g7CASE5:h7OTHERWISEout(y3)END SELECT;e6:=0.u6
:SELECTpos(""1""27"?kqh",m6)OF CASE1:eschopausfuehrenCASE2:i7CASE3:j7CASE4:k6CASE5,6:k7OTHERWISEl7END SELECT;e6:=0.v6:r6:=pos(n4.r3,n4.r3SUBwahl,wahl+1);IFr6>0THENwahl:=r6END IF.w6:r6:=m7(n4.q3,n4.q3SUBwahl,wahl-1);IFr6>0THENwahl:=r6END IF.x6:r6:=pos(n4.r3,n4.r3SUBwahl);IFr6<wahlTHENwahlDECR1END IF.y6:IFwahl<length(n4.r3)THENwahlINCR1END IF.z6:r6:=pos(n4.q3,n4.q3SUBwahl,wahl+1);IFr6>0THENwahl:=r6END IF.a7:r6:=m7(n4.r3,n4.r3SUBwahl);IFr6<length(n4.r3)THENwahl:=r6+1END IF.c7:IFn7THENo7ELIFm6<=" "THENpush(z3+m6)END IF.n7:r6:=0;REPr6:=pos(n4.p3,m6,r6+1)UNTIL(r6MOD2)=0END REP;r6>0.o7:wahl:=code(n4.p3SUBr6-1);o6;p7(n4,wahl,c6);LEAVEd6.d7:wahl:=1.e7:wahl:=m7(n4.r3,n4.r3SUBwahl).f7:wahl:=pos(n4.q3,n4.q3SUBwahl).g7:wahl:=pos(n4.r3,n4.r3SUBwahl).h7:wahl:=m7(n4.q3,n4.q3SUBwahl).l7:push(lernsequenzauftaste(m6)).i7:IFx5THENq7;REPy2(1,r7);s7;t7;u7UNTILv7END REP;statusanzeigen(p5)END IF.t7:IFc6>0THENy2(1,r7);q6(n4.l3,n4.o3,r7)END IF.q7:INT VARr7;IFc6<h0THENr7:=c6ELSEr7:=code(n4.r3SUBwahl)END IF.u7:IF
pos(v5,"!","�",1)>0THENstatusanzeigen(r5);dialog;do(v5);w7;g6(f,c6);neuerdialogEND IF.w7:INT VARz2,a3;getcursor(z2,a3);IFa3=24THENbildschirmneuEND IF.v7:NOTiserror.j7:TEXT VARx7;feldlesen(n4.m3,wahl,x7);hilfeanbieten(x7,f);IFiserrorTHENfehlerausgebenEND IF;g6(f,c6);statusanzeigen(p5).k6:wahl:=b6.k7:wahl:=0;LEAVEd6.b7:p7(n4,wahl,c6);LEAVEd6.END PROCa6;PROCg6(FENSTER CONSTf,INT VARc6):BOOL VARh1;fensterzugriff(f,h1);fenstergroesse(f,w2,x2,g0,h0);IFh1THENc6:=0;y2(1,1)END IF END PROCg6;PROCp6(TEXT VARy7):enablestop;getchar(y7)END PROCp6;PROCp7(MENUE CONSTn4,INT VARwahl,INT CONSTc6):IFz7THENout(c4)END IF;TEXT VARd5;feldlesen(n4.n3,wahl,d5);IFd5<>g2ANDd5<>h2THENdo(d5);wahl:=-wahlEND IF.z7:c6>=code(n4.r3SUBwahl).END PROCp7;INT PROCm7(TEXT CONSTa8,b8,INT CONSTc8):INT VARc5:=c8;WHILEc5>0CAND(a8SUBc5)<>b8REPc5DECR1END REP;c5END PROCm7;INT PROCm7(TEXT CONSTa8,b8):m7(a8,b8,length(a8))END PROCm7;PROCeschopausfuehren:TEXT VARd8:=g2,e8;lernsequenzauftastelegen(""0"",g2);push(""27""1""0""0"");editget(
d8,32000,0,""0"","",e8);d8:=lernsequenzauftaste(""0"");IFd8<>g2THENf8ELSEg8END IF.f8:REPgetchar(e8)UNTILpos(""1""2""8""11""12"",e8)=0END REP;lernsequenzauftastelegen(e8,d8).g8:getchar(e8).END PROCeschopausfuehren;INT VARh8,k5,i8;PROCq6(SATZ CONSTl3,o3,INT CONSTt4):h8:=1;IFt4<=felderzahl(l3)THENj8END IF;k8.j8:REPfeldbearbeiten(l3,t4,PROC(TEXT CONST,INT CONST,INT CONST)l8);IFi8>0THENm8END IF;h8:=k5+1UNTILi8=0END REP.m8:TEXT VARn8,o8;n1(i8,n8);feldlesen(o3,i8,o8);n8CATo8;p8;outsubtext(n8,1,q8);k5INCRq8.p8:INT VARq8:=length(o8);IFq8=0THEN IFn8=g2THENn8:=h2;q8:=1ELSEq8:=length(n8)END IF END IF;IFk5+q8>g0THENq8DECRg0-k5END IF.k8:IFw2+g0>=80THENout(a4)ELSEg0-h8TIMESOUTh2END IF.END PROCq6;PROCl8(TEXT CONSTm1,INT CONSTr8,s8):INT CONSTt8:=r8-1;h8INCRt8;k5:=pos(m1,x3,h8,s8+1);IFk5=0THENk5:=s8;i8:=0ELSEk5DECR1;i8:=int(m1SUBk5+2)END IF;IFk5>g0+t8THENk5:=g0+t8;i8:=0END IF;outsubtext(m1,h8,k5);k5DECRt8END PROCl8;PROCs7:LETu8=""27"k";TEXT VARv8;INT VARz2,a3;getcursor(z2,a3);IFiserrorTHENfehlerausgeben
;v5:=w5ELSEv5:=g2END IF;statusanzeigen(q5);w8;REPx8UNTILv8<>u8END REP;IFpos(v5,"!","�",1)>0THENw5:=v5END IF;cursor(z2,a3).w8:cursor(w2,a3);out(s5);g0-15TIMESOUTh2;out(t5).x8:cursor(w2+15,a3);editget(v5,32000,g0-17,"","kh",v8);IFiserrorTHENclearerrorELIFv8=u8THENv5:=w5ELIFv8=y8THENv5:=g2END IF.END PROCs7;PROCz5(TEXT CONSTz8):errorstop(textdarstellung(z8)+u5)END PROCz5;TYPE AUSWAHL=STRUCT(SATZa9,b9,c9,o3,TEXTd9,q3,e9);BOUND ROW200AUSWAHL VARf9;PROCh3:TEXT VARname:=t2;IFname=g2THENm2(j4)ELSE INT VARindex:=link(m4(3),name);IFindex=0THENinsert(m4(3),name,index)END IF;h3(f9(index))END IF END PROCh3;PROCh3(AUSWAHL VARa):o4;IFg9THENh9END IF;p4;r4.o4:satzinitialisieren(a.a9);satzinitialisieren(a.b9);satzinitialisieren(a.c9);satzinitialisieren(a.o3);a.d9:=g2;a.q3:=g2;a.e9:=g2.g9:f2;i2CANDo2(v1).h9:INT VARt4:=1;REPf2;IFi2THEN LEAVEh9ELSEi9;t4INCR1END IF END REP.i9:feldaendern(a.a9,t4,d2).p4:s4;t4:=1;BOOL VARj9:=TRUE;REPf2;IFi2THENk9;LEAVEp4ELSEu4;t4INCR1END IF END REP.s4:IF NOT(i2CANDo2(q1))THEN
m2(d4)END IF.k9:IFj9THENm2(k4)END IF.u4:IFj9THENl9ELSEm9END IF.l9:IFpos(d2,w3)>0THENn9;t4:=0;j9:=FALSE ELSEfeldaendern(a.b9,t4,d2)END IF.n9:o9;a.d9:=d2;p9.o9:INT VARv4:=0;REPv4:=pos(d2,w3,v4+1);IFv4>0THENa.q3CATcode(v4)END IF UNTILv4=0END REP.p9:FORv4FROM1UPTOlength(a.q3)-1REPa.e9CATcode(q9-4)END REP;a.e9CAT""0"".q9:code(a.q3SUBv4+1)-code(a.q3SUBv4).m9:feldaendern(a.c9,t4,d2).r4:IFo2(s1)THENe5END IF;IF NOTo2(t1)THENm2(f4)END IF.e5:f2;WHILE NOTi2REPf5;f2END REP.f5:g5(a.o3);h5(a.a9);h5(a.b9);h5(a.c9).END PROCh3;LETr9=""1""8""10"",s9="+"27"q",t9="Fenster zu klein",u9="Ankreuzen: 'x' Durchstreichen: 'o' Beenden: ESC q Hilfe: ESC ?";INT VARv9,w9,x9,y9,z9,a10,b10,c10;LET INTVEC=TEXT;INTVEC VARd10;TEXT VARe10;PROCauswahlanbieten(TEXT CONSTname,FENSTER CONSTf,TEXT CONSTf10,PROC(TEXT VAR,INT CONST)g10):d3;INT CONSTindex:=link(m4(3),name);IFindex=0THENz5(name)ELSEa6(f9(index),f,f10,PROC(TEXT VAR,INT CONST)g10)END IF END PROCauswahlanbieten;PROCa6(AUSWAHL CONSTa,FENSTER CONSTf,TEXT CONST
f10,PROC(TEXT VAR,INT CONST)g10):INT VARc6:=0,e6:=0;enablestop;h10;statusanzeigen(u9);i10;j10;k10;REPi6;l10END REP.h10:BOOL VARm10;fensterzugriff(f,m10);fenstergroesse(f,w2,x2,g0,h0).i10:INT VARn10:=1024;v9:=n10;REPn10:=n10DIV2;g10(d2,v9);IFd2=g2THENv9DECRn10ELSEv9INCRn10END IF UNTILn10=1END REP;g10(d2,v9);IFd2=g2THENv9DECR1END IF.k10:INT VARo10:=y9+1,p10:=1,q10:=1;d10:=g2;e10:=a.q3.j10:x9:=felderzahl(a.a9);y9:=x9+felderzahl(a.b9);w9:=length(a.q3);z9:=(v9+w9-1)DIVw9;a10:=y9+z9;b10:=a10+felderzahl(a.c9);c10:=0;IFy9>=h0THENerrorstop(t9)END IF.i6:REPl6;IFiserrorTHENclearerror;c6:=0ELSE LEAVEi6END IF END REP.l6:TEXT VARm6;WHILEc6<h0REPm6:=getcharety;n6END REP;o6;p6(m6).n6:IFm6=g2THENc6INCR1;r10ELSE LEAVEl6END IF.r10:INT CONSTs10:=c6+c10;y2(1,c6);IFc6<=x9THENq6(a.a9,a.o3,c6)ELIFs10<=y9THENq6(a.b9,a.o3,s10-x9)ELIFs10<=a10THENt10ELSEq6(a.c9,a.o3,s10-a10)END IF.t10:u10(a,v10,PROC(TEXT VAR,INT CONST)g10).v10:(s10-y9-1)*w9+1.o6:y2(code(e10SUBp10),o10).l10:SELECTe6OF CASE0:s6CASE1:t6CASE2:u6END
SELECT.s6:SELECTpos(""1""2""3""8""9""10""13""27" +x-o",m6)OF CASE1:e6:=1CASE2:v6CASE3:w6CASE4:x6CASE5:y6CASE6:z6CASE7:a7CASE8:e6:=2CASE9:w10CASE10,11:x10CASE12,13:y10OTHERWISEc7END SELECT.t6:SELECTpos(""1""2""3""8""10""13"+x-o",m6)OF CASE1:d7CASE2:e7CASE3:f7CASE4:g7CASE5:h7CASE6:z10CASE7,8:a11CASE9,10:b11OTHERWISEout(y3)END SELECT;e6:=0.u6:SELECTpos(""1"19?qh",m6)OF CASE1:eschopausfuehrenCASE2:c11CASE3:d11CASE4:j7CASE5:k7CASE6:errorstop(g2)OTHERWISEl7END SELECT;e6:=0.v6:IFp10<w9ANDq10<v9THENp10INCR1;q10INCR1END IF.w6:IFq10>w9THENo10DECR1;q10DECRw9;IFo10<=x9THENo10INCR1;c10DECR1;c6:=x9END IF END IF.x6:IFp10>1THENp10DECR1;q10DECR1END IF.y6:IFp10=w9THENpush(""13"")ELSEpush(""1""2"")END IF.z6:IFq10+w9<=v9THENo10INCR1;q10INCRw9;IFo10>h0THENo10DECR1;c10INCR1;c6:=x9END IF END IF.a7:IFo10+c10<a10THENpush(r9)END IF.w10:push(s9).x10:IFe11(q10)=0ANDq10<=v9THENd10CATq10;IFo10<=c6THENf11(o10,p10,length(d10)DIV2)END IF END IF.y10:INT CONSTg11:=e11(q10);IFg11>0THENh11;i11END IF.h11:change(d10,2*g11-1
,2*g11,g2).c7:IFm6<h2THENpush(lernsequenzauftaste(m6))ELSEout(y3)END IF.d7:g7;j11.e7:WHILEq10<v9ANDp10<w9REPq10INCR1;p10INCR1END REP.f7:IFo10=x9+1THENk11ELSEj11END IF.k11:INT VARl11:=min(h0-x9,c10);c10DECRl11;INT CONSTm11:=n11;o10INCRm11;q10DECR(l11-m11)*w9;IFl11>0THENc6:=x9END IF.n11:max(0,y9-x9-c10).j11:WHILEq10>w9ANDo10>x9+1REPo10DECR1;q10DECRw9END REP.g7:q10DECR(p10-1);p10:=1.h7:IFo10=h0THENo11ELSEp11END IF.o11:l11:=min(h0-x9,b10-o10-c10);c10INCRl11;INT CONSTq11:=max(0,o10+c10-a10+r11);o10DECRq11;q10INCR(l11-q11)*w9;IFl11>0THENc6:=x9END IF.r11:IFp10>v9MODw9THEN1ELSE0END IF.p11:WHILEo10<h0ANDq10+w9<=v9REPo10INCR1;q10INCRw9END REP.z10:c10INCR(o10-x9-1);o10:=x9+1;c6:=x9.a11:INT VARs11;FORs11FROM1UPTOv9REP IFe11(s11)=0THENd10CATs11END IF END REP;i11.b11:d10:=g2;i11.j7:hilfeanbieten(f10,f);statusanzeigen(u9);c6:=0.k7:LEAVEa6.l7:push(lernsequenzauftaste(m6)).c11:o10:=y9+1;q10:=1;p10:=1;c10:=0;c6:=x9.d11:IFa10<=h0THENo10:=a10ELSEo10:=max(x9+1,h0+a10-b10)END IF;c10:=a10-o10;p10:=(v9-1)MOD
w9+1;q10:=v9;c6:=x9.END PROCa6;PROCi11:INT VARy7,t11,s11;s11:=u11;FORy7FROMv11UPTOw11REP FORt11FROM1UPTOw9REPf11(y7,t11,e11(s11));s11INCR1END REP END REP.u11:max(0,c10-y9+x9)*w9+1.v11:max(x9,y9-c10)+1.w11:min(h0,a10-c10).END PROCi11;TEXT VARx11:="xx";INT PROCe11(INT CONSTy11):replace(x11,1,y11);INT VARc5:=0;REPc5:=pos(d10,x11,c5+1)UNTILc5=0ORc5MOD2=1END REP;(c5+1)DIV2END PROCe11;OP CAT(INTVEC VARz11,INT CONSTwert):replace(x11,1,wert);z11CATx11END OP CAT;PROCu10(AUSWAHL CONSTa,INT CONSTv10,PROC(TEXT VAR,INT CONST)g10):INT VARc5:=1,y11,t11:=1;FORy11FROMv10UPTOv10+w9-1REPoutsubtext(a.d9,c5,a12-5);b12;g10(d2,y11);INT CONSTc12:=min(d12,length(d2));outsubtext(d2,1,c12);c5:=a12+c12+2;t11INCR1END REP;k8.a12:code(e10SUBt11).b12:INT CONSTe12:=e11(y11);IFe12=0THENout(" o ")ELSEout(text(e12,3));out(" x ")END IF.d12:IFt11=w9THENg0-a12-1ELSEcode(a.e9SUBt11)END IF.k8:outsubtext(a.d9,c5,g0);IFw2+g0>=80THENout(a4)ELSEg0-max(c5,length(a.d9))TIMESOUTh2END IF.END PROCu10;PROCf11(INT CONSTd2,f12,wert):
y2(code(e10SUBf12)-4,d2);IFwert=0THENout(" o ")ELSEout(text(wert,3));out(" x ")END IF END PROCf11;INT PROCwahl(INT CONSTq0):IFq0+q0<=length(d10)THENd10ISUBq0ELSE0END IF END PROCwahl;LETg12=200,h12=5000;LET HILFE=STRUCT(INTi12,ROWg12THESAURUSj12,ROWg12SATZk12,ROWh12SATZl12);BOUND HILFE VARm12;INT VARn12,o12,p12,q12;LETr12="Das Hilfsgebiet existiert bereits",s12="Diese Seite ist in der anderen Hilfe nicht vorhanden";PROCi3:TEXT VARname:=t2;IFname=g2THENm2(j4)ELSEt12;u12;v12END IF.t12:INT CONSTw12:=pos(name,"/");TEXT VARx12;IFw12=0THENx12:=nameELSEx12:=subtext(name,1,w12-1)END IF;y12;z12.y12:INT VARa13:=link(m4(1),x12);IFa13=0THENinsert(m4(1),x12,a13);m12.j12(a13):=emptythesaurus;satzinitialisieren(m12.k12(a13))ELIFw12=0THENm2(r12);LEAVEi3END IF.z12:INT VARb13;TEXT VARc13:=subtext(name,w12+1);IFw12=0THENb13:=1ELSEb13:=link(m12.j12(a13),c13);IFb13=0THENinsert(m12.j12(a13),c13,b13)END IF END IF.u12:INT VARd13:=m12.i12;IFd13<0THENd13:=0END IF;TEXT VARe13:=g2;f2;WHILEi2CANDo2(x1)REPf13END
REP.f13:INT CONSTg13:=q2;TEXT CONSTh13:=t2;IFh13<>g2THENi13;f2ELSEj13END IF.i13:TEXT VARk13;l13(h13,k13);IFg13+g13<=length(k13)THENe13CAT(k13ISUBg13)ELSEm2(s12)END IF.j13:INT VARt4:=1;d13INCR1;e13CATd13;satzinitialisieren(m12.l12(d13));REPf2;IFi2THEN LEAVEj13ELSEfeldaendern(m12.l12(d13),t4,d2);t4INCR1END IF END REP.v12:IF NOTo2(t1)THENm2(f4)END IF;IF NOTanythingnotedTHENfeldaendern(m12.k12(a13),b13,e13);m12.i12:=d13END IF.END PROCi3;PROCl13(TEXT CONSTname,TEXT VARe13):INT CONSTw12:=pos(name,"/");INT VARx12,b13:=0;IFw12=0THENx12:=link(m4(1),name)ELSEx12:=link(m4(1),subtext(name,1,w12-1));m13END IF;IFb13=0THENb13:=1END IF;IFx12=0THENerrorstop(n13)ELSEfeldlesen(m12.k12(x12),b13,e13)END IF.m13:IFx12>0THENb13:=link(m12.j12(x12),subtext(name,w12+1))END IF.END PROCl13;LETn13="Hilfe existiert nicht",o13="Hilfe ist leer",p13="Zurueck: ESC q Seite weiter: ESC w Seite zurueck: ESC z";PROChilfeanbieten(TEXT CONSTname,FENSTER CONSTf):enablestop;d3;TEXT VARe13;q13;l13(name,e13);IFe13=g2
THENerrorstop(o13)ELSEr13END IF.q13:fensterveraendert(f);fenstergroesse(f,n12,o12,p12,q12).r13:s13;statusanzeigen(p13);INT VARk12:=1;REPt13;u13END REP.t13:INT CONSTv13:=e13ISUBk12;w13(m12.l12(v13)).u13:TEXT VARm6;REPgetchar(m6);IFm6=z3THENgetchar(m6);u7;LEAVEu13ELSEout(y3)END IF END REP.u7:SELECTpos("qwz?"1"",m6)OF CASE1:LEAVEhilfeanbietenCASE2:x13CASE3:y13CASE4:z13CASE5:eschopausfuehrenOTHERWISEout(y3)END SELECT.x13:IF2*k12<length(e13)THENk12INCR1END IF.y13:IFk12>1THENk12DECR1END IF.z13:k12:=1.END PROChilfeanbieten;PROCw13(SATZ CONSTa14):INT VARt4;FORt4FROM1UPTOq12REPcursor(n12,o12+t4-1);feldbearbeiten(a14,t4,PROC(TEXT CONST,INT CONST,INT CONST)b14)END REP;cursor(n12,o12+q12-1)END PROCw13;PROCb14(TEXT CONSTl3,INT CONSTr8,s8):IFs8-r8+1>p12THENk5:=r8+p12-1ELSEk5:=s8END IF;outsubtext(l3,r8,k5);IFn12+p12>=80THENout(a4)ELSEp12+r8-k5-1TIMESOUTh2END IF END PROCb14;TEXT VARc14:=g2,d14;PROCstatuszeile(TEXT CONSTe14,f14):c14:=e14;d14:=f14END PROCstatuszeile;PROCstatusanzeigen(TEXT CONSTstatus):
IFc14<>g2THENout(c14);out(status);out(d14)END IF END PROCstatusanzeigen;LETg14=""4"",h14=""27"?",i14=""27"q",y8=""27"h",j14="Bejahen: j,J Verneinen: n,N Abbrechen: ESC h Hilfe: ESC ?",k14="Eingabe beenden: RETURN Abbrechen: ESC h Hilfe: ESC ?",l14="Eingabe beenden: RETURN Zeigen: ESC z Abbrechen: ESC h Hilfe: ESC ?",m14=" Fehler quittieren ESC q Informationen zur Fehlermeldung: ESC ?",n14=""15" !!! FEHLER !!! "14"";FENSTER VARo14;fensterinitialisieren(o14);INT VARp14,q14,r14,s14,t14;TEXT VARu14;PROCdialogfenster(INT CONSTz2,a3,v14,w14):fenstergroessesetzen(o14,z2,a3,v14,w14);q14:=z2;r14:=a3;s14:=v14;t14:=w14;u14:=g2END PROCdialogfenster;PROCneuerdialog:p14:=t14END PROCneuerdialog;PROCneuerdialog(TEXT CONSTx14):p14:=t14;u14:=x14END PROCneuerdialog;PROCdialog:BOOL VARh1;fensterzugriff(o14,h1);p14INCR1;IFp14>t14ORh1THENy14;p14:=1END IF;cursor(q14,r14+p14-1).y14:BOOL CONSTz14:=q14+s14>=80;IFz14ANDr14+t14>24ANDq14=1THENcursor(q14,r14);out(g14)ELSEa15END IF;out(
u14).a15:p14:=0;REPcursor(q14,r14+p14);IFz14THENout(a4)ELSEs14TIMESOUTh2END IF;p14INCR1UNTILp14>=t14END REP.END PROCdialog;BOOL PROCja(TEXT CONSTb15,f10):REPstatusanzeigen(j14);dialog;out(b15);out(" ? (j/n) ");s13;c15END REP;FALSE.c15:TEXT VARm6;REPgetchar(m6);IFm6="j"ORm6="J"THENout(m6);LEAVEjaWITH TRUE ELIFm6="n"ORm6="N"THENout(m6);LEAVEjaWITH FALSE ELIFm6=z3THENd15ELSEout(y3)END IF END REP.d15:getchar(m6);IFm6="?"THENhilfeanbieten(f10,o14);neuerdialog;LEAVEc15ELIFm6="h"THENerrorstop(g2);LEAVEjaWITH FALSE ELIFm6=""1""THENeschopausfuehrenELSEout(y3)END IF.END PROCja;PROCeditget(TEXT CONSTe15,TEXT VARm6,TEXT CONSTf15,f10):TEXT VARv8;g15;dialog;out(e15);out(h2);editget(m6,1000,h15,"","?hq"+f15,v8);IFv8=h14THENhilfeanbieten(f10,o14);neuerdialog;editget(e15,m6,"",f10)ELIFv8=y8ORv8=i14THENerrorstop(g2)ELIFlength(v8)=2THENm6:=v8END IF.g15:IFpos(f15,"z")>0THENstatusanzeigen(l14)ELSEstatusanzeigen(k14)END IF.h15:s14-length(e15)-1.END PROCeditget;PROCfehlerausgeben:TEXT CONSTv2:=errormessage;
IFerrorcode=1THENpage;bildschirmneuEND IF;clearerror;s13;IFv2<>g2THENstatusanzeigen(m14);i15;j15;neuerdialogEND IF.i15:dialog;IFp14=t14THENneuerdialog;dialogEND IF;out(y3);out(n14);dialog;outsubtext(errormessage,1,s14).j15:TEXT VARm6;getchar(m6);IFm6=z3THENd15END IF.d15:getchar(m6);IFm6="?"THENhilfeanbieten("FEHLER/"+text(errorcode),o14)ELIFm6=""1""THENeschopausfuehrenEND IF.END PROCfehlerausgeben;PROCs13:WHILEgetcharety<>g2REP END REP END PROCs13;LETk15=3,l15=1070,m15=0,n15=2;ROWk15DATASPACE VARk3;ROWk15THESAURUS VARm4;BOOL VARo15:=FALSE;INITFLAG VARp15;PROCd3:IF NOTinitialized(p15)THENq15END IF.q15:BOOL VARv7:=o15;r15;IFv7THENs15ELSEmenueloeschenEND IF.r15:INT VARl1;FORl1FROM1UPTOk15WHILEv7REPt15END REP.t15:
##INT VARu15,v15;FORv15FROM1UPTO10REPforget(k3(l1));k3(l1):=nilspace;pingpong(father,l15+l1,k3(l1),u15);IFu15=m15THEN LEAVEt15ELIFu15<>n15THENpause(15)END IF UNTILu15=n15END REP;forget(k3(l1));k3(l1):=nilspace;
##v7:=FALSE.END PROCd3;THESAURUS PROCmenuenamen(INT CONSTl1):d3;IFl1<0THENm12.j12(-l1)ELSEm4(l1)END IF END PROCmenuenamen;PROCmenueloeschen(TEXT CONSTname,INT CONSTl1):d3;IFl1<0THENw15(name,m12.j12(-l1))ELSEw15(name,m4(l1))END IF END PROCmenueloeschen;PROCw15(TEXT CONSTname,THESAURUS VARm1):INT CONSTindex:=link(m1,name);IFindex>0THENdelete(m1,index)END IF END PROCw15;PROCmenueloeschen:INT VARl1;FORl1FROM1UPTOk15REPforget(k3(l1));k3(l1):=nilspace;m4(l1):=emptythesaurusEND REP;s15END PROCmenueloeschen;PROCs15:m12:=k3(1);s3:=k3(2);f9:=k3(3)END PROCs15;
##PROCmenuemanager(DATASPACE VARx15,INT CONSTy15,z15,TASK CONSTa16):o15:=TRUE;IFy15>l15ANDy15<=l15+k15THENb16ELSEfreemanager(x15,y15,z15,a16)END IF.b16:IFa16<myselfTHENd3;forget(x15);x15:=k3(y15-l15);send(a16,m15,x15)ELSEerrorstop("Auftrag nur fuer Soehne erlaubt")END IF.END PROCmenuemanager;PROCglobalmanager:globalmanager(PROC(DATASPACE VAR,INT CONST,INT CONST,TASK CONST)menuemanager)END PROCglobalmanager;
##END PACKETeudasmenues;
|