summaryrefslogtreecommitdiff
path: root/app/schulis-simulationssystem/3.0/src/ls dateiscroll
blob: fa923cf463ee2908e00926f37c6d6d0a31f7a19d (plain)
1
2
3
4
5
PACKETlsscrollDEFINESscroll,grossesrahmenfenster,tabellenfensteroben,tabellenfensterunten,scrollfenster:LETniltext="",bell="�",left="�",right="�",runter="
",hoch="�",hop="�",esc="�";PROCscroll(WINDOW VARw,TEXT CONSTdatname,INT CONSTxscroll,yscroll,horizontalscroll,INT VARerstersatz,erstespalte,TEXT CONSTsonderzeichen,TEXT VARausstiegzeichen):FILE VARf:=sequentialfile(input,datname);scroll(w,f,xscroll,yscroll,horizontalscroll,erstersatz,erstespalte,sonderzeichen,ausstiegzeichen)END PROCscroll;PROCscroll(WINDOW VARw,FILE VARf,INT CONSTxscroll,yscroll,horizontalscroll,INT VARerstersatz,erstespalte,TEXT CONSTsonderzeichen,TEXT VARausstiegzeichen):BOOL VARveraenderungderkopfzeilen:=TRUE,veraenderungdervariablenspalte:=TRUE;bestimmemaximalwertederdatei;bereiteausgabevor;REPzeigedateiausschnitt;IFsonderzeichen=niltextTHEN LEAVEscrollEND IF;werteeingabezeichenaus;veraenderungdervariablenspalte:=NOTveraenderungderkopfzeilenEND REP.bestimmemaximalwertederdatei:TEXT VARzeile;input(f);INT VARmaxspalten:=0,maxzeilen:=lines(f);WHILE NOTeof(f)REPgetline(f,zeile);IFlength(zeile)>maxspaltenTHENmaxspalten:=length(zeile)END IF END REP.bereiteausgabevor:INT CONSTbreite:=areaxsize(w),laenge:=areaysize(w),xbeginn:=areax(w),ybeginn:=areay(w),letzterzeilenanfang:=maxzeilen-laenge+yscroll,ausgabebreite:=breite-xscroll-1,ausgabelaenge:=laenge-yscroll+1,letzterspaltenanfang:=jenachdem;modify(f).jenachdem:IFhorizontalscroll>1THENmaxspalten-horizontalscroll+2ELSEmaxspalten-ausgabebreiteEND IF.zeigedateiausschnitt:TEXT VARsatz,ausgabezeile;INT VARi,ypos;IFveraenderungderkopfzeilenTHENypos:=ybeginn;FORiFROM1UPTOyscroll-1REPtoline(f,i);readrecord(f,satz);ausgabezeile:=subtext(satz,1,xscroll-1);ausgabezeileCATsubtext(satz,erstespalte,erstespalte+ausgabebreite+1);cursor(xbeginn,ypos);out(text(ausgabezeile,breite));yposINCR1END REP ELSEypos:=ybeginn+yscroll-1END IF;i:=erstersatz;REPtoline(f,i);readrecord(f,satz);IFveraenderungdervariablenspalteTHENcursor(xbeginn,ypos);out(text(satz,xscroll-1,1))END IF;cursor(xbeginn+xscroll-1,ypos);out(text(satz,breite-xscroll+1,erstespalte));yposINCR1;iINCR1UNTILypos-ybeginn>laenge-1END REP.werteeingabezeichenaus:TEXT VARch;REPinchar(ch);IFch=leftTHEN IFerstespalte>xscrollTHENscrollelinksEND IF ELIFch=rightTHEN IFerstespalte<letzterspaltenanfangTHENscrollerechtsEND IF ELIFch=hochTHEN IFerstersatz>yscrollTHENscrollezurueckEND IF ELIFch=runterTHEN IFerstersatz<letzterzeilenanfangTHENscrollevorEND IF ELIFch=hopTHENinchar(ch);IFch=leftTHEN IFerstespalte>xscrollTHENblaetterelinksEND IF ELIFch=rightTHEN IFerstespalte<letzterspaltenanfangTHENblaettererechtsEND IF ELIFch=hochTHEN IFerstersatz>yscrollTHENblaetterezurueckEND IF ELIFch=runterTHEN IFerstersatz<letzterzeilenanfangTHENblaetterevorEND IF ELSEout(bell)END IF ELIFch=escTHENinchar(ausstiegzeichen);IFausstiegzeichen="1"CANDerstersatz>yscrollTHENspringeandenanfangELIFausstiegzeichen="9"CANDerstersatz<letzterzeilenanfangTHENspringeandasendeELIFpos(sonderzeichen,ausstiegzeichen)<>0THEN LEAVEscrollEND IF END IF END REP.scrollelinks:erstespalteDECRhorizontalscroll;erstespalte:=max(erstespalte,xscroll);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.scrollerechts:erstespalteINCRhorizontalscroll;erstespalte:=min(erstespalte,letzterspaltenanfang);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.scrollezurueck:erstersatzDECR1;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.scrollevor:erstersatzINCR1;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.blaetterelinks:erstespalteDECRausgabebreite;erstespalte:=max(erstespalte,xscroll);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.blaettererechts:erstespalteINCRausgabebreite;erstespalte:=min(erstespalte,letzterspaltenanfang);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.blaetterezurueck:erstersatzDECRausgabelaenge;erstersatz:=max(erstersatz,yscroll);veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.blaetterevor:erstersatzINCRausgabelaenge;erstersatz:=min(
erstersatz,letzterzeilenanfang);veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.springeandenanfang:erstersatz:=yscroll;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.springeandasende:erstersatz:=max(yscroll,letzterzeilenanfang);veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenausEND PROCscroll;PROCscroll(WINDOW VARwo,wu,TEXT CONSTdatnameo,datnameu,INT CONSTxscroll,yscroll,horizontalscroll,INT VARerstersatzo,erstespalte,erstersatzu,TEXT CONSTsonderzeichen,TEXT VARausstiegzeichen):BOOL VARveraenderungderkopfzeilen:=TRUE,veraenderungdervariablenspalte:=TRUE;bestimmemaximalwertederdatei;bereiteausgabevor;REPzeigedateiausschnittoben;zeigedateiausschnittunten;IFsonderzeichen=niltextTHEN LEAVEscrollEND IF;werteeingabezeichenaus;veraenderungdervariablenspalte:=NOTveraenderungderkopfzeilenEND REP.bestimmemaximalwertederdatei:TEXT VARzeile;FILE VARfo:=sequentialfile(input,datnameo),fu:=sequentialfile(input,datnameu);INT VARmaxspalten:=0,maxzeileno:=lines(fo),maxzeilenu:=lines(fu);WHILE NOTeof(fo)REPgetline(fo,zeile);IFlength(zeile)>maxspaltenTHENmaxspalten:=length(zeile)END IF END REP.bereiteausgabevor:INT CONSTbreite:=areaxsize(wo),laenge:=areaysize(wo),xbeginn:=areax(wo),ybeginno:=areay(wo),ybeginnu:=areay(wu),letzterzeilenanfango:=maxzeileno-laenge+yscroll,letzterzeilenanfangu:=maxzeilenu-laenge+yscroll,ausgabebreite:=breite-xscroll-1,ausgabelaenge:=laenge-yscroll+1,letzterspaltenanfang:=jenachdem;modify(fo);modify(fu);.jenachdem:IFhorizontalscroll>1THENmaxspalten-horizontalscroll+2ELSEmaxspalten-ausgabebreiteEND IF.zeigedateiausschnittoben:TEXT VARsatz,ausgabezeile;INT VARi,ypos;IFveraenderungderkopfzeilenTHENypos:=ybeginno;FORiFROM1UPTOyscroll-1REPtoline(fo,i);readrecord(fo,satz);ausgabezeile:=subtext(satz,1,xscroll-1);ausgabezeileCATsubtext(satz,erstespalte,erstespalte+ausgabebreite+1);cursor(xbeginn,ypos);out(text(ausgabezeile,breite));yposINCR1END REP ELSEypos:=ybeginno+yscroll-1END IF;i:=erstersatzo;REPtoline(fo,i);readrecord(fo,satz);IFveraenderungdervariablenspalteTHENcursor(xbeginn,ypos);out(text(satz,xscroll-1,1))END IF;cursor(xbeginn+xscroll-1,ypos);out(text(satz,breite-xscroll+1,erstespalte));yposINCR1;iINCR1UNTILypos-ybeginno>laenge-1END REP.zeigedateiausschnittunten:IFveraenderungderkopfzeilenTHENypos:=ybeginnu;FORiFROM1UPTOyscroll-1REPtoline(fu,i);readrecord(fu,satz);ausgabezeile:=subtext(satz,1,xscroll-1);ausgabezeileCATsubtext(satz,erstespalte,erstespalte+ausgabebreite+1);cursor(xbeginn,ypos);out(text(ausgabezeile,breite));yposINCR1END REP ELSEypos:=ybeginnu+yscroll-1END IF;i:=erstersatzu;REPtoline(fu,i);readrecord(fu,satz);IFveraenderungdervariablenspalteTHENcursor(xbeginn,ypos);out(text(satz,xscroll-1,1))END IF;cursor(xbeginn+xscroll-1,ypos);out(text(satz,breite-xscroll+1,erstespalte));yposINCR1;iINCR1UNTILypos-ybeginnu>laenge-1END REP.werteeingabezeichenaus:TEXT VARch;REPinchar(ch);IFch=leftTHEN IFerstespalte>xscrollTHENscrollelinksEND IF ELIFch=rightTHEN IFerstespalte<letzterspaltenanfangTHENscrollerechtsEND IF ELIFch=hochTHEN IFerstersatzo>yscrollCORerstersatzu>yscrollTHENscrollezurueckEND IF ELIFch=runterTHEN IFerstersatzo<letzterzeilenanfangoCORerstersatzu<letzterzeilenanfanguTHENscrollevorEND IF ELIFch=hopTHENinchar(ch);IFch=leftTHEN IFerstespalte>xscrollTHENblaetterelinksEND IF ELIFch=rightTHEN IFerstespalte<letzterspaltenanfangTHENblaettererechtsEND IF ELIFch=hochTHEN IFerstersatzo>yscrollORerstersatzu>yscrollTHENblaetterezurueckEND IF ELIFch=runterTHEN IFerstersatzo<letzterzeilenanfangoORerstersatzu<letzterzeilenanfanguTHENblaetterevorEND IF ELSEout(bell)END IF ELIFch=escTHENinchar(ausstiegzeichen);IFausstiegzeichen="1"CAND(erstersatzo>yscrollORerstersatzu>yscroll)THENspringeandenanfangELIFausstiegzeichen="9"CAND(erstersatzo<letzterzeilenanfangoORerstersatzu<letzterzeilenanfangu)THENspringeandasendeELIFpos(sonderzeichen,ausstiegzeichen)<>0THEN LEAVEscrollEND IF END IF END REP.scrollelinks:erstespalteDECRhorizontalscroll;erstespalte:=max(erstespalte,xscroll);
veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.scrollerechts:erstespalteINCRhorizontalscroll;erstespalte:=min(erstespalte,letzterspaltenanfang);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.scrollezurueck:IFerstersatzo>yscrollTHENerstersatzoDECR1;FI;IFerstersatzu>yscrollTHENerstersatzuDECR1;FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.scrollevor:IFerstersatzo<letzterzeilenanfangoTHENerstersatzoINCR1;FI;IFerstersatzu<letzterzeilenanfanguTHENerstersatzuINCR1;FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.blaetterelinks:erstespalteDECRausgabebreite;erstespalte:=max(erstespalte,xscroll);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.blaettererechts:erstespalteINCRausgabebreite;erstespalte:=min(erstespalte,letzterspaltenanfang);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.blaetterezurueck:IFerstersatzo>yscrollTHENerstersatzoDECRausgabelaenge;erstersatzo:=max(erstersatzo,yscroll);FI;IFerstersatzu>yscrollTHENerstersatzuDECRausgabelaenge;erstersatzu:=max(erstersatzu,yscroll);FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.blaetterevor:IFerstersatzo<letzterzeilenanfangoTHENerstersatzoINCRausgabelaenge;erstersatzo:=min(erstersatzo,letzterzeilenanfango);FI;IFerstersatzu<letzterzeilenanfanguTHENerstersatzuINCRausgabelaenge;erstersatzu:=min(erstersatzu,letzterzeilenanfangu);FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.springeandenanfang:IF(erstersatzo>yscroll)THENerstersatzo:=yscroll;FI;IF(erstersatzu>yscroll)THENerstersatzu:=yscroll;FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.springeandasende:IFerstersatzo<letzterzeilenanfangoTHENerstersatzo:=max(yscroll,letzterzeilenanfango);FI;IFerstersatzu<letzterzeilenanfanguTHENerstersatzu:=max(yscroll,letzterzeilenanfangu);FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.END PROCscroll;WINDOW PROCgrossesrahmenfenster:WINDOW VARfsingle:=window(2,5,77,17);fsingle.END PROCgrossesrahmenfenster;WINDOW PROCscrollfenster:WINDOW VARfshow:=window(4,5,74,17);fshow.END PROCscrollfenster;WINDOW PROCtabellenfensteroben:WINDOW VARw1:=window(2,5,76,8);w1.END PROCtabellenfensteroben;WINDOW PROCtabellenfensterunten:WINDOW VARw2:=window(2,15,76,8);w2.END PROCtabellenfensterunten;END PACKETlsscroll;