home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a120 / 1.ddi / API / ACTMENU.ASM next >
Encoding:
Assembly Source File  |  1992-04-24  |  14.7 KB  |  650 lines

  1. ;/*------------------------------------------------------------------*/
  2. ;/* ACTMENU.ASM                                                      */
  3. ;/*------------------------------------------------------------------*/
  4. ;/* API ▒`  ªí : 1. StartUp()  ( in addmenu.asm )                    */
  5. ;/*              2. ShutDown() ( in addmenu.asm )                    */
  6. ;/* ╜s─╢╗P│s╡▓ : makeasm actmenu                                     */
  7. ;/*              (¬■╡∙: makeasm.bat ñw¬■⌐≤╜d¿╥║╧ñ∙ññ)                */
  8. ;/* API ¿τ╝╞└] : actmenu.plb                                         */
  9. ;/* ⌐IÑsñΦªí   : SET LIBRARY TO ACTMENU ( ⌐IÑs StartUp()  )          */
  10. ;/*              SET LIBRARY TO         ( ⌐IÑs ShutDown() )          */
  11. ;/*------------------------------------------------------------------*/
  12.  
  13.  
  14.                 .MODEL large
  15.                 .STACK 0                 ; Ñ▓╢╖╡LÑ⌠ª≤º┌¡╠ª█ñv¬║░∩┼|
  16.  
  17.                 INCLUDE C:\FOXLCK\H\pro_ext.inc
  18.  
  19.  
  20.  .DATA
  21.  
  22.                 PUBLIC  _myFoxInfo
  23.                 PUBLIC  __FoxTable
  24.  
  25. StartUpName        DB "STARTUP", 0
  26. StartUpParmTypes   DB "C", 0
  27.  
  28. ShutDownName       DB "SHUTDOWN", 0
  29. ShutDownParmTypes  DB "C", 0
  30.  
  31. _myFoxInfo FoxInfo <StartUpName,  StartUp,  CALLONLOAD,   StartUpParmTypes>
  32.            FoxInfo <ShutDownName, ShutDown, CALLONUNLOAD, ShutDownParmTypes>
  33.  
  34. sizeof_myFoxInfo = $ - _myFoxInfo
  35.  
  36. __FoxTable FoxTable <0, sizeof_myFoxInfo/TYPE FoxInfo, _myFoxInfo>
  37.  
  38.  
  39. PadPrompt       DB "E\<nvironment" , 0
  40. Bar1_Prompt     DB "\<1.CLOCK  ON" , 0
  41. Bar2_Prompt     DB "\<2.CLOCK  OFF", 0
  42. Bar3_Prompt     DB "\<3.STATUS ON" , 0
  43. Bar4_Prompt     DB "\<4.STATUS OFF", 0
  44. NullString      DB 0
  45. Alt1_String     DB "Alt+1", 0
  46. Alt2_String     DB "Alt+2", 0
  47. Alt3_String     DB "Alt+3", 0
  48. Alt4_String     DB "Alt+4", 0
  49. ClockOn         DB "SET CLOCK ON"  , 0
  50. ClockOff        DB "SET CLOCK OFF" , 0
  51. StatOn          DB "SET STATUS ON" , 0
  52. StatOff         DB "SET STATUS OFF", 0
  53.  
  54.  
  55.  .DATA?
  56.  
  57.  
  58. SysMenuId       DW 2 DUP(?)     ;typedef long MENUID
  59. PopupId         DW 2 DUP(?)     ;typedef long MENUID
  60. PadId           DW 2 DUP(?)     ;typedef long ITEMID
  61.  
  62.  
  63.  .CODE
  64.  
  65.  
  66. SetClockOn   PROC FAR
  67.  
  68.             FarEnter
  69.  
  70.             push    ax
  71.             push    dx
  72. ;
  73. ;       _Execute("SET CLOCK ON")
  74. ;
  75.             mov     dx, @data
  76.             mov     ax, offset ClockOn
  77.  
  78.             call    _Execute
  79.  
  80.             pop     dx
  81.             pop     ax
  82.  
  83.             FarExit
  84.  
  85.             ret
  86. SetClockOn ENDP
  87.  
  88.  
  89.  
  90. SetClockOff  PROC FAR
  91.  
  92.             FarEnter
  93.  
  94.             push    ax
  95.             push    dx
  96. ;
  97. ;       _Execute("SET CLOCK OFF")
  98. ;
  99.             mov     dx, @data
  100.             mov     ax, offset ClockOFF
  101.  
  102.             call    _Execute
  103.  
  104.             pop     dx
  105.             pop     ax
  106.  
  107.             FarExit
  108.  
  109.             ret
  110. SetClockOff ENDP
  111.  
  112.  
  113. SetStatOn  PROC FAR
  114.  
  115.             FarEnter
  116.  
  117.             push    ax
  118.             push    dx
  119. ;
  120. ;       _Execute("SET STATUS ON")
  121. ;
  122.             mov     dx, @data
  123.             mov     ax, offset StatOn
  124.  
  125.             call    _Execute
  126.  
  127.             pop     dx
  128.             pop     ax
  129.  
  130.             FarExit
  131.  
  132.             ret
  133. SetStatOn ENDP
  134.  
  135.  
  136. SetStatOff  PROC FAR
  137.  
  138.             FarEnter
  139.  
  140.             push    ax
  141.             push    dx
  142. ;
  143. ;       _Execute("SET STATUS OFF")
  144. ;
  145.             mov     dx, @data
  146.             mov     ax, offset StatOff
  147.  
  148.             call    _Execute
  149.  
  150.             pop     dx
  151.             pop     ax
  152.  
  153.             FarExit
  154.  
  155.             ret
  156. SetStatOff ENDP
  157.  
  158. StartUp PROC FAR
  159.  
  160.             FarEnter                    ; bp := sp
  161. ;
  162. ;       ITEMID Bar1_Id
  163. ;       ITEMID Bar2_Id
  164. ;       ITEMID Bar3_Id
  165. ;       ITEMID Bar4_Id
  166. ;
  167. Bar1_Id = -sizeof_ITEMID
  168. Bar2_Id = Bar1_Id-sizeof_ITEMID
  169. Bar3_Id = Bar2_Id+Bar1_Id-sizeof_ITEMID
  170. Bar4_Id = Bar3_Id+Bar2_Id-Bar1_Id-sizeof_ITEMID
  171.  
  172.             sub     sp, 4*sizeof_ITEMID
  173.  
  174.             push    ax
  175.             push    bx
  176.             push    cx
  177.             push    dx
  178.             push    ds
  179.  
  180.             mov     ax, @data
  181.             mov     ds, ax
  182. ;
  183. ;   ╝WÑ[ñ@¡╙ÑDÑ\»α┐∩╢╡ (PAD) ª▄ FoxPro ¿t▓╬Ñ\»α¬φ│µñW
  184. ;
  185. ;       SysMenuId = _MenuId(_SYSMENU)
  186. ;
  187.             mov     ax, _SYSMENU
  188.  
  189.             _MenuId                         ; dx:ax := _MenuId(ax)
  190.  
  191.             mov     [SysMenuId], ax
  192.             mov     [SysMenuId+2], dx
  193.  
  194. ;
  195. ;       PadId = _GetNewItemId(SysMenuId)
  196. ;
  197.             _GetNewItemId                   ; dx:ax := _GetNewItemId(dx:ax)
  198.  
  199.             mov     [PadId], ax
  200.             mov     [PadId+2], dx
  201. ;
  202. ;       if (_NewItem(SysMenuId, PadId, _LASTITEM, "E\\<nvironment"))
  203. ;       {
  204. ;           _Error(623); /* Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q */
  205. ;       }
  206. ;
  207.             mov     bx, ax                  ; cx:bx := ITEMID PadId
  208.             mov     cx, dx
  209.  
  210.             mov     ax, offset PadPrompt    ; push char FAR * PadPrompt
  211.  
  212.             push    ds
  213.             push    ax
  214.  
  215.             mov     ax, _LASTITEM           ; push ITEMID _LASTITEM
  216.             cwd
  217.             push    dx
  218.             push    ax
  219.  
  220.             mov     ax, [SysMenuId]
  221.             mov     dx, [SysMenuId+2]
  222.  
  223.             call    _NewItem
  224.  
  225.             or      ax, ax
  226.             jz      L1
  227.  
  228.             mov     ax,  623                ; Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q
  229.             call    _Error
  230. L1:
  231. ;
  232. ;   ⌐w╕q╖s╝WñºÑDÑ\»α┐∩╢╡ (PAD) ¬║ñU⌐╘¼≡┼πªíÑ\»α¬φ│µ (POPUP)
  233. ;
  234. ;       PopupId = _GetNewMenuId();
  235. ;
  236.             _GetNewMenuId
  237.  
  238.             mov     [PopupId], ax
  239.             mov     [PopupId+2], dx
  240. ;
  241. ;       if (Error = _NewMenu(MPOPUP, PopupId))
  242. ;       {
  243. ;           _Error(-Error);
  244. ;       }
  245. ;
  246.             mov     bx, ax
  247.             mov     cx, dx
  248.  
  249.             mov     ax, MPOPUP
  250.  
  251.             call    _NewMenu
  252.  
  253.             or      ax, ax
  254.             jz      L2
  255.  
  256.             neg     ax
  257.             call    _Error
  258. L2:
  259. ;
  260. ;       Bar1_Id = _GetNewItemId(PopupId);
  261. ;
  262.             mov     ax, [PopupId]           ; dx:ax := PopupId
  263.             mov     dx, [PopupId+2]
  264.  
  265.             _GetNewItemId
  266.  
  267.             mov     [bp+Bar1_Id], ax
  268.             mov     [bp+Bar1_Id+2], dx
  269. ;
  270. ;   ╜╨¬`╖N: ╜╨⌐≤⌐IÑsÑ⌠ª≤¿ΣѪ _GetNewItemId() ½eѲ⌐IÑs _NewItem()
  271. ;
  272. ;       if (_NewItem(PopupId, Bar1_Id, _LASTITEM, "\\<1.CLOCK  ON"))
  273. ;       {
  274. ;           _Error(623); /* Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q  */
  275. ;       }
  276. ;
  277.             mov     bx, ax                  ; cx:bx := ITEMID Bar1_Id
  278.             mov     cx, dx
  279.  
  280.             mov     ax, offset Bar1_Prompt  ; push char FAR * Bar1_Prompt
  281.  
  282.             push    ds
  283.             push    ax
  284.  
  285.             mov     ax, _LASTITEM           ; push ITEMID _LASTITEM
  286.             cwd
  287.             push    dx
  288.             push    ax
  289.  
  290.             mov     ax, [PopupId]
  291.             mov     dx, [PopupId+2]
  292.  
  293.             call    _NewItem
  294.  
  295.             or      ax, ax
  296.             jz      L3
  297.  
  298.             mov     ax,  623                ; Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q
  299.             call    _Error
  300. L3:
  301. ;
  302. ;       Bar2_Id = _GetNewItemId(PopupId);
  303. ;
  304.             mov     ax, [PopupId]           ; dx:ax := PopupId
  305.             mov     dx, [PopupId+2]
  306.  
  307.             _GetNewItemId
  308.  
  309.             mov     [bp+Bar2_Id], ax
  310.             mov     [bp+Bar2_Id+2], dx
  311. ;
  312. ;       if (_NewItem(PopupId, Bar2_Id, _LASTITEM, "\\<2.CLOCK  OFF"))
  313. ;       {
  314. ;           _Error(623); /* Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q */
  315. ;       }
  316. ;
  317.             mov     bx, ax                  ; cx:bx := ITEMID Bar2_Id
  318.             mov     cx, dx
  319.  
  320.             mov     ax, offset Bar2_Prompt  ; push char FAR * Bar2_Prompt
  321.             push    ds
  322.             push    ax
  323.  
  324.             mov     ax, _LASTITEM           ; push ITEMID _LASTITEM
  325.             cwd
  326.             push    dx
  327.             push    ax
  328.  
  329.             mov     ax, [PopupId]
  330.             mov     dx, [PopupId+2]
  331.  
  332.             call    _NewItem
  333.  
  334.             or      ax, ax
  335.             jz      L4
  336.  
  337.             mov     ax,  623                ; Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q
  338.             call    _Error
  339. L4:
  340.  
  341.  
  342. ;
  343. ;       Bar3_Id = _GetNewItemId(PopupId);
  344. ;
  345.             mov     ax, [PopupId]           ; dx:ax := PopupId
  346.             mov     dx, [PopupId+2]
  347.  
  348.             _GetNewItemId
  349.  
  350.             mov     [bp+Bar3_Id], ax
  351.             mov     [bp+Bar3_Id+2], dx
  352. ;
  353. ;       if (_NewItem(PopupId, Bar3_Id, _LASTITEM, "\\<3.STATUS ON"))
  354. ;       {
  355. ;           _Error(623); /* Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q  */
  356. ;       }
  357. ;
  358.             mov     bx, ax                  ; cx:bx := ITEMID Bar3_Id
  359.             mov     cx, dx
  360.  
  361.             mov     ax, offset Bar3_Prompt  ; push char FAR * Bar3_Prompt
  362.             push    ds
  363.             push    ax
  364.  
  365.             mov     ax, _LASTITEM           ; push ITEMID _LASTITEM
  366.             cwd
  367.             push    dx
  368.             push    ax
  369.  
  370.             mov     ax, [PopupId]
  371.             mov     dx, [PopupId+2]
  372.  
  373.             call    _NewItem
  374.  
  375.             or      ax, ax
  376.             jz      L5
  377.  
  378.             mov     ax,  623                ; Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q
  379.             call    _Error
  380. L5:
  381.  
  382.  
  383. ;
  384. ;       Bar4_Id = _GetNewItemId(PopupId);
  385. ;
  386.             mov     ax, [PopupId]           ; dx:ax := PopupId
  387.             mov     dx, [PopupId+2]
  388.  
  389.             _GetNewItemId
  390.  
  391.             mov     [bp+Bar4_Id], ax
  392.             mov     [bp+Bar4_Id+2], dx
  393. ;
  394. ;       if (_NewItem(PopupId, Bar4_Id, _LASTITEM, "\\<4.STATUS OFF"))
  395. ;       {
  396. ;           _Error(623); /* Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q  */
  397. ;       }
  398. ;
  399.             mov     bx, ax                  ; cx:bx := ITEMID Bar4_Id
  400.             mov     cx, dx
  401.  
  402.             mov     ax, offset Bar4_Prompt  ; push char FAR * Bar4_Prompt
  403.             push    ds
  404.             push    ax
  405.  
  406.             mov     ax, _LASTITEM           ; push ITEMID _LASTITEM
  407.             cwd
  408.             push    dx
  409.             push    ax
  410.  
  411.             mov     ax, [PopupId]
  412.             mov     dx, [PopupId+2]
  413.  
  414.             call    _NewItem
  415.  
  416.             or      ax, ax
  417.             jz      L6
  418.  
  419.             mov     ax,  623                ; Ñ\»α┐∩╢╡╡L¬k│Q⌐w╕q
  420.             call    _Error
  421. L6:
  422.  
  423.  
  424. ;
  425. ; ▒NñU⌐╘¼≡┼πªíÑ\»α¬φ│µ (POPUP:PopupId) ªw╕m⌐≤╖s╝WñºÑDÑ\»α┐∩╢╡ (PAD:PadId) ñW
  426. ;
  427. ;       _SetItemSubMenu(SysMenuId, PadId, PopupId);
  428. ;
  429.             mov     ax, [PopupId]
  430.             mov     dx, [PopupId+2]
  431.             push    dx
  432.             push    ax
  433.  
  434.             mov     bx, [PadId]
  435.             mov     cx, [PadId+2]
  436.  
  437.             mov     ax, [SysMenuId]
  438.             mov     dx, [SysMenuId+2]
  439.  
  440.             call    _SetItemSubMenu
  441. ;
  442. ;   │]⌐w╝÷┴Σ
  443. ;
  444. ;       _SetItemCmdKey(SysMenuId, PadId, 0x4100 |  49, "");
  445. ;
  446.             mov     ax, offset NullString
  447.  
  448.             push    ds
  449.             push    ax
  450.  
  451.             mov     ax, 4100h or 49
  452.             push    ax
  453.  
  454.             mov     bx, [PadId]
  455.             mov     cx, [PadId+2]
  456.  
  457.             mov     ax, [SysMenuId]
  458.             mov     dx, [SysMenuId+2]
  459.  
  460.             call    _SetItemCmdKey
  461. ;
  462. ;       _SetItemCmdKey(PopupId, Bar1_Id, 0x4100 | 120, "Alt+1");
  463. ;
  464.             mov     ax, offset Alt1_String
  465.  
  466.             push    ds
  467.             push    ax
  468.  
  469.             mov     ax, 4100h or 120
  470.             push    ax
  471.  
  472.             mov     bx, [bp+Bar1_Id]
  473.             mov     cx, [bp+Bar1_Id+2]
  474.  
  475.             mov     ax, [PopupId]
  476.             mov     dx, [PopupId+2]
  477.  
  478.             call    _SetItemCmdKey
  479. ;
  480. ;       _SetItemCmdKey(PopupId, Bar2_Id, 0x4100 | 121, "Alt+2");
  481. ;
  482.             mov     ax, offset Alt2_String
  483.             push    ds
  484.             push    ax
  485.  
  486.             mov     ax, 4100h or 121
  487.             push    ax
  488.  
  489.             mov     bx, [bp+Bar2_Id]
  490.             mov     cx, [bp+Bar2_Id+2]
  491.  
  492.             mov     ax, [PopupId]
  493.             mov     dx, [PopupId+2]
  494.  
  495.             call    _SetItemCmdKey
  496.  
  497.  
  498. ;
  499. ;       _SetItemCmdKey(PopupId, Bar3_Id, 0x4100 | 122, "Alt+3");
  500. ;
  501.             mov     ax, offset Alt3_String
  502.             push    ds
  503.             push    ax
  504.  
  505.             mov     ax, 4100h or 122
  506.             push    ax
  507.  
  508.             mov     bx, [bp+Bar3_Id]
  509.             mov     cx, [bp+Bar3_Id+2]
  510.  
  511.             mov     ax, [PopupId]
  512.             mov     dx, [PopupId+2]
  513.  
  514.             call    _SetItemCmdKey
  515.  
  516.  
  517. ;
  518. ;       _SetItemCmdKey(PopupId, Bar4_Id, 0x4100 | 123, "Alt+4");
  519. ;
  520.             mov     ax, offset Alt4_String
  521.             push    ds
  522.             push    ax
  523.  
  524.             mov     ax, 4100h or 123
  525.             push    ax
  526.  
  527.             mov     bx, [bp+Bar4_Id]
  528.             mov     cx, [bp+Bar4_Id+2]
  529.  
  530.             mov     ax, [PopupId]
  531.             mov     dx, [PopupId+2]
  532.  
  533.             call    _SetItemCmdKey
  534.  
  535.  
  536. ;
  537. ;   │]⌐wªU¡╙ñlÑ\»α┐∩╢╡│Q┐∩╛▄½ß⌐╥¡n░⌡ªµñº▒`ªí
  538. ;
  539. ;       _OnSelection(PopupId, Bar1_Id, SetClockOn);
  540. ;
  541.             mov     ax, offset SetClockOn
  542.             push    cs
  543.             push    ax
  544.  
  545.             mov     bx, [bp+Bar1_Id]
  546.             mov     cx, [bp+Bar1_Id+2]
  547.  
  548.             mov     ax, [PopupId]
  549.             mov     dx, [PopupId+2]
  550.  
  551.             call    _OnSelection
  552. ;
  553. ;       _OnSelection(PopupId, Bar2_Id, SetClockOff);
  554. ;
  555.             mov     ax, offset SetClockOff
  556.             push    cs
  557.             push    ax
  558.  
  559.             mov     bx, [bp+Bar2_Id]
  560.             mov     cx, [bp+Bar2_Id+2]
  561.  
  562.             mov     ax, [PopupId]
  563.             mov     dx, [PopupId+2]
  564.  
  565.             call    _OnSelection
  566.  
  567. ;
  568. ;       _OnSelection(PopupId, Bar3_Id, SetStatOn);
  569. ;
  570.             mov     ax, offset SetStatOn
  571.             push    cs
  572.             push    ax
  573.  
  574.             mov     bx, [bp+Bar3_Id]
  575.             mov     cx, [bp+Bar3_Id+2]
  576.  
  577.             mov     ax, [PopupId]
  578.             mov     dx, [PopupId+2]
  579.  
  580.             call    _OnSelection
  581.  
  582. ;
  583. ;       _OnSelection(PopupId, Bar4_Id, SetStatOff);
  584. ;
  585.             mov     ax, offset SetStatOff
  586.             push    cs
  587.             push    ax
  588.  
  589.             mov     bx, [bp+Bar4_Id]
  590.             mov     cx, [bp+Bar4_Id+2]
  591.  
  592.             mov     ax, [PopupId]
  593.             mov     dx, [PopupId+2]
  594.  
  595.             call    _OnSelection
  596.  
  597.  
  598.             pop     ds
  599.             pop     dx
  600.             pop     cx
  601.             pop     bx
  602.             pop     ax
  603.  
  604.             add     sp, 4*sizeof_ITEMID
  605.  
  606.             FarExit
  607.  
  608.             ret
  609. StartUp     ENDP
  610.  
  611.  
  612. ShutDown PROC FAR
  613.  
  614.             FarEnter
  615.  
  616.             push    ax
  617.             push    bx
  618.             push    cx
  619.             push    dx
  620.             push    ds
  621.  
  622.             mov     ax, @data
  623.             mov     ds, ax
  624. ;
  625. ;       _DisposeItem(SysMenuId, PadId);
  626. ;
  627.             mov     bx, [PadId]
  628.             mov     cx, [PadId+2]
  629.             mov     ax, [SysMenuId]
  630.             mov     dx, [SysMenuId+2]
  631.  
  632.             call    _DisposeItem
  633. ;
  634. ;       _DisposeMenu(PopupId);
  635. ;
  636.             mov     ax, [PopupId]
  637.             mov     dx, [PopupId+2]
  638.  
  639.             pop     ds
  640.             pop     dx
  641.             pop     cx
  642.             pop     bx
  643.             pop     ax
  644.  
  645.             FarExit
  646.  
  647.             ret
  648. ShutDown    ENDP
  649.             END
  650.