home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 13 / MA_Cover_13.bin / source / asm / sfs / defrag.asm < prev    next >
Encoding:
Assembly Source File  |  1999-12-01  |  4.2 KB  |  210 lines

  1. *-----------------------------------------------*
  2. *    @Defrag                    *
  3. *-----------------------------------------------*
  4.  
  5. Defrag:    move.l    packet0(a4),a0
  6.     move.l    data0(a4),CurrData(a4)
  7.     move.l    a0,CurrPkt(a4)
  8.  
  9.     move.l    MsgPort(a4),MN_REPLYPORT-sp_Pkt(a0)
  10.     move.l    #ACTION_SFS_DEFRAGMENT_STEP,dp_Type(a0)
  11.     move.l    MsgPort(a4),dp_Port(a0)
  12.     lea    dp_Arg1(a0),a2
  13.     move.l    data0(a4),(a2)+        ; arg1
  14.     move.l    #step_bufsize,(a2)+    ; arg2
  15.     clr.l    (a2)+            ; arg3
  16.     clr.l    (a2)+            ; arg4
  17.     clr.l    (a2)+            ; arg5
  18.     clr.l    (a2)+            ; arg6
  19.     clr.l    (a2)            ; arg7
  20.  
  21.     move.l    packet0(a4),d0        ; packet0 -> d0, packet1 -> packet0, d0 -> packet1
  22.     move.l    data0(a4),d1        ; data0 -> d1, data1 -> data0, d1 -> data1
  23.     move.l    packet1(a4),packet0(a4)
  24.     move.l    data1(a4),data0(a4)
  25.     move.l    d0,packet1(a4)
  26.     move.l    d1,data1(a4)
  27.  
  28.     move.l    dos(a4),a6
  29.     move.l    CurrPkt(a4),d1
  30.     move.l    SFSport(a4),d2
  31.     move.l    MsgPort(a4),d3
  32.     jmp    _LVOSendPkt(a6)
  33.  
  34. *-----------------------------------------------*
  35. *    @LueViesti                *
  36. *-----------------------------------------------*
  37.  
  38. LueViesti:
  39.     move.l    MsgPort(a4),a0
  40.     jsr    _LVOGetMsg(a6)
  41.     tst.l    d0
  42.     beq.b    .x
  43.     move.l    CurrData(a4),a3
  44.     move.l    CurrPkt(a4),a0
  45.     move.l    a3,RenderData(a4)
  46.     clr.l    CurrPkt(a4)
  47.     tst.l    dp_Res1(a0)
  48.     beq    DefragmentError
  49.     move.l    (a3),d1
  50.     beq    .check_pause
  51.     cmp.l    #'MOVE',d1
  52.     beq.b    .move
  53.     cmp.l    #'DONE',d1
  54.     beq    DefragmentDone
  55. .x    rts
  56.  
  57. .move    move.l    a3,a2
  58.  
  59. .loop    move.l    (a2),d0
  60.     beq.b    .jatka
  61.     cmp.l    #'DONE',d0
  62.     beq    DefragmentDone
  63.     move.l    4(a2),d0
  64.     beq.b    .jatka
  65.     lea    8(a2,d0.w*4),a2
  66. ;    lea    20(a2),a2
  67.     bra.b    .loop
  68.  
  69. .jatka    tst.b    bfStopDefrag(a4)
  70.     bne.b    .check_quit
  71.     bsr    Defrag
  72.     TEE_METODI    MP_Kartta-t(a5),RenderMetodit
  73.     rts
  74.  
  75. .check_pause:
  76.     tst.b    bfStopDefrag(a4)    ; pause?
  77.     beq    Defrag            ; ei, jatka
  78. .check_quit:
  79.     bsr    DefragmentEnd
  80.     tst.b    bfQuitDefrag(a4)    ; quit?
  81.     bne    FreeBitMap        ; yep
  82.     rts
  83.  
  84. DefragmentDone:
  85.     bsr    DefragmentEnd
  86.     bsr    UpdateVolumeDate
  87.     bsr    RemBuffers
  88.     bsr    EnableStartDefrag
  89.     GETSTR    MSG_DEFRAGMENT_DONE
  90.     move.l    d0,a2
  91.     bra    InfoRequester
  92.  
  93. DefragmentError:
  94.     move.l    dp_Res2(a0),PacketError(a4)
  95.     move.l    #'DONE',(a3)
  96.     bsr    DefragmentEnd
  97.     bsr    EnableStartDefrag
  98.     move.l    PacketError(a4),(a4)
  99.     move.l    VolumeName(a4),4(a4)
  100.     GETSTR    MSG_DEFRAGMENT_ERROR
  101.     move.l    d0,a2
  102.     bra    InfoRequester
  103.  
  104. *-----------------------------------------------*
  105. *    @DefragmentEnd                *
  106. *-----------------------------------------------*
  107.  
  108. DefragmentEnd:
  109.     TEE_METODI    MP_Kartta-t(a5),RenderMetodit
  110.     bsr    UpdateTimer
  111.     move.l    exec(a4),a6
  112.     clr.b    bfTimerActive(a4)
  113.     move.l    timer_io(a4),a1
  114.     jsr    _LVOAbortIO(a6)
  115.     move.l    timer_io(a4),a1
  116.     jsr    _LVOWaitIO(a6)
  117.     bra    UnLockDevice
  118.  
  119. *-----------------------------------------------*
  120. *       @InitDefrag                *
  121. *-----------------------------------------------*
  122.  
  123. InitDefrag:
  124.     clr.l    lastread(a4)
  125.     clr.l    lastwritten(a4)
  126.     clr.l    lastblocks(a4)
  127.  
  128.     move.l    ActiveEntry(a4),a3
  129.     move.l    exec(a4),a6
  130.     move.l    a3,DefragEntry(a4)
  131.     move.l    ll_TotalBlocks(a3),d0
  132.     move.l    ll_MsgPort(a3),SFSport(a4)
  133.     move.l    d0,MUI_TotalBlocks(a4)
  134.     lsr.l    #3,d0
  135.     add.l    #32,d0
  136.     move.l    d0,(a4)
  137.     move.l    #MEMF_ANY!MEMF_CLEAR,d1
  138.     jsr    _LVOAllocVec(a6)
  139.     move.l    d0,DefragBitMap(a4)
  140.     beq    NotEnoughMemory
  141.  
  142.     bsr    ReadBitMap
  143.     beq.b    .x
  144.  
  145.     st    bfBitMapExists(a4)
  146.  
  147.     move.l    #31,d0
  148.     add.l    d5,d0
  149.     lsr.l    #5,d0
  150.     move.l    d0,btotal(a4)
  151.  
  152. .x    rts
  153.  
  154. *-----------------------------------------------*
  155. *    @ReadBitMap                *
  156. *-----------------------------------------------*
  157.  
  158. ReadBitMap:
  159.     move.l    #ACTION_SFS_READ_BITMAP,d2
  160.     move.l    DefragBitMap(a4),d3
  161.     moveq    #0,d4
  162.     move.l    MUI_TotalBlocks(a4),d5
  163.     bsr    LähetäPaketti
  164.     beq.b    .no_bitmap
  165.     rts
  166. .no_bitmap:
  167.     bsr    FreeBitMap
  168.     GETSTR    MSG_CANT_READ_BITMAP
  169.     move.l    d0,a2
  170.     bra    InfoRequester
  171.  
  172. *-----------------------------------------------*
  173. *    @FreeBitMap                *
  174. *-----------------------------------------------*
  175.  
  176. FreeBitMap:
  177.     clr.b    bfBitMapExists(a4)
  178.  
  179.     move.l    exec(a4),a6
  180.     move.l    DefragBitMap(a4),a1
  181.     clr.l    DefragBitMap(a4)
  182.     jmp    _LVOFreeVec(a6)
  183.  
  184. *-----------------------------------------------*
  185. *    @AbortPacket                *
  186. *-----------------------------------------------*
  187.  
  188. AbortPacket:
  189.     move.l    CurrPkt(a4),d2
  190.     beq    RemBuffers
  191.     move.l    dos(a4),a6
  192.     move.l    SFSport_Abort(a4),d1
  193.     clr.l    CurrPkt(a4)
  194.     jsr    _LVOAbortPkt(a6)
  195.     bsr    RemBuffers
  196.     bsr    UnLockDevice
  197.     move.l    exec(a4),a6
  198.     move.l    MsgPort(a4),a0
  199.     jsr    _LVOWaitPort(a6)
  200.     move.l    MsgPort(a4),a0
  201.     jsr    _LVOGetMsg(a6)
  202.     tst.b    bfTimerActive(a4)
  203.     beq.b    .x
  204.     clr.b    bfTimerActive(a4)
  205.     move.l    timer_io(a4),a1
  206.     jsr    _LVOAbortIO(a6)
  207.     move.l    timer_io(a4),a1
  208.     jmp    _LVOWaitIO(a6)
  209. .x    rts
  210.