Amiga DOS cz.4

Alias - Rozkaz ten pozwala na zastąpienie często używanych i wymagających dużo pisania rozkazów AmigaDOS dowolnym krótszym tekstem złożonym z liter, co pozwala oszczędzić stukania w klawiaturę.


ALIAS   ( czyli,  jako )


Dla systemu 1.2 rozkaz nie występuje. ALIAS można wykonać jedynie z poziomu Shella, a nie CLI, a zatem użytkownicy systemu 1.2 nie mogą używać tego rozkazu.

Składnia dla wszystkich pozostałych systemów :

ALIAS   [name=]   >łańcuch1<   [STRING=]   >łańcuch2<

gdzie : łańcuch1 - jest tekstem stworzonym przez użytkownika, łańcuch2 - rozkazem Amiga DOS, który ma być zastąpiony przez łańcuch1. Łańcuch ten musi występować w cudzysłowie. Wzorzec parametrów dla systemów 3.0 i 3.1 :


ALIAS NAME, STRING/F

dla pozostałych systemów, w których występuje rozkaz ALIAS :


ALIAS NAME, STRING

Rozkaz ten pozwala na zastąpienie często używanych i wymagających dużo pisania rozkazów AmigaDOS dowolnym krótszym tekstem złożonym z liter, co pozwala oszczędzić stukania w klawiaturę. Przypuśćmy, że dość często przeglądamy katalog "df0:roboczy/music/protracker/moduły". Każdorazowe wpisywanie :


dir df0:roboczy/music/protracker/moduły

jest bezcelowe. Wystarczy bowiem wpisać rozkaz :


ALIAS km "dir df0:roboczy/music/protracker/moduły"

aby od tego momentu do pokazania odpowiedniego katalogu wystarczyło wpisanie :


km

Oczywiście nazwa "km" jest najzupełniej przykładowa i można w to miejsce wstawić dowolną inną. Należy przy tym jednak pamiętać o tym, aby wymyślona nazwa zastępcza różniła się od nazw zbiorów występujących na dysku. Tak podany ALIAS będzie działał do momentu wyłączenia komputera lub przejścia do innego Shell-a (rozkazem NewShell). Jeśli chcemy jakieś przyporządkowanie mieć "na stałe", wystarczy wpisać je jako wiersz do zbioru S:Shell-Startup.

Korzystając z funkcji ALIAS, można także zastąpić dowolne urządzenie (fizyczne lub logiczne) AmigaDOS-u przez jego substytut. Dzięki temu będzie możliwe rozszerzenie zakresu działania rozkazu. W tym celu należy zastąpić nazwę urządzenia nawiasami kwadratowymi. Jeśli w sekwencji startowej Shell-a umieścimy na przykład wiersz :


ALIAS l "List [] NoDates"

to aby uzyskać spis wszystkich zbiorów (bez dat ich stworzenia) na dysku df2:, wystarczy napisać :


l df2:

Natomiast taki sam spis zbiorów w katalogu C na dysku, z którego uruchamialiśmy ostatnio Amigę, uzyskamy pisząc :


l C

Aby usunąć jakieś przyporządkowanie, wystarczy wpisać rozkaz UNALIAS z nazwą, jaką nadaliśmy przyporządkowaniu, i nacisnąć klawisz [Return]. Dla powyższego przykładu usuniemy ALIAS wpisując :


UNALIAS l

Jeśli zaś wpiszemy rozkaz ALIAS bez żadnych parametrów :


ALIAS

i naciśniemy klawisz [Retrurn], wówczas otrzymamy spis aktualnie aktywnych przy porządkowań.

Oczywiście ALIAS znajduje zastosowanie nie tylko przy wyświetlaniu nazw zbiorów. Można wykorzystać go do ułatwiania pracy z drukarką (opisał to p. Robert Litwiniec w Kuferku Magazynu AMIGA nr.8/93). Można także połączyć działanie ALIAS-u z gotowymi skryptami Shell-a (SPAT i DPAT; skrypty te zostaną opisane później). W ten sposób, na przykład, można jednym naciśnięciem klawisza założyć bity protekcji na wszystkich zbiorach na dysku. Wcześniej jednak należy wpisać :


alias p "execute s:spat proteck []"

UWAGA: Powyższy rozkaz zadziała jedynie z poziomu Shell-a (a nie CLI). Ponadto, ten przykład jest tylko do celów "naukowych", bo dla shella, już od wersji 1.3 włącznie, jest gotowy podobny ALIAS, tyle tylko, że nazywa się "prp".

Gotowe aliasy dla Shella systemu 1.3 są zresztą dość ciekawe i warto je znać :


endshell endcli

ten alias pozwala kończyć zadanie Shella w sposób, do jakiego się wszyscy przyzwyczaili :


clear echo "*e[0;0H*E[40;31m*E[J"

Jeśli wpiszesz (spod Shella) "clear" i naciśniesz klawisz [Return], wówczas wskaźnik zachęty (prompt) znajdzie się na początku pierwszego wiersza ekranowego, a tekst na ekranie zostanie wymazany :


reverse echo "*e[0;0H*E[41;30m*E[J"
reverse echo "*e[0;0H*E[40;31m*E[J"


pierwszy z podanych aliasów zmieni kolory ekranu na "negatyw", nie naruszając jego zawartości, drugi przywróci normalny wygląd ekranu. (Bliższe wytłumaczenie tego, jak działają trzy ostatnie aliasy, znajdziesz w opisie rozkazu ECHO). Pozostałych aliasów (pro, ren, sdate i xcopy) używa się rzadko.

Dość zabawnych zastosowaniem rozkazu może być "zamiana" rozkazów ADOS na.. rozkazy MSDOS, na przykład :


ALIAS del "delete"
ALIAS print "copy df0:[] TO PRT:"


i tak dalej. Za pomocą ALIAS można także zablokować dostęp do poszczególnych rozkazów ADOS. Przykładowo wpiszmy:


ALIAS FORMAT ECHO "a mi się nie chce sformatować "

a następnie spróbujmy wpisać odpowiedni rozkaz, na przykład :


FORMAT df0:Pusta

Na ekranie pojawi się tekst "a mi się nie chce formatować df0:Pusta" i program powróci do Workbencha. Zresztą tekst po rozkazie ECHO nie jest w tym wypadku konieczny. Wystarczy wpisać pusty cudzysłów. Tym razem, aby przywrócić właściwe działanie rozkazu, nie wystarczy UNALIAS. Rozkaz Format jest zablokowany i próba użycia go, nawet w najbardziej prawidłowej, pełnej formie, spowoduje, że pojawi się komunikat :


FORMAT FAILURE: Wrong number of arguments

Pozostaje nam jedynie sformatować dysk, korzystając z menu systemowego czy innego programu o tym przeznaczeniu. Można też wyłączyć działanie tak podanego ALIASU. W tym celu musimy zresetować komputer (nerwowi) lub zamknąć Shell-a (spokojni).


UNALIAS FORMAT


ALINK   ( łącz )


UWAGA: Rozkaz ten jest spotykany bardzo rzadko. Został on opracowany dla systemu w wersji "Beta" przeznaczonej na rynek amerykański. Jakimś dziwnym zrządzeniem losu część Amig, których pierwsza partia trafiła do Peweksów, wyposażona była właśnie w ten system operacyjny. Rozkaz ten jednak (najprawdopodobnie na skutek protestu lobby firm software) nie znalazł się w innych wersjach systemu. Niemniej, kilka osób w Polsce na pewno go ma (często nawet o tym nie wiedząc), a ALINK jest na tyle ciekawy, że szkoda byłoby pominąć jego opis.

Składnia dla systemu 1.2 (rozkaz działa także, po przegraniu do katalogu rozkazowego C: z pozostałymi systemami operacyjnymi):

ALINK   [FROM : ROOT]   >n1<   [+   >n2<   + ... +   >n10<]   [TO   >n11<]
[WITH   >n12<]   [VER   >n13<]   [LIBRARY : LIB   >n14<]   [MAP   >n15<]
[XREF   >n16<]   [WIDTH   n]

Gdzie :

  • n1 do n10 - to nazwy zbiorów, które mają być łączone,
  • n11 - nazwa zbioru, do jakiego będą dołączane zbiory o nazwach od n1 do n10,
  • n12 - nazwa zbioru, jak będzie doklejona na końcu,
  • n13 - nazwa zbioru zawierającego kopię roboczą,
  • n14 - nazwa zbioru bibliotecznego, jaki może być dołączony w postaci inkludów,
  • n15 - nazwa zbioru zawierającego mapę bitową (bitmap),
  • n16 - zbiór z zapisem odwołań (skoki, etykiety wierszy, w których występują zmienne).
  • n - parametr ten określa szerokość fragmentów zapisanych jako zbiory ASCII (mapa bitów, zbiór z odwołaniami i zbiór doklejany).

Wzorzec parametrów :

ALINK LIBRARY,   MAP,   XREF,   WIDTH/F

Rozkaz pozwala łączyć do 10 zbiorów, zapisanych w postaci binarnej lub w językach C i BCPL, i zapisać wynik w jednym zbiorze. Do zbioru może być doklejony na końcu opis znajdujący się w zbiorze ASCII. Przykład :


ALINK test1 + test2 + test3 + test4 TO test

połączy zbiory : test1, test2, test3 i test4, a wynik zostanie zapisany w zbiorze test.


ASSEM   ( zasembluj )


Także i ten rozkaz pochodzi ze wspomnianej wersji AmigaDOS 1.2 US "beta". Przyczyną "nieprzetrwania" tego rozkazu była prawdopodobnie "niesamowita" prędkość działania.

Składnia :

ASSEM   [ PROG : FROM ]   [ SOURCE= ]   >n1<   [ TO -O   >n2< ]   [ -V   >n3< ]   [ -L   >n4< ]
[ H   >n5< ]   [ -E ]   [ -C:   OPT S   |   OPT X   |   OPT W   [ MEMORY= ]   >n6< ]   [   -I   >n7< ]   [ >n8<   ...   >n17< ]

Gdzie :

  • n1 - nazwa zbioru z kodem źródłowym,
  • n2 - nazwa zbioru, pod jaką ma być zapisany program po zasemblowaniu,
  • n3 - nazwa zbioru, w którym będą przechowywane komunikaty kompilatora,
  • n4 - nazwa zbioru z listą wykorzystanych bibliotek,
  • n5 - nazwa zbioru nagłówkowego,
  • n6 - ilość pamięci roboczej w bajtach,
  • n7 - ilość kroków kompilacji,
  • n8 - nazwy zbiorów, w jakich mają być zapisane wyniki poszczególnych kroków kompilacji.
  • O, V - komunikaty kompilatora nie będą wypisywane na ekranie, a zapisywane do zbioru,
  • L - zostanie utworzony zbiór z nazwa mi wykorzystywanych bibliotek,
  • H - zostanie utworzony zbiór nagłówkowy,
  • E - będą zapisywane rozkazy EQU,
  • C - ustawia dodatkowe parametry kompilacji :
    • OPT S - będzie tworzona lista symboli,
    • OPT X - będzie tworzona lista odwołań (obie listy zostaną zapisane do zbioru o nazwie n3),
    • OPT W - zostanie zarezerwowana pamięć robocza o wielkości n6
  • I - kompilacja będzie wykonana z inną liczbą kroków niż ustawione domyślnie 2.

Wzorzec parametrów :


ALINK SOURCE, COMPILE/S, MEMORY/N, STEP/N

Rozkaz miał w zamyśle służyć do asemblowania (kompilowania) źródeł w języku maszynowym i najprawdopodobniej pozostał w AmigaDOS przez niedopatrzenie. Wkrótce jednak pojawiły się o wiele szybsze i sprawniejsze programy-asemblery zdecydowanie prostsze w obsłudze. Nie podam tu (wyjątkowo) przykładu, bo choć miałem dostęp do tego rozkazu, wyczyniał on tak przedziwne rzeczy (przeważnie zaś Guru o rozmaitych numerach), że wolałem zmazać go z dysku, co radzę także i tym, u których się jeszcze zachował. Pomysł asemblowania z poziomu DOS-a był świetny. Znacznie gorzej było z wykonaniem. Nic dziwnego, że w tej chwili każdy rozsądny użytkownik posługuje się przy asemblacji AsmOne-m lub w najgorszym wypadku - Seką.


ASK   ( zapytaj )


Składnia dla wszystkich systemów :

ASK   [  PROMPT=  ]   >łańcuch<

Gdzie : łańcuch to tekst pytania. Tekst musi być w cudzysłowie.

Wzorzec parametrów :


ASK PROMPT/A

Pozwala na sterowanie przebiegiem skryptu. W momencie napotkania takiego rozkazu wykonywanie skryptu zostanie zatrzymane. ASK wypisze na ekranie tekst pytania i zażąda potwierdzenia. Czasami bowiem zachodzą sytuacje, w których nasza ingerencja jest konieczna. Ot, choćby w takim wypadku :


ECHO "Uwaga! Ta operacja zmaże wszystkie dane jakie masz na dysku" ASK "Rezygnujesz (y/n) ?" IF WARN SKIP koniec ELSE FORMAT DF0: ENDIF LAB koniec ECHO "Czekam na dalsze rozkazy"

O co w tym wszystkim chodzi ? Rozkaz ECHO spowoduje, że tekst zostanie wypisany na ekranie, ASK wyświetli tekst pytania i zatrzyma wykonywanie skryptu. Musimy teraz odpowiedzieć na pytanie. Odpowiedź przecząca (naciśnięcie literki [N]) nie spowoduje wygenerowania kodu WARN (podobne do errorlevel w MSDOS), który jest generowany w przypadku wciśnięcia innego klawisza. Z braku kodu WARN komenda IF wykona sekwencję rozkazów po ELSE, czyli formatowanie dyskietki. Można zrobić to samo w inny sposób, jednak nie zalecam tego, a dlaczego - zaraz się okaże :


ECHO "Uwaga! Ta operacja zmaże wszystkie dane jakie masz na dysku" ASK "Rezygnujesz (y/n) ?" IF NOT WARN SKIP koniec ELSE FORMAT DF0: ENDIF LAB koniec ECHO "Czekam na dalsze rozkazy"

Jeśli w odpowiedzi na ASK naciśniesz [N], a następnie [RETURN], rozkaz IF stwierdzi, że wygenerowano odpowiedź NOT (nie), i przeskoczy przez procedurę formatującą. Jeśli natomiast naciśniesz cokolwiek innego, wówczas żegnajcie dane na dysku. Wystarczy, że palec się "omsknie" albo że zostanie naciśnięty "pusty" klawisz [RETURN], co jest (domyślnie) równoważne z odpowiedzią przeczącą.

Rozkazu ASK można używać oczywiście i do innych celów :


ECHO "Na dysku znajdują się gry DYNASTIA i POKOLENIA" ASK "Cy chcesz poigrać zBlake'm i Alexis (Y/N) ?" IF WARN SKIP dynstia ELSE RUN DF0:Generations END IF END LAB dynastia END

Zdaję sobie sprawę z tego, że istnieją o wiele bardziej eleganckie sposoby wybierania gier z dysku (choćby za pomocą klawiszy funkcyjnych lub procedur typu BootMenu). Wydawało mi się jednak, że taki przykład pozwoli Wam, giercmanom, lepiej zrozumieć zasadę działania rozkazu.

Marek Pampuch,
Amiga Magazyn, Kwiecień 1994r.