app/schulis-simulationssystem/3.0/src/output

Raw file
Back to index

1
2
3
4
5
6
PACKEToutputDEFINES OUTPUT,:=,niloutput,replace,FILESUB,gebeaufbildschirmaus,plotterahmendoppelt,plottefusszeile,blaettere,blaetternoben,blaetternunten,blaettern,putpicture,putkreuz,nildiagramm,nildiagrammmitkreuz,nilkreuz,window,legefensterfest,versendeoutput,setzerahmen,kopfzeilezusammenstellen,forget:LETstrukt1fenster=1,strukt2texte=2,strukt2diagramme1text=3,strukt4fenster=4,strukttabelleunten=5,strukttabelleoben=6,fensterganz=1,fensteroben=2,fensterunten=3,fensterlinksoben=4,fensterlinksunten=5,fensterrechtsoben=6,fensterrechtsunten=7,fensterrechts=8,stdfarbe=1,stddicke=0,durchgezogen=1,hintergrund=0,vordergrund=1,maxpictures=10,blockstartwerte=9,neuerplottertaskname="SIMSEL-PRINTERDEPOT",alterplottertaskname="simsel plotter",maxplotobjekteinplottertask=25,mlplottertaskzuvoll=31,mlplottertaskexistiertnicht=40,mlplottertasknichtempfangsbereit=41,mlplotunmoeglich=43,plotok=0,produktname=21,zwischenraum=" ",maxfilezeilen=500,teilfenster="teiltextname",anfangszeile=1,typnummer=1055,lkszeilenanfang=4,rtszeilenanfang=42,rtszeilenende=79,obenerstezeile=3,obenletztezeile=12,untenerstezeile=14,untenletztezeile=23;REAL VARhorcm,vertcm;INT VARpixhor,pixvert;drawingarea(horcm,vertcm,pixhor,pixvert);REAL CONSTbuchsthoehe:=stdhoehe,buchstbreite:=stdbreite,minyabstand:=0.1,minxabstand:=buchstbreite/3.0;REAL CONSThoehe:=buchsthoehe+3.0*minyabstand,links:=0.0,rechts:=horcm,spaltenmitte:=(vertcm)/2.0,oben:=vertcm-hoehe,unten:=hoehe,zeilenmitte:=horcm/2.0,rahmenoben:=vertcm,rahmenunten:=0.0,abstand:=0.1;REAL VARverkleinerunghoehe:=2.5,verkleinerungbreite:=1.5;ROW6PICTURE VARrahmenmitkreuz;erstellerahmen;TYPE OUTPUT=BOUND STRUCT(INTaufbau,TEXTkopfzeilentext,INTschluesselfusszeile,BOOLmitrahmen,REALstandardhoehe,standardbreite,sourcewidth,sourceheight,TEXTmodellbezeichner,dsname,ROW2DIAGRAMMdiag,NURTEXTtext1,text2,startwerte,PICTURErahmen);TYPE NURTEXT=STRUCT(BOOLbelegt,INTaktzeile,naechsteseite,SIMSELFILEinhalt);TYPE DIAGRAMM=STRUCT(BOOLbelegt,INTanzahlpictures,anzahlpicfuerkreuz,REALxmin,xmax,ymin,ymax,ROWmaxpicturesPICTUREkreuz,ROWmaxpicturesPICTUREinhalt);TYPE SIMSELFILE=STRUCT(ROWmaxfilezeilenTEXTfilezeile,INTzeilenanzahl);PROCversendeoutput(OUTPUT VARobjekt,TEXT CONSTmodellbezeichner,kopfzeilentext,INT CONSTsteuerzeilennr,TEXT CONSTziel):INT VARret;TEXT VARdsname:=kopfzeilentext+"."+modellbezeichner+". "+timeofday;changeall(dsname,":",".");changeall(dsname," ","");change(dsname,"Demonstration","D");forget(dsname,quiet);copy(objekt.dsname,dsname);OUTPUT VARkopie;CONCR(kopie):=old(dsname);kopie.dsname:=dsname;kopie.modellbezeichner:=modellbezeichner;kopie.kopfzeilentext:=kopfzeilentext;kopie.schluesselfusszeile:=steuerzeilennr;IF NOTframeTHENkopie.mitrahmen:=FALSE;kopie.sourceheight:=kopie.sourceheight-2.0*hoeheeinerrandzeileELSEplotteallerandzeilen(kopie);FI;ret:=erfolgreicherplotversuch(kopie.dsname,ziel);IFret=plotokTHENforget(kopie.dsname,quiet);ELSEforget(kopie.dsname,quiet);plotend;errorstop(meldungstext(ret));FI;.hoeheeinerrandzeile:kopie.standardhoehe+3.0*minyabstand.END PROCversendeoutput;PROCversendeoutput(OUTPUT VARobjekt,TEXT CONSTmodellbezeichner,INT CONSTkopfzeilennr,steuerzeilennr,TEXT CONSTziel):versendeoutput(objekt,modellbezeichner,kopfzeile(kopfzeilennr),steuerzeilennr,ziel);END PROCversendeoutput;INT PROCerfolgreicherplotversuch(TEXT CONSTdatname,TEXT CONSTdestination):TEXT VARzieltask:="";disablestop;IFdestination=alterplottertasknameTHENzieltask:=neuerplottertasknameELSEzieltask:=destinationFI;IFexiststask(zieltask)THEN IFstatus(/zieltask)=2THEN IFplottertaskzuvoll(/zieltask)THENenablestop;mlplottertaskzuvollELSEsicherezuplotterFI ELSEenablestop;mlplottertasknichtempfangsbereitFI ELSEenablestop;mlplottertaskexistiertnichtFI.sicherezuplotter:commanddialogue(FALSE);save(datname,/zieltask);commanddialogue(TRUE);IFiserrorTHENclearerror;enablestop;mlplotunmoeglichELSEenablestop;plotokEND IF.END PROCerfolgreicherplotversuch;BOOL PROCplottertaskzuvoll(TASK CONSTziel):THESAURUS VARth:=ALLziel;INT VARi:=0,anzahl:=0;TEXT VARt;
WHILEi<=highestentry(th)REPget(th,t,i);IFt<>""THENanzahlINCR1;FI;UNTILi=0PER;anzahl>=maxplotobjekteinplottertask.END PROCplottertaskzuvoll;PROCplotohneclear(DIAGRAMM VARp):INT VARi;PICTURE VARpic;beginplot;FORiFROM1UPTOp.anzahlpicfuerkreuzREPpic:=p.kreuz(i);plottepic;PER;FORiFROM1UPTOp.anzahlpicturesREPpic:=p.inhalt(i);plottepic;PER;endplot.plottepic:IFpen(pic)<>0THENpen(0,stdfarbe,stddicke,pen(pic));plot(pic)FI.END PROCplotohneclear;OP:=(OUTPUT VARneu,DATASPACE CONSTspace):CONCR(neu):=space;END OP:=;PROCforget(OUTPUT VARalt):forget(alt.dsname,quiet);END PROCforget;DATASPACE PROCniloutput(INT CONSTbildaufbau,TEXT CONSTspacename):OUTPUT VARneu;forget(spacename,quiet);neu:=new(spacename);type(old(spacename),typnummer);neu.aufbau:=bildaufbau;neu.dsname:=spacename;neu.text1.belegt:=FALSE;neu.text1.aktzeile:=anfangszeile;simselfile(neu.text1.inhalt);neu.text1.naechsteseite:=anfangszeile;neu.text2.belegt:=FALSE;neu.text2.aktzeile:=anfangszeile;simselfile(neu.text2.inhalt);neu.text2.naechsteseite:=anfangszeile;neu.startwerte.belegt:=FALSE;neu.startwerte.aktzeile:=anfangszeile;simselfile(neu.startwerte.inhalt);neu.startwerte.naechsteseite:=anfangszeile;neu.standardhoehe:=stdhoehe;neu.standardbreite:=stdbreite;neu.sourcewidth:=horcm;neu.sourceheight:=vertcm;neu.diag(1).belegt:=FALSE;neu.diag(1).anzahlpictures:=0;neu.diag(2).anzahlpictures:=0;neu.diag(1).anzahlpicfuerkreuz:=0;neu.diag(2).anzahlpicfuerkreuz:=0;neu.diag(2).belegt:=FALSE;neu.mitrahmen:=TRUE;neu.rahmen:=rahmenmitkreuz(bildaufbau);old(neu.dsname).END PROCniloutput;PROCerstellerahmen:INT VARi;PICTURE VARgrenzen;FORiFROM1UPTO6REPgrenzen:=nilpicture;plrahmenunten;plrahmenlinks;plrahmenoben;plrahmenrechts;innererrahmenoben;innererrahmenunten;erstellekreuz;rahmenmitkreuz(i):=grenzen;PER;.plrahmenunten:movecm(grenzen,links,rahmenunten);drawcm(grenzen,rechts,rahmenunten).plrahmenlinks:movecm(grenzen,links,rahmenunten);drawcm(grenzen,links,rahmenoben).plrahmenoben:movecm(grenzen,links,rahmenoben);drawcm(grenzen,rechts,rahmenoben).plrahmenrechts:movecm(grenzen,rechts,rahmenoben);drawcm(grenzen,rechts,rahmenunten).innererrahmenoben:movecm(grenzen,links,oben);drawcm(grenzen,rechts,oben).innererrahmenunten:movecm(grenzen,links,unten);drawcm(grenzen,rechts,unten).erstellekreuz:SELECTiOF CASEstrukt2texte:waagerechtlks;waagerechtrts;CASEstrukttabelleunten:waagerechtlks;waagerechtrts;senkrechtoben;CASEstrukt4fenster:waagerechtlks;waagerechtrts;senkrechtoben;senkrechtunten;CASEstrukttabelleoben:waagerechtlks;waagerechtrts;senkrechtunten;CASEstrukt2diagramme1text:waagerechtlks;senkrechtoben;senkrechtunten;END SELECT;.waagerechtlks:movecm(grenzen,links,spaltenmitte);drawcm(grenzen,zeilenmitte,spaltenmitte).waagerechtrts:movecm(grenzen,zeilenmitte,spaltenmitte);drawcm(grenzen,rechts,spaltenmitte).senkrechtoben:movecm(grenzen,zeilenmitte,spaltenmitte);drawcm(grenzen,zeilenmitte,oben).senkrechtunten:movecm(grenzen,zeilenmitte,spaltenmitte);drawcm(grenzen,zeilenmitte,unten).END PROCerstellerahmen;PROCplotterahmen(OUTPUT VARoutput):beginplot;clear;pen(hintergrund,vordergrund,stddicke,durchgezogen);viewport(links,rechts,rahmenunten,rahmenoben);window(0.0,1.0,0.0,1.0);plot(output.rahmen);endplot;.END PROCplotterahmen;PROCplotterahmendoppelt(OUTPUT VARoutput):viewport(links,rechts,rahmenunten,rahmenoben);window(0.0,1.0,0.0,1.0);beginplot;pen(hintergrund,vordergrund,stddicke,durchgezogen);plot(output.rahmen);endplot;.END PROCplotterahmendoppelt;PROCgebeaufbildschirmaus(OUTPUT VARobjekt,TEXT CONSTbezeichnung,textkopfzeile,INT CONSTsteuerzeilennr):objekt.modellbezeichner:=bezeichnung;objekt.kopfzeilentext:=textkopfzeile;objekt.schluesselfusszeile:=steuerzeilennr;plotterahmen(objekt);plottekopfzeile(objekt.kopfzeilentext,objekt.modellbezeichner);plottedarstellung;plotterahmendoppelt(objekt);loescheeingabepuffer;beginplot;plottefusszeile(objekt,objekt.schluesselfusszeile);endplot;.loescheeingabepuffer:TEXT VARt:="";REPt:=incharetyUNTILt=""PER.plottedarstellung:SELECTobjekt.aufbauOF CASEstrukt1fenster:IF
objekt.text1.belegtTHENplot(fensterganz,objekt.text1)ELIFobjekt.diag(1).belegtTHENplot(fensterganz,objekt)FI;CASEstrukt2texte:IFobjekt.text1.belegtTHENplot(fensteroben,objekt.text1);FI;IFobjekt.text2.belegtTHENplot(fensterunten,objekt.text2)FI;CASEstrukt2diagramme1text:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text1.belegtTHENplot(fensterrechts,objekt.text1);FI;CASEstrukt4fenster:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text1.belegtTHENplot(fensterrechtsoben,objekt.text1);FI;IFobjekt.text2.belegtTHENplot(fensterrechtsunten,objekt.text2);FI;CASEstrukttabelleunten:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.text1.belegtTHENplot(fensterrechtsoben,objekt.text1);FI;IFobjekt.text2.belegtTHENplot(fensterunten,objekt.text2);FI;CASEstrukttabelleoben:IFobjekt.text1.belegtTHENplot(fensteroben,objekt.text1);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text2.belegtTHENplot(fensterrechtsunten,objekt.text2);FI;END SELECT.END PROCgebeaufbildschirmaus;PROCgebeaufbildschirmaus(OUTPUT VARobjekt,TEXT CONSTbezeichnung,INT CONSTkopfzeilennr,steuerzeilennr):IFkopfzeilennr=0THENgebeaufbildschirmaus(objekt,bezeichnung," ",steuerzeilennr);ELSEgebeaufbildschirmaus(objekt,bezeichnung,kopfzeile(kopfzeilennr),steuerzeilennr);FI;END PROCgebeaufbildschirmaus;PROCplotteallerandzeilen(OUTPUT VARobjekt):PICTURE VARrandzeilen:=nilpicture;REAL CONSTgrenzeunten:=2.0*minyabstand+rahmenunten,grenzeoben:=oben+2.0*minyabstand,textende:=rechts-2.0*minyabstand,textanfang:=2.0*minyabstand+links;erstellekopfzeile;erstellesteuerleiste;objekt.rahmenCATrandzeilen;.erstellekopfzeile:TEXT VARzeilentext:=kopfzeilezusammenstellen(objekt.kopfzeilentext,objekt.modellbezeichner,int((textende-textanfang)/buchstbreite));steckekopfzeileinpicture;.steckekopfzeileinpicture:movecm(randzeilen,textanfang,grenzeoben);draw(randzeilen,zeilentext,0.0,buchsthoehe,buchstbreite);.erstellesteuerleiste:IFobjekt.schluesselfusszeile<>0THENmovecm(randzeilen,textanfang,grenzeunten);draw(randzeilen,steuerleiste(objekt.schluesselfusszeile),0.0,buchsthoehe,buchstbreite)FI.END PROCplotteallerandzeilen;PROCplottekopfzeile(TEXT CONSTkopfzeilentext,namedesmodells):REAL CONSTgrenzeoben:=oben+2.0*minyabstand,textende:=rechts-minyabstand,textanfang:=((2.0*minxabstand)+links);erstellekopfzeile;.erstellekopfzeile:TEXT VARzeilentext:=kopfzeilezusammenstellen(kopfzeilentext,namedesmodells,int((textende-textanfang)/buchstbreite));steckekopfzeileinpicture;.steckekopfzeileinpicture:beginplot;viewport(links,rechts,rahmenunten,rahmenoben);pen(0,1,0,1);movecm(textanfang,grenzeoben);draw(zeilentext,0.0,buchsthoehe,buchstbreite);endplot;.END PROCplottekopfzeile;PROCplottefusszeile(OUTPUT VARobjekt,INT CONSTtextnr):REAL CONSTgrenzeunten:=2.0*minyabstand+rahmenunten,textanfang:=((2.0*minxabstand)+links);objekt.schluesselfusszeile:=textnr;erstellesteuerleiste;.erstellesteuerleiste:IFtextnr<>0THENviewport(links,rechts,rahmenunten,rahmenoben);pen(0,1,0,1);movecm(textanfang,grenzeunten);draw(steuerleiste(textnr),0.0,buchsthoehe,buchstbreite)FI.END PROCplottefusszeile;PROCgibzeileaus(PICTURE VARrandzeile):viewport(links,rechts,rahmenunten,rahmenoben);beginplot;plot(randzeile);endplot;END PROCgibzeileaus;OP:=(OUTPUT VARneu,OUTPUT VARalt):CONCR(neu):=old(alt.dsname)END OP:=;PROCdraw(INT CONSTfenster,OUTPUT VARobjekt):SIMSELFILE VARtxt;IF(fenster=fensterganz)COR(fenster=fensteroben)COR(fenster=fensterrechtsoben)COR(fenster=fensterrechts)THENtxt:=objekt.text1.inhaltELIF(fenster=fensterrechtsunten)COR(fenster=fensterunten)THENtxt:=objekt.text2.inhaltFI;setzefensterdaten;schreibeintextfenster;plottetextfenster;.setzefensterdaten:REAL VARlks,rts,un,ob;legefensterfest(objekt,lks,rts,un,ob,fenster);ob:=ob-stdhoehe;INT VARzeilenlaenge:=int((rts-lks)/(stdbreite/verkleinerungbreite));.schreibeintextfenster:PICTURE
 VARplotobj:=nilpicture;REAL VARzeile:=ob;INT VARzeiger;TEXT VARzeilentext;zeiger:=1;WHILEzeile>unCAND NOTeof(txt,zeiger)REPgetline(txt,zeiger,zeilentext);movecm(plotobj,lks,zeile);draw(plotobj,subtext(zeilentext,1,zeilenlaenge),0.0,stdhoehe/verkleinerunghoehe+abstand,stdbreite/verkleinerungbreite);zeigerINCR1;zeile:=zeile-(stdhoehe/verkleinerunghoehe)-abstand;PER;.plottetextfenster:viewport(lks,rts,un,ob);window(0.0,1.0,0.0,1.0);beginplot;plot(plotobj);endplot;.END PROCdraw;PROCplot(INT CONSTfenster,OUTPUT VARobj):DIAGRAMM VARdiagramm;IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENdiagramm:=obj.diag(1)ELSEdiagramm:=obj.diag(2)FI;REAL VARx1,x2,y1,y2;IFdiagramm.belegtTHENplottediagr;FI;.plottediagr:legefensterfest(obj,x1,x2,y1,y2,fenster);window(diagramm.xmin,diagramm.xmax,diagramm.ymin,diagramm.ymax);viewport(x1,x2,y1,y2);plotohneclear(diagramm);.END PROCplot;PROClegefensterfest(OUTPUT VARobj,REAL VARlks,rts,un,ob,INT CONSTfensterlage):SELECTfensterlageOF CASEfensterganz:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=horcm-2.0*abstand;un:=hoehe+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=vertcm-hoehe-abstand-obj.standardhoehe;CASEfensteroben:lks:=(3.0*abstand)+2.0*obj.standardbreite;rts:=horcm-abstand;un:=(vertcm/2.0)+(3.0*abstand);ob:=vertcm-hoehe-2.0*abstand;CASEfensterunten:lks:=(3.0*abstand)+2.0*obj.standardbreite;rts:=horcm-abstand;un:=hoehe+(3.0*abstand);ob:=(vertcm/2.0)-2.0*abstand;CASEfensterlinksoben:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=(horcm/2.0)-2.0*abstand;un:=(vertcm/2.0)+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=vertcm-hoehe-abstand-obj.standardhoehe;CASEfensterlinksunten:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=(horcm/2.0)-2.0*abstand;un:=hoehe+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=(vertcm/2.0)-abstand-obj.standardhoehe;CASEfensterrechts:lks:=horcm/2.0+(3.0*abstand)+obj.standardbreite;rts:=horcm-abstand;un:=hoehe+(2.0*abstand);ob:=vertcm-hoehe-2.0*abstand;CASEfensterrechtsoben:lks:=horcm/2.0+(2.0*abstand);rts:=horcm-abstand;un:=(vertcm/2.0)+(2.0*abstand);ob:=vertcm-hoehe-2.0*abstand;CASEfensterrechtsunten:lks:=horcm/2.0+(2.0*abstand);rts:=horcm-abstand;un:=hoehe+(2.0*abstand);ob:=(vertcm/2.0)-2.0*abstand;END SELECT;END PROClegefensterfest;PROClegefensterfest(INT VARlks,rts,un,ob,INT CONSTfensterlage,):SELECTfensterlageOF CASEfensterganz:lks:=lkszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=obenerstezeile;CASEfensteroben:lks:=lkszeilenanfang;rts:=rtszeilenende;un:=obenletztezeile;ob:=obenerstezeile;CASEfensterunten:lks:=lkszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=untenerstezeile;CASEfensterrechtsoben:lks:=rtszeilenanfang;rts:=rtszeilenende;un:=obenletztezeile;ob:=obenerstezeile;CASEfensterrechtsunten:lks:=rtszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=untenerstezeile;CASEfensterrechts:lks:=rtszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=obenerstezeile;CASEblockstartwerte:lks:=40+1;rts:=78;un:=12;ob:=3;END SELECT;END PROClegefensterfest;OP:=(DIAGRAMM VARa,DIAGRAMM CONSTb):INT VARi;FORiFROM1UPTOb.anzahlpicturesREPa.inhalt(i):=b.inhalt(i)PER;FORiFROMb.anzahlpictures+1UPTOmaxpicturesREPa.inhalt(i):=nilpicture;PER;FORiFROM1UPTOb.anzahlpicfuerkreuzREPa.kreuz(i):=b.kreuz(i)PER;FORiFROMb.anzahlpicfuerkreuz+1UPTOmaxpicturesREPa.kreuz(i):=nilpicture;PER;a.belegt:=b.belegt;a.anzahlpictures:=b.anzahlpictures;a.anzahlpicfuerkreuz:=b.anzahlpicfuerkreuz;a.xmin:=b.xmin;a.xmax:=b.xmax;a.ymin:=b.ymin;a.ymax:=b.ymax;END OP:=;PROCnilkreuz(OUTPUT VARa,INT CONSTfenster):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENa.diag(1).anzahlpicfuerkreuz:=0;ELSEa.diag(2).anzahlpicfuerkreuz:=0;FI;END PROCnilkreuz;PROCnildiagramm(OUTPUT VARa,INT CONSTfenster):nildiagrammmitkreuz(a,fenster);nilkreuz(a,fenster);END PROCnildiagramm;PROCnildiagrammmitkreuz(OUTPUT VARa,INT CONSTfenster):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENa.diag(1).anzahlpictures:=0;a.diag(1).belegt:=TRUE;IFa.aufbau=strukt1fensterTHENa.text1.belegt:=FALSE FI;ELSEa.diag(2)
.anzahlpictures:=0;a.diag(2).belegt:=TRUE;FI;END PROCnildiagrammmitkreuz;PROCputpicture(OUTPUT VARa,INT CONSTfenster,PICTURE CONSTpic):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THEN IFa.diag(1).anzahlpictures<maxpicturesTHENa.diag(1).anzahlpicturesINCR1;a.diag(1).inhalt(a.diag(1).anzahlpictures):=pic;FI;ELSE IFa.diag(2).anzahlpictures<maxpicturesTHENa.diag(2).anzahlpicturesINCR1;a.diag(2).inhalt(a.diag(2).anzahlpictures):=pic;FI;FI;END PROCputpicture;PROCputkreuz(OUTPUT VARa,INT CONSTfenster,PICTURE CONSTpic):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THEN IFa.diag(1).anzahlpicfuerkreuz<maxpicturesTHENa.diag(1).anzahlpicfuerkreuzINCR1;a.diag(1).kreuz(a.diag(1).anzahlpicfuerkreuz):=pic;FI;ELSE IFa.diag(2).anzahlpicfuerkreuz<maxpicturesTHENa.diag(2).anzahlpicfuerkreuzINCR1;a.diag(2).kreuz(a.diag(2).anzahlpicfuerkreuz):=pic;FI;FI;END PROCputkreuz;PROCwindow(OUTPUT VARa,INT CONSTfenster,REAL CONSTx1,x2,y1,y2):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENa.diag(1).xmin:=x1;a.diag(1).xmax:=x2;a.diag(1).ymin:=y1;a.diag(1).ymax:=y2;ELSEa.diag(2).xmin:=x1;a.diag(2).xmax:=x2;a.diag(2).ymin:=y1;a.diag(2).ymax:=y2;FI;END PROCwindow;PROCwindow(OUTPUT VARa,INT CONSTfenster,REAL CONSTy1,y2):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENa.diag(1).ymin:=y1;a.diag(1).ymax:=y2;ELSEa.diag(2).ymin:=y1;a.diag(2).ymax:=y2;FI;END PROCwindow;PROCreplace(OUTPUT VARoutput,FILE CONSTfenstertext):FILE VARzwischenfile:=fenstertext;output.startwerte.belegt:=TRUE;output.startwerte.inhalt:=zwischenfile;output.startwerte.aktzeile:=anfangszeile;output.startwerte.naechsteseite:=anfangszeile;END PROCreplace;PROCreplace(OUTPUT VARoutput,INT CONSTfenster,FILE CONSTfenstertext):FILE VARzwischenfile:=fenstertext;IF(fenster=fensterganz)COR(fenster=fensteroben)COR(fenster=fensterrechtsoben)COR(fenster=fensterrechts)THENoutput.text1.belegt:=TRUE;output.text1.inhalt:=zwischenfile;output.text1.aktzeile:=anfangszeile;output.text1.naechsteseite:=anfangszeile;IFoutput.aufbau=strukt1fensterTHENoutput.diag(1).belegt:=FALSE;FI;ELIF(fenster=fensterrechtsunten)COR(fenster=fensterunten)THENoutput.text2.belegt:=TRUE;output.text2.inhalt:=zwischenfile;output.text2.aktzeile:=anfangszeile;output.text2.naechsteseite:=anfangszeile;FI;END PROCreplace;PROCplot(INT CONSTfenster,NURTEXT VARobj):setzefensterdaten;schreibe;.setzefensterdaten:INT VARlks,rts,un,ob;legefensterfest(lks,rts,un,ob,fenster);INT VARzeilenlaenge:=rts-lks+1;.schreibe:INT VARzeile:=ob,zeiger;TEXT VARzeilentext,ausgabezeile,leerzeile:=zeilenlaenge*" ";zeiger:=obj.aktzeile;FORzeileFROMobUPTOunWHILE NOTeof(obj.inhalt,zeiger)REPgetline(obj.inhalt,zeiger,zeilentext);ausgabezeile:=leerzeile;replace(ausgabezeile,1,zeilentext);cursor(lks,zeile);out(ausgabezeile);zeigerINCR1;PER;ob:=zeile;FORzeileFROMobUPTOunREPcursor(lks,zeile);loeschezeile;PER;IFeof(obj.inhalt,zeiger)THENobj.naechsteseite:=anfangszeileELSEobj.naechsteseite:=zeigerFI;.loeschezeile:out(leerzeile);.END PROCplot;FILE OP FILESUB(OUTPUT VARobjekt,INT CONSTfenster):TEXT VARfiletext;INT VARi;IFexists(teilfenster)THENforget(teilfenster,quiet)FI;FILE VARf:=sequentialfile(output,teilfenster);IF(fenster=fensterganz)COR(fenster=fensteroben)COR(fenster=fensterrechtsoben)COR(fenster=fensterrechts)THENholetext1ELSEholetext2FI;f.holetext1:FORiFROM1UPTOzeilenanzahl(objekt.text1.inhalt)REPgetline(objekt.text1.inhalt,i,filetext);putline(f,filetext);PER;.holetext2:FORiFROM1UPTOzeilenanzahl(objekt.text2.inhalt)REPgetline(objekt.text2.inhalt,i,filetext);putline(f,filetext);PER;.END OP FILESUB;PROCblaettere(OUTPUT VARobjekt,INT CONSTfenster):plottenaechsteseite;IF NOT(fenster=blockstartwerte)THENplotterahmendoppelt(objekt);FI.plottenaechsteseite:IF(fenster=fensterganz)COR(fenster=fensteroben)COR(fenster=fensterrechtsoben)COR(fenster=fensterrechts)THENobjekt.text1.aktzeile:=objekt.text1.naechsteseite;ELIFfenster=blockstartwerteTHENobjekt.startwerte.aktzeile:=objekt.startwerte.naechsteseite;ELSEobjekt.text2.aktzeile:=objekt.text2.naechsteseite;FI;
SELECTfensterOF CASEfensterganz:plot(fensterganz,objekt.text1)CASEfensteroben:plot(fensteroben,objekt.text1)CASEfensterunten:plot(fensterunten,objekt.text2)CASEfensterrechts:plot(fensterrechts,objekt.text1)CASEfensterrechtsoben:plot(fensterrechtsoben,objekt.text1)CASEfensterrechtsunten:plot(fensterrechtsunten,objekt.text2)CASEblockstartwerte:plot(blockstartwerte,objekt.startwerte)END SELECT.END PROCblaettere;PROCblaettern(OUTPUT VARobjekt):SELECTobjekt.aufbauOF CASEstrukt1fenster:blaettere(objekt,fensterganz)CASEstrukt2diagramme1text:blaettere(objekt,fensterrechts)OTHERWISEerrorstop("falsches Fenster");END SELECT;plotterahmendoppelt(objekt);END PROCblaettern;PROCblaetternoben(OUTPUT VARobjekt):SELECTobjekt.aufbauOF CASEstrukt2texte:blaettere(objekt,fensteroben)CASEstrukt4fenster:blaettere(objekt,fensterrechtsoben)CASEstrukttabelleunten:blaettere(objekt,fensterrechtsoben)CASEstrukttabelleoben:blaettere(objekt,fensteroben)OTHERWISEerrorstop("falsches Fenster");END SELECT;plotterahmendoppelt(objekt);END PROCblaetternoben;PROCblaetternunten(OUTPUT VARobjekt):SELECTobjekt.aufbauOF CASEstrukt2texte:blaettere(objekt,fensterunten)CASEstrukt4fenster:blaettere(objekt,fensterrechtsunten)CASEstrukttabelleunten:blaettere(objekt,fensterunten)CASEstrukttabelleoben:blaettere(objekt,fensterrechtsunten)OTHERWISEerrorstop("falsches Fenster");END SELECT;plotterahmendoppelt(objekt);END PROCblaetternunten;BOOL PROCeof(SIMSELFILE VARn,INT CONSTaktuellezeile):aktuellezeile>zeilenanzahl(n).END PROCeof;OP:=(SIMSELFILE VARa,FILE VARb):INT VARi;input(b);FORiFROM1UPTOmaxfilezeilenWHILE NOTeof(b)REPgetline(b,a.filezeile(i));PER;a.zeilenanzahl:=i-1;END OP:=;OP:=(SIMSELFILE VARa,SIMSELFILE VARb):INT VARi;FORiFROM1UPTOb.zeilenanzahlREPa.filezeile(i):=b.filezeile(i);PER;a.zeilenanzahl:=b.zeilenanzahl;END OP:=;PROCsimselfile(SIMSELFILE VARsf):sf.zeilenanzahl:=0;END PROCsimselfile;PROCgetline(SIMSELFILE VARsf,INT CONSTzeiger,TEXT VARinhalt):IFzeiger<=sf.zeilenanzahlTHENinhalt:=sf.filezeile(zeiger);FI;END PROCgetline;INT PROCzeilenanzahl(SIMSELFILE VARsf):sf.zeilenanzahl.END PROCzeilenanzahl;BOOL VARframe:=TRUE;PROCsetzerahmen(BOOL CONSTx):frame:=xEND PROCsetzerahmen;TEXT PROCkopfzeilezusammenstellen(TEXT CONSTkopfzeilentext,namedesmodells,INT CONSTlaenge):TEXT VARzeilenanfang:=compress(auskunftstext(produktname))+zwischenraum,produktn:=compress(auskunftstext(produktname)),zeilenende:="";IFlength(namedesmodells)<length(produktn)THENzeilenende:=(length(produktn)-length(namedesmodells))*" ";FI;zeilenende:=zeilenende+zwischenraum+namedesmodells;INT VARzeilenrest:=laenge-length(zeilenanfang+zeilenende),blanks:=0;IFzeilenrest<length(kopfzeilentext)THENunterdrueckemodellnameFI;lieferekopfzeile.unterdrueckemodellname:zeilenanfang:=compress(auskunftstext(produktname));zeilenende:="";zeilenrest:=laenge-length(zeilenanfang);.lieferekopfzeile:zeilenrest:=zeilenrest-length(kopfzeilentext);blanks:=zeilenrestDIV2;zeilenanfang+(blanks*" ")+kopfzeilentext+(blanks*" ")+zeilenende.END PROCkopfzeilezusammenstellen;END PACKEToutput;