app/eudas/5.3/src/eudas.1

Raw file
Back to index

PACKETeudasdateienDEFINES EUDAT,oeffne,satznr,dateiende,saetze,aufsatz,weiter,zurueck,satzlesen,satzaendern,satzloeschen,satzeinfuegen,feldlesen,feldaendern,feldbearbeiten,felderzahl,feldnamenlesen,feldnamenaendern,notizenlesen,notizenaendern,feldinfo,automatischerschluessel,dezimalkomma,wertberechnen,reorganisiere,sortiere,sortierreihenfolge,unsortiertesaetze:LETb0=531,c0=121,d0=5000,e0=3243,f0=64,g0=48;LET INTVEC=TEXT,INDEX=STRUCT(INTh0,i0,INTj0,k0,INTVECl0),EINTRAG=STRUCT(INTh0,i0,m0,n0,SATZo0),DATEI=STRUCT(INTfelderzahl,SATZp0,INTVECfeldinfo,TEXTq0,INTr0,s0,t0,INTu0,v0,INTw0,satznr,INTx0,y0,z0,INTa1,b1,ROW3TEXTc1,ROWb0INTd1,ROWc0INDEXindex,ROWd0EINTRAGe1);TYPE EUDAT=BOUND DATEI;LETf1="";LETg1=
#201#"Datei ist keine EUDAS-Datei",h1=
#202#"inkonsistente EUDAS-Datei",i1=
#203#"EUDAS-Datei voll",j1=
#204#"Nicht erlaubtes Dezimalkomma";
TEXT VARk1;TEXT VARl1:="  ";INTVEC CONSTm1:=n1(f0,1);LETo1="";TEXT VARp1;INTVEC PROCn1(INT CONSTlength,q1):replace(l1,1,q1);length*l1END PROCn1;PROCinsert(INTVEC VARr1,INT CONSTpos,q1):INT CONSTbegin:=pos+pos-1;IFbegin<1THENs1ELIFbegin>length(r1)+1THENt1ELSEreplace(l1,1,q1);p1:=subtext(r1,begin);r1:=subtext(r1,1,begin-1);r1CATl1;r1CATp1END IF END PROCinsert;PROCdelete(INTVEC VARr1,INT CONSTpos):INT CONSTbegin:=pos+pos-1;IFbegin<1THENs1ELIFbegin>=length(r1)THENt1ELSEp1:=subtext(r1,begin+2);r1:=subtext(r1,1,begin-1);r1CATp1END IF END PROCdelete;INT PROCpos(INTVEC CONSTr1,INT CONSTq1):replace(l1,1,q1);INT VARbegin:=1;REPbegin:=pos(r1,l1,begin)+1UNTIL(beginAND1)=0ORbegin=1END REP;beginDIV2END PROCpos;PROCu1(INTVEC VARv1,w1,INT CONSTpos):INT CONSTbegin:=pos+pos-1;IFbegin<1THENs1ELIFbegin>length(v1)+1THENt1ELSEw1:=subtext(v1,begin);v1:=subtext(v1,1,begin-1)END IF END PROCu1;PROCx1(INTVEC VARv1,w1,INT CONSTpos):INT CONSTbegin:=pos+pos-1;IFbegin<1THENs1ELIFbegin>length(v1)+1THENt1ELSEw1:=
subtext(v1,1,begin-1);v1:=subtext(v1,begin)END IF END PROCx1;.t1:errorstop(9,f1).s1:errorstop(10,f1).PROCy1(DATEI VARz1):z1.felderzahl:=0;z1.feldinfo:=o1;satzinitialisieren(z1.p0);z1.q0:=f1;z1.r0:=1;z1.s0:=1;z1.u0:=0;z1.t0:=0;z1.w0:=0;z1.v0:=1;z1.a1:=0;z1.c1(1):=f1;z1.c1(2):=f1;z1.c1(3):=f1;z1.satznr:=1;z1.x0:=1;z1.y0:=1;z1.z0:=1;z1.index(1).l0:=m1;z1.index(1):=INDEX:(0,0,1,1,n1(1,1));INT VARa2;FORa2FROM1UPTOb0REPz1.d1(a2):=0END REP;z1.e1(1):=EINTRAG:(0,0,1,0,b2).b2:z1.p0.END PROCy1;PROCoeffne(EUDAT VARz1,TEXT CONSTc2):enablestop;IF NOTexists(c2)THEN CONCR(z1):=new(c2);y1(CONCR(z1));type(old(c2),e0)ELIFtype(old(c2))=e0THEN CONCR(z1):=old(c2)ELSEerrorstop(g1)ENDIF END PROCoeffne;PROCoeffne(EUDAT VARz1,DATASPACE CONSTd2):IFtype(d2)<0THEN CONCR(z1):=d2;y1(CONCR(z1));type(d2,e0)ELIFtype(d2)=e0THEN CONCR(z1):=d2ELSEerrorstop(g1)END IF END PROCoeffne;PROCfeldlesen(EUDAT CONSTz1,INT CONSTe2,TEXT VARf2):feldlesen(g2,e2,f2).g2:z1.e1(z1.z0).o0.END PROCfeldlesen;PROCfeldaendern(EUDAT VARz1,INT 
CONSTe2,TEXT CONSTh2):IFi2THENj2(CONCR(z1));k2;feldaendern(g2,e2,h2)END IF.i2:z1.z0<>1.k2:IFe2=1THENdisablestop;l2(CONCR(z1),m2(h2))END IF.g2:z1.e1(z1.z0).o0.END PROCfeldaendern;INT PROCfelderzahl(EUDAT CONSTz1):z1.felderzahlEND PROCfelderzahl;PROCfeldbearbeiten(EUDAT CONSTz1,INT CONSTe2,PROC(TEXT CONST,INT CONST,INT CONST)n2):feldbearbeiten(g2,e2,PROC(TEXT CONST,INT CONST,INT CONST)n2).g2:z1.e1(z1.z0).o0.END PROCfeldbearbeiten;PROCfeldnamenlesen(EUDAT CONSTz1,SATZ VARo2):o2:=z1.p0END PROCfeldnamenlesen;PROCfeldnamenaendern(EUDAT VARz1,SATZ CONSTp2):z1.p0:=p2;INT CONSTq2:=felderzahl(p2);IFq2>z1.felderzahlTHENr2;z1.felderzahl:=q2END IF.r2:z1.feldinfoCATn1(s2,-1).s2:q2-length(z1.feldinfo)DIV2.END PROCfeldnamenaendern;INT PROCfeldinfo(EUDAT CONSTz1,INT CONSTe2):z1.feldinfoISUBe2END PROCfeldinfo;PROCfeldinfo(EUDAT VARz1,INT CONSTe2,t2):replace(z1.feldinfo,e2,t2);IFpos(z1.q0,code(e2))>0THENz1.a1:=z1.w0END IF END PROCfeldinfo;INT PROCsatznr(EUDAT CONSTz1):z1.satznrEND PROCsatznr;BOOL PROC
dateiende(EUDAT CONSTz1):z1.satznr>z1.w0END PROCdateiende;INT PROCsaetze(EUDAT CONSTz1):z1.w0END PROCsaetze;PROCu2(DATEI VARz1,INT CONSTx0,k0,satznr):IFx0<1ORx0>z1.s0CORk0<1ORk0>z1.index(x0).j0THENerrorstop(h1)END IF;disablestop;z1.x0:=x0;z1.y0:=k0;z1.satznr:=satznr;z1.z0:=z1.index(x0).l0ISUBk0END PROCu2;PROCaufsatz(EUDAT VARz1,INT CONSTv2):INT VARsatznr;IFv2<1THENsatznr:=1ELIFv2>z1.w0THENsatznr:=z1.w0+1ELSEsatznr:=v2END IF;w2(CONCR(z1),satznr)END PROCaufsatz;PROCaufsatz(EUDAT VARz1,TEXT CONSTx2):aufsatz(z1,1);IFy2THENweiter(z1,x2)END IF.y2:feldlesen(z1,1,k1);k1<>x2.END PROCaufsatz;PROCw2(DATEI VARz1,INT CONSTsatznr):IFz2THENu2(z1,1,1,1)END IF;INT VARx0:=z1.x0,a3:=z1.satznr-z1.y0;IFsatznr>z1.satznrTHENb3ELSEc3END IF;u2(z1,x0,k0,satznr).z2:satznr+satznr<z1.satznr.b3:WHILEd3REPa3INCRj0;x0:=z1.index(x0).i0END REP.d3:INT CONSTj0:=z1.index(x0).j0;a3+j0<satznr.c3:WHILEe3REPx0:=z1.index(x0).h0;a3DECRz1.index(x0).j0END REP.e3:a3>=satznr.k0:satznr-a3.END PROCw2;PROCweiter(EUDAT VARz1):f3(CONCR(
z1))END PROCweiter;PROCf3(DATEI VARz1):IFg3THENh3END IF.g3:z1.z0<>1.h3:INT VARx0:=z1.x0,k0:=z1.y0;IFk0=index.j0THENx0:=index.i0;k0:=1ELSEk0INCR1END IF;u2(z1,x0,k0,z1.satznr+1).index:z1.index(x0).END PROCf3;PROCzurueck(EUDAT VARz1):i3(CONCR(z1))END PROCzurueck;PROCi3(DATEI VARz1):IFj3THENk3END IF.j3:z1.satznr<>1.k3:INT VARx0:=z1.x0,k0:=z1.y0;IFk0=1THENx0:=m0.h0;k0:=m0.j0ELSEk0DECR1END IF;u2(z1,x0,k0,z1.satznr-1).m0:z1.index(x0).END PROCi3;PROCweiter(EUDAT VARz1,TEXT CONSTx2):f3(CONCR(z1),x2)END PROCweiter;PROCf3(DATEI VARz1,TEXT CONSTx2):l3;WHILEm3CANDn3REPo3END REP;IFm3THENp3(z1,k0)ELSEw2(z1,z1.w0+1)END IF.l3:INT VARdummy,k0:=z1.z0;IFn3THENq3(z1,m2(x2),k0,dummy)ELSEo3END IF.m3:k0<>0.n3:feldlesen(g2,1,k1);k1<>x2.g2:z1.e1(k0).o0.o3:k0:=z1.e1(k0).i0.END PROCf3;PROCzurueck(EUDAT VARz1,TEXT CONSTx2):i3(CONCR(z1),x2)END PROCzurueck;PROCi3(DATEI VARz1,TEXT CONSTx2):l3;WHILEm3CANDn3REPr3END REP;IFm3THENp3(z1,k0)ELSEw2(z1,1)END IF.l3:INT VARk0:=z1.z0,dummy;IFk0=1ORs3THENq3(z1,m2(x2),dummy,k0)
END IF.m3:k0<>0.n3:k0=z1.z0ORs3.s3:feldlesen(g2,1,k1);k1<>x2.g2:z1.e1(k0).o0.r3:k0:=z1.e1(k0).h0.END PROCi3;PROCp3(DATEI VARz1,INT CONSTk0):INT CONSTt3:=z1.e1(k0).m0;INT VARy0:=1,satznr:=0;WHILEy0<>t3REPsatznrINCRz1.index(y0).j0;y0:=z1.index(y0).i0END REP;y0:=pos(z1.index(t3).l0,k0);satznrINCRy0;u2(z1,t3,y0,satznr).END PROCp3;INT VARindex;PROCu3(TEXT CONSTv3,INT CONSTw3,x3):INT VARy3:=w3;index:=0;IFx3-w3<4THENz3ELSEa4END IF;index:=indexMODb0+1.z3:WHILEy3<=x3REPindex:=index*4;indexINCRcode(v3SUBy3);y3INCR1END REP.a4:WHILEy3<=x3REPindexINCRindex;indexINCRcode(v3SUBy3);IFindex>16000THENindex:=indexMODb0END IF;y3INCR1END REP.END PROCu3;INT PROCm2(TEXT CONSTv3):u3(v3,1,length(v3));indexEND PROCm2;INT PROCm2(SATZ CONSTo0):feldbearbeiten(o0,1,PROC(TEXT CONST,INT CONST,INT CONST)u3);indexEND PROCm2;PROCq3(DATEI CONSTz1,INT CONSTm2,INT VARk0,b4):INT VARx0:=z1.r0;b4:=z1.d1(m2);k0:=0;BOOL VARc4:=TRUE;WHILEc4ANDb4<>0REPd4;o3END REP.d4:IFe4THENf4ELSEg4END IF.e4:z1.e1(b4).m0=z1.x0.f4:x0:=z1.x0;INT 
CONSTh4:=pos(l0,b4);IFh4=0THENerrorstop(h1)ELIFh4<=i4THENc4:=FALSE END IF.l0:z1.index(x0).l0.i4:z1.y0.g4:WHILEx0<>z1.e1(b4).m0REP IFx0=z1.x0THENc4:=FALSE;LEAVEd4ELSEx0:=z1.index(x0).h0END IF END REP.o3:IFc4THENk0:=b4;b4:=z1.e1(k0).h0END IF.END PROCq3;PROCj4(DATEI VARz1,INT CONSTm2):disablestop;INT CONSTk0:=z1.z0,h0:=z1.e1(k0).h0,i0:=z1.e1(k0).i0;IFi0<>0THENz1.e1(i0).h0:=h0ELSEz1.d1(m2):=h0END IF;IFh0<>0THENz1.e1(h0).i0:=i0END IF.END PROCj4;PROCk4(DATEI VARz1,INT CONSTm2,i0,h0):disablestop;INT CONSTk0:=z1.z0;z1.e1(k0).h0:=h0;z1.e1(k0).i0:=i0;IFh0<>0THENz1.e1(h0).i0:=k0END IF;IFi0<>0THENz1.e1(i0).h0:=k0ELSEz1.d1(m2):=k0END IF END PROCk4;PROCsatzlesen(EUDAT CONSTz1,SATZ VARo0):o0:=z1.e1(z1.z0).o0END PROCsatzlesen;PROCsatzaendern(EUDAT VARz1,SATZ CONSTl4):IF NOTdateiende(z1)THENm4END IF.m4:j2(CONCR(z1));disablestop;l2(CONCR(z1),m2(l4));g2:=l4.g2:z1.e1(z1.z0).o0.END PROCsatzaendern;PROCl2(DATEI VARz1,INT CONSTn4):IFo4THENp4END IF.o4:INT CONSTq4:=m2(g2);q4<>n4.p4:r4;s4.r4:j4(z1,q4).s4:INT 
VARh0,i0;q3(z1,n4,h0,i0);k4(z1,n4,h0,i0).g2:z1.e1(z1.z0).o0.END PROCl2;PROCsatzloeschen(EUDAT VARz1):IF NOTdateiende(z1)THENt4END IF.t4:disablestop;u4(CONCR(z1));v4(CONCR(z1));z1.w0DECR1.END PROCsatzloeschen;PROCu4(DATEI VARz1):w4(z1);INT CONSTk0:=z1.z0;j4(z1,m2(g2));z1.e1(k0).i0:=z1.u0;z1.u0:=k0.g2:z1.e1(k0).o0.END PROCu4;PROCsatzeinfuegen(EUDAT VARz1,SATZ CONSTl4):x4(CONCR(z1),l4)END PROCsatzeinfuegen;PROCx4(DATEI VARz1,SATZ CONSTl4):INT VARk0,h0,i0;enablestop;y4;z4;disablestop;z1.w0INCR1;a5(z1,k0);INT CONSTb5:=m2(k1);q3(z1,b5,i0,h0);k4(z1,b5,i0,h0);j2(z1).y4:IFz1.u0<>0THENk0:=z1.u0;z1.u0:=z1.e1(k0).i0ELIFz1.v0=d0THENerrorstop(i1)ELSEz1.v0INCR1;k0:=z1.v0END IF;z1.e1(k0).n0:=0;z1.e1(k0).o0:=l4.z4:feldlesen(l4,1,k1);IFz1.b1>0THEN IFk1=""THENc5;feldaendern(z1.e1(k0).o0,1,k1)END IF END IF.c5:k1:=text(z1.b1);k1:=d5+k1;IFz1.b1>32000THENz1.b1:=1ELSEz1.b1INCR1END IF.d5:(4-length(k1))*"0".END PROCx4;PROCautomatischerschluessel(EUDAT VARe5,BOOL CONSTf5):IFf5ANDe5.b1<0OR NOTf5ANDe5.b1>0THENe5.
b1:=-e5.b1END IF END PROCautomatischerschluessel;BOOL PROCautomatischerschluessel(EUDAT CONSTe5):e5.b1>0END PROCautomatischerschluessel;INTVEC VARg5;PROCv4(DATEI VARz1):INT CONSTx0:=z1.x0,h0:=index.h0,i0:=index.i0;BOOL VARh5;delete(index.l0,z1.y0);index.j0DECR1;i5(z1,x0,i0,h5);IF NOTh5THENi5(z1,h0,x0,h5)END IF;j5(z1).index:z1.index(x0).END PROCv4;PROCi5(DATEI VARz1,INT CONSTy3,k5,BOOL VARh5):h5:=FALSE;IFy3<>0ANDk5<>0THENl5END IF.l5:INT CONSTm5:=index.j0,n5:=o5.j0;IFp5THENq5;h5:=TRUE END IF.p5:m5+n5<=g0ORm5=0ORn5=0.q5:index.j0INCRo5.j0;r5(z1,o5.l0,y3);index.l0CATo5.l0;s5.s5:index.i0:=o5.i0;IFindex.i0<>0THENz1.index(index.i0).h0:=y3ELSEz1.r0:=y3END IF;o5.i0:=z1.t0;z1.t0:=k5.index:z1.index(y3).o5:z1.index(k5).END PROCi5;PROCj5(DATEI VARz1):INT CONSTg2:=z1.satznr;u2(z1,1,1,1);w2(z1,g2)END PROCj5;PROCr5(DATEI VARz1,INTVEC CONSTl0,INT CONSTy3):INT VARa2;FORa2FROM1UPTOlength(l0)DIV2REPz1.e1(l0ISUBa2).m0:=y3END REP END PROCr5;PROCa5(DATEI VARz1,INT CONSTt5):INT VARx0:=z1.x0;IFindex.j0>=f0THEN
u5END IF;index.j0INCR1;insert(index.l0,z1.y0,t5);z1.z0:=t5;z1.e1(t5).m0:=x0.u5:INT VARb5:=0;v5;IFb5<>0THENw5ELSEx5(z1)END IF;j5(z1);x0:=z1.x0.v5:IFz1.t0<>0THENb5:=z1.t0;z1.t0:=o5.i0ELIFz1.s0<c0THENz1.s0INCR1;b5:=z1.s0;o5.l0:=m1END IF.w5:y5;z5;o5.j0:=index.j0-a6;u1(index.l0,o5.l0,a6+1);index.j0:=a6;r5(z1,o5.l0,b5).y5:INT CONSTb6:=index.i0;IFb6<>0THENz1.index(b6).h0:=b5ELSEz1.r0:=b5END IF;o5.i0:=b6;o5.h0:=x0;index.i0:=b5.z5:INT VARa6;IFc6THENa6:=g0ELSEa6:=index.j0DIV2+1END IF.c6:b6=0.index:z1.index(x0).o5:z1.index(b5).END PROCa5;PROCx5(DATEI VARz1):INT VARx0:=1;REPd6;e6END REP.d6:BOOL VARh5;REP INT CONSTi0:=index.i0;i5(z1,x0,i0,h5)UNTIL NOTh5END REP;IFi0=0THEN LEAVEx5ELIFf6THENg6END IF.f6:INT CONSTh6:=g0-index.j0;h6>0.g6:x1(o5.l0,g5,h6+1);o5.j0DECRh6;r5(z1,g5,x0);index.l0CATg5;index.j0:=g0.e6:x0:=i0.index:z1.index(x0).o5:z1.index(i0).END PROCx5;TEXT VARi6:=",";LETj6=1;TEXT PROCdezimalkomma:i6END PROCdezimalkomma;PROCdezimalkomma(TEXT CONSTk6):IFlength(k6)<>1THENerrorstop(j1)ELSEi6:=k6
ENDIF END PROCdezimalkomma;INT PROCunsortiertesaetze(EUDAT CONSTz1):z1.a1END PROCunsortiertesaetze;TEXT PROCsortierreihenfolge(EUDAT CONSTz1):z1.q0END PROCsortierreihenfolge;PROCj2(DATEI VARz1):IFl6(z1)THENdisablestop;z1.e1(z1.z0).n0INCRj6;z1.a1INCR1END IF END PROCj2;PROCw4(DATEI VARz1):IF NOTl6(z1)THENdisablestop;z1.e1(z1.z0).n0DECRj6;z1.a1DECR1END IF END PROCw4;BOOL PROCl6(DATEI CONSTz1,INT CONSTk0):(z1.e1(k0).n0ANDj6)=0END PROCl6;BOOL PROCl6(DATEI CONSTz1):l6(z1,z1.z0)END PROCl6;INTVEC VARm6;TEXT VARq0;TEXT VARn6,o6;PROCsortiere(EUDAT VARz1):q0:=z1.q0;IFq0=f1THENp6END IF;q6(CONCR(z1)).p6:INT VARa2;FORa2FROM1UPTOz1.felderzahlREPq0CATcode(a2)END REP.END PROCsortiere;PROCsortiere(EUDAT VARz1,TEXT CONSTr6):q0:=r6;q6(CONCR(z1))END PROCsortiere;PROCq6(DATEI VARz1):IFz1.q0<>q0THENz1.q0:=q0;z1.a1:=z1.w0+1ELIFz1.a1=0THEN LEAVEq6END IF;m6:=z1.feldinfo;IFs6THENt6(z1);z1.a1:=0ELSEu6(z1)END IF;w2(z1,1).s6:z1.w0DIVz1.a1<3.END PROCq6;PROCt6(DATEI VARz1):INT VARz0,o0:=1,v6;w2(z1,1);w4(z1);z0:=z1.z0
;WHILEw6REPx6;y6;cout(o0)END REP;disablestop;x5(z1);u2(z1,1,1,1).w6:o0<z1.w0.x6:o0INCR1;w2(z1,o0);v6:=z0;z0:=z1.z0.y6:IFz6THENa7(z1,o0,z0);z0:=v6ELSEw4(z1)END IF.z6:z1.e1(v6).o0GROESSERz1.e1(z0).o0.END PROCt6;PROCu6(DATEI VARz1):INT VARa2;FORa2FROM1UPTOz1.v0REP IF NOTl6(z1,a2)THENa7(z1,z1.w0+1,a2);cout(a2)END IF END REP END PROCu6;PROCa7(DATEI VARz1,INT CONSTsatznr,z0):b7;c7.b7:INT VARd7:=1,e7:=satznr-1,f7;WHILEg7REPh7;i7END REP.g7:d7<=e7.h7:f7:=(d7+e7)DIV2;INT VARj7;w2(z1,f7);IF NOTl6(z1)THENk7END IF;j7:=z1.z0.k7:WHILEz1.satznr<e7REPf3(z1);IFl7THEN LEAVEk7END IF END REP;WHILEz1.satznr>d7REPi3(z1);IFl7THEN LEAVEk7END IF END REP;LEAVEb7.l7:l6(z1).i7:IFm7GROESSERz1.e1(z0).o0THENe7:=f7-1ELSEd7:=f7+1END IF.m7:z1.e1(j7).o0.c7:p3(z1,z0);IFz1.satznr<d7THENd7DECR1END IF;disablestop;w4(z1);n7;v4(z1);w2(z1,d7);a5(z1,z0);o7.n7:INT CONSTp7:=m2(g2);j4(z1,p7).o7:INT VARh0,i0;q3(z1,p7,h0,i0);k4(z1,p7,h0,i0).g2:z1.e1(z0).o0.END PROCa7;BOOL OP GROESSER(SATZ CONSTq7,r7):s7;t7;SELECTm6ISUBu7OF CASE0:v7
CASE1:w7CASE2:x7OTHERWISEy7END SELECT.s7:INT VARz7:=1;WHILEz7<length(q0)REP INT CONSTu7:=code(q0SUBz7);feldlesen(q7,u7,n6);feldlesen(r7,u7,o6);SELECTm6ISUBu7OF CASE0:a8CASE1:b8OTHERWISEc8END SELECT;z7INCR2END REP;LEAVE GROESSER WITH FALSE.t7:BOOL VARd8;IF(q0SUB(z7+1))="-"THENd8:=FALSE ELSEd8:=TRUE END IF.b8:REAL VARe8,f8;wertberechnen(n6,e8);wertberechnen(o6,f8);IFe8<>f8THEN LEAVEs7END IF.a8:IF NOT(n6LEXEQUALo6)THEN LEAVEs7END IF.c8:IFn6<>o6THEN LEAVEs7END IF.w7:IFd8THENe8>f8ELSEe8<f8END IF.v7:IFd8THENn6LEXGREATERo6ELSEo6LEXGREATERn6END IF.x7:g8(n6);g8(o6);IFd8THENn6>o6ELSEn6<o6END IF.y7:IFd8THENn6>o6ELSEn6<o6END IF.END OP GROESSER;PROCwertberechnen(TEXT CONSTh8,REAL VARwert):LETi8="0123456789";TEXT VARj8:=i6,text;INT VARk0;INT CONSTk8:=length(h8);l8;WHILEk0<=k8REPm8;k0INCR1END REP;wert:=real(text).l8:k0:=pos(h8,"0","9",1);IFk0=0THENwert:=0.0;LEAVEwertberechnenELIFpos(h8,"-",1,k0)>0THENtext:="-"ELSEtext:=f1END IF;.m8:TEXT CONSTn8:=h8SUBk0;IFpos(i8,n8)>0THENtextCATn8ELIFn8=j8THENtextCAT
".";j8:=f1END IF.END PROCwertberechnen;PROCg8(TEXT VARo8):IFlength(o8)<>8THENo8:=f1ELSEo8:=subtext(o8,7)+subtext(o8,4,5)+subtext(o8,1,2)END IF END PROCg8;PROCreorganisiere(TEXT CONSTc2):EUDAT VARp8,q8;oeffne(p8,c2);disablestop;DATASPACE VARd2:=nilspace;oeffne(q8,d2);r8(CONCR(p8),q8);IF NOTiserrorTHENforget(c2,quiet);copy(d2,c2)END IF;forget(d2)END PROCreorganisiere;PROCr8(DATEI VARp8,EUDAT VARq8):enablestop;s8;t8(p8,CONCR(q8)).s8:w2(p8,1);aufsatz(q8,1);WHILE NOTdateiendeREPsatzeinfuegen(q8,u8);cout(p8.satznr);f3(p8);weiter(q8)END REP.dateiende:p8.satznr>p8.w0.u8:p8.e1(p8.z0).o0.END PROCr8;PROCt8(DATEI VARp8,q8):q8.felderzahl:=p8.felderzahl;q8.p0:=p8.p0;q8.feldinfo:=p8.feldinfo;q8.q0:=p8.q0;q8.c1(1):=p8.c1(1);q8.c1(2):=p8.c1(2);q8.c1(3):=p8.c1(3)END PROCt8;PROCnotizenlesen(EUDAT CONSTz1,INT CONSTv2,TEXT VARv8):v8:=z1.c1(v2)END PROCnotizenlesen;PROCnotizenaendern(EUDAT VARz1,INT CONSTv2,TEXT CONSTv8):z1.c1(v2):=v8END PROCnotizenaendern;END PACKETeudasdateien;
PACKETdatenverwaltungDEFINESoeffne,kopple,kette,zugriff,sichere,dateienloeschen,aufkoppeldatei,anzahlkoppeldateien,anzahldateien,aendernerlaubt,inhaltveraendert,eudasdateiname,folgedatei,herkunft,dateiversion,anzahlfelder,feldnamenlesen,feldnamenbearbeiten,feldnummer,feldinfo,notizenlesen,notizenaendern,feldlesen,feldbearbeiten,feldaendern,satznummer,satzkombination,dateiende,weiter,zurueck,aufsatz,satzeinfuegen,satzloeschen,aenderungeneintragen,suchbedingung,suchbedingunglesen,suchbedingungloeschen,suchversion,satzausgewaehlt,markierungaendern,satzmarkiert,markierungenloeschen,markiertesaetze:LET INTVEC=TEXT,DATEI=STRUCT(TEXTname,SATZb0,INTVECc0,INTd0,INTe0,INTf0,TASKg0,DATASPACEh0,EUDATi0,SATZj0,BOOLk0,BOOLl0,m0,n0,TEXTo0,INTVECp0,INTq0),VERWEIS=STRUCT(INTr0,s0);LETt0="",u0="";LETmaxint=32767,v0=10,w0=256,x0=32;ROWv0DATEI VARy0;INT VARz0:=0,a1:=0,b1,c1:=0,d1,e1:=0,f1,g1,h1,i1:=0;BOOL VARj1:=TRUE,k1,l1;TEXT VARm1;ROWw0VERWEIS VARn1;ROWx0VERWEIS VARo1;INT VARp1;LETq1=
#301#"Zuviel Dateien geoeffnet",r1=
#302#"Datei existiert nicht",s1=
#303#"Nicht moeglich, wenn auf Koppeldatei geschaltet",t1=
#304#"Zu viele Felder",u1=
#305#"Zu viele Koppelfelder",v1=
#306#"keine Koppelfelder vorhanden",w1=
#307#"kein direkter Dateizugriff bei geketteten oder gekoppelten Dateien",x1=
#308#"keine Datei geoeffnet",y1=
#309#"Datei nicht gesichert",z1=
#310#"Suchmuster zu umfangreich";
TEXT VARa2;TEXT VARb2:="  ";INTVEC VARc2;OP CAT(INTVEC VARtext,INT CONSTwert):replace(b2,1,wert);textCATb2END OP CAT;PROCinsert(INTVEC VARd2,INT CONSTe2,wert):INT CONSTf2:=e2+e2-2;c2:=subtext(d2,f2+1);d2:=subtext(d2,1,f2);d2CATwert;d2CATc2END PROCinsert;PROCdelete(INTVEC VARd2,INT CONSTe2):INT CONSTf2:=e2+e2-2;c2:=subtext(d2,f2+3);d2:=subtext(d2,1,f2);d2CATc2END PROCdelete;PROCg2(INTVEC VARd2,INT CONSTh2,i2):INT VARj2;FORj2FROMh2UPTOlength(d2)DIV2-1REPreplace(d2,j2,(d2ISUBj2)+i2)END REP END PROCg2;EUDAT VARk2;SATZ VARl2;PROCm2(TEXT CONSTn2):IFz0=v0THENerrorstop(q1)END IF;IF NOTexists(n2)THENerrorstop(r1)END IF;IFo2THENerrorstop(s1)END IF;oeffne(k2,n2)END PROCm2;PROCp2(DATEI VARr0,TEXT CONSTn2,TASK CONSTq2):IFk1OR NOTisniltask(q2)THENr0.h0:=old(n2);oeffne(r0.i0,r0.h0);IF NOTk1THENforget(n2,quiet)END IF ELSEoeffne(r0.i0,n2)END IF;r0.g0:=q2;r0.e0:=0;r0.l0:=FALSE;r0.m0:=FALSE;r0.name:=n2;r2(r0)END PROCp2;PROCs2(INT CONSTt2):INT VARu2:=t2;WHILEy0(u2).e0<>0REPu2:=y0(u2).e0END REP;y0(u2).e0:=
z0END PROCs2;PROCv2:IFdateiende(y0(1).i0)THENaufsatz(1)ELSEaufsatz(satznr(y0(1).i0))END IF END PROCv2;PROCw2:d1:=felderzahl(y0(1).i0);e1:=d1;feldnamenlesen(y0(1).i0,y0(1).b0);p1:=0;INT VARj2;FORj2FROM1UPTOe1REPn1(j2).r0:=0END REP END PROCw2;PROCx2:i1INCR1;IFi1>32000THENi1:=-32000END IF END PROCx2;PROCoeffne(TEXT CONSTn2,BOOL CONSTy2):oeffne(n2,y2,niltask)END PROCoeffne;PROCoeffne(TEXT CONSTn2,BOOL CONSTy2,TASK CONSTq2):enablestop;dateienloeschen(FALSE);suchbedingungloeschen;m2(n2);k1:=y2;z2;p2(y0(z0),n2,q2);v2;w2.z2:z0:=1;x2;h1:=0.END PROCoeffne;PROCkopple(TEXT CONSTn2):kopple(n2,niltask)END PROCkopple;PROCkopple(TEXT CONSTn2,TASK CONSTq2):enablestop;IFz0=0THENerrorstop(x1)END IF;m2(n2);a3;b3;c3;p2(y0(z0),n2,q2);d3.a3:feldnamenlesen(k2,l2);INT VARc0:=0;INTVEC VARe3:=u0;WHILEc0<felderzahl(k2)REPfeldlesen(l2,c0+1,a2);INT CONSTindex:=feldindex(y0(1).b0,a2);IFindex>0THENc0INCR1;e3CATindexEND IF UNTILindex=0END REP.b3:IFe1+felderzahl(k2)-c0>w0THENerrorstop(t1)ELIFp1+c0>x0THENerrorstop(u1)
ELIFc0=0THENerrorstop(v1)END IF;z0INCR1;y0(z0).b0:=l2;y0(z0).c0:=e3;y0(z0).d0:=c0;INT VARf3:=c0;WHILEf3<felderzahl(k2)REPe1INCR1;f3INCR1;n1(e1).r0:=z0;n1(e1).s0:=f3END REP;FORf3FROM1UPTOc0REPg3END REP.g3:INT CONSTh3:=e3ISUBf3;IFn1(h3).r0=0THENi3ELSEj3END IF.i3:p1INCR1;o1(p1).r0:=z0;o1(p1).s0:=f3;n1(h3).r0:=p1;n1(h3).s0:=1.j3:INT CONSTk3:=n1(h3).r0+n1(h3).s0;l3;n1(h3).s0INCR1;o1(k3).r0:=z0;o1(k3).s0:=f3.l3:INT VARm3;FORm3FROMp1DOWNTOk3REPo1(m3+1):=o1(m3)END REP;p1INCR1;FORm3FROM1UPTOd1REP IFn1(m3).r0>=k3THENn1(m3).r0INCR1END IF END REP.c3:a1INCR1;IFc1=0THENc1:=z0ELSEs2(c1)END IF.d3:x2;y0(z0).k0:=FALSE;y0(z0).n0:=FALSE;y0(z0).f0:=satznr(k2);n3(y0(z0)).END PROCkopple;PROCkette(TEXT CONSTn2):kette(n2,niltask)END PROCkette;PROCkette(TEXT CONSTn2,TASK CONSTq2):enablestop;IFz0=0THENerrorstop(x1)END IF;m2(n2);z0INCR1;p2(y0(z0),n2,q2);s2(1);IFj1THENaufsatz(satznummer)END IF END PROCkette;PROCzugriff(PROC(EUDAT VAR)o3):IFz0>1ORo2THENerrorstop(w1)ELSEaenderungeneintragen;o3(y0(1).i0);x2;v2;w2;y0(
1).m0:=TRUE ENDIF END PROCzugriff;PROCsichere(INT CONSTp3,TEXT CONSTn2):aenderungeneintragen;notizenaendern(y0(p3).i0,2,date);IFk1THENforget(n2,quiet);copy(y0(p3).h0,n2)END IF;y0(p3).m0:=FALSE END PROCsichere;PROCdateienloeschen(BOOL CONSTq3):aenderungeneintragen;IFo2THENaufkoppeldatei(0)END IF;r3;s3.r3:a1:=0;c1:=0;y0(1).e0:=0;e1:=0;j1:=TRUE.s3:WHILEz0>0REP IFt3AND NOTq3THENerrorstop(y1);LEAVEdateienloeschenEND IF;forget(y0(z0).h0);z0DECR1END REP.t3:k1ANDy0(z0).m0.END PROCdateienloeschen;INT VARu3,v3,w3,x3,y3,z3,a4,b4;BOOL VARc4;INTVEC VARd4;SATZ VARe4;BOOL VARo2:=FALSE;INT VARf4:=0,g4:=1;BOOL PROCaufkoppeldatei:o2END PROCaufkoppeldatei;PROCaufkoppeldatei(INT CONSTh4):disablestop;x2;IFo2THENi4;o2:=FALSE;j4;k4ELSEl4;o2:=TRUE;m4END IF.i4:b1:=u3;d1:=v3;e1:=w3;f1:=x3;h1:=z3;c1:=a4;y0(g4).e0:=b4;n4:=f4;l1:=c4;o4:=d4;p4:=e4;IFn4>0THENq4:=1ELSEq4:=-1END IF.k4:f4:=0;g4:=1;enablestop;aufsatz(satznummer);WHILEg1<>y3REPweiter(1)END REP.j4:y0(g4).f0:=satznr(y0(g4).i0);IFh4=1AND NOTdateiende(y0(b1)
.i0)THENr4END IF.r4:INT VARs4;FORs4FROM1UPTOy0(g4).d0REPfeldaendern(y0(b1).i0,t4,u4)END REP;y3:=1.t4:y0(g4).c0ISUBs4.u4:feldlesen(y0(g4).i0,s4,a2);a2.l4:u3:=b1;v3:=d1;w3:=e1;x3:=f1;y3:=g1;z3:=h1;a4:=c1;b4:=y0(h4).e0;c4:=l1;d4:=o4;e4:=p4.m4:b1:=h4;f4:=n4;g4:=h4;d1:=felderzahl(y0(h4).i0);e1:=d1;f1:=0;h1:=(length(y0(h4).p0)-1)DIV2;c1:=0;y0(h4).e0:=0;suchbedingungloeschen;aufsatz(y0(h4).f0).END PROCaufkoppeldatei;INT PROCanzahlkoppeldateien:a1END PROCanzahlkoppeldateien;INT PROCanzahldateien:z0END PROCanzahldateien;BOOL PROCaendernerlaubt:k1END PROCaendernerlaubt;BOOL PROCinhaltveraendert(INT CONSTv4):aenderungeneintragen;y0(v4).m0END PROCinhaltveraendert;TEXT PROCeudasdateiname(INT CONSTv4):y0(v4).nameEND PROCeudasdateiname;INT PROCfolgedatei(INT CONSTv4):IFv4=0THENc1ELSEy0(v4).e0END IF END PROCfolgedatei;TASK PROCherkunft(INT CONSTv4):y0(v4).g0END PROCherkunft;INT PROCdateiversion:i1END PROCdateiversion;INT PROCanzahlfelder:e1END PROCanzahlfelder;PROCfeldnamenlesen(INT CONSTf3,TEXT VAR
name):IFf3<=d1THENfeldlesen(y0(g4).b0,f3,name)ELSEfeldlesen(w4,x4,name)END IF.w4:y0(n1(f3).r0).b0.x4:n1(f3).s0.END PROCfeldnamenlesen;PROCfeldnamenbearbeiten(INT CONSTf3,PROC(TEXT CONST,INT CONST,INT CONST)y4):IFf3<=d1THENfeldbearbeiten(y0(g4).b0,f3,PROC(TEXT CONST,INT CONST,INT CONST)y4)ELSEfeldbearbeiten(w4,x4,PROC(TEXT CONST,INT CONST,INT CONST)y4)END IF.w4:y0(n1(f3).r0).b0.x4:n1(f3).s0.END PROCfeldnamenbearbeiten;INT PROCfeldnummer(TEXT CONSTz4):INT VARa5:=d1,h4:=feldindex(y0(g4).b0,z4),u2:=c1;WHILEh4=0ANDu2<>0REPh4:=feldindex(y0(u2).b0,z4);b5;u2:=y0(u2).e0END REP;h4.b5:INT CONSTc5:=y0(u2).d0;IFh4=0THENa5INCRfelderzahl(y0(u2).i0);a5DECRc5ELSEh4INCRa5;h4DECRc5END IF.END PROCfeldnummer;INT PROCfeldinfo(INT CONSTf3):IFf3<=d1THENfeldinfo(y0(g4).i0,f3)ELSEfeldinfo(y0(w4).i0,x4)END IF.w4:n1(f3).r0.x4:n1(f3).s0.END PROCfeldinfo;PROCnotizenlesen(INT CONSTh4,TEXT VARd5):notizenlesen(y0(g4).i0,h4,d5)END PROCnotizenlesen;PROCnotizenaendern(INT CONSTh4,TEXT CONSTd5):notizenaendern(y0(g4).i0,h4
,d5);y0(g4).m0:=TRUE END PROCnotizenaendern;PROCfeldlesen(INT CONSTf3,TEXT VARd5):IFf3<=d1THENfeldlesen(y0(b1).i0,f3,d5)ELSEe5END IF.e5:INT CONSTw4:=n1(f3).r0;IFy0(w4).k0THENfeldlesen(y0(w4).j0,x4,d5)ELSEfeldlesen(y0(w4).i0,x4,d5)END IF.x4:n1(f3).s0.END PROCfeldlesen;PROCfeldbearbeiten(INT CONSTf3,PROC(TEXT CONST,INT CONST,INT CONST)y4):IFf3<=d1THENfeldbearbeiten(y0(b1).i0,f3,PROC(TEXT CONST,INT CONST,INT CONST)y4)ELSEf5END IF.f5:INT CONSTw4:=n1(f3).r0;IFy0(w4).k0THENfeldbearbeiten(y0(w4).j0,x4,PROC(TEXT CONST,INT CONST,INT CONST)y4)ELSEfeldbearbeiten(y0(w4).i0,x4,PROC(TEXT CONST,INT CONST,INT CONST)y4)END IF.x4:n1(f3).s0.END PROCfeldbearbeiten;PROCfeldaendern(INT CONSTf3,TEXT CONSTd5):INT CONSTw4:=n1(f3).r0;IFf3<=d1THENg5ELSEh5END IF.g5:y0(b1).m0:=TRUE;IFi5CANDj5THENk5END IF;feldaendern(y0(b1).i0,f3,d5).i5:NOTo2CANDw4>0.j5:feldlesen(y0(b1).i0,f3,a2);a2<>d5.k5:INT VARl5:=x4,m5:=w4;REPn5(y0(o5));y0(o5).n0:=TRUE;feldaendern(y0(o5).j0,h3,d5);m5INCR1;l5DECR1UNTILl5=0END REP.h5:n5(y0(w4));
IFp5THENy0(w4).l0:=TRUE;feldaendern(y0(w4).j0,x4,d5)END IF.p5:feldlesen(y0(w4).j0,x4,a2);a2<>d5.x4:n1(f3).s0.o5:o1(m5).r0.h3:o1(m5).s0.END PROCfeldaendern;PROCn5(DATEI VARr0):IF NOTr0.k0THENr0.k0:=TRUE;q5END IF.q5:IFdateiende(r0.i0)THENsatzinitialisieren(r0.j0,r0.d0);r5ELSEsatzlesen(r0.i0,r0.j0)END IF.r5:INT VARj2;FORj2FROM1UPTOr0.d0REPfeldlesen(r0.c0ISUBj2,a2);feldaendern(r0.j0,j2,a2)END REP.END PROCn5;PROCn3(DATEI VARr0):s5;t5.s5:feldlesen(y0(b1).i0,u5,o0).u5:r0.c0ISUB1.o0:r0.o0.t5:aufsatz(r0.i0,o0);WHILE NOTv5(r0)REPweiter(r0.i0,o0)END REP;IFdateiende(r0.i0)THENn5(r0)ELSEr0.k0:=FALSE END IF.END PROCn3;PROCw5:INT VARu2:=c1;WHILEu2<>0REPn3(y0(u2));u2:=y0(u2).e0END REP;g1:=1END PROCw5;BOOL PROCv5(DATEI CONSTr0):IF NOTdateiende(r0.i0)THENx5END IF;TRUE.x5:INT VARy5;FORy5FROM2UPTOr0.d0REPfeldlesen(y0(b1).i0,c0ISUBy5,a2);feldbearbeiten(r0.i0,y5,PROC(TEXT CONST,INT CONST,INT CONST)z5);IF NOTa6THEN LEAVEv5WITH FALSE END IF END REP.c0:r0.c0.END PROCv5;BOOL VARa6;PROCz5(TEXT CONSTb6,INT CONST
t2,c6):a6:=length(a2)+t2=c6+1CANDpos(b6,a2,t2,c6+1)=t2END PROCz5;LETd6=22101,e6="h",f6=""27"";BOOL VARg6;PROCh6:TEXT VARi6;g6:=FALSE;REPi6:=incharety;type(i6)UNTILi6=t0END REP END PROCh6;PROCj6:IFg6THENtype(f6)END IF END PROCj6;BOOL PROCk6:TEXT VARi6;REPi6:=incharety;IFi6=t0THEN LEAVEk6WITH FALSE ELSEl6END IF END REP;FALSE.l6:IFg6THENg6:=FALSE;m6ELSEn6END IF.m6:IFi6=e6THENo6;errorstop(d6,t0);LEAVEk6WITH TRUE ELSEtype(f6);type(i6)END IF.n6:IFi6=f6THENg6:=TRUE ELSEtype(i6)END IF.o6:REP UNTILgetcharety=t0END REP.END PROCk6;PROCweiter(INT CONSTp6):IF NOTj1THENaenderungeneintragen;q6END IF.q6:SELECTp6OF CASE1:r6CASE2:s6CASE3:t6END SELECT.r6:u6(FALSE).s6:h6;REPu6(l1);cout(satznummer)UNTILsatzausgewaehltORj1ORk6END REP;j6.t6:INT VARv6:=satznr(y0(b1).i0);WHILEw6ANDe0<>0REPx6;v6:=1END REP;aufsatz(y0(b1).i0,y6);cout(satznummer);w5;j1:=dateiende(y0(b1).i0);z6.w6:a7(y0(b1),v6+1);INT CONSTy6:=y0(b1).p0ISUBy0(b1).q0;y6=maxint.e0:y0(b1).e0.END PROCweiter;PROCzurueck(INT CONSTp6):IFsatznummer>1THEN
aenderungeneintragen;b7END IF.b7:SELECTp6OF CASE1:c7CASE2:d7CASE3:e7END SELECT.c7:f7(FALSE).d7:h6;REPf7(l1);cout(satznummer)UNTILsatzausgewaehltORsatznummer=1ORk6END REP;j6.e7:INT VARv6:=satznr(y0(b1).i0);WHILEw6ANDb1<>1REPg7;v6:=maxint-1END REP;aufsatz(y0(b1).i0,h7);cout(satznummer);w5;j1:=FALSE;z6.w6:INT VARh7;a7(y0(b1),v6);IFy0(b1).q0=1THENh7:=1;TRUE ELSEh7:=y0(b1).p0ISUB(y0(b1).q0-1);FALSE END IF.END PROCzurueck;PROCu6(BOOL CONSTi7):j7;IFk7THENr6;w5ELSEg1INCR1END IF;z6.j7:INT VARu2:=c1;WHILEu2>0REPl7;u2:=y0(u2).e0END REP.l7:BOOL VARm7;n7(y0(u2),m7);IFm7THEN LEAVEj7END IF.k7:u2=0.r6:IFi7THENweiter(y0(b1).i0,m1)ELSEweiter(y0(b1).i0)END IF;WHILEdateiende(y0(b1).i0)REPo7UNTILj1END REP.o7:IFy0(b1).e0<>0THENx6;p7ELSEj1:=TRUE END IF.p7:aufsatz(y0(b1).i0,1).END PROCu6;PROCn7(DATEI VARr0,BOOL VARm7):IFdateiende(r0.i0)THENm7:=FALSE ELSEq7END IF.q7:m7:=TRUE;REPweiter(r0.i0,r0.o0);IFdateiende(r0.i0)THENm7:=FALSE;aufsatz(r0.i0,r0.o0)END IF UNTILv5(r0)END REP.END PROCn7;PROCf7(BOOL CONSTi7):
WHILEsatznr(y0(b1).i0)=1CANDsatznummer>1REPg7;r7(y0(b1).i0)END REP;IFi7THENzurueck(y0(b1).i0,m1)ELSEzurueck(y0(b1).i0)END IF;j1:=FALSE;w5;z6END PROCf7;PROCx6:f1INCRsaetze(y0(b1).i0);b1:=y0(b1).e0END PROCx6;PROCg7:INT VARs7:=1;WHILEy0(s7).e0<>b1REPs7:=y0(s7).e0END REP;f1DECRsaetze(y0(s7).i0);b1:=s7END PROCg7;PROCaenderungeneintragen:INT VARu2:=c1;WHILEu2<>0REPt7;u2:=y0(u2).e0END REP.t7:IFy0(u2).k0THENu7(y0(u2))END IF.END PROCaenderungeneintragen;PROCu7(DATEI VARr0):IFv7AND NOTw7THENx7ELIFy7ANDz7THENa8ELIFw7THENn3(r0)END IF;b8;l0:=FALSE;w7:=FALSE.v7:NOTdateiende(r0.i0)ANDl0.y7:felderzahl(j0)>r0.d0.z7:w7ORl0.a8:m0:=TRUE;feldlesen(j0,1,r0.o0);satzeinfuegen(r0.i0,j0).b8:r0.k0:=FALSE.x7:m0:=TRUE;satzaendern(r0.i0,j0).l0:r0.l0.w7:r0.n0.j0:r0.j0.m0:r0.m0.END PROCu7;PROCr7(EUDAT VARi0):aufsatz(i0,saetze(i0)+1)END PROCr7;PROCaufsatz(INT CONSTsatznr):aenderungeneintragen;b1:=g4;f1:=0;WHILEc8ANDd8REPx6END REP;aufsatz(y0(b1).i0,satznr-f1);w5;j1:=dateiende(y0(b1).i0);z6.c8:satznr-f1>saetze(y0(b1).i0
).d8:y0(b1).e0<>0.END PROCaufsatz;PROCaufsatz(TEXT CONSTe8):aenderungeneintragen;f8(e8,j1);w5;z6END PROCaufsatz;PROCf8(TEXT CONSTe8,BOOL CONSTg8):IFg8THENaufsatz(1)END IF;REPaufsatz(y0(b1).i0,e8);IF NOTdateiende(y0(b1).i0)THENj1:=FALSE;LEAVEf8ELIFy0(b1).e0=0THENj1:=TRUE;IF NOTg8THENf8(e8,TRUE)END IF;LEAVEf8END IF;x6END REP END PROCf8;INT PROCsatznummer:f1+satznr(y0(b1).i0)END PROCsatznummer;INT PROCsatzkombination:g1END PROCsatzkombination;BOOL PROCdateiende:j1END PROCdateiende;SATZ VARh8;satzinitialisieren(h8);PROCsatzeinfuegen:aenderungeneintragen;i8;satzeinfuegen(y0(b1).i0,h8);y0(b1).m0:=TRUE;j8;j1:=FALSE;z6.i8:a7(y0(b1),satznr(y0(b1).i0));g2(y0(b1).p0,y0(b1).q0,1).j8:g1:=1;INT VARu2:=c1;WHILEu2<>0REPr7(y0(u2).i0);u2:=y0(u2).e0END REP.END PROCsatzeinfuegen;PROCsatzloeschen:IF NOTj1THENaenderungeneintragen;k8;satzloeschen(y0(b1).i0);y0(b1).m0:=TRUE;aufsatz(satznummer)END IF.k8:IFsatzmarkiertTHENdelete(y0(b1).p0,y0(b1).q0);h1DECR1END IF;g2(y0(b1).p0,y0(b1).q0,-1).END PROCsatzloeschen;
LETl8=100;ROWl8STRUCT(INTs0,m8,n8,o8,TEXTo0)VARp8;SATZ VARp4;INT VARn4,q4,q8:=1;BOOL VARr8,s8;suchbedingungloeschen;INT VARt8;LETu8=1,v8=2,w8=3,x8=4,y8=5,z8=6,a9=7,b9=8,c9=9;PROCz6:IFj1THENs8:=FALSE ELSEd9;s8:=e9END IF.d9:t8:=q4;WHILEt8>0REPf9;feldbearbeiten(g9,PROC(TEXT CONST,INT CONST,INT CONST)h9)END REP.f9:INT VARi9:=p8(t8).m8;IFi9>=256THENj9;k9END IF.j9:feldlesen((i9AND255)+1,a2).k9:IFl9=2THENm9END IF;p8(t8).o0:=a2.g9:p8(t8).s0.e9:t8<0.END PROCz6;PROCh9(TEXT CONSTb6,INT CONSTn9,o9):INT VARi9:=p8(t8).m8;IFi9>=256THENi9:=i9DIV256END IF;IFp9THENt8:=p8(t8).n8ELSEt8:=p8(t8).o8END IF.p9:SELECTi9OF CASEu8:q9CASEv8:r9CASEw8:s9CASEx8:t9CASEy8:u9CASEz8:v9CASEa9:w9CASEb9:x9CASEc9:y9OTHERWISE FALSE END SELECT.q9:SELECTl9OF CASE0:z9;a2LEXEQUALo0CASE1:z9;a10=b10OTHERWISElength(o0)=o9-n9+1ANDc10END SELECT.c10:n9>o9CORr9.r9:pos(b6,o0,n9,o9)=n9.s9:pos(b6,o0,o9+1-length(o0),o9)>0.t9:pos(b6,o0,n9,o9)>0.u9:z9;SELECTl9OF CASE0:o0LEXGREATERa2CASE1:a10<b10CASE2:m9;a2<o0OTHERWISEa2<o0END SELECT.v9:z9;
SELECTl9OF CASE0:a2LEXGREATEREQUALo0CASE1:a10>=b10CASE2:m9;a2>=o0OTHERWISEa2>=o0END SELECT.w9:n9<=o9.x9:satzmarkiert.y9:TRUE.z9:a2:=subtext(b6,n9,o9).END PROCh9;TEXT PROCo0:p8(t8).o0END PROCo0;PROCm9:IFlength(a2)=8THEN TEXT CONSTd10:=subtext(a2,7,8);replace(a2,7,subtext(a2,1,2));replace(a2,1,d10)ELSEa2:=t0END IF END PROCm9;INT PROCl9:feldinfo(p8(t8).s0)END PROCl9;REAL PROCa10:REAL VARe10;wertberechnen(a2,e10);e10END PROCa10;REAL PROCb10:REAL VARe10;wertberechnen(o0,e10);e10END PROCb10;LETf10=";",g10=",",h10="..",i10="++",j10="--",k10="*";BOOL VARl10,m10,n10;INT VARo10,p10,q10,r10,s10;INTVEC VARo4;PROCsuchbedingung(INT CONSTf3,TEXT CONSTp8):INT VARt2:=1,t10:=0;INT CONSTu10:=length(p8)+1;p10:=0;s10:=f3;o10:=n4+1;WHILEt2<u10REPv10;w10;t2:=c6+2END REP;feldaendern(p4,f3,p8).v10:INT VARx10:=pos(p8,g10,t2);IFx10=0THENx10:=u10END IF;IFt10<t2THENy10END IF;INT CONSTc6:=min(x10,t10)-1.y10:p10INCR1;l10:=TRUE;IFp10>1THENl1:=FALSE END IF;t10:=pos(p8,f10,t2);IFt10=0THENt10:=u10END IF.w10:z10;m10:=
TRUE;INT CONSTa11:=pos(p8,h10,t2,c6+1);IFb11THENc11(t0,c9,-p10)ELIFa11=0THENd11ELSEe11END IF.z10:IFsubtext(p8,t2,t2+1)=j10THENt2INCR2;n10:=TRUE ELSEn10:=FALSE END IF.b11:t2>c6.d11:IFf11THENg11ELSEh11END IF.f11:t2+1=c6CANDsubtext(p8,t2,c6)=i10.g11:c11(t0,b9,-p10).h11:INT VARi11:=pos(p8,k10,t2,c6+1);IFi11=0THENj11ELIFt2=c6THENk11ELSEl11;REPm11END REP END IF.j11:IFn11THENl1:=TRUE;m1:=p8END IF;c11(subtext(p8,t2,c6),u8,-p10).n11:f3=1ANDt2=1ANDc6=u10-1ANDo11AND NOTo2AND(p8SUB1)<>"&".o11:length(o4)<=2.k11:c11(t0,a9,-p10).l11:INT VARm8;IFi11=t2THENm8:=u8ELSEm8:=v8END IF.m11:IFm8<>u8THENp11END IF;t2:=i11+1;i11:=pos(p8,k10,t2,c6+1);IFi11=0THENi11:=c6+1;m8:=w8ELSEm8:=x8END IF.p11:TEXT CONSTo0:=subtext(p8,t2,i11-1);IFn10ORq11THEN IFn10THENm10:=TRUE END IF;c11(o0,m8,-p10);IFq11THEN LEAVEh11END IF ELSEc11(o0,m8,n4+2)END IF.q11:i11>=c6.e11:TEXT CONSTr11:=subtext(p8,t2,a11-1),s11:=subtext(p8,a11+2,c6);IFa11=t2THENc11(s11,y8,-p10)ELIFa11=c6-1THENc11(r11,z8,-p10)ELSEt11END IF.t11:IFn10THENc11(r11,z8,-
p10);m10:=TRUE ELSEc11(r11,z8,n4+2)END IF;c11(s11,y8,-p10).END PROCsuchbedingung;PROCc11(TEXT CONSTu11,INT CONSTm8,n8):v11;w11;IFl10THENx11;y11;r10:=n4ELIFm10THENz11END IF;a12;b12.v11:r8:=FALSE;IFn4=f4THENq8INCR1;IFq8>32000THENq8:=1END IF END IF.w11:IFn4=l8THENsuchbedingungloeschen;errorstop(z1)ELSEn4INCR1;q4:=f4+1END IF.x11:IFp10>length(o4)DIV2THENo4CATn4;c12(q4,0,n4)END IF;IFp10=length(o4)DIV2THENq10:=0ELSEq10:=o4ISUB(p10+1)END IF.y11:c12(q4,-p10,n4);l10:=FALSE;m10:=FALSE.z11:c12(r10,q10,n4);r10:=n4;m10:=FALSE.a12:p8(n4).m8:=m8;p8(n4).s0:=s10;IFn10THENp8(n4).n8:=q10;p8(n4).o8:=n8ELSEp8(n4).n8:=n8;p8(n4).o8:=q10END IF.b12:IFd12THENe12ELSEf12END IF.d12:(u11SUB1)="&"CANDg12.g12:INT CONSTh12:=feldnummer(subtext(u11,2));h12>0.e12:p8(n4).m8:=h12-1+256*m8.f12:INT CONSTi12:=feldinfo(s10);IFi12=2AND(m8=y8ORm8=z8)THENa2:=u11;m9;p8(n4).o0:=a2ELSEp8(n4).o0:=u11END IF.END PROCc11;PROCc12(INT CONSTn9,wert,j12):INT VARj2;FORj2FROMn9UPTOn4-1REP IFp8(j2).n8=wertTHENp8(j2).n8:=j12ELIFp8(j2).o8=wert
THENp8(j2).o8:=j12END IF END REP END PROCc12;PROCsuchbedingunglesen(INT CONSTf3,TEXT VARp8):feldlesen(p4,f3,p8)END PROCsuchbedingunglesen;PROCsuchbedingungloeschen:disablestop;IFo2THENn4:=f4ELSEf4:=0;n4:=0END IF;q4:=-1;o4:=u0;satzinitialisieren(p4);l1:=FALSE;r8:=TRUE;s8:=NOTj1END PROCsuchbedingungloeschen;BOOL PROCsatzausgewaehlt:IF NOTr8THENz6;r8:=TRUE END IF;s8END PROCsatzausgewaehlt;INT PROCsuchversion:IFn4=f4THEN0ELSEq8END IF END PROCsuchversion;PROCa7(DATEI VARr0,INT CONSTb6):IF(r0.p0ISUBr0.q0)<b6THENk12ELSEl12END IF.k12:REPr0.q0INCR1UNTIL(r0.p0ISUBr0.q0)>=b6END REP.l12:WHILEr0.q0>1CAND(r0.p0ISUB(r0.q0-1))>=b6REPr0.q0DECR1END REP.END PROCa7;PROCmarkierungaendern:disablestop;IFsatzmarkiertTHENdelete(y0(b1).p0,y0(b1).q0);h1DECR1ELSEinsert(y0(b1).p0,y0(b1).q0,satznr(y0(b1).i0));h1INCR1END IF END PROCmarkierungaendern;BOOL PROCsatzmarkiert:INT CONSTb6:=satznr(y0(b1).i0);a7(y0(b1),b6);b6=(y0(b1).p0ISUBy0(b1).q0)END PROCsatzmarkiert;INT PROCmarkiertesaetze:h1END PROCmarkiertesaetze;PROC
markierungenloeschen:disablestop;IFo2THENr2(y0(b1))ELSEm12END IF;h1:=0.m12:INT VARu2:=1;REPr2(y0(u2));u2:=y0(u2).e0UNTILu2=0END REP.END PROCmarkierungenloeschen;PROCr2(DATEI VARr0):r0.p0:=t0;r0.p0CATmaxint;r0.q0:=1END PROCr2;END PACKETdatenverwaltung;