[#1] Jak sprawdzić czy napęd jest odczytywalny zanim użyjemy na nim funkcji Lock() ??
Funkcje systemu operacyjnego Amigi są kłopotliwe w wykorzystaniu.

Dla przykładu funkcja Lock() kiedy ustawimy
blokadę na DF0: a w napędzie nie ma dyskietki
funkcja ta samoistnie wyświetla komunikat
w okienku typu SysRequest o treści "No disk present in unit 0"

Chcemy aby ten komunikat się nie pojawiał.... Jak temu zaradzić?
[#2] Re: Jak sprawdzić czy napęd jest odczytywalny zanim użyjemy na nim funkcji Lock(

@68k_tester, post #1

zeby okno sie nie pojawialo (wtedy Lock() po prostu zachowa sie tak jakbysmy wcisneli Cancel) robi sie takie cos:

struct Process *this = (struct Process*)FindTask(NULL);
oldWindowPtr = this->pr_WindowPtr;
this->pr_WindowPtr = (struct Window*)-1;

przed zakonczeniem:

struct Process *this = (struct Process*)FindTask(NULL);
this->pr_WindowPtr = oldWindowPtr;



Ostatnia modyfikacja: 29.06.2009 20:30:28
[#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
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem