^- System na talerzu (cz. 21.) --------------------------- AMIGA DOS Marek Pampuch IF (jeûeli) skîadnia dla systemu 1.2: IF [NOT] [WARN] [ERROR] [FAIL] [ EQ ] [EXISTS ] skîadnia dla systemów 1.3, 2.0, 2.1, 3.0 i 3.1: IF [NOT] [WARN] [ERROR] [FAIL] [ EQ|GT|GE ] [VAL] [EXISTS ] gdzie: tekst1, tekst2 -- îaïcuchy do porównywania, n1 -- nazwa zbioru. wzorzec dla systemu 1.2: STRING, NOT/S, WARN/S, ERROR/S, FAIL/S, EQ/K, EXISTS/K wzorzec dla systemów 1.3, 2.0, 2.1, 3.0 i 3.1: STRING, NOT/S, WARN/S, ERROR/S, FAIL/S,EQ/K, GT/K, GE/K, VAL/S, EXISTS/K Umoûliwia rozgaîëzienie instrukcji w zaleûnoôci od warunków podczas wykonywania sekwencji rozkazów. UWAGA: rozkazu IF nie moûna wprowadzaê "z rëki" (w trybie z natychmiastowym wykonaniem). Sekwencja IF musi byê najpierw zapisana na dysku w postaci skryptu AmigaDOS, a potem wykonana. Jednak, nawet jeôli umieôcimy go w skrypcie, sam rozkaz IF nie bëdzie miaî ûadnego znaczenia. Musi byê "obudowany" innymi rozkazami, które bëdâ wykonane w zaleûnoôci od tego, czy warunek podany w instrukcji IF jest speîniony, czy teû nie. Potocznie mówi sië, ûe IF jest rozkazem rozpoczynajâcym tak zwanâ pëtlë: IF >warunek< ... ELSE...ENDIF Rozkaz IF moûna zagnieûdûaê (to znaczy, ûe wewnâtrz jednej pëtli moûe wystëpowaê inna). Jeôli jednak po IF nastëpuje nie jeden rozkaz, ale caîa ich sekwencja, wówczas trzeba uûyê rozkazu ENDIF. Przykîad ("pëtla wewnëtrzna" jest wyróûniona przez wciëcie): if 2 GT 3 VAL skip end ; jeôli 2 > 3 (ha,ha) to koïcz else if FAIL type "Coô nie tak"; jeôli kod bîëdu >= 20 to wypisz komentarz endif end Parametrami rozkazu sâ: * EQ -- porównuje îaïcuchy logicznie (czy sâ takie same). Przykîad: IF EQ "" ECHO " Miaîeô podaê rozkaz" * ERROR -- jeôli wygenerowany kod bîëdu jest równy 10, warunek jest speîniony. * EXISTS -- pozwala sprawdziê, czy katalog lub zbiór dyskowy istniejâ. Jeôli tak, wówczas warunek jest speîniony. Jeôli nie istnieje zbiór lub katalog, warunek nie jest speîniony. Rozkaz bada takûe zamontowanie urzâdzeï fizycznych. Jeôli takie urzâdzenie nie istnieje, wówczas w wyniku badania pojawi sië na ekranie odpowiedni komunikat systemowy. Przykîady: IF EXISTS DF0: -- bada, czy do stacji df0: wîoûony jest dysk. IF NOT EXIST RAM:test: -- warunek jest speîniony, gdy w katalogu gîównym RAM dysku nie ma zbioru test. Nie powinno sië jednak badaê bezpoôrednio poprzez IF wystëpowania urzâdzeï logicznych. W takim wypadku naleûy to zrobiê nastëpujâco (przykîadowo): ASSIGN >NIL: DEVS: EXISTS IF WARN * FAIL -- jeôli wygenerowany kod bîëdu jest równy 20, warunek jest speîniony. * GT -- porównuje îaïcuchy logicznie (czy wartoôê parametru tekst1 jest wiëksza niû wartoôê parametru tekst2). * GE -- porównuje îaïcuchy logicznie (czy wartoôê parametru tekst1 jest wiëksza lub równa wartoôci parametru tekst2). UWAGA: Rozkaz nie ma parametrów typu LT (mniejszy niû) czy LE (mniejszy lub równy). Jeôli jest nam potrzebne takie badanie, naleûy zanegowaê odpowiednio jeden z powyûszych parametrów, jak poniûej: IF 2 NOT GE 3; oznacza: jeôli 2 jest mniejsze od 3 IF 2 NOT GT 3; oznacza jeôli 2 jest mniejsze lub równe 3 * NOT -- operator logiczny (negacja) brany pod uwagë przy porównywaniu îaïcuchów. * STRING -- jest to argument w postaci îaïcucha tekstowego. Moûemy tutaj podaê jako îaïcuch zarówno warunek, na przykîad: IF n=1 skip end jak i nazwë urzâdzenia fizycznego lub logicznego. UWAGA: Jeôli të nazwë podamy jako zmiennâ doczytywanâ z dysku, a nie wpisywanâ z klawiatury, wówczas musi byê ona w cudzysîowie. Porównaj poniûsze przykîady: ************ DO SKÎADU -- PROSZË UWAÛAÊ NA TAGI !!!!! ;przykîad pierwszy .key nazwa IF EQ "Magazyn Amiga" echo "Masz racjë. Magazyn AMIGA jest wspaniaîy" else echo "Dlaczego uwaûasz, ûe najlepszy jest " endif A teraz dla porównania: ;przykîad drugi .key úródîo, cel if "<úródîo>" exists echo "zastâpiê zbiór <úródîo> zbiorem " ask "Tak (Y)/Nie (N) if warn copy from <úródîo> to endif else end * VAL -- z tego parametru korzystamy, gdy w naszym skrypcie majâ byê badane zmienne ôrodowiskowe. W takim wypadku parametr VAL wraz z nazwâ zmiennej ôrodowiskowej wystëpuje w miejscu tekstu 1., jak na przykîad: IF VAL $liczba GT 10 * WARN -- jeôli wygenerowany kod bîëdu jest równy 5, warunek jest speîniony. UWAGA: Jeôli za pomocâ rozkazu FAILAT ustawimy wczeôniej limit dla dopuszczalnego kodu bîëdów wyûszy niû 5, 10 lub 20, to parametry (odpowiednio) WARN, ERROR i FAIL nie zadziaîajâ wîaôciwie. IHELP (I[ntuition] HELP -- "ôciâga" dla Intuition) skîadnia dla systemu 2.0: IHELP [PRIORITY=>n1<] [CYCLEWINDOW=>n2<] [MAKEBIG=>n3<] [MAKESMALL=>n4<] [CYCLESCREEN=>n5<] [ZIPWINDOW=>n6<] gdzie: n1 oznacza priorytet. Moûna w ten sposób zmieniê domyôlny priorytet, ustawiony rozkazem Exchange, n2 do n6 zaô to odpowiednie kombinacje klawiszy (hotkeys), powodujâce dziaîania okreôlone opcjâ. Domyôlnie odpowiadajâ im kolejne klawisze funkcyjne od [F1] (CYCLE WINDOW) do [F5] (ZIPWINDOW). W pozostaîych systemach rozkaz ten nie wystëpuje. Jest to rozkaz z gatunku Commodity i dlatego nie znajduje sië w katalogu rozkazowym C. Zasady uruchamiania i dziaîania rozkazów typu Commodity byîy juû w kilku miejscach opisywane (poczâwszy od rozkazu Blanker). IHelp powoduje pojawienie sië okna, za pomocâ którego moûna zmieniê ustawione wczeôniej priorytety i niektóre ustawienia dotyczâce okien. Szczególnie sâ to: Cycle window -- kolejne uaktywnianie wszystkich okien. Makebig -- powiëksza aktywne okno do rozmiarów caîego ekranu. MakeSmall -- zmniejsza aktywne okno do minimalnej moûliwej wielkoôci. Cycle screen -- kolejne uaktywnianie ekranów. Zip window -- pozwala na powiëkszanie aktywnego okna na takiej samej zasadzie jak w funkcji ZOOM z programów rysunkowych. INFO (informacja) skîadnia dla systemu 1.2: INFO skîadnia dla systemu 1.3: INFO [] skîadnia dla systemu 2.0, 2.1, 3.0 i 3.1: INFO [[DEVICE]=] gdzie: n1 -- nazwa stacji dysków (np. df0:) lub nazwa zbioru, o którym chcemy uzyskaê informacjë. Pozwala na uzyskanie informacji (z poziomu WB) o dyskietce wîoûonej do stacji df0: lub o programie o podanej nazwie. W wypadku zastosowania rozkazu bez parametrów uzyskamy pewne informacje (w zaleûnoôci od konfiguracji Twojego systemu). Przykîadowo dla A1200 z twardym dyskiem o 4 partycjach i zamontowanymi stacjami PC0: i DS0: po wîoûeniu dyskietki nagranej w systemie OFS uzyskamy: ************** tu rysunek dos_1.pcx *********** wkîadajâc zaô të samâ dyskietkë do stacji nie rozbudowanej Amigi 500 otrzymamy: ************* tu rysunek dos_2.pcx ************* gdzie: UNIT -- oznacza nazwë dysku, SIZE -- wielkoôê sformatowanego dysku lub partycji w kilobajtach lub megabajtach, USED -- wielkoôê zajëtego miejsca, mierzonâ w blokach (1 blok to 512 bajtów), FREE -- pozostaîa iloôê wolnego miejsca, takûe w blokach, FULL -- procent zapeînienia dysku lub partycji, ERRS -- liczba bîëdów na dysku, STATUS -- aktualny stan dysku (moûe tu byê Read/Write, czyli zapis i odczyt, lub read only -- tylko odczyt, NAME -- nazwa dysku, VOLUMES AVAILABLE -- dostëpne urzâdzenia. Jeôli po nazwie wystëpuje sîowo [Mounted], oznacza to, ûe dane urzâdzenie jest zamontowane. UWAGA: Urzâdzenie nie zamontowane zjawia sië na takiej liôcie zazwyczaj wtedy, gdy uruchomimy jakiô program, który uûywa rozkazu Assign. Jeôli zaô skorzystamy z parametru, to jeûeli dany dysk jest zamontowany (lub dostëpny), otrzymamy tylko informacje, odnoszâce sië do tego dysku, ****************** tu rys dos_3.pcx ************** jeôli natomiast dysk nie jest zamontowany, na przykîad po wpisaniu INFO DF1: a nasza Amiga ma tylko jednâ, wbudowanâ, stacjë dyskietek, wówczas nie otrzymamy ûadnych informacji. Przy zastosowaniu jako parametru nazwy dysku zamontowanego, ale aktualnie "nieobecnego" przez, powiedzmy, INFO PC0: uzyskamy informacjë, ûe dysk chwilowo jest "nieczytelny", czyli nie jest wîoûony. ***** tu rysunek dos_4.pcx ******* Opcjami rozkazu sâ: DEVICE -- czyli waûna z punktu widzenia AmigaDOS definicja urzâdzenia (zostaîo to opisane dokîadnie przy rozkazie ASSIGN). INITPRINTER (zainicjalizuj drukarkë) Skîadnia dla wszystkich systemów: INITPRINTER Rozkaz ten nie ma parametrów i znajduje sië w katalogu systemowym (SYS:Utilities). Moûna go uruchamiaê zatem takûe przez klikniëcie na jego ikonie spod Workbencha. Wîaôciwie nie jest on uûywany, bo powoduje inicjalizacjë drukarki ustawionej w preferencjach (przez reset drukarki i wyczyszczenie jej bufora). Dotyczy to przewaûnie najstarszych typów drukarek. Star LC-10 i wszystkie popularne drukarki wyprodukowane póúniej inicjalizujâ sië automatycznie, jeôli wersja systemu operacyjnego Amigi jest wyûsza niû 1.2. Przewaûnie operacjë të moûna przeprowadziê takûe z panelu drukarki. Ponadto znacznie prostsza jest inicjalizacja drukarki za pomocâ rozkazu: COPY coôtam TO PRT: Uruchomienie rozkazu nie spowoduje ûadnej akcji na ekranie. Jeôli drukarka nie jest podîâczona do Amigi lub jest wyîâczona z sieci, pojawi sië komunikat o bîëdzie, jeôli jest "on-line", po chwili piônie i bëdzie juû moûna na niej drukowaê. INPUT (wprowadú) skîadnia dla systemów 2.0, 2.1 i 3.0:INPUT [FROM >n1<] [EDIT|USE|SAVE] skîadnia dla systemu 3.1:INPUT [FROM >n1<] [EDIT|USE|SAVE] [PUBSCREEN >n2<] gdzie: n1 -- to nazwa zbioru, w którym zapisane sâ ustawienia wstëpne, (presets), n2 -- nazwa, jakâ chcemy nadaê ekranowi publicznemu. W systemach 1.2 i 1.3 rozkaz ten nie wystëpuje. Wzorzec dla systemów 2.0, 2.1 i 3.0: FROM, EDIT/S, USE/S, SAVE/S Wzorzec dla systemu 3.1: FROM, EDIT/S, USE/S, SAVE/S, PUBSCREEN/K Jest to kolejny rozkaz, znajdujâcy sië w katalogu preferencji. Pozwala na zdefiniowanie dziaîania urzâdzeï wprowadzania danych, takich jak klawiatura czy mysz. Po uruchomieniu rozkazu pojawia sië na ekranie okno jak poniûej: ****** tu rysunek dos_5 **** Zbiór z danymi zostanie stworzony, jeôli klikniesz na gadûet SAVE, i domyôlnie bëdzie zapisany w katalogu ENV/Sys pod nazwâ INPUT.PREFS. Drugi ze zwiâzanych z tym rozkazem zbiorów, podobnie jak w wypadku wszystkich rozkazów "preferencyjnych", znajduje sië w katalogu SYS:Prefs/presets i musi tam zostaê zapisany rozkazem SAVE AS z rozwijanego menu okna INPUT. Menu to ma jeszcze kilka innych rozkazów, opisanych dokîadnie w ksiâûce "Amiga", wydanej przez Wydawnictwo LUPUS. Wyûej wymieniony zbiór zawiera nastëpujâce informacje: prëdkoôê dziaîania myszy, odstëp pomiëdzy klikniëciami, opóúnienie powtarzania klawiszy, czëstotliwoôê powtarzania i flagë przyspieszenia myszki. Parametrami rozkazu sâ: FROM -- nazwa zbioru (wraz ze ôcieûkâ dostëpu), w którym zapisane sâ preferencje dla funkcji INPUT. EDIT -- jeôli zastosujesz ten parametr w skrypcie, wówczas rozkaz otworzy okno podczas wykonywania takiego skryptu. USE -- ustawione preferencje bëdâ obowiâzywaîy od momentu uûycia w skrypcie tego parametru lub (jeôli otworzyîeô okno) od momentu klikniëcia na gadûet USE. SAVE -- preferencje ustawione lub wczytane ze zbioru, znajdujâcego sië w katalogu SYS:Prefs/presets, zostanâ zapisane w zbiorze do katalogu ENV/Sys. Przykîad: INPUT FROM SYS/PREFS/PRESETS/INPUT.PREF SAVE INSTALL (zainstaluj) skîadnia dla systemu 1.2: INSTALL [DRIVE] skîadnia dla systemu 1.3: INSTALL [DRIVE] [NOBOOT] [CHECK] skîadnia dla systemów 2.0, 2.1, 3.0 i 3.1: INSTALL [DRIVE] [NOBOOT] [CHECK] [FFS] gdzie: n1 -- nazwa stacji dysków, do której wkîadasz dyskietkë (df0: do df3:) w systemach 3.0 i 3.1 dla Amig wyposaûonych w gniazdo PCMCIA moûe wystëpowaê tu takûe nazwa urzâdzenia CC0: wzorzec dla systemu 1.2: DRIVE/A wzorzec dla systemu 1.3: DRIVE/A, NOBOOT/S, CHECK/S wzorzec dla systemów 2.0, 2.1, 3.0 i 3.1: DRIVE/A, NOBOOT/S, CHECK/S, FFS/S Zapisuje w tzw. bootblocku (blok uruchamiajâcy komputer) dane systemowe, umoûliwiajâce samodzielny start programów po wîoûeniu dyskietki do dostëpnej stacji dysków (lub z zainstalowanej karty PCMCIA). Nie moûna zainstalowaê dyskietki nie sformatowanej, nie powinno sië takûe instalowaê dyskietki zapisanej w standardzie innym niû AmigaDOS (na przykîad pecetowa czy "nieDOSowska"). Parametrami rozkazu sâ: DRIVE -- nazwa dysku do instalacji. NOBOOT -- jeôli uûyjesz tego parametru, a na dyskietce znajduje sië bootblock, zostanie on usuniëty. UWAGA: Jeôli spróbujesz w ten sposób zainstalowaê dysk nieDOSowski, wówczas na takim dysku bëdzie zapisany czysty bootblock, co skutecznie unieszkodliwi znajdujâcy sië tam program. CHECK -- sprawdza zgodnoôê danych, zapisanych w bootblocku, ze standardowym bootblockiem AmigaDOS. Poniewaû bootblock jest ulubionym miejscem na umieszczanie w nim wirusów przez lamerów nie potrafiâcych napisaê groúniejszego wirusa, moûna wykorzystaê të opcjë do wykrycia takiego typu wirusa. Naleûy jednak wykonywaê to ZAWSZE na kopii podejrzanego dysku. Wiele programów (a zwîaszcza ich spiracone wersje) ma tak zwany niestandardowy bootblock. Oznacza to, ûe oprócz potrzebnych danych znajdujâ sië tam inne informacje, wykorzystywane przez program. Rozkaz INSTALL z parametrem CHECK potraktuje taki dysk jako niestandardowy. Od systemu 2.0 w górë rozkaz generuje komunikaty systemowe w oknie Shella. W omawianym wypadku rozkaz wypisze komunikat: May not be a standard bootblock Nie naleûy jednak od razu byê pewnym, ûe na dysku usadowiî sië nie zidentyfikowany wirus, i usuwaê go. Przy takiej operacji mogâ bowiem zostaê wyrzucone z bootblocku wspomniane informacje, które niejednokrotnie sterujâ pracâ programu, i nasza wspaniaîa gra bëdzie do zmazania. Przykîad: install df0: CHECK instaluje sformatowany i zainstalowany wczeôniej (rozkazem INSTALL bez parametrów) dysk, znajdujâcy sië w stacji df0:, i sprawdza poprawnoôê bootblocku. Rozkaz INSTALL moûna takûe zastosowaê w skryptach. W takim wypadku przy napotkaniu niestandardowego bootblocku dla systemów od 2.1 w gorë zostanie wygenerowany kod WARN. W systemach starszych naleûy bezwzglëdnie zastosowaê w skryptach zawierajâcych INSTALL rozkaz FAILAT z parametrem co najmniej 11. FFS -- parametr ten dziaîa TYLKO w systemach od 2.0 do 2.04 i powoduje zainstalowanie bootblocku dla Fast File System. W starszych wersjach systemu nie wystëpuje, w nowszych zostaî zachowany, ale nie dziaîa.