Komentarze do artykułu: Directory Opus Magellan: Filetype ADF, czyli obrazy amigowych dyskietek

[#1] Re: Directory Opus Magellan: Filetype ADF, czyli obrazy amigowych dyskietek
"I zadanie dla bardziej zaawansowanych użytkowników Magellana, a jednocześnie pomysł na ulepszenie. Załóżmy, że mamy otwarty lister/okno z zawartością jakiegoś zamontowanego obrazu ADF. Dobrze by było, aby ten lister ulegał zamknięciu równocześnie wraz z usunięciem tego dysku."

[url= http://aminet.net/package/biz/dopus/DiskRemove]Aminet jest odpowiedzią na wszystkie pytania[/url] ;)

-------------------------------------------------------------------------------------------------------

"Kto pierwszy wpadnie na pomysł co i jak należy zrobić, by Magellan jednoznacznie rozpoznawał - powiedzmy - cztery napędy wirtualne i usuwał lub umieszczał w nich obrazy ADF?"

O! Ja! Mogę ja? ;)
Na początku ostrzegam - nie używałem Magellana od lat i niewiele pamiętam, a nawet nie mam jak tego sprawdzić (musiałbym go zainstalować) - więc to takie teoretyzowanie na sucho będzie...
Pomysł na "karuzelę" - czyli montujemy obrazy kolejno w napędach AD0: do AD3:
Tworzymy skrypt ADOS o nazwie np. Karuzela_z_ADFami, ;) który zapisujemy w C: (nie zapomnieć dodać mu flagi S). Zawartość skryptu:
----------------------------------------
GetENV ADFUnit >NIL:
IF WARN
SetENV ADFUnit 0
SetENV ADFDevice AD0:
ELSE
EVAL $ADFUnit + 1 TO ENV:ADFUnit
SetENV ADFDevice AD$ADFUnit:
IF $ADFUnit GE 4
SetENV ADFUnit 0
SetENV ADFDevice AD0:
ENDIF
ENDIF
Copy ENV:ADF#? TO ENVARC: QUIET
----------------------------------------
Co robi skrypt: Na początku (GetENV ADFUnit >NIL:) sprawdza, czy już korzystaliśmy z niego (skryptu) - czyli, czy montowaliśmy już coś w ADx:. Jeżeli nie (IF WARN), to tworzy zmienne ADFUnit i ADFDevice, i przypisuje im wartości 0 oraz AD0:.
Jeżeli skrypt był już wywoływany (ELSE), to zwiększa wartość zmiennej ADFUnit o jeden (EVAL $ADFUnit + 1 TO ENV:ADFUnit) oraz synchronizuje z nią zmienną ADFDevice (SetENV ADFDevice AD$ADFUnit:).
Jeżeli wartość zmiennej ADFUnit w wyniku dodawania osiągnie wartość równą lub większą od 4, to następuje reset zmiennych, czyli ustawienie ich wartości na 0 dla ADFUnit oraz AD0: dla ADFDevice.
2x ENDIF to zakończenie warunku.
Na koniec (opcjonalnie) kopiujemy zmienne z ENV: do ENVARC, dzięki czemu "karuzela" staje się odporna na reset (po resecie ostatnie wartości zmiennych zostaną przywrócone, a co za tym idzie montowanie obrazów w napędach będzie kontynuowane od ostatniego użytego napędu a nie od zerowego). Jak już pisałem, jest to opcjonalna funkcja skryptu - mająca sens wyłącznie w przypadku, gdy opisywany pakiet również potrafi przeżyć reset. Jeżeli nie (jeżeli automatycznie nie montuje po resecie obrazów ADF), to linijkę "Copy ENV:ADF#? TO ENVARC: QUIET" należy usunąć.

Następnie należy zmodyfikować funkcję
Function:
AmigaDOS C:Karuzela_z_ADFami
AmigaDOS RemoveDisk UNIT $ADFUnit
AmigaDOS Diskchange $ADFDevice
AmigaDOS C:InsertDisk UNIT $ADFUnit {f}
Command ScanDir $ADFDevice
AmigaDOS DiskChange $ADFDevice
AmigaDOS Play16 DOpus5:Sounds/RELOAD.WAV
Flags: Run asynchronously

Pytanie tylko, czy "Command ScanDir $ADFDevice" zabangla
[#2] Re: Directory Opus Magellan: Filetype ADF, czyli obrazy amigowych dyskietek

@APC74, post #1

Jesteś szybszy chyba od światła! :)
Ale chyba nadmiernie skomplikowałeś z tą "karuzelą".
Rozumiem koncepcję pętli, ale co i jak wtedy z odmontowywaniem ? Też w pętli ?
A jak odmontujesz np. 2. i 3., zostanie 1. i 4., to gdzie zamontujesz następny adf ? W 1. czy w 2. ?

Proponuję wrócić do podstaw, sztuka w prostocie ! :) Aby uprościć na maxa sprawę: można po prostu naśladować sytuację z prawdziwymi napędami FDD...
[#3] Re: Directory Opus Magellan: Filetype ADF, czyli obrazy amigowych dyskietek

@Dopuser, post #2

FailAT 21

ASSIGN >NIL: AD0: EXISTS
 IF WARN
  Mount AD0: FROM DEVS:ADF.ml
 ENDIF

ASSIGN >NIL: AD1: EXISTS
 IF WARN
  Mount AD1: FROM DEVS:ADF.ml
 ENDIF

ASSIGN >NIL: AD2: EXISTS
 IF WARN
  Mount AD2: FROM DEVS:ADF.ml
 ENDIF

ASSIGN >NIL: AD3: EXISTS
 IF WARN
  Mount AD3: FROM DEVS:ADF.ml
 ENDIF

DiskType AD0: >NIL:
 IF ERROR
  SetENV ADFUnit 0
  SetENV ADFDevice AD0:
  SKIP EOF
 ENDIF

DiskType AD1: >NIL:
 IF ERROR
  SetENV ADFUnit 1
  SetENV ADFDevice AD1:
  SKIP EOF
 ENDIF

DiskType AD2: >NIL:
 IF ERROR
  SetENV ADFUnit 2
  SetENV ADFDevice AD2:
  SKIP EOF
 ENDIF

DiskType AD3: >NIL:
 IF ERROR
  SetENV ADFUnit 3
  SetENV ADFDevice AD3:
  SKIP EOF
 ENDIF


GetENV ADFUnit >NIL:
 IF WARN
  SetENV ADFUnit 0
  SetENV ADFDevice AD0:
 ELSE
  EVAL $ADFUnit + 1 TO ENV:ADFUnit
  SetENV ADFDevice AD$ADFUnit:
  IF $ADFUnit GE 4
   SetENV ADFUnit 0
   SetENV ADFDevice AD0:
  ENDIF
 ENDIF

LAB EOF


Co robi skrypt:
1. Sprawdza i w razie potrzeby montuje urządzenia AD0: - AD3:.
2. Sprawdza, czy któreś z urządzeń AD0: - AD3: jest puste (nie zawiera obrazu). Po wykryciu pustego napędu zapisuje jego numer w zmiennych (montowanie w pierwszym wolnym napędzie).
3. Jeżeli wszystkie napędy są zajęte (we wszystkich zamontowane są obrazy) to włącza "karuzelę".

Skrypt używa polecenia [url=www.apc74.ppa.pl/PPA/DiskType.lha]DiskType[/url]. Wprawdzie leży gdzieś na Aminecie, ale ni chciało mi się szukać - dlatego link tym razem do mojej strony.

Rozumiem koncepcję pętli, ale co i jak wtedy z odmontowywaniem ? Też w pętli ?
Nie rozumiem pytań.


Ostatnia aktualizacja: 12.11.2011 12:20:33 przez APC74
[#4] Re: Directory Opus Magellan: Filetype ADF, czyli obrazy amigowych dyskietek

@APC74, post #3

Można i tak, za pomocą pętli. Ale odnoszę wrażenie, że całość zaczyna się po prostu nadmiernie komplikować. No i ja patrzę przede wszystkim jak to zrobić za pomocą Magellana bardziej niż w czystym skrypcie AmigaDOS.

Co robi skrypt:
1. Sprawdza i w razie potrzeby montuje urządzenia AD0: - AD3:.


A czemu nie zamontować ich na stałe wraz z systemem ? Nie prościej ?


2. Sprawdza, czy któreś z urządzeń AD0: - AD3: jest puste (nie zawiera obrazu). Po wykryciu pustego napędu zapisuje jego numer w zmiennych (montowanie w pierwszym wolnym napędzie).

A co z usuwaniem obrazów ? Przykładowo masz 4 obrazy, i chcesz usunąć tylko 3...
jak usuniesz ten przykładowy 3. ?

Pamiętaj, że mowa o wykorzystaniu Magellana do zabawy z ADF-ami...
[#5] Re: Directory Opus Magellan: Filetype ADF, czyli obrazy amigowych dyskietek

@Dopuser, post #4

Pytałeś o rozwiązanie - przedstawiłem swoje, prościej nie potrafię. Zawsze można przerobić ten skrypt na moduł Magellana.

A czemu nie zamontować ich na stałe wraz z systemem ? Nie prościej ?

Prościej. To tylko propozycja w skrypcie. Nie lubię mieć zbyt dużo urządzeń zamontowanych na starcie. Wiele rzeczy montuję tylko, gdy ich potrzebuję - jest wiele narzędzi do tego, gdzie dopiero po wywołaniu jakiegoś urządzenia jest ono montowane.

A co z usuwaniem obrazów ?
No przecież skrypt do usuwania obrazów już masz (Eject Disk) - wystarczy zmienić mu sztywne przypisanie z '...UNIT 0' i 'DiskChange AD0:' na stosowne parametry DOpusa ( {d} {D} - chyba? )...

Ostatnia aktualizacja: 12.11.2011 16:12:22 przez APC74
[#6] Re: Directory Opus Magellan: Filetype ADF, czyli obrazy amigowych dyskietek

@APC74, post #5

Nie lubię mieć zbyt dużo urządzeń zamontowanych na starcie. ...

Ja podobnie, dlatego też bardziej przemawia do mnie koncepcja z jednym wirtualnym napędem, podobnie jak to jest w przypadku rzeczywistego FDD.

No przecież skrypt do usuwania obrazów już masz (Eject Disk) - wystarczy zmienić mu sztywne przypisanie z '...UNIT 0' i 'DiskChange AD0:' na stosowne parametry DOpusa ( {d} {D} - chyba? )...

Wykorzystując kilka wirtualnych stacji trza by się właśnie pobawić jeszcze co nieco z usuwaniem obrazów z konkretnych wirtualnych napędów. I żeby Opus rozróżnił konkretne wirtualne napędy (np. 2. od 4.) trzeba by dodać filetype'y definiujące AD1:, AD2: i AD3.

W skrócie, ja to widzę tak: w kontekstowym menu ADF-a tworzymy funkcje:
Zamontuj w AD1:
Zamontuj w AD2:
Zamontuj w AD3:
(które mogą zawierać jako pierwszą linijkę polecenie montujące dany napęd ADx, a dopiero następnie obraz ADF do tego napędu).

W filetype'ach AD1:, AD2: i AD3: umieszczamy odpowiednio poprawione polecenie Eject Disk.

Chcemy zamontować obraz .adf w innym wirtualnym napędzie, prawa mycha rozwija menu kontekstowe wtedy, wybieramy jeden z napędów, i już.
Chcemy usunąć obraz: prawa mycha na wirtualnym napędem, Opus rozpozna jaki to ADx, i usunie wtedy obraz z tego napędu (może też odmontować sam napęd).

Innymi słowy niejako klonujemy wirtualne napędy na wzór AD0:, i analogicznie klonujemy Virtual Drive filetype...

Tak na marginesie: marnujesz się bez Magellana! :)
[#7] Re: Directory Opus Magellan: Filetype ADF, czyli obrazy amigowych dyskietek
A tu filmik pokazujący ADF filetype w działaniu...

Ostatnia aktualizacja: 07.08.2012 21:15:01 przez Dopuser
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