home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d8xx / d896 / scripttool.lha / ScriptTool / Source / ScriptTool.s
Text File  |  1993-06-22  |  7KB  |  336 lines

  1. ; ScriptTool V1.02  Tuesday 22-Jun-93
  2. ; (c) 1993 by Jan Hagqvist
  3. ;
  4. ; Scripts to Workbench's Tools-menu
  5. ;
  6.  
  7.  
  8. MENUAMOUNT    equ 50
  9. MENUTEXTSIZE    equ 50
  10. SCRIPTTEXTSIZE    equ 100
  11.  
  12.  
  13.  XREF _LVOOldOpenLibrary
  14.  XREF _LVOCloseLibrary
  15.  XREF _LVOOutput
  16.  XREF _LVOWrite
  17.  XREF _LVORead
  18.  XREF _LVOOpen
  19.  XREF _LVOClose
  20.  XREF _LVOExecute
  21.  XREF _LVOInput
  22.  XREF _LVOCreateMsgPort
  23.  XREF _LVOAddAppMenuItemA
  24.  XREF _LVOWaitPort
  25.  XREF _LVOGetMsg
  26.  XREF _LVOReplyMsg
  27.  XREF _LVORemoveAppMenuItem
  28.  XREF _LVODeleteMsgPort
  29.  XREF _LVOForbid
  30.  XREF _LVOPermit
  31.  XREF _LVOFindPort
  32.  XREF _LVOAddPort
  33.  XREF _LVORemPort
  34.  
  35. ScriptTool
  36.   move.l  4,a6            ; Exec base
  37.   lea     DosName(pc),a1
  38.   jsr     _LVOOldOpenLibrary(a6)
  39.   move.l  d0,DosBase
  40.   move.l  a6,a0
  41.   add.l   #21,a0
  42.   cmp.b   #36,(a0)        ; Exec 36+?
  43.   bpl.s   Dos2.04
  44.   move.l  DosBase(pc),a6
  45.   jsr     _LVOOutput(a6)
  46.   move.l  d0,d1
  47.   lea     No2.0(pc),a0
  48.   move.l  a0,d2
  49.   moveq.l #27,d3
  50.   jsr     _LVOWrite(a6)
  51.   bra     Exit1
  52. Dos2.04
  53.   jsr     _LVOForbid(a6)
  54.   lea     PortName(pc),a1
  55.   jsr     _LVOFindPort(a6)
  56.   move.l  d0,d7
  57.   jsr     _LVOPermit(a6)
  58.   tst.l   d7
  59.   bne     Exit4
  60.   move.l  DosBase(pc),a6
  61.   lea     ToolFile(pc),a0
  62.   move.l  a0,d1
  63.   move.l  #1005,d2
  64.   jsr     _LVOOpen(a6)
  65.   move.l  d0,ToolFileHandle
  66.   cmp.l   #0,d0
  67.   bne.s   FileOpened
  68.   move.l  DosBase(pc),a6
  69.   jsr     _LVOOutput(a6)
  70.   move.l  d0,d1
  71.   lea     NoFile(pc),a0
  72.   move.l  a0,d2
  73.   moveq.l #24,d3
  74.   jsr     _LVOWrite(a6)
  75.   bra     Exit1
  76. FileOpened
  77.   lea     CharRead(pc),a2
  78.   move.l  a2,d2
  79.   lea     Menutext,a3
  80.   move.l  a3,a4
  81.   moveq.l #0,d5
  82. Menuload
  83.   jsr     GetLine
  84.   addq.l  #1,d5
  85.   cmp.b   #MENUAMOUNT-1,d5
  86.   bpl.s   Scriptload
  87.   move.l  a3,a4
  88.   move.l  d5,d6
  89.   mulu    #MENUTEXTSIZE,d6
  90.   add.l   d6,a4
  91.   cmp.b   #0,d4
  92.   bne.s   Menuload
  93. Scriptload
  94.   subq.l  #1,d5
  95.   move.b  d5,Entries
  96.   cmp.b   #0,d5
  97.   bne.s   ScriptLoad1
  98.   move.l  ToolFileHandle(pc),d1
  99.   jsr     _LVOClose(a6)
  100.   bra     Exit1
  101. ScriptLoad1
  102.   lea     CharRead(pc),a2
  103.   move.l  a2,d2
  104.   lea     Scripttext,a3
  105.   move.l  a3,a4
  106.   moveq.l #0,d5
  107. Scriptload2
  108.   jsr     GetLine
  109.   addq.l  #1,d5
  110.   cmp.b   #MENUAMOUNT-1,d5
  111.   bpl.s   FileRead
  112.   move.l  a3,a4
  113.   move.l  d5,d6
  114.   mulu    #SCRIPTTEXTSIZE,d6
  115.   add.l   d6,a4
  116.   cmp.b   #0,d4
  117.   bne.s   Scriptload2
  118. FileRead
  119.   move.l  ToolFileHandle(pc),d1
  120.   jsr     _LVOClose(a6)
  121.  
  122.   move.l  4,a6
  123.   jsr     _LVOCreateMsgPort(a6)
  124.   move.l  d0,STPort
  125.   tst.l   d0
  126.   bne.s   OpenWBLib
  127.   move.l  DosBase(pc),a6
  128.   jsr     _LVOOutput(a6)
  129.   move.l  d0,d1
  130.   lea     NoPort(pc),a0
  131.   move.l  a0,d2
  132.   moveq.l #25,d3
  133.   jsr     _LVOWrite(a6)
  134.   bra     Exit1
  135. OpenWBLib
  136.   move.l  d0,a4
  137.   lea     PortName(pc),a0
  138.   move.l  a0,10(a4)            ; Name the port
  139.   move.b  #0,9(a4)            ; Priority = 0
  140.   move.l  d0,a1
  141.   jsr     _LVOAddPort(a6)        ; Make port public system port
  142.   lea     WorkbenchName(pc),a1
  143.   jsr     _LVOOldOpenLibrary(a6)
  144.   move.l  d0,WorkbenchBase
  145.   move.l  d0,a6
  146.   cmp.l   #0,d0
  147.   bne.s   AddInit
  148.   move.l  DosBase(pc),a6
  149.   jsr     _LVOOutput(a6)
  150.   move.l  d0,d1
  151.   lea     NoWBLib(pc),a0
  152.   move.l  a0,d2
  153.   moveq.l #29,d3
  154.   jsr     _LVOWrite(a6)
  155.   bra     Exit2
  156. AddInit
  157.   moveq.l #1,d2
  158.   lea     Scripttext,a3
  159.   lea     Menutext,a4
  160.   lea     AppMenuItem,a5
  161.   move.b  Entries(pc),d3
  162. AddMenuItems                ; Add menu items
  163.   move.l  d2,d0
  164.   move.l  a3,d1
  165.   move.l  a4,a0
  166.   move.l  STPort(pc),a1
  167.   move.l  #0,a2
  168.   jsr     _LVOAddAppMenuItemA(a6)
  169.   move.l  d0,(a5)+
  170.   cmp.l   #0,d0
  171.   beq     Exit3
  172.   add.l   #SCRIPTTEXTSIZE,a3
  173.   add.l   #MENUTEXTSIZE,a4
  174.   addq.l  #1,d2
  175.   cmp.b   d2,d3
  176.   bpl.s   AddMenuItems
  177.  
  178.   move.l  #1234,d0            ; Add Exit-item
  179.   moveq.l #0,d1
  180.   lea     ExitName(pc),a0
  181.   move.l  STPort(pc),a1
  182.   move.l  #0,a2
  183.   jsr     _LVOAddAppMenuItemA(a6)
  184.   move.l  d0,ExitItem
  185.  
  186.   move.l  4,a6
  187.   moveq.l #1,d7
  188. MainLoop
  189.   tst.l   d7
  190.   beq     Exit
  191.   move.l  STPort(pc),a0
  192.   jsr     _LVOWaitPort(a6)
  193. MainLoop2
  194.  
  195.   move.l  STPort(pc),a0
  196.   jsr     _LVOGetMsg(a6)        ; Get message
  197.   tst.l   d0
  198.   beq.s   MainLoop            ; No message?!
  199.  
  200.   move.l  d0,a1
  201.   move.w  20(a1),d4            ; AppMessage type
  202.   move.l  22(a1),d5            ; UserData
  203.   move.l  26(a1),d6            ; ID
  204.   jsr     _LVOReplyMsg(a6)        ; Reply
  205.   cmp.b   #9,d4                ; Menuitem?
  206.   bne.s   MainLoop2            ; No, get next message
  207.  
  208.   cmp.l   #1234,d6            ; Exit-selected?
  209.   bne.s   MainLoop3            ; No
  210.   moveq.l #0,d7
  211.   bra     MainLoop2
  212. MainLoop3
  213.   move.l  DosBase(pc),a6
  214.   jsr     _LVOOutput(a6)
  215.   move.l  d0,d3
  216.   jsr     _LVOInput(a6)
  217.   move.l  d0,d2
  218.   move.l  d5,d1                ; UserData = Command string
  219.   jsr     _LVOExecute(a6)
  220.   move.l  4,a6
  221.   bra     MainLoop2
  222.  
  223. Exit
  224.   moveq.l #1,d2
  225.   move.b  Entries(pc),d3
  226.   lea     AppMenuItem,a2
  227.   move.l  WorkbenchBase,a6
  228. ExitLoop1
  229.   move.l  (a2)+,a0
  230.   jsr     _LVORemoveAppMenuItem(a6)    ; Remove Menuitems
  231.   addq.l  #1,d2
  232.   cmp.b   d2,d3
  233.   bpl.s   ExitLoop1
  234.  
  235.   move.l  ExitItem(pc),a0
  236.   jsr     _LVORemoveAppMenuItem(a6)    ; Remove Exit-item too
  237.  
  238.   move.l  4,a6
  239.   move.l  STPort(pc),a1
  240.   jsr     _LVORemPort(a6)        ; No more public
  241.   move.l  STPort(pc),a0
  242.   jsr     _LVODeleteMsgPort(a6)        ; Delete message port
  243.   move.l  WorkbenchBase(pc),a1
  244.   jsr     _LVOCloseLibrary(a6)
  245.  
  246. Exit1
  247.   move.l  4,a6
  248.   move.l  DosBase(pc),a1
  249.   jsr     _LVOCloseLibrary(a6)
  250.   moveq.l #0,d0
  251.   rts
  252.  
  253. Exit2
  254.   move.l  4,a6
  255.   move.l  STPort(pc),a1
  256.   jsr     _LVORemPort(a6)
  257.   move.l  STPort(pc),a0
  258.   jsr     _LVODeleteMsgPort(a6)
  259.   bra.s   Exit1
  260.  
  261. Exit4
  262.   move.l  DosBase(pc),a6
  263.   jsr     _LVOOutput(a6)
  264.   move.l  d0,d1
  265.   lea     PortFound(pc),a0
  266.   move.l  a0,d2
  267.   moveq.l #27,d3
  268.   jsr     _LVOWrite(a6)
  269.   bra.s   Exit1
  270.  
  271. Exit3
  272.   move.l  4,a6
  273.   move.l  STPort(pc),a1
  274.   jsr     _LVORemPort(a6)        ; No more public
  275.   move.l  STPort(pc),a0
  276.   jsr     _LVODeleteMsgPort(a6)        ; Delete message port
  277.   move.l  DosBase(pc),a6
  278.   jsr     _LVOOutput(a6)
  279.   move.l  d0,d1
  280.   lea     NoWB(pc),a0
  281.   move.l  a0,d2
  282.   moveq.l #41,d3
  283.   jsr     _LVOWrite(a6)
  284.   move.l  4,a6
  285.   move.l  WorkbenchBase(pc),a1
  286.   jsr     _LVOCloseLibrary(a6)
  287.   bra.s   Exit1
  288.  
  289. GetLine
  290.   moveq.l #1,d3
  291.   moveq.l #0,d4
  292. GetLine2
  293.   move.l  ToolFileHandle(pc),d1
  294.   jsr     _LVORead(a6)
  295.   addq.l  #1,d4
  296.   cmp.l   #-1,d0
  297.   beq.s   GetLine3
  298.   move.b  (a2),(a4)
  299.   cmp.b   #10,(a4)+
  300.   bne.s   GetLine2
  301. GetLine3
  302.   move.b  #0,-(a4)
  303.   subq.l  #1,d4
  304.   rts
  305.  
  306.  
  307. DosBase        dc.l 0
  308. ToolFileHandle    dc.l 0
  309. STPort        dc.l 0
  310. WorkbenchBase    dc.l 0
  311. ExitItem    dc.l 0
  312.  
  313. Entries        dc.b 0
  314. CharRead    dc.b 0
  315. DosName        dc.b 'dos.library',0
  316. ToolFile    dc.b 's:ToolScript',0
  317. WorkbenchName    dc.b 'workbench.library',0
  318.  
  319. No2.0        dc.b 'Needs DOS V2.0 or greater',10
  320. VERSION        dc.b '$VER: ScriptTool V1.02  Tuesday 22-Jun-93',10
  321. NoFile        dc.b 'Can''t open s:ToolScript',10
  322. NoWB        dc.b 'Can''t add menu items. Is workbench open?',10
  323. NoWBLib        dc.b 'Can''t open workbench.library',10
  324. ExitName    dc.b 'Exit Scripttool',0
  325. NoPort        dc.b 'Can''t create message port',10
  326. PortName    dc.b 'ScriptToolPort',0
  327. PortFound    dc.b 'ScriptTool already running',10
  328.  
  329.  SECTION 2,BSS
  330.  
  331. AppMenuItem    ds.l MENUAMOUNT
  332. Menutext    ds.b MENUAMOUNT*MENUTEXTSIZE
  333. Scripttext    ds.b MENUAMOUNT*SCRIPTTEXTSIZE
  334.  
  335.   END
  336.