CROOK-5 - Edytor kontekstowy - EDIT

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania

Wstęp

EDIT umożliwia tworzenie nowych zbiorów dyskowych oraz poprawianie istniejących. Praca edytora polega na sekwencyjnym przetwarzaniu zbioru wejściowego w wyjściowy na podstawie zleceń (zwanych także poprawkami) wczytywanych z urządzenia wejściowego lub zbioru zawierającego poprawki. Wiersze wprowadzane ze zbioru wejściowego i wyprowadzane do zbioru wyjściowego są liczone, a oba liczniki przechowywane wewnątrz edytora. W zależnosci od tego czy poprawki wczytywane są ze zbioru, czy z urządzenia rozróżniamy dwie metody użytkowania edytora:

  • metoda bezpośrednia - urządzeniem wejściowym poprawek jest końcówka,
  • metoda pośrednia - poprawki wczytywane są ze zbioru znakowego.

Metodę bezpośrednią można stosować do tworzenia nowychzbiorów na dysku oraz do poprawiania zbiorów niezbyt dużych, zawierających niewielką liczbę błędów. Przy metodzie pośredniej możliwe jest wielokrotne poprawianie poprawek zawartych w zbiorze poprawek oraz zachowanie tego zbioru jako dokumentu wprowadzonych zmian. Edytor wczytuje tekst ze zbioru wejściowego (poprawianego) po jednym wierszu do bufora. Po dokonaniu zmian opisanych zleceniami wiersz zostaje wyprowadzony do zbioru wyjściowego (poprawionego). Wiersze puste występujące w zbiorze wejściowym są przez edytor ignorowane i nie są wyprowadzane do zbioru wyjściowego. Edytor uruchamia się podając jego nazwę i ewentualne parametry oddzielone separatorami:

EDIT [,<TZ_we.>,<TZ_wy.>[,<TZ_we._poprawek>]]

TZ - tytuł zbioru.

Jeśli nie podano nazwy zbioru wejściowego poprawek, to edytor przejdzie w stan pracy bezpośredniej.

Opis zleceń edytora

Przed każdorazowym wczytaniem zlecenia z monitora wyprowadzany jest znak dwukropka (lub średnika przy pracy w trybie poprawiania poprawek EC) na początku nowego wiersza. Oznacza to, że edytor jest gotowy do przyjęcia zlecenia. Zlecenie ma następującą postać:

<dwuliterowa nazwa><treść><znak CR>

Treść zlecenia następuje bezpośrednio (bez odstępu) za nazwą zlecenia. Niektóre zlecenia dopuszczają odstępstwo od tej reguły. W opisie zleceń występują określenia:

  • <łańcuch> - ciąg znaków alfanumerycznych,
  • <wiersz> - łańcuch zakończony znakiem powrotu karetki CR,
  • <bufor> - wydzielona część pamięci operacyjnej mogąca pomieścić wiersz.

Zlecenia dotyczące wejścia i wyjścia

IN <TZ_we>

Zlecenie określa zbiór wejściowy i ustawia wskażnik czytania na początek tego zbioru.

IN

Zlecenie powoduje cofnięcie wskażnika czytania na początek zbioru wejściowego.

OU <TZ_wy>[,<liczba sektorów>]

Zlecenie określa zbiór wyjściowy. Jeśli zbioru o podanej nazwie nie ma w skorowidzu, to zostanie utworzony z podaną liczbą sektorów. Jeśli tej liczby nie podano, to system operacyjny utworzy zbiór przydzielając mu minimalną liczbę sektorów. Wskażnik pisania zostaje ustawiony na początek zbioru.

AP <TZ_wy>

Zlecenie określa zbiór wyjściowy i ustawia wskażnik pisania na koniec tego zbioru.

OU

Zlecenie powoduje cofnięcie wskażnika pisania na początek zbioru wyjściowego.

FI

Po wczytaniu zlecenia edytor wyprowadza na monitor:
  • nazwę zbioru wejściowego, liczbę wierszy wczytanych z tego zbioru;
  • nazwę zbioru wyjściowego, liczbę wierszy wpisanych do tego zbioru;
  • nazwę aktualnego zbioru poprawek;
  • nazwę wyjściowego zbioru poprawek.
Jeśli po wprowadzeniu tego zlecenia edytor nic nie wyprowadzi, to znaczy, że żaden z wymienionych zbiorów nie jest określony.

Zlecenia szukania wiersza

Szukanie wiersza w poprawianym tekście odbywa się w następujący sposób:

  1. Wiersz znajdujący się w buforze zostaje wyprowadzony do zbioru wyjściowego.
  2. Do bufora wczytywany jest kolejny wiersz ze zbioru wejściowego.
  3. Następuje analiza wiersza. Jeśli wiersz rozpoczyna się wskazanym łańcuchem (dla zleceń FL, DL) lub zawiera wskazany łańcuch (dla zleceń FS, DS), to edytor kończy wykonywanie zlecenia, nie wyprowadzając wczytanego wiersza do zbioru wyjściowego. Jeśli natomiast we wczytanym wierszu nie ma szukanego łańcucha, lub nie rozpoczyna on wiersza (dla zleceń FL, DL),to edytor przechodzi do wykonania punktu 1 w przypadku zleceń FL, FS, lub punktu 2 w przypadku zleceń DL, DS.

FL<łańcuch>

Wyprowadż wiersz z bufora do zbioru wyjściowego. Kopiuj tekst ze zbioru wejściowego do zbioru wyjściowego, aż do napotkania <łańcucha> na początku wiersza. Wiersz ten umieść w buforze, nie wyprowadzaj go do zbioru wyjściowego.

FS<łańcuch>

Wyprowadż wiersz z bufora do zbioru wyjściowego. Kopiuj tekst ze zbioru wejściowego do zbioru wyjściowego, aż do napotkania <łańcucha>. Wiersz zawierający <łańcuch> umieść w buforze, nie wyprowadzaj go do zbioru wyjściowego.

FN<liczba>

Wyprowadż wiersz z bufora do zbioru wyjściowego. Jeśli liczba jest dodatnia, to kopiuj tekst ze zbioru wejściowego do zbioru wyjściowego, aż do napotkania wiersza o wskazanym liczbą numerze. Wiersz ten umieść w buforze, nie wyprowadzaj go do zbioru wyjściowego. Jeśli liczba jest ujemna, to skopiuj wskazaną liczbę wierszy oprócz ostatniego, który umieść w buforze, nie wyprowadzając do zbioru wyjściowego. Do wyprowadzenia wiersza z bufora do zbioru wyjściowego i wczytania do bufora następnego wiersza ze zbioru wejściowego służy zlecenie FN-1. W przypadku pracy bezpośredniej zlecenie to można zastąpić znakiem powrotu karetki, który traktowany jest wówczas przez edytor tak samo jak wspomniane zlecenie.

DL<łańcuch>

Wyprowadż wiersz z bufora do zbioru wyjściowego. Czytaj tekst ze zbioru wejściowego, aż do napotkania <łańcucha> na początku wczytanego wiersza.

DS<łańcuch>

Wyprowadż wiersz z bufora do zbioru wyjściowego. Czytaj tekst ze zbioru wejściowego, aż do napotkania <łańcucha> we wczytanym wierszu.

DN<liczba>

Wyprowadż wiersz z bufora do zbioru wyjściowego. Dalej jak zlecenie FN, lecz wiersze nie są wyprowadzane do zbioru wyjściowego.

W przypadku, gdy jedno z sześciu wymienionych zleceń nie znajdzie w zbiorze wejściowym wskazanego treścią zlecenia łańcucha lub wiersza o wskazanym numerze, to zbiór wyjściowy zostanie domknięty, a na końcówkę zostanie wyprowadzony odpowiedni tekst zawierający informaję o rodzaju błędu oraz numer i zawartość wiersza w zbiorze poprawek.

Zlecenia operacji na wierszu w buforze

AB<łańcuch>

Dopisz <łańcuch> na początku wiersza w buforze.

AE<łańcuch>

Dopisz <łańcuch> na końcu wiersza w buforze.

RS&<łańcuch 1>&[<łańcuch 2>][&<łańcuch 3>&[<łańcuch 4>]...

W wierszu znajdującym się w buforze zamień:
  • <łańcuch 1> na <łańcuch 2>,
  • <łańcuch 3> na <łańcuch 4> itd.
Znaku &, służącego jako separator łańcuchów, użyto tu przykładowo - może to być dowolny znak graficzny kodu ISO-7. Należy ten znak tak dobrać, by nie zawierały go łańcuchy będące argumentami zlecenia, gdyż wówczas zlecenie nie będzie na pewno działało zgodnie z naszymi zamierzeniami.

SS

W wierszu znajdującym się w buforze usuń wszystkie znaki o kodach ISO mniejszych od 32.

GL&

Otwórz stos operacji globalnych (AB, AE, RS lub SS). Wczytuj wiersze (zlecenia) z urządzenia wejściowego poprawek, aż do napotkania znaku & na początku wiersza (& jest dowolnym znakiem alfanumerycznym). Wiersz ten ignoruj. Jeśli urządzeniem wejściowym poprawek jest monitor, to znak ten jest wyprowadzany na monitor przed każdorazowym wczytaniem wiersza w celu przypomnienia jakim znakiem należy zakończyć wprowadzanie stosu operacji globalnych i zasygnalizowania gotowości wczytania następnego wiersza. Po wykonaniu tego zlecenia na każdym wyprowadzanym do zbioru wyjściowego wierszu będą wykonywane wszystkie zlecenia zawarte w stosie operacji globalnych. Stos operacji globalnych nie działa przy wykonywaniu zleceń IB, BL, BB.

WG

Wyprowadż na końcówkę zawartość stosu operacji globalnych.

EG

Zlecenie powoduje zawieszenie oddziaływania stosu operacji globalnych.

GL

Zlecenie wznawia ponownie oddziaływanie stosu operacji globalnych.

TR<łańcuch>

Wiersz w buforze zostaje podzielony na dwie części: od początku do znaku przed wskazanym <łańcuchem> i od <łańcucha> do końca. Pierwsza część zostaje wyprowadzona do zbioru wyjściowego, a druga pozostaje w buforze.

AD

Do wiersza w buforze dołącz następny wiersz ze zbioru wejściowego, tworząc z nich jeden wiersz.

PL

Wyprowadż na końcówkę wiersz z bufora.

WL

Wykonuj zlecenie PL po wykonaniu każego zlecenia.

NW

Zawieś działanie zlecenia WL.

DE

Skasuj wiersz w buforze. Po wykonaniu zlecenia bufor jest pusty.

Zlecenia wstawiania wierszy

IL<wiersz>

Wyprowadż wiersz z bufora do zbioru wyjściowego. Wstaw do bufora <wiersz>. (Wstawianie wiersza za wierszem z bufora).

BL<wiersz>

Wyprowadż <wiersz> do zbioru wyjściowego. Bufor pozostaje bez zmian. (Wstawianie wiersza przed wiersz z bufora).

PR

Wyprowadż wiersz z bufora do zbioru wyjściowego. Po wykonaniu zlecenia bufor jest pusty.

IB&

Wyprowadż wiersz z bufora do zbioru wyjściowego. Kopiuj wiersze z urządzenia (lub zbioru) wejściowego poprawek do zbioru wyjściowego, aż do napotkania znaku & na początku wiersza (zamiast znaku & można użyć dowolnego innego znaku - znaku & użyto tu przykładowo). Wiersza tego nie wyprowadzaj do zbioru wyjściowego. Po wykonaniu zlecenia bufor jest pusty. (Wstawianie bloku wierszy za wierszem z bufora).

BB&

Działa jak IB, lecz nie wyprowadza wiersza z bufora do zbioru wyjściowego. (Wstawianie bloku wierszy przed wiersz z bufora).

Zlecenia dotyczące nowych stron

NP

Zignoruj pierwszy napotkany znak nowej strony wczytany ze zbioru wejściowego.

PG

Wyprowadż znak nowej strony do zbioru wyjściowego. Bufor pozostaje bez zmian. (Wiersz z bufora znajdzie się na nowej stronie).

SF

Zignoruj wszystkie znaki nowej strony wczytane ze zbioru wejściowego.

CF

Zawieś działanie zlecenia SF.

Zlecenia ogólne

Dwa poniższe zlecenia umożliwiają kilkakrotne wykonanie bloku zleceń zawartego między nimi, tworząc prosty mechanizm pętli.

LP<liczba dodatnia>

Ustaw początek pętli. Umieść podaną liczbę w liczniku pętli. Wczytaj do pamięci ciąg zleceń aż do zlecenia JP włącznie i wykonaj ten ciąg zleceń podaną liczbę razy.

JP

Zmniejsz licznik pętli o jeden i(jeśli jest dodatni) ustaw wskażnik czytania zleceń na pierwsze zlecenie za LP.

CO

Komentarz (zlecenie jest ignorowane).

SH

Domknij zbiór wyjściowy. Cofnij wskażnik pisania do tego zbioru na początek. (Zlecenie nie powoduje wyprowadzenia wiersza zawartego w buforze.)

RE

Wyprowadż wiersz z bufora do zbioru wyjściowego. Kopiuj tekst ze zbioru wejściowego do zbioru wyjściowego aż do końca. Domknij zbiór wyjściowy. Cofnij wskażniki czytania i pisania na początki zbiorów. Po wykonaniu zlecenia bufor jest pusty.

CE

Działa jak RE, lecz nie domyka zbioru wyjściowego.

DF

Zakończenie pobierania tekstu poprawianego z aktualnego zbioru wejściowego. Zlecenie jest przydatne na przkład do dołączania do jednego zbioru fragmentu innego zbioru.

MR <liczba>

Ustalenie marginesu (szerokości wiersza) dla wszystkich zleceń wyprowadzających wiersze na monitor.

OS

Zakończ pracę - przejdż do interpretacji zleceń OSL.

Zlecenia współpracy ze zbiorami poprawek

RC

Wczytaj poprawki z monitora do zbioru roboczego CORRE1. Wczytywanie kończy znak DC4. Zbiór CORRE1 jest od tej chwili zbiorem wejściowym poprawek dla zleceń WC, PC, CH, PP, EC.

RC<nazwa zbioru>

Zbiór o podanej nazwie potraktuj jako zbiór wejściowy poprawek dla wyżej wymienionych zleceń.

NL<liczba>

Wstaw podaną liczbę do licznika wierszy dla zlecenia WC.

WC

Wyprowadż na monitor zawartość zbioru poprawek. Wyprowadzane wiersze są numerowane. W jednym cyklu na monitor zostaje wyprowadzona taka liczba wierszy, jaka jest zawarta w liczniku wierszy. Po każdym cyklu edytor oczekuje na wprowadzenie z monitora jednego znaku sterującego. Jeśli znakiem tym będzie znak powrotu karetki, to wykonany zostanie kolejny cykl. Jeśli znakiem tym będzie znak DC4, to zlecenie WC zostanie zakończone.

WC<numer wiersza>

Działa jak WC, lecz poprawki są wyprowadzane od podanego numeru począwszy.

WC<łańcuch>

Zlcenie powoduje wyprowadzenie na monitor zawartości zbioru poprawek począwszy od wiersza rozpoczynającego się wskazanym łańcuchem.

PC<nazwa zbioru wyjściowego poprawek>[,<liczba sektorów>]

Określ zbiór wyjściowy poprawek, przepisz do niego zawartość zbioru wejściowego poprawek.

PC

Przepisz poprawki do określonego wcześniej zbioru.

CH

Sprawdż wykonalność poprawek zawartych w zbiorze wejściowym poprawek. Edytor wykonuje cały ciąg zleceń zawarty w zbiorze wejściowym poprawek na aktualnie dołączonym (i ew. przełączonym zleceniem ze zbioru poprawek) zbiorze wejściowym, jednak bez wyprowadzania czegokolwiek do zbioru wyjściowego.

PP

Wykonaj poprawki zawarte w zbiorze wejściowym poprawek.

EC

Poprawiaj poprawki zawarte w zbiorze roboczym. Edytor określa aktualny zbiór poprawek jako zbiór wejściowy. Jeśli zbiorem tym jest CORRE1, to określa zbiór wyjściowy jako CORRE2, a jeśli nie, to jako CORRE1. Następnie wykonuje zlecenie WL i przechodzi do czytania zleceń zgłaszając się średnikiem na początku nowego wiersza. Praca w trybie EC jest z natury pracą bezpośrednią. Ostatnim wykonanym zleceniem będzie zlecenie SH lub RE. Po wykonaniu jednego z tych zleceń edytor określi zbiór wyjściowy jako aktualny zbiór poprawek i potwierdzi ten fakt wyprowadzając na monitor odpowiedni komunikat. Jeśli zlecenie EC nie dobiegło końca, to można je anulować wprowadzając znak DC4 jako zlecenie.

Nazywanie danego zbioru "zbiorem poprawek" jest umowne, gdyż to, czy dany zbiór zawiera wiersze rozumiane przez EDIT jako zlecenia, jest przez edytor sprawdzane dopiero podczas wykonywania zleceń CH lub PP. Używanie nazwy "zbiór poprawek" jest jednak wygodne, gdyż pozwala na odróżnienie sposobu traktowania danego zbioru przez edytor, który może obsługiwać jednocześnie cztery zbiory:

  • wejściowy,
  • wyjściowy,
  • wejściowy poprawek,
  • wyjściowy poprawek.

Prawidłowe zakończenie realizacji zleceń RC, PC, EC, CH, PP jest sygnalizowane na monitorze komunikatem zawierającym informację jakie zlecenie się skończyło, jaki jest aktualny zbiór poprawek i (o ile jest określony) jaki jest zbiór wyjściowy poprawek. W przypadku, gdy podczas realizacji zleceń CH lub PP wystąpiły jakieś błędy, to wspomniany komunikat będzie zawierał wyłącznie nazwę zlecenia oraz tekst ERROR ^^^. Po bezbłędnym przebiegu zlecenia PP edytor skończy pracę i przejdzie do interpretacji zleceń OSL.

Źródło: SYSTEM OPERACYJNY CROOK-5 dla minikomputera MERA-400 (wersja 7), Zbigniew Czerniak, Marek Nikodemski, Gdańsk 1988