[#3]
Re: Jak sprawdzić czy napęd jest odczytywalny zanim użyjemy na nim funkcji Lock(
@kiero,
post #2
Czy tak to miało być?
;-----------------------------------------------------------------
;Ustawienie blokady Lock() na pusty DF0: wywołuje okno komunikatu.
;Chcemy aby okno się nie pojawiało!!!
;Blokujemy wyświetlenie okna SysRequest:"No disk present in unit 0"
;CPU: MC 68000
;Assembler: DevPac v3.02
;Platforma: Amiga 500 (OS 1.3) Kickstart (v34)
Exec: equ 4
OldOpenLibrary: equ -408
CloseLibrary: equ -414
FindTask: equ -294
Lock: equ -84
UnLock: equ -90
pr_WindowPtr: equ 184
ACCESS_READ: equ -2
Start: sub.l a1,a1
move.l 4.w,a6
jsr FindTask(a6)
tst.l d0
beq Error_0
move.l d0,TaskBase
move.l TaskBase,a0
move.l pr_WindowPtr(a0),WindowBase
move.l #-1,pr_WindowPtr(a0)
move.l 4.w,a6
lea DosName(pc),a1
jsr OldOpenLibrary(a6)
tst.l d0
beq Error_0
move.l d0,DosBase
move.l DosBase,a6
move.l #PathName,d1
moveq #ACCESS_READ,d2
jsr Lock(a6)
tst.l d0
beq Error_1
move.l d0,BlokadaLock
;--------------------------
; ...tu reszta programu...
;--------------------------
Odblokowujemy: move.l DosBase,a6
move.l BlokadaLock,d1
jsr UnLock(a6)
move.l TaskBase,a0
move.l WindowBase,pr_WindowPtr(a0)
Error_1: move.l 4.w,a6
move.l DosBase,a1
jsr CloseLibrary(a6)
moveq #0,d0
rts
Error_0: moveq #-1,d0
rts
TaskBase: dc.l 0
WindowBase: dc.l 0
DosBase: dc.l 0
BlokadaLock: dc.l 0
DosName: dc.b 'dos.library',0
PathName: dc.b 'df0:',0
;-------------------------------------------------------------------
Trochę udziwnione rozwiązanie detekcji aktywności napędu..
Jednak zadziałało rewelacyjnie!!!
Dzięki...
Pozdrawiam.
Ostatnia modyfikacja: 29.06.2009 21:37:02