PACKET adressenlistenDEFINES adrlispezielleteile:LET niltext="",blank=" ", mittestrich="-",null=0,komma=",",altervolljaehrig=18,uebteil21="Jgst. ", uebteil22="Klasse ",uebteil23="Tutorenkurs ",uebteil24="alphabetisch", ueberschriftenzeilen=2,#bestand1="c12 schueler",bestand2= "c11 akt schuelergruppen",praefix1="c12 jgst",praefix2="c12 sg",# ausgfeldlaenge=9,AUSGFELD =ROW ausgfeldlaengeTEXT ,adrlieingangsmaske= "ms liste adressen eingang",adrlianfpos=2,#dnrschueler=2,fnrsufamnames=3, fnrsurufnames=4,fnrsustatuss=6,fnrsunamenszusatzs=21,fnrsugebnames=22, fnrsugebdatums=5,fnrsusgrpjgst=7,fnrsusgrpzugtut=8,fnrsuwohntbei=23, fnrsustrnrs=24,fnrsuplzorts=25,fnrsutelnrs=26,fnrsufamnamee=28,fnrsuvornamee= 29,fnrsunamenszusatzs=30,fnrsustrnre=31,fnrsuplzorte=32,fnrsutelnre=33, ixsustatjgstzug=255,ixsustatjgst=261,ixstatfamrufgeb=254,stattnachfolgendemI ndexixsustat=252,#mnrbearbeitetwerden=102,mnrbearbeitetwird=100, mnrauswahlnichtsinnvoll=56,mnrlistewirdgedruckt=58;INT VAR aktuelleindexnr, druckzeilenzahl,bildanf,vergldatum,ausgfeldzeile,eingabestatus,zaehler;TEXT VAR adrliueberschrift,ueberschrift1,ueberschrift2,anfbuchstabe, neueranfbuchstabe,startjahr,startzug,bearbeitetwerden,bearbeitetwird, schuelername,schuelervorname,schuelernamenszusatz,schuelergebname,gebdat, jahrgangsstufe,zug,adressename,adressestrasse,adresseort,adressetelnr, erzbername,erzbervorname,erzbernamenszusatz,erzberstrasse,erzberort, erzbertelnr;AUSGFELD VAR ausgfeld;ausgfeld(ausgfeldlaenge):=niltext;TEXT VAR druckstrich;BOOL VAR einjahrgang,alle,sortalpha,neueklasse;BOOL PROC multistop:BOOL VAR b:=FALSE ;IF wert(fnrsustatuss)="ls"THEN IF startjahr<> niltextTHEN IF startzug=niltextTHEN b:=(wert(fnrsusgrpjgst)=startjahr)ELSE b :=(wert(fnrsusgrpzugtut)=startzugAND wert(fnrsusgrpjgst)=startjahr)FI ELSE b :=dbstatus=okFI ;FI ;bEND PROC multistop;BOOL PROC multistopsim:BOOL VAR b:= multistop;setzebestandende(NOT b);bENDPROC multistopsim;PROC adrlispezielleteile(INT CONST nr):SELECT nrOF CASE 1:adrlidialogvorbereiten CASE 2:adrlieingabenrichtigCASE 3:adrlilistenvorbereitenCASE 4: adrlidruckvorbereitenCASE 5:adrliseitedruckenCASE 6: adrlibildschirmvorbereitenCASE 7:adrliseitezeigenENDSELECT .END PROC adrlispezielleteile;PROC adrlidialogvorbereiten:adrliueberschrift:=text( vergleichsknoten);setzeanfangswerte(adrlieingangsmaske,adrlianfpos).END PROC adrlidialogvorbereiten;PROC adrlieingabenrichtig:LET fnrjgst=2,fnrzug=3, fnralphasort=4,fnrklassensort=5,fnrausgdrucker=6,fnrausgbild=7;alle:=FALSE ; einjahrgang:=FALSE ;sortalpha:=FALSE ;wohinausgabepruefen;IF falschausgefuelltTHEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE jahrgangsstufe:=standardmaskenfeld(fnrjgst);zug:=standardmaskenfeld(fnrzug); wasausgabepruefenFI .wohinausgabepruefen:standardpruefe(5,fnrausgdrucker, fnrausgbild,null,niltext,eingabestatus).wasausgabepruefen:IF jahrgangsstufe= niltextTHEN IF zug=niltextTHEN wieausgabepruefen;IF falschausgefuelltTHEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE alle:=TRUE ; wertesetzenfuerweiterebearbeitungFI ELSE meldefehler;infeld(fnrzug); setzeeingabetest(FALSE )FI ELSE standardpruefe(3,fnrjgst,5,13,niltext, eingabestatus);IF falschausgefuelltTHEN infeld(eingabestatus); setzeeingabetest(FALSE )ELSE jahrgangsstufe:=zweistellig(jahrgangsstufe); einjahrgang:=(zug=niltext);IF einjahrgangTHEN wieausgabepruefen;IF falschausgefuelltTHEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE wertesetzenfuerweiterebearbeitungFI ELSE wertesetzenfuerweiterebearbeitung; sortalpha:=TRUE FI ;FI ;FI .wieausgabepruefen:standardpruefe(5,fnralphasort, fnrklassensort,null,niltext,eingabestatus).wertesetzenfuerweiterebearbeitung: sortalpha:=standardmaskenfeld(fnrklassensort)=niltext;setzeausgabedrucker( standardmaskenfeld(fnrausgbild)=niltext);setzeeingabetest(TRUE ). falschausgefuellt:eingabestatus<>0.meldefehler:standardmeldung( mnrauswahlnichtsinnvoll,niltext).END PROC adrlieingabenrichtig;PROC adrlilistenvorbereiten:BOOL VAR b:=FALSE ;INT VAR staticfield:=dnrschueler+1; vergldatum:=vergleichsdatum(altervolljaehrig);startjahr:=jahrgangsstufe; startzug:=zug;IF sortalphaTHEN IF startjahr<>niltextTHEN IF startzug<>niltext THEN aktuelleindexnr:=ixsustatjgstzugELSE aktuelleindexnr:=ixsustatjgstFI ; ELSE staticfield:=fnrsustatuss;#?????#aktuelleindexnr:=ixsustatfamrufgeb# aktuelleindexnr:=ixsustat#FI ;ELSE IF startjahr=""THEN staticfield:= fnrsusgrpjgstELSE staticfield:=fnrsusgrpzugtutFI ;aktuelleindexnr:= ixsustatjgstzugFI ;inittupel(dnrschueler);initobli(2);parsenooffields(34); setzeidentiwert("");putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut, startzug);putwert(fnrsustatuss,"ls");#objektlistestarten(aktuelleindexnr,"", fnrsustatuss,TRUE ,b);#objektlistestarten(aktuelleindexnr,"",staticfield, TRUE ,b);setzebestandende(NOT multistopCOR b)END PROC adrlilistenvorbereiten; PROC adrlibildschirmvorbereiten:LET fnrausganf=2;ueberschriftvorbereitenbild; standardkopfmaskeaktualisieren(ueberschrift1);bildanf:=fnrausganf;# setzenderhilfsgroessenfuersblaettern(min(maxblocklaenge,bildblocklaenge), bildsatzzahl);#setzebildanfangsposition(bildanf).END PROC adrlibildschirmvorbereiten;PROC ueberschriftvorbereitenbild:LET aufein="", aufaus=" ";ueberschrift1:=adrliueberschrift;IF NOT alleTHEN ueberschrift1:= ueberschrift1+komma+blank;IF einjahrgangTHEN ueberschrift1:=ueberschrift1+ uebteil21+aufein+jahrgangsstufe+aufausELSE IF int(jahrgangsstufe)<11THEN ueberschrift1:=ueberschrift1+uebteil22ELSE ueberschrift1:=ueberschrift1+ uebteil23FI ;ueberschrift1:=ueberschrift1+aufein+jahrgangsstufe+blank+zug+ aufausFI FI ;END PROC ueberschriftvorbereitenbild;PROC adrliseitezeigen: blaettern(PROC (INT CONST )adressdatenzeigen,aktion,TRUE ,aktuelleindexnr<> dnrschueler,BOOL PROC multistop)END PROC adrliseitezeigen;PROC adressdatenzeigen(INT CONST x):TEXT CONST leerzeile:=text(blank,bildbreite); INT VAR i;adressdatenholen;adressdatenaufbereiten(bildbreite); ggfleerzeilenfuellen;adressdatenaufbildschirm.ggfleerzeilenfuellen: ausgfeldzeileINCR 1;FOR iFROM ausgfeldzeileUPTO ausgfeldlaenge-1REP ausgfeld( i):=leerzeilePER .END PROC adressdatenzeigen;PROC adressdatenaufbildschirm: INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos; erhoeheausgabeposumeinsEND REPEAT .END PROC adressdatenaufbildschirm;PROC adrlidruckvorbereiten:IF (alleOR einjahrgang)AND NOT sortalphaTHEN zaehler:= null;neueklasse:=TRUE ELSE anfbuchstabe:=niltextFI ;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);ueberschriftvorbereitendruck; initdruckkopf(zentriert(ueberschrift1,druckbreite),zentriert(ueberschrift2, druckbreite)).variablenfuerdrucksetzen:druckzeilenzahl:=drucklaenge( ueberschriftenzeilen);druckstrich:=druckbreite*mittestrich.holemeldungen: meldungstext(mnrbearbeitetwird,bearbeitetwird);meldungstext( mnrbearbeitetwerden,bearbeitetwerden).END PROC adrlidruckvorbereiten;PROC ueberschriftvorbereitendruck:jahrgangsstufe:=wert(fnrsusgrpjgst);zug:=wert( fnrsusgrpzugtut);ueberschrift1:=compress(adrliueberschrift);#dr28.03.88#IF alleTHEN IF sortalphaTHEN ueberschrift2:=uebteil24ELSE klassenueberschriftFI ELSE IF einjahrgangTHEN IF sortalphaTHEN ueberschrift2:=uebteil21+ jahrgangsstufe+komma+blank+uebteil24ELSE klassenueberschriftFI ELSE klassenueberschriftFI FI .klassenueberschrift:IF int(jahrgangsstufe)<11THEN ueberschrift2:=uebteil22ELSE ueberschrift2:=uebteil23FI ;ueberschrift2:= ueberschrift2+jahrgangsstufe+blank+zug.END PROC ueberschriftvorbereitendruck; PROC adrliseitedrucken:adrliueberschriftdrucken;IF (alleOR einjahrgang)AND NOT sortalphaTHEN seitedrucken(PROC (INT VAR )adressdatendrucken, druckzeilenzahl,ausgfeldlaenge,PROC bestandendesimulierenbeiklassenwechsel, BOOL PROC multistopsim);IF neueklasseTHEN simuliertesendezuruecknehmen; neuelistevorbereitenELSE seitenwechselFI ELSE seitedrucken(PROC (INT VAR ) adressdatendrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim); seitenwechselFI .simuliertesendezuruecknehmen:setzebestandende(FALSE ). neuelistevorbereiten:meldelistewirdgedruckt;drucknachbereiten; druckvorbereiten;zaehler:=null;ueberschriftvorbereitendruck;initdruckkopf( zentriert(ueberschrift1,druckbreite),zentriert(ueberschrift2,druckbreite)). meldelistewirdgedruckt:standardmeldung(mnrlistewirdgedruckt,"").END PROC adrliseitedrucken;PROC adrliueberschriftdrucken:druckkopfschreiben.END PROC adrliueberschriftdrucken;PROC adressdatendrucken(INT VAR zeilenzaehler):LET markiert="#";adressdatenholen;ggfmeldung;zaehlerINCR 1;adressdatenaufbereiten (druckbreite);zeilenzaehlerINCR ausgfeldzeile;adressdatenindruckdatei. ggfmeldung:IF (alleOR einjahrgang)AND NOT sortalphaTHEN ggfmeldungklasseELSE ggfmeldunganfbuchstabeEND IF .ggfmeldungklasse:IF zaehler=nullTHEN standardmeldung(bearbeitetwird,jahrgangsstufe+blank+zug+markiert)FI . ggfmeldunganfbuchstabe:IF anfangsbuchstabegeaendertTHEN meldunganfbuchstabe END IF .anfangsbuchstabegeaendert:neueranfbuchstabe:=schuelernameSUB 1; anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe:standardmeldung( bearbeitetwerden,neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe. END PROC adressdatendrucken;PROC adressdatenindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldzeileREP druckzeileschreiben(ausgfeld(i))PER .END PROC adressdatenindruckdatei;PROC bestandendesimulierenbeiklassenwechsel:IF bestandendeTHEN neueklasse:=FALSE ELSE nochklassezubearbeiten;IF neueklasse THEN setzebestandende(TRUE )FI ;FI .nochklassezubearbeiten:neueklasse:=zug<> wert(fnrsusgrpzugtut);IF alleTHEN neueklasse:=neueklasseOR (int( jahrgangsstufe)<>int(wert(fnrsusgrpjgst)))FI .END PROC bestandendesimulierenbeiklassenwechsel;PROC adressdatenholen:schuelername:= wert(fnrsufamnames);schuelervorname:=wert(fnrsurufnames);schuelernamenszusatz :=wert(fnrsunamenszusatzs);schuelergebname:=wert(fnrsugebnames);gebdat:=wert( fnrsugebdatums);jahrgangsstufe:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut );adressename:=wert(fnrsuwohntbei);adressestrasse:=wert(fnrsustrnrs); adresseort:=wert(fnrsuplzorts);adressetelnr:=wert(fnrsutelnrs);erzbername:= wert(fnrsufamnamee);erzbervorname:=wert(fnrsuvornamee);erzbernamenszusatz:= wert(fnrsunamenszusatze);erzberstrasse:=wert(fnrsustrnre);erzberort:=wert( fnrsuplzorte);erzbertelnr:=wert(fnrsutelnre)END PROC adressdatenholen;PROC adressdatenaufbereiten(INT CONST breite):LET prebreite=19,klassetelnrbreite= 21,deutsch="D",namevornametrenner=", ",gebnamepre=", geb. ",gebdatpre= " Geb.Dat.: ",vollj="(Vollj.)",klassepre="Klasse: ",adressepre= " Adresse : ",preleer=" ",adressnamepre="bei ", telnrpre="Tel.: ",erzberpre=" Erz.Ber.: ";INT CONST breiteohnepre:= breite-prebreite,ortgebdatbreite:=breiteohnepre-klassetelnrbreite; schreibenamenszeile;schreibegebdatundggfklasse;schreibeschueleradresse; schreibeggferzberadresse.schreibenamenszeile:ausgfeld(1):=text( zusammengesetztername,breite).zusammengesetztername:subtext(schuelername+ namevornametrenner+schuelervorname+blank+schuelernamenszusatz+gebname,1, breite).gebname:IF schuelergebname=niltextTHEN niltextELSE gebnamepre+ schuelergebnameEND IF .schreibegebdatundggfklasse:ausgfeld(2):=gebdatpre+ gebdatundggfklasse.gebdatundggfklasse:IF alleOR einjahrgangTHEN text(gebdat+ ggfvollj,ortgebdatbreite)+text(klassepre+klasse,klassetelnrbreite)ELSE text( gebdat+ggfvollj,breiteohnepre)FI .klasse:jahrgangsstufe+blank+zug.ggfvollj: IF volljaehrig(datum(gebdat))THEN volljELSE niltextEND IF . schreibeschueleradresse:IF adressename=niltextTHEN ausgfeld(3):=text( adressepre+adressestrasse,breite);ausgfeldzeile:=4ELSE ausgfeld(3):=text( adressepre+adressnamepre+adressename,breite);ausgfeld(4):=text(preleer+ adressestrasse,breite);ausgfeldzeile:=5FI ;ausgfeld(ausgfeldzeile):=preleer+ ortundggftelefon.ortundggftelefon:IF adressetelnr=niltextTHEN text( adresseggflandundort,breiteohnepre)ELSE text(adresseggflandundort, ortgebdatbreite)+text(telnrpre+adressetelnr,klassetelnrbreite)FI . adresseggflandundort:adresseort.schreibeggferzberadresse:IF erzbername= niltextTHEN schreibeleerzeileELSE schreibeerzberadresseFI . schreibeerzberadresse:schreibeerzbername;schreibeggferzberstrort. schreibeerzbername:ausgfeldzeileINCR 1;ausgfeld(ausgfeldzeile):=text( erzberpre+ggferzbernamenszusatz+erzbername+namevornametrenner+erzbervorname, breite).ggferzbernamenszusatz:IF erzbernamenszusatz<>niltextTHEN erzbernamenszusatz+blankELSE niltextFI .schreibeggferzberstrort:IF ( erzberstrasse=niltext)AND (erzberort=niltext)THEN schreibeleerzeileELSE schreibeerzberstrasse;schreibeerzberortundggftelnrFI .schreibeerzberstrasse: ausgfeldzeileINCR 1;ausgfeld(ausgfeldzeile):=text(preleer+erzberstrasse, breite).schreibeerzberortundggftelnr:ausgfeldzeileINCR 1;ausgfeld( ausgfeldzeile):=preleer+erzberortundggftelefon.erzberortundggftelefon:IF erzbertelnr=niltextTHEN text(erzberggflandundort,breiteohnepre)ELSE text( erzberggflandundort,ortgebdatbreite)+text(telnrpre+erzbertelnr, klassetelnrbreite)FI .erzberggflandundort:erzberort.schreibeleerzeile: ausgfeldzeileINCR 1;ausgfeld(ausgfeldzeile):=text(blank,breite).END PROC adressdatenaufbereiten;BOOL PROC volljaehrig(INT CONST geburtstag):geburtstag <=vergldatumEND PROC volljaehrig;END PACKET adressenlisten;