DirectoryOpus - część 4 z 10
Jarosław Horodecki
Wersja HTML -
W poprzednich odcinkach zapoznaliśmy się z zasadami
działania opcji konfiguracyjnych DOpusa, dzięki którym możliwe
jest definiowanie własnych gadżetów oraz własnych typów plików.
Tym razem zajmiemy się możliwościami, jakie niesie ze sobą
równoczesne wykorzystanie tychże opcji.
Przygotujemy więc własne opcje, które w pełni skorzystają z
możliwości, jakie daje DOpus. Bardzo dobrym przykładem będzie
tutaj z pewnością zaprojektowanie kilku podstawowych opcji,
dzięki którym będziemy w stanie w pełni obsłużyć wszystkie
najpopularniejsze typy archiwów, tzn. LhA, Arj oraz Zip.
Aby nasze komendy mogły być w ogóle definiowane, musimy jednak mieć
kilka dodatkowych programików oprócz samego DOpusa. Potrzebna
jest dowolna właściwie wersja archiwizera LhA (oczywiście im
nowsza, tym lepiej) oraz komendy UnArj i UnZip, również w jak
najnowszych wersjach. Ja na co dzień korzystam z LhA v1.42, UnArj
v1.15 oraz UnZip v5.1d3Beta. Programy te powinny być dostępne w
większości amigowych BBS-ów. (P.D.-są już nowsze wersje)
Przystąpmy jednak do pracy. Pierwszą rzeczą, jaką należy zrobić,
jest oczywiście zdefiniowanie naszych nowych typów plików. Nie
będziemy tym razem zaglądać już do samej ich struktury, choć
należy powiedzieć, że warto chyba w ramach ćwiczenia
zaimplementować nieco dokładniejsze metody rozpoznawania
archiwów, oparte na ich strukturze. My jednak zdefiniujemy
jedynie rozpoznawanie w oparciu o istniejące rozszerzenie
wskazanego pliku.
Definiujemy więc typ LhA. Jak na pewno pamiętamy z poprzedniej
części cyklu, wybieramy opcję NEW z menu CLASSES i przechodzimy
do definicji typu. Teraz wypełniamy odpowiednie okienka, tj.
nazwę typu, jego ID oraz sposób jego rozpoznawania. W wypadku LhA
będzie to oczywiście nazwa LhA Archive, ID -- LhA oraz
rozpoznawanie za pomocą jednej tylko komendy MATCHNAME
?#.(lzh|lha). Oczywiście w podobny sposób definiujemy pozostałe
dwa rodzaje archiwów, zastępując LhA odpowiednio Zipem oraz
Arjotem.
Przejdźmy teraz do definicji reakcji poszczególnych rodzajów
plików na podwójne kliknięcie myszą (DOUBLE-CLICK) oraz
kliknięcie z przeniesieniem na drugie okienko katalogowe
(CLICK-M-CLICK). Przyporządkujemy tym działaniom odpowiednio
wyświetlenie zawartości wskazanego archiwum oraz rozpakowanie
tego archiwum do drugiego okienka. Jak zapewne pamiętamy z
drugiej części naszego cyklu, w wypadku archiwizera LhA, aby
zdefiniować wyświetlanie zawartości archiwum, należy wpisać
sekwencję LhA v {f} oraz zaznaczyć flagi "do all files" i "output
to file", natomiast do rozpakowania archiwum służyć będzie
sekwencja LhA x {f} oraz ustawione flagi "cd destination", "do
all files", "output window" oraz "rescan destination".
W podobny sposób zdefiniujemy również działania podporządkowane
pozostałym dwu typom, jednak uwzględnić trzeba specyfikę
posiadanych przez nas wersji komend UnArj oraz UnZip. Najczęściej
jednak postać argumentów będzie zgodna z przyjętym dla każdego z
archiwizerów standardem. Tak więc dla UnArj skorzystamy z
sekwencji UnArj x {f}, aby archiwum rozpakować. Wszystkie flagi
ustawiamy tak jak przy analogicznej definicji dla LhA. Aby
przejrzeć zawartość archiwum Arj, korzystamy z również
identycznej jak dla LhA sekwencji UnArj v {f} i tych samych
ustawień poszczególnych flag. Natomiast nieznacznie inny sposób
podawania komend ma UnZip. Tutaj literkę-komendę trzeba
poprzedzić znakiem "-". Odpowiednie sekwencje wyświetlania
zawartości archiwum oraz jego rozpakowania będą więc wyglądały
tak: UnZip -v {f} oraz UnZip {f}. Warto zauważyć, iż
rozpakowywanie archiwum jest funkcją realizowaną przez UnZip
domyślnie, gdy nie są podane żadne inne komendy.
Mamy już więc za sobą definicję podstawowych działań, jakie mają
być realizowane przez DOpus po wykryciu danego archiwum. Mieliśmy
się jednak zająć połączeniem funkcji gadżetów z rozpoznawaniem
typów plików. Jak tego dokonać? W poprzednim odcinku omówiliśmy
jedynie funkcje dwóch pierwszych opcji umieszczonych w okienku
EVENTS, znajdującym się na ekranie definicji działań
podejmowanych przy wykrywaniu danych typów plików. Warto jednak
wspomnieć również o pozostałych pozycjach zawartych w tym
okienku. Służą one mianowicie do definiowania reakcji
poszczególnych komend na wykrycie danego typu pliku. W liście
mamy takie komendy, jak: ANSI READ, HEX READ, LOOP PLAY, PLAY,
READ oraz SHOW. Każdej z nich może zostać przyporządkowane
konkretne działanie. Dzięki temu można znacznie rozszerzyć zakres
działania poszczególnych standardowych funkcji DOpusa.
Przykładem mogą tu być takie opcje jak PLAY (odgrywanie większej
liczby standardów muzycznych), SHOW (pokazywanie na ekranie
obrazków w różnych formatach -- można wykorzystać zdefiniowany w
poprzednim odcinku typ JPG). Jeżeli natomiast nie korzystamy z
możliwości definicji sposobu działania danej komendy, to
zignoruje ona wykrycie określonego typu pliku i będzie działała w
sposób przyjęty jako standardowy.
Na końcu listy znajdują się jeszcze cztery pozycje: USER1, USER2,
USER3 i USER4. Służą one do definiowania własnych gadżetów
użytkownika. Właśnie za ich pośrednictwem można skonstruować
opcje, których działanie będzie uzależnione od wykrytego rodzaju
pliku. My skorzystamy z trzech powyższych opcji,
przyporządkowując im kolejno rozpakowanie archiwum do drugiego
okna katalogowego, wyświetlenie pełnej informacji o jego
zawartości oraz przetestowanie go. Pierwsze dwie opcje każdy
powinien bez problemu zdefiniować sam, korzystając ze zdobytej
dotychczas wiedzy. Definicje te będą identyczne z tymi, które
przygotowaliśmy w wypadku opcji CLICK-M-CLICK oraz DOUBLE-CLICK.
Jedyną, aczkolwiek również stosunkowo niewielką, trudnością może
być zdefiniowanie komendy testującej archiwum. Wystarczy jednak
tylko zajrzeć do dokumentacji poszczególnych archiwizerów.
Odpowiednio dla LhA, Zip i Arj musimy podać następujące
sekwencje: LhA t {f}, UnZip -t {f} oraz UnArj t {f}. Ustawienia
flag będą natomiast niemalże takie same, jak w wypadku
przeglądania zawartości archiwum. Jedyną zmianą będzie tu
ustawienie flagi "output to window" zamiast "output to file".
Gdy mamy już zdefiniowane wszystkie możliwe czynności dla każdego
z rodzajów archiwizerów, przechodzimy do znanej nam z drugiej
części cyklu definicji gadżetów. Stworzyliśmy wtedy zestaw komend
obsługujących archiwa LhA. Można teraz znacznie wzbogacić
wcześniej zdefiniowane opcje. Zacznijmy od LHA LIST. Po pierwsze
zamieniamy więc nazwę gadżetu na samo tylko LIST.
Przecież nasza nowa funkcja ma mieć możliwość pokazywania zawartości kilku
rodzajów archiwów. Teraz wystarczy jeszcze skasować wpisaną
komendę AmigaDOS-u LhA v {f} i wstawić zamiast niej nową: COMMAND
USER2, o ile oczywiście w definicjach typów plików opcji USER2
przyporządkowaliśmy własnie listowanie zawartości archiwum. Na
koniec należy jeszcze wyłączyć wszystkie flagi przyporządkowane
gadżetowi. Kontrolę nad nimi przejmą teraz ustawienia z definicji
plików. Następną komendą będzie LHA UNPACK, którą oczywiście
zamienimy na UNPACK. Następnie postępujemy tak, jak w wypadku
LIST, czyli zamieniamy wpisane LhA x {f} na USER1 oraz kasujemy
wszystkie flagi.
Ostatnia z definiowanych przez nas komend to TEST, której
dotychczas jeszcze nie definiowaliśmy. Tworzymy więc nowy gadżet
o tej właśnie nazwie, wpisując podobnie jak w dwóch poprzednich
wypadkach USER3 jako COMMAND. Żadnych flag nie będziemy
oczywiście ustawiać.
Warto chyba teraz sprawdzić, jak nasze dzieło będzie się
sprawować. Na początek proponuję więc zaznaczyć plik LhA i
kolejno spróbować odczytać jego zawartość, przetestować go, a
następnie rozpakować do drugiego katalogu. Te same testy
proponuję również przeprowadzić na pozostałych dwóch rodzajach
archiwów. Jeżeli wszystko dobrze działa, gdy operuje na jednym
pliku, zaznaczmy teraz kilka, ale tego samego rodzaju. W dalszym
ciągu wszystko powinno działać prawidłowo. Na koniec sprawdźmy
jednak, jak zadziała na przykład nasza funkcja TEST, gdy
zaznaczymy równocześnie archiwa LhA, Zip i Arj. Otóż pierwsze z
nich zostanie przetestowane zupełnie prawidłowo, natomiast na
pozostałych DOpus będzie próbował nadal wykonywać tę samą
komendę. Na przykład, gdy pierwszym zaznaczonym archiwum będzie
LhA, natomiast pozostałymi Zipy, czy też Arjoty, i tak DOpus
będzie próbował testować je za pomocą LhA. Gdzieś musi więc tkwić
błąd.
Jak pamiętamy, przygotowując działania dla USER1, USER2 oraz
USER3 kopiowaliśmy ustawienie poszczególnych flag z wcześniej
zdefiniowanych CLICK-M-CLICK oraz DOUBLE-CLICK. Jak się okazuje,
zupełnie niepotrzebnie została przekopiowana również flaga "do
all files", która powoduje, że dana funkcja jest realizowana aż
do przejścia przez wszystkie oznaczone pliki. Nie daje to
możliwości rozpoznania kolejnych rodzajów archiwów (lub ogólnie:
rodzajów plików) i powoduje, że pozostałe zaznaczone pliki są już
obsługiwane przez procedury uruchomione przez pierwszy plik.
Rozwiązanie tego problemu jest oczywiście zupełnie proste.
Wystarczy przecież wyłączyć flagę "do all files" we wszystkich
zdefiniowanych dotychczas działaniach przyporządkowanych funkcjom
USER1, USER2 oraz USER3. Flagę tę należy włączyć natomiast w
definicji poszczególnych gadżetów (UNPACK, LIST oraz TEST). Gdy
wprowadzimy już te drobne zmiany, wszystko powinno działać
prawidłowo. Pliki będą odpowiednio rozpoznawane i stosowany
będzie odpowiedni archiwizer. Nie muszę chyba nikogo przekonywać
o wygodzie zainstalowania takich opcji.
Warto zauważyć, jak wielkie możliwości niesie ze sobą
zainstalowanie w DOpusie opisanych powyżej możliwości. Szkoda
tylko, że opcji USER jest tak mało (tylko cztery). To właśnie
dzięki nim można przecież definiować najciekawsze i nawet w
bardzo dużym stopniu rozbudowane komendy. Można oczywiście
korzystając z definicji plików wykorzystywać daną opcję USER w
kilku zupełnie różnych komendach, nie wpływa to jednak z
pewnością na przejrzystość stworzonej w ten sposób konfiguracji.
To już chyba wszystko, jeśli chodzi o możliwości definiowania
nowych, własnych komend oraz zmieniania już zainstalowanych. To
jednak nie koniec możliwości zmiany konfiguracji DOpusa. W
następnej części znajdziemy więc omówienie kolejnych funkcji
programu konfiguracyjnego oraz sposobów ich ciekawego
zastosowania.