home *** CD-ROM | disk | FTP | other *** search
- ; NetPatch V1.0
- ; by Matthias Scheler 1992
- ;
- ; use "BASM" to assemble
- ;
- ; SYNOPSIS: NetPatch DEVICE:
-
- INCDIR "Include:"
- INCLUDE "exec/memory.i"
- INCLUDE "exec/execbase.i"
- INCLUDE "libraries/dos.i"
- INCLUDE "libraries/dosextens.i"
- INCLUDE "workbench/startup.i"
-
- ; Makros
-
- CALL: MACRO
- jsr _LVO\1(a6)
- ENDM
-
- ; Konstanten
-
- _AbsExecBase EQU 4
-
- _LVOForbid EQU -132
- _LVOPermit EQU -138
- _LVOAllocMem EQU -198
- _LVOFreeMem EQU -210
- _LVOPutMsg EQU -366
- _LVOCloseLibrary EQU -414
- _LVOSetFunction EQU -420
- _LVOOpenLibrary EQU -552
-
- _LVOWrite EQU -48
- _LVOOutput EQU -60
- _LVOLock EQU -84
- _LVOUnLock EQU -90
- _LVODupLock EQU -96
- _LVOCurrentDir EQU -126
- _LVODeviceProc EQU -174
-
- ; open "dos.library"
-
- Install: move.l a0,a2
- move.l (_AbsExecBase).w,a6
- lea DOSName(pc),a1
- moveq #33,d0
- CALL OpenLibrary
- tst.l d0
- beq.s Error
-
- ; check Argument
-
- move.l a6,a5
- move.l d0,a6
-
- Skip: cmp.b #' ',(a2)+
- beq.s Skip
-
- lea -1(a2),a2
- move.l a2,a3
- Scan: cmp.b #':',(a2)
- beq.s GotName
- cmp.b #10,(a2)+
- bne.s Scan
-
- move.l #ErrorWrongArg,d2
- move.l #DOSName-ErrorWrongArg,d3
- bra.s Error
-
- ; find requested Process
-
- GotName: clr.b 1(a2)
- move.l a3,d1
- CALL DeviceProc
- move.l d0,NewPutMsg+2
- bne.s Patch
-
- move.l #ErrorNoDevice,d2
- move.l #ErrorWrongArg-ErrorNoDevice,d3
-
- Error: move #10,d4
-
- Finish: CALL Output
- move.l d0,d1
- CALL Write
-
- move.l a6,a1
- move.l a5,a6
- CALL CloseLibrary
-
- move.l d4,d0
- rts
-
- ; patch "dos.library"
-
- Patch: exg a5,a6
- CALL Forbid
-
- move.l a6,a1
- lea _LVOPutMsg,a0
- move.l #NewPutMsg,d0
- CALL SetFunction
- move.l d0,RealPutMsgVec
-
- CALL Permit
-
- clr.l Install-4
- exg a5,a6
-
- move.l #PatchDone,d2
- move.l #ErrorNoDevice-PatchDone,d3
- moveq #0,d4
- bra.s Finish
-
- ; Texte
-
- VersionString: dc.b "$VER: NetPatch 1.1 (12.10.92)",0
- PatchDone: dc.b "NetPatch installed",10
- ErrorNoDevice: dc.b "Device not mounted",10
- ErrorWrongArg: dc.b "Wrong arguments",10,10,"Usage: NetPatch DEVICE:",10,10
- DOSName: dc.b "dos.library",0
- ds.w 0
-
- ; new PutMsg() function
-
- SECTION Patch,CODE
-
- NewPutMsg: cmp.l #$12345678,a0
- bne.s CallRealPutMsg
-
- movem.l a0/a2,-(sp)
- move.l LN_NAME(a1),a2
-
- ; Lock() ?
-
- cmp.l #ACTION_LOCATE_OBJECT,dp_Type(a2)
- bne.s NoLocateObj
-
- move.l dp_Arg2(a2),d0
- add.l d0,d0
- add.l d0,d0
- move.l d0,a0
- tst.b (a0)
- bne.s NoModification
-
- move.l #ACTION_COPY_DIR,dp_Type(a2)
- bra.s NoModification
-
- ; ExAll() ?
-
- NoLocateObj: cmp.l #ACTION_EXAMINE_ALL,dp_Type(a2)
- bne.s NoModification
-
- move.l #0,dp_Res1(a2)
- move.l #ERROR_ACTION_NOT_KNOWN,dp_Res2(a2)
-
- move.l dp_Port(a2),(sp)
-
- ; dont' modify packet
-
- NoModification: movem.l (sp)+,a0/a2
-
- CallRealPutMsg: move.l RealPutMsgVec(pc),-(sp)
- rts
-
- RealPutMsgVec: dc.l 0
-
- END
-