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