home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 51 / af051sub.adf / PARBN31G.DMS / PARBN31G.adf / Extras / netpat.lha / NetPatch / NetPatch.asm next >
Encoding:
Assembly Source File  |  1992-10-12  |  2.7 KB  |  170 lines

  1. ; NetPatch V1.0
  2. ; by Matthias Scheler 1992
  3. ;
  4. ; use "BASM" to assemble
  5. ;
  6. ; SYNOPSIS: NetPatch DEVICE:
  7.  
  8.         INCDIR    "Include:"
  9.         INCLUDE    "exec/memory.i"
  10.         INCLUDE    "exec/execbase.i"
  11.         INCLUDE    "libraries/dos.i"
  12.         INCLUDE    "libraries/dosextens.i"
  13.         INCLUDE    "workbench/startup.i"
  14.  
  15. ; Makros
  16.  
  17. CALL:        MACRO
  18.         jsr    _LVO\1(a6)
  19.         ENDM
  20.  
  21. ; Konstanten
  22.  
  23. _AbsExecBase        EQU 4
  24.  
  25. _LVOForbid        EQU -132
  26. _LVOPermit        EQU -138
  27. _LVOAllocMem        EQU -198
  28. _LVOFreeMem        EQU -210
  29. _LVOPutMsg        EQU -366
  30. _LVOCloseLibrary    EQU -414
  31. _LVOSetFunction        EQU -420
  32. _LVOOpenLibrary        EQU -552
  33.  
  34. _LVOWrite        EQU -48
  35. _LVOOutput        EQU -60
  36. _LVOLock        EQU -84
  37. _LVOUnLock        EQU -90
  38. _LVODupLock        EQU -96
  39. _LVOCurrentDir        EQU -126
  40. _LVODeviceProc        EQU -174
  41.  
  42. ; open "dos.library"
  43.  
  44. Install:    move.l    a0,a2
  45.         move.l    (_AbsExecBase).w,a6
  46.         lea    DOSName(pc),a1
  47.         moveq    #33,d0
  48.         CALL    OpenLibrary
  49.         tst.l    d0
  50.         beq.s    Error
  51.  
  52. ; check Argument
  53.  
  54.         move.l    a6,a5
  55.         move.l    d0,a6
  56.  
  57. Skip:        cmp.b    #' ',(a2)+
  58.         beq.s    Skip
  59.  
  60.         lea    -1(a2),a2
  61.         move.l    a2,a3
  62. Scan:        cmp.b    #':',(a2)
  63.         beq.s    GotName
  64.         cmp.b    #10,(a2)+
  65.         bne.s    Scan
  66.  
  67.         move.l    #ErrorWrongArg,d2
  68.         move.l    #DOSName-ErrorWrongArg,d3
  69.         bra.s    Error
  70.  
  71. ; find requested Process
  72.  
  73. GotName:    clr.b    1(a2)
  74.         move.l    a3,d1
  75.         CALL    DeviceProc
  76.         move.l    d0,NewPutMsg+2
  77.         bne.s    Patch
  78.  
  79.         move.l    #ErrorNoDevice,d2
  80.         move.l    #ErrorWrongArg-ErrorNoDevice,d3
  81.  
  82. Error:        move    #10,d4
  83.  
  84. Finish:        CALL    Output
  85.         move.l    d0,d1
  86.         CALL    Write
  87.  
  88.         move.l    a6,a1
  89.         move.l    a5,a6
  90.         CALL    CloseLibrary
  91.  
  92.         move.l    d4,d0
  93.         rts
  94.  
  95. ; patch "dos.library"
  96.  
  97. Patch:        exg    a5,a6
  98.         CALL    Forbid
  99.  
  100.         move.l    a6,a1
  101.         lea    _LVOPutMsg,a0
  102.         move.l    #NewPutMsg,d0
  103.         CALL    SetFunction
  104.         move.l    d0,RealPutMsgVec
  105.  
  106.         CALL    Permit
  107.  
  108.         clr.l    Install-4
  109.         exg    a5,a6
  110.  
  111.         move.l    #PatchDone,d2
  112.         move.l    #ErrorNoDevice-PatchDone,d3
  113.         moveq    #0,d4
  114.         bra.s    Finish
  115.  
  116. ; Texte
  117.  
  118. VersionString:    dc.b "$VER: NetPatch 1.1 (12.10.92)",0
  119. PatchDone:    dc.b "NetPatch installed",10
  120. ErrorNoDevice:    dc.b "Device not mounted",10
  121. ErrorWrongArg:    dc.b "Wrong arguments",10,10,"Usage: NetPatch DEVICE:",10,10
  122. DOSName:    dc.b "dos.library",0
  123.         ds.w 0
  124.  
  125. ; new PutMsg() function
  126.  
  127.         SECTION Patch,CODE
  128.  
  129. NewPutMsg:    cmp.l    #$12345678,a0
  130.         bne.s    CallRealPutMsg
  131.  
  132.         movem.l a0/a2,-(sp)
  133.         move.l    LN_NAME(a1),a2
  134.  
  135. ; Lock() ?
  136.  
  137.         cmp.l    #ACTION_LOCATE_OBJECT,dp_Type(a2)
  138.         bne.s    NoLocateObj
  139.  
  140.         move.l    dp_Arg2(a2),d0
  141.         add.l    d0,d0
  142.         add.l    d0,d0
  143.         move.l    d0,a0
  144.         tst.b    (a0)
  145.         bne.s    NoModification
  146.  
  147.         move.l    #ACTION_COPY_DIR,dp_Type(a2)
  148.         bra.s    NoModification
  149.  
  150. ; ExAll() ?
  151.  
  152. NoLocateObj:    cmp.l    #ACTION_EXAMINE_ALL,dp_Type(a2)
  153.         bne.s    NoModification
  154.  
  155.         move.l    #0,dp_Res1(a2)
  156.         move.l    #ERROR_ACTION_NOT_KNOWN,dp_Res2(a2)
  157.  
  158.         move.l    dp_Port(a2),(sp)
  159.  
  160. ; dont' modify packet
  161.  
  162. NoModification: movem.l (sp)+,a0/a2
  163.  
  164. CallRealPutMsg:    move.l RealPutMsgVec(pc),-(sp)
  165.         rts
  166.  
  167. RealPutMsgVec:    dc.l    0
  168.  
  169.         END
  170.