home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 03 / ami025.txt < prev    next >
Text File  |  1997-04-06  |  13KB  |  355 lines

  1. Suplement do Amiga DOS
  2. ----------------------
  3.  
  4. NÓÛ I WIDELEC
  5.  
  6. <lead>Kilku Czytelników poinformowaîo mnie, ûe nie podobaî im sië
  7. przykîad (uûyty w jakimô odcinku cyklu o Amiga DOS), uûywajâcy
  8. operatorów .key czy .bra, gdyû nie rozumiejâ, o co tutaj chodzi.
  9. Faktycznie, nie wyjaôniaîem znaczenia .key, .bra i .ket, chcâc to
  10. zrobiê dopiero po opisie rozkazów. Jednak skoro taka jest wola
  11. ludu -- zrobië to juû teraz, rozumiejâc rozterki duchowe tych
  12. wszystkich, którzy nie lubiâ przepisywaê zaîâczonych przykîadów
  13. bezrozumnie, jak maîpy. Rzeczywiôcie -- trudno jeôê z DOSowego
  14. talerza bez korzystania z noûa i widelca. A zatem, kowboje do
  15. dzieîa!
  16.  
  17. <a>Marek Pampuch
  18.  
  19. <txt> Oba wspomniane "niezrozumiaîki" nie sâ w zasadzie rozkazami
  20. AmigaDOS, lecz naleûâ do grupy tzw. operatorów skryptu.
  21. Operatory, nie wystëpujâce w jëzykach programowania, a takûe w
  22. innych niû AmigaDOS systemach operacyjnych, zostaîy wymyôlone po
  23. to, aby umoûliwiê przekazywanie parametrów do skryptu. Aby znów
  24. nie byîo "stawania na gîowie", przed opisem samych operatorów
  25. naleûy najpierw wyjaôniê pojëcie skryptu AmigaDOS.
  26.  
  27. Skrypt jest zbiorem tekstowym, skîadajâcym sië z rozkazów
  28. AmigaDOS. Moûna go stworzyê za pomocâ dowolnego edytora (na
  29. przykîad systemowego ED). Skrypt pozwala na wykonanie okreôlonej
  30. przez uûytkownika sekwencji operacji, nie wszystkie bowiem
  31. rozkazy AmigaDOS mogâ byê wprowadzane "z rëki" w CLI lub Shellu.
  32. Bardziej zaawansowani programiôci mogâ posîuûyê sië nawet
  33. skryptami w celu opracowania nowych, wîasnych, rozkazów AmigaDOS,
  34. celem uîatwienia sobie dalszej pracy.
  35.  
  36. Zaletâ skryptu jest to, ûe moûna zmieniaê jego dziaîania
  37. wprowadzajâc mu inne parametry, w sposób podobny, jak opisywaîem
  38. to przy rozkazie ALIAS AmigaDOS-u. Ten ostatni rozkaz ma jednak
  39. doôê ograniczone moûliwoôci, podczas gdy napisany przez
  40. uûytkownika skrypt, w poîâczeniu z umiejëtnie przekazanymi doï
  41. parametrami, moûe mieê moûliwoôci wprost nieograniczone.
  42.  
  43. Nie bëdë sië tutaj zagîëbiaî w techniki pisania skryptów, nikt
  44. bowiem, kto umie naciskaê klawisze i wie, o co mu chodzi (na
  45. przykîad po doksztaîceniu sië z cyklu "System na talerzu"), nie
  46. powinien mieê z napisaniem takiego skryptu problemów, chyba ûe...
  47. w grë wejdâ, bëdâce tematem tego artykuîu, operatory skryptowe.
  48.  
  49. <sr>Teoria
  50.  
  51. <txt> Jak juû zaznaczyîem na poczâtku, operatory takie sîuûâ do
  52. przekazywania parametrów do skryptu. Po co to komu i z czym to
  53. sië je?
  54.  
  55. Czasem zachodzi potrzeba zmiany sposobu dziaîania skryptów przez
  56. wprowadzenie parametrów. Ale jak to zrobiê? Poza rozkazem ASK,
  57. gdzie moûna wprowadziê odpowiedú typu Y (tak) lub N (nie),
  58. AmigaDOS nie ma rozkazów typu "input". I wîaônie w tym celu
  59. wymyôlono operatory skryptowe. Parametr podany przy wywoîaniu
  60. rozkazu spod Shella lub CLI zostanie za ich pomocâ przekazany w
  61. to miejsce w skrypcie, gdzie wystâpi odpowiedni operator skryptu.
  62. Skrypt zostanie uruchomiony z odpowiedniâ wartoôciâ parametru.
  63.  
  64. Jak to sië dzieje? 
  65.  
  66. W skrypcie (po odpowiednim operatorze skryptowym) wystëpujâ nazwy
  67. zmiennych, czyli îaïcuchy zîoûone z liter i cyfr, zaczynajâcych
  68. sië zawsze od litery. AmigaDOS tworzy w katalogu tymczasowym T:
  69. zbiór (na przykîad o nazwie T:Command-00-01). Za pomocâ tego
  70. tymczasowego skryptu (który uûytkownika wîaôciwie nie powinien
  71. obchodziê) AmigaDOS zarzâdza zmiennymi.
  72.  
  73. UWAGA: Jest bardzo waûne, aby, jeôli zmienne majâ nastëpnie
  74. wystëpowaê w rozkazie ECHO, umieszczaê je w nawiasach
  75. trójkâtnych, na przykîad:
  76.  
  77. --------****** PROSZË TU UWAÛAÊ NA TAGI (NIESTETY JUÛ DO SAMEGO
  78. KOÏCA !!!!  *******--------
  79.  
  80. <l>ECHO "Dzien dobry <imie>"
  81.  
  82. <txt> Operatory skryptowe majâ jeszcze jedno znaczenie. Jak juû
  83. zapewne wiecie (z samego poczâtku kursu AmigaDOS), istniejâ pewne
  84. znaki, które sâ "ôwiëtymi krowami", i nie wolno ich uûywaê, bo
  85. AmigaDOS rezerwuje je sobie do jakichô swoich niecnych celów.
  86. Podobnie jak w wypadku ludzi, nie ma jednak znaków
  87. "niezastâpionych". Jeôli z jakichkolwiek przyczyn "musicie" uûyê
  88. w tekôcie programu jednego z nastëpujâcych znaków: "$" (znak
  89. dolara), "." (kropka), ">" (wiëksze niû), czy "<" (mniejsze niû),
  90. wówczas z pomocâ takûe przyjdâ odpowiednie operatory skryptowe.
  91.  
  92. Skoro juû wiemy z grubsza, co to takiego, czas na przedstawienie
  93. bohaterów naszego dzisiejszego spektaklu. Oto oni (w porzâdku
  94. alfabetycznym):
  95.  
  96. .BRA  -- pozwala na zastâpienie znaku "<" (mniejsze niû),
  97. oznaczajâcego otwarcie nawiasu trójkâtnego, ale i redyrekcjë
  98. rozkazu w AmigaDOS. Aby zatem uniknâê kolizji, skrypty,
  99. zawierajâce jakâkolwiek redyrekcjë, muszâ zawieraê teû ten
  100. operator.
  101.  
  102. .DEF -- pozwala na przekazanie do skryptu definicji, czyli
  103. îaïcucha alfanumerycznego.
  104.  
  105. .DOLLAR -- pozwala na zastâpienie znaku "$".
  106.  
  107. .DOT -- pozwala na zastâpienie znaku ".".
  108.  
  109. .KET -- pozwala na zastâpienie znaku ">" (wiëksze niû). Wszystkie
  110. uwagi, podane przy operatorze .BRA, takûe i tu majâ zastosowanie.
  111.  
  112. .KEY -- jest to chyba najwaûniejszy z operatorów skryptowych.
  113. Umoûliwia on przekazanie do skryptu parametru, którego nazwa
  114. znajdzie sië po tym operatorze. Operator .KEY powinien zatem
  115. zawsze wystëpowaê na poczâtku skryptu, do którego chcemy takie
  116. parametry przekazywaê.  Dopuszcza sië stosowanie nie tylko
  117. pojedynczego, ale takûe dwóch lub wiëcej przekazywanych w ten
  118. sposób parametrów. W tym drugim wypadku parametry powinny byê
  119. oddzielone spacjami w rozkazie wywoîujâcym:
  120.  
  121. <l>EXECUTE TEST Poniedzialek Wtorek Sroda Czwartek Piatek 
  122.  
  123. <txt>natomiast odpowiadajâce im zmienne w "przekazujâcym" operatorze 
  124. skryptowym muszâ byê oddzielone przecinkami:
  125.  
  126. <l>.KEY n1,n2,n3,n4,n5
  127.  
  128. <txt>UWAGA: Zmienne przy .KEY nie przenoszâ wartoôci cyfrowych do
  129. rozkazu EVAL.
  130.  
  131. Skoro juû napompowaîem Was teoriâ, zobaczmy, jak to wszystko
  132. bëdzie wyglâdaîo na ekranie komputera.
  133.  
  134. <sr>Praktyka
  135.  
  136. <txt>* Przykîad skryptu z operatorem .KEY
  137.  
  138. Wpiszmy za pomocâ dowolnego edytora nastëpujâcy tekst (naleûy
  139. przy tym pamiëtaê, aby rozkaz z operatorem .KEY znalazî sië w
  140. pierwszym wierszu skryptu. Nie naleûy takûe zapominaê o
  141. poprzedzajâcej go kropce i pilnowaê, aby nie byîo spacji pomiëdzy
  142. kropkâ a nazwâ operatora.)
  143.  
  144. <l>.KEY n1,n2,n3
  145.  
  146. ECHO "Czesc <n1>"
  147.  
  148. ECHO "Czesc <n2>"
  149.  
  150. ECHO "Czesc <n3>"
  151.  
  152. ECHO "Witajcie wszyscy troje"
  153.  
  154. <txt> Zapiszmy taki skrypt pod nazwâ "df0:test". Przypuôêmy, ûe
  155. odwiedziîa nas trójka znajomych. Moûemy teraz uruchomiê nasz
  156. skrypt, wpisujâc z CLI lub Shella (a jeôli mamy jeden z nowszych
  157. systemów operacyjnych, nawet opcjâ WORKBENCH/EXECUTE COMMAND z
  158. gîównego menu Workbencha):
  159.  
  160. <l>EXECUTE df0:test Bartek Marcin Adam
  161.  
  162. <txt>Jeôli nasi kumple majâ inne imiona, to oczywiôcie wystarczy
  163. zmieniê parametry podczas wywoîywania. Taki pokaz robi wraûenie,
  164. zwîaszcza wówczas, jeôli nasi kumple sâ kloniarzami. Aby ich
  165. doszczëtnie zaîamaê i zabezpieczyê sië przed posâdzeniem o
  166. oszustwo, wystarczy uruchomiê go jeszcze raz z dowolnymi trzema
  167. podanymi przez nich imionami.
  168.  
  169. No dobrze, ale co zrobiê, jeôli mamy juû gotowy powyûszy skrypt,
  170. a (powiedzmy) Adam zachorowaî, i odwiedzili nas tylko pierwsi
  171. dwaj?  Skrypt zostanie takûe wykonany, a w miejscu trzeciego
  172. imienia zostanie wypisane samo sîowo "czeôê". Nie zawsze jest to
  173. wygodne. Istnieje jednak sposób na poradzenie sobie w takich
  174. wypadkach.
  175.  
  176. Wystarczy dokonaê niewielkiej zmiany w skrypcie (a dokîadniej w 
  177. wierszach ze zmiennymi) na:
  178.  
  179. <l>
  180. ECHO "Czesc <n1$Marek>"
  181.  
  182. ECHO "Czesc <n2$Marek>"
  183.  
  184. ECHO "Czesc <n3$Marek>"
  185.  
  186. <txt>gdzie w miejscu sîowa "Marek" wpiszemy wîasne imië. Zapiszmy
  187. tak poprawiony skrypt w miejsce poprzedniego. Teraz moûemy juû
  188. uruchomiê skrypt nawet wtedy, gdy odwiedzi nas dwóch kolegów.
  189. Trzecim przywitanym bëdzie autor skryptu.
  190.  
  191. Jeôli natomiast bëdziemy usiîowali przy wywoîaniu takiego skryptu
  192. przekazaê wiëcej parametrów niû wynosi liczba zmiennych przy
  193. parametrze .KEY, wówczas po wywoîaniu takiego skryptu pojawi sië
  194. na ekranie komunikat:
  195.  
  196. <l>Parameters unsuitable for key >nazwa klucza<
  197.  
  198. Wrong number of arguments
  199.  
  200. Execute failed returncode 10
  201.  
  202. <txt>i nasz skrypt nie zostanie wykonany.
  203.  
  204. Parametr .KEY dopuszcza stosowanie przeîâczników umieszczonych we 
  205. wzorcach rozkazów AmigaDOS, niestety, nie wszystkich. Dopuszczalne sâ 
  206. nastëpujâce przeîâczniki:
  207.  
  208. /A -- argument konieczny
  209.  
  210. /F -- argument ostatni
  211.  
  212. /K -- argument opcjonalny
  213.  
  214. /S -- przeîâcznik
  215.  
  216. Moûemy to wykorzystaê na przykîad w naszym skrypcie, ograniczajâc
  217. liczbë parametrów, moûemy takûe w razie potrzeby stosowaê nazwy
  218. zmiennych, zamieszczane we wzorcach rozkazów AmigaDOS.
  219.  
  220. * Przykîad skryptu z operatorem .BRA i .KET zostaî podany przy
  221. opisie rozkazu DPAT AmigaDOS w nr. 1/95 Magazynu AMIGA (i wywoîaî
  222. burzë w szklance wody).
  223.  
  224. * Przykîad skryptu z operatorem .DEF
  225.  
  226. <l>.KEY kom
  227.  
  228. .DEF kom = "nic tutaj nie ma"
  229.  
  230. ECHO "Komunikat mowi ze <kom>"
  231.  
  232. <txt>Jeôli zapiszemy taki skrypt na dysku i uruchomimy go przez:
  233.  
  234. <l>execute df0:test
  235.  
  236. <txt>to otrzymamy oczywiôcie na ekranie wydruk:
  237.  
  238. <l>Komunikat mowi ze nic tutaj nie ma
  239.  
  240. <txt>Spróbujmy jednak uruchomiê skrypt z parametrem:
  241.  
  242. <l>execute df0:test pecety to dno!
  243.  
  244. <txt> To, co pojawi sië na ekranie, pozostawiam Waszej
  245. domyôlnoôci.  UWAGA: Nazwa zmiennej (lub zmiennych) definiowanych
  246. przez .DEF musi znaleúê sië najpierw przy operatorze .KEY.
  247.  
  248. * Przykîad skryptu z operatorem .DOLLAR
  249.  
  250. Zmienna $ jest uûywana przez system operacyjny do okreôlania
  251. zmiennych ôrodowiskowych (skorzystaliômy z tego przy poprawianiu
  252. "skryptu powitalnego"). Na marginesie: tu juû nie zmieszczë
  253. odpowiedniego opisu, ale wydaje mi sië, ûe i zmienne ôrodowiskowe
  254. powinny doczekaê sië takiego "suplementu". Wróêmy jednak do
  255. naszych baranów. Operator .DOLLAR pozwala nam zamieniê taki znak
  256. na jakikolwiek inny. Poprawmy nasz skrypt z przywitaniem na:
  257.  
  258. <l>.KEY n1,n2,n3
  259.  
  260. .DOLLAR !
  261.  
  262. ECHO "Czesc <n1!Marek>"
  263.  
  264. ECHO "Czesc <n2!Marek>"
  265.  
  266. ECHO "Czesc <n3!Marek>"
  267.  
  268. ECHO "Witajcie wszyscy troje"
  269.  
  270. <txt> Moûe akurat w tym wypadku wyglâda to niezbyt ciekawie, ale
  271. w wielu sytuacjach bardzo sië przydaje.
  272.  
  273. W podobny sposób zamieniamy kropkë, wykorzystujâc operator .DOT,
  274. jednak sâ to zdecydowanie rzadsze przypadki (pewnie, kaûdy woli
  275. mieê bardziej do czynienia z dolarami niû znaleúê sië w kropce).
  276.  
  277. * Multitasking
  278.  
  279. Korzystanie z operatorów skryptowych pozwoli Wam teû na nieco
  280. peîniejsze wykorzystanie wielozadaniowoôci Amigi (choêby tylko po
  281. to, aby zaîamaê znajomych kloniarzy). Podczas tworzenia takich
  282. skryptów naleûy pamiëtaê o tym, ûe wprawdzie da sië uruchomiê
  283. kilka skryptów równolegle, jednak przy zachowaniu pewnych zasad.
  284. Przede wszystkim naleûy przestrzegaê reguîy, by w takich
  285. "multitaskingowych" skryptach nie powtarzaîy sië takie same nazwy
  286. zmiennych. To nie wszystko.  Wiemy, ûe podczas wykonywania
  287. takiego skryptu w katalogu T: tworzony jest zbiór tymczasowy.
  288. Jeôli uruchomimy inny skrypt, to utworzy on zbiór w tym samym
  289. katalogu, który moûe mieê identycznâ nazwë.  Oczywiôcie spowoduje
  290. to wykasowanie poprzedniego zbioru, który nie jest zabezpieczany
  291. przed zamazywaniem. Moûna temu zapobiec wîaônie przez
  292. wykorzystanie operatorów skryptowych. Przypuôêmy, ûe napisaliômy
  293. skrypt do sortowania katalogu i wyôwietlania go na ekranie, jak
  294. poniûej:
  295.  
  296. <l>.Key PATH/A, PATTERN/K
  297.  
  298. ECHO "SORTOWANIE"
  299.  
  300. LIST "<PATH> TO RAM:TEST<$$> SUB=<PATTERN|#?>
  301.  
  302. SORT RAM:TEST<$$> TO RAM:OK<$$>
  303.  
  304. TYPE RAM:OK<$$>
  305.  
  306. DELETE RAM:(TEST<$$>|OK<$$>) QUIET
  307.  
  308. WAIT 5 SECS
  309.  
  310. <txt> Jeôli teraz zapiszemy taki skrypt i bëdziemy go uruchamiaê
  311. równolegle w róûnych zadaniach, wówczas zbiory tymczasowe Test i
  312. OK bëdâ miaîy nadane przez zmiennâ ôrodowiskowâ $$ numery zadaï
  313. (na przykîad 1, 2, 3 itd.) i nie nastâpi kolizja. Oczywiôcie, aby
  314. uruchomiê taki skrypt, musimy podaê mu parametr okreôlajâcy nazwë
  315. katalogu ze ôcieûkâ dostëpu (uûyty przeîâcznik /A spowoduje, ûe
  316. przy braku tego parametru zamiast listy posortowanych zbiorów
  317. otrzymamy komunikat o bîëdzie). Parametr wzorca jest opcjonalny,
  318. jeôli go nie podamy przy wywoîywaniu skryptu, wówczas zostanie
  319. wyôwietlony ustawiony domyôlnie caîy katalog.
  320.  
  321. <sr>Na zakoïczenie
  322.  
  323. <txt> Podczas tworzenia skryptów AmigaDOS z operatorami (lub bez
  324. nich) naleûy jeszcze pamiëtaê o kilku sprawach:
  325.  
  326. * skrypty przewaûnie zapisuje sië w katalogu S:, choê nie jest to 
  327. konieczne;
  328.  
  329. * aby uruchomiê taki skrypt moûna uûyê rozkazu 
  330.  
  331. <L> execute >nazwa skryptu<
  332.  
  333. <txt>samo bowiem wpisanie nazwy skryptu i naciôniëcie klawisza
  334. [Return] spowoduje komunikat "file is not executable" i w
  335. rezultacie nasz skrypt niczego nie zrobi. Istnieje jednak pewien
  336. sposób na ominiëcie tej niedogodnoôci, wygodnej zwîaszcza
  337. dlatego, ûe skorzystanie z rozkazu EXECUTE nie zawsze jest
  338. moûliwe czy poûâdane w danej sytuacji.
  339.  
  340. Aby umoûliwiê bezpoôrednie wywoîanie skryptu przez podanie jego
  341. nazwy, wystarczy (po zapisaniu go na dysku) ustawiê mu bit
  342. protekcji S. Moûna to zrobiê z poziomu AmigaDOS przez:
  343.  
  344. <l>protect S:>nazwa skryptu< +S
  345.  
  346. <txt>lub wykorzystujâc odpowiedniâ opcjë w jednym z programów do
  347. zarzâdzania danymi (FileMaster, DiskMaster itp.). UWAGA: Jeôli w
  348. takim skrypcie dokonasz jakiejkolwiek poprawki, wówczas bit
  349. protekcji S zostanie przy powtórnym zapisie automatycznie
  350. wyîâczony. Naleûy zatem ustawiê go ponownie.
  351.  
  352. A tak na marginesie: jeôli czegoô nie rozumiecie z kursu o
  353. AmigaDOS, piszcie do mnie (pod adresem redakcji). Postaram sië
  354. Wam rozjaôniê wszystkie, niezbyt precyzyjnie opisane, sprawy.
  355.