home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / dev / ssl-4.1.lha / SSL / SSLExamp / RemDev.asm < prev    next >
Assembly Source File  |  1994-07-01  |  2KB  |  96 lines

  1. ; Remove DOS Device
  2. ; (c) 1994 Martin Mares, MJSoft System Software
  3.  
  4. ;DEBUG    set    1
  5. _GlobVec    set    1
  6. ;GATHERTX    set    1
  7. ;TEXTRACT    set    1
  8.  
  9.     include    "ssmac.h"
  10.  
  11.     clistart
  12.  
  13.     dbuf    buffer,256
  14.     get.l    device,a0
  15.     geta    buffer,a1
  16.     move.l    a1,d2
  17. copyname    move.b    (a0)+,d0
  18.     beq.s    namecopied
  19.     cmp.b    #':',d0
  20.     beq.s    namecopied
  21.     move.b    d0,(a1)+
  22.     bra.s    copyname
  23.  
  24. namecopied    move.l    a1,a4
  25.  
  26.     moveq    #LDF_DEVICES+LDF_READ,d1
  27.     call    dos,LockDosList
  28.     move.l    d0,d1
  29.     moveq    #LDF_DEVICES,d3
  30.     call    FindDosEntry
  31.     move.l    d0,d3
  32.     beq.s    nodev
  33.     move.l    d0,a0
  34.     move.l    dl_Task(a0),d4
  35. nodev    moveq    #LDF_DEVICES+LDF_READ,d1
  36.     call    UnLockDosList
  37.     tst.l    d3
  38.     bne.s    okay1
  39. errr    err    <Device not found>
  40.  
  41. okay1    tst.l    d4
  42.     beq.s    remnode
  43.     move.b    #':',(a4)
  44.     move.l    d2,d1
  45.     moveq    #0,d2
  46.     call    GetDeviceProc
  47.     move.l    d0,d7
  48.     beq.s    errr
  49.     move.l    d0,a0
  50.     move.l    (a0),d1
  51.     moveq    #ACTION_DIE,d2
  52.     call    DoPkt
  53.     move.l    d0,d2
  54.     call    IoErr
  55.     move.l    d1,d3
  56.     move.l    d7,d1
  57.     call    FreeDeviceProc
  58.     tst.l    d2
  59.     beq.s    failed
  60.     tst.l    d3
  61.     beq.s    remnode
  62. failed    tsv.l    force
  63.     bne.s    remnode
  64.     move.l    d3,d1
  65.     call    SetIoErr
  66.     dtl    <Cannot unload handler>,a0
  67.     jump    ss,DosError
  68.  
  69. remnode    moveq    #LDF_DEVICES+LDF_WRITE,d1
  70.     call    LockDosList
  71.     move.l    d0,d1
  72.     clr.b    (a4)
  73.     geta    buffer,a0
  74.     move.l    a0,d2
  75.     moveq    #LDF_DEVICES,d3
  76.     call    FindDosEntry
  77.     move.l    d0,d3
  78.     beq.s    okay3
  79.     moveq    #0,d2
  80.     move.l    d3,d1
  81.     call    RemDosEntry
  82.     move.l    d3,d1
  83.     call    FreeDosEntry
  84. okay3    moveq    #LDF_DEVICES+LDF_WRITE,d1
  85.     call    UnLockDosList
  86.     tst.l    d2
  87.     errc.eq    <Device node cannot be removed>
  88.     rts
  89.  
  90.     tags
  91.     template <DEVICE/A,FORCE/S>
  92.     dv.l    device
  93.     dv.l    force
  94.     finish
  95.     end
  96.