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.