System na talerzu (cz. 14.) --------------------------- AMIGA DOS Marek Pampuch ED (edytor systemowy) skîadnia dla systemów 1.2 i 1.3: ED [FROM=] >nazwa zbioru< [[SIZE=] >nn<] skîadnia dla systemów 2.0, 2.1 3.0 i 3.1: ED [FROM=] >nazwa zbioru< [[SIZE=] >nn<] [WITH = >nazwa makra<] [WINDOW = >opis okna<] [TABS = >mm<] [WIDTH | COLS = >oo<] [HEIGHT | ROWS = >pp<] gdzie: nazwa zbioru to nazwa zbioru, który chcemy edytowaê. Jeôli jâ opuôcimy, to edytor sië nie uruchomi, nn -- okreôla wielkoôê stosu (domyôlnie przyjëte jest tu 40 000 bajtów, niemniej w wypadku edycji wiëkszego zbioru zachodzi koniecznoôê powiëkszenia tej wartoôci domyôlnej), nazwa makra to nazwa makrorozkazu (patrz opis dalej), mm -- wielkoôê tabulatora (domyôlnie 3), oo -- liczba kolumn okna, pp -- liczba rzëdów okna. wzorzec dla systemów 1.2 i 1.3: FROM/A, SIZE/N wzorzec dla systemów 2.0, 2.1, 3.0 i 3.1: FROM/A, SIZE/N, WITH/K, WINDOW/K, TABS/N, WIDTH=COLS/N, HEIGHT=ROWS/N Edytor systemowy jest jednym z najczëôciej uûywanych rozkazów AmigaDOS. Bez wzglëdu na to, czy chcesz napisaê artykuî do Magazynu AMIGA, list do cioci czy wklepaê tekst programu w asemblerze, musisz dysponowaê edytorem. Oczywiôcie, edytor komercyjny (na przykîad CED) jest znacznie wygodniejszy w obsîudze, ale za to ED jest prostszy, a co najwaûniejsze -- moûesz z niego korzystaê natychmiast po rozpakowaniu Amigi przyniesionej ze sklepu. Maksymalna liczba znaków, jakie moûesz wprowadziê w jednym wierszu edytora systemowego, wynosi 255. Próba dalszego pisania spowoduje pojawienie sië komunikatu "Line too long" (wiersz zbyt dîugi). Jeôli mamy zainstalowane polskie znaki w jakimkolwiek standardzie, moûemy za ich pomocâ pisaê w edytorze systemowym. Edytor systemowy ED przeszedî znaczâce przeobraûenia na przeîomie systemów 1.3 i 2.0. W zwiâzku z tym opis opcji rozkazu podzieliîem na dwie czëôci. Pierwsza z nich dotyczy edytora w wersji 1.0 (dla systemów 1.2 i 1.3), druga zmian wprowadzonych w edytorze w wersji 2.0. WERSJA 1.0: [Ctrl]+[A] -- wstawienie pustego wiersza w miejscu, gdzie jest kursor; [Ctrl]+[B] -- usuniëcie wiersza, w którym jest kursor; [Ctrl]+[D] -- przesuniëcie tekstu o stronë w dóî; [Ctrl]+[E] -- ustawienie kursora na przemian: raz na poczâtek, raz na koniec tekstu itd.; [Ctrl]+[F] -- zmiana litery pod kursorem z maîej na duûâ lub z duûej na maîâ; [Ctrl]+[G] -- ponowne wywoîanie ostatniego rozkazu pomocniczego (opisane sâ one dalej); [Ctrl]+[H] -- kasowanie jednego znaku na lewo od kursora; [Ctrl]+[I] -- tabulacja kursora; [Ctrl]+[M] -- taki sam efekt jak naciôniëcie klawisza [Return]; [Ctrl]+[O] -- kasowanie sîowa, na którym stoi kursor; jeôli kursor znajduje sië na spacji, spacja ta zostanie skasowana; [Ctrl]+[R] -- cofniëcie kursora na poczâtek poprzedniego sîowa tekstu; [Ctrl]+[T] -- przesuniëcie kursora na poczâtek nastëpnego sîowa tekstu; [Ctrl]+[U] -- przewiniëcie tekstu w górë o stronë; [Ctrl]+[V] -- "odôwieûanie" ekranu (stosowane wówczas, gdy chcemy usunâê z niego ômieci lub przywróciê mu normalny wyglâd); [Ctrl]+[Y] -- usuniëcie tekstu od pozycji kursora do koïca wiersza. Jeôli naciôniemy klawisz [Ctrl] równoczeônie z klawiszem "[", skutek bëdzie identyczny jak przy naciôniëciu klawisza [Esc]. Jeôli natomiast naciôniemy klawisz [Ctrl] równoczeônie z klawiszem "]", kursor bëdzie ustawiany (na przemian) na poczâtku albo na koïcu wiersza, w którym sië znajdowaî. Próba skorzystania z innych znaków z klawiatury (razem z klawiszem [Ctrl]) spowoduje komunikat "Unknown command" (rozkaz nieznany). Rozkazy pomocnicze edytora ED uzyskujemy naciskajâc klawisz [Esc] lub jego opisany przed chwilâ odpowiednik. W momencie naciôniëcia klawisza [Esc] pojawi sië w lewym dolnym rogu okna edytora znak gwiazdki ("*"). W zaleûnoôci od tego, co teraz dopiszemy (i zatwierdzimy caîoôê naciskajâc klawisz [Return]): *a "tekst" -- wstawi ciâg wpisany jako "tekst" (w cudzysîowie) w wierszu nastëpnym za tym, w którym znajdowaî sië kursor w momencie wywoîania rozkazu. *b -- przesunie kursor na koniec tekstu. *bf "nnnnn" -- szuka ciâgu podanego jako "nnnn" w tekôcie poprzedzajâcym poîoûenie kursora (szukanie wstecz). *bs -- zaznacza koniec bloku w miejscu, gdzie znajduje sië kursor. *be -- zaô, zaznacza w takim miejscu koniec bloku. UWAGA: w odróûnieniu od wielu edytorów zaznaczony blok nie zostanie tu oznaczony. Niewielkâ orientacjë moûe daê tu rozkaz *sh, podajâcy (miëdzy innymi) pierwsze i ostatnie sîowo zaznaczonego bloku. Ponadto próba dokonania jakichkolwiek zmian w zaznaczonym bloku spowoduje usuniëcie znaczników. *ce -- przesuwa kursor na koniec tekstu. *cl -- cofa kursor o jeden znak. *cr -- przesuwa kursor o jeden znak. *cs -- cofa kursor na poczâtek wiersza. *d -- kasuje wiersz, w którym jest kursor. *dc -- usuwa znak, na którym znajdowaî sië kursor w momencie wywoîania rozkazu. *db -- usuwa blok, który zostaî wczeôniej zaznaczony przez *bs i *be. *e "AaaAaa"bbbBBB" -- znajduje w tekôcie poîoûonym na prawo od kursora îaïcuch "AaaAaa" i zamienia go na "bbbBBB". UWAGA: rozkaz ten jest z gatunku "case sensitive". Oznacza to, ûe duûe i maîe litery zostanâ wpisane w taki sposób, jak podaîeô je w rozkazie (czyli, ûe "endcli" i "EndCLI" dla tego rozkazu wcale nie oznaczajâ tego samego). Cechë të jednak moûna wyîâczyê (patrz rozkaz *uc). *eq "AaaAaa"bbbBBB" -- to samo, co rozkaz opisany powyûej, z tâ róûnicâ, ûe po znalezieniu îaïcucha "AaaAaa" pojawi sië komunikat z ûâdaniem potwierdzenia chëci zamiany. *ex -- umoûliwia wyjôcie za ustawiony wczeôniej prawy margines edytowanego tekstu. *f "xxxxx" -- szuka îaïcucha "xxxxx" w tekôcie za kursorem. *i "tekst" -- umieszcza podany tekst w wierszu, w którym jest kursor, przesuwajâc resztë tekstu o wiersz w dóî. *ib -- umieszcza oznaczony wczeôniej przez *bs i *be blok poniûej wiersza, w którym jest kursor. *if "df0:test" -- wstawia zawartoôê tekstowego zbioru, zapisanego na dysku df0: jako "test" poniûej wiersza, w którym jest kursor. *j -- dosuwa tekst z wierszy znajdujâcych sië poniûej kursora, do wiersza, w którym jest kursor. *lc -- wîâcza rozróûnianie duûych i maîych liter, dziaîajâce w rozkazach przeszukiwania tekstu. *m nnn -- przenosi kursor do wiersza o numerze nnn (liczâc od poczâtku edytowanego tekstu). *n -- przesuwa kursor na poczâtek nastëpnego wiersza. *p -- cofa kursor na poczâtek poprzedniego wiersza. *q -- wyjôcie z edytora bez zapisania wyniku pracy. Pojawi sië komunikat ûâdajâcy potwierdzenia takiego zamiaru. *rp "mmmm" -- spowoduje uruchomienie makrorozkazu w ARexxie o nazwie mmmm. *rp rozkaz -- spowoduje wykonanie jednego z rozkazów pomocniczych edytora. UWAGA: rozkaz wraz z parametrami musi byê wpisany bez spacji, na przykîad: *rp9e"End"koniec" bëdzie wyszukiwaê dziewiëê razy w tekôcie sîowa End i (zgodnie z tym, co napisaîem wczeôniej o rozkazie "*e") zamieni je na sîowo "koniec". Po dziewiâtej zamianie lub jeôli tekst skoïczy sië wczeôniej, rozkaz przerwie dziaîanie. W tym ostatnim wypadku pojawi sië komunikat "Search failed" i naleûy nacisnâê klawisz [Return], aby wróciê do edycji. *s -- przenosi tekst zawarty miëdzy kursorem, a koïcem wiersza na poczâtek nastëpnego wiersza. Reszta tekstu zostanie przesuniëta. *sa "df0:test" -- zapisanie wyników edycji w podanym miejscu (tu df0:) i pod podanâ nazwâ (tu: test). Zapis taki nie powoduje wyjôcia z edytora. *sb -- pokazuje blok zaznaczony wczeôniej przez *bs i *be w ten sposób, ûe poczâtek zaznaczonego bloku zostaje przesuniëty do lewego górnego rogu. *sh -- wyôwietla aktualne ustawienia edytora, w tym: wersjë edytora, nazwë edytowanego zbioru, wielkoôê tabulatora, marginesy (lewy i prawy), sîowo rozpoczynajâce i koïczâce blok (o ile blok jest aktualnie oznaczony, wielkoôê bufora i stopieï jego zapeînienia. Aby powróciê do edycji, wystarczy nacisnâê dowolny klawisz. *sl n -- ustawia lewy marginas w kolumnie n. UWAGA: rozkaz zadziaîa dopiero od nowego wiersza. *sr n -- jak wyûej, ale prawy margines. Przekroczenie tak ustawionego marginesu nie spowoduje przerzucenia dalszej czëôci tekstu do nowego wiersza. Uûytkownik zostanie jednak poinformowany o tym, ûe "przekroczyî granicë", gdyû caîy wiersz pojedzie na dóî. *st m -- ustawia wartoôê tabulatora na m znaków (wartoôê domyôlna 5). *t -- przenosi kursor na poczâtek tekstu. *u -- (undo) pozwala na wycofanie sië z ostatnio wprowadzonej zmiany, pod warunkiem, ûe nie przesunëliômy kursora do innego wiersza. *uc -- wyîâcza rozróûnianie maîych i duûych liter podczas operacji przeszukiwania. *wb "nazwa" -- zapisuje zaznaczony przez *bs i *be blok pod podanâ nazwâ. *x "df0:program" -- wyjôcie z edytora z zapisem wyniku edycji do zbioru o podanej nazwie i ôcieûce. Jeôli podasz sam rozkaz (bez parametru) -- wynik edycji zostanie zapisany pod tâ nazwâ i w tym miejscu, z jakiego zostaî wczytany. Waûne: rozkazy pomocnicze MUSZÂ byê pisane maîymi literami! Oprócz tego, podczas pracy z edytorem ED moûemy sië posîugiwaê rozkazami dostëpnymi bezpoôrednio z klawiatury: -- klawisze "ze strzaîkami" przesuwajâ kursor w odpowiednim kierunku; -- klawisz backspace [<-] kasuje znak na lewo od kursora; -- klawisz [Del] kasuje znak, na którym znajduje sië kursor; -- klawisz [Return] przesuwa kursor na poczâtek nowego wiersza. Jeôli kursor znajduje sië w ôrodku tekstu, wówczas po naciôniëciu [Return] tekst znajdujâcy sië za kursorem takûe zostanie przeniesiony do nowego wiersza. WERSJA 2.0: Gîównâ róûnicâ pomiëdzy obiema wersjami jest layout i sposób obsîugi. W wersji 2.0 bowiem wiëkszoôê rozkazów, dostëpnych dotâd za pomocâ sztuczek, jest uzyskiwana z rozwijanego menu na listwie tytuîowej okna. Wprowadzono kilka nowych rozkazów pomocniczych. Uzyskuje sië je tak samo jak w poprzedniej wersji (poprzez naciôniëcie klawisza [Esc] i dopisanie rozkazu do powstaîej w lewym dolnym rogu gwiazdki oraz przez zatwierdzenie wszystkiego za pomocâ [Return]): *nw -- usuwa tekst znajdujâcy sië w edytorze -- bez opuszczenia edytora; *op "df0:test" -- wczytuje zbiór o podanej nazwie i ôcieûce dostëpu; *rk -- usuwa obîoûenie klawiszy dokonane rozkazem *sf (patrz niûej); *vw -- odôwieûa ekran. Dodano takûe wybierane za pomocâ myszki (w menu wersji peînej, po usuniëciu "ed-startup) klika rozkazów niedostëpnych z klawiatury, jak: (cm) -- umoûliwiajâce dostëp do "gwiazdki" dla rozkazów pomocniczych za pomocâ myszki; (sf) -- pozwalajâcy na podîoûenie tekstów pod klawisze funkcyjne; (df) -- pozwalajâcy na zobaczenie obîoûenia ustawionych przez *sf klawiszy; (rf) -- uruchamiajâcy program napisany w ARexxie; (rx) -- pozwalajâcy na wpisanie pojedynczego rozkazu ARexxa. Ostatniâ zmianâ jest zmniejszenie domyôlnej wartoôci tabulatora na 3. Edytor systemowy jest jednym z wielu nie dokoïczonych rozkazów AmigaDOS. W zwiâzku z tym, jeôli sië dobrze poszuka, moûna znaleúê w nim opcje, o których nie ma sîowa w instrukcji obsîugi. Jakie to opcje (sztuczka dotyczy edytora w wersji 2.0)? Jeôli usuniemy z dysku zbiór o nazwie Ed-startup (zawierajâcy parametry, z jakimi ma sië zgîaszaê program), wówczas edytor uruchomi sië nam w wersji "peînej" (to znaczy takiej, w jakiej miaî byê). Z niezrozumiaîych powodów nakazano programistom ograniczyê moûliwoôci edytora i najprawdopodobniej dlatego powstaî "wymuszajâcy" Ed-startup. Sprawa ta byîa dokîadnie opisywana w nr. 5/94 Magazynu AMIGA (Kuferek). ********************************************************************* **** tutaj powinny sië znaleúê rysunki xxx_3.pcx i xxx_4 pcx (jeden pod drugim lub jeden obok drugiego. Ta strona moûe byê czarnobiaîa) ********************************************************************* Niezbyt znanâ sprawâ sâ natomiast wprowadzone w nowszej wersji edytora makrorozkazy. Nie sâ to ûadne "cuda", niemniej czasem sië przydajâ. Domyôlnie konfiguracja startowa edytora jest opisana we wspomnianym przed chwilâ zbiorze Ed-startup. Moûna go, jak juû wiadomo, usunâê i napisaê wîasny skrypt, zawierajâcy zupeînie innâ konfiguracjë, przez co da sië go dopasowaê do wîasnych potrzeb. Podczas pisania takiego skryptu naleûy jednak uwaûaê z niektórymi rozkazami. Jeôli na przykîad w takim zbiorze pozostawimy jedynie rozkaz QUIT, wówczas wyjdziemy z edytora juû przy próbie uruchamiania go. Domyôlny zbiór Ed-startup wyglâda nastëpujâco: si 0 1 "Project" si 1 2 "Open... ESCop" "op ? /File: /" si 2 4 si 3 2 "Save ESCsa" "sa" si 4 2 "Save As... ESCsa" "sa ? /Save As: /" si 5 4 si 6 2 "About ESCsh" "sh" si 7 2 "Quit ESCq" "q" si 8 1 "Movement" si 9 2 "Top ESCt" "t" si 10 2 "Bottom ESCb" "b" si 11 4 si 12 2 "Find... ESCf" "f ? /Find string: /" si 13 2 "Backwards Find... ESCbf" "bf ? /Find string: /" si 14 1 "Edit" si 15 2 "Delete Line ESCd" "d" si 16 2 "Query-Replace... ESCeq" "eq ? /Replace this: / ? /With this: /" si 17 2 "Usuï sîowo ESC si 17 4 si 18 2 "Redisplay ESCvw" "vw" si 19 0 em Nic nie stoi na przeszkodzie, aby zmieniê go na: si 0 1 "Tekst" si 1 2 "Wczytaj ESCop" "op ? /Plik: /" si 2 4 si 3 2 "Zapisz ESCsa" "sa" si 4 2 "Zapisz jakoESCsa" "sa ? /Save As: /" si 5 4 si 6 2 "Info ESCsh" "sh" si 7 2 "Wyjdú ESCq" "q" si 8 1 "Przesuï" si 9 2 "Na górë ESCt" "t" si 10 2 "Na koniec ESCb" "b" si 11 4 si 12 2 "Szukaj do przodu ESCf" "f ? /Îaïcuch : /" si 13 2 "Szukaj w tyî ESCbf" "bf ? /Îaïcuch : /" si 14 1 "Edycja" si 15 2 "Lewy margines =8 ESCsl" "sl 8" si 16 2 "Prawy margines=70 ESCsr" "sr 70" si 17 2 "Zamieï ESCeq" "eq ? /Zamieï to : / ? /Na to : /" si 18 4 si 19 2 "Wyôwietl ponownie ESCvw" "vw" si 20 0 em Jak widaê, przy okazji spolszczania dodaliômy nieco komunikatów. Oczywiôcie moûna taki zbiór zapisaê jako Ed-startup, niemniej jeôli chcemy sobie zostawiê z jakichô wzglëdów ustawienie fabryczne, lepiej zapisaê ten zbiór w katalogu S jako na przykîad "moje" i wywoîywaê edytor jak poniûej: ed ram: test WITH S:moje Parametrami rozkazu sâ: FROM -- nazwa zbioru, która musi wystëpowaê. SIZE -- wielkoôê zbioru w bajtach, z jakim ma dziaîaê edytor. Domyôlnie jest tu ustawione 40 000. Jeôli podamy wartoôê mniejszâ, zostanie wygenerowany komunikat o bîëdzie, jeôli natomiast zechcemy wpisaê tekst zajmujâcy wiëcej bez podania tej wielkoôci (na przykîad 100 000), wówczas wspóîczujë wszystkim, którzy dobrnâ z tak wywoîanym edytorem do 40 000 znaków i bëdâ chcieli wpisaê coô dalej. Nazwë parametru moûna opuôciê, a zatem wszystko jedno, czy wywoîamy edytor przez: ed df0:tekst SIZE 80000 czy przez ed df0:tekst 80000 WITH -- parametr sîuûâcy do wywoîywania edytora z wîasnâ edycjâ startowâ (opisane wyûej). WINDOW -- pozwala wywoîaê edytor z oknem o innych rozmiarach niû domyôlne. Za pomocâ tego parametru moûna takûe przekazaê "wyjôcie" edytora na jakiekolwiek waûne urzâdzenie logiczne AmigaDOS, co w niektórych wypadkach (na przykîad "bebeesiarzom") powinno znacznie uîatwiê pracë. Domyôlnie jest tu: RAW:0/0/639/199/Ed2.00/CLOSE Moûemy to nieco zmieniê (na przykîad wówczas, gdy chcemy sobie popracowaê na konsoli), choêby przez: ed ram:test WINDOW=* WIDTH -- okreôla nowâ szerokoôê okna edytora (domyôlnie 639); HEIGHT -- nowa wysokoôê okna edytora (domyôlnie 199). Bezpoôrednia próba uûycia tych parametrów zapewne Was zdziwi. Okno edytora sië nie zmieni. Dlaczego? Zadziaîa ono bowiem wyîâcznie na tzw. pseudoterminalach. Widaê, ûe ED pisaî jakiô râbniëty sysop. A zatem, aby uzyskaê efekt, trzeba nieco wiëcej powpalcowywaê, na przykîad: ed ram:test WINDOW=CON: WIDTH 700 HEIGHT 1000 Numerkami przy WIDTH i HEIGHT nie naleûy sië przejmowaê. Bëdâ one bowiem miaîy znaczenie wyîâcznie wtedy, jeôli do Amigi podîâczymy inny komputer, a urzâdzeniem wyjôciowym bëdzie AUX: TABS -- zmieni domyôlnâ liczbë spacji odpowiadajâcâ tabulatorowi. UWAGA: W edytorze systemowym nie da sië wsunâê tabulacji w tekst. Inne przykîady uûycia rozkazu: ED spowoduje wydruk komunikatu "brak wymaganego argumentu. Ed nie zadziaîaî, a kod zwrotny bîëdu wynosi 10" (w systemie 2.0 i wyûszym). ED DF0:TEST spowoduje otwarcie okna edytora dla zbioru, który przy wyjôciu z edytora zostanie zapisany pod nazwâ TEST. Na koniec spis komunikatów najczëôciej wystëpujâcych bîëdów edytora systemowego: Block incorrectly specified -- blok úle oznaczony; Commands abandoned -- wykonywanie rozkazu zostaîo przerwane; Creating new file -- tworzë nowy zbiór; Cursor inside block -- kursor znajduje sië wewnâtrz bloku; End of file -- to samo z drugiej strony; File contains binary -- zbiór, który chciaîeô wczytaê, zawiera dane w postaci binarnej, a to jest edytor tekstowy; Input lines truncated -- chcesz edytowaê zbiór zapisany innym edytorem, o zbyt dîugich wierszach; zostaîy one obciëte do 255 znaków; Last line deleted -- usuniëty ostatni wiersz; Line too long -- wiersz zbyt dîugi; No block marked -- blok, na którym chciaîeô wykonaê operacjë, nie zostaî wczeôniej zaznaczony; No room in buffer -- brak miejsca w buforze; Number expected -- nie wprowadziîeô niezbëdnego parametru cyfrowego; Out of memory for operation -- to dziaîanie potrzebuje wiëcej pamiëci niû jest dostëpne; Rexx not available -- nie uruchomiony ARexx, a Ty chcesz skorzystaê z jego usîug; Search failed -- bîâd przeszukiwania; Syntax error -- bîâd skîadni rozkazu; Tabs in input file expanded -- tabulatory we wczytywanym zbiorze rozszerzone; Top of file -- to juû poczâtek tekstu, a Ty pchasz sië dalej; Unable to open file -- zbioru nie da sië otworzyê (nie istnieje lub bîëdnie podaîeô jego nazwë); Unknown command -- rozkaz nieznany; Unknown internal error -- Amiga zgîupiaîa; Unmatched -- nie zamkniëty nawias.