System na talerzu (cz. 15.) --------------------------- AMIGA DOS Marek Pampuch EDIT skîadnia dla systemów 1.2 i 1.3: EDIT [FROM] >n1< [[TO] >n2<] [WITH] >n3<] [VER] >n4<] [OPT P n5 | W n6 | P n5 W n6] gdzie: n1 to nazwa edytowanego zbioru, n2 -- nazwa zbioru, w jakim chcesz zapisaê wynik edycji (jeôli pominiesz ten parametr, wówczas po zakoïczeniu edycji poprawiony zbiór zostanie zapisany w tymczasowym zbiorze w katalogu T:), n3 to nazwa urzâdzenia, z jakiego majâ byê pobierane rozkazy edytora (domyôlnie ustawiona jest tu konsola, oznacza to, ûe znaki wprowadzasz stukajâc w klawisze), n4 zaô to nazwa urzâdzenia, na jakie majâ byê wyprowadzane wyniki edycji (tu takûe domyôlnie ustawiona jest konsola). Parametr n5 okreôla liczbë wierszy bufora (domyôlnie 40), n6 zaô -- dîugoôê wiersza edytora (domyôlnie 120). skîadnia dla systemów 2.0, 2.1 , 3.0 i 3.1: EDIT [FROM] >n1< [[TO] >n2<] [WITH] >n3<] [VER] >n4<] [OPT P >n5< | W >n6< | PREVIOUS >n5< | WIDTH >n6< gdzie: PREVIOUS na takie samo znaczenie jak OPT P, WIDTH zaô oznacza to samo co OPT W. Uwaga: Mimo, ûe oba znaczâ to samo, niedopuszczalne jest mieszanie tych parametrów. Nie wolno, na przykîad, wpisaê: OPT P 10 WIDTH 40 Naleûy konsekwentnie trzymaê sië jednego z tych dwóch wybranych sposobów opisania powyûszych parametrów. wzorzec dla systemów 1.2 i 1.3: FROM/A, TO, WITH/K, VER/K, OPT/K wzorzec dla systemów 2.0, 2.1 , 3.0 i 3.1: FROM/A, TO, WITH/K, VER/K, OPT/K, PREVIOUS/K, WIDTH/K Ten rozkaz uruchamia edytor wierszowy. Co to takiego? Jest to coô dla komputerowych dinozaurów, przeûytek z czasów, w których komputery nie miaîy monitorów, caîa zaô "interaktywna komunikacja" odbywaîa sië za pomocâ drukarki. Edytor wierszowy nie otwiera wîasnego okna, a caîa komunikacja z nim odbywa sië na poziomie konsoli. Kursor jest niewidoczny dla uûytkownika. Moûna przyjâê, ûe EDIT odpowiada pecetowemu edytorowi o nazwie "edlin". Jest to zdecydowanie mniej wygodny sposób porozumiewania sië z komputerem. Niemniej, edytor ten pozostawiono w systemie operacyjnym wszystkich Amig (chyba tylko po to, aby daê satysfakcjë wspomnianym dinozaurom). Jedyne zauwaûalne zalety edytora EDIT to, ûe moûe pracowaê ze znacznie wiëkszymi zbiorami niû edytor ED, i to nawet na Amigach, które majâ 512 KB pamiëci, oraz to, ûe jest nieco szybszy i to, ûe w pewnym stopniu moûna nim edytowaê zbiory zawierajâce dane binarne. Ma takûe nieco wiëcej rozkazów. Moim zdaniem jest jednak przeûytkiem z czasu tranzystora îupanego. Edytor wywoîujemy wpisujâc (na przykîad): EDIT df0:s/startup-sequence W tym momencie na ekranie pojawi sië napis: Editor : i teraz naleûy wpisaê (w zaleûnoôci od potrzeb) jeden z nastëpujâcych rozkazów lub parametrów: ' (apostrof) -- powoduje powtórzenie poprzednio uûytego rozkazu zaczynajâcego sië na literë A, B lub E. ; (ôrednik) -- zazwyczaj stosuje sië jeden rozkaz w jednym wierszu. Jeôli chcesz umieôciê ich tam wiëcej -- wówczas musisz rozdzieliê rozkazy ôrednikiem. ? (pytajnik) -- wyôwietla aktualny wiersz. ! (wykrzyknik) -- jak wyûej. Wyôwietlone zostanâ takûe znaki "niedrukowalne". Znaki ASCII, które nie sâ dostëpne wprost z klawiatury, bëdâ zastâpione przez ich heksadecymalne odpowiedniki, pozostaîe znaki zostanâ zastâpione przez znak minus. =n -- powoduje przejôcie kursora do wiersza o numerze n. n(.....) -- powoduje n-krotne powtórzenie rozkazu zawartego w nawiasach. Jeôli n jest równe zero, wówczas rozkaz bëdzie powtarzany nieskoïczonâ liczbë razy. ------------****** UWAGA NA TAGI !!!!! *****------------- n< -- przesuwa kursor o n znaków w lewo (domyôlnie, przy uûyciu tylko znaczka < (mniejsze niû) n=1). n> -- przesuwa kursor o n znaków w lewo (domyôlnie n=1). -----------******* KONIEC UWAGI NA TAGI *********------------- n# -- usuwa n znaków za aktualnym poîoûeniem kursora (domyôlnie, przy opuszczonym n usuwa 1 znak). n$ -- n znaków za kursorem zostanie zamienione na maîe litery (domyôlnie 1). n% -- n znaków za kursorem zostanie zamienione na duûe litery (domyôlnie 1). n_ -- n znaków za kursorem zostanie zastâpionych spacjami (domyôlnie 1). A/nnnn/mmmm -- tekst nnnn zostanie zastâpiony przez tekst mmmm. Jeôli tekst mmmm zawiera spacje na koïcu -- zostanâ one równieû zamieszczone. Poîoûenie kursora sië nie zmieni. AP/nnnn/mmmm -- jak wyûej, z tym ûe kursor zostanie ustawiony za ostatnim znakiem zmienionego tekstu. B/nnnn/mmmm -- jak rozkaz A, z tâ róûnicâ, ûe tekst bëdzie przeszukiwany "wstecz" (od poîoûenia kursora do poczâtku tekstu). Sam kursor nie zmieni swojego poîoûenia. BP/nnnn/mmmm -- jak wyûej, z tym ûe kursor zostanie ustawiony przed pierwszym znakiem zmienionego tekstu. BF/nnnn/ -- spowoduje szukanie îaïcucha nnnn "wstecz", to znaczy od poîoûenia kursora do poczâtku tekstu. C.nnnn -- dalsze rozkazy dla edytora bëdâ doczytane z urzâdzenia o nazwie nnnn. CF.nnnn -- koïczy doczytywanie rozkazów z urzâdzenia o nazwie nnnn i przekazuje kontrolë nad wprowadzaniem rozkazów z powrotem do edytora. CG n -- wyîâcza operacjë globalnâ o numerze n. Operacja globalna jest to automatyczne wykonanie przez komputer rozkazu dotyczâcego caîoôci tekstu. W wypadku wystâpienia bîëdu podczas wykonywania operacji globalnej dotychczasowe wyniki edycji bëdâ zapisywane i nastâpi wyjôcie z edytora. Jeôli nie podamy parametru n, wówczas wyîâczone zostanâ wszystkie uruchomione do tego momentu operacje globalne. CL/nnnn -- wsuwa tekst nnnn pomiëdzy wiersz aktualny a nastëpny. Wiersz aktualny to taki, w którym znajduje sië niewidoczny dla uûytkownika kursor. Jeôli pominiemy parametr nnnn, wówczas oba te wiersze zostanâ poîâczone. Jeôli zastosujesz të funkcjë do ostatniego wiersza tekstu -- edytor padnie. D -- usuwa aktualny wiersz. DF/nnnn/ -- usuwa wszystkie wiersze pomiëdzy wierszem aktualnym a wierszem, w którym znajduje sië rozkaz nnnn. Jeôli opuôcimy parametr nnnn, zostanâ skasowane wszystkie wiersze aû do ostatniego, w którym znajduje sië dowolny îaïcuch tekstowy, a jeôli takiego w dalszym tekôcie juû nie ma -- do koïca tekstu lub do znacznika koïca tekstu (jeûeli ten ostatni jest ustawiony). DFA/nnnn/ -- usuwa znaki od pierwszego za tekstem nnnn do koïca wiersza. DFB/nnnn -- usuwa znaki od pierwszego w wierszu do tekstu nnnn. DG n -- zawiesza operacjë globalnâ o numerze n. Jeôli nie podamy parametru n, wówczas zawieszone zostanâ wszystkie uruchomione do tego momentu operacje globalne. DTB/nnnn/ -- usuwa znaki od poczâtku wiersza do ostatniego poprzedzajâcego tekst nnnn wystëpujâcy w tym wierszu. DTA/nnnn -- jak wyûej, z tym ûe usuniëty bëdzie takûe tekst nnnn. E/nnnn/mmmm -- wstawia tekst mmmm zamiast tekstu nnnn. Kursor zostanie w miejscu, w którym sië znajdowaî. EP/nnnn/mmmm -- jak wyûej, z tym ûe kursor zostanie ustawiony na koïcu zamienionego tekstu. EQ/nnnn/mmmm -- jak rozkaz E, z tym ûe zostaniesz zapytany o to, czy na pewno chcesz wymieniê tekst. EG n -- przywraca dziaîanie operacji globalnej, zawieszonej rozkazem DG, lub wszystkich operacji (gdy pominiesz parametr n). F nnnn -- ustawia kursor na poczâtku wiersza zawierajâcego rozkaz nnnn. Jeôli pominiesz parametr nnnn, to: -- jeûeli uûyîeô rozkazu F po raz pierwszy od uruchomienia edytora, kursor zostanie ustawiony na poczâtek tekstu; -- jeôli robisz to po raz kolejny, kursor zostanie ustawiony na poczâtku wiersza zawierajâcego ostatnio uûyty îaïcuch. FROM.mmmm -- zmienia nazwë tekstu úródîowego na mmmm. Jeôli pominiesz parametr .mmmm wówczas zostanie wczytany zbiór, który do tej pory edytowaîeô (rzecz jasna, bez wprowadzonych zmian). GA/nnnn/mmmm -- tekst nnnn zostanie zastâpiony przez tekst mmmm globalnie, to znaczy we wszystkich miejscach tekstu, w jakich wystëpuje. Nie naleûy stosowaê tej opcji przy przeszukiwaniu "do tyîu". W systemach 2.0 i wyûszych znacznie poprawiono szybkoôê dziaîania tego rozkazu (jak i pozostaîych rozkazów "na G"). GB/nnnn/mmmm -- jak rozkaz GA, z tâ róûnicâ, ûe kursor zostanie ustawiony nie na poczâtku zmienionego tekstu, ale na poczâtku wiersza poprzedzajâcego ostatnie miejsce wystëpowania zmienianego tekstu. GE/nnnn/mmmm -- wstawia tekst mmmm zamiast tekstu nnnn we wszystkich miejscach, gdzie wystëpuje. Kursor zostanie ustawiony na poczâtku ostatniego wiersza, w którym wystëpuje zmieniany tekst. Hn -- ustawia "ograniczenie" w linii n. Tego rozkazu uûywa sië podczas edycji zbiorów zawierajâcych dane binarne. H* -- usuwa "ograniczenie" wprowadzone rozkazem Hn. I -- pozwala na wprowadzanie pustych wierszy przez naciskanie klawisza [Return]. Umoûliwia takûe pobieranie znaków z doîâczonego komputera. Aby przerwaê dziaîanie rozkazu, naleûy nacisnâê jednoczeônie klawisze [Ctrl] i [C]. I n.mmmm -- wstawia przed wierszem o numerze n zawartoôê zbioru tekstowego o nazwie mmmm (w nazwie naleûy podaê ôcieûkë dostëpu). Jeôli pominiesz parametr n, tekst taki zostanie dopisany na poczâtku zbioru, jeôli zaô pominiesz oba parametry, wówczas przed wierszem aktualnym zostanie utworzony pusty wiersz. M n -- podobnie jak rozkaz "=n" spowoduje przeskok kursora na poczâtek wiersza o numerze n. Jeôli n jest wiëksze niû aktualna liczba wierszy, wówczas wystâpi komunikat o bîëdzie. M + -- skok do pierwszego wiersza. M - -- skok do ostatniego wiersza. N -- skok do nastëpnego wiersza. P -- skok do poprzedniego wiersza. PA/nnnn/ -- przesuwa kursor za tekst nnnn. W systemach od 2.1 w górë moûna spowodowaê wielokrotne zadziaîanie tego rozkazu przez: -------------***** UWAGA NA TAGI **********------------- n(PA/nnnn/;>) PB/nnnn/ -- przesuwa kursor przed tekst nnnn. W systemach od 2.1 w górë moûna spowodowaê wielokrotne zadziaîanie tego rozkazu przez: n(PA/nnnn/;<) ------------***** koniec uwagi na tagi *****---------------- Q -- przerwanie edycji i zapis wyników edycji do zbioru. R -- pozwala na wprowadzanie znaków z doîâczonego komputera. Wprowadzane znaki bëdâ zastëpowaê znaki edytowanego tekstu poczâwszy od miejsca, w którym znajduje sië kursor. Aby przerwaê dziaîanie rozkazu, naleûy nacisnâê jednoczeônie klawisze [Ctrl] i [C]. R m n ssss -- zamienia tekst, znajdujâcy sië w wierszach pomiëdzy m i n wîâcznie, na tekst, znajdujâcy sië w zbiorze tekstowym o nazwie ssss. REWIND -- wyîâcza operacje globalne i ustawia kursor na poczâtku edytowanego tekstu. SA/mmmm/ -- przenosi wszystko, co znajduje sië w wierszu za tekstem mmmm, do nastëpnego wiersza. Kursor przechodzi do nowego wiersza. SB/mmmm/ -- przenosi wszystko, co znajduje sië w wierszu przed tekstem mmmm, do nastëpnego wiersza. Kursor przechodzi do nowego wiersza. SHD -- wyprowadza na urzâdzenie wyjôciowe aktualne wartoôci parametrów. SGH -- wyprowadza na urzâdzenie wyjôciowe informacje o wszystkich uûywanych operacjach globalnych wraz z numerami tych operacji. STOP -- przerwanie edycji i wyjôcie z edytora bez zapisu zbioru wynikowego. T -- wyôwietla wszystkie wiersze od tego, w którym jest kursor do koïca zbioru. T n -- wyôwietla n wierszy tekstu, poczynajâc od wiersza, w którym jest kursor. TL n -- jak rozkaz T n, jednak dodatkowo zostanâ wyôwietlone numery wierszy. TN -- wyôwietla tyle wierszy, rozpoczynajâc od wiersza, w którym jest kursor, ile jest ustawione parametrem P n (jeôli nie ustawiaîeô tego parametru, zostanie wyôwietlone domyôlne 40 wierszy, z czego na ekranie zobaczysz ostatnie 30). TO.nnnn -- zmienia nazwë zbioru wynikowego na nnnn (domyôlnie przyjëta jest nazwa taka, jakâ ma zbiór edytowany). TP -- jak rozkaz TN, z tym ûe tekst wyôwietlany jest od poczâtku. TR + -- wîâcza usuwanie koïcowych spacji (trailing spaces). TR - -- wyîâcza usuwanie spacji na koïcu. V + -- wîâcza weryfikacjë (czyli wypisywanie wyniku ostatniego rozkazu). Przy pracy z klawiatury powinna byê ona wîâczona, chyba ûe lubisz randkë z edytorem w ciemno. V - -- wyîâcza weryfikacjë. W -- zakoïczenie edycji z zapisem zbioru wynikowego. Z nnnn -- ustawia znacznik koïca zbioru przed tekstem nnnn, przykîad: EDIT df0:test VER PRT:OPT P10 W80 Jeôli po wprowadzeniu takiego rozkazu dokonamy poprawek w zbiorze test, to po wyjôciu z edytora zostanie wydrukowane na drukarce (nie zapomnij jej wczeôniej wîâczyê!) pierwsze 10 wierszy edytowanego zbioru. Kaûdy wiersz bëdzie liczyî 80 znaków, a jeôli bëdzie dîuûszy, wówczas przy wyjôciu pojawi sië komunikat, ûe wiersz ten zostaî obciëty. Jednak, wbrew pozorom, komunikat ten nie zawsze bëdzie zgodny ze stanem faktycznym -- wszystko zaleûy bowiem od tego, czy nasz tekst zmieôciî sië w caîoôci w buforze liczâcym n5 * n6 znaków (gdzie n5 i n6 to odpowiednie parametry rozkazu EDIT). Przy korzystaniu z edytora EDIT naleûy jeszcze zwróciê uwagë na nastëpujâce sprawy: -- EDIT nadaje zbiorowi tymczasowemu w T: nazwë takâ, jakâ ma zbiór edytowany. Jeôli nie uûyjesz parametru TO z nazwâ zbioru, jaki ma mieê on po edycji, wówczas mogâ wystâpiê pewne komplikacje (to znaczy padniëcie edytora). Jeôli zatem chcesz, aby wynik edycji zostaî zapamiëtany pod innâ nazwâ, zawsze uûywaj opcji TO z nowâ nazwâ. Nie powinno sië takûe nadawaê za pomocâ opcji TO zbiorowi wynikowemu takiej samej nazwy, jakâ ma zbiór edytowany, zwîaszcza gdy zbiór wynikowy ma sië znaleúê na dysku. W takim wypadku lepiej pominâê opcjë TO, a nastëpnie przegraê z katalogu T: wyedytowany zbiór. -- Pierwsze wersje systemu operacyjnego 2 (do 2.03) majâ bîâd uniemoûliwiajâcy pracë wszystkich rozkazów, w których wystëpujâ kropki. -- Od systemu 2.0 w górë katalog T: jest tworzony przez EDIT automatycznie (jeôli nie ma go w RAM-ie). Jeôli masz starsze systemy, wówczas przed rozpoczëciem pracy musisz taki katalog stworzyê. ELSE (w innym wypadku) skîadnia dla systemów 1.2, 1.3, 2.0, 2.1 , 3.0 i 3.1: ELSE Jest to klauzula dla rozkazu IF...THEN pozwalajâca na wykonanie wariantu rozkazu bez speînienia warunku przy IF. Rozkazu ELSE moûna uûywaê tylko w skryptach AmigaDOS (a nie w rozkazach wprowadzanych "z rëki"). Rozkaz nie ma argumentów (i stâd brak wzorca przy tym rozkazie). Przykîad: TYPE "Na dysku sâ gry Rambo i Superman" ASK "Czy chcesz graê w Rambo (y/n)" if warn skip rambo else run df0:superman endif endcli lab rambo execute df0: rambo Rozkaz ELSE moûe spowodowaê wykonanie kilku (a nie tylko jednej) instrukcji. Aby to zobaczyê, stwórz za pomocâ edytora dowolny zbiór, zawierajâcy kilka jakichkolwiek wierszy, w tym miëdzy innymi (w dowolnym miejscu) wiersz: n=3*3 i zapisz go jako "RAM:test". A teraz wpisz poniûszy przykîad: IF n EQ 4 ECHO "OK, lecimy dalej" SKIP DALEJ ELSE ECHO" Cos chyba nie tak" TYPE ram:test ECHO "Zobacz gdzie jest blad. Po minucie wrocisz do CLI, aby poprawic zbior test" ENDIF WAIT 1 MIN ENDCLI LAB DALEJ ;tu dalszy ciag skryptu Jeôli teraz zapiszesz taki skrypt na przykîad jako ram:test1 i uruchomisz go przez execute ram:test1, zobaczysz, ûe zostanâ wykonane wszystkie rozkazy umieszczone pomiëdzy ELSE a ENDIF (bo nasze n nie jest równe 4). Jeszcze innym przykîadem zastosowania ELSE jest umieszczenie go w pëtlach zagnieûdûonych. W takim wypadku ELSE "przyczepi sië" do ostatniego rozkazu IF. Przykîad: IF df0:test NOT EQ "test1" IF EXISTS df0:test ECHO "Znaleziono zbior test" ELSE ECHO "Nie znaleziono zbioru test" ENDIF ENDIF Rozkaz ELSE jest opcjonalny, to znaczy, ûe rozkaz IF..THEN zadziaîa i bez niego, niemniej brak ELSE odetnie Cië od kilku moûliwoôci. ENDCLI (zakoïcz CLI) skîadnia dla systemów 1.2, 1.3, 2.0, 2.1 , 3.0 i 3.1: ENDCLI powoduje zakoïczenie aktualnego procesu CLI. Moûna jej takûe uûywaê do zakoïczenia procesu Shella. Od systemu 1.3 wystëpuje w AmigaDOS takûe rozkaz EndShell dziaîajâcy identycznie, majâcy jednak nieco wiëcej moûliwoôci.