Aktualności Forum Giełda Sprzęt Programy Strefa Gier Graffiti Publicystyka Teleport
  • Directory Opus Magellan: "to GUI or not to GUI?", czyli "rzeźbimy" skrypty...

29.12.2012 10:16, autor: Dariusz Gac
odsłon: 2655, wersja PDF

To GUI or not to GUI 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.

To GUI or not to GUI

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":

  • AmigaDOS set nazwa {ou} - ustawia zmienną "nazwa", zawierającą nazwę naszego folderu, argument Magellana {ou} zaś pozwoli mu na dalsze operacje na zaznaczonym folderze.
  • AmigaDOS C:7za a $nazwa.7z {f} - Archiwizer 7za wkracza do akcji i pakuje archiwum (argument a) nadając jednocześnie plikowi wynikowemu nazwę oryginalnego katalogu i .7z jako rozszerzenie (przydaje się pod Windows).
  • AmigaDOS C:7za t $nazwa.7z - ponownie archiwizer 7za w akcji, tym razem sprawdzający integralność spakowanego archiwum (argument t).
  • AmigaDOS UnSetENV nazwa - Usuwamy zmienną "nazwa" z pamięci.

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:

  • spakowanie dowolnego katalogu do formatu 7z,
  • przetestowanie spójności tego archiwum,
  • otwarcie listera zawierającego utworzone archiwum w formacie 7z.

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:

  • -o {ou}.iso - ten argument ustawia wynikową nazwę obrazu na taką, jak nazwa katalogu, dodając jednocześnie rozszerzenie .iso
  • -sysid AmigaOS - zapisuje w obrazie ISO AmigaOS jako system roboczy
  • -V {ou} - zapisuje w obrazie ISO jego oryginalną nazwę, tj. nazwę katalogu
  • -U {f} - kombinowany zestaw kilku argumentów w jednym (odpowiednik -l, -d, -L, -N, -relaxed-filenames, -allow-lowercase), szczegóły w instrukcji do programu mkisofs.

To GUI or not to GUI

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

To GUI or not to GUI

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.

To GUI or not to GUI

Artykuł oryginalnie pojawił się w siódmym numerze Polskiego Pisma Amigowego.

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