home *** CD-ROM | disk | FTP | other *** search
- INCLUDE "exec/types.i"
- INCLUDE "rexx/rxslib.i"
-
- MSGBUFSIZE equ 18
-
- XDEF @DoMsg
-
- XREF ___ctype
- XREF _RexxSysBase
- XREF __CXM33
- XREF _LVOReplyMsg
- XREF _AbsExecBase
-
- SECTION DoMsg,CODE
-
- ; this code is the dispatcher for ARexx messages. It has been moved
- ; to assembly to allow use of registerized parameters and to optimize it by
- ; hand a bit. It takes as its arguments:
- ;
- ; A0 = pointer to ARexx message
- ; A1 = pointer to CmdTbl
- ; D0 = Number of ARexx commands
- ; D1 = BringerDown flag
-
- @DoMsg
- link a5,#-MSGBUFSIZE-4
- movem.l d5-d7/a2-a3/a6,-(sp)
-
- movea.l a0,a3
- movea.l a1,a2
- move.l d0,d7
- move.l d1,d6
-
- movea.l _RexxSysBase(a4),a6
- jsr _LVOIsRexxMsg(a6)
- tst.l d0
- beq.w DMAcleanup
-
- 2$ moveq #20,d0
- move.l d0,rm_Result1(a3)
- clr.l rm_Result2(a3)
-
- tst.w d6 ; BringerDown ?
- beq.s 3$
-
- moveq #22,d0
- move.l d0,rm_Result1(a3)
- bra.w DMAcleanup
-
- 3$ lea -(MSGBUFSIZE+4)(a5),a0
- movea.l rm_Args(a3),a1
- moveq #MSGBUFSIZE,d0
- jsr _LVOStrcpyU(a6)
-
- moveq #0,d6
- 4$ cmp.l d7,d6
- bge.s 5$
-
- move.l d6,d0
- moveq #$0e,d1
- jsr __CXM33(pc)
- move.w 00(a2,d0.l),d1
- ext.l d1
- lea -(MSGBUFSIZE+4)(a5),a0
- movea.l 02(a2,d0.l),a1
- move.l d1,d0
- jsr _LVOStrcmpN(a6)
- tst.l d0
- beq.s 5$
- addq.l #1,d6
- bra.s 4$
-
- 5$ cmp.l d7,d6
- bge.w DMAcleanup
-
- move.l d6,d0
- moveq #$0e,d1
- jsr __CXM33(pc)
- move.l d0,d7
- movea.l rm_Args(a3),a1
- adda.w 00(a2,d7.l),a1
- lea 1(a1),a1
- movem.l a1,-4(a5)
-
- move.w 6(a2,d7.l),d1
- cmpi.b #3,d1
- bne.s 6$
-
- movea.l a3,a0
- movea.l 10(a2,d7.l),a1
- jsr (a1)
- bra.s DMAreturn
-
- 6$ cmpi.b #2,d1
- bne.s 7$
-
- movem.l -4(a5),a0
- jsr _LVOCVa2i(a6)
- movea.l 10(a2,d7.l),a1
- jsr (a1)
- bra.s DMAreturn
-
- 7$ cmpi.b #1,d1
- bne.s 9$
-
- movem.l -4(a5),a0
- lea ___ctype+1(a4),a1
- moveq #8,d5
- 8$ move.b (a0),d0
- ext.w d0
- ext.l d0
- move.b 0(a1,d0.l),d0
- ext.w d0
- ext.l d0
- and.l d5,d0
- beq.s 9$
- addq.l #1,a0
- bra.s 8$
- 9$ movea.l 10(a2,d7.l),a1
- jsr (a1)
-
- DMAreturn
- move.w 8(a2,d7.l),d1
- cmpi.b #2,d1
- bne.s 1$
-
- move.l d0,rm_Result1(a3)
- bra.s DMAcleanup
-
- 1$ cmpi.b #1,d1
- beq.s 2$
- cmpi.b #3,d1
- bne.s 5$
-
- 2$ btst #1,rm_Action+1(a3)
- bne.b 3$
-
- cmpi.b #3,d1
- bne.s 6$
-
- movea.l d0,a0
- jsr _LVODeleteArgstring(a6)
-
- 6$ moveq #21,d0
- move.l d0,rm_Result1(a3)
- bra.s DMAcleanup
-
- 3$ movea.l d0,a0
- cmpi.b #3,d1
- beq.s 4$
-
- move.l a0,d0
- beq.s 44$
-
- jsr _LVOStrlen(a6)
- 44$ jsr _LVOCreateArgstring(a6)
- 4$ move.l a0,rm_Result2(a3)
-
- 5$ clr.l rm_Result1(a3)
-
- DMAcleanup
- movea.l a3,a1
- movea.l _AbsExecBase.w,a6
- jsr _LVOReplyMsg(a6)
-
- movem.l (sp)+,d5-d7/a2-a3/a6
- unlk a5
- rts
-
- END
-