home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 570.lha / PopUpMenu_v4.2 / source.LZH / source / Seloptions.a < prev   
Encoding:
Text File  |  1991-10-25  |  10.8 KB  |  424 lines

  1.          opt        l+,c+,d+,y+
  2.          opt        ow1+,ow2+,ow3+,ow4+,ow5+,ow6+
  3.  
  4.            INCDIR      ":psprÃ¥k/asm/include/"
  5.            INCLUDE      "exec/types.i"
  6.            INCLUDE      "PopUpMenu.i"
  7.  
  8.            xref     @SelectOpt
  9.            xref     @Mystrlen     * In overlay root
  10.  
  11.            xdef     @SelectOptions
  12.            xdef     @GetCommandLine
  13.            xdef     @GetWBCommandLine
  14.            xdef     @MyWrite
  15.  
  16.            section     text,code
  17. @SelectOptions:
  18.            MOVE.W     D2,D0
  19.            JMP     @SelectOpt(PC)
  20.            RTS
  21.  
  22. ***********************************************************
  23. * UWORD  GetCommandLine(OldOptions, CommandLine, Length)  *
  24. *                D3          A5      D2      *
  25. * Input:                          *
  26. *   CommandLine    - Pointer to command line          *
  27. *   Length       - Length of Command line          *
  28. * Output:                          *
  29. *   Selected options                      *
  30. *                              *
  31. ***********************************************************
  32. @GetCommandLine:
  33.            MOVEM.L     D2-D4/A5/A6,-(SP)
  34. ****************************************
  35. * D2 = Length        A5 = Command line  *
  36. * D3.W = Selected               *
  37. ****************************************
  38. Start:           TST.L     D2
  39.            BEQ.W     Done
  40.            MOVEQ.L     #0,D0
  41.  
  42. * ------------ Find first non blank
  43. 1$           MOVE.B     (A5)+,D0
  44.            SUBQ.L     #1,D2
  45.            BEQ.W     Done
  46.            CMP.B     #' ',D0
  47.            BLE.B     1$
  48.  
  49. * ------------ Is it a '-' ?
  50.            CMP.B     #'-',D0
  51.            BNE.B     Help           * No
  52.  
  53. * ------------ Get option
  54.            MOVEQ.L     #' ',D1
  55.            MOVE.B     (A5)+,D0
  56.            SUBQ.L     #1,D2
  57.            BEQ.B     2$
  58.  
  59. * ------------ Is it followed by a '-'
  60.            MOVE.B     (A5)+,D1
  61.            SUBQ.L     #1,D2
  62.  
  63. * ------------ make option lowercase
  64. 2$           OR.B     #$20,D0   * Make small char
  65.  
  66.            SUB.B     #'c',D0
  67.            BNE.B     optH
  68.  
  69. * ------------ Option: ClickMenues
  70.            MOVEQ.L     #CLICKMENUES+8,D0
  71.            BRA.B     SetOption
  72.  
  73. optH:           SUBQ.L     #'h'-'c',D0
  74.            BNE.B     optI
  75.  
  76. * ------------ Output Helptext
  77. Help:           MOVEQ.L     #4,D2
  78.            JSR     @MyWrite
  79.  
  80.            MOVEQ.L     #0,D3
  81.            BRA.W     Done
  82.  
  83. optI:           SUBQ.L     #'i'-'h',D0
  84.            BNE.B     optK
  85.  
  86. * ------------ Option: ITEMCENTERED
  87.            MOVEQ.L     #ITEMSCENTERED+8,D0
  88.            BRA.B     SetOption
  89.  
  90. optK:           SUBQ.L     #'k'-'i',D0
  91.            BNE.B     optN
  92.  
  93. * ------------ Option: HotKey
  94. * ------------ convert first digit
  95.            MOVE.B     D1,D0
  96.            BSR.B     Hex2Bin
  97.            MOVE.B     D0,D4
  98.            BMI.B     Help           * Not hex
  99.            LSL.L     #4,D4
  100.  
  101. * ------------ is there more digits ?
  102.            SUBQ.L     #1,D2
  103.            BMI.B     Help           * No
  104.  
  105.            MOVE.B     (A5)+,D0
  106.            BSR.B     Hex2Bin
  107.            OR.W     D0,D4           * Must be word to set flags
  108.            BMI.B     Help
  109.  
  110. * ------------ Save new HotKey
  111.            MOVE.B     D4,D3
  112.            BRA.B     Start
  113.  
  114. * ------------ Code to convert hex characters
  115. Hex2Bin:       OR.B     #$20,D0
  116.            LEA     HexChars(PC),A0
  117.            MOVEQ.L     #15,D1
  118. 1$           CMP.B     (A0)+,D0
  119.            DBEQ     D1,1$
  120.            MOVE.W     D1,D0
  121.            RTS
  122.  
  123. optN:           SUBQ.L     #'n'-'k',D0
  124.            BNE.B     optO
  125.  
  126. * ------------ Option: POPUPNOQUAL
  127.            MOVEQ.L     #POPUPNOQUAL+8,D0
  128.            BRA.B     SetOption
  129.  
  130. optO:           SUBQ.L     #'o'-'n',D0
  131.            BNE.B     optP
  132.  
  133. * ------------ Option: OPENWINDOW
  134.            MOVEQ.L     #OPENWINDOW+8,D0
  135.            BRA.B     SetOption
  136.  
  137. optP:           SUBQ.L     #'p'-'o',D0
  138.            BNE.B     optQ
  139.  
  140. * ------------ Option: SUBITEMPOINTER
  141.            MOVEQ.L     #SUBITEMPOINTER+8,D0
  142.            BRA.B     SetOption
  143.  
  144. optQ:           SUBQ.L     #'q'-'p',D0
  145.            BNE.B     optS
  146.  
  147. * ------------ Option: POPUPWITHQUAL
  148.            MOVEQ.L     #POPUPWITHQUAL+8,D0
  149.            BRA.B     SetOption
  150.  
  151. optS:           SUBQ.L     #'s'-'q',D0
  152.            BNE.B     optX
  153.  
  154. * ------------ Option: SHOWSINGLEMENU
  155.            MOVEQ.L     #SHOWSINGLEMENU+8,D0
  156.            BRA.B     SetOption
  157.  
  158. optX:           SUBQ.L     #'x'-'s',D0
  159.            BNE.B     Help
  160.  
  161. * ------------ Option: EXIT
  162.            MOVEQ.L     #EXIT+8,D0
  163.  
  164. SetOption:     MOVEQ.L     #1,D4
  165.            ASL.L     D0,D4
  166.            NOT.L     D4
  167.            AND.L     D4,D3
  168.            CMP.B     #' ',D1
  169.            BGT.B     1$
  170.            NOT.L     D4
  171.            OR.L     D4,D3
  172.            BRA.W     Start
  173. 1$           CMP.B     #'-',D1
  174.            BNE.W     Help
  175.            BRA.W     Start
  176.  
  177. Done:           MOVE.W     D3,D0
  178.            MOVEM.L     (SP)+,D2-D4/A5/A6
  179.            RTS
  180.  
  181. ****************************************
  182. * UWORD  GetWBCommandLine(OldOptions)  *
  183. *                D3           *
  184. * Input:                   *
  185. * Output:                   *
  186. *   Selected options               *
  187. ****************************************
  188. @GetWBCommandLine:
  189.            MOVEM.L     D2-D3/D5-D6/A2-A3/A6,-(SP)
  190.            MOVEA.L     (A4),A6
  191.  
  192. * ------------ Open icon.library
  193.            LEA     ICONNAME(PC),A1
  194.            MOVEQ.L     #LIBVERSION,D0
  195.            JSR     _LVOOpenLibrary(A6)
  196.            MOVE.L     D0,D6
  197.            BEQ.B     NoIconLib
  198.  
  199. ************************************
  200. * D3 = Old Options   A6 = ExecBase *
  201. * D6 = IconBase            *
  202. ************************************
  203. * ------------ Set current directory { CurrentDir(WBenchMsg->sm_ArgList[0].wa_Lock) }
  204.            MOVEA.L     _DOSBase(A4),A6
  205.            MOVE.L     _WBenchMsg(A4),A0
  206.            MOVE.L     sm_ArgList(A0),A2
  207.            MOVE.L     A2,D0
  208.            BEQ.B     NoArgList
  209.            MOVE.L     wa_Lock(A2),D1
  210.            JSR     _LVOCurrentDir(A6)
  211.  
  212. * ------------ Save old directory
  213.            MOVE.L     D0,D5
  214.  
  215. ***************************************
  216. * D3 = Old options     A2 = ArgList *
  217. * D5 = old currentdir     A6 = DOSbase *
  218. * D6 = IconBase               *
  219. ***************************************
  220. * ------------ Get the icon.  { GetDiskObject(WbenchMsg->sm_ArgList[0].wa_Name) }
  221.            MOVE.L     wa_Name(A2),A0
  222.            MOVE.L      D6,A6
  223.            JSR     _LVOGetDiskObject(A6)
  224.            MOVE.L     D0,A3
  225.            TST.L     D0
  226.            BEQ.B     NoDiskObject
  227.  
  228. *****************************************
  229. * D3 = Old options    A2 = ArgList    *
  230. * D5 = Old current dir    A3 = DiskObject *
  231. * D6 = DOSBase        A6 = IconBase    *
  232. *****************************************
  233. * ------------ Find the 'ARG=' string
  234.            MOVE.L     do_ToolTypes(A3),A0
  235.            LEA     ARGTEXT(PC),A1
  236.            JSR     _LVOFindToolTypes(A6)
  237.            TST.L     D0
  238.            BEQ.B     NoArgs
  239.  
  240. * ------------ GetCommandLine(OldOptions, CommandLine, strlen(CommandLine))
  241.            MOVE.L     D0,A5
  242.            MOVE.L     D0,A0
  243.            JSR     @Mystrlen
  244.            MOVE.L     D0,D2
  245.            JSR     @GetCommandLine(PC)
  246.            TST.W     D0
  247.            BEQ.B     WrongOptions
  248.            MOVE.L     D0,D3
  249.  
  250. *******************************************
  251. * D5 = Old currentdir     A2 = ArgList      *
  252. * D6 = DOSBase         A3 = DiskObject  *
  253. * D3 = New options     A6 = IconBase      *
  254. *******************************************
  255. * ------------ Return the disk object
  256. WrongOptions:
  257. NoArgs:        MOVEA.L     A3,A0
  258.            JSR     _LVOFreeDiskObject(A6)
  259.  
  260. * ------------ Restore current directory
  261. NoDiskObject:  MOVE.L      _DOSBase(A4),A6
  262.            MOVE.L     D5,D1
  263.            BEQ.B     NoCurrentDir
  264.            JSR     _LVOCurrentDir(A6)
  265.  
  266. * ------------ Close library
  267. NoCurrentDir:
  268. NoArgList:     MOVE.L     D6,A1
  269.            MOVEA.L     (A4),A6
  270.            JSR     _LVOCloseLibrary(A6)
  271.  
  272. NoIconLib:     MOVE.L     D3,D0
  273.            MOVEM.L     (SP)+,D2-D3/D5-D6/A2-A3/A6
  274.            RTS
  275.  
  276. ***********************************************************
  277. * VOID MyWrite(TextNumber, Options)  print text to stdout *
  278. *         D2        D3                  *
  279. *  Input:                          *
  280. *    TextNumber    0 - Install                  *
  281. *           1 - Options                  *
  282. *           2 - Quit                  *
  283. *           3 - Error                  *
  284. *           4 - Help                  *
  285. *    Options       only used if TextNumber = 1          *
  286. ***********************************************************
  287. @MyWrite:      MOVEM.L      D2-D6/A6,-(SP)
  288.            MOVE.L      D2,D4
  289.            MOVE.L      D3,D5
  290.  
  291. * ------------ Find stdout
  292.            MOVEA.L      _DOSBase(A4),A6
  293.            JSR      _LVOOutput(A6)
  294.            MOVE.L      D0,D6
  295.            BEQ.W      NoStdout
  296.  
  297. * ------------ Output PopUpMenu text
  298.            MOVE.L      D6,D1
  299.            LEA      POPUPMSG(PC),A0
  300.            MOVE.L      A0,D2
  301.            MOVEQ.L      #POPUPMSG_sizeof,D3
  302.            JSR      _LVOWrite(A6)
  303.  
  304. * ------------ Find what to print
  305.            SUBQ.L      #1,D4
  306.            BMI.B      InstallText      * 0
  307.            BEQ.B      OptionsText      * 1
  308.            SUBQ.B      #2,D4
  309.            BMI.W      QuitText      * 2
  310.            BEQ.W      FailedText      * 3
  311.  
  312. * ------------ print helptext
  313. HelpText:      LEA      HELPMSG(PC),A0
  314.            MOVE.L      #HELPMSG_sizeof,D3
  315.            BRA.W      Print
  316.  
  317. * ------------ print installed
  318. InstallText:   LEA      INSTALLMSG(PC),A0
  319.            MOVEQ.L      #INSTALLMSG_sizeof,D3
  320.            BRA.W      Print
  321.  
  322. * ------------ Build option string
  323. OptionsText:   LEA      OptionBuffer2(PC),A0
  324.            MOVEQ.L      #OptionBuffer2-OptionBuffer+1,D3   * 'Current options: ...  \n'
  325.            BTST      #CLICKMENUES+8,D5
  326.            BEQ.B      1$
  327.            MOVE.L      #' -C ',(A0)+
  328.            ADDQ.L      #4,D3
  329. 1$           BTST      #SUBITEMPOINTER+8,D5
  330.            BEQ.B      2$
  331.            MOVE.L      #' -P ',(A0)+
  332.            ADDQ.L      #4,D3
  333. 2$           BTST      #POPUPNOQUAL+8,D5
  334.            BEQ.B      3$
  335.            MOVE.L      #' -N ',(A0)+
  336.            ADDQ.L      #4,D3
  337. 3$           BTST      #POPUPWITHQUAL+8,D5
  338.            BEQ.B      4$
  339.            MOVE.L      #' -Q ',(A0)+
  340.            ADDQ.L      #4,D3
  341. 4$           BTST      #SHOWSINGLEMENU+8,D5
  342.            BEQ.B      5$
  343.            MOVE.L      #' -S ',(A0)+
  344.            ADDQ.L      #4,D3
  345. 5$           BTST      #ITEMSCENTERED+8,D5
  346.            BEQ.B      6$
  347.            MOVE.L      #' -I ',(A0)+
  348.            ADDQ.L      #4,D3
  349. 6$           MOVE.W      #'-K',(A0)+
  350.  
  351.            LEA      HexChars(PC),A1
  352.            MOVEQ.L      #0,D0
  353.            MOVE.B      D5,D0
  354.            LSR.B      #4,D0
  355.            NEG.W      D0
  356.            MOVE.B      $0f(A1,D0.W),(A0)+
  357.            AND.W      #$0f,D5
  358.            NEG.W      D5
  359.            MOVE.B      $0f(A1,D5.W),(A0)+
  360.            ADDQ.L      #4,D3
  361.  
  362.            MOVE.B      #$0a,(A0)
  363.  
  364.            LEA      OptionBuffer(PC),A0
  365.            BRA.B      Print
  366.  
  367. * ------------ print removed message
  368. QuitText:      LEA      QUITMSG(PC),A0
  369.            MOVEQ.L      #QUITMSG_sizeof,D3
  370.            BRA.B      Print
  371.  
  372. * ------------ print failed message
  373. FailedText:    LEA      ERRORMSG(PC),A0
  374.            MOVEQ.L      #ERRORMSG_sizeof,D3
  375.  
  376. Print:           MOVE.L      D6,D1
  377.            MOVE.L      A0,D2
  378.            JSR      _LVOWrite(A6)
  379.  
  380. NoStdout:      MOVEM.L      (SP)+,D2-D6/A6
  381.            RTS
  382.  
  383. ICONNAME       dc.b      "icon.library",0
  384.            EVEN
  385. ARGTEXT        dc.b      "ARG",0
  386.            EVEN
  387. HexChars:      dc.b      "fedcba9876543210"
  388.  
  389.            EVEN      *0 2 4 6 8 0 2 4 6
  390. OptionBuffer:  dc.b      " Current options ="
  391. OptionBuffer2: dc.b      " -C  -S  -N  -Q  -S  -T -K##\n"
  392.  
  393.            EVEN
  394. POPUPMSG:      dc.b      $0a,$9b,"0;33m","PopUpMenu",$9b,"0m "
  395. POPUPMSG_sizeof:   EQU      *-POPUPMSG
  396.            EVEN
  397. INSTALLMSG:    dc.b      "ver 4.2 installed.",$0a,$a9," Martin Adrian 1991",$0a
  398. INSTALLMSG_sizeof: EQU      *-INSTALLMSG
  399.            EVEN
  400. QUITMSG:       dc.b      "removed.",$0a
  401. QUITMSG_sizeof:    EQU      *-QUITMSG
  402.            EVEN
  403. ERRORMSG:      dc.b      "failed !!",$0a
  404. ERRORMSG_sizeof:   EQU      *-ERRORMSG
  405.  
  406.            EVEN
  407. HELPMSG:       dc.b     " ver 4.2",$0a,$0a
  408.            dc.b     "Usage: [Run] PopUpMenu [Options]",$0a
  409.            dc.b     " -H     Help (this text).",$0a
  410.            dc.b     " -C[-]  Clickmenues.",$0a
  411.            dc.b     " -P[-]  show sub-item Pointer.  (default)",$0a
  412.            dc.b     " -S[-]  Show single menu.",$0a
  413.            dc.b     " -I[-]  display Items centered around menu.",$0a
  414.            dc.b     " -N[-]  pop-up menues when No qualifier pressed.  (default)",$0a
  415.            dc.b     " -Q[-]  pop-up menues when Qualifier pressed.",$0a
  416.            dc.b     " -O[-]  Open options window.  (default)",$0a
  417.            dc.b     " -K##   set hot-Key [Hex].  (default 19 = 'P')",$0a
  418.            dc.b     " -X     eXit PopUpMenu.",$0a
  419.            dc.b     " '-' after option will disable it",$0a
  420. HELPMSG_sizeof:  EQU     *-HELPMSG
  421.  
  422.  
  423.  
  424.