home *** CD-ROM | disk | FTP | other *** search
- ; ScriptTool V1.02 Tuesday 22-Jun-93
- ; (c) 1993 by Jan Hagqvist
- ;
- ; Scripts to Workbench's Tools-menu
- ;
-
-
- MENUAMOUNT equ 50
- MENUTEXTSIZE equ 50
- SCRIPTTEXTSIZE equ 100
-
-
- XREF _LVOOldOpenLibrary
- XREF _LVOCloseLibrary
- XREF _LVOOutput
- XREF _LVOWrite
- XREF _LVORead
- XREF _LVOOpen
- XREF _LVOClose
- XREF _LVOExecute
- XREF _LVOInput
- XREF _LVOCreateMsgPort
- XREF _LVOAddAppMenuItemA
- XREF _LVOWaitPort
- XREF _LVOGetMsg
- XREF _LVOReplyMsg
- XREF _LVORemoveAppMenuItem
- XREF _LVODeleteMsgPort
- XREF _LVOForbid
- XREF _LVOPermit
- XREF _LVOFindPort
- XREF _LVOAddPort
- XREF _LVORemPort
-
- ScriptTool
- move.l 4,a6 ; Exec base
- lea DosName(pc),a1
- jsr _LVOOldOpenLibrary(a6)
- move.l d0,DosBase
- move.l a6,a0
- add.l #21,a0
- cmp.b #36,(a0) ; Exec 36+?
- bpl.s Dos2.04
- move.l DosBase(pc),a6
- jsr _LVOOutput(a6)
- move.l d0,d1
- lea No2.0(pc),a0
- move.l a0,d2
- moveq.l #27,d3
- jsr _LVOWrite(a6)
- bra Exit1
- Dos2.04
- jsr _LVOForbid(a6)
- lea PortName(pc),a1
- jsr _LVOFindPort(a6)
- move.l d0,d7
- jsr _LVOPermit(a6)
- tst.l d7
- bne Exit4
- move.l DosBase(pc),a6
- lea ToolFile(pc),a0
- move.l a0,d1
- move.l #1005,d2
- jsr _LVOOpen(a6)
- move.l d0,ToolFileHandle
- cmp.l #0,d0
- bne.s FileOpened
- move.l DosBase(pc),a6
- jsr _LVOOutput(a6)
- move.l d0,d1
- lea NoFile(pc),a0
- move.l a0,d2
- moveq.l #24,d3
- jsr _LVOWrite(a6)
- bra Exit1
- FileOpened
- lea CharRead(pc),a2
- move.l a2,d2
- lea Menutext,a3
- move.l a3,a4
- moveq.l #0,d5
- Menuload
- jsr GetLine
- addq.l #1,d5
- cmp.b #MENUAMOUNT-1,d5
- bpl.s Scriptload
- move.l a3,a4
- move.l d5,d6
- mulu #MENUTEXTSIZE,d6
- add.l d6,a4
- cmp.b #0,d4
- bne.s Menuload
- Scriptload
- subq.l #1,d5
- move.b d5,Entries
- cmp.b #0,d5
- bne.s ScriptLoad1
- move.l ToolFileHandle(pc),d1
- jsr _LVOClose(a6)
- bra Exit1
- ScriptLoad1
- lea CharRead(pc),a2
- move.l a2,d2
- lea Scripttext,a3
- move.l a3,a4
- moveq.l #0,d5
- Scriptload2
- jsr GetLine
- addq.l #1,d5
- cmp.b #MENUAMOUNT-1,d5
- bpl.s FileRead
- move.l a3,a4
- move.l d5,d6
- mulu #SCRIPTTEXTSIZE,d6
- add.l d6,a4
- cmp.b #0,d4
- bne.s Scriptload2
- FileRead
- move.l ToolFileHandle(pc),d1
- jsr _LVOClose(a6)
-
- move.l 4,a6
- jsr _LVOCreateMsgPort(a6)
- move.l d0,STPort
- tst.l d0
- bne.s OpenWBLib
- move.l DosBase(pc),a6
- jsr _LVOOutput(a6)
- move.l d0,d1
- lea NoPort(pc),a0
- move.l a0,d2
- moveq.l #25,d3
- jsr _LVOWrite(a6)
- bra Exit1
- OpenWBLib
- move.l d0,a4
- lea PortName(pc),a0
- move.l a0,10(a4) ; Name the port
- move.b #0,9(a4) ; Priority = 0
- move.l d0,a1
- jsr _LVOAddPort(a6) ; Make port public system port
- lea WorkbenchName(pc),a1
- jsr _LVOOldOpenLibrary(a6)
- move.l d0,WorkbenchBase
- move.l d0,a6
- cmp.l #0,d0
- bne.s AddInit
- move.l DosBase(pc),a6
- jsr _LVOOutput(a6)
- move.l d0,d1
- lea NoWBLib(pc),a0
- move.l a0,d2
- moveq.l #29,d3
- jsr _LVOWrite(a6)
- bra Exit2
- AddInit
- moveq.l #1,d2
- lea Scripttext,a3
- lea Menutext,a4
- lea AppMenuItem,a5
- move.b Entries(pc),d3
- AddMenuItems ; Add menu items
- move.l d2,d0
- move.l a3,d1
- move.l a4,a0
- move.l STPort(pc),a1
- move.l #0,a2
- jsr _LVOAddAppMenuItemA(a6)
- move.l d0,(a5)+
- cmp.l #0,d0
- beq Exit3
- add.l #SCRIPTTEXTSIZE,a3
- add.l #MENUTEXTSIZE,a4
- addq.l #1,d2
- cmp.b d2,d3
- bpl.s AddMenuItems
-
- move.l #1234,d0 ; Add Exit-item
- moveq.l #0,d1
- lea ExitName(pc),a0
- move.l STPort(pc),a1
- move.l #0,a2
- jsr _LVOAddAppMenuItemA(a6)
- move.l d0,ExitItem
-
- move.l 4,a6
- moveq.l #1,d7
- MainLoop
- tst.l d7
- beq Exit
- move.l STPort(pc),a0
- jsr _LVOWaitPort(a6)
- MainLoop2
-
- move.l STPort(pc),a0
- jsr _LVOGetMsg(a6) ; Get message
- tst.l d0
- beq.s MainLoop ; No message?!
-
- move.l d0,a1
- move.w 20(a1),d4 ; AppMessage type
- move.l 22(a1),d5 ; UserData
- move.l 26(a1),d6 ; ID
- jsr _LVOReplyMsg(a6) ; Reply
- cmp.b #9,d4 ; Menuitem?
- bne.s MainLoop2 ; No, get next message
-
- cmp.l #1234,d6 ; Exit-selected?
- bne.s MainLoop3 ; No
- moveq.l #0,d7
- bra MainLoop2
- MainLoop3
- move.l DosBase(pc),a6
- jsr _LVOOutput(a6)
- move.l d0,d3
- jsr _LVOInput(a6)
- move.l d0,d2
- move.l d5,d1 ; UserData = Command string
- jsr _LVOExecute(a6)
- move.l 4,a6
- bra MainLoop2
-
- Exit
- moveq.l #1,d2
- move.b Entries(pc),d3
- lea AppMenuItem,a2
- move.l WorkbenchBase,a6
- ExitLoop1
- move.l (a2)+,a0
- jsr _LVORemoveAppMenuItem(a6) ; Remove Menuitems
- addq.l #1,d2
- cmp.b d2,d3
- bpl.s ExitLoop1
-
- move.l ExitItem(pc),a0
- jsr _LVORemoveAppMenuItem(a6) ; Remove Exit-item too
-
- move.l 4,a6
- move.l STPort(pc),a1
- jsr _LVORemPort(a6) ; No more public
- move.l STPort(pc),a0
- jsr _LVODeleteMsgPort(a6) ; Delete message port
- move.l WorkbenchBase(pc),a1
- jsr _LVOCloseLibrary(a6)
-
- Exit1
- move.l 4,a6
- move.l DosBase(pc),a1
- jsr _LVOCloseLibrary(a6)
- moveq.l #0,d0
- rts
-
- Exit2
- move.l 4,a6
- move.l STPort(pc),a1
- jsr _LVORemPort(a6)
- move.l STPort(pc),a0
- jsr _LVODeleteMsgPort(a6)
- bra.s Exit1
-
- Exit4
- move.l DosBase(pc),a6
- jsr _LVOOutput(a6)
- move.l d0,d1
- lea PortFound(pc),a0
- move.l a0,d2
- moveq.l #27,d3
- jsr _LVOWrite(a6)
- bra.s Exit1
-
- Exit3
- move.l 4,a6
- move.l STPort(pc),a1
- jsr _LVORemPort(a6) ; No more public
- move.l STPort(pc),a0
- jsr _LVODeleteMsgPort(a6) ; Delete message port
- move.l DosBase(pc),a6
- jsr _LVOOutput(a6)
- move.l d0,d1
- lea NoWB(pc),a0
- move.l a0,d2
- moveq.l #41,d3
- jsr _LVOWrite(a6)
- move.l 4,a6
- move.l WorkbenchBase(pc),a1
- jsr _LVOCloseLibrary(a6)
- bra.s Exit1
-
- GetLine
- moveq.l #1,d3
- moveq.l #0,d4
- GetLine2
- move.l ToolFileHandle(pc),d1
- jsr _LVORead(a6)
- addq.l #1,d4
- cmp.l #-1,d0
- beq.s GetLine3
- move.b (a2),(a4)
- cmp.b #10,(a4)+
- bne.s GetLine2
- GetLine3
- move.b #0,-(a4)
- subq.l #1,d4
- rts
-
-
- DosBase dc.l 0
- ToolFileHandle dc.l 0
- STPort dc.l 0
- WorkbenchBase dc.l 0
- ExitItem dc.l 0
-
- Entries dc.b 0
- CharRead dc.b 0
- DosName dc.b 'dos.library',0
- ToolFile dc.b 's:ToolScript',0
- WorkbenchName dc.b 'workbench.library',0
-
- No2.0 dc.b 'Needs DOS V2.0 or greater',10
- VERSION dc.b '$VER: ScriptTool V1.02 Tuesday 22-Jun-93',10
- NoFile dc.b 'Can''t open s:ToolScript',10
- NoWB dc.b 'Can''t add menu items. Is workbench open?',10
- NoWBLib dc.b 'Can''t open workbench.library',10
- ExitName dc.b 'Exit Scripttool',0
- NoPort dc.b 'Can''t create message port',10
- PortName dc.b 'ScriptToolPort',0
- PortFound dc.b 'ScriptTool already running',10
-
- SECTION 2,BSS
-
- AppMenuItem ds.l MENUAMOUNT
- Menutext ds.b MENUAMOUNT*MENUTEXTSIZE
- Scripttext ds.b MENUAMOUNT*SCRIPTTEXTSIZE
-
- END
-