home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1997 #3
/
amigamamagazinepolishissue03-1
/
ma_1995
/
03
/
ami025.txt
< prev
next >
Wrap
Text File
|
1997-04-06
|
13KB
|
355 lines
Suplement do Amiga DOS
----------------------
NÓÛ I WIDELEC
<lead>Kilku Czytelników poinformowaîo mnie, ûe nie podobaî im sië
przykîad (uûyty w jakimô odcinku cyklu o Amiga DOS), uûywajâcy
operatorów .key czy .bra, gdyû nie rozumiejâ, o co tutaj chodzi.
Faktycznie, nie wyjaôniaîem znaczenia .key, .bra i .ket, chcâc to
zrobiê dopiero po opisie rozkazów. Jednak skoro taka jest wola
ludu -- zrobië to juû teraz, rozumiejâc rozterki duchowe tych
wszystkich, którzy nie lubiâ przepisywaê zaîâczonych przykîadów
bezrozumnie, jak maîpy. Rzeczywiôcie -- trudno jeôê z DOSowego
talerza bez korzystania z noûa i widelca. A zatem, kowboje do
dzieîa!
<a>Marek Pampuch
<txt> Oba wspomniane "niezrozumiaîki" nie sâ w zasadzie rozkazami
AmigaDOS, lecz naleûâ do grupy tzw. operatorów skryptu.
Operatory, nie wystëpujâce w jëzykach programowania, a takûe w
innych niû AmigaDOS systemach operacyjnych, zostaîy wymyôlone po
to, aby umoûliwiê przekazywanie parametrów do skryptu. Aby znów
nie byîo "stawania na gîowie", przed opisem samych operatorów
naleûy najpierw wyjaôniê pojëcie skryptu AmigaDOS.
Skrypt jest zbiorem tekstowym, skîadajâcym sië z rozkazów
AmigaDOS. Moûna go stworzyê za pomocâ dowolnego edytora (na
przykîad systemowego ED). Skrypt pozwala na wykonanie okreôlonej
przez uûytkownika sekwencji operacji, nie wszystkie bowiem
rozkazy AmigaDOS mogâ byê wprowadzane "z rëki" w CLI lub Shellu.
Bardziej zaawansowani programiôci mogâ posîuûyê sië nawet
skryptami w celu opracowania nowych, wîasnych, rozkazów AmigaDOS,
celem uîatwienia sobie dalszej pracy.
Zaletâ skryptu jest to, ûe moûna zmieniaê jego dziaîania
wprowadzajâc mu inne parametry, w sposób podobny, jak opisywaîem
to przy rozkazie ALIAS AmigaDOS-u. Ten ostatni rozkaz ma jednak
doôê ograniczone moûliwoôci, podczas gdy napisany przez
uûytkownika skrypt, w poîâczeniu z umiejëtnie przekazanymi doï
parametrami, moûe mieê moûliwoôci wprost nieograniczone.
Nie bëdë sië tutaj zagîëbiaî w techniki pisania skryptów, nikt
bowiem, kto umie naciskaê klawisze i wie, o co mu chodzi (na
przykîad po doksztaîceniu sië z cyklu "System na talerzu"), nie
powinien mieê z napisaniem takiego skryptu problemów, chyba ûe...
w grë wejdâ, bëdâce tematem tego artykuîu, operatory skryptowe.
<sr>Teoria
<txt> Jak juû zaznaczyîem na poczâtku, operatory takie sîuûâ do
przekazywania parametrów do skryptu. Po co to komu i z czym to
sië je?
Czasem zachodzi potrzeba zmiany sposobu dziaîania skryptów przez
wprowadzenie parametrów. Ale jak to zrobiê? Poza rozkazem ASK,
gdzie moûna wprowadziê odpowiedú typu Y (tak) lub N (nie),
AmigaDOS nie ma rozkazów typu "input". I wîaônie w tym celu
wymyôlono operatory skryptowe. Parametr podany przy wywoîaniu
rozkazu spod Shella lub CLI zostanie za ich pomocâ przekazany w
to miejsce w skrypcie, gdzie wystâpi odpowiedni operator skryptu.
Skrypt zostanie uruchomiony z odpowiedniâ wartoôciâ parametru.
Jak to sië dzieje?
W skrypcie (po odpowiednim operatorze skryptowym) wystëpujâ nazwy
zmiennych, czyli îaïcuchy zîoûone z liter i cyfr, zaczynajâcych
sië zawsze od litery. AmigaDOS tworzy w katalogu tymczasowym T:
zbiór (na przykîad o nazwie T:Command-00-01). Za pomocâ tego
tymczasowego skryptu (który uûytkownika wîaôciwie nie powinien
obchodziê) AmigaDOS zarzâdza zmiennymi.
UWAGA: Jest bardzo waûne, aby, jeôli zmienne majâ nastëpnie
wystëpowaê w rozkazie ECHO, umieszczaê je w nawiasach
trójkâtnych, na przykîad:
--------****** PROSZË TU UWAÛAÊ NA TAGI (NIESTETY JUÛ DO SAMEGO
KOÏCA !!!! *******--------
<l>ECHO "Dzien dobry <imie>"
<txt> Operatory skryptowe majâ jeszcze jedno znaczenie. Jak juû
zapewne wiecie (z samego poczâtku kursu AmigaDOS), istniejâ pewne
znaki, które sâ "ôwiëtymi krowami", i nie wolno ich uûywaê, bo
AmigaDOS rezerwuje je sobie do jakichô swoich niecnych celów.
Podobnie jak w wypadku ludzi, nie ma jednak znaków
"niezastâpionych". Jeôli z jakichkolwiek przyczyn "musicie" uûyê
w tekôcie programu jednego z nastëpujâcych znaków: "$" (znak
dolara), "." (kropka), ">" (wiëksze niû), czy "<" (mniejsze niû),
wówczas z pomocâ takûe przyjdâ odpowiednie operatory skryptowe.
Skoro juû wiemy z grubsza, co to takiego, czas na przedstawienie
bohaterów naszego dzisiejszego spektaklu. Oto oni (w porzâdku
alfabetycznym):
.BRA -- pozwala na zastâpienie znaku "<" (mniejsze niû),
oznaczajâcego otwarcie nawiasu trójkâtnego, ale i redyrekcjë
rozkazu w AmigaDOS. Aby zatem uniknâê kolizji, skrypty,
zawierajâce jakâkolwiek redyrekcjë, muszâ zawieraê teû ten
operator.
.DEF -- pozwala na przekazanie do skryptu definicji, czyli
îaïcucha alfanumerycznego.
.DOLLAR -- pozwala na zastâpienie znaku "$".
.DOT -- pozwala na zastâpienie znaku ".".
.KET -- pozwala na zastâpienie znaku ">" (wiëksze niû). Wszystkie
uwagi, podane przy operatorze .BRA, takûe i tu majâ zastosowanie.
.KEY -- jest to chyba najwaûniejszy z operatorów skryptowych.
Umoûliwia on przekazanie do skryptu parametru, którego nazwa
znajdzie sië po tym operatorze. Operator .KEY powinien zatem
zawsze wystëpowaê na poczâtku skryptu, do którego chcemy takie
parametry przekazywaê. Dopuszcza sië stosowanie nie tylko
pojedynczego, ale takûe dwóch lub wiëcej przekazywanych w ten
sposób parametrów. W tym drugim wypadku parametry powinny byê
oddzielone spacjami w rozkazie wywoîujâcym:
<l>EXECUTE TEST Poniedzialek Wtorek Sroda Czwartek Piatek
<txt>natomiast odpowiadajâce im zmienne w "przekazujâcym" operatorze
skryptowym muszâ byê oddzielone przecinkami:
<l>.KEY n1,n2,n3,n4,n5
<txt>UWAGA: Zmienne przy .KEY nie przenoszâ wartoôci cyfrowych do
rozkazu EVAL.
Skoro juû napompowaîem Was teoriâ, zobaczmy, jak to wszystko
bëdzie wyglâdaîo na ekranie komputera.
<sr>Praktyka
<txt>* Przykîad skryptu z operatorem .KEY
Wpiszmy za pomocâ dowolnego edytora nastëpujâcy tekst (naleûy
przy tym pamiëtaê, aby rozkaz z operatorem .KEY znalazî sië w
pierwszym wierszu skryptu. Nie naleûy takûe zapominaê o
poprzedzajâcej go kropce i pilnowaê, aby nie byîo spacji pomiëdzy
kropkâ a nazwâ operatora.)
<l>.KEY n1,n2,n3
ECHO "Czesc <n1>"
ECHO "Czesc <n2>"
ECHO "Czesc <n3>"
ECHO "Witajcie wszyscy troje"
<txt> Zapiszmy taki skrypt pod nazwâ "df0:test". Przypuôêmy, ûe
odwiedziîa nas trójka znajomych. Moûemy teraz uruchomiê nasz
skrypt, wpisujâc z CLI lub Shella (a jeôli mamy jeden z nowszych
systemów operacyjnych, nawet opcjâ WORKBENCH/EXECUTE COMMAND z
gîównego menu Workbencha):
<l>EXECUTE df0:test Bartek Marcin Adam
<txt>Jeôli nasi kumple majâ inne imiona, to oczywiôcie wystarczy
zmieniê parametry podczas wywoîywania. Taki pokaz robi wraûenie,
zwîaszcza wówczas, jeôli nasi kumple sâ kloniarzami. Aby ich
doszczëtnie zaîamaê i zabezpieczyê sië przed posâdzeniem o
oszustwo, wystarczy uruchomiê go jeszcze raz z dowolnymi trzema
podanymi przez nich imionami.
No dobrze, ale co zrobiê, jeôli mamy juû gotowy powyûszy skrypt,
a (powiedzmy) Adam zachorowaî, i odwiedzili nas tylko pierwsi
dwaj? Skrypt zostanie takûe wykonany, a w miejscu trzeciego
imienia zostanie wypisane samo sîowo "czeôê". Nie zawsze jest to
wygodne. Istnieje jednak sposób na poradzenie sobie w takich
wypadkach.
Wystarczy dokonaê niewielkiej zmiany w skrypcie (a dokîadniej w
wierszach ze zmiennymi) na:
<l>
ECHO "Czesc <n1$Marek>"
ECHO "Czesc <n2$Marek>"
ECHO "Czesc <n3$Marek>"
<txt>gdzie w miejscu sîowa "Marek" wpiszemy wîasne imië. Zapiszmy
tak poprawiony skrypt w miejsce poprzedniego. Teraz moûemy juû
uruchomiê skrypt nawet wtedy, gdy odwiedzi nas dwóch kolegów.
Trzecim przywitanym bëdzie autor skryptu.
Jeôli natomiast bëdziemy usiîowali przy wywoîaniu takiego skryptu
przekazaê wiëcej parametrów niû wynosi liczba zmiennych przy
parametrze .KEY, wówczas po wywoîaniu takiego skryptu pojawi sië
na ekranie komunikat:
<l>Parameters unsuitable for key >nazwa klucza<
Wrong number of arguments
Execute failed returncode 10
<txt>i nasz skrypt nie zostanie wykonany.
Parametr .KEY dopuszcza stosowanie przeîâczników umieszczonych we
wzorcach rozkazów AmigaDOS, niestety, nie wszystkich. Dopuszczalne sâ
nastëpujâce przeîâczniki:
/A -- argument konieczny
/F -- argument ostatni
/K -- argument opcjonalny
/S -- przeîâcznik
Moûemy to wykorzystaê na przykîad w naszym skrypcie, ograniczajâc
liczbë parametrów, moûemy takûe w razie potrzeby stosowaê nazwy
zmiennych, zamieszczane we wzorcach rozkazów AmigaDOS.
* Przykîad skryptu z operatorem .BRA i .KET zostaî podany przy
opisie rozkazu DPAT AmigaDOS w nr. 1/95 Magazynu AMIGA (i wywoîaî
burzë w szklance wody).
* Przykîad skryptu z operatorem .DEF
<l>.KEY kom
.DEF kom = "nic tutaj nie ma"
ECHO "Komunikat mowi ze <kom>"
<txt>Jeôli zapiszemy taki skrypt na dysku i uruchomimy go przez:
<l>execute df0:test
<txt>to otrzymamy oczywiôcie na ekranie wydruk:
<l>Komunikat mowi ze nic tutaj nie ma
<txt>Spróbujmy jednak uruchomiê skrypt z parametrem:
<l>execute df0:test pecety to dno!
<txt> To, co pojawi sië na ekranie, pozostawiam Waszej
domyôlnoôci. UWAGA: Nazwa zmiennej (lub zmiennych) definiowanych
przez .DEF musi znaleúê sië najpierw przy operatorze .KEY.
* Przykîad skryptu z operatorem .DOLLAR
Zmienna $ jest uûywana przez system operacyjny do okreôlania
zmiennych ôrodowiskowych (skorzystaliômy z tego przy poprawianiu
"skryptu powitalnego"). Na marginesie: tu juû nie zmieszczë
odpowiedniego opisu, ale wydaje mi sië, ûe i zmienne ôrodowiskowe
powinny doczekaê sië takiego "suplementu". Wróêmy jednak do
naszych baranów. Operator .DOLLAR pozwala nam zamieniê taki znak
na jakikolwiek inny. Poprawmy nasz skrypt z przywitaniem na:
<l>.KEY n1,n2,n3
.DOLLAR !
ECHO "Czesc <n1!Marek>"
ECHO "Czesc <n2!Marek>"
ECHO "Czesc <n3!Marek>"
ECHO "Witajcie wszyscy troje"
<txt> Moûe akurat w tym wypadku wyglâda to niezbyt ciekawie, ale
w wielu sytuacjach bardzo sië przydaje.
W podobny sposób zamieniamy kropkë, wykorzystujâc operator .DOT,
jednak sâ to zdecydowanie rzadsze przypadki (pewnie, kaûdy woli
mieê bardziej do czynienia z dolarami niû znaleúê sië w kropce).
* Multitasking
Korzystanie z operatorów skryptowych pozwoli Wam teû na nieco
peîniejsze wykorzystanie wielozadaniowoôci Amigi (choêby tylko po
to, aby zaîamaê znajomych kloniarzy). Podczas tworzenia takich
skryptów naleûy pamiëtaê o tym, ûe wprawdzie da sië uruchomiê
kilka skryptów równolegle, jednak przy zachowaniu pewnych zasad.
Przede wszystkim naleûy przestrzegaê reguîy, by w takich
"multitaskingowych" skryptach nie powtarzaîy sië takie same nazwy
zmiennych. To nie wszystko. Wiemy, ûe podczas wykonywania
takiego skryptu w katalogu T: tworzony jest zbiór tymczasowy.
Jeôli uruchomimy inny skrypt, to utworzy on zbiór w tym samym
katalogu, który moûe mieê identycznâ nazwë. Oczywiôcie spowoduje
to wykasowanie poprzedniego zbioru, który nie jest zabezpieczany
przed zamazywaniem. Moûna temu zapobiec wîaônie przez
wykorzystanie operatorów skryptowych. Przypuôêmy, ûe napisaliômy
skrypt do sortowania katalogu i wyôwietlania go na ekranie, jak
poniûej:
<l>.Key PATH/A, PATTERN/K
ECHO "SORTOWANIE"
LIST "<PATH> TO RAM:TEST<$$> SUB=<PATTERN|#?>
SORT RAM:TEST<$$> TO RAM:OK<$$>
TYPE RAM:OK<$$>
DELETE RAM:(TEST<$$>|OK<$$>) QUIET
WAIT 5 SECS
<txt> Jeôli teraz zapiszemy taki skrypt i bëdziemy go uruchamiaê
równolegle w róûnych zadaniach, wówczas zbiory tymczasowe Test i
OK bëdâ miaîy nadane przez zmiennâ ôrodowiskowâ $$ numery zadaï
(na przykîad 1, 2, 3 itd.) i nie nastâpi kolizja. Oczywiôcie, aby
uruchomiê taki skrypt, musimy podaê mu parametr okreôlajâcy nazwë
katalogu ze ôcieûkâ dostëpu (uûyty przeîâcznik /A spowoduje, ûe
przy braku tego parametru zamiast listy posortowanych zbiorów
otrzymamy komunikat o bîëdzie). Parametr wzorca jest opcjonalny,
jeôli go nie podamy przy wywoîywaniu skryptu, wówczas zostanie
wyôwietlony ustawiony domyôlnie caîy katalog.
<sr>Na zakoïczenie
<txt> Podczas tworzenia skryptów AmigaDOS z operatorami (lub bez
nich) naleûy jeszcze pamiëtaê o kilku sprawach:
* skrypty przewaûnie zapisuje sië w katalogu S:, choê nie jest to
konieczne;
* aby uruchomiê taki skrypt moûna uûyê rozkazu
<L> execute >nazwa skryptu<
<txt>samo bowiem wpisanie nazwy skryptu i naciôniëcie klawisza
[Return] spowoduje komunikat "file is not executable" i w
rezultacie nasz skrypt niczego nie zrobi. Istnieje jednak pewien
sposób na ominiëcie tej niedogodnoôci, wygodnej zwîaszcza
dlatego, ûe skorzystanie z rozkazu EXECUTE nie zawsze jest
moûliwe czy poûâdane w danej sytuacji.
Aby umoûliwiê bezpoôrednie wywoîanie skryptu przez podanie jego
nazwy, wystarczy (po zapisaniu go na dysku) ustawiê mu bit
protekcji S. Moûna to zrobiê z poziomu AmigaDOS przez:
<l>protect S:>nazwa skryptu< +S
<txt>lub wykorzystujâc odpowiedniâ opcjë w jednym z programów do
zarzâdzania danymi (FileMaster, DiskMaster itp.). UWAGA: Jeôli w
takim skrypcie dokonasz jakiejkolwiek poprawki, wówczas bit
protekcji S zostanie przy powtórnym zapisie automatycznie
wyîâczony. Naleûy zatem ustawiê go ponownie.
A tak na marginesie: jeôli czegoô nie rozumiecie z kursu o
AmigaDOS, piszcie do mnie (pod adresem redakcji). Postaram sië
Wam rozjaôniê wszystkie, niezbyt precyzyjnie opisane, sprawy.