PACKETkoordinatenDEFINES GPOS,MPOS,null,:=,=,igpos,jgpos,impos,jmpos,iwindowpos,jwindowpos,gpos,mpos,newmpos,gcursor,getgcursor,bewegecursor,standardfenster,imgitter,igittersize,jgittersize,gitterfenster,gitterstart,:LETmaxlength=9,maxheight=1,habstand=4,vabstand=2,xsize=77,ysize=20,maxi=20,maxj=10;TEXT CONSTcursorbewegungen:="��� ��"+return+rubin+rubout;LETreturn=" ",rubin="�",rubout="�",hop="�",piep="�";WINDOW VARfenster:=window(2,2,xsize,ysize);WINDOW PROCstandardfenster:fensterEND PROCstandardfenster;TYPE GITTERFENSTER=STRUCT(MPOSstart,INTisize,jsize);TYPE GPOS=STRUCT(INTi,j);TYPE MPOS=STRUCT(INTi,j);GPOS PROCgpos(INT CONSTi,j):GPOS VARg;g.i:=i;g.j:=j;gENDPROCgpos;OP:=(GPOS VARl,GPOS CONSTr):CONCR(l):=CONCR(r)ENDOP:=;INT PROCigpos(GPOS CONSTg):g.iEND PROCigpos;INT PROCjgpos(GPOS CONSTg):g.jEND PROCjgpos;BOOL OP=(GPOS CONSTl,r):(l.i=r.i)AND(l.j=r.j)END OP=;MPOS PROCnewmpos(INT CONSTi,j):MPOS VARm;m.i:=i;m.j:=j;mEND PROCnewmpos;MPOS PROCnull:MPOS VARm;m.i:=0;m.j:=0;mEND PROCnull;BOOL OP=(MPOS CONSTl,r):(l.i=r.i)AND(l.j=r.j)END OP=;OP:=(MPOS VARl,MPOS CONSTr):CONCR(l):=CONCR(r)ENDOP:=;INT PROCimpos(MPOS CONSTm):m.iEND PROCimpos;INT PROCjmpos(MPOS CONSTm):m.jEND PROCjmpos;MPOS PROCmpos(GPOS CONSTg):newmpos(standardgitter.start.i+g.i-1,standardgitter.start.j+g.j-1)ENDPROCmpos;GPOS PROCgpos(MPOS CONSTm):GPOS VARg;IF NOTimgitter(m)THENg.i:=0;g.j:=0;ELSEg.i:=m.i-standardgitter.start.i+1;g.j:=m.j-standardgitter.start.j+1FI;gENDPROCgpos;INT PROCiwindowpos(GPOS CONSTgitterpos):(gitterpos.i-1)*(maxlength+2+habstand)+3END PROCiwindowpos;INT PROCjwindowpos(GPOS CONSTgitterpos):(gitterpos.j-1)*(maxheight+2+vabstand)+2END PROCjwindowpos;BOOL PROCimgitter(MPOS CONSTmp):standardgitter.start.i<=mp.iANDstandardgitter.start.j<=mp.jANDmp.i-standardgitter.start.imaxiORstart.j<1ORstart.j>maxj.berechneisizeundjsize:standardgitter.start:=start;standardgitter.isize:=(xsize+1)DIVxsizeeinerboxsamtumgebung;standardgitter.jsize:=(ysize+1)DIVysizeeinerboxsamtumgebung.xsizeeinerboxsamtumgebung:(maxlength+habstand+2).ysizeeinerboxsamtumgebung:(maxheight+vabstand+2).END PROCgitterfenster;PROCverschiebegitter(INT CONSThor,vert,PROCkonstruierediagrammimneuengitterfenster):MPOS VARstartmp:=mpos(gpos(1,1));gitterfenster(newmpos(imp,jmp));konstruierediagrammimneuengitterfenster.imp:max(1,min(maxi-igittersize+1,impos(startmp)+hor)).jmp:max(1,min(maxj-jgittersize+1,jmpos(startmp)+vert)).END PROCverschiebegitter;GPOS VARgittercursor;gittercursor.i:=1;gittercursor.j:=1;PROCgcursor(GPOS CONSTg):WINDOW VARw:=fenster;IFimgitter(g)THENgittercursor:=g;cursor(w,iwindowpos(g),jwindowpos(g))FI END PROCgcursor;GPOS PROCgetgcursor:gittercursorEND PROCgetgcursor;PROCbewegecursor(GPOS VARgp,TEXT VARtaste,PROCneuesbild):INT VARsooftwie,schritte;MPOS VARaktuellempos;gcursor(gp);REPgp:=getgcursor;inchar(taste);IFtaste=hopTHENlieshopsequenzELSEsooftwie:=1+clearbufferandcount(taste)FI;SELECTpos(cursorbewegungen,taste)OF CASE1:geheevtlnachrechtsCASE2:geheevtlnachlinksCASE3:geheevtlnachobenCASE4:geheevtlnachuntenOTHERWISEverlasseprozedurENDSELECT PER.geheevtlnachrechts:WHILEsooftwie>0REPgp:=getgcursor;aktuellempos:=mpos(gp);IF NOT(impos(aktuellempos)0REPgp:=getgcursor;aktuellempos:=mpos(gp);IF NOT(10REPgp:=getgcursor;aktuellempos:=mpos(gp);IF NOT(10REPgp:=getgcursor;aktuellempos:=mpos(gp);IF NOT(jmpos(aktuellempos)