home *** CD-ROM | disk | FTP | other *** search
File List | 1996-09-17 | 4.5 KB | 143 lines |
- PRINT " PROCEDURE Beispiel"
- PRINT
- PRINT
- PRINT
- PRINT " Schreibweise: name ! oder GOSUB name, auch @name (GFA2.0)"
- PRINT " PROCEDURE name"
- PRINT " Programmzeilen 1,2,3 usw..."
- PRINT " RETURN"
- PAUSE 300
- '
- xt%=2-SGN(XBIOS(4))
- yt%=MIN(2,3-XBIOS(4))
- start%=1
- anzahl%=20
- DIM feld$(start%+anzahl%)
- RESTORE m.datas
- FOR i%=1 TO start%+anzahl%
- READ feld$(i%)
- NEXT i%
- m.datas:
- DATA ---,Speichern,Laden,Löschen,Kopieren,----------,QUIT
- DATA ---,Speichern,Laden,Löschen,Kopieren,----------,QUIT
- DATA ---,Speichern,Laden,Löschen,Kopieren,----------,QUIT
- ' BOX 50/xt%,50/yt%,300/xt%,300/yt%
- DO
- REPEAT
- IF MOUSEX>50/xt% AND MOUSEX<300/xt% AND MOUSEY>50/yt% AND MOUSEY<399/yt%
- @menue(start%,anzahl%,50/xt%,50/yt%,300/xt%,399/yt%,*feld$(),*index%)
- ENDIF
- ' IF MOUSEK=2
- ' @menue(start%,anzahl%,0,0,639/xt%,399/yt%,*feld$(),*index%)
- ' ENDIF
- UNTIL index%>0
- IF feld$(index%+start%)="Speichern"
- feld$(index%+start%)="-Speichern"
- feld$(index%+start%+1)="Laden"
- PRINT AT(1,1);"gewählt: Speichern "
- ENDIF
- IF feld$(index%+start%)="Laden"
- feld$(index%+start%-1)="Speichern"
- feld$(index%+start%)="-Laden"
- PRINT AT(1,1);"gewählt: Laden "
- ENDIF
- IF feld$(index%+start%)="Löschen"
- PRINT AT(1,1);"gewählt: Löschen "
- ENDIF
- IF feld$(index%+start%)="Kopieren"
- feld$(index%+start%)=CHR$(8)+" Kopieren"
- PRINT AT(1,1);"gewählt: Kopieren "
- GOTO label
- ENDIF
- IF feld$(index%+start%)=CHR$(8)+" Kopieren"
- feld$(index%+start%)="Kopieren"
- PRINT AT(1,1);"gewählt: Kopieren "
- ENDIF
- IF feld$(index%+start%)="QUIT"
- PRINT AT(1,1);"gewählt: Quit "
- ENDIF
- label:
- PRINT "Menüindex : ";index%
- EXIT IF feld$(index%+start%)="QUIT"
- CLR index%
- LOOP
- > PROCEDURE menue(pm1%,mmx%,mxl%,myo%,mxr%,myu%,f.adr%,v.adr%)
- '
- ' Diese Prozedur stammt aus: Das große Atari ST GFA Basic Buch
- ' erschienen bei Data Becker
- '
- LOCAL mmen$,msk%,m.key$,yi%,yi2%,mrs%,m.i%,lsr%
- LOCAL mxl2%,mxr2%,myo2%,myu2%,m.xt%,m.yt%
- m.xt%=2-SGN(XBIOS(4))
- m.yt%=MIN(2,3-XBIOS(4))
- DIM dum$(1)
- SWAP *f.adr%,dum$()
- mxl2%=MIN(MAX(MOUSEX-(68/m.xt%),mxl%),mxr%-(136/m.xt%))
- mxr2%=mxl2%+(136/m.xt%)
- myo2%=MIN(MAX(MOUSEY-(6/m.yt%),myo%),myu%-(18+mmx%*18)/m.yt%)
- myu2%=myo2%+((18+mmx%*18)/m.yt%)
- mxl%=MIN(mxl%,mxl2%)
- myo%=MIN(myo%,myo2%)
- GET MAX(0,mxl2%),MAX(0,myo2%),MIN((639/m.xt%),mxr2%),MIN(myu2%,399/m.yt%),mmen$
- DEFTEXT 1,0,0,8-2*m.yt%
- DEFFILL 1,0,0
- GRAPHMODE 1
- PBOX mxl2%,myo2%,mxr2%,myu2%
- BOX mxl2%+(1/m.xt%),myo2%+(1/m.yt%),mxr2%-(1/m.xt%),myu2%-(1/m.yt%)
- DEFFILL 1,2,4
- PBOX mxl2%+(6/m.xt%),myo2%+(6/m.yt%),mxr2%-(6/m.xt%),myu2%-(6/m.yt%)
- DEFFILL 1,0,0
- FOR m.i%=1 TO mmx%
- GRAPHMODE 1
- PBOX mxl2%+(13/m.xt%),myo2%-6/m.yt%+m.i%*18/m.yt%,mxr2%-(13/m.xt%),myo2%+6/m.yt%+m.i%*18/m.yt%
- GRAPHMODE 2
- IF LEFT$(dum$(m.i%+pm1%))="-"
- DEFTEXT ,2
- TEXT mxl2%+(20/m.xt%),myo2%+3/m.yt%+m.i%*18/m.yt%,100/m.xt%,RIGHT$(dum$(m.i%+pm1%),LEN(dum$(m.i%+pm1%))-1)
- ELSE
- DEFTEXT ,0
- TEXT mxl2%+(20/m.xt%),myo2%+3/m.yt%+m.i%*18/m.yt%-1+m.yt%,100/m.xt%,dum$(m.i%+pm1%)
- ENDIF
- NEXT m.i%
- DEFMOUSE 3
- DEFFILL 1,1,1
- GRAPHMODE 3
- BOUNDARY 0 ! für V3.0
- ' Dpoke Vdibase+34,0 ! für V2.xx
- REPEAT
- ON MENU
- MOUSE xko.x%,yko.y%,msk%
- yi%=INT((yko.y%-(myo2%-(8/m.yt%)))/(18/m.yt%))
- IF xko.x%>mxl2%+(12/m.xt%) AND yi%>0 AND xko.x%<mxr2%-(13/m.xt%) AND yi%<=(mmx%)
- IF LEFT$(dum$(yi%+pm1%))<>"-"
- PBOX mxl2%+(14/m.xt%),myo2%-(5/m.yt%)+yi%*(18/m.yt%)-1+m.yt%,mxr2%-(14/m.xt%)+1-m.xt%,myo2%+(5/m.yt%)+yi%*(18/m.yt%)
- ENDIF
- REPEAT
- yi2%=INT((MOUSEY-(myo2%-(8/m.yt%)))/(18/m.yt%))
- msk%=MOUSEK
- m.key$=INKEY$
- ON MENU
- UNTIL MOUSEX<mxl2%+(12/m.xt%) OR MOUSEX>mxr2%-(13/m.xt%) OR yi%<>yi2% OR msk%>0 OR m.key$>""
- IF LEFT$(dum$(yi%+pm1%))<>"-"
- PBOX mxl2%+(14/m.xt%),myo2%-(5/m.yt%)+yi%*(18/m.yt%)-1+m.yt%,mxr2%-(14/m.xt%)+1-m.xt%,myo2%+(5/m.yt%)+yi%*(18/m.yt%)
- ELSE
- CLR msk%
- ENDIF
- ELSE
- CLR yi2%
- ENDIF
- EXIT IF (MOUSEX<mxl% OR MOUSEX>mxr% OR MOUSEY<myo% OR MOUSEY>myu%) AND yi2%<=mmx%
- m.key$=INKEY$
- UNTIL (msk%>0 OR m.key$>"") AND yi2%<=mmx%
- DEFMOUSE 0
- DEFFILL 1,0,0
- GRAPHMODE 1
- PUT MAX(0,mxl2%),MAX(0,myo2%),mmen$
- BOUNDARY 1 ! für V3.0
- ' Dpoke Vdibase+34,1 ! für V2.xx
- SWAP *f.adr%,dum$()
- ERASE dum$()
- *v.adr%=yi2%
- PAUSE 5
- RETURN
-