System na talerzu (cz. 17.) --------------------------- AMIGA DOS Marek Pampuch EXCHANGE (wymieļ) skīadnia dla systemów 2.0, 2.1, 3.0 i 3.1: EXCHANGE [CX_POPKEY="xxx"] [CX_POPUP=>yes | no<] [CX_PRIORITY=>n<] gdzie: xxx to nazwa okreōlajāca kombinacjė klawiszy, pozwalajācā na wywoīanie rozkazu, n to wartoōź priorytetu nadanego rozkazowi. W pozostaīych wersjach systemu rozkaz ten nie wystėpuje. wzorzec dla systemów 2.0, 2.1, 3.0 i 3.1:CX_POPKEY/K, CX_POPUP/K, CX_PRIORITY/K EXCHANGE jest programem zarzādzajācym Commodity. Po jego wywoīaniu pojawi siė okno, w którym moūna bėdzie ustawiź te Commodity, których chcesz uūywaź, zmieniź ich parametry dziaīania oraz usunāź niepotrzebne juū Commodity z pamiėci komputera. Moūna go wywoīaź za pomocā DOS-u, jednak najczėōciej robi siė to z poziomu Workbencha. Ten ostatni sposób zostaī opisany dokīadnie w ksiāūce "Amiga" wydanej przez Wydawnictwo LUPUS. Naleūy pamiėtaź o tym, ūe wszystkie programy typu Commodity (a zatem i Exchange) nie generujā kodu bīėdu przy niewīaōciwym wprowadzeniu parametrów. Jedynym sposobem na sprawdzenie, czy wszystko jest OK, moūe byź skorzystanie z rozkazu STATUS. ********* tu rysunek 42 ************** EXCHANGE moūemy (podobnie jak wszystkie inne Commodities) uruchomiź przez wpisanie samej nazwy rozkazu, jednak takie postėpowanie odetnie nam dostėp do Shella i aby wyjōź z programu, trzeba bėdzie go przerywaź kombinacjā klawiszy [Ctrl]+[C]. Lepiej zatem uruchomiź EXCHANGE przez: RUN EXCHANGE Parametrami opcji CX_POPKEY moūe byź dowolna kombinacja klawiszy [Shift] [Ctrl] [Alt] lub klawiszy funkcyjnych, na przykīad: RUN >NIL: EXCHANGE "CX_POPKEY=Ctrl F3" Opcja POPUP w zaleūnoōci od podanego parametru wyōwietla (yes), lub nie wyōwietla (no), okno rozkazu Exchange. Opcja PRIORITY zmienia priorytet Commodities. Domyōlnie wszystkie programy z tej grupy majā priorytet 0. EXECUTE (wykonaj) skīadnia dla wszystkich systemów EXECUTE [] gdzie n1 to rozkaz lub lista rozkazów. Rozkaz ten moūe byź pobrany z innego dysku czy katalogu niū aktualny, w takim wypadku jednak musimy nazwė tego rozkazu poprzedziź odpowiedniā ōcieūkā dostėpu. Parametr arg, to jedno z poniūszych sīów kluczowych: .KEY (.K) -- definiuje szablon dla argumentu, .DOT z -- znak "z", uūyty zamiast kropki, bėdzie poprzedzaī sīowo kluczowe, .BRA z -- znak "z" zastāpi nawias klamrowy, otwierajācy w oznaczeniu poczātku nazwy parametru, .KET z -- zastėpuje zamkniėcie nawiasu klamrowego, .DOLLAR z (lub .DOL z) -- znak "z" zastėpuje, jako znak rozpoznawczy parametru, znak dolara ($), .DEF n -- nadaje danemu parametrowi wartoōź n. Znaczenie tych parametrów zostaīo omówione dokīadniej w artykule "Suplement do Amiga DOS" w Magazynie AMIGA nr 4/95. Rozkaz EXECUTE moūe w tym miejscu mieź jeszcze inne parametry. Sā to: .[klawisz spacji] (koniecznie poprzedzony kropkā!) -- wstawi pusty wiersz pomiėdzy wierszami z rozkazami. .\ -- oznacza komentarz. Parametr taki poinformuje EXECUTE, ūe ma opuōciź wiersz, na poczātku którego wystėpuje taki znaczek, i przejōź do nastėpnego wiersza. nawiasy trójkātne, czyli ">" i "<" -- mogā one wystėpowaź od systemu 2.0 w górė. Peīniā takā samā funkcjė, jak .BRA i .KET (nawiasy klamrowe) i sīuūā do podawania wzorca dla argumentu. Nie jest to jednak najlepszy pomysī, bo moūna takie nawiasy pomyliź z identycznymi z nimi znaczkami okreōlajācymi redyrekcjė. Lepiej zatem pozostaź przy .BRA i .KET. Rozkaz EXECUTE jest wykorzystywany do uruchamiania zbiorów skryptowych DOS-u (na przykīad "startup-sequence"). Skrypt moūe zawieraź dowolnā, poprawnie napisanā sekwencjė rozkazów Amiga DOS. Oznacza to, ūe w ten sposób moūemy pisaź wīasne procedury uīatwiajāce ūycie. Przykīad: EXECUTE df0:scripts/mój_skrypt Jeōli czėsto uūywasz rozkazu EXECUTE, moūesz sobie dodatkowo uīatwiź pracė wykonujāc kopiė rozkazu i zmieniajāc jej nazwė na przykīad na "e" (co oszczėdzi wpisywania za kaūdym razem czīonu "xecute"). Moūna pójōź jeszcze dalej. Skrypt, któremu nadaliōmy bit protekcji S, na przykīad za pomocā odpowiedniej opcji z programu zarzādzajācego lub z poziomu CLI/Shella przez: PROTECT df0:scripts/mój_skrypt +S moūe zostaź wykonany przez wpisanie samej nazwy skryptu (z ewentualnā ōcieūkā dostėpu), bez koniecznoōci wpisywania rozkazu EXECUTE. Uruchamianie skryptów to gīówne, jednak nie jedyne, zastosowanie rozkazu EXECUTE. Bardziej zaawansowani uūytkownicy (poczātkujācym raczej nie zalecaībym eksperymentów opisanych poniūej) mogā wykorzystaź ten rozkaz do operacji "niūszego poziomu". Zanim jednak przejdė do przykīadu, muszė niestety nakarmiź Was nieco teoriā na temat sposobu dziaīania EXECUTE. Po uruchomieniu rozkazu EXECUTE czyta pierwszy bajt zbioru z rozkazem. Jeōli jest to kropka, wówczas tworzony jest zbiór tymczasowy w katalogu T. Jeōli dysk, na którym ma powstaź taki zbiór, jest zabezpieczony przed zapisem, zapeīniony albo uszkodzony, wówczas generowany jest komunikat: Can't create T:Command-00-01 i wykonywanie rozkazu EXECUTE zostaje przerwane. Jeōli jednak wszystko jest w porzādku, zostaje utworzony taki zbiór, w którym znajdzie siė caīy tekst rozkazu. Bėdzie siė on jednak róūniī od oryginaīu tym, ūe w miejsce domyōlnego parametru zostanie wpisany parametr podany wzorcem lub za pomocā innych "kropkowych" rozkazów funkcji EXECUTE. Taki zbiór moūna przeglādaź (choź nie zawsze jest to zbiór ASCII) i sprawdzaź poprawnoōź jego dziaīania, na przykīad za pomocā debuggera dla jėzyka, w jakim zostaī napisany nasz rozkaz. Jest to szczególnie wygodne w wypadku rozkazów zainstalowanych w ROM-ie. Ten sposób zwalnia wprawdzie (niezauwaūalnie) szybkoōź wykonania rozkazu, niemniej jest caīkowicie bezpieczny zarówno dla uūytkownika, jak i dla systemu. Na razie nie chcemy jednak debagowaź zbioru, ale tylko zobaczyź, co ma to wspólnego z opisywanym rozkazem EXECUTE. Po przekopiowaniu danych do tego zbioru jego nazwa zmienia siė (w sposób niezauwaūalny dla uūytkownika, gdyū dzieje siė to w tle) na Command-xx-yy gdzie xx jest poziomem zapėtlenia, yy zaō numerem procesu. Moūna to jednak zobaczyź, wpisujāc nastėpujācy skrypt: .KEY NOARGS LIST >RAM:Pokaz<$$> T:COM#? LFORMAT "RUN ED %s%s" EXECUTE RAM:Pokaz<$$> Zapiszmy go na dysku pod nazwā "test". Aby go uruchomiź, trzeba jednak wpisaź i uruchomiź kolejny skrypt: .KEY ARG1/A, ARG2/A, OPT1, OPT2 EXECUTE df0:test UWAGA: Uūytkownicy systemów 3.0 i 3.1 powinni napisaź ten skrypt nieco inaczej: .KEY NOARGS TYPE >>RAM:test1 t:#? ED RAM:TEST1 FAILAT ("padnij" na) skīadnia dla systemów 1.2 i 1.3 FAILAT >n< skīadnia dla systemów 2.0, 2.1, 3.0 i 3.1: FAILAT [[RCLIM=] >n< gdzie n to kod wartoōci bīėdu (domyōlnie ma on wartoōź 10). Wzorzec dla wszystkich systemów: RCLIM/N Ustala dopuszczalne granice kodu zwrotnego przy wystāpieniu bīėdu w skrypcie (R[eturn] C[ode] LIM[its]). Jeūeli kod taki bėdzie mniejszy niū n, wykonywanie skryptu nie bėdzie przerwane. PRZYKĪAD: failat 20 Jeōli kod bīėdu bėdzie tu wiėkszy niū 20, wykonywanie skryptu bėdzie zatrzymane i Amiga wyōwietli komunikat o bīėdzie. Pojawi siė prompt, a wartoōź kodu zwrotnego zostanie ponownie ustawiona na domyōlne 10. W przeciwnym wypadku skrypt bėdzie wykonywany dalej. Poniewaū maksymalnā wartoōciā, jakā moūna tu zastosowaź, jest n=20, wystarczy na poczātku dowolnego skryptu wpisaź: FAILAT 21 i nasz skrypt bėdzie wykonany do koļca bez wzglėdu na to, co siė stanie. Mimo tego wszystkie komunikaty o ewentualnie wystėpujācych bīėdach zostanā jednak wyōwietlone na ekranie. Jest to szczególnie uūyteczne podczas tworzenia dīugich skryptów czy przy eksperymentach z kopiami istniejācych skryptów oraz przy odpluskwianiu, zabezpiecza bowiem przed ulubionym przez eksperymentatorów (i nie tylko) Guru Message. Zazwyczaj stosuje siė tu wartoōci n równe 5,10 20 i 21. UWAGA: Jeōli zwiėkszyīeō w jakiejō sekwencji rozkazów wartoōź n, powinieneō na koļcu tej sekwencji uūyź rozkazu: FAILAT 10 aby przywróciź ōredniā wartoōź domyōlnā. Rozkaz FAILAT zadziaīa takūe na rozkazy uruchamiane z poziomu Shella za pomocā RUN. *********** tu rysunek 43 *********** Rozkaz podany bez argumentów spowoduje wypisanie aktualnie ustawionego limitu kodu bīėdów (domyōlnie 10). FAULT (bīėdny) skīadnia dla wszystkich systemów: FAULT [ ... ] gdzie: k1-k10 -- trzycyfrowy numer bīėdu AmigaDOS. W systemach 1.2 i 1.3 wyōwietla komunikat podajācy numer bīėdu, jaki ostatnio wystāpiī (przy uūyciu bez argumentów), lub numery bīėdów odpowiadajācych podanym argumentom. W systemach od 2.0 w górė wyōwietla komunikat po angielsku opisujācy podany kod (lub podane kody) bīėdu. Moūna podaź do 10 kodów. PRZYKĪAD: fault 206; spowoduje komunikat "Invalid window" (niewīaōciwe okno) Jeōli wystāpi bīād, dla którego twórcy systemu nie przewidzieli opisu (zdarza siė to bardzo rzadko, ale jednak), wówczas komunikat przybierze postaź jak, na przykīad, poniūej: FAULT 106: ERROR 106 Takimi "beznazwowymi" bīėdami sā w AmigaDOS bīėdy o numerach: 1-101, 102, 104, 106-113, 123-201, 208, 227-231, 236-239, 244-302 i 306-2147483647 (twórcy systemu zapewnili sobie w ten sposób doūywotni "bufor". Czyūby aū tyle bīėdów chcieli popeīniź?) Pozostaīe bīėdy majā swoje nazwy i nastėpujāce znaczenie. UWAGA: dokīadniejszy opis tylko przy najczėōciej wystėpujācych bīėdach. W starszych wersjach niektóre bīėdy mogā byź nierozpoznawalne). 103 -- brak pamiėci (insufficient free store). Najczėōciej wystėpuje przy próbie wczytania lub uruchomienia programów, które sā wiėksze niū pamiėź RAM, jakā dysponuje nasz komputer. Czasem jednak (jeōli mamy na przykīad 6 MB pamiėci, a wczytujemy niezbyt wielki program) przyczyny tego bīėdu mogā wydawaź siė metafizyczne. Tak dobrze jednak nie jest. Sprawdś, czy: ^* nie otwarīeō przypadkiem nieresetowalnego RAM-dysku (RAD) lub zostawiīeō w RAM-ie coō duūego (na przykīad przy próbie kopiowania); ^* zamknāīeō wszystkie uūywane poprzednio, a juū niepotrzebne, programy; ^* po uūywanym poprzednio programie nie zostaīy w pamiėci jakieō ōmieci lub nie zostaīa przywrócona domyōlna alokacja pamiėci i twój RAM jest poszatkowany lepiej niū kapusta w beczce; brzmi to grośnie i uczenie, ale w tym akurat przypadku wystarczy wykonaź zwykīy reset z klawiatury; ^* uruchomiīeō zbyt wiele zadaļ naraz; ^* nadaīeō programowi zbyt duūā pamiėź stosu 105 -- zapeīniona tablica procesów (process table full). 114 -- zīy wzorzec (bad template). 115 -- zīy argument (bad number). Rozkaz wymagaī argumentu cyfrowego, a Ty pomyīkowo wpisaīeō tam literė lub inny znak. 116 -- brak wymaganego argumentu (required argument missing). Zapomniaīeō jednego lub wiėcej z argumentów wymaganych przez dany rozkaz; przeczytaj opis odpowiedniego rozkazu AmigaDOS, a jeōli nie masz pod rėkā ksiāūki, sprawdś, które argumenty sā potrzebne, wpisujāc ten rozkaz z pytajnikiem na koļcu i naciskajāc klawisz [Return]. 117 -- brak argumentu po znaku =. 118 -- za duūo argumentów (too many arguments). Sytuacja odwrotna niū ta przy bīėdzie numer 116, lecz sposób "leczenia" taki sam. 119 -- nie zamkniėty nawias. 120 -- nieprawidīowy lub za dīugi wiersz (argument line invalid or too long). Wiersz rozkazu AmigaDOS nie powinien byź dīuūszy niū 255 znaków, zdarzajā siė jednak wyjātki (w obie strony). Skīadniė rozkazu i jego dopuszczalnā dīugoōź moūna sprawdziź w dowolnej ksiāūce o AmigaDOS. 121 -- zbiór nie jest poprawnym zbiorem AmigaDOS typu "object" (file is not an object module). Spróbuj uruchomiź zbiór przez "execute >nazwa programu<. Jeōli jest to zbiór skryptowy, ustaw mu (w opcji INFORMATION) status SCRIPT. 122 -- niewīaōciwa biblioteka rezydentna. 202 -- zbiór w uūyciu (file in use). Usiīowaīeō zmazaź zbiór, który jest aktualnie wykonywanym programem (lub zostaī przypisany do takiego programu rozkazem ASSIGN). Zakoļcz najpierw jego dziaīanie, a dopiero potem zmaū. 203 -- zbiór juū istnieje (object already exists). Chciaīeō nadaź zbiorowi lub katalogowi nowā nazwė, a taka nazwa juū w danym katalogu jest. Zbiory o tych samych nazwach mogā siė znaleśź na tym samym dysku tylko wtedy, gdy sā zapisane w róūnych katalogach. 204 -- taki katalog nie istnieje (directory not found). Najprawdopodobniej pomyliīeō siė przy wpisywaniu nazwy katalogu. 205 -- taki zbiór nie istnieje (object not found). Tu teū przyczynā jest bīād w nazwie. Czasem nazwa zbioru moūe byź poprawna, jednak (czego na pierwszy rzut oka nie da siė dostrzec) podczas wykonywania program odwoīuje siė do innego programu lub biblioteki, której na dysku nie ma. Tu moūe pomóc sprawdzenie za pomocā programu SnoopDOS. 206 -- bīėdny opis okna. 207 -- zbiór jest za duūy. 209 -- nie rozpoznany typ requestera. 210 -- niewīaōciwa nazwa obiektu (object name invalid). W nazwie obiektu wystėpuje znak, który jest przeznaczony przez AmigaDOS do "wyūszych" celów. Zmieļ nazwė obiektu nie korzystajāc z takich znaków. Drugim wypadkiem, gdy moūe wystāpiź taki bīād, jest zbyt dīuga (przekraczajāca 30 znaków----------------------?------------------. W wypadku zbiorów z ikonami nazwa moūe mieź maksimum 25 znaków, po to, aby moūna byīo dodaź rozszerzenie .info). Skróź nazwė---------------?--------------- 211 -- uūycie znaku kontrolnego w linii rozkazowej. 212 -- zbiór nie jest wymaganego typu (object is not of required type). Usiīowaīeō (na przykīad) uruchomiź zbiór z obrazkiem wykonany Deluxe Paintem za pomocā rozkazu EXECUTE. (Nie ōmiejcie siė, takie bīėdy siė zdarzajā, i to nie tylko nie wtajemniczonym -- zazwyczaj po kilkunastu godzinach spėdzonych przed monitorem). 213 -- dysk nie jest zwalidatowany (disk is not validated). Tu przyczyna moūe byź róūna: uszkodzony zbiór Disk-validator z katalogu L: (mechanicznie lub przez wirusa) lub jego brak, brak miejsca na zapisanie zbioru tymczasowego, jaki chce sobie stworzyź Amiga, i kilka innych. Jak sobie radziź? Przede wszystkim wyciāgnāź dyskietkė, wyīāczyź komputer i poczekaź okoīo 30 sekund. Po ponownym wīāczeniu Amigi naleūy: * Sprawdziź dysk programem antywirusowym. Jeōli jest to wirus -- usunāź go. Jeōli antywirus nie "naprawia dysku po Saddamie" -- przegraź "zdrowy" zbiór Disk-validator. * Sprawdziź (na przykīad za pomocā programu FileMaster lub podobnego), czy na dysku istnieje zbiór Disk-validator. Jeōli go nie ma, przegraź go (na przykīad z dyskietki z Workbenchem). Sprawa wyglāda nieco gorzej, jeōli dyskietka jest niedosowska lub katalog nie chce siė wczytaź. W tym wypadku pozostaje nam tylko program do "ratowania" dysków. Znawcy na pewno w tym momencie skrzywiā siė z niesmakiem, ale choź wiem, ūe DiskSalv czy Quarterback Tools sā wspaniaīe, to jednak (zwīaszcza poczātkujācym) radziībym w tym miejscu uūyź starego dobrego Diskdoctora. 214 -- dysk zabezpieczony przed zapisem (disk is write protected). Chcesz coō zapisaź, a zapomniaīeō przesunāź maīy kawaīeczek plastiku. 215 -- próba zmiany nazwy na dwóch lub wiėcej urzādzeniach naraz. 216 -- zamazywany katalog nie jest pusty. 217 -- za duūo zapėtleļ. 218 -- urzādzenie nie zamontowane (device not mounted). Przyczynā moūe byź literówka w nazwie urzādzenia, do jakiego siė odwoīujesz, lub niewīaōciwe "zamontowanie" tego urzādzenia (zarówno sprzėtowe -- wyīācz komputer i sprawdś kable, jak i programowe -- sprawdś zbiór Mountlist i sekwencjė startowā). 219 -- bīād przeszukiwania. 220 -- komentarz dīuūszy niū 79 znaków. 221 -- dysk jest peīny (disk full). Cóū... dyskietki 3,5-calowe nie sā z gumy. 222 -- zbiór zabezpieczony przed zamazaniem (file protected from deletion). Sprawdś (za pomocā rozkazu PROTECT) ustawienie bitów protekcji i ustaw mu bit D. Podobnie moūna usunāź przyczynė bīėdów o numerach 223 (odczyt, R), 224 (zapis, W). 223 -- zbiór jest zabezpieczony przed odczytem. 224 -- zbiór jest zabezpieczony przed zapisem. 225 -- dysk niedosowy (not a DOS disk). Usiīowaīeō przeczytaź dyskietkė nie sformatowanā, pecetowā lub śle skopiowanā. Tak zwane dyski niedosowe (gīównie gry) nie wykaūā tego bīėdu, sā bowiem zapisane w sposób potrafiācy oszukaź ten komunikat. 226 -- dysk nie znajduje siė w stacji (no disk in drive). Próbowaīeō wczytaź coō ze stacji, w której aktualnie nie ma dysku. 232 -- przekroczona liczba zbiorów w katalogu lub podkatalogu. 233 -- ten obiekt nie moūe byź linkowany. 234 -- ten obiekt jest juū zlinkowany. 235 -- bīād przy īadowaniu zbioru (bad load file hunk). Īadowany zbiór jest uszkodzony, spróbuj zaīadowaź innā kopiė tego zbioru. 240 -- rekord nie jest zamkniėty. 241 -- kolizja zamkniėcia rekordów. 242 -- zamkniėcie rekordu jest "poza czasem" (lock timeout). 243 -- bīād przy otwieraniu rekordu. 303 -- przepeīnienie bufora. 304 -- przerwanie zbyt niskiego poziomu (pojawi siė komunikat na ekranie, nie przerwie to jednak wykonywania programu). 305 -- zbiór nie jest wykonywalny (file not executable).