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

  1. System na talerzu (cz. 16.)
  2. ---------------------------
  3.  
  4. AMIGA DOS
  5.  
  6. <a>Marek Pampuch
  7.  
  8. <sr>ENDSHELL (zakoïcz Shell)
  9.  
  10. <l>skîadnia dla systemów 1.3,2.0, 2.1, 3.0 i 3.1: ENDSHELL
  11.  
  12. W systemie 1.2 rozkaz ten nie wystëpuje
  13.  
  14. <txt> Rozkaz ten powoduje zakoïczenie aktualnego procesu Shella (lub 
  15. CLI) i zamyka jego okno. Przy okazji czyôci ômieci z pamiëci, a robi 
  16. to zdecydowanie lepiej niû jego poprzednik EndCLI, a zatem jeôli 
  17. tylko Wasz system operacyjny dopuszcza ten rozkaz, powinno sië go 
  18. stosowaê zamiast EndCLI.
  19.  
  20. Jeôli w momencie wprowadzenia rozkazu byîy wykonywane jakieô inne
  21. rozkazy w zamykanym Shellu, zwîaszcza uruchomione ze skryptu za
  22. pomocâ RUN, oraz korzystajâce z odwoîaï do EXEC -- rozkaz
  23. EndShell zakoïczy dziaîanie dopiero wówczas, gdy przestanâ
  24. dziaîaê tamte rozkazy. Nie naleûy sië zatem denerwowaê, jeôli
  25. okno nie zamknie sië od razu, co wprawdzie rzadko, ale sië
  26. zdarza.
  27.  
  28. <sr>ENDIF (zakoïcz IF)
  29.  
  30. <l>skîadnia dla wszystkich systemów: ENDIF
  31.  
  32. <txt> Rozkaz ten moûe byê uûywany tylko w skryptach. Koïczy pëtlë
  33. rozpoczëtâ przez IF. Przykîad:
  34.  
  35. <l>IF NOT WARN; jeôli kod bîëdu <>5
  36.  
  37. ECHO "cos tutaj nie gra"; wyswietl komunikat
  38.  
  39. ELSE ECHO "wszystko O.K"
  40.  
  41. ENDIF
  42.  
  43. <sr>ENDSKIP (zakoïcz SKIP)
  44.  
  45. <l>skîadnia dla systemów 1.3, 2.0, 2.1, 3.0 i 3.1: ENDSKIP
  46.  
  47. W systemie 1.2 rozkaz ten nie wystëpuje
  48.  
  49. <txt> Takûe i ten rozkaz moûe wystëpowaê wyîâcznie w skryptach.
  50. Pozwala na zakoïczenie bloku, do którego nastâpiî skok przez
  51. SKIP.  Wprawdzie skok taki najczëôciej wykonywany jest do
  52. etykiety (i wówczas rozkazu ENDSKIP nie potrzeba uûywaê),
  53. niemniej nieraz po skoku musi byê wykonana caîa sekwencja
  54. czynnoôci. Rozkaz generuje ponadto kod zwrotny (returncode), co
  55. moûe sië przydaê do innych celów w pisanym skrypcie. Przykîad:
  56.  
  57. <l>SKIP exit
  58.  
  59. echo "1 *n"
  60.  
  61. ENDSKIP
  62.  
  63. echo "2 *n"
  64.  
  65. IF WARN
  66.  
  67. echo "3 *n"
  68.  
  69. LAB exit
  70.  
  71. echo "4 *n"
  72.  
  73. QUIT 5
  74.  
  75. ENDIF
  76.  
  77. <txt> Cyferki umieôciîem tu, abyôcie mogli lepiej zobaczyê
  78. przebieg programu. A jest na co popatrzeê. Mimo "wymuszonego" w
  79. pierwszym wierszu skoku do etykiety exit -- skok nastëpuje nie
  80. tam, a do najbliûszej po ENDSKIP instrukcji. Dodatkowo, poniewaû
  81. wszystko jest w porzâdku, nastëpuje kolejny skok do ENDIF i
  82. koïczy sië program. Wyrzuêmy teraz ze skryptu pierwszy wiersz i
  83. uruchommy go ponownie. Poniewaû nie ma SKIPA -- ENDSKIP zostanie
  84. zlekcewaûony, a poniewaû dalej wszystko jest OK -- program
  85. zakoïczy sië tak samo. Wprowadúmy nastëpnâ zmianë -- usuïmy
  86. rozkaz ENDSKIP. Jeôli dotâd nie zrozumieliôcie -- sorry, nie
  87. jestem w stanie lepiej tego wytîumaczyê. Poeksperymentujcie z tym
  88. skryptem, choê najpierw trzeba sië zastanowiê po co? ENDSKIP jest
  89. bowiem chyba najrzadziej uûywanym rozkazem AmigaDOS-u. Ja sam
  90. uûyîem go dotâd dwa razy (raz przy pisaniu ksiâûki "Moja Amiga",
  91. drugi raz -- teraz).
  92.  
  93. <sr>EURO36 (tryb wyôwietlania)
  94.  
  95. <l>skîadnia dla systemów 2.1, 3.0 i 3.1: EURO36
  96.  
  97. W pozostaîych systemach rozkaz ten nie wystëpuje.
  98.  
  99. <txt> Parametry rozkazu, i ich znaczenie, sâ takie same jak dla
  100. rozkazu ADDMONITOR (patrz Magazyn AMIGA nr 3/94).
  101.  
  102. Pozwala na regulacjë wyôwietlania monitora pracujâcego w trybie
  103. EURO 36. Monitor umoûliwiajâcy pracë w trybie EURO36 powinien
  104. mieê odchylanie poziome 15,76 kHz, a pionowe 73 Hz. Tryb ten
  105. pozwala na wyôwietlanie obrazków bez interlace'u z
  106. rozdzielczoôciâ do 1280 x 200 pikseli, a z nim -- 1280 x 400
  107. pikseli, jednak nie wspóîpracuje z genlockiem.
  108.  
  109. Poniûej wszystkie tryby dla trybu EURO 36.
  110.  
  111. <r>
  112. Dla Amig z ukîadami ECS:
  113.  
  114. rozdzielczoôê  maks. liczba kolorów
  115.  
  116. 640 x 200      16
  117.  
  118. 640 x 400      16
  119.  
  120. 640 x 200      32
  121.  
  122. 640 x 400      32
  123.  
  124. 1280 x 200      4
  125.  
  126. 1280 x 400      4
  127.  
  128.  
  129. Dla Amig z ukîadami AGA:
  130.  
  131. rozdzielczoôê  maks. liczba kolorów
  132.  
  133. 320 x 200      256
  134.  
  135. 320 x 400      256
  136.  
  137. 640 x 200      256
  138.  
  139. 640 x 400      256
  140.  
  141. 1280 x 200      256
  142.  
  143. 1280 x 400      256
  144.  
  145.  
  146. <sr>EURO72 (tryb wyôwietlania)
  147.  
  148. <l>skîadnia dla systemów 2.1, 3.0 i 3.1: EURO72
  149.  
  150. W pozostaîych systemach rozkaz ten nie wystëpuje.
  151.  
  152. <txt> Parametry rozkazu, i ich znaczenie, sâ takie same jak dla
  153. rozkazu ADDMONITOR (patrz Magazyn AMIGA nr 3/94).
  154.  
  155. Pozwala na regulacjë wyôwietlania monitora pracujâcego w trybie
  156. EURO 72. Monitor umoûliwiajâcy pracë w trybie EURO 72 powinien
  157. mieê odchylanie poziome 31,43 kHz, a pionowe 70 Hz (jak na
  158. przykîad monitory VGA). Tryb ten pozwala na wyôwietlanie obrazków
  159. bez interlace'u z rozdzielczoôciâ do 640 x 400 pikseli, a z nim
  160. -- 640 x 800 pikseli, jednak nie wspóîpracuje z genlockiem.
  161.  
  162. Poniûej wszystkie tryby dla trybu EURO 72:
  163.  
  164. <r>
  165. Dla Amig z ukîadami ECS:
  166.  
  167. rozdzielczoôê  maks. liczba kolorów
  168.  
  169. 640 x 400      4
  170.  
  171. 640 x 800      4
  172.  
  173. Dla Amig z ukîadami AGA:
  174.  
  175. rozdzielczoôê  maks. liczba kolorów
  176.  
  177. 640 x 400      256
  178.  
  179. 640 x 800      256
  180.  
  181. <txt> Jeôli Twój monitor ma nieco inne wartoôci odchylania,
  182. naleûy zastosowaê do niego specjalny sterownik o nazwie
  183. "VGAOnly". Bëdziecie mogli wówczas stosowaê w trybie EURO 72
  184. monitory o odchylaniu od 29,32 kHz (poziomo) oraz od 69 Hz
  185. (pionowo).
  186.  
  187. <sr>EVAL (ocena)
  188.  
  189. <l>skîadnia dla systemu 1.3: >nn< >dzial< >mm< [TO >n1<] 
  190. [LFORMAT=>wzor<]
  191.  
  192. skîadnia dla systemów 2.0, 2.1 ,3.0 i 3.1: EVAL [VALUE1=] >nn< [OP=] >dzial< 
  193. [VALUE2=] >mm< [TO >n1<] [LFORMAT=>wzor<]
  194.  
  195. <txt> gdzie: nn i mm to wartoôci numeryczne, dzial -- dziaîanie
  196. matematyczne, n1 -- nazwa zbioru, w jakim chcemy zapisaê wynik, a
  197. wzor -- wzorzec, z jakim ma byê sformatowany wynik (patrz niûej).
  198.  
  199. <l>wzorzec dla systemu 1.3: VALUE1/A, OP, VALUE2/M, TO/K, LFORMAT/K
  200.  
  201. wzorzec dla systemów 2.0, 2.1 ,3.0 i 3.1: VALUE1/A, OP, VALUE2/M, TO/K, 
  202. LFORMAT/K
  203.  
  204. <txt>w systemie 1.2 rozkaz ten nie wystëpuje.
  205.  
  206. W duûym uproszczeniu moûna przyjâê, ûe EVAL jest kalkulatorem dla
  207. systemu AmigaDOS. System operacyjny nie posîuguje sië nim jednak
  208. w sposób, do jakiego wszyscy przywykliômy -- mogâ byê tu
  209. wykorzystywane zarówno zmienne "zwykîe" (odnoszâce sië do
  210. pojedynczego zadania, stâd nazywane czësto lokalnymi, jak numer
  211. zadania, kod wynikowy z IF lub WHY, czy teû zwyczajna wartoôê
  212. cyfrowa), jak i tak zwane zmienne ôrodowiskowe (odnoszâce sië do
  213. caîego systemu, stâd nazywane nieraz globalnymi, jak nazwa
  214. ôcieûki dostëpu, numer wersji Kickstartu czy Workbencha, lub teû
  215. zwykîa wartoôê liczbowa). UWAGA: Shell systemu 1.3 nie rozróûnia
  216. zmiennych lokalnych i globalnych -- wszystkie sâ dla niego
  217. "ôrodowiskowe", Stâd zresztâ wziëîa sië nazwa rozkazu,
  218. wprowadzonego w tej wîaônie wersji systemu.  EVAL bowiem równie
  219. dobrze moûe byê sîowem "ocena", jak i skrótem od
  220. E(nvironment)VA(riab)L(e). Co to jest takiego ta zmienna? O tym
  221. przeczytacie juû niedîugo w kolejnym suplemencie.
  222.  
  223.  
  224.  
  225. Na poczâtku zajmiemy sië wykorzystaniem takich zmiennych w
  226. opisywanym rozkazie EVAL. Jak juû wspomniaîem, jest to "systemowy
  227. kalkulator", ale nie caîkiem taki, do jakiego zdâûyliôcie sië
  228. przyzwyczaiê. Moûna takûe mieszaê w dziaîaniach wartoôci
  229. zmiennych lokalnych i globalnych. Wszystkie poniûsze przykîady sâ
  230. jak najzupeîniej poprawne z punktu widzenia systemu (z wyjâtkiem
  231. systemu 1.3 -- patrz dalej):
  232.  
  233. <l>SETENV x 4; tworzymy zmiennâ ôrodowiskowâ i nadajemy jej wartoôê 4
  234.  
  235. EVAL $x + 1 
  236.  
  237. <txt> Jeôli wpiszemy te rozkazy z rëki, to na ekranie pojawi sië
  238. cyfra 5. UWAGA: nie dotyczy to systemu 1.3, który wyôwietli na
  239. ekranie odpowiedú 0 (a dlaczego -- zaraz sië okaûe). Wynik
  240. dziaîania moûna takûe zapisaê do jakiegoô zbioru, na przykîad:
  241.  
  242. <l>EVAL $x + 1 TO ENV:iks
  243.  
  244. <txt>A teraz przykîad "mieszany". Wpiszmy z rëki kolejno:
  245.  
  246. <l>SET local 24; zmienne lokalne tworzymy nie za pomocâ SETENV, lecz 
  247. normalnego SET
  248.  
  249. SETENV global 45
  250.  
  251. EVAL $local + $global
  252.  
  253. <txt> Nieco bardziej skomplikowane jest to w systemie 1.3.
  254. Przykîad wpisany jak powyûej nie zadziaîa wîaôciwie. Po pierwsze
  255. rozkaz "set" jest dla WB 1.3 nie znany (naleûy tu uûyê takûe
  256. SETENV do tworzenia zmiennej globalnej), po drugie zaô w wyniku
  257. dziaîania EVAL znów otrzymamy...0. Dlaczego? Wynika to z
  258. niedopracowania rozkazu dla systemu 1.3. Aby zobaczyê poprawny
  259. wynik naszego prostego dziaîania na ekranie, trzeba skorzystaê z
  260. pomocy zbioru tymczasowego. W tym celu musimy wypisaê wielce
  261. skomplikowanâ formuîë:
  262.  
  263. <l>SETENV x 24
  264.  
  265. SETENV y 45
  266.  
  267. EVAL <ENV:iks >NIL: $x + $y TO=*
  268.  
  269. <txt> Straszne, nieprawdaû? Po prostu AmigaDOS 1.3 nie umie
  270. normalnie liczyê (bierze sië to stâd, ûe redyrekcja nie zamyka
  271. zbioru przed zakoïczeniem rozkazu. Uciâûliwoôê ta zostaîa
  272. unicestwiona w kolejnych wersjach dziëki lepszym handlerom).
  273. Musimy zatem najpierw wczytaê aktualnâ wartoôê, jaka sië znajduje
  274. w naszym zbiorze ("iks"), a nastëpnie dodaê wartoôê (VALUE) i
  275. zapisaê "na konsolë" (stâd gwiazdka na koïcu ostatniego wiersza).
  276. Jeszcze gorzej wyglâda ta sprawa w najstarszych wersjach systemu
  277. operacyjnego 1.3, w którym Shell nie potrafi wykonaê takiej
  278. prostej redyrekcji.
  279.  
  280. Niewiele lepiej majâ uûytkownicy systemu 2.0 (chodzi o
  281. najwczeôniejsze wersje, od wersji 2.04 ten bîâd zostaî juû
  282. usuniëty). Gdy bowiem po wpisaniu przykîadu "mieszanego" zechcâ
  283. sprawdziê, jakie wartoôci miaîy skîadniki dodawania, to wynik
  284. bëdzie nastëpujâcy:
  285.  
  286. <l>GETENV global
  287.  
  288. <txt> Tu na ekranie pojawi sië liczba 45 i bëdzie to w porzâdku,
  289. jednak po wpisaniu:
  290.  
  291. <l>GET local
  292.  
  293. <txt>zamiast oczekiwanej liczby 24 pojawi sië na ekranie komunikat:
  294.  
  295. <l>Can't get local
  296.  
  297. <txt> Bierze sië to stâd, ûe nie ma wîaôciwej komunikacji
  298. pomiëdzy poszczególnymi zadaniami, a zmienne lokalne naleûâ do
  299. "innego Shella" niû ten, w którym wykonywaliômy nasze dziaîania.
  300. Na marginesie: tu akurat Shell systemu 1.3 nie bëdzie sprawiaî
  301. kîopotów.
  302.  
  303. Wróêmy jednak do rozkazu EVAL. Moûemy wykorzystaê nasz
  304. "podrëczny" DOS-owski kalkulator do konwersji. Na przykîad:
  305.  
  306. <l>EVAL 0xffff
  307.  
  308. <txt>da w wyniku 65535. Przedrostek "0x" oznacza konwersjë z
  309. liczby heksadecymalnej (szesnastkowej) na dziesiëtnâ. Moûna teû
  310. zastâpiê "0x" przez "#x" (w naszym wypadku "#xffff").
  311.  
  312. <l>EVAL 052
  313.  
  314. <txt>da w wyniku 42. Przedrostek "0" oznacza konwersjë z liczby
  315. oktalnej (ósemkowej) na dziesiëtnâ (moûna teû zastosowaê "#0").
  316. Nie naleûy natomiast poprzedzaê zerem w rozkazie EVAL liczb
  317. dziesiëtnych, bo zostanâ one wówczas potraktowane jako ósemkowe.
  318.  
  319. <l>EVAL 'H
  320.  
  321. <txt>da w wyniku 72, czyli kod ASCII tej litery. Przy podawaniu
  322. liter musimy je poprzedziê znakiem apostrofu. Przypominam, ûe na
  323. "niemieckiej" klawiaturze takiego "apostrofu" nie ma i uzyskamy
  324. go naciskajâc [Alt] i [A umlaut] (czyli A z dwiema kropkami na
  325. górze).
  326.  
  327. Niestety, konwersja w drugâ stronë nie jest moûliwa, bo EVAL moûe
  328. "wydawaê" tylko wartoôci cyfrowe (z jednym wyjâtkiem, patrz na
  329. koïcu).  Natomiast nasz EVAL moûe jeszcze "obliczaê" wiele
  330. dziwnych wartoôci, które mogâ sië póúniej przydaê w skrypcie, i
  331. tak:
  332.  
  333. * przedrostek "0e", po którym nastëpuje liczba, wykonuje na
  334. liczbie "dziwnâ" (patrz dalej) operacjë, polegajâcâ na dodaniu do
  335. tej liczby 1 i zmianie jej znaku, na przykîad.
  336.  
  337. <l>EVAL 0e10
  338.  
  339. <txt>da w wyniku -11, a
  340.  
  341. <l>EVAL 0e-10
  342.  
  343. <txt>da w wyniku 9. Podobnie bëdzie dla jakiejkolwiek innej
  344. liczby z dopuszczalnego dla EVAL zakresu od -2147483649 do
  345. +2147483647. Przy liczbach spoza tego zakresu zacznâ tu wychodziê
  346. zupeînie inne wyniki (podobnie zresztâ bëdzie przy jakichkolwiek
  347. innych dziaîaniach, bo EVAL "trawi" liczby najwyûej 32-bitowe).
  348. Identyczny wynik da przedrostek #e lub przedrostek ~ (tylda).
  349. Tych z Was, którzy sië jeszcze tego nie uczyli lub juû
  350. zapomnieli, informujë, ûe takie dziaîanie nazywa sië "negacjâ
  351. logicznâ" (NOT).
  352.  
  353. * apostrof poprzedzajâcy liczbë da w wyniku kod ASCII pierwszej 
  354. cyfry tej liczby, a zatem taki sam wynik, równy 51, otrzymamy przy dowolnym 
  355. z poniûszych dziaîaï:
  356.  
  357. <l>EVAL '3
  358.  
  359. EVAL '31
  360.  
  361. EVAL '393939394
  362.  
  363. <txt>Oczywiôcie moûna nim wykonywaê takûe cztery podstawowe
  364. dziaîania matematyczne, takie jak (na przykîad):
  365.  
  366. <l>EVAL 2/2
  367.  
  368. EVAL 4/-2
  369.  
  370. <txt> Nawiasy zmieniajâ kolejnoôê dziaîaï i 
  371.  
  372. <l>EVAL (2*3)+4
  373.  
  374. <txt>to, podobnie jak w matematyce, wcale nie to samo co:
  375.  
  376. <l>EVAL 2*(3+4)
  377.  
  378. <txt> Moûna stosowaê dowolnâ liczbë nawiasów, pamiëtajâc jednak o
  379. tym, aby je "zamknâê". Jeôli tego nie zrobimy, zamiast
  380. spodziewanego komunikatu otrzymamy na ekranie informacjë:
  381.  
  382. <l>Mismatched parenthesis
  383.  
  384. <txt> Nasz "kalkulator" pozwala takûe wykonywaê operacje
  385. logiczne, uûywajâc w miejscu operatora jednego ze znaków: &
  386. (AND), | (OR), ~ (NOT), XOR, na przykîad:
  387.  
  388. <l>EVAL 1 & 0 
  389.  
  390. EVAL 0 | 1
  391.  
  392. <txt>i tak dalej. 
  393.  
  394. To nie wszystko. Moûemy takûe porównywaê wartoôci 
  395. bitowo, a to za pomocâ operatora EQV, na przykîad:
  396.  
  397. <l>EVAL 1 eqv 0
  398.  
  399. <txt> Jeôli wynik takiego porównania jest logicznâ prawdâ (na
  400. przykîad 175 eqv 175), otrzymamy -1, w przeciwnym razie -- innâ
  401. cyfrë.
  402.  
  403. Moûna takûe korzystaê z "shiftowania". Na przykîad w prawo przez:
  404.  
  405. <l>EVAL 1 >> 4
  406.  
  407. <txt>i w lewo (zmieniajâc odpowiednio kierunek dziubków). Z
  408. niepojëtych dla mnie przyczyn "shiftowanie" dziaîa bez zarzutu z
  409. systemem 1.3, natomiast ma duûe kîopoty w wersji ... 3.0, przy
  410. której oblicza wprawdzie poprawny wynik, ale nie przekazuje go na
  411. konsolë. Trzeba sobie tu radziê za pomocâ parametru TO, który
  412. kieruje wynik dziaîania nie na konsolë, ale do zbioru. Parametr
  413. ten jest najczëôciej stosowany w skryptach, przy wykonywaniu
  414. "zapëtlonych" obliczeï. Uwaga: Przy takiej zabawie naleûy
  415. pamiëtaê o tym, aby je jakoô zakoïczyê. Jeôli na przykîad
  416. wpisalibyômy (NIE RÓBCIE TEGO NA TWARDYM DYSKU!!!):
  417.  
  418. <l>lab start
  419.  
  420. eval 2*2 to df0:TEST 
  421.  
  422. SKIP start BACK
  423.  
  424. <txt>to w bardzo szybkim czasie zapeînimy caîy dysk zbiorem test
  425. zawierajâcym same czwórki. W naszym przypadku z "shiftowaniem"
  426. moûe to byê:
  427.  
  428. <l>EVAL 1 >> 4 TO RAM:test
  429.  
  430. TYPE RAM: test
  431.  
  432. <txt> Kolejnym operatorem, jaki moûemy zastosowaê w EVAL, jest
  433. "modulo" (czyli reszta z dzielenia), na przykîad:
  434.  
  435. <l>EVAL 7 mod 3
  436.  
  437. <txt> Tu znowu zawodzi Shell 1.3, mimo ûe w oryginalnej
  438. instrukcji do tego systemu kîamczuszki ze ôp. Commodore twierdzâ,
  439. ûe moûna stosowaê ten operator.
  440.  
  441. LFORMAT -- pozwala na uzyskanie wyniku w okreôlonym formacie
  442. zaleûnym od zastosowanego wzorca. I tak:
  443.  
  444. %c -- poda wynik jako znak;
  445.  
  446. %n -- poda wynik jako liczbë dziesiëtnâ;
  447.  
  448. %oZ -- poda wynik w formacie ósemkowym;
  449.  
  450. %xZ -- poda wynik w formacie szesnastkowym;
  451.  
  452. gdzie Z jest to liczba caîkowita okreôlajâca, ile liczb ma byê
  453. wydrukowanych (wolno go uûyê tylko z opcjâ %o i %x). W praktyce
  454. naleûy byê jednak przygotowanym na pewne niespodzianki. I tak,
  455. jeôli uûyjemy tego rozkazu z rëki, na przykîad:
  456.  
  457. <l>EVAL 2*4 LFORMAT %n
  458.  
  459. <txt>to wprawdzie otrzymamy w wyniku ósemkë, ale tuû za niâ
  460. zostanie wypisany "prompt" Workbencha. Nie zawsze chcemy mieê
  461. wskaúnik zachëty w rodzaju:
  462.  
  463. <l>84.WORKBENCH:> 
  464.  
  465. <txt> Naleûy zatem wprowadziê jakiô [CR]. Ale jak to zrobiê z rëki? A 
  466. choêby i tak:
  467.  
  468. <l>EVAL 2*4 LFORMAT "Wynik to %n *n"
  469.  
  470. <txt>(koïcowe "*n" powinniôcie pamiëtaê z niedawno opisywanego
  471. rozkazu ECHO). Jeôli pominiemy parametr okreôlajâcy dîugoôê
  472. wydruku, to zostanie wyôwietlona tylko ostatni znak wyniku, jeôli
  473. natomiast bëdzie on wiëkszy niû liczba znaków wyniku, to
  474. brakujâce pozycje zostanâ uzupeînione zerami na poczâtku.
  475. Porównajcie wyniki dwóch poniûszych dziaîaï:
  476.  
  477. <l>EVAL 2*127 "Wynik to %x *n"
  478.  
  479. <l>EVAL 2*127 "Wynik to %x4 *n"
  480.  
  481. <txt> Jeôli natomiast w powyûszym dziaîaniu zastâpimy %x przez %c
  482. (tu nie stosujemy wyznacznika dîugoôci), to zostanie wyôwietlony
  483. znak, któremu odpowiada wynikowy kod ASCII. Uwaga: EVAL nie jest
  484. tu zabezpieczony przed geniuszami, którzy zacznâ sobie wpisywaê
  485. dowolne cyfry, a zatem moûna daê na przykîad równie dobrze:
  486.  
  487. <l>EVAL -1 "Wynik to %c *n"
  488.  
  489. <txt>jak i:
  490.  
  491. <l>EVAL 29126 "Wynik to %x *n"
  492.  
  493. <txt>Nie bëdzie jednak to robione bezmyôlnie. Taki sam znak "Ë"
  494. zostanie wyôwietlony zarówno dla liczby (wyniku) 203, jak i dla
  495. 459 czy -53. Kapewu? (Jeôli nie, to dodawajcie sobie albo
  496. odejmujcie od wîaôciwego kodu ASCII liczbë 256 lub jej
  497. wielokrotnoôê).
  498.  
  499. ***************** TEN FRAGMENT RAFAΠSPRAWDÚ SZCZEGÓLNIE UWAÛNIE *******
  500.  
  501. Ostatnim zastosowaniem rozkazu EVAL jest "licznik w pëtlach"
  502. skryptu.  Moûe on wyglâdaê na przykîad tak:
  503.  
  504. <l> 
  505. SETENV licz 1; ten wiersz zapisze wartoôê 1 w zmiennej ôrodowiskowej
  506.  
  507. lab start; zaczynamy
  508.  
  509. echo "Pëtla nr" noline; to nam wypisze kolejny numer pëtli...
  510.  
  511. GETENV licz; ...który jest podany tutaj
  512.  
  513. EVAL $licz + 1 to ENV:loop; tu zwiëkszymy jâ o 1
  514.  
  515. if val $licz not GT 10; a tu sprawdzimy czy nie jest wiëksza od 10
  516.  
  517. skip start back; jeôli nie to wracamy do poczâtku
  518.  
  519. endif; a jeôli tak to koïczymy
  520.  
  521. echo "koniec"
  522.  
  523. ******************* RAF PRZEROB TO niûej SZCZEGÓLNIE DOKÎADNIE ************
  524.  
  525. <txt>Dla Amig z systemem 1.3 nasz "licznik" bëdzie nieco bardziej
  526. skomplikowany i bëdzie wyglâdaî jak poniûej:
  527.  
  528. <l>.key licz
  529.  
  530. .bra {
  531.  
  532. .ket }
  533.  
  534. echo >env:licz {licz}
  535.  
  536. lab start
  537.  
  538. echo "Pëtla nr" noline
  539.  
  540. type env:licz
  541.  
  542. EVAL <ENV:licz >NIL: to t:qve{$$} value2=1 op=+ ?
  543.  
  544. type >env:licz t:qwe{$$}
  545.  
  546. if val $licz NOT GT 10
  547.  
  548. skip start back
  549.  
  550. endif
  551.  
  552. echo "koniec"
  553.  
  554. ***** RAFAΠCO TU JEST DO CHOLERY!!! TO TEORETYCZNIE MUSI DZIAÎAÊ (w koïcu 
  555. przepisaîem ten drugi przykîad ûywcem z oryginalnego podrëcznika Commodore
  556. A NIE 
  557. CHCE ANI NA A1200, ANI NA A500. MAM DOÔÊ STRACIÎEM DWA DNI I WIËCEJ NIE 
  558. CHCË. jEÔLI SOBIE NIE PORADZISZ Z TYM  TO SKREÔL TEN FRAGMENT, ale gîupio
  559. byîoby jakby byî przykîad dla wszystkiego poza A500
  560.  
  561. **********************************************************************
  562.  
  563. Za pomocâ rozkazu EVAL moûna takûe nieco pomieszaê, ale nie napiszë o 
  564. tym, bowiem "a widelec" zechcielibyôcie to wpalcowaê na swojej Amidze. I 
  565. kto by potem pîaciî alimenty? Do zobaczenia za miesiâc
  566.  
  567.  
  568.