PACKET klassenbuchlistenDEFINES klabulispezielleteile:LET nildatumdb= "01.01.00",niltext="",blank=" ",mittestrich="-",null=0,slspalte3breite=16, slanzspaltentrenner=2,ausgkopflaenge=3,ausgfeldlaenge=3,maxanzproseite=50, AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,SPEICHER =ROW maxanzproseiteTEXT ,klabulieingangsmaske="ms liste klabuch eingang", klabulianfpos=2,#dnrschueler=2,fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums =5,fnrsustatuss=6,fnrsusgrpjgst=7,fnrsusgrpzugtut=8,fnrsugeschlechts=12, fnrsunamenszusatzs=21,fnrsustrnrs=24,fnrsuplzorts=25,dbiplz=--,fnrsutelnrs=26 ,fnrsutidiffdaten=52,dnrdiffdaten=53,fnrddreliunter=67,fnrddreliunteranmeld= 69,fnrddreliunterabmeld=68,fnrddkunstmusik=70,fnrddfach091a=71,fnrddfach091b= 72,fnrddfach092a=73,fnrddfach092b=74,fnrddfach101a=75,fnrddfach101b=76, fnrddfach102a=77,fnrddfach102b=78,fnrhjdfamnames=89,fnrhjdrufnames=90, fnrhjdgebdats=91,fnrhjdhj=93,fnrhjdjgst=94,fnrhjdfach=113,fnrhjdkursart=114, dnrfaecher=141,fnrffach=142,fnrffachbez=143,ixhjdfamrufgebjgsthj=276, ixsustatjgstzug=255,#mnrlistewirdgedruckt=58,mnrbearbeitetwird=100, mnrauswahlnichtsinnvoll=56;INT VAR slspalte1breite,slspalte2breite, druckzeilenzahlgrund,druckzeilenzahl,druckzeilenzahlrest,zaehler,anzzaehler, indexspeicher,eingabestatus,aktuelleindexnr;TEXT VAR vordruck, vordruckueberarbsl,vordruckueberarbsr,klabuliueberschrift, auswahlnichtsinnvoll,listewirdgedruckt,bearbeitetwird,startjahr,startzug, schuelername,schuelerrufname,schuelernamenszus,jahrgang,zug,schuelerstrasse, schuelerort,schuelertelefon,schuelergebdat,schuelergeschlecht,schuelerreliunt ,schuelersprachen,schuelermusfach,schuelerwpffach,schuelerkursfachbez, schuelerkursartbez,zaehleraufber,lehrer,puffer1,puffer2,druckstrich;AUSGFELD VAR ausgfeld;AUSGKOPF VAR slausgkopf,srausgkopf;SPEICHER VAR speicher;FILE VAR f,g;BOOL VAR einjahrgang,alle,elementsek1,neueklasse:=FALSE ;BOOL PROC multistopsim:BOOL VAR b:=FALSE ;IF wert(fnrsustatuss)="ls"THEN IF startjahr<> ""THEN b:=wert(fnrsusgrpjgst)=startjahr;IF bCAND startzug<>""THEN b:=wert( fnrsusgrpzugtut)=startzugFI ELSE #b:=dbstatus=ok;#b:=wert(fnrsustatuss)="ls" FI ;FI ;setzebestandende(NOT b);bEND PROC multistopsim;PROC klabulispezielleteile(INT CONST nr):SELECT nrOF CASE 1: klabulidialogvorbereiten;CASE 2:klabulieingabenrichtig;CASE 3: klabulilistenvorbereiten;CASE 4:klabulidruckvorbereiten;CASE 5: klabuliseitedrucken;ENDSELECT .END PROC klabulispezielleteile;PROC klabulidialogvorbereiten:klabuliueberschrift:=text(vergleichsknoten); setzeanfangswerte(klabulieingangsmaske,klabulianfpos).END PROC klabulidialogvorbereiten;PROC klabulieingabenrichtig:LET fnrjgst=2,fnrzug=3; alle:=FALSE ;einjahrgang:=FALSE ;reinitparsing;zug:=standardmaskenfeld(fnrzug );jahrgang:=standardmaskenfeld(fnrjgst);IF standardmaskenfeld(fnrjgst)= niltextTHEN IF zug=niltextTHEN alle:=TRUE ;setzeausgabedrucker(TRUE ); setzeeingabetest(TRUE )ELSE meldefehler;infeld(fnrzug);setzeeingabetest( FALSE )FI ELSE standardpruefe(3,fnrjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE jahrgang:=zweistellig(standardmaskenfeld(fnrjgst));einjahrgang:=(zug=niltext) ;setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )FI FI .meldefehler: meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung( auswahlnichtsinnvoll,niltext).END PROC klabulieingabenrichtig;PROC klabulilistenvorbereiten:BOOL VAR b;startjahr:=jahrgang;startzug:=zug; aktuelleindexnr:=ixsustatjgstzug;inittupel(dnrschueler);initobli(9); setzeidentiwert("");putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut, startzug);putwert(fnrsustatuss,"ls");#objektlistestarten(aktuelleindexnr,"", fnrsusgrpjgst,TRUE ,b);#objektlistestarten(aktuelleindexnr,"",fnrsustatuss, TRUE ,b);setzebestandende(NOT multistopsim)END PROC klabulilistenvorbereiten; PROC klabulidruckvorbereiten:LET vordr="vordruck klassenbuchliste",manager= "anschreiben server";setzemitseitennummern(FALSE );zaehler:=null;neueklasse:= TRUE ;druckvorbereiten;variablenfuerdrucksetzen;holemeldungen;inittupel( dnrschueler);putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut, startzug);putwert(fnrsustatuss,"ls");lesenvorbereitendruck(PROC (INT CONST , BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim); vordruckvommanagerholen;ueberschriftenvorbereiten;initspalten; ausgabekoepfevorbereiten;ausgfeld(3):=druckstrich.holemeldungen:meldungstext( mnrbearbeitetwird,bearbeitetwird).variablenfuerdrucksetzen:druckstrich:= druckbreite*mittestrich;slspalte2breite:=(druckbreite-slanzspaltentrenner- slspalte3breite)DIV 2;slspalte1breite:=druckbreite-slanzspaltentrenner- slspalte2breite-slspalte3breite;druckzeilenzahlgrund:=drucklaenge- ausgkopflaenge.vordruckvommanagerholen:vordruck:=vordr;forget(vordruck,quiet) ;fetch(vordruck,/manager).END PROC klabulidruckvorbereiten;PROC ueberschriftenvorbereiten:LET swischuledatum=511,swiuebzeile=512, vordrueberarbsl="vordruck ueberarbeitet sl",vordrueberarbsr= "vordruck ueberarbeitet sr",beginnsek2=11,uebteil1sek1="Klasse: ", uebteil1sek2="Tutorenkurs: ",ueb1teil2sek1=" Klassenlehrer: ",ueb1teil2sek2 =" Tutor: ",ueb2teil2="Schuljahr ";jahrgangundzugholen;elementsek1bestimmen ;#puffer1:=wert();#setzesonderwerteschulkenndaten;#putwert(,puffer1);# vordruckfuellenfuerueberschrift1;vordruckfuellenfuerueberschrift2; verbleibendedruckzeilenzahlbestimmen.jahrgangundzugholen:jahrgang:=wert( fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut).elementsek1bestimmen:elementsek1:= FALSE ;IF int(jahrgang)int(wert( fnrsusgrpjgst));IF neueklasseTHEN ausgabekopfsrvorbelegenFI ;neueklasse:= neueklasseOR (zug<>wert(fnrsusgrpzugtut));ELSE neueklasse:=zug<>wert( fnrsusgrpzugtut)FI .END PROC bestandendesimulierenbeiklassenwechsel;PROC schuelerdatendrucken(INT VAR zeilenzaehler):LET markiert="#"; schuelerdatenholen;ggflmeldungklasse;zaehlerINCR 1;anzzaehlerINCR 1; schuelerdatenaufbereiten;zeilenzaehlerINCR ausgfeldlaenge; schuelerdatenindruckdatei.ggflmeldungklasse:IF zaehler=nullTHEN standardmeldung(bearbeitetwird,jahrgang+blank+zug+markiert)FI .END PROC schuelerdatendrucken;PROC schuelerdatenholen:LET weiblich="w",maennlich="m", junge="J",maedchen="M",anzsprachen=4,prosprache=3;INT VAR i,j;schuelername:= wert(fnrsufamnames);schuelerrufname:=2*blank+wert(fnrsurufnames); schuelernamenszus:=wert(fnrsunamenszusatzs);jahrgang:=wert(fnrsusgrpjgst);zug :=wert(fnrsusgrpzugtut);schuelerstrasse:=wert(fnrsustrnrs);schuelerort:=wert( fnrsuplzorts);schuelertelefon:=wert(fnrsutelnrs);schuelergebdat:=wert( fnrsugebdatums);IF wert(fnrsugeschlechts)=weiblichTHEN schuelergeschlecht:= maedchenELIF wert(fnrsugeschlechts)=maennlichTHEN schuelergeschlecht:=junge ELSE schuelergeschlecht:=blankFI ;IF elementsek1THEN diffdatenholenundaufbereitenELSE schuelerkursfachbez:=niltext; schuelerkursartbez:=niltext;kursdatenholenundaufbereitenFI . diffdatenholenundaufbereiten:INT VAR difstatus:=0;inittupel(dnrdiffdaten);IF wert(fnrsutiddiffdaten)<>""THEN disablestop;readtid(dnrdiffdaten,wert( fnrsutiddiffdaten));IF iserrorTHEN clearerror;difstatus:=1FI ;enablestopFI ; IF difstatus=0THEN schuelersprachen:=niltext;sprachenaufbereiten; schuelerreliunt:=wert(fnrddreliunter);schuelermusfach:=wert(fnrddkunstmusik); schuelerwpffach:=niltext;IF jahrgang="09"THEN wpf9aufbereitenELIF jahrgang= "10"THEN wpf10aufbereitenFI FI .sprachenaufbereiten:FOR iFROM 0UPTO anzsprachen-1REP j:=(3*i)+55;puffer1:=wert(j);schuelersprachen:= schuelersprachen+puffer1+(prosprache-length(puffer1))*blankPER . wpf9aufbereiten:puffer1:=wert(fnrddfach091a);schuelerwpffach:=puffer1+(5- length(puffer1))*blank;puffer1:=wert(fnrddfach091b);schuelerwpffach:= schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1:=wert(fnrddfach092a );schuelerwpffach:=schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1 :=wert(fnrddfach092b);schuelerwpffach:=schuelerwpffach+puffer1+(5-length( puffer1))*blank.wpf10aufbereiten:puffer1:=wert(fnrddfach101a);schuelerwpffach :=puffer1+(5-length(puffer1))*blank;puffer1:=wert(fnrddfach101b); schuelerwpffach:=schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1:= wert(fnrddfach102a);schuelerwpffach:=schuelerwpffach+puffer1+(5-length( puffer1))*blank;puffer1:=wert(fnrddfach102b);schuelerwpffach:=schuelerwpffach +puffer1+(5-length(puffer1))*blank.kursdatenholenundaufbereiten:putwert( fnrhjdfamnames,schuelername);putwert(fnrhjdrufnames,compress(schuelerrufname) );putwert(fnrhjdgebdats,schuelergebdat);putwert(fnrhjdjgst,jahrgang);putwert( fnrhjdhj,schulkenndatum("Schulhalbjahr"));search(ixhjdfamrufgebjgsthj,TRUE ); pause(5);IF dbstatus=okTHEN kursartzuweisenFI .#dr31.03.88kursartzuweisen: TEXT VAR suchbegriff:="";FOR iFROM 1UPTO (length(wert(fnrhjdfach))DIV 2)REP puffer1:=wert(fnrhjdkursart)SUB i;schuelerkursartbez:=schuelerkursartbez+ puffer1+(2-length(puffer1))*blank;suchbegriff:=subtext(wert(fnrhjdfach),(2*i) -1,2*i);suchbegriff:=compress(suchbegriff);putwert(fnrffach,suchbegriff); search(dnrfaecher,TRUE );IF dbstatus=okTHEN puffer1:=wert(fnrffachbez); schuelerkursfachbez:=schuelerkursfachbez+puffer1+(3-length(puffer1))*blank; FI ;PER .#kursartzuweisen:TEXT VAR suchbegriff:="";FOR iFROM 1UPTO (length( wert(fnrhjdfach))DIV 2)REP suchbegriff:=subtext(wert(fnrhjdfach),(2*i)-1,2*i) ;suchbegriff:=compress(suchbegriff);putwert(fnrffach,suchbegriff);search( dnrfaecher,TRUE );IF dbstatus=okTHEN puffer1:=wert(fnrffach); schuelerkursfachbez:=schuelerkursfachbez+text(puffer1,3);puffer1:=wert( fnrhjdkursart)SUB i;schuelerkursartbez:=schuelerkursartbez+text(puffer1,3); ELSE schuelerkursfachbez:=schuelerkursfachbez+(3*blank);schuelerkursartbez:= schuelerkursartbez+(3*blank);FI ;PER .END PROC schuelerdatenholen;PROC schuelerdatenaufbereiten:zaehleraufbereiten;schreibenrnamestrassetelnr; schreiberufnameort;datenfuerrechteseitespeichern.schreibenrnamestrassetelnr: spaltenweise(zaehleraufber+2*blank+schuelername);spaltenweise(schuelerstrasse );spaltenweise(schuelertelefon);ausgfeld(1):=zeile.schreiberufnameort: spaltenweise(4*blank+schuelerrufname+blank+schuelernamenszus);spaltenweise( schuelerort);spaltenweise(blank);ausgfeld(2):=zeile. datenfuerrechteseitespeichern:indexspeicherINCR 1;speicher(indexspeicher):= zaehleraufber+2*blank+aufbgebdat+3*blank+schuelergeschlecht;IF elementsek1 THEN speicher(indexspeicher):=speicher(indexspeicher)+6*blank+aufbreliunt+5* blank+schuelersprachen+4*blank+aufbmusfach+6*blank+schuelerwpffach; indexspeicherINCR 1ELSE speicher(indexspeicher):=speicher(indexspeicher)+3* blank+schuelerkursfachbez;indexspeicherINCR 1;speicher(indexspeicher):=19* blank+schuelerkursartbezFI .aufbgebdat:IF schuelergebdat=niltextTHEN 8*blank ELSE schuelergebdatFI .aufbreliunt:IF schuelerreliunt=niltextOR (reliabmeld AND NOT relianmeld)THEN 2*blankELSE schuelerreliuntFI .reliabmeld:wert( fnrddabmeldedatreli)<>nildatumdb.relianmeld:wert(fnrddanmeldedatreli)<> nildatumdb.aufbmusfach:IF schuelermusfach=niltextTHEN 2*blankELSE schuelermusfachFI .END PROC schuelerdatenaufbereiten;PROC schuelerdatenindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(i))PER ;druckzeilenzahlrestDECR ausgfeldlaenge. END PROC schuelerdatenindruckdatei;PROC leereschuelereintragen:INT VAR leereschuelermoeglich,i;indexspeicherINCR 1;moeglicheschuelereintragen. moeglicheschuelereintragen:leereschuelermoeglich:=druckzeilenzahlrestDIV ausgfeldlaenge;FOR iFROM 1UPTO leereschuelermoeglichREP zaehlerINCR 1; zaehleraufbereiten;ausgfeld(1):=text(zaehleraufber,druckbreite);ausgfeld(2):= text(blank,druckbreite);schuelerdatenindruckdatei; leerenschuelerfuerrechteseitespeichernPER . leerenschuelerfuerrechteseitespeichern:anzzaehlerINCR 1;speicher( indexspeicher):=text(zaehleraufber,druckbreite);indexspeicherINCR 2.END PROC leereschuelereintragen;PROC rechteseitedrucken:INT VAR i,j;seitenwechsel; klabulisrueberschriftdrucken;FOR iFROM 1UPTO anzzaehlerREP j:=2*i;ausgfeld(1) :=speicher(j-1);ausgfeld(2):=speicher(j);schuelerdatenindruckdateiPER .END PROC rechteseitedrucken;PROC klabulisrueberschriftdrucken:INT VAR i;input(g); WHILE NOT eof(g)REP getline(g,ausgfeld(1));druckzeileschreiben(ausgfeld(1)); PER ;druckzeileschreiben(druckstrich);FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(srausgkopf(i))END REPEAT .END PROC klabulisrueberschriftdrucken;PROC zaehleraufbereiten:LET zaehlerzweistellig= 10;IF zaehler