1
2
3
4
5
|
PACKEToutputDEFINES OUTPUT,:=,niloutput,legefensterfest,plotteoutput,realarea,endgeraetbreite,graphikbreite,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,maxfilezeilen=500,anfangszeile=1,typnummer=1055,lkszeilenanfang=4,rtszeilenanfang=42,rtszeilenende=79,obenerstezeile=3,obenletztezeile=12,untenerstezeile=14,untenletztezeile=23;REAL VARdruckerfaktor:=1.0,horcm,vertcm,width,height;INT VARpixhor,pixvert;drawingarea(horcm,vertcm,pixhor,pixvert);width:=horcm;height:=vertcm;REAL VARbuchsthoehe:=stdhoehe,buchstbreite:=stdbreite,minyabstand:=0.1,minxabstand:=buchstbreite/3.0;REAL VARhoehe:=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:=1.57,verkleinerungbreite:=1.2;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);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;FORiFROM1UPTO6REPrahmenmitkreuz(i):=erstellerahmen(i)PER;END PROCerstellerahmen;PICTURE PROCerstellerahmen(INT CONSTi):PICTURE VARgrenzen;grenzen:=nilpicture;plrahmenunten;plrahmenlinks;plrahmenoben;plrahmenrechts;innererrahmenoben;innererrahmenunten;erstellekreuz;grenzen.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(druckerfaktor*links,druckerfaktor*rechts,druckerfaktor*rahmenunten,druckerfaktor*rahmenoben);window(0.0,1.0,0.0,1.0);plot(output.rahmen);endplot;END PROCplotterahmen;PROCplotteoutput(THESAURUS CONSTth):do(PROC(TEXT CONST)plotteoutput,th)END PROCplotteoutput;PROCplotteoutput(TEXT CONSTdsname):enablestop;IFexists(dsname)THEN OUTPUT VARobjekt:=old(dsname)IF NOT(type(old(dsname))=typnummer)THENputline("Datenraum hat falschen Typ!");LEAVEplotteoutput;FI;ELSEputline("Datenraum existiert nicht!");LEAVEplotteoutputFI;setzeabmessungenbezueglichendgeraet;beginplot;clear;viewport(druckerfaktor*links,druckerfaktor*rechts,druckerfaktor*rahmenunten,druckerfaktor*rahmenoben);window(0.0,1.0,0.0,1.0);pen(0,1,0,1);IFobjekt.mitrahmenTHENplot(objekt.rahmen)FI;plottedarstellung;plotend;.setzeabmessungenbezueglichendgeraet:IFwidth>horcmTHENwidth:=horcmFI;height:=(width/objekt.sourcewidth)*objekt.sourceheight;IFheight>vertcmTHENheight:=vertcm;width:=(height/objekt.sourceheight)*objekt.sourcewidthFI;IFobjekt.mitrahmenTHENhoehe:=objekt.standardhoehe+3.0*minyabstandELSEhoehe:=0.0FI;rechts:=objekt.sourcewidth;spaltenmitte:=objekt.sourceheight/2.0;oben:=objekt.sourceheight-hoehe;unten:=hoehe;zeilenmitte:=objekt.sourcewidth/2.0;rahmenoben:=objekt.sourceheight;rahmenunten:=0.0;abstand:=0.1;druckerfaktor:=width/objekt.sourcewidth;cmfaktor(druckerfaktor).plottedarstellung:SELECTobjekt.aufbauOF CASEstrukt1fenster:IFobjekt.text1.belegtTHENdraw(fensterganz,objekt)ELIFobjekt.diag(1).belegtTHENplot(fensterganz,objekt)FI;CASEstrukt2texte:IFobjekt.text1.belegtTHENdraw(fensteroben,objekt);FI;IFobjekt.text2.belegtTHENdraw(fensterunten,objekt);FI;CASEstrukt2diagramme1text:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text1.belegtTHENdraw(fensterrechts,objekt);FI;CASEstrukt4fenster:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text1.belegtTHENdraw(fensterrechtsoben,objekt);FI;IFobjekt.text2.belegtTHENdraw(fensterrechtsunten,objekt);FI;CASEstrukttabelleunten:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.text1.belegtTHENdraw(fensterrechtsoben,objekt);FI;IFobjekt.text2.belegtTHENdraw(fensterunten,objekt);FI;CASEstrukttabelleoben:IFobjekt.text1.belegtTHENdraw(fensteroben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text2.belegtTHENdraw(fensterrechtsunten,objekt);FI;END SELECT.END PROCplotteoutput;PROCendgeraetbreite(REAL CONSTbreite):width:=min(breite,horcm)END PROCendgeraetbreite;REAL PROCendgeraetbreite:widthEND PROCendgeraetbreite;PROCgraphikbreite(OUTPUT CONSTobj,REAL VARpapierbreite,endbreite):papierbreite:=min(vertcm,papierbreite);endbreite:=papierbreite/obj.sourceheight*obj.sourcewidth;IFendbreite>horcmTHENendbreite:=horcm;papierbreite:=endbreite/obj.sourcewidth*obj.sourceheightFI END PROCgraphikbreite;PROCrealarea(TEXT CONSToutputname,REAL VARquellbreite,quellhoehe):OUTPUT VARobj:=old(outputname);quellbreite:=obj.sourcewidth;quellhoehe:=obj.sourceheightEND PROCrealarea;PROCgibzeileaus(PICTURE VARrandzeile):viewport(druckerfaktor*links,druckerfaktor*rechts,druckerfaktor*rahmenunten,druckerfaktor*
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-objekt.standardhoehe;INT VARzeilenlaenge:=int((rts-lks)/(objekt.standardbreite/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,objekt.standardhoehe/verkleinerunghoehe,objekt.standardbreite/verkleinerungbreite);zeigerINCR1;zeile:=zeile-(objekt.standardhoehe/verkleinerunghoehe)-abstand;PER;.plottetextfenster:viewport(druckerfaktor*lks,druckerfaktor*rts,druckerfaktor*un,druckerfaktor*ob);window(0.0,1.0,0.0,1.0);beginplot;pen(0,stdfarbe,stddicke,durchgezogen);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(druckerfaktor*x1,druckerfaktor*x2,druckerfaktor*y1,druckerfaktor*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:=obj.sourcewidth-2.0*abstand;un:=hoehe+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=obj.sourceheight-hoehe-abstand-obj.standardhoehe;CASEfensteroben:lks:=(3.0*abstand)+2.0*obj.standardbreite;rts:=obj.sourcewidth-abstand;un:=(obj.sourceheight/2.0)+(3.0*abstand);ob:=obj.sourceheight-hoehe-2.0*abstand;CASEfensterunten:lks:=(3.0*abstand)+2.0*obj.standardbreite;rts:=obj.sourcewidth-abstand;un:=hoehe+(3.0*abstand);ob:=(obj.sourceheight/2.0)-2.0*abstand;CASEfensterlinksoben:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=(obj.sourcewidth/2.0)-2.0*abstand;un:=(obj.sourceheight/2.0)+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=obj.sourceheight-hoehe-abstand-obj.standardhoehe;CASEfensterlinksunten:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=(obj.sourcewidth/2.0)-2.0*abstand;un:=hoehe+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=(obj.sourceheight/2.0)-abstand-obj.standardhoehe;CASEfensterrechts:lks:=obj.sourcewidth/2.0+(3.0*abstand)+obj.standardbreite;rts:=obj.sourcewidth-abstand;un:=hoehe+(2.0*abstand);ob:=obj.sourceheight-hoehe-2.0*abstand;CASEfensterrechtsoben:lks:=obj.sourcewidth/2.0+(2.0*abstand);rts:=obj.sourcewidth-abstand;un:=(obj.sourceheight/2.0)+(2.0*abstand);ob:=obj.sourceheight-hoehe-2.0*abstand;CASEfensterrechtsunten:lks:=obj.sourcewidth/2.0+(2.0*abstand);rts:=obj.sourcewidth-abstand;un:=hoehe+(2.0*abstand);ob:=(obj.sourceheight/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:=;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;END PACKEToutput;
|