W 1998 roku firma GPSoftware z Australii wydała ostatnią amigową wersję swego sztandarowego programu Directory Opus Magellan II. Program ten niejako przełamał granice pomiędzy interfejsem okienkowym, do jakich przyzwyczaja zwykły desktop, a linią poleceń CLI. Nastąpiło to dzięki niezwykłej elastyczności Magellana w zakresie tworzenia nowych funkcji użytkownika, zapisywanych tak w postaci ikonek, jak i guzików menu belki tytułowej, guzików paska narzędzi, skrótów klawiaturowych czy funkcji menu kontekstowego, widocznego po wciśnięciu prawego przycisku myszy nad plikiem. I właśnie na przykładzie tego ostatniego, zwanego także menu kontekstowym, postaram się pokazać sposób tworzenia nowych funkcji w Magellanie. Przydatna będzie jako taka znajomość AmigaDOS i samego Magellana. Bez tego ani rusz.
Tytułem wstępu warto jeszcze wspomnieć o sposobie, w jaki Magellan rozróżnia pliki. Otóż Magellan potrafi rozróżnić pliki na nieograniczoną ilość sposobów (sic!). Może to być rozszerzenie w nazwie pliku, ale równie dobrze sam nagłówek pliku albo np. trzecia litera nazwy czy wręcz wielkość pliku. Co więcej, sposoby rozpoznania można ze sobą łączyć. Możliwości są w zasadzie nieograniczone. Jak nie pogubić się w tym wszystkim, może ktoś spyta? Powiem krótko: nie ma z tym żadnego problemu, a to dzięki trzymaniu się pewnych zasad. Na warsztat, jako przykład, wezmę po prostu folder. Magellan rozróżnia sam z siebie folder jako rodzaj pliku, więc sprawa definicji folderu jest prosta. Pytanie, jakie funkcje warto przypisać folderowi, a ściślej do menu kontekstowego folderu? Można różne, np. tworzenie obrazu ISO folderu, pakowanie w formacie ZIP, LZX, LhA lub 7z czy wręcz wypalanie folderu na CD, jak w przypadku folderu ze zdjęciami czy "empetrójkami".
Tworzenie archiwum w formacie 7z.
Za przykład niech posłuży mi modny ostatnio - i bardzo wydajny - archiwizer 7z. Jak do tej pory ukazało się kilka wersji tego programu dla AmigaOS, zarówno na Aminecie, jak i Sourceforge - http://amiga.sourceforge.net. Można wykorzystać dowolny z nich. Najnowsza dostępna wersja to 9.13 z Aminetu: http://aminet.net/util/arc/p7zip-9.13-m68k.lha. Są to kompilacje ze źródeł linuksowych, pozbawione GUI, wyposażone w miarę bogaty zestaw argumentów dostępnych z poziomu CLI, czyli coś, co "młode tygryski lubią najbardziej", bo przydaje się do "rzeźbienia skryptów" właśnie.
Do archiwizacji katalogu będzie w zasadzie potrzebny nam tylko jeden z argumentów programu 7za, mianowicie argument:
a: Add files to archive / Dodaj plik do archiwum
Ale że dobrze jest sprawdzić czy archiwum zostało utworzone bezbłędnie, więc przyda nam się także:
t: Test integrity of archive / Sprawdź spójność archiwum
Zabieramy się więc za skrypt. Otwieramy edytor filetypów w Magellanie, wybieramy rodzaj pliku "Katalog" i w jego kontekstowym menu wklepujemy:
Funkcja : AmigaDOS set nazwa {ou} AmigaDOS C:7za a $nazwa.7z {f} AmigaDOS C:7za t $nazwa.7z AmigaDOS UnSetENV nazwa Flagi : Output to window / pokaż w oknie
Teraz krok po kroku "co i po co":
Skrypt w zasadzie gotowy. Może jeszcze warto dodać docelowe miejsce, gdzie Magellan umieściłby nowo utworzone archiwum. Zakładam, że takie archiwum ma tymczasowy charakter, więc proponuję do tego celu katalog RAM:. Dopiszę więc jako pierwszą linijkę skryptu:
AmigaDOS cd RAM: tu reszta skryptu,
po czym jako ostatnią linijkę dodam:
Command ScanDir RAM: NEW
Polecenie ScanDir jest poleceniem wewnętrznym Magellana i otwiera nam nowy listerek z zadaną ścieżką - w naszym przypadku będzie to oczywiście lister z zawartością RAM:.
Podsumowując, efektem działania skryptu będzie:
Tworzenie obrazu ISO katalogu
Inny przykład funkcji menu kontekstowego katalogu to np. tworzenie jego obrazu ISO. Sprawa też niezbyt skomplikowana. Potrzebna będzie "pchełka" odwalająca niewdzięczną robotę, dostępna oczywiście na Aminecie.
Całość skryptu to niewiele więcej niż jedna linijka. Nie wiem czy w ogóle można mówić w takim razie o skrypcie w takim przypadku, ale ta jednolinijkowa funkcja tworząca obraz ISO katalogu działa jak trzeba. "Jednolinijkowy skrypt" wygląda więc następująco:
Funkcja: AmigaDOS mkisofs -o {ou}.iso -sysid AmigaOS -V {ou} -U {f} Flagi : Output to window / pokaż w oknie Window close button / guzik zamykania okna
I ponownie krok po kroku "co i po co", choć tym razem opis samych użytych argumentów programu mkisofs:
Program mkisofs zawiera dziesiątki argumentów CLI, opisywać je wszystkie mija się raczej z celem, wykorzystałem tylko kilka.
Archiwizacja katalogu w formacie LhA.
Myślę, że format LhA jest na tyle popularny wśród braci amigowej, że nie wymaga specjalnego komentarza. Poniżej zamieszczam mój nieco bardziej rozbudowany skrypt do archiwizacji w tym formacie, podpięty oczywiście do rodzaju pliku definiującego katalog:
Function : AmigaDOS cd RAM: AmigaDOS set nazwa {ou} AmigaDOS MegaEcho AmigaDOS MegaEcho Directory filetype v 1.6 (PPA version) @ D. Gac) in action now... AmigaDOS RequestChoice >ENV:wybor "Archiving with LHA" "Select mode:" "Aminet style|Best" AmigaDOS IF VAL $wybor EQ 0 AmigaDOS SetEnv metoda -3 AmigaDOS SetEnv tryb -lh6- AmigaDOS ELSE AmigaDOS SetEnv metoda -2 AmigaDOS SetEnv tryb -lh5- AmigaDOS ENDIF AmigaDOS MegaEcho AmigaDOS MegaEcho LHA packing with $tryb mode in progress... AmigaDOS MegaEcho AmigaDOS MegaEcho Creating archive: $nazwa.lha ... please wait ! AmigaDOS MegaEcho AmigaDOS Lha -r -F $metoda -D1 a $nazwa {f} AmigaDOS MegaEcho AmigaDOS MegaEcho Completed... checking $nazwa.lha archive now... AmigaDOS MegaEcho AmigaDOS Lha -F t $nazwa.lha AmigaDOS UnSetENV nazwa AmigaDOS UnSetENV wybor AmigaDOS UnSetENV metoda AmigaDOS UnSetEnv tryb Command ScanDir RAM: Flags : Output to window / Pokaż w oknie Run asynchronously / Uruchom asynchronicznie
Polecenie AmigaDOS MegaEcho to takie bardziej rozbudowane polecenie Echo. Zawiera w sobie kilka "bajerów", które wykorzystuję w skryptach.
I tutaj pytanie edukacyjne "za 2 złote" do początkujących zwłaszcza: co takiego konkretnie robi powyższy skrypt?
Na koniec, myślę, że ciekawą funkcją jest wypalanie katalogu za pomocą programu dvdrecord. Kto pierwszy podejmie się zadania i "wyrzeźbi" skrypt?
I to by było na tyle. Polecam samodzielną zabawę w dodawanie rożnych funkcji (dla różnego rodzaju filetypów) i tym samym wzbogacanie desktopu pod kątem swoich własnych potrzeb.
A tytułowe pytanie "to GUI or not to GUI?" pozostawiam otwarte.
Artykuł oryginalnie pojawił się w siódmym numerze Polskiego Pisma Amigowego.