home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1997 January / macformat46.iso / Demos / PowerFantasm 4.15 / Beginners guide / EDIT EXAMPLE / MENUS.S < prev   
Encoding:
Text File  |  1996-06-21  |  7.2 KB  |  283 lines

  1. ***************************************************************************************
  2. **EXAMPLE MENU CONTROLLERS FOR EDIT EXAMPLE FOR FANTASM BEGINNERS GUIDE               *
  3. ***************************************************************************************
  4.  
  5. ******************SECTION 18***********************************************************
  6. *************************************MAKE RES MENU*************************************
  7. MAKERESMENU:    CLR.L    -(SP)    GETMENU RETURNS A LONG
  8. **BUILD THE APPLE MENU
  9.     MOVE.W    #APPLE_MEN_NUM,-(SP)    RESOURCE ID OF APPLE MENU
  10.     DC.W    GETMENU    GET APPLE MENU RESOURCE
  11.     MOVE.L    (SP)+,APPLEMENU(A6)    SAVE HANDLE OF APPLE MENU
  12.     MOVE.L    APPLEMENU(A6),-(SP)
  13.     MOVE.L    #"DRVR",-(SP)
  14.     DC.W    ADDRESMENU    FIND ALL APPLE MENU ENTRIES AND ADD THEM
  15. **GET FILE MENU FROM RESOURCES
  16.     CLR.L    -(SP)
  17.     MOVE.W    #FILE_MEN_NUM,-(SP)    SAME FOR FILE MENU
  18.     DC.W    GETMENU
  19.     MOVE.L    (SP)+,FILEMENU(A6)
  20. **GET EDIT MENU FROM RESOURCES
  21.     CLR.L    -(SP)
  22.     MOVE.W    #EDIT_MEN_NUM,-(SP)    AND EDIT MENU
  23.     DC.W    GETMENU
  24.     MOVE.L    (SP)+,EDITMENU(A6)
  25. **INSERT THE MENUS
  26.     MOVE.L    APPLEMENU(A6),-(SP)    INSERT THEM INTO MENU BAR
  27.     CLR.W    -(SP)
  28.     DC.W    INSERTMENU
  29.     MOVE.L    FILEMENU(A6),-(SP)
  30.     CLR.W    -(SP)
  31.     DC.W    INSERTMENU
  32.     MOVE.L    EDITMENU(A6),-(SP)
  33.     CLR.W    -(SP)
  34.     DC.W    INSERTMENU
  35. **DRAW MENU BAR
  36.     DC.W    DRAWMENUBAR        DRAW THE MENU BAR
  37.     RTS
  38.     
  39. ******************SECTION 19*******************************************************
  40. **********************************DO MENU******************************************
  41. **NEEDS MENU INFO IN D0.L(UPPER WORD = MENU RES ID. LOWER WORD=ITEM NUMBER)
  42. DO_MENU:    LINK    A4,#-100    SOME SPACE FOR APPLE MENU (DESC ACCESSORIES)
  43.     MOVE.W    D0,D6    SAVE MENU RES ID AND ITEM NUMBER
  44.     SWAP    D0    GET MENU ID IN LOWER WORD OF D0
  45.     MOVE.W    D0,D7    SAVE MENU ID IN D7
  46.     MOVE.W    D7,MENU    AND IN MENU
  47.     MOVE.W    D6,MENU_ITEM    GET ITEM IN MENU_ITEM
  48.     CMPI.W    #APPLE_MEN_NUM,D7    ID=APPLE MENU?
  49.     BNE    NOT_APPLE    NOPE
  50. **HERE WE'VE SLECTED SOMETHING FROM THE APPLE MENU
  51.     CMPI.W    #1,D6    YUP - ITEM=1 (ABOUT THIS EXAMPLE)?
  52.     BNE.S    NOT_ABOUT_FANT    NOPE
  53.     MOVE.W    #ABOUT,D0    YEP, SHOW THE ABOUT ALERT
  54.     BSR    DO_ALERT    ABOUT FANTASM ALERT
  55.     BRA    END_MENUS    BYE.....
  56. **RUN DESK ACC
  57. NOT_ABOUT_FANT:    MOVE.L    APPLEMENU(A6),-(SP)    HANDLE OF APPLEMENU
  58.     MOVE.W    D6,-(SP)        WHICH ITEM
  59.     PEA    DESKNAME,-(SP)        BUFFER FOR NAME OF ITEM
  60.     DC.W    GETITEM        GET NAME
  61.     
  62.     PEA    DESKNAME        PUSH NAME
  63.     DC.W    OPENDESKACC        RUN DESK ACC
  64.     
  65.     MOVE.L    WINDPTR(A6),-(SP)    SET PORT TO MY
  66.     DC.W    SETPORT        WINDOW
  67.     BRA    END_MENUS        BYE....
  68.     
  69. NOT_APPLE:    CMPI.W    #FILE_MEN_NUM,D7    FILE MENU?
  70.     BNE    NOT_FILE    NOPE
  71. **FILE MENU
  72.     CMPI.W    #1,D6    ITEM=1 (NEW)?
  73.     BNE.S    NOT_NEW    NAH
  74. *******************************NEW****************************************************
  75.     TST.W    DIRTY(A6)    HAVE WE MODIFIED THE CURRENT FILE?
  76.     BEQ.S    NEW_OK    NO
  77.     BSR    CLOSE_TE    YES, SAVE IT
  78. NEW_OK:    BSR    SHUTWINDOW    SELECTED NEW FROM FILE MENU
  79.     LEA    NO_W_TITLE,A0
  80.     BSR    DRAW_WINDOW    OPEN NEW WINDOW
  81.     CLR.W    VOLPTR(A6)
  82.     BRA    END_MENUS
  83. NOT_NEW:    CMPI.W    #2,D6
  84.     BNE    NOT_OPEN
  85. *******************************OPEN***************************************************
  86.     TST.W    DIRTY(A6)
  87.     BEQ.S    NO_CURRENT
  88.     BSR    CLOSE_TE    SAVE THE OLD FILE
  89. NO_CURRENT:    LEA    FILENAME,A0
  90.     BSR    OPENSELECTOR    RETURNS D0=VOLREF OR 0
  91.     MOVE.W    D0,VOLPTR(A6)
  92.     TST.L    D0
  93.     BEQ    END_MENUS
  94. SAVEAS_ENT:
  95. **GOT A VALID FILNAME
  96.     BSR    SHUTWINDOW        close old window
  97.     LEA    FILENAME,A0
  98.     BSR    DRAW_WINDOW        OPEN NEW WINDO WITH THIS NAME
  99.     LEA     FILENAME,A0
  100.     MOVE.W    VOLPTR(A6),D0
  101. **FIND TE BUFFER
  102.     MOVE.L    A4,-(SP)
  103.     BSR    READ_TEFILE
  104.     MOVE.L    (SP)+,A4
  105.     TST.W    D0        READFILE OK=0
  106.     BEQ    END_MENUS
  107.     BPL.S    READ_ERROR
  108.     MOVE.W    #TOO_BIG,D0
  109.     BSR    DO_ALERT
  110.     BRA    END_MENUS
  111. READ_ERROR:    MOVE.W    #F_ERROR,D0
  112.     BSR    DO_ALERT
  113.     BRA    END_MENUS
  114. *************************CLOSE*******************************************************    
  115. NOT_OPEN:    CMPI.W    #3,D6        MENU ITEM 3=CLOSE
  116.     BNE    NOT_CLOSE
  117. *CHECK DIRTY, IF 1 ASK IF TO SAVE THE FILE
  118.     TST.W    DIRTY(A6)
  119.     BEQ.S    NO_FILE_TO_SAV    FILE HASNT BEEN MODIFIED
  120.     BSR    CLOSE_TE
  121. NO_FILE_TO_SAV:    BSR    SHUTWINDOW
  122.     LEA    NO_W_TITLE,A0
  123.     BSR    DRAW_WINDOW
  124.     BRA    END_MENUS
  125.  
  126. ***CLOSE TE ASKS IF THE USER WANTS TO SAVE THE FILE
  127. **IF SO THE FILE IS SAVED, AND THE WINDOW CLEARED.
  128.  
  129. CLOSE_TE:    MOVE.W    #ASK_SAVE,D0
  130.     BSR    DO_ALERT    SAVE THE FILE? 1=YES
  131.     CMPI.W    #1,D0
  132.     BEQ.S    SAVE_NOW
  133.     RTS
  134. SAVE_NOW:    MOVE.L    WINDPTR(A6),-(SP)
  135.     PEA    PFILENAME
  136.     DC.W    GETWTITLE
  137.     PEA    PFILENAME
  138.     PEA    FILENAME
  139.     BSR    PTOCSTR
  140.     ADDQ.L    #8,SP
  141.     MOVE.W    VOLPTR(A6),D0
  142.     TST.W    D0    DO WE HAVE A FILE REF?
  143.     BNE.S    SAVE_WINDOW    YES, USE WINDOW NAME
  144.  
  145. **WE NEED TO GET A FILENAME
  146.     LEA    FILENAME,A0
  147.     LEA    WRITE_STRING,A1
  148.     BSR    WRITE_SELECT
  149.     TST.L    D0
  150.     BNE.S    DO_SAVE
  151.     RTS        CANCELLED
  152. DO_SAVE:    MOVE.W    D0,VOLPTR(A6)    SAVE VOLPTR
  153. SAVE_WINDOW:    MOVE.W    VOLPTR(A6),D0
  154.     LEA    FILENAME,A0
  155.     MOVE.L    A4,-(SP)    SAVE LOCAL POINTER
  156.     BSR    SAVE_TE_FILE
  157.     MOVE.L    (SP)+,A4
  158.     CLR.W    VOLPTR(A6)    WE HAVE NO FILE
  159.     RTS
  160. ******************************************SAVE******************************************
  161. NOT_CLOSE:    CMPI.W    #4,D6
  162.     BNE    NOT_SAVE
  163.  
  164.     TST.W    DIRTY(A6)
  165.     BEQ    END_MENUS    FILE HASNT BEEN MODIFIED
  166.     MOVE.L    WINDPTR(A6),-(SP)
  167.     PEA    PFILENAME
  168.     DC.W    GETWTITLE
  169.     PEA    PFILENAME
  170.     PEA    FILENAME
  171.     BSR    PTOCSTR
  172.     ADDQ.L    #8,SP
  173.     
  174.     MOVE.W    VOLPTR(A6),D0
  175.     TST.W    D0    DO WE HAVE A FILE REF?
  176.     BNE    SAVE_AS_W    YES, USE WINDOW NAME
  177.  
  178. **WE NEED TO GET A FILENAME
  179.     LEA    FILENAME,A0
  180.     LEA    WRITE_STRING,A1
  181.     BSR    WRITE_SELECT
  182.     TST.L    D0
  183.     BEQ    END_MENUS    CANCELLED
  184.     MOVE.W    D0,VOLPTR(A6)
  185.     LEA    FILENAME,A0
  186.     MOVE.L    A4,-(SP)
  187.     BSR    SAVE_TE_FILE
  188.     MOVE.L    (SP)+,A4
  189.     CLR.W    DIRTY(A6)
  190.     LEA    FILENAME,A3
  191.     BSR    SET_W_TITLE
  192.     BRA    END_MENUS
  193.     
  194. DO_SAVE_W:    MOVE.W    D0,VOLPTR(A6)
  195. SAVE_AS_W:    LEA    FILENAME,A0
  196.     MOVE.L    A4,-(SP)    SAVE LOCAL POINTER
  197.     BSR    SAVE_TE_FILE
  198.     MOVE.L    (SP)+,A4
  199.     CLR.W    DIRTY(A6)
  200.     BRA    END_MENUS
  201.  
  202.     
  203. NOT_SAVE:    CMPI.W    #5,D6
  204.     BNE    NOT_SAVE_AS
  205.     
  206. *******************************************SAVE AS**************************************
  207. **WE NEED TO GET A FILENAME
  208.     LEA    FILENAME,A0
  209.     LEA    WRITE_STRING,A1
  210.     BSR    WRITE_SELECT
  211.     TST.L    D0
  212.     BEQ    END_MENUS    CANCELLED
  213.     MOVE.W    D0,VOLPTR(A6)    SAVE VOLPTR
  214. SAVE_IT:    MOVE.W    VOLPTR(A6),D0
  215.     LEA    FILENAME,A0
  216.     MOVE.L    A4,-(SP)    SAVE LOCAL POINTER
  217.     BSR    SAVE_TE_FILE
  218.     MOVE.L    (SP)+,A4
  219.     LEA    FILENAME,A3
  220.     BSR    SET_W_TITLE
  221.     BRA    END_MENUS
  222.  
  223. NOT_SAVE_AS:
  224. NOT_SAVE_PREF:    CMPI.W    #7,D6    QUIT?
  225.     BNE    END_MENUS    NO
  226. *******************************************QUIT*****************************************
  227.     TST.W    DIRTY(A6)
  228.     BEQ    QUIT_OK
  229.     BSR    CLOSE_TE    SAVE THE OLD FILE
  230. QUIT_OK:    CLR.W    -(SP)
  231.     DC.W    HILITEMENU
  232.     MOVEQ    #1,D0
  233.     UNLK    A4
  234.     RTS
  235. ****************************************END OF FILE MENU********************************
  236.  
  237. ******************SECTION 20************************************************************    
  238. ****************************************edit menu***************************************
  239. NOT_FILE:    CMPI.W    #EDIT_MEN_NUM,D7
  240.     BNE    NOT_EDIT
  241.     CMPI.W    #1,D6
  242.     BNE.S    NOT_CUT
  243.     MOVE.L    TEHND(A6),-(SP)
  244.     DC.W    TECUT
  245.     BRA    END_BLOCK
  246. NOT_CUT:    CMPI.W    #2,D6
  247.     BNE.S    NOT_COPY
  248.     MOVE.L    TEHND(A6),-(SP)
  249.     DC.W    TECOPY
  250.     BRA    END_BLOCK
  251. NOT_COPY:    CMPI.W    #3,D6
  252.     BNE.S    NOT_PASTE
  253.     MOVE.L    TEHND(A6),-(SP)
  254.     DC.W    TEPASTE
  255.     BRA.S    END_BLOCK
  256. NOT_PASTE:    CMPI.W    #4,D6
  257.     BNE.S    NOT_DELETE
  258.     MOVE.L    TEHND(A6),-(SP)
  259.     DC.W    TEDELETE
  260.     BRA.S    END_BLOCK
  261. NOT_DELETE:    CMPI.W    #5,D6
  262.     BNE    END_MENUS
  263.     CLR.L    -(SP)
  264.     MOVE.L    #-1,-(SP)
  265.     MOVE.L    TEHND(A6),-(SP)
  266.     DC.W    TESETSELECT    SELECT ALL
  267. END_BLOCK:    BSR    SETSCROLLMAX
  268.     BRA    END_MENUS
  269.  
  270. **************************END OF EDIT MENU*************************************
  271. NOT_EDIT:            *MENUS WOULD BE EXPANDED HERE
  272. END_MENUS:    CLR.W    -(SP)
  273.     DC.W    HILITEMENU    UNLIGHT MENU TITLE
  274.     CLR.L    D0
  275.     UNLK    A4
  276.     RTS
  277.         
  278. MENU:    DS.W    1
  279. MENU_ITEM:    DS.W    1
  280. DESKNAME:    DS.B    256    
  281.  
  282.     EVEN
  283.