summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/5.drucken
diff options
context:
space:
mode:
Diffstat (limited to 'app/schulis/2.2.1/src/5.drucken')
-rw-r--r--app/schulis/2.2.1/src/5.drucken153
1 files changed, 153 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/5.drucken b/app/schulis/2.2.1/src/5.drucken
new file mode 100644
index 0000000..9b775ff
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.drucken
@@ -0,0 +1,153 @@
+PACKET druckenDEFINES statdrucken:LET statistikdatei="STATISTIK.",
+statistikserver="statistik server",erstedruckdatei="liste.1",druckdatei=
+"liste.",maxstatistiken=200,statistikvorzeilen=3,niltext="",space=" ",quote=
+"""",edittasten="vr",statistiktext="Statistik Nr. ",stichtagtext="Stichtag: "
+,definitiontext="Definition der Statistik Nr. ",groessetext=
+"Größe: Zeilen, Spalten",tabellentext=
+"Feld Z / Sp Art Länge Definition",tabellenlinie=
+"----+--------+----+------+----------",tabelleleer=
+" ",prozenttext=" %",meldungzusatz="+",mgibtesnicht
+=477,fstatnr=2,fmini=3,fstd=4,fscreen=5,fprinter=6,tsenkrecht=":",twaagerecht
+="-",tkreuz="+",tschraeg="/",pruefeimintervall=3,pruefenureinkreuz=5,
+minspaltenbreite=4,maxspalten=50,KONST =STRUCT (BOOL def,TEXT maske,INT
+mvorbereiten,mdrucken,mnichtdrucken);KONST VAR druck;BOOL VAR
+ausgabebildschirm,ausgabeminimal;TEXT VAR druckstatistik;ROW maxspaltenINT
+VAR breiten;INT VAR zeilen,spalten,felder;FILE VAR stat;PROC statdrucken(
+BOOL CONST defdrucken,INT CONST was):INT VAR status:=0;IF defdruckenTHEN
+druck:=KONST :(TRUE ,"mst statistik drucken",484,498,499);ELSE druck:=KONST :
+(FALSE ,"mst statistik ausgeben",481,482,483);FI ;SELECT wasOF CASE 1:
+druckenexecCASE 2:druckenlistezeigenCASE 3:druckenlisteexecCASE 4:ausdrucken;
+enter(1)CASE 5:ausdrucken;leave(2)CASE 6:nichtdrucken;enter(1);CASE 7:
+nichtdrucken;leave(2);END SELECT .druckenexec:standardpruefe(
+pruefeimintervall,fstatnr,1,maxstatistiken,niltext,status);IF NOT
+alleeingabenkorrektTHEN leave(1);ELIF NOT exists(gewaehltestatistik,task(
+statistikserver))THEN standardmeldung(mgibtesnicht,standardmaskenfeld(2)+
+meldungzusatz);infeld(fstatnr);leave(1);ELSE drucken(text(int(
+standardmaskenfeld(fstatnr))));IF NOT ausgabebildschirmTHEN leave(1);FI ;FI .
+gewaehltestatistik:statistikdatei+text(int(standardmaskenfeld(fstatnr))).
+druckenlistezeigen:status:=0;IF alleeingabenkorrektTHEN statlistezeigen(int(
+standardmaskenfeld(fstatnr)));ELSE leave(1);FI .druckenlisteexec:IF
+ausgabebildschirmTHEN statlistebearbeiten(druck.maske);IF statlisteeintrag>
+niltextTHEN drucken(statlisteeintrag);ELSE leave(2);FI ;ELSE
+statlistebearbeiten(druck.maske);WHILE statlisteeintrag>niltextREP drucken(
+statlisteeintrag);statlistebearbeiten(druck.maske);PER ;leave(2);FI .
+alleeingabenkorrekt:IF status=0THEN standardpruefe(pruefenureinkreuz,fmini,
+fstd,0,niltext,status);FI ;IF druck.defTHEN ausgabebildschirm:=
+standardmaskenfeld(fmini)<>niltext;ELSE IF status=0THEN standardpruefe(
+pruefenureinkreuz,fscreen,fprinter,0,niltext,status);FI ;ausgabeminimal:=
+standardmaskenfeld(fmini)<>niltext;ausgabebildschirm:=standardmaskenfeld(
+fscreen)<>niltext;FI ;IF status>0THEN infeld(status)FI ;status=0.ausdrucken:
+standardmeldung(druck.mdrucken,druckstatistik+meldungzusatz);
+druckdateibehandeln(PROC (TEXT CONST )print);druckdateibehandeln(PROC (TEXT
+CONST )forget).nichtdrucken:infeld(fstatnr);standardmaskenfeld(niltext,
+fstatnr);standardmeldung(druck.mnichtdrucken,druckstatistik+meldungzusatz);
+druckdateibehandeln(PROC (TEXT CONST )forget).END PROC statdrucken;PROC
+drucken(TEXT CONST statistiknummer):statistiknummerIN fstatnr;infeld(fstatnr)
+;standardmaskenfeld(niltext,fstatnr);erstellediedruckdatei;IF
+ausgabebildschirmTHEN druckstatistik:=statistiknummer;standardmeldung(niltext
+,meldungzusatz);zeigedatei(erstedruckdatei,edittasten);ELSE standardmeldung(
+druck.mdrucken,statistiknummer+meldungzusatz);druckdateibehandeln(PROC (TEXT
+CONST )print);druckdateibehandeln(PROC (TEXT CONST )forget);FI .
+erstellediedruckdatei:standardmeldung(druck.mvorbereiten,statistiknummer+
+meldungzusatz+meldungzusatz);druckdateibehandeln(PROC (TEXT CONST )forget);
+statistikladen(statistiknummer);druckvorbereiten;IF druck.defTHEN
+druckestatdef(statistiknummer);ELSE druckestatistik(statistiknummer);FI ;
+drucknachbereitenohneausdrucken;forget(statistikdatei+statistiknummer,quiet).
+END PROC drucken;PROC druckestatistik(TEXT CONST statistiknummer):TEXT VAR
+kopf1,kopf2,linie,dateizeile;BOOL VAR inhalt;INT VAR gedrucktespalten:=0,
+spaltendieseseite:=0,aktspalte,aktzeile,aktbreite,zeilenbisseitenende,
+gedrucktefelder:=0;seitenkopffestlegen;evtlspaltenbreitenverkuerzen;REP
+ermittlespaltendieseseite;druckeallezeilenbiszudieserspalte;gedrucktespalten
+INCR spaltendieseseite;UNTIL gedrucktespalten=spaltenPER .seitenkopffestlegen
+:toline(stat,1);readrecord(stat,kopf1);kopf1:=statistiktext+statistiknummer+
+space+kopf1;toline(stat,statistikvorzeilen);readrecord(stat,kopf2);kopf2:=
+compress(kopf2);IF kopf2>niltextTHEN kopf2:=stichtagtext+kopf2FI ;inhalt:=
+kopf2>niltext;setzemitseitennummern(FALSE );initdruckkopf(kopf1,kopf2).
+evtlspaltenbreitenverkuerzen:IF ausgabeminimalTHEN FOR aktspalteFROM 1UPTO
+spaltenREP breiten[aktspalte]:=minspaltenbreite;PER FI .
+ermittlespaltendieseseite:initspalten;setzespaltentrenner(tsenkrecht);
+setzespaltenbreite(2);aktbreite:=3;spaltendieseseite:=0;REP spaltendieseseite
+INCR 1;aktbreiteINCR breiten[letztespalte];aktbreiteINCR 1;setzespaltenbreite
+(breiten[letztespalte]);UNTIL letztespalte>=spaltenCOR aktbreite+breiten[
+letztespalte+1]>=druckbreitePER .letztespalte:gedrucktespalten+
+spaltendieseseite.druckeallezeilenbiszudieserspalte:aktzeile:=0;erzeugelinie;
+WHILE aktzeile<zeilenREP druckeeineseitebiszudieserspaltePER .erzeugelinie:
+linie:=twaagerecht+twaagerecht+tkreuz;FOR aktspalteFROM gedrucktespalten+1
+UPTO letztespalteREP linieCAT (breiten[aktspalte]*twaagerecht);linieCAT
+tkreuz;PER .druckeeineseitebiszudieserspalte:zeilenbisseitenende:=drucklaenge
+(anzahlkopfzeilen);druckkopfschreiben;spaltenkopfschreiben;WHILE
+zeilenbisseitenende>=benoetigtezeilenREP aktzeileINCR 1;einezeileschreiben;
+IF aktzeileMOD 2=0THEN gibstandaus(statistiknummer,gedrucktefelder,felder);
+FI ;UNTIL aktzeile>=zeilenPER ;seitenwechsel.anzahlkopfzeilen:IF inhaltTHEN 2
+ELSE 1FI .benoetigtezeilen:IF ausgabeminimalTHEN 1ELSE 2FI .
+spaltenkopfschreiben:spaltenweise(niltext);FOR aktspalteFROM gedrucktespalten
++1UPTO letztespalteREP spaltenweise(text(aktspalte,3));PER ;
+druckzeileschreiben(zeile+tsenkrecht);zeilenbisseitenendeDECR 1.
+einezeileschreiben:IF NOT ausgabeminimalTHEN druckzeileschreiben(linie);
+zeilenbisseitenendeDECR 1;FI ;spaltenweise(text(aktzeile,2));FOR aktspalte
+FROM gedrucktespalten+1UPTO letztespalteREP tragefeldinhalteinPER ;
+gedrucktefelderINCR spaltendieseseite;druckzeileschreiben(zeile+tsenkrecht);
+zeilenbisseitenendeDECR 1.tragefeldinhaltein:toline(stat,((aktzeile-1)*
+spalten)+aktspalte+3);readrecord(stat,dateizeile);IF (dateizeileSUB 5)="t"
+THEN dateizeile:=subtext(dateizeile,7,length(dateizeile)-1);changeall(
+dateizeile,quote+quote,quote);spaltenweise(dateizeile);ELIF inhaltTHEN
+spaltenweise(subtext(dateizeile,1,4));ELSE spaltenweise(niltext);FI .END
+PROC druckestatistik;PROC druckestatdef(TEXT CONST statistiknummer):TEXT VAR
+kopfname,kopfgroesse,kopflinie,dateizeile;INT VAR zeilenbisseitenende,aktfeld
+:=0,deffeldbreite,benoetigtezeilen,zeilenende;seitenkopffestlegen;
+tabellefestlegen;liesnaechstesfeld;REP druckeeineseiteUNTIL aktfeld>felder
+PER .seitenkopffestlegen:toline(stat,1);readrecord(stat,kopfname);kopfgroesse
+:=groessetext;replace(kopfgroesse,8,text(zeilen,2));replace(kopfgroesse,19,
+text(spalten,2));setzemitseitennummern(FALSE );initdruckkopf(definitiontext+
+statistiknummer,kopfname).tabellefestlegen:kopflinie:=tabellenlinie;WHILE
+length(kopflinie)<druckbreiteREP kopflinieCAT twaagerecht;PER ;initspalten;
+setzespaltentrenner(tsenkrecht);setzespaltenbreite(4);setzespaltenbreite(8);
+setzespaltenbreite(4);setzespaltenbreite(6);deffeldbreite:=druckbreite-length
+(tabelleleer).druckeeineseite:zeilenbisseitenende:=drucklaenge(
+anzahlkopfzeilen);druckkopfschreiben;tabellenkopfschreiben;WHILE
+zeilenbisseitenende>=benoetigtezeilenREP schreibedasfeld;IF aktfeldMOD 15=0
+THEN gibstandaus(statistiknummer,aktfeld,felder);FI ;liesnaechstesfeld;UNTIL
+aktfeld>felderPER ;seitenwechsel.anzahlkopfzeilen:IF kopfname=niltextTHEN 1
+ELSE 2FI .tabellenkopfschreiben:IF aktfeld<=1THEN druckzeileschreiben(
+kopfgroesse);druckzeileschreiben(niltext);zeilenbisseitenendeDECR 2;FI ;
+druckzeileschreiben(tabellentext);druckzeileschreiben(kopflinie);
+zeilenbisseitenendeDECR 2.liesnaechstesfeld:aktfeldINCR 1;IF aktfeld<=felder
+THEN toline(stat,aktfeld+3);readrecord(stat,dateizeile);spaltenweise(text(
+aktfeld,4));spaltenweise(zeileundspalte);spaltenweise(space+space+(dateizeile
+SUB 5));spaltenweise(text(breiten[aktspalte],5));benoetigtezeilen:=1;IF
+length(dateizeile)-5>deffeldbreiteTHEN zaehlebenoetigtezeilenFI ;FI .
+zeileundspalte:text(aktzeile,3)+tschraeg+text(aktspalte,3).aktzeile:(aktfeld-
+1)DIV spalten+1.aktspalte:(aktfeld-1)MOD spalten+1.zaehlebenoetigtezeilen:
+zeilenende:=5+deffeldbreite;gehezurueckzumwortende(dateizeile,zeilenende);
+WHILE zeilenende<length(dateizeile)REP benoetigtezeilenINCR 1;
+gehezurueckzumwortende(dateizeile,zeilenende);zeilenendeINCR deffeldbreite+1;
+PER .schreibedasfeld:zeilenende:=5+deffeldbreite;gehezurueckzumwortende(
+dateizeile,zeilenende);druckzeileschreiben(zeile+tsenkrecht+space+subtext(
+dateizeile,6,zeilenende));zeilenbisseitenendeDECR 1;WHILE zeilenende<length(
+dateizeile)REP dateizeile:=subtext(dateizeile,zeilenende+2);zeilenende:=
+deffeldbreite;gehezurueckzumwortende(dateizeile,zeilenende);
+druckzeileschreiben(tabelleleer+subtext(dateizeile,1,zeilenende));
+zeilenbisseitenendeDECR 1;PER .END PROC druckestatdef;PROC
+gehezurueckzumwortende(TEXT CONST dateizeile,INT VAR zeilenende):INT VAR
+naechsteszeichen;IF zeilenende<length(dateizeile)CAND NOT amwortendeTHEN REP
+findewortende;UNTIL NOT hieristeinsamesquotePER ;zeilenende:=max(15,
+zeilenende);FI .findewortende:REP zeilenendeDECR 1;UNTIL amwortendeOR
+zeilenende<1PER .amwortende:(dateizeileSUB zeilenende)<>spaceAND (dateizeile
+SUB (zeilenende+1))=space.hieristeinsamesquote:naechsteszeichen:=pos(
+dateizeile,"!","�",zeilenende+1);naechsteszeichen>0CAND (dateizeileSUB
+naechsteszeichen)=quote.END PROC gehezurueckzumwortende;PROC gibstandaus(
+TEXT CONST nummer,INT CONST wert,hundert):disablestop;INT VAR proz:=(wert*100
+)DIV hundert;IF iserrorTHEN clearerror;proz:=int((real(wert)*100.0)/real(
+hundert));FI ;standardmeldung(druck.mvorbereiten,nummer+meldungzusatz+text(
+proz)+prozenttext+meldungzusatz);END PROC gibstandaus;PROC statistikladen(
+TEXT CONST statnummer):TEXT VAR dummy;INT VAR spaltenzaehler;forget(
+statistikdatei+statnummer,quiet);fetch(statistikdatei+statnummer,task(
+statistikserver));stat:=sequentialfile(input,statistikdatei+statnummer);
+getline(stat,dummy);get(stat,zeilen);get(stat,spalten);FOR spaltenzaehler
+FROM 1UPTO spaltenREP get(stat,breiten[spaltenzaehler]);PER ;modify(stat);
+felder:=zeilen*spalten;END PROC statistikladen;PROC druckdateibehandeln(PROC
+(TEXT CONST )machwas):INT VAR i;TEXT VAR name;commanddialogue(FALSE );get(all
+,name,i);WHILE i>0REP IF subtext(name,1,length(druckdatei))=druckdateiTHEN
+machwas(name);FI ;get(all,name,i);PER ;commanddialogue(TRUE ).END PROC
+druckdateibehandeln;END PACKET drucken;
+