home *** CD-ROM | disk | FTP | other *** search
/ AMIGA PD 1 / AMIGA-PD-1.iso / Programme_zum_Heft / Programmieren / Kurztests / ACE / Prgs / file / AmigaMenuV1.lha / AmigaMenuV1 / AmigaMenu.b < prev    next >
Text File  |  1995-01-23  |  9KB  |  342 lines

  1. CONST MAXFILE=40    'If you need more filesin the list, raise the number.
  2.             'If you need more memory and can settle for less files
  3.             'in the list, then lower it.
  4.  
  5. LIBRARY "graphics.library"
  6. DECLARE FUNCTION FreeSprite() LIBRARY
  7. DECLARE FUNCTION LONGINT GetSprite() LIBRARY
  8. DECLARE FUNCTION MoveSprite() LIBRARY
  9. DECLARE FUNCTION ChangeSprite() LIBRARY
  10. DECLARE SUB OpenList
  11. DECLARE SUB ProjectMenu
  12. DECLARE SUB MenuCreate
  13. DECLARE SUB Snapshot
  14. DECLARE SUB RemoveApp
  15. DECLARE SUB Adding(SHORTINT REM%)
  16. DECLARE SUB About
  17. DECLARE SUB TheSprite
  18. DECLARE SUB SpriteDisplay
  19. DECLARE SUB LONGINT SpriteHit
  20. DECLARE SUB OpenTheConfig
  21. DECLARE SUB MenuAction(one%)
  22. DECLARE SUB SelectItem(zero%,one%)
  23. DECLARE SUB MenuItems
  24. DECLARE SUB Finished
  25. DECLARE SUB WindowConfig
  26. DECLARE SUB STRING FileName$(pathname$)
  27. DECLARE SUB STRING Path$(pathname$)
  28.  
  29. DIM apps$(MAXFILE) SIZE 80, NAME$(MAXFILE) SIZE 80
  30. ADDRESS mem_loc& : SHORTINT spritenum%
  31. CONST NULL =0&
  32. STRUCT SimpleSprite
  33.    ADDRESS posctldata
  34.    SHORTINT height
  35.    SHORTINT x
  36.    SHORTINT y
  37.    SHORTINT num
  38. END STRUCT
  39. DECLARE STRUCT SimpleSprite SpriteStruct
  40. mem_loc&=ALLOC(36*SIZEOF(SHORTINT),0)
  41. DIM SHORTINT spriteData(36) ADDRESS mem_loc&
  42. SHORTINT i
  43. ON MENU GOTO StageFour
  44. StageOne:
  45.    xm%=0:ym%=0:wm%=640:hm%=200:appsamt%=0 : pe%=0
  46.    WINDOW 1,,(0,0)-(1,1),32
  47.    CALL OpenTheConfig
  48.    FOR i=0 TO 35 : READ spriteData(i): NEXT i
  49.    SpriteStruct->height=16
  50.    SpriteStruct->x=100
  51.    SpriteStruct->y=100
  52.    spritenum%=GetSprite(SpriteStruct,3)
  53.    PALETTE 21,0,0,0
  54.    PALETTE 22,1,1,1
  55.    PALETTE 23,6/15,8/15,11/15
  56.    CALL OpenList
  57.    IF appsamt%>0 THEN CALL MenuItems
  58. StageTwo:
  59.    CALL SpriteDisplay
  60.    CALL ProjectMenu
  61.    IF appsamt%>0 THEN CALL MenuCreate
  62. StageThree:
  63.    SYSTEM "CD AmigaMenu:"
  64.    WINDOW OUTPUT 2: CLS : PRINT"Ready.";
  65.    MENU ON
  66.    WHILE UCASE$(INKEY$)<>"Q"
  67.        SLEEP FOR .02
  68.        IF WINDOW(0)<>2 THEN
  69.       CALL WindowConfig
  70.       WINDOW CLOSE 2
  71.       CALL FreeSprite(spritenum%)
  72.       GOTO StageTwo
  73.        END IF
  74.        CALL WindowConfig
  75.    WEND
  76.    MENU STOP
  77.    GOTO EndIt
  78.  
  79. StageFour:
  80.    zero%=MENU(0)
  81.    one%=MENU(1)
  82.    IF zero%=1 THEN
  83.       IF ( (appsamt%+1)>MAXFILE and one%=1) THEN
  84.     a%=MSGBOX("Exceeds limit!  See AmigaMenu.doc for details!","Darn!")
  85.     GOTO StageThree
  86.       END IF
  87.       CALL MenuAction(one%)
  88.       IF one%=5 THEN GOTO EndIt
  89.    END IF
  90.    IF zero%>1 THEN CALL SelectItem(zero%,one%)
  91.    GOTO StageThree
  92.  
  93. Endit:
  94.    CALL Finished
  95.    END
  96.  
  97. SUB SpriteDisplay
  98.    SHARED xm%, ym%, hm%, wm%, spritenum%
  99.    y%=0
  100.    CALL TheSprite
  101.    REPEAT
  102.        SLEEP FOR .02
  103.        x%=MOUSE(1):y%=MOUSE(2):z%=MOUSE(0)
  104.    UNTIL  (z%=-1) AND (x%<xm%+30) AND (x%>xm%) AND (y%>ym%) AND (y%<ym%+15)
  105.    WINDOW 2,"AmigaMenu",(xm%,ym%)-(xm%+wm%,ym%+hm%),23
  106.    CALL FreeSprite(spritenum%)
  107.    WINDOW OUTPUT 2: CLS : PRINT"Setting things up...";
  108. END SUB
  109.  
  110. SUB OpenList
  111.    SHARED apps$,appsamt%
  112.    OPEN "I",1,"AmigaMenu:AmigaMenu.files"
  113.    appsamt%=1
  114.    WHILE NOT EOF(1)
  115.        LINE INPUT #1,apps$(appsamt%-1)
  116.        ++appsamt%
  117.    WEND
  118.    CLOSE #1
  119.    appsamt%=appsamt%-1
  120. END SUB
  121.  
  122. SUB ProjectMenu
  123.    SHARED appsamt%
  124.    IF appsamt%>0 THEN
  125.        activate%=1
  126.    ELSE
  127.        activate%=0
  128.    END IF
  129.  
  130.    MENU 1,0,1,"AmigaMenu"
  131.    MENU 1,1,1,"Add","a"
  132.    MENU 1,2,activate%,"Remove"
  133.    MENU 1,3,activate%,"Snapshot"
  134.    MENU 1,4,1,"About"
  135.    MENU 1,5,1,"Quit","q"
  136. END SUB
  137.  
  138. SUB MenuCreate
  139.    SHARED appsamt%,NAME$
  140.    looper%=1
  141.    start%=1
  142.    StartLoop:
  143.       ++looper%
  144.       MENU looper%,0,1,"Applications:"
  145.       MENU looper%,1,0,"-------------"
  146.       FOR count%=start% TO (start%+9)
  147.      MENU looper%,((count%+1)-((looper%-2)*10)),1,NAME$(count%-1)
  148.      IF count%>=appsamt% THEN EXIT FOR
  149.       NEXT count%
  150.       start%=count%
  151.       IF appsamt% > ((looper%-1)*10) THEN GOTO StartLoop:
  152. END SUB
  153.  
  154. SUB Snapshot
  155.    SHARED xm%,ym%,wm%,hm%
  156.    IF (MSGBOX ("Save window size and position?","Yes","No"))=-1 THEN
  157.        WINDOW OUTPUT 2 : CLS : PRINT"Storing the data to AmigaMenu.cfg...";
  158.        CALL WindowConfig
  159.        OPEN "O",#1,"AmigaMenu:AmigaMenu.cfg"
  160.        WRITE #1,xm%,ym%,wm%,hm%
  161.        CLOSE #1
  162.    END IF
  163. END SUB
  164.  
  165. SUB RemoveApp
  166.    SHARED apps$,appsamt%
  167.    r%=MSGBOX ("Click 'Okay' and then select the file to remove","Okay","Cancel")
  168.    IF r%=0 THEN GOTO ExitRemove
  169.    REPEAT
  170.    a$=""
  171.    MENU WAIT
  172.    zero%=MENU(0)
  173.    one%=MENU(1)
  174.      FOR looper%=2 TO (INT(appsamt%/10)+2)
  175.    IF zero%=looper% THEN
  176.      FOR count%=2 TO 11
  177.     IF one%=count% THEN
  178.     a$=apps$(count%-2+(looper%-2)*10)
  179.     EXIT FOR
  180.     END IF
  181.      NEXT count%
  182.    END IF
  183.    IF a$<>"" THEN EXIT FOR
  184.      NEXT looper%
  185.    UNTIL a$<>""
  186.    r%=MSGBOX ("Do you wish to remove "+MID$( a$,2,(LEN(a$)-1) )+"?","Yes","No")
  187.    IF r%=-1 THEN
  188.        WINDOW OUTPUT 2 : CLS : PRINT"Removing ";a$;"...";
  189.        apps$(count%-2+(looper%-2)*10)="remove.sjm"
  190.    CALL Adding(1)
  191.    END IF
  192. ExitRemove:
  193. END SUB
  194.  
  195. SUB Adding(SHORTINT REM%)
  196.    SHARED apps$, appsamt%, NAME$
  197.    b$=FileName$(UCASE$(apps$(appsamt%-1))):storeflag%=0
  198.  
  199.    OPEN "O",1,"AmigaMenu:AmigaMenu.files"
  200.    FOR count%=1 TO (appsamt%-1)
  201.       IF REM%=0 and (b$<=ucase$(name$(count%-1)))and(storeflag%=0)and b$<>ucase$("remove.sjm") then
  202.       PRINT #1,apps$(appsamt%-1)
  203.       storeflag%=1
  204.       END IF
  205.       IF apps$(count%-1)<>"remove.sjm" THEN PRINT #1,apps$(count%-1)
  206.    NEXT count%
  207.    IF storeflag%=0 AND apps$(appsamt%-1)<>"remove.sjm" THEN PRINT #1,apps$(appsamt%-1)
  208.    CLOSE 1
  209.    WINDOW OUTPUT 2 : CLS : PRINT"Organizing the files...";
  210.    MENU CLEAR
  211.    CALL OpenList:CALL ProjectMenu
  212.    IF appsamt%>0 THEN
  213.        CALL MenuItems
  214.        CALL MenuCreate
  215.    END IF
  216. END SUB
  217.  
  218. SUB About
  219.    r%=MSGBOX ("AmigaMenu V1.0 by Sean J. Miller (December 1994)","I hate 'Abouts!'")
  220. END SUB
  221.  
  222. SUB TheSprite
  223.    SHARED mem_loc&, SpriteStruct, spritenum%, xm%, ym%, spriteData
  224.    ChangeSprite(0,SpriteStruct,@spriteData)
  225.    MoveSprite(0,SpriteStruct,((xm%\2)-1),ym%)
  226. END SUB
  227.  
  228. SUB OpenTheConfig
  229.    SHARED xm%, ym%,wm%, hm%
  230.    a$="sys:c/assign AmigaMenu: "+CHR$(34)+CHR$(34)
  231.    SYSTEM a$
  232.    OPEN "I",1,"AmigaMenu:AmigaMenu.cfg"
  233.    IF EOF(1) = 0 THEN INPUT #1,xm%,ym%,wm%,hm%
  234.    CLOSE #1
  235. END SUB
  236.  
  237. SUB MenuAction(one%)
  238.    SHARED apps$,appsamt%
  239.    IF one%=1 THEN
  240.        a$=FILEBOX$("Select an Application")
  241.        IF a$<>"" THEN
  242.       b$=Path$(a$)
  243.       if b$=a$ THEN a$="AmigaMenu:"+a$
  244.       ++appsamt%
  245.       wr%=MSGBOX("Do want Amigamenu to quit upon its execution?","Yes","No")
  246.       IF wr%=-1 THEN a$="y"+a$
  247.       IF wr%=0 THEN a$="n"+a$
  248.       apps$(appsamt%-1)=a$
  249.       MENU CLEAR
  250.       CALL Adding(0)
  251.        END IF
  252.    END IF
  253.    IF one%=2 THEN CALL RemoveApp
  254.    IF one%=3 THEN CALL Snapshot
  255.    IF one%=4 THEN CALL About
  256. END SUB
  257.  
  258. SUB SelectItem(zero%,one%)
  259.    SHARED appsamt%,apps$
  260.    FOR looper%=2 TO (INT(appsamt%/10)+2)
  261.      IF zero%=looper% THEN
  262.       FOR count%=2 TO 11
  263.     IF one%=count% THEN
  264.      c$=apps$(count%-2+(looper%-2)*10)
  265.      a$=Path$(c$)
  266.      IF a$<>c$ THEN CHDIR MID$(a$,2,LEN(a$)-1)
  267.      WINDOW OUTPUT 2 : CLS : PRINT"Executing ";MID$(c$,2,90);"...";
  268.      a$="run >NIL: "+ MID$(c$,2,90)
  269.      SYSTEM a$
  270.      IF LEFT$(UCASE$(c$),1)="Y" THEN CALL Finished
  271.     END IF
  272.       NEXT count%
  273.      END IF
  274.    NEXT looper%
  275. END SUB
  276.  
  277. SUB Finished
  278.    WINDOW OUTPUT 2 : CLS : PRINT"See you later...";
  279.    SYSTEM "CD AmigaMenu:"
  280.    SYSTEM "assign AmigaMenu:"
  281.    SLEEP FOR 1
  282.    WINDOW CLOSE 2 : WINDOW CLOSE 1
  283.    STOP
  284. END SUB
  285.  
  286. SUB MenuItems
  287.    SHARED apps$,appsamt%,NAME$
  288.    FOR count%=1 TO appsamt%
  289.       name$(count%-1)=FileName$(apps$(count%-1))
  290.    NEXT count%
  291. END SUB
  292.  
  293. SUB WindowConfig
  294.    SHARED xm%,ym%,hm%,wm%
  295.    windo&=WINDOW(7)
  296.    xm%=PEEKW(windo&+4):ym%=PEEKW(windo&+6)
  297.    wm%=WINDOW(2):hm%=WINDOW(3)
  298. END SUB
  299.  
  300. SUB STRING Path$(pathname$)
  301.     pe%=0:a$=pathname$:c$=a$      'c$ is only needed to shorten statements
  302.     REPEAT
  303.     IF MID$(c$,LEN(c$)-pe%,1)="/" OR MID$(c$,LEN(c$)-pe%,1)=":" THEN a$=LEFT$(c$,(LEN(c$)-pe%))
  304.     ++pe%
  305.     UNTIL (pe%=LEN(c$)+1) OR a$<>c$
  306.     Path$=a$
  307. END SUB
  308.  
  309. SUB STRING FileName$(pathname$)
  310.     c$=pathname$: ne%=0:b$=c$
  311.     REPEAT
  312.    IF MID$(c$,LEN(c$)-ne%,1)="/" OR MID$(c$,LEN(c$)-ne%,1)=":" THEN b$=RIGHT$(c$,ne%)
  313.    ++ne%
  314.     UNTIL (ne%=LEN(c$)+1) OR (b$<>c$)
  315.     FileName$=b$
  316. END SUB
  317.  
  318. '******Image2Sprite******
  319. DATA  &H0000,&H0000
  320. 'Sprite Core Data Begins...
  321. DATA  &HC007,&H3FF8        'Data Element:           1
  322. DATA  &HC705,&H3FF8        'Data Element:           2
  323. DATA  &HC867,&H3FF8        'Data Element:           3
  324. DATA  &HC807,&H3FF8        'Data Element:           4
  325. DATA  &HC867,&H3FF8        'Data Element:           5
  326. DATA  &HC707,&H3FF8        'Data Element:           6
  327. DATA  &HC007,&H3FF8        'Data Element:           7
  328. DATA  &HC007,&H3FF8        'Data Element:           8
  329. DATA  &HFFFF,&H0000        'Data Element:           9
  330. DATA  &HFFFF,&H0000        'Data Element:           10
  331. DATA  &HFFFF,&H0000        'Data Element:           11
  332. DATA  &HFFFF,&H0FF0        'Data Element:           12
  333. DATA  &HFFFF,&H09F0        'Data Element:           13
  334. DATA  &HFFFF,&H09F0        'Data Element:           14
  335. DATA  &HFFFF,&H09F0        'Data Element:           15
  336. DATA  &H7FFF,&H0000        'Data Element:           16
  337. 'Sprite Core Data Ends.
  338. DATA  &H0000,&H0000
  339. ' Total Data Size:               36
  340. '******By Sean J. Miller******
  341.  
  342.