System na talerzu (cz. 20.) --------------------------- AMIGA DOS Marek Pampuch Aby zrozumieê zasady dziaîania kilku nastëpnych rozkazów, niezbëdna jest teoria. Wiem, ûe to wyjâtkowo lubicie, ale przez samo automatyczne wklepanie podanych rozkazów na pewno nie nauczycie sië ich. Aby zapoznaê sië z tâ teoriâ, naleûy sië cofnâê o parë numerów i przeczytaê opis zmiennych ôrodowiskowych, zamieszczony przy rozkazie EVAL (jeôli tego jeszcze nie zrobiliôcie). Uûytkownicy Amig z systemem 1.2 mogâ natomiast spokojnie sobie to darowaê. Zmienne ôrodowiskowe bowiem, o których bëdzie mowa, nie sâ zainstalowane w tej wersji systemu operacyjnego. GET (pobierz [zmiennâ ôrodowiskowâ lokalnâ]) skîadnia dla systemów 2.0, 2.1, 3.0 i 3.1 : GET [NAME=] >n< gdzie n jest nazwâ zmiennej. W systemach 1.2 i 1.3 rozkaz ten nie wystëpuje. wzorzec dla systemów 2.0, 2.1, 3.0 i 3.1: NAME/A Pozwala na pobranie wartoôci zmiennej ôrodowiskowej lokalnej. Zmienna ôrodowiskowa lokalna to zmienna, która jest tworzona podczas pojedynczego zadania i nie jest przechowywana w katalogu ENV jak zmienne globalne. Poniewaû zmienne lokalne zostaîy wprowadzone dopiero od systemu 2.0, we wczeôniejszych wersjach systemu nie ma obsîugujâcych je rozkazów GET i SET. Naleûy jeszcze zwróciê uwagë na to, ûe w systemie 2.0 GET byî rozkazem niezbyt dobrze dopracowanym i dopiero od wersji 2.04 zaczâî dziaîaê jak naleûy. Zmienna lokalna moûe mieê takâ samâ nazwë jak zmienna globalna. Podczas przeszukiwania listy zmiennych o dwóch takich samych nazwach moûemy jednak zmieniê priorytet zmiennych. Jeôli dopiszemy na poczâtku operator $, spowoduje to, ûe najpierw bëdâ znalezione zmienne lokalne, a dopiero wtedy, gdy ich nie bëdzie -- zmienne globalne. Przykîad: SET zmienna lokalna SETENV zmienna globalna ECHO "zmienna jest $zmienna" Zmiennâ (parametr name) moûemy wpisaê dowolnymi literami. Jeôli ustawimy zmienne jak poniûej: SET zmienna lokalna SETENV zmienna globalna to GET zmienna wypisze nam na ekranie lokalna a GETENV zmienna da w efekcie globalna Wynik dziaîania rozkazu GET jest domyôlnie skierowany na konsolë (ekran). Nic nie stoi jednak na przeszkodzie, aby dokonaê redyrekcji. GETENV (pobierz [zmiennâ ôrodowiskowâ globalnâ]) skîadnia dla systemów 1.3, 2.0, 2.1, 3.0 i 3.1 : GETENV [NAME=] >n< gdzie n jest nazwâ zmiennej W systemie 1.2 rozkaz ten nie wystëpuje wzorzec dla systemów 1.3, 2.0, 2.1, 3.0 i 3.1: NAME/A Pozwala na pobranie zmiennej ôrodowiskowej globalnej (czyli zmiennej ustawionej przez SETENV). Dziaîa w sposób taki sam jak opisane wyûej GET. Czësto jest uûywana takûe do niebezpoôredniego okreôlania danych, na przykîad, jeôli po wpisaniu: SETENV zmienna 5 SETENV licz zmienna zechcemy mieê zmiennâ bezpoôredniâ, wpisujemy: getenv zmienna lub getenv licz a dla zmiennej poôredniej wpiszemy getenv $licz UWAGA: Nieumiejëtne stosowanie parametru $ w rozkazie GETENV moûe spowodowaê zmiany w wartoôciach domyôlnych zmiennych systemowych (pamiëtajmy o tym, ûe na przykîad DELETE dElEtE czy delete -- dla rozkazu oznacza to samo), a to spowoduje wîâczenie sië dodatkowego, nie uwzglëdnionego w instrukcjach, trybu grafiki ekranowej. Nie bëdzie to jednak efekt poûâdany przez uûytkownika. GRAPHICDUMP ("zrzut" grafiki) skîadnia dla systemu 1.2: GRAPHICDUMP skîadnia dla systemów 1.3, 2.0, 2.1, 3.0 i 3.1: GRAPHICDUMP [par] gdzie w miejsce par wpisujemy jeden z poniûszych parametrów: tiny, small, medium, large, x:y. Uûycie tego rozkazu spowoduje "zrzucenie" aktualnej zawartoôci ekranu na drukarkë po 10 sekundach od wprowadzenia rozkazu (na przykîad przez dwukrotne klikniëcie na ikonie rozkazu, znajdujâcego sië w katalogu SYSTEM: TOOLS). Po co taka zwîoka? Przypuôêmy, ûe nasza drukarka jest wspaniaîa, niestety, ks. Pikul nie napisaî do niej jeszcze sterownika. A tymczasem potrzebujemy pilnie wydrukowaê tekst, napisany na przykîad Final Writerem. A zatem najpierw uruchamiamy z Workbencha Final Writer i piszemy, co nam ôlina na klawisze przyniesie. Nastëpnie naciskajâc jednoczeônie klawisze [Amiga] i [M] wracamy na ekran Workbencha, z którego uruchamiamy GRAPHICDUMP (klikniëciem na ikonie lub wpisujâc rozkaz z poziomu Shella). Teraz mamy 10 sekund na to, aby (za pomocâ klawiszy [Amiga] i [M]) wróciê do ekranu Final Writera. W tym czasie zdâûy nawet "siîa spokoju". Uruchamiajâc rozkaz z CLI/SHELLA moûemy skorzystaê z dodatkowych parametrów. Oznaczajâ one: TINY -- szerokoôê wydruku wyniesie 1/4 szerokoôci dopuszczanej przez drukarkë. Wysokoôê bëdzie obliczona tak, aby zachowaê stosunek szerokoôci i wysokoôci obrazka (aspect ratio). Oznacza to, ûe wydruk bëdzie wielkoôci êwiartki oryginaîu. SMALL -- jak wyûej, tyle ûe szerokoôê bëdzie równa poîowie szerokoôci oryginaîu. MEDIUM -- podobnie, z tym ûe szerokoôê bëdzie ustawiona na 3/4 szerokoôci oryginaîu. LARGE -- oryginaî bëdzie wydrukowany z maksymalnâ szerokoôciâ, na jakâ pozwala drukarka. Ten parametr jest ustawiony domyôlnie. xx:yy -- jeôli w miejsce xx podasz szerokoôê, a w miejsce yy -- wysokoôê w pikselach, bëdziesz mógî otrzymaê dowolne wymiary wydruku (oczywiôcie w granicach dopuszczanych przez drukarkë). Obie liczby muszâ byê oddzielone dwukropkiem, na przykîad: GRAPHICDUMP 600:300 Pamiëtaj przy tym, ûe piksel ekranowy i piksel drukarki to zupeînie nie to samo. UWAGA: jeôli chcemy, aby GRAPHIC DUMP zastosowaîo jakikolwiek z powyûszych parametrów, musimy wczeôniej, w preferencjach, ustawiê opcjë LIMITS wydruku na parametr IGNORE. W przeciwnym bowiem razie bez wzglëdu na to, co wpiszemy przy GRAPHICDUMP, powstanie wydruk z parametrami ustawionymi w preferencjach. Wyjâtkowo zabawny rezultat daje teoretycznie moûliwa próba wykorzystania rozkazu do zrzucania ekranów. Jeôli bowiem wpiszemy: CMD >RAM:OBRAZEK GRAPHICDUMP to po kilkudziesiëciu sekundach pojawi sië komunikat, ûe sâ problemy z drukarkâ. Jeôli jednak zignorujemy go i zajrzymy do RAM-u, to bëdzie tam zbiór "obrazek", tyle ûe bëdzie on zawieraî instrukcjë posîugiwania sië rozkazem CMD! (Wszystkim ewentualnym krytykom zwracam uwagë, ûe mogîem opuôciê nazwë urzâdzenia w rozkazie, bo domyôlnie jest przyjëta nazwa urzâdzenia parallel, a taka jest moja drukarka.) Jeôli natomiast wprowadzimy redyrekcjë jako tool type w ikonie, obrazek zostanie zapisany na RAM-dysku, ale w formacie uniemoûliwiajâcym odtworzenie go na czymkolwiek (chyba ûe za pomocâ rozkazu COPY TO PRT:). ICONEDIT (Edytor ikon) skîadnia dla systemów 2.1, 3.0 i 3.1: ICONEDIT Rozkaz nie ma parametrów Wywoîuje edytor ikon. Nie ma ûadnych parametrów. Të samâ czynnoôê moûna wykonaê z poziomu Workbencha, klikajâc na ikonie IconEdit w szufladzie preferencji. Na ekranie pojawi sië menu edytora ikon. Sposób obsîugi takiego edytora opisany jest w Magazynie AMIGA nr 12/93 i w ksiâûce "Amiga", wydanej przez Wydawnictwo LUPUS. ICONTROL (I[ntuition] Control -- preferencje Intuition) skîadnia dla systemu 2.0: ICONTROL [[FROM=] >n1< [EDIT] [USE] [SAVE] skîadnia dla systemów 2.1, 3.0 i 3.1: ICONTROL [[FROM=] >n1< [EDIT] [USE] [SAVE] [PUBSCREEN= >s<] gdzie n1 to nazwa zbioru, w jakim zapisane sâ preferencje, s zaô to nazwa ekranu publicznego, na jakim majâ zostaê otwarte. wzorzec dla systemu 2.0: FILE/A, EDIT/S, USE/S, SAVE/S wzorzec dla systemów 2.1, 3.0 i 3.1: FILE/A, EDIT/S, USE/S, SAVE/S, PUBSCREEN/K w systemach 1.2 i 1.3 rozkaz ten nie wystëpuje. Pozwala na ustawienie preferencji dla Intuition. Obejmujâ one niektóre opcje klawiatury przy obsîudze komunikatów systemowych (requesterów), niektóre parametry dla wyôwietlania i dla menu itp. Rozkaz znajduje sië w katalogu SYS: Prefs. Uruchomienie IControl powoduje, ûe pojawa sië okno edytora. Ustawione nim preferencje mogâ byê uûywane (USE) do momentu zresetowania lub wyîâczenia komputera lub zapisane na dysku w formacie IFF. Domyôlne nazwy zbiorów to prefs/ENV-archive/Sys/icontrol.prefs oraz prefs/presets/icontrol.pre. Zbiory te moûna oglâdaê w sposób identyczny z podanym w opisie rozkazu FONT. Wystarczy zmieniê nazwë zbioru i ôcieûkë. Zbiór ICTL moûe byê takûe wczytany za pomocâ rozkazu ICONTROL i poprawiony. Wartoôci znajdujâce sië w tym zbiorze to: Verify timeout (sprawdzanie czasu odîâczania urzâdzeï), Mouse screen drag bits (bity do zapamiëtania przesuwania ekranów za pomocâ myszki), Coercion lower nybble, (niûszy bit koercji), Workbench to front qualifier (okreôlenie klawisza, który wysuwa naprzód ekran Workbencha), Front screen to back qualifier (okreôlenie klawisza, który bëdzie chowaî aktywny ekran), Requester OK qualifier (okreôlenie klawisza, który przy komunikacie systemowym bëdzie dziaîaî jak klikniëcie na OK), Requester cancel qualifier (okreôlenie klawisza, który przy komunikacie systemowym bëdzie dziaîaî jak klikniëcie na gadûet wycofania sië), Screen scroller (okreôlenie klawisza przesuwajâcego ekran), Force no lace (programowe wyîâczenie interlejsu) -- dziaîa tylko na monitorach, które majâ takâ moûliwoôê, Preserve color (wymuszenie zachowania kolorów), Force screen mode (wymuszenie zachowania trybu graficznego), Menu memory (pamiëê dla menu ekranu). UWAGA: Funkcje te sâ przeznaczone dla zaawansowanych programistów i nie radziîbym z nimi eksperymentowaê Parametrami rozkazu sâ: FROM -- okreôla ôcieûkë dostëpu i nazwë zbioru z preferencjami ICONTROL; EDIT -- otwiera okno umoûliwiajâce wprowadzenie zmian; USE -- pozwala na korzystanie z ustawieï wczytanych rozkazem ICONTROL do momentu wyîâczenia komputera lub zresetowania go; SAVE -- pozwala na zapisanie preferencji w katalogu prefs/ENV-archive/Sys. ICONX (ICON [e]X[ecute] -- uruchamianie zbioru za pomocâ ikony Skîadnia dla systemów 1.3, 2.0, 2.1, 3.0 i 3.1: ICONX w systemie 1.2 rozkaz ten nie wystëpuje. Jest to jedyny rozkaz AmigaDOS, który da sië uruchomiê... wyîâcznie z poziomu Workbencha. Moûna powiedzieê, ûe jest on "pomostem" pomiëdzy Workbenchem a AmigaDOS, poniewaû pozwala na uruchomienie, napisanej w AmigaDOS, sekwencji rozkazów za pomocâ ikony typu Project. Kiedy, po co i jak przygotowaê takâ sekwencjë (skrypt) do uruchamiania za pomocâ ikony? Najprostszym i najczëôciej uûywanym zastosowaniem jest sytuacja, gdy mamy jakiô zbiór, napisany w postaci "wykonywalnej" (na przykîad "moondemo.exe". Moûna oczywiôcie wówczas wpisaê w Shellu nazwë tego zbioru i nacisnâê [Return], moûna tez uruchomiê go w inny sposób (na przykîad opcjâ EXECUTE z Directory Opusa). Jednak najbardziej eleganckim rozwiâzaniem bëdzie stworzenie piëknej ikonki (powiedzmy, z ksiëûycem) i napisanie wyjâtkowo skomplikowanego skryptu, skîadajâcego sië z jednego wiersza, a nastëpnie poîâczenie tego wszystkiego w caîoôê za pomocâ IconX. Bierzmy sië zatem do roboty. Tworzymy (dowolnym edytorem ikon albo programem majâcym takie moûliwoôci, jak ImageFX czy Personal Paint) ikonë i zapisujemy jâ na dysku pod dowolnâ nazwâ z rozszerzeniem .info. Ikona musi byê typu Project. Jeôli nie wiecie, jak sië tworzy tego typu ikony, najlepiej najpierw skopiowaê dowolnâ ikonë takiego typu (od jakiegokolwiek programu) i pozmieniaê jâ wspomnianymi programami wedle gustu. Teraz dowolnym edytorem piszemy skrypt majâcy uruchamiaê nasz zbiór, na przykîad: moondemo.exe i zapisujemy go na dysku pod takâ samâ nazwâ, jakâ ma ikona (juû bez rozszerzenia). Nastëpnie przechodzimy do Workbencha, znajdujemy naszâ ikonë, klikamy na niej raz, a nastëpnie z menu Workbencha wybieramy opcjë INFO (dla systemu 1.3) lub Information (dla pozostaîych systemów). Pojawi sië okno. Znajdujemy w nim pole, podpisane DEFAULT TOOL, i wpisujemy w nim: C:ICONX a nastëpnie zapisujemy opcjâ SAVE tak poprawionâ ikonë. Oczywiôcie sposób taki moûna zastosowaê do dowolnego skryptu AmigaDOS. Nie zawsze uda sië natomiast bezpoôrednie uruchomienie w taki sposób zbioru binarnego. Wystarczy bowiem, ûe bëdzie on otwieraî wîasny (niepubliczny) ekran i juû IconX nie zadziaîa. Moûemy natomiast wzbogaciê nasz skrypt. Przykîadowo, jeôli najpierw przygotujemy "preset", zmieniajâcy paskudny systemowy topaz na jakâô îadniejszâ czcionkë, moûemy dopisaê (przed rozkazem uruchamiajâcym ikonë): SYS:Prefs/Font FROM SYS:Prefs/presets/font.pre USE Jeôli natomiast chcemy nadaê naszej aplikacji wysoki priorytet, moûna uzupeîniê skrypt o: CHANGETASKPRI 5 IconX pozwala na stosowanie w skryptach dowolnego rozkazu AmigaDOS, a zatem to, w jaki sposób zgîosi sië nasz program, bëdzie zaleûaîo tylko od Was. Moûna dodatkowo zmieniê parametry okna, jakie otworzy sië po wywoîaniu skryptu rozkazem ICONX. Nie jest to jednak moûliwe z poziomu AmigaDOS, a tylko spod Workbencha. W tym celu trzeba kliknâê raz na ikonë, którâ chce sië przypisaê do swojego skryptu, i uûyê opcji INFO (dla systemu 1.2 i 1.3) lub INFORMATION (dla pozostaîych systemów) z menu na poprzeczce tytuîowej. Do rubryki TOOL TYPES moûna wpisaê w kolejnych wierszach: WINDOW=>opis okna< gdzie w miejsce opisu okna moûesz podaê dowolny prawidîowy opis okna AmigaDOS, na przykîad: WINDOW=CON:0/0/100/200/Instalacja czy WINDOW=AUX: UWAGA: Poniewaû wpisywanie odbywa sië tu nie z poziomu AmigaDOS, a z poziomu Workbencha, naleûy zwróciê uwagë, ûe w tym miejscu komputer zareaguje na "niewîaôciwâ" wielkoôê czcionki (to znaczy, gdy coô, co ma byê duûâ literâ, napiszemy maîâ czy odwrotnie). Czasem chcemy, aby nasze okno pozostaîo jakiô czas na ekranie. W tym celu w opisie skorzystamy z parametru. DELAY=>pp< gdzie w miejsce "pp" wpiszemy czas, okreôlony liczbâ ramek obrazu (1/50 sekundy), jaki ma upîynâê przed zamkniëciem tak zdefiniowanego okna. Jeôli podamy jako "ss" wartoôê 0, okno zniknie dopiero wówczas, gdy zostanie naciôniëta kombinacja klawiszy [Ctrl][C]. Przykîadowo -- jeôli chcemy, aby nasze okno zniknëîo po 5 sekundach, wpisujemy DELAY=250. Od systemu w wersji 2.1 wîâcznie moûna korzystaê z dodatkowych parametrów, okreôlajâcych otwierane przez ICONX okno. Sâ to: STACK=>nnnn< -- pozwala na zdefiniowanie wielkoôci stosu dla uruchamianego z ikony programu. Jeôli opuôcimy ten parametr, wówczas domyôlnie zostanie przyjëta wartoôê 4096 (a dla wielu programów to zbyt maîo). USERSHELL -- pozwala na uruchomienie programu, korzystajâcego z innego Shella niû firmowy. Przykîad: USERSHELL=YES WAIT=>ss< róûni sië od opisanego wczeôniej parametru DELAY tym, ûe tu czas podajemy w caîych sekundach, a zatem zamiast DELAY=250 moûemy uûyê WAIT=5, co da taki sam efekt. Ponadto w systemach 2.1, 3.0 i 3.1 definicja Tool Type, opisujâcego okno, jest nieco rozbudowana. Dodatkowe parametry w opisie okna to: AUTO -- jeôli zastosujemy ten parametr, wówczas okno zostanie otwarte tylko wówczas, gdy nasz skrypt wypuszcza cokolwiek na ekran. Jeôli natomiast wykonuje on jakieô rozkazy "niewidoczne" (na przykîad FIXFONS), wówczas okno nie zostanie otwarte. Przykîad: WINDOW CON:0/0/100/100/Moje_okno/AUTO CLOSE -- okno otwarte przez ICONX z tym parametrem bëdzie miaîo gadûet zamykajâcy to okno. Parametr ten jest przyjëty domyôlnie w opisie okna, moûna go zatem opuôciê. WAIT -- parametr ustawiony domyôlnie. Okno otwarte przez IconX bëdzie na ekranie tak dîugo, dopóki bëdzie wykonywany skrypt. Oczywiôcie pod warunkiem, ûe nie ustalimy innego czasu za pomocâ Tool Type DELAY lub WAIT (swojâ drogâ, jestem ciekaw, co to za geniusz nazwaî tak samo dwie róûne opcje tego samego rozkazu). IconX ma jeszcze jedno, doôê szokujâce, zastosowanie. Jeôli rozpoczniemy nasz skrypt wierszem, w którym bëdzie sië znajdowaî tylko symbol: .KEY wówczas ze skryptu dla IconX bëdziemy mogli uruchamiaê takûe i te programy, które juû majâ swoje ikony! Nazwy takich programów bëdâ wówczas traktowane jako zmienne. Po co to komu? -- pomyôlicie. Wbrew pozorom jest to wyjâtkowo poûyteczne, jeôli na przykîad ikona jakiegoô programu ma juû caîkowicie wypeînione pole dla Tool Types (spotkaîem sië juû z takimi programami), a koniecznie trzeba dopisaê mu jeszcze jakiô inny.