home *** CD-ROM | disk | FTP | other *** search
- *-----------------------------------------------*
- * @Defrag *
- *-----------------------------------------------*
-
- Defrag: move.l packet0(a4),a0
- move.l data0(a4),CurrData(a4)
- move.l a0,CurrPkt(a4)
-
- move.l MsgPort(a4),MN_REPLYPORT-sp_Pkt(a0)
- move.l #ACTION_SFS_DEFRAGMENT_STEP,dp_Type(a0)
- move.l MsgPort(a4),dp_Port(a0)
- lea dp_Arg1(a0),a2
- move.l data0(a4),(a2)+ ; arg1
- move.l #step_bufsize,(a2)+ ; arg2
- clr.l (a2)+ ; arg3
- clr.l (a2)+ ; arg4
- clr.l (a2)+ ; arg5
- clr.l (a2)+ ; arg6
- clr.l (a2) ; arg7
-
- move.l packet0(a4),d0 ; packet0 -> d0, packet1 -> packet0, d0 -> packet1
- move.l data0(a4),d1 ; data0 -> d1, data1 -> data0, d1 -> data1
- move.l packet1(a4),packet0(a4)
- move.l data1(a4),data0(a4)
- move.l d0,packet1(a4)
- move.l d1,data1(a4)
-
- move.l dos(a4),a6
- move.l CurrPkt(a4),d1
- move.l SFSport(a4),d2
- move.l MsgPort(a4),d3
- jmp _LVOSendPkt(a6)
-
- *-----------------------------------------------*
- * @LueViesti *
- *-----------------------------------------------*
-
- LueViesti:
- move.l MsgPort(a4),a0
- jsr _LVOGetMsg(a6)
- tst.l d0
- beq.b .x
- move.l CurrData(a4),a3
- move.l CurrPkt(a4),a0
- move.l a3,RenderData(a4)
- clr.l CurrPkt(a4)
- tst.l dp_Res1(a0)
- beq DefragmentError
- move.l (a3),d1
- beq .check_pause
- cmp.l #'MOVE',d1
- beq.b .move
- cmp.l #'DONE',d1
- beq DefragmentDone
- .x rts
-
- .move move.l a3,a2
-
- .loop move.l (a2),d0
- beq.b .jatka
- cmp.l #'DONE',d0
- beq DefragmentDone
- move.l 4(a2),d0
- beq.b .jatka
- lea 8(a2,d0.w*4),a2
- ; lea 20(a2),a2
- bra.b .loop
-
- .jatka tst.b bfStopDefrag(a4)
- bne.b .check_quit
- bsr Defrag
- TEE_METODI MP_Kartta-t(a5),RenderMetodit
- rts
-
- .check_pause:
- tst.b bfStopDefrag(a4) ; pause?
- beq Defrag ; ei, jatka
- .check_quit:
- bsr DefragmentEnd
- tst.b bfQuitDefrag(a4) ; quit?
- bne FreeBitMap ; yep
- rts
-
- DefragmentDone:
- bsr DefragmentEnd
- bsr UpdateVolumeDate
- bsr RemBuffers
- bsr EnableStartDefrag
- GETSTR MSG_DEFRAGMENT_DONE
- move.l d0,a2
- bra InfoRequester
-
- DefragmentError:
- move.l dp_Res2(a0),PacketError(a4)
- move.l #'DONE',(a3)
- bsr DefragmentEnd
- bsr EnableStartDefrag
- move.l PacketError(a4),(a4)
- move.l VolumeName(a4),4(a4)
- GETSTR MSG_DEFRAGMENT_ERROR
- move.l d0,a2
- bra InfoRequester
-
- *-----------------------------------------------*
- * @DefragmentEnd *
- *-----------------------------------------------*
-
- DefragmentEnd:
- TEE_METODI MP_Kartta-t(a5),RenderMetodit
- bsr UpdateTimer
- move.l exec(a4),a6
- clr.b bfTimerActive(a4)
- move.l timer_io(a4),a1
- jsr _LVOAbortIO(a6)
- move.l timer_io(a4),a1
- jsr _LVOWaitIO(a6)
- bra UnLockDevice
-
- *-----------------------------------------------*
- * @InitDefrag *
- *-----------------------------------------------*
-
- InitDefrag:
- clr.l lastread(a4)
- clr.l lastwritten(a4)
- clr.l lastblocks(a4)
-
- move.l ActiveEntry(a4),a3
- move.l exec(a4),a6
- move.l a3,DefragEntry(a4)
- move.l ll_TotalBlocks(a3),d0
- move.l ll_MsgPort(a3),SFSport(a4)
- move.l d0,MUI_TotalBlocks(a4)
- lsr.l #3,d0
- add.l #32,d0
- move.l d0,(a4)
- move.l #MEMF_ANY!MEMF_CLEAR,d1
- jsr _LVOAllocVec(a6)
- move.l d0,DefragBitMap(a4)
- beq NotEnoughMemory
-
- bsr ReadBitMap
- beq.b .x
-
- st bfBitMapExists(a4)
-
- move.l #31,d0
- add.l d5,d0
- lsr.l #5,d0
- move.l d0,btotal(a4)
-
- .x rts
-
- *-----------------------------------------------*
- * @ReadBitMap *
- *-----------------------------------------------*
-
- ReadBitMap:
- move.l #ACTION_SFS_READ_BITMAP,d2
- move.l DefragBitMap(a4),d3
- moveq #0,d4
- move.l MUI_TotalBlocks(a4),d5
- bsr LähetäPaketti
- beq.b .no_bitmap
- rts
- .no_bitmap:
- bsr FreeBitMap
- GETSTR MSG_CANT_READ_BITMAP
- move.l d0,a2
- bra InfoRequester
-
- *-----------------------------------------------*
- * @FreeBitMap *
- *-----------------------------------------------*
-
- FreeBitMap:
- clr.b bfBitMapExists(a4)
-
- move.l exec(a4),a6
- move.l DefragBitMap(a4),a1
- clr.l DefragBitMap(a4)
- jmp _LVOFreeVec(a6)
-
- *-----------------------------------------------*
- * @AbortPacket *
- *-----------------------------------------------*
-
- AbortPacket:
- move.l CurrPkt(a4),d2
- beq RemBuffers
- move.l dos(a4),a6
- move.l SFSport_Abort(a4),d1
- clr.l CurrPkt(a4)
- jsr _LVOAbortPkt(a6)
- bsr RemBuffers
- bsr UnLockDevice
- move.l exec(a4),a6
- move.l MsgPort(a4),a0
- jsr _LVOWaitPort(a6)
- move.l MsgPort(a4),a0
- jsr _LVOGetMsg(a6)
- tst.b bfTimerActive(a4)
- beq.b .x
- clr.b bfTimerActive(a4)
- move.l timer_io(a4),a1
- jsr _LVOAbortIO(a6)
- move.l timer_io(a4),a1
- jmp _LVOWaitIO(a6)
- .x rts
-