EXM: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
Dodane 905 bajtów ,  8 cze 2018
brak opisu edycji
Nie podano opisu zmian
Nie podano opisu zmian
Linia 23: Linia 23:
== Adresacja wierszy ==
== Adresacja wierszy ==


Po wczytaniu zbioru wskaźnik dostępu do bufora roboczego jest ustawiany na pierwszy wiersz (bieżący wiersz jest wyświetlany na końcówce). Najprostszym sposobem zmiany położenia wskaźnika dostępu (zmiany wiersza bieżącego) jest podanie numeru bezwzględnego wiersza w buforze. Numer wiersza jest to liczba całkowita bez znaku: pierwszy wiersz bufora roboczego ma numer 1, ostatni jest wskazywany znakiem <code>$</code>. Przykładowo zlecenie <code>126</code> ustawi wskaźnik do bufora roboczego na wiersz o numerze 126. Po wykonaniu tego zlecenia zawartość wiersza zostanie wyświetlona na monitorze. Podanie numeru wykraczającego poza liczbę wierszy w buforze jest sygnalizowane komunikatem:
Po wczytaniu zbioru wskaźnik dostępu do bufora roboczego jest ustawiany na pierwszy wiersz (bieżący wiersz jest wyświetlany na końcówce). Najprostszym sposobem zmiany położenia wskaźnika dostępu (zmiany wiersza bieżącego) jest podanie numeru bezwzględnego wiersza w buforze. Numer wiersza jest to liczba całkowita bez znaku. Pierwszy wiersz bufora roboczego ma numer 1, ostatni jest wskazywany znakiem <code>$</code>. Przykładowo zlecenie <code>126</code> ustawi wskaźnik do bufora roboczego na wiersz o numerze 126. Po wykonaniu tego zlecenia zawartość wiersza zostanie wyświetlona na monitorze. Podanie numeru wykraczającego poza liczbę wierszy w buforze jest sygnalizowane komunikatem:


  LINE OUT OF FILE
  LINE OUT OF FILE
Linia 29: Linia 29:
a wiersz bieżący nie ulega zmianie. Wprowadzenie znaku <code>+</code> (plus) lub samego znaku RETURN powoduje przesunięcie wskaźnika dostępu na następny wiersz. Cofanie o jeden wiersz jest realizowane po wprowadzeniu znaku <code>-</code> (minus). Znaki <code>+</code> i <code>-</code> mogą być użyte w jednym zleceniu wielokrotnie. Zapis: <code>++++</code> oznacza przesunięcie wskaźnika dostępu do bufora o 4 wiersze do przodu. Zamiast ciągu znaków <code>+</code> (plus) lub <code>-</code> (minus) można wprowadzić liczbę całkowitą ze znakiem. Zlecenie <code>+5</code> przesuwa wskaźnik dostępu o 5 wierszy do przodu a zlecenie <code>-2</code> o 2 do tyłu.
a wiersz bieżący nie ulega zmianie. Wprowadzenie znaku <code>+</code> (plus) lub samego znaku RETURN powoduje przesunięcie wskaźnika dostępu na następny wiersz. Cofanie o jeden wiersz jest realizowane po wprowadzeniu znaku <code>-</code> (minus). Znaki <code>+</code> i <code>-</code> mogą być użyte w jednym zleceniu wielokrotnie. Zapis: <code>++++</code> oznacza przesunięcie wskaźnika dostępu do bufora o 4 wiersze do przodu. Zamiast ciągu znaków <code>+</code> (plus) lub <code>-</code> (minus) można wprowadzić liczbę całkowitą ze znakiem. Zlecenie <code>+5</code> przesuwa wskaźnik dostępu o 5 wierszy do przodu a zlecenie <code>-2</code> o 2 do tyłu.


Kolejnym, chyba najczęściej stosowanym, sposobem wskazywania wierszy jest podanie wzorca zawartości wiersza. Wzorzec jest to ciąg znaków określających zawartość szukanego wiersza. Wzorzec musi być objęty nawiasami <code>/.../</code> lub <code>?...?</code>. Jeżeli będą to znaki '''/''' np: <code>/start/</code>, to zbiór będzie przeszukiwany od wiersza bieżącego do przodu. Objęcie wzorca znakami <code>?</code> oznacza poszukiwanie od wiersza bieżącego do tyłu. Jeżeli wiersz nie zostanie znaleziony do końca (lub początku) bufora roboczego, zostanie wyprowadzony komunikat:
Kolejnym, chyba najczęściej stosowanym, sposobem wskazywania wierszy jest podanie wzorca zawartości wiersza. Wzorzec jest to ciąg znaków określających zawartość szukanego wiersza. Wzorzec musi być objęty nawiasami <code>/.../</code> lub <code>?...?</code>. Jeżeli będą to znaki <code>/</code> np: <code>/start/</code>, to zbiór będzie przeszukiwany od wiersza bieżącego do przodu. Objęcie wzorca znakami <code>?</code> oznacza poszukiwanie od wiersza bieżącego do tyłu. Jeżeli wiersz nie zostanie znaleziony do końca (lub początku) bufora roboczego, zostanie wyprowadzony komunikat:


  PATTERN NOT FOUND : /<wzorzec>/
  PATTERN NOT FOUND : /<wzorzec>/
Linia 52: Linia 52:
Wiersz bieżący można usunąć zleceniem <code>D</code>. Po wykonaniu tego zlecenia wierszem bieżącym staje się wiersz następny. Wyjątkowo po usunięciu ostatniego wiersza w buforze, bieżącym staje się wiersz poprzedni.
Wiersz bieżący można usunąć zleceniem <code>D</code>. Po wykonaniu tego zlecenia wierszem bieżącym staje się wiersz następny. Wyjątkowo po usunięciu ostatniego wiersza w buforze, bieżącym staje się wiersz poprzedni.


Do wstawiania nowych wierszy najczęściej jest używana instrukcja <code>A</code>. Po wprowadzeniu tej instrukcji edytor zgłasza się na początku nowej linii i przyjmuje kolejne wiersze. Nowe wiersze są wprowadzane za wierszem bieżącym. Wprowadzanie kończy wpisanie wiersza zawierającego '''dc4''' (CRTL/T) - wiersz ten nie zostanie już wprowadzony do bufora. Po wykonaniu instrukcji bieżącym wierszem jest ostatni wprowadzony wiersz. Inne instrukcje służące do wprowadzania wierszy: <code>I</code> - wprowadzanie wierszy przed wierszem bieżącym, oraz <code>C</code> - wprowadzanie wierszy w miejsce wiersza bieżącego działają podobnie jak instrukcja <code>A</code>. Instrukcja <code>C</code> jest równoważna użyciu dwóch instrukcji: <code>D</code> <code>I</code> z tą jednak różnicą,że po wykonaniu instrukcji <code>I</code> wierszem bieżącym pozostanie wiersz dostępny przed wykonaniem zlecenia <code>I</code>, natomiast po wykonaniu instrukcji <code>C</code> wierszem bieżącym będzie ostatni wprowadzony wiersz. Jeżeli wstawiany ma być tylko jeden wiersz, można użyć instrukcji <code>A</code>, <code>I</code> lub <code>C</code> w uproszczonej postaci - po nazwie instrukcji należy wprowadzić znak '''lf''' (LINE FEED) i za nim treść wiersza zakończoną znakiem '''cr''' (RETURN). Na przykład:
Do wstawiania nowych wierszy najczęściej jest używana instrukcja <code>A</code>. Po wprowadzeniu tej instrukcji edytor zgłasza się na początku nowej linii i przyjmuje kolejne wiersze. Nowe wiersze są wprowadzane za wierszem bieżącym. Wprowadzanie kończy wpisanie wiersza zawierającego '''dc4''' (CRTL/T) - wiersz ten nie zostanie już wprowadzony do bufora. Po wykonaniu instrukcji bieżącym wierszem jest ostatni wprowadzony wiersz.
 
Inne instrukcje służące do wprowadzania wierszy: <code>I</code> - wprowadzanie wierszy przed wierszem bieżącym, oraz <code>C</code> - wprowadzanie wierszy w miejsce wiersza bieżącego działają podobnie jak instrukcja <code>A</code>. Instrukcja <code>C</code> jest równoważna użyciu dwóch instrukcji: <code>D</code> <code>I</code> z tą jednak różnicą,że po wykonaniu instrukcji <code>I</code> wierszem bieżącym pozostanie wiersz dostępny przed wykonaniem zlecenia <code>I</code>, natomiast po wykonaniu instrukcji <code>C</code> wierszem bieżącym będzie ostatni wprowadzony wiersz. Jeżeli wstawiany ma być tylko jeden wiersz, można użyć instrukcji <code>A</code>, <code>I</code> lub <code>C</code> w uproszczonej postaci - po nazwie instrukcji należy wprowadzić znak '''lf''' (LINE FEED) i za nim treść wiersza zakończoną znakiem '''cr''' (RETURN). Na przykład:


  A
  A
Linia 72: Linia 74:
== Adres wiersza w zleceniu ==
== Adres wiersza w zleceniu ==


Dotychczas były pokazane przykłady działania na wierszu bieżącym. Chcąc usunąć wiersz zawierający ciąg ''text1'' można wprowadzić dwa zlecenia: <code>/text1</code> <code>D</code>/ Taki sam efekt da wprowadzenie jednego zlecenia: <code>/text1/D</code>. Podobnie inne instrukcje edytora mogą być poprzedzone w zleceniach adresem wiersza. Zlecenie: <code>$A</code> będzie dołączało nowe wiersze na końcu bufora roboczego.
Dotychczas były pokazane przykłady działania na wierszu bieżącym. Chcąc usunąć wiersz zawierający ciąg ''text1'' można wprowadzić dwa zlecenia: <code>/text1</code> <code>D</code>. Taki sam efekt da wprowadzenie jednego zlecenia: <code>/text1/D</code>. Podobnie inne instrukcje edytora mogą być poprzedzone w zleceniach adresem wiersza. Zlecenie: <code>$A</code> będzie dołączało nowe wiersze na końcu bufora roboczego.


== Cofanie wykonanych poprawek ==
== Cofanie wykonanych poprawek ==
Linia 80: Linia 82:
== Opis obszaru ==
== Opis obszaru ==


Wiele instrukcji EXM może działać na więcej niż jednym wierszu. Aby na przykład zamienić kilka wierszy na nowe wprowadzone z klawiatury, należy poprzedzić instrukcję <code>C</code> opisem usuwanego obszaru. Pierwszym sposobem opisania obszaru jest podanie adresu początkowego wiersza obszaru i liczby wierszy. Opis <code>10:2</code> obejmuje obszar rozpoczynający się od wiersza 10 i długości 2 wierszy. Pominięty adres pierwszego wiersza oznacza, że obszar rozpoczyna się od wiersza bieżącego. Zlecenie <code>:3C</code> zamieni wiersz bieżący i dwa następne na wiersze wprowadzane z końcówki. Drugim sposobem opisania obszaru jest wskazanie pierwszego i ostatniego wiersza obszaru. <code>1,$</code> oznacza obszar od pierwszego do ostatniego wiersza (czyli cały bufor roboczy). I tu pominięcie opisu któregoś z wierszy oznacza wiersz bieżący. Opis <code>1,</code> oznacza obszar od początku bufora roboczego do wiersza bieżącego. Jeżeli adresy wierszy opisujących obszar nie są numerami bezwzględnymi wierszy w buforze, obliczanie ich wartości rozpoczyna się od wiersza dostępnego w momencie wprowadzania zlecenia. Na przykład, jeżeli dostępny jest wiersz o numerze 50, definicja <code>40,+5</code> wskazuje obszar od wiersza 40 do wiersza 55 włącznie. Inaczej będzie, gdy separatorem między adresami wierszy będzie nie przecinek ale średnik. W tym przypadku podstawą do wyliczenia drugiego parametru będzie już znany adres pierwszego wiersza obszaru. Opis <code>40;+5</code> obejmie wiersze 40 do 45 włącznie. Należy tu zauważyć, że definicja <code>40:5</code> obejmie wiersze 40 do 44.
Wiele instrukcji EXM może działać na więcej niż jednym wierszu. Aby na przykład zamienić kilka wierszy na nowe wprowadzone z klawiatury, należy poprzedzić instrukcję <code>C</code> opisem usuwanego obszaru.
 
Pierwszym sposobem opisania obszaru jest podanie adresu początkowego wiersza obszaru i liczby wierszy. Opis <code>10:2</code> obejmuje obszar rozpoczynający się od wiersza 10 i długości 2 wierszy. Pominięty adres pierwszego wiersza oznacza, że obszar rozpoczyna się od wiersza bieżącego. Zlecenie <code>:3C</code> zamieni wiersz bieżący i dwa następne na wiersze wprowadzane z końcówki. Drugim sposobem opisania obszaru jest wskazanie pierwszego i ostatniego wiersza obszaru. <code>1,$</code> oznacza obszar od pierwszego do ostatniego wiersza (czyli cały bufor roboczy). I tu pominięcie opisu któregoś z wierszy oznacza wiersz bieżący. Opis <code>1,</code> oznacza obszar od początku bufora roboczego do wiersza bieżącego. Jeżeli adresy wierszy opisujących obszar nie są numerami bezwzględnymi wierszy w buforze, obliczanie ich wartości rozpoczyna się od wiersza dostępnego w momencie wprowadzania zlecenia. Na przykład, jeżeli dostępny jest wiersz o numerze 50, definicja <code>40,+5</code> wskazuje obszar od wiersza 40 do wiersza 55 włącznie. Inaczej będzie, gdy separatorem między adresami wierszy będzie nie przecinek ale średnik. W tym przypadku podstawą do wyliczenia drugiego parametru będzie już znany adres pierwszego wiersza obszaru. Opis <code>40;+5</code> obejmie wiersze 40 do 45 włącznie. Należy tu zauważyć, że definicja <code>40:5</code> obejmie wiersze 40 do 44.


== Znaczniki wierszy ==
== Znaczniki wierszy ==
Linia 104: Linia 108:
== Zmiana zawartości wiersza ==
== Zmiana zawartości wiersza ==


Jedną z najużyteczniejszych instrukcji jest instrukcja podstawienia zmieniająca zawartość wiersza. W najprostszej postaci zamienia ona wskazany łańcuch znaków na inny:
Jedną z najużyteczniejszych instrukcji jest instrukcja podstawienia zmieniająca zawartość wiersza. W najprostszej postaci zamienia ona wskazany łańcuch znaków na inny. Wiersz:
 
a=x1+2


a=x1+2 - wiersz bieżący
po wykonaniu instrukcji podstawiania <code>S/x1/y</code> będzie wyglądał:
S/x1/y - instrukcja podstawienia
a=y+2 - wiersz po zmianie


Łańcuch zawarty między znakami <code>/</code> może zawierać znaki specjalne <code>^</code> i <code>$</code> tworząc wzorzec o takiej samej budowie jak opisany wcześniej wzorzec zawartości wiersza. Łańcuch zgodny ze wzorcem jest zamieniany na podany łańcuch. I tak zlecenie <code>S/a$/bb</code> zamieni znak ''a'' kończący wiersz na znaki ''bb''. Zlecenie <code>S/^/<łańcuch></code> dołączy podany łańcuch na początku wiersza, a zlecenie <code>S/$/<łańcuch></code> - na końcu. Znak '''lf''' we wstawianym łańcuchu powoduje podzielenie wiersza na dwa:
a=y+2
 
Łańcuch zawarty między znakami <code>/</code> może zawierać znaki specjalne <code>^</code> i <code>$</code> tworząc wzorzec o takiej samej budowie jak opisany wcześniej wzorzec zawartości wiersza. Łańcuch zgodny ze wzorcem jest zamieniany na podany łańcuch. I tak zlecenie <code>S/a$/bb</code> zamieni znak ''a'' kończący wiersz na znaki ''bb''. Zlecenie <code>S/^/<łańcuch></code> dołączy podany łańcuch na początku wiersza, a zlecenie <code>S/$/<łańcuch></code> - na końcu. Znak '''lf''' we wstawianym łańcuchu powoduje podzielenie wiersza na dwa. Na przykład wiersz:


  LWT,R1,0. RW,A(BUF3)
  LWT,R1,0. RW,A(BUF3)
S/./.lf
 
po wykonaniu instrukcji <code>S/./.lf</code> zostanie podzielony na dwa:
 
  LWT,R1,0.
  LWT,R1,0.
  RW,A(BUF3)
  RW,A(BUF3)
Linia 124: Linia 132:


  a=x1+a
  a=x1+a
S/a/b/G
 
po wykonaniu polecenia <code>S/a/b/G</code>:
 
  b=x1+b
  b=x1+b


Linia 130: Linia 140:


  a3=x1+a2-a+ab
  a3=x1+a2-a+ab
S/a/b/--+
 
po wykonaniu polecenia <code>S/a/b/--+</code>:
 
  a3=x1+a2-b+ab
  a3=x1+a2-b+ab


Znak <code>-</code> podany po znaku <code>/</code> ograniczającym łańcuch wstawiany oznacza, że kolejny łańcuch ma pozostać bez zmian, znak +</code> oznacza wykonanie podstawienia. Zamiast ciągu znaków <code>+</code> lub <code>-</code> można podawać liczby odpowiednio dodatnie lub ujemne. Zlecenie z ostatniego przykładu można zapisać także: <code>S/a/b/-2+1</code> lub <code>S/a/b/-2 1</code> Podanie po ciągu znaków <code>+</code> , <code>-</code> znaku <code>G</code> oznacza wykonanie podstawienia dla wszystkich pozostałych łańcuchów zgodnych ze wzorcem:
Znak <code>-</code> podany po znaku <code>/</code> ograniczającym łańcuch wstawiany oznacza, że kolejny łańcuch ma pozostać bez zmian, znak <code>+</code> oznacza wykonanie podstawienia. Zamiast ciągu znaków <code>+</code> lub <code>-</code> można podawać liczby odpowiednio dodatnie lub ujemne. Zlecenie z ostatniego przykładu można zapisać także: <code>S/a/b/-2+1</code> lub <code>S/a/b/-2 1</code> Podanie po ciągu znaków <code>+</code>, <code>-</code> znaku <code>G</code> oznacza wykonanie podstawienia dla wszystkich pozostałych łańcuchów zgodnych ze wzorcem:


  a3=x1+a2+a+a
  a3=x1+a2+a+a
S/a/b/--G
 
po wykonaniu polecenia <code>S/a/b/--G</code>:
 
  a3=x1+a2+b+b
  a3=x1+a2+b+b


Linia 174: Linia 188:
== Łączenie wierszy ==
== Łączenie wierszy ==


Do łączenia wierszy służy instrukcja <code>J</code>. Zlecenie <code>JJ</code> połączy bieżący wiersz z następnym. Jeżeli w zleceniu opisany jest obszar obejmujący więcej niż jeden wiersz, to połączone zostaną wszystkie wskazane wiersze. Należy zwrócić tu uwagę, że zlecenia w postaci <code>J</code>, <code>:1J</code>, <code>:2J</code> <code>+1J</code> są równoważne sobie i powodują połączenie bieżącego wiersza z następnym (zlecenia inne działające na wielu wierszach np <code>D:</code>, <code>1D</code>, <code>:2D</code> <code>+1D</code> nie są sobie równoważne, gdyż dwa pierwsze dotyczą wiersza bieżącego, a pozostałe wiersza bieżącego i następnego).
Do łączenia wierszy służy instrukcja <code>J</code>. Zlecenie <code>JJ</code> połączy bieżący wiersz z następnym. Jeżeli w zleceniu opisany jest obszar obejmujący więcej niż jeden wiersz, to połączone zostaną wszystkie wskazane wiersze. Należy zwrócić tu uwagę, że zlecenia w postaci <code>J</code>, <code>:1J</code>, <code>:2J,+1J</code> są równoważne sobie i powodują połączenie bieżącego wiersza z następnym (zlecenia inne działające na wielu wierszach np <code>D:</code>, <code>1D</code>, <code>:2D,+1D</code> nie są sobie równoważne, gdyż dwa pierwsze dotyczą wiersza bieżącego, a pozostałe wiersza bieżącego i następnego).


Wierszem bieżącym po wykonaniu instrukcji jest nowo utworzony wiersz. Zlecenie <code>J</code> może być uzupełnione dodatkowymi parametrami oznaczającymi, że z wierszy dołączanych będą usuwane wszystkie spacje i znaki tabulacji rozpoczynające te wiersze: <code>J^</code> oraz, że przed każdym dołączonym wierszem zostanie wstawiony wskazany łańcuch: <code>J/<łańcuch></code>. Oba parametry można użyć razem: <code>J^/*</code>. Powyższy przykład oznacza usunięcie z dołączanego wiersza prowadzących spacji i znaków tabulacji oraz wstawienie między połączone wiersze znaku '''*'''.
Wierszem bieżącym po wykonaniu instrukcji jest nowo utworzony wiersz. Zlecenie <code>J</code> może być uzupełnione dodatkowymi parametrami oznaczającymi, że z wierszy dołączanych będą usuwane wszystkie spacje i znaki tabulacji rozpoczynające te wiersze: <code>J^</code> oraz, że przed każdym dołączonym wierszem zostanie wstawiony wskazany łańcuch: <code>J/<łańcuch></code>. Oba parametry można użyć razem: <code>J^/*</code>. Powyższy przykład oznacza usunięcie z dołączanego wiersza prowadzących spacji i znaków tabulacji oraz wstawienie między połączone wiersze znaku '''*'''.
Linia 196: Linia 210:
* <code>CI</code> - skopiowanie obszaru przed wskazany wiersz
* <code>CI</code> - skopiowanie obszaru przed wskazany wiersz


Po wykonaniu zlecenia wierszem bieżącym staje się ostatni przeniesiony lub skopiowany wiersz (instrukcje <code>MA</code>, <code>CA</code>) lub wiersz wskazany po prawej stronie zlecenia (przy instrukcjach <code>CI</code>, <code>MI</code>). Obszar bufora roboczego może być kopiowany lub przenoszony także między buforem roboczym a buforami pomocniczymi znajdującymi się poza poprawianym buforem. Jest 26 buforów nazwanych pojedynczymi literami A..Z oraz jeden specjalny bufor pomocniczy bez nazwy. Przenoszenie wierszy do buforów pomocniczych jest wykonywane zleceniem <code>D</code>. Zlecenie to wykonane w postaci podanej wcześniej w opisie usunie wskazane wiersze z bufora roboczego i przeniesie je do specjalnego bufora pomocniczego. Podanie zlecenia <code>D</code> z parametrem np: <code>D</code> <code>B</code> przeniesie wskazane wiersze (tu tylko wiersz bieżący) do wskazanego bufora. Kopiowanie wierszy do buforów pomocniczych jest wykonywane zleceniem <code>Y</code>. I tu można podać nazwę bufora, do którego mają być skopiowane wskazane wiersze. Gdy nazwa bufora nie zostanie podana, buforem tym będzie specjalny bufor pomocniczy. Kopiowanie zawartości buforów pomocniczych do bufora roboczego jest wykonywane zleceniami <code>PA</code> i <code>PI</code>. Kopiują one zawartość wskazanego bufora odpowiednio za (<code>PA</code>) lub przed (<code>PI</code>) wierszem bieżącym. Jeżeli nazwa bufora nie zostanie podana, kopiowany będzie specjalny bufor pomocniczy. Zlecenia: <code>20:5 Y A</code> <code>30 PA A</code> są równoważne zleceniu <code>20:5 CA 30</code> z tą jednak różnicą, że w buforze <code>A</code> są zachowane wiersze 20-24 i można je skopiować jeszcze raz (lub dowolnie wiele razy) w inne miejsce bufora roboczego. Bezparametrowe zlecenie " wyświetla na monitorze informacje o zawartości buforów w postaci:
Po wykonaniu zlecenia wierszem bieżącym staje się ostatni przeniesiony lub skopiowany wiersz (instrukcje <code>MA</code>, <code>CA</code>) lub wiersz wskazany po prawej stronie zlecenia (przy instrukcjach <code>CI</code>, <code>MI</code>). Obszar bufora roboczego może być kopiowany lub przenoszony także między buforem roboczym a buforami pomocniczymi znajdującymi się poza poprawianym buforem. Jest 26 buforów nazwanych pojedynczymi literami A..Z oraz jeden specjalny bufor pomocniczy bez nazwy. Przenoszenie wierszy do buforów pomocniczych jest wykonywane zleceniem <code>D</code>. Zlecenie to wykonane w postaci podanej wcześniej w opisie usunie wskazane wiersze z bufora roboczego i przeniesie je do specjalnego bufora pomocniczego. Podanie zlecenia <code>D</code> z parametrem np: <code>D</code> <code>B</code> przeniesie wskazane wiersze (tu tylko wiersz bieżący) do wskazanego bufora. Kopiowanie wierszy do buforów pomocniczych jest wykonywane zleceniem <code>Y</code>. I tu można podać nazwę bufora, do którego mają być skopiowane wskazane wiersze. Gdy nazwa bufora nie zostanie podana, buforem tym będzie specjalny bufor pomocniczy. Kopiowanie zawartości buforów pomocniczych do bufora roboczego jest wykonywane zleceniami <code>PA</code> i <code>PI</code>. Kopiują one zawartość wskazanego bufora odpowiednio za (<code>PA</code>) lub przed (<code>PI</code>) wierszem bieżącym. Jeżeli nazwa bufora nie zostanie podana, kopiowany będzie specjalny bufor pomocniczy. Zlecenia: <code>20:5 Y A</code> <code>30 PA A</code> są równoważne zleceniu <code>20:5 CA 30</code> z tą jednak różnicą, że w buforze <code>A</code> są zachowane wiersze 20-24 i można je skopiować jeszcze raz (lub dowolnie wiele razy) w inne miejsce bufora roboczego. Bezparametrowe zlecenie <code>"</code> wyświetla na monitorze informacje o zawartości buforów w postaci:


  <nazwa_bufora> <liczba_wierszy_w_buforze>
  <nazwa_bufora> <liczba_wierszy_w_buforze>
Linia 204: Linia 218:
== Wyprowadzanie bufora roboczego do zbioru ==
== Wyprowadzanie bufora roboczego do zbioru ==


Do wyprowadzania aktualnie poprawianego bufora służy opisane już wcześniej zlecenie <code>W <tytuł_zbioru></code>. Zlecenie w powyższej postaci wyprowadza do wskazanego zbioru cały bufor roboczy. W poprzedzone opisem obszaru wyprowadza do zbioru tylko wskazane wiersze. Zlecenie <code>10,20 W ROB</code> wyprowadzi do zbioru '''ROB''' tylko wiersze od 10 do 20 włącznie. Wyprowadzane wiersze będą dołączane do istniejącego zbioru, jeżeli tytuł zbioru zostanie poprzedzona znakiem '''>''': <code>W >ROB</code>. Brak opisu obszaru w zleceniu W nie oznacza, jak dla innych zleceń wiersza bieżącego ale cały zbiór. Wiersz bieżący (i tylko ten jeden wiersz) można wskazać znakiem kropki. Zlecenie <code>.W >ROB</code> dołączy do zbioru ROB tylko wiersz bieżący. Nie podanie nazwy zbioru w zleceniu W oznacza wyprowadzenie wskazanych wierszy do tego samego zbioru, który został uprzednio wczytany do bufora roboczego (tytuł zbioru wczytanego do bufora jest parametrem domyślnym zlecenia W). Wyprowadzenie wierszy do innego zbioru można uzyskać podając nazwę zbioru w zleceniu W (tak jak pokazano wcześniej) lub zmieniając parametr domyślny tego zlecenia instrukcją <code>F <tytuł_zbioru></code>. Zlecenie <code>F</code> bez podanej nazwy zbioru wyprowadza informacje o poprawianym buforze roboczym w postaci:
Do wyprowadzania aktualnie poprawianego bufora służy opisane już wcześniej zlecenie <code>W <tytuł_zbioru></code>. Zlecenie w powyższej postaci wyprowadza do wskazanego zbioru cały bufor roboczy. W poprzedzone opisem obszaru wyprowadza do zbioru tylko wskazane wiersze. Zlecenie <code>10,20 W ROB</code> wyprowadzi do zbioru '''ROB''' tylko wiersze od 10 do 20 włącznie. Wyprowadzane wiersze będą dołączane do istniejącego zbioru, jeżeli tytuł zbioru zostanie poprzedzona znakiem <code>></code>: <code>W >ROB</code>. Brak opisu obszaru w zleceniu W nie oznacza, jak dla innych zleceń wiersza bieżącego ale cały zbiór. Wiersz bieżący (i tylko ten jeden wiersz) można wskazać znakiem kropki. Zlecenie <code>.W >ROB</code> dołączy do zbioru ROB tylko wiersz bieżący. Nie podanie nazwy zbioru w zleceniu W oznacza wyprowadzenie wskazanych wierszy do tego samego zbioru, który został uprzednio wczytany do bufora roboczego (tytuł zbioru wczytanego do bufora jest parametrem domyślnym zlecenia W). Wyprowadzenie wierszy do innego zbioru można uzyskać podając nazwę zbioru w zleceniu W (tak jak pokazano wcześniej) lub zmieniając parametr domyślny tego zlecenia instrukcją <code>F <tytuł_zbioru></code>. Zlecenie <code>F</code> bez podanej nazwy zbioru wyprowadza informacje o poprawianym buforze roboczym w postaci:


  E: <numer_bufora> <tytuł_zbioru> <liczba_wierszy>
  E: <numer_bufora> <tytuł_zbioru> <liczba_wierszy>
Linia 249: Linia 263:
Pierwsza z opcji pokazanych w przykładzie - 'wrapscan' (ustawiana WS/gaszona NWS) jest istotna przy wykonywaniu operacji szukania wiersza według wzorca: gdy wskazany wzorzec nie zostanie znaleziony do końca (lub początku - przy szukaniu do tyłu) bufora roboczego, przeszukany będzie jeszcze obszar od początku (lub końca) bufora roboczego do wiersza bieżącego. Gdy opcja 'wrapscan' jest zgaszona, nie znalezienie wzorca do końca (lub początku - przy przeszukiwaniu do tyłu) bufora roboczego kończy szukanie.
Pierwsza z opcji pokazanych w przykładzie - 'wrapscan' (ustawiana WS/gaszona NWS) jest istotna przy wykonywaniu operacji szukania wiersza według wzorca: gdy wskazany wzorzec nie zostanie znaleziony do końca (lub początku - przy szukaniu do tyłu) bufora roboczego, przeszukany będzie jeszcze obszar od początku (lub końca) bufora roboczego do wiersza bieżącego. Gdy opcja 'wrapscan' jest zgaszona, nie znalezienie wzorca do końca (lub początku - przy przeszukiwaniu do tyłu) bufora roboczego kończy szukanie.


Dużą grupę opcji stanowią opcje listowania. Opcja 'autoprint' (AP/NAP) oznacza wyświetlanie bieżącego wiersza po wykonaniu każdego zlecenia. Gdy opcja 'autoprint' jest zgaszona, wiersze są wyświetlane tylko zleceniami zawierającymi instrukcje <code>P</code>, <code>L</code> lub <code>#</code>. Instrukcje <code>P</code> i <code>L</code> różnią się sposobem wyprowadzania znaków kontrolnych (o kodach 1 do 26) . Instrukcja <code>P</code> zamienia je na spacje, <code>L</code> - wyprowadza za pomocą dwóch znaków: ''^<litera>''. Przy ustawionej opcji 'autoprint' sposób wyświetlania znaków kontrolnych ustala opcja 'listcontrol' (LC/NLC). Gdy jest zapalona, znaki kontrolne są wyprowadzane tak jak instrukcją <code>L</code>, w przeciwnym razie - tak jak instrukcją <code>P</code>. Ostatnia opcja listowania: 'number' (NU/NNU) oznacza listowanie wierszy z numeracją w buforze. Każdy wyprowadzany wiersz jest poprzedzany numerem zajmującym pole 5 znaków (lewostronnie uzupełnionym spacjami) i jedną spacją separującą numer od zawartości wiersza. Gdy opcja jest zgaszona (NNU), wiersze są wyprowadzane bez numeracji.
Dużą grupę opcji stanowią opcje listowania. Opcja 'autoprint' (AP/NAP) oznacza wyświetlanie bieżącego wiersza po wykonaniu każdego zlecenia. Gdy opcja 'autoprint' jest zgaszona, wiersze są wyświetlane tylko zleceniami zawierającymi instrukcje <code>P</code>, <code>L</code> lub <code>#</code>. Instrukcje <code>P</code> i <code>L</code> różnią się sposobem wyprowadzania znaków kontrolnych (o kodach 1 do 26). Instrukcja <code>P</code> zamienia je na spacje, <code>L</code> - wyprowadza za pomocą dwóch znaków: ''^<litera>''. Przy ustawionej opcji 'autoprint' sposób wyświetlania znaków kontrolnych ustala opcja 'listcontrol' (LC/NLC). Gdy jest zapalona, znaki kontrolne są wyprowadzane tak jak instrukcją <code>L</code>, w przeciwnym razie - tak jak instrukcją <code>P</code>. Ostatnia opcja listowania: 'number' (NU/NNU) oznacza listowanie wierszy z numeracją w buforze. Każdy wyprowadzany wiersz jest poprzedzany numerem zajmującym pole 5 znaków (lewostronnie uzupełnionym spacjami) i jedną spacją separującą numer od zawartości wiersza. Gdy opcja jest zgaszona (NNU), wiersze są wyprowadzane bez numeracji.


Kolejna opcja: 'clear' (CL/NCL) dotyczy wierszy wprowadzanych do obszaru roboczego (zleceniami <code>RA</code>, <code>RI</code>, <code>I</code>, <code>A</code>, <code>C</code>, <code>S</code>). Gdy jest ustawiona, ze wszystkich wprowadzanych wierszy są usuwane wszystkie znaki kontrolne oprócz lf(012) ht (011) i ff (014). Znaki kontrolne z wiersza bieżącego (lub ze wskazanych wierszy) można usunąć instrukcją <code>CL</code> działającą niezależnie od opcji 'clear'. Drugą opcją dotyczącą wierszy wprowadzanych (działa na te same wiersze co opcja 'clear') jest opcja 'lowtoupper' (LU/NLU). Gdy jest ustawiona, wszystkie małe litery są zamieniane na duże. Litery małe na duże można zamienić w wierszu bieżącym lub we wskazanych wierszach zleceniem <code>LU</code> działającym niezależnie od opcji 'lowtoupper'.
Kolejna opcja: 'clear' (CL/NCL) dotyczy wierszy wprowadzanych do obszaru roboczego (zleceniami <code>RA</code>, <code>RI</code>, <code>I</code>, <code>A</code>, <code>C</code>, <code>S</code>). Gdy jest ustawiona, ze wszystkich wprowadzanych wierszy są usuwane wszystkie znaki kontrolne oprócz lf(012) ht (011) i ff (014). Znaki kontrolne z wiersza bieżącego (lub ze wskazanych wierszy) można usunąć instrukcją <code>CL</code> działającą niezależnie od opcji 'clear'. Drugą opcją dotyczącą wierszy wprowadzanych (działa na te same wiersze co opcja 'clear') jest opcja 'lowtoupper' (LU/NLU). Gdy jest ustawiona, wszystkie małe litery są zamieniane na duże. Litery małe na duże można zamienić w wierszu bieżącym lub we wskazanych wierszach zleceniem <code>LU</code> działającym niezależnie od opcji 'lowtoupper'.


Dwie dalsze opcje: 'lenghtline'(LEN/NLE) i 'linenumber' (LIN/NLI) formatują listowane obszary bufora na ekranie monitora. Zapalona opcja 'lenghtline' oznacza,że wyprowadzane wiersze mają być dzielone na linie o co najwyżej ustalonej długości. Opcja 'linenumber' steruje wydrukiem większych obszarów. Jeżeli jest zapalona, to po zapełnieniu ekranu wydruk jest zatrzymywany. Wznowienie wydruku następuje po wprowadzeniu cr. Wprowadzenie '''dc4''' kończy wydruk - wierszem bieżącym jest ostatni wyprowadzony wiersz. Opcje 'linenumber' i 'lenghtline' działają także przy wykonywaniu zlecenia <code>S</code>, gdy zmieniane wiersze są wyświetlane na ekranie. Po zapełnieniu ekranu wykonywanie zlecenia jest zatrzymywane. wprowadzenie '''cr''' wznawia wykonanie, zaś '''dc4''' kończy wykonanie zlecenia( pozostałe wiersze nie są analizowane). Obu opcjom można nadawać dowolne wartości. Ustawienie: <code>SET LEN=40 LIN=18</code> oznacza skrócenie wyprowadzanych linii do 40 znaków (dłuższe wiersze są dzielone na linie o tej długości) i zatrzymywanie listingu po wyprowadzeniu 18 wierszy. Jeżeli opcje te zostaną zgaszone: <code>SET NLE NLI</code>, to ponowne ich ustawienie: <code>SET LEN LIN</code> przywróci opcjom wartości jakie miały przed zgaszeniem. Po wywołaniu edytora stan powyższych opcji jest taki jak po wykonaniu zlecenia: <code>SET NWS AP NU LC NCL NLU LIN=22 LEN=80</code>
Dwie dalsze opcje: 'lenghtline'(LEN/NLE) i 'linenumber' (LIN/NLI) formatują listowane obszary bufora na ekranie monitora. Zapalona opcja 'lenghtline' oznacza,że wyprowadzane wiersze mają być dzielone na linie o co najwyżej ustalonej długości. Opcja 'linenumber' steruje wydrukiem większych obszarów. Jeżeli jest zapalona, to po zapełnieniu ekranu wydruk jest zatrzymywany. Wznowienie wydruku następuje po wprowadzeniu '''cr'''. Wprowadzenie '''dc4''' kończy wydruk - wierszem bieżącym jest ostatni wyprowadzony wiersz. Opcje 'linenumber' i 'lenghtline' działają także przy wykonywaniu zlecenia <code>S</code>, gdy zmieniane wiersze są wyświetlane na ekranie. Po zapełnieniu ekranu wykonywanie zlecenia jest zatrzymywane. wprowadzenie '''cr''' wznawia wykonanie, zaś '''dc4''' kończy wykonanie zlecenia( pozostałe wiersze nie są analizowane). Obu opcjom można nadawać dowolne wartości. Ustawienie: <code>SET LEN=40 LIN=18</code> oznacza skrócenie wyprowadzanych linii do 40 znaków (dłuższe wiersze są dzielone na linie o tej długości) i zatrzymywanie listingu po wyprowadzeniu 18 wierszy. Jeżeli opcje te zostaną zgaszone: <code>SET NLE NLI</code>, to ponowne ich ustawienie: <code>SET LEN LIN</code> przywróci opcjom wartości jakie miały przed zgaszeniem. Po wywołaniu edytora stan powyższych opcji jest taki jak po wykonaniu zlecenia: <code>SET NWS AP NU LC NCL NLU LIN=22 LEN=80</code>


= Opis ścisły =
= Opis ścisły =
Linia 534: Linia 548:
* $ - ostatni wiersz bieżącej strony (nie licząc wiersza zawierającego znacznik końca strony). Znak $ ma podane tu znaczenie tylko wtedy, gdy nie jest pierwszym elementem wyrażenia adresowego.
* $ - ostatni wiersz bieżącej strony (nie licząc wiersza zawierającego znacznik końca strony). Znak $ ma podane tu znaczenie tylko wtedy, gdy nie jest pierwszym elementem wyrażenia adresowego.
* > - pierwszy wiersz następnej strony
* > - pierwszy wiersz następnej strony
* ><liczba> - wykonanie operacji > wskazaną liczbę razy
* ><liczba> - wykonanie operacji <code>></code> wskazaną liczbę razy
* < - pierwszy wiersz poprzedniej strony
* < - pierwszy wiersz poprzedniej strony
* <<liczba> - wykonanie operacji < wskazaną liczbę razy
* <<liczba> - wykonanie operacji <code><</code> wskazaną liczbę razy


<opis_zawartości_wiersza>:
<opis_zawartości_wiersza>:
Linia 561: Linia 575:
<wyrażenie_adresowe> M <litera>
<wyrażenie_adresowe> M <litera>


Działanie: do wiersza wskazanego wyrażeniem adresowym jest przywiązywany znacznik o podanej nazwie. Znacznik traci swoje przywiązanie po przedefiniowaniu lub usunięciu wiersza z bufora roboczego (przeniesieniu do bufora pomocniczego). Definicje znaczników są wyprowadzane zleceniem ' w postaci:
Działanie: do wiersza wskazanego wyrażeniem adresowym jest przywiązywany znacznik o podanej nazwie. Znacznik traci swoje przywiązanie po przedefiniowaniu lub usunięciu wiersza z bufora roboczego (przeniesieniu do bufora pomocniczego). Definicje znaczników są wyprowadzane zleceniem <code>'</code> w postaci:


<nazwa_znacznika> <numer_wiersza> <zawartość_wiersza>
<nazwa_znacznika> <numer_wiersza> <zawartość_wiersza>
Linia 579: Linia 593:


* AP - wyświetlanie automatyczne
* AP - wyświetlanie automatyczne
* NAP - wyświetlanie tylko po wykonaniu zleceń zawierających instrukcje listowania (4.2)
* NAP - wyświetlanie tylko po wykonaniu zleceń zawierających instrukcje listowania


Jeżeli zlecenie nie zawiera instrukcji listującej określającej sposób wyprowadzania, postać wyprowadzanych wierszy jest zależna od opcji 'listcontrol':
Jeżeli zlecenie nie zawiera instrukcji listującej określającej sposób wyprowadzania, postać wyprowadzanych wierszy jest zależna od opcji 'listcontrol':
Linia 610: Linia 624:
Składnia zlecenia: <code><opis_obszaru><instrukcje_listujące></code>
Składnia zlecenia: <code><opis_obszaru><instrukcje_listujące></code>


działanie: wskazany obszar jest wyprowadzany na monitor w postaci określonej przez instrukcje listujące lub opcje listowania
Działanie: wskazany obszar jest wyprowadzany na monitor w postaci określonej przez instrukcje listujące lub opcje listowania


<instrukcje_listujące> ::= [L_P][#]
<instrukcje_listujące> ::= [L_P][#]


* P - wszystkie znaki nie wyświetlane (o kodach 0-037 i powyżej 0177) są zamieniane na spacje
* <code>P</code> - wszystkie znaki nie wyświetlane (o kodach 0-037 i powyżej 0177) są zamieniane na spacje
* L - znaki kontrolne (o kodach 1 - 26) są wyprowadzane za pomocą dwóch znaków: ^<litera> (dla monitorów 7910 i 7950 zamiast znaku ^ jest użyty znak funta). Inne znaki nie wyświetlane są wyprowadzane w postaci: \<liczba>, gdzie <liczba> jest 3 znakową liczbą oktalną równą wartości znaku.
* <code>L</code> - znaki kontrolne (o kodach 1 - 26) są wyprowadzane za pomocą dwóch znaków: ^<litera> (dla monitorów 7910 i 7950 zamiast znaku ^ jest użyty znak funta). Inne znaki nie wyświetlane są wyprowadzane w postaci: \<liczba>, gdzie <liczba> jest 3 znakową liczbą oktalną równą wartości znaku.
* # - wyprowadzane wiersze są poprzedzane numerami
* <code>#</code> - wyprowadzane wiersze są poprzedzane numerami


Gdy instrukcje listujące nie są podane, sposób wyprowadzania jest określony przez opcje listowania : 'autoprint', 'listcontrol' i 'number'(4.1).
Gdy instrukcje listujące nie są podane, sposób wyprowadzania jest określony przez opcje listowania : 'autoprint', 'listcontrol' i 'number'.


Wyprowadzanie obszarów większych niż jeden wiersz jest sterowane opcją 'linecount':
Wyprowadzanie obszarów większych niż jeden wiersz jest sterowane opcją 'linecount':
Linia 638: Linia 652:
=== Wyprowadzanie obszaru zleceniem Z ===
=== Wyprowadzanie obszaru zleceniem Z ===


Składnia zlecenia: <wyrażenie_adresowe><instrukcja_Z> [<liczba>] [#]
Składnia zlecenia: <code><wyrażenie_adresowe><instrukcja_Z> [<liczba>] [#]</code>


działanie: na monitor jest wyprowadzany obszar określony przez wyrażenie adresowe i instrukcję Z. Długość tego obszaru jest określona przez podaną liczbę lub, gdy nie jest ona podana, przez wartość opcji 'Zwindow' (standardowo - 7):
Działanie: na monitor jest wyprowadzany obszar określony przez wyrażenie adresowe i instrukcję Z. Długość tego obszaru jest określona przez podaną liczbę lub, gdy nie jest ona podana, przez wartość opcji 'Zwindow' (standardowo 7):


ZW=<liczba>
ZW=<liczba>
Linia 655: Linia 669:
<code>#</code> - listowanie z numeracją wierszy
<code>#</code> - listowanie z numeracją wierszy


Przy wykonaniu zlecenia Z działają opcje 'listcontrol', 'number', 'lenghtline'(4.1) i 'linecount'(4.2). Wierszem bieżącym po wykonaniu zlecenia jest wiersz wskazany przez wyrażenie adresowe.
Przy wykonaniu zlecenia Z działają opcje 'listcontrol', 'number', 'lenghtline' i 'linecount'. Wierszem bieżącym po wykonaniu zlecenia jest wiersz wskazany przez wyrażenie adresowe.


=== Wyprowadzanie wierszy instrukcją globalną ===
=== Wyprowadzanie wierszy instrukcją globalną ===
Linia 661: Linia 675:
Składnia zlecenia: <code>[<opis_obszaru>] G[^]/<wzorzec></code>
Składnia zlecenia: <code>[<opis_obszaru>] G[^]/<wzorzec></code>


Znaczenie: wszystkie wiersze wskazanego obszaru zgodne z podanym wzorcem (lub niezgodne - jeżeli jest podany parametr ^) będą wyprowadzone na monitor. Pusty wzorzec oznacza przyjęcie wzorca użytego w ostatnim zleceniu przeszukiwania bufora. Wskazany obszar musi zawierać więcej niż jeden wiersz. Jeżeli opis obszaru nie zostanie podany, przeszukany zostanie cały bufor. Przy wyprowadzaniu działają opcje 'listcontrol', 'number', 'lenghtline' i 'linecount'(4.2). Wierszem bieżącym po wykonaniu zlecenia jest ostatni wyprowadzony wiersz.
Znaczenie: wszystkie wiersze wskazanego obszaru zgodne z podanym wzorcem (lub niezgodne - jeżeli jest podany parametr ^) będą wyprowadzone na monitor. Pusty wzorzec oznacza przyjęcie wzorca użytego w ostatnim zleceniu przeszukiwania bufora. Wskazany obszar musi zawierać więcej niż jeden wiersz. Jeżeli opis obszaru nie zostanie podany, przeszukany zostanie cały bufor. Przy wyprowadzaniu działają opcje 'listcontrol', 'number', 'lenghtline' i 'linecount'. Wierszem bieżącym po wykonaniu zlecenia jest ostatni wyprowadzony wiersz.


== Usuwanie i wstawianie wierszy ==
== Usuwanie i wstawianie wierszy ==
Linia 669: Linia 683:
Składnia zlecenia: <code><opis_obszaru> D</code>
Składnia zlecenia: <code><opis_obszaru> D</code>


Działanie: wskazany obszar jest usuwany. Usunięte wiersze są przenoszone do specjalnego bufora pomocniczego (7.2). Niedozwolone jest usunięcie całego poprawianego bufora. Wierszem bieżącym po wykonaniu zlecenia jest pierwszy wiersz za usuniętymi; wyjątkowo po usunięciu ostatniego wiersza w buforze - wiersz poprzedzający wiersze usunięte. Zlecenie U wstawia usunięte wiersze z powrotem do bufora roboczego.
Działanie: wskazany obszar jest usuwany. Usunięte wiersze są przenoszone do specjalnego bufora pomocniczego. Niedozwolone jest usunięcie całego poprawianego bufora. Wierszem bieżącym po wykonaniu zlecenia jest pierwszy wiersz za usuniętymi; wyjątkowo po usunięciu ostatniego wiersza w buforze - wiersz poprzedzający wiersze usunięte. Zlecenie U wstawia usunięte wiersze z powrotem do bufora roboczego.


=== Wprowadzanie wierszy z klawiatury ===
=== Wprowadzanie wierszy z klawiatury ===
Linia 677: Linia 691:
Działanie: w miejsce wskazane wyrażeniem adresowym i instrukcją będą wprowadzane wiersze z klawiatury. Po wprowadzeniu zlecenia edytor zgłasza się w nowej linii (jeżeli opcja 'number' ma wartość NU lub PNU, wyświetlany jest numer wprowadzanego wiersza) i wczytuje kolejne wiersze. Jeżeli opcja 'autotab' ma wartość AT, każdy wprowadzany wiersz jest poprzedzany przez edytor ciągiem spacji o długości równej liczbie prowadzących spacji w wierszu wprowadzonym poprzednio (2.4). Podanie jako parametru znaku ! zmienia stan opcji 'autotab' na przeciwny (tylko na czas wykonania zlecenia). Wprowadzanie kończy wpisanie wiersza zawierającego tylko znacznik końca wprowadzania lub znacznik końca zbioru dc4. Znacznikiem końca wprowadzania jest znak podany za instrukcją. Może to być dowolny znak kodu ASCII poza !, cr, dc4, lf i spacją. Jeżeli znacznik końca wprowadzania nie jest podany, wprowadzanie kończy tylko dc4.
Działanie: w miejsce wskazane wyrażeniem adresowym i instrukcją będą wprowadzane wiersze z klawiatury. Po wprowadzeniu zlecenia edytor zgłasza się w nowej linii (jeżeli opcja 'number' ma wartość NU lub PNU, wyświetlany jest numer wprowadzanego wiersza) i wczytuje kolejne wiersze. Jeżeli opcja 'autotab' ma wartość AT, każdy wprowadzany wiersz jest poprzedzany przez edytor ciągiem spacji o długości równej liczbie prowadzących spacji w wierszu wprowadzonym poprzednio (2.4). Podanie jako parametru znaku ! zmienia stan opcji 'autotab' na przeciwny (tylko na czas wykonania zlecenia). Wprowadzanie kończy wpisanie wiersza zawierającego tylko znacznik końca wprowadzania lub znacznik końca zbioru dc4. Znacznikiem końca wprowadzania jest znak podany za instrukcją. Może to być dowolny znak kodu ASCII poza !, cr, dc4, lf i spacją. Jeżeli znacznik końca wprowadzania nie jest podany, wprowadzanie kończy tylko dc4.


Wprowadzane wiersze mogą mieć długość do 255 znaków. Zawartość wprowadzonych wierszy podlega makrorozwinięciu (2.2) i jest modyfikowana zgodnie z ustawieniem opcji 'octalcod', 'clear' i 'lowtoupper' (2.4).
Wprowadzane wiersze mogą mieć długość do 255 znaków. Zawartość wprowadzonych wierszy podlega makrorozwinięciu i jest modyfikowana zgodnie z ustawieniem opcji 'octalcod', 'clear' i 'lowtoupper'.


<instrukcja_A_I>:
<instrukcja_A_I>:
Linia 686: Linia 700:
Dołączenie jednego wiersza realizują instrukcje A I w postaci skróconej:
Dołączenie jednego wiersza realizują instrukcje A I w postaci skróconej:


[A]lf<łańcuch> - wiersz zawierający łańcuch jest dołączany za wierszem wskazanym (znak A nie ma żadnego znaczenia i może być pominięty) Ilf<łańcuch> - wiersz zawierający wskazany łańcuch jest wstawiany przed wierszem wskazanym
[A]lf<łańcuch> - wiersz zawierający łańcuch jest dołączany za wierszem wskazanym (znak A nie ma żadnego znaczenia i może być pominięty) Ilf<łańcuch> - wiersz zawierający wskazany łańcuch jest wstawiany przed wierszem wskazanym.


Po wstawieniu wiersza edytor zgłasza się po kolejne zlecenie. Zlecenie U usuwa wstawione wiersze z bufora roboczego i przenosi je do specjalnego bufora pomocniczego (7.2).
Po wstawieniu wiersza edytor zgłasza się po kolejne zlecenie. Zlecenie <code>U</code> usuwa wstawione wiersze z bufora roboczego i przenosi je do specjalnego bufora pomocniczego.


=== Zamiana wierszy na wprowadzane z końcówki ===
=== Zamiana wierszy na wprowadzane z końcówki ===
Linia 694: Linia 708:
Składnia zlecenia: <code><opis_obszaru> C [ lf<łańcuch> _ ! _ <znak> ]</code>
Składnia zlecenia: <code><opis_obszaru> C [ lf<łańcuch> _ ! _ <znak> ]</code>


Znaczenie: wskazany obszar jest usuwany (przenoszony do specjalnego bufora pomocniczego - 7.2) i na jego miejsce są wprowadzane z klawiatury nowe wiersze. Parametry zlecenia są takie same jak w zleceniach A I (5.2). Wprowadzanie jest wykonywane również tak samo jak instrukcjami A I . Wierszem bieżącym po wykonaniu zlecenia jest ostatni wprowadzony wiersz. Zlecenie U wstawia wiersze usunięte (przenosi je ze specjalnego bufora pomocniczego do bufora roboczego) i usuwa wiersze wstawione (przenosi je do specjalnego bufora pomocniczego).
Znaczenie: wskazany obszar jest usuwany (przenoszony do specjalnego bufora pomocniczego) i na jego miejsce są wprowadzane z klawiatury nowe wiersze. Parametry zlecenia są takie same jak w zleceniach <code>A</code>, <code>I</code>. Wprowadzanie jest wykonywane również tak samo jak instrukcjami <code>A</code> <code>I</code> . Wierszem bieżącym po wykonaniu zlecenia jest ostatni wprowadzony wiersz. Zlecenie <code>U</code> wstawia wiersze usunięte (przenosi je ze specjalnego bufora pomocniczego do bufora roboczego) i usuwa wiersze wstawione (przenosi je do specjalnego bufora pomocniczego).


=== Wczytywanie do bufora wierszy ze zbioru ===
=== Wczytywanie do bufora wierszy ze zbioru ===
Linia 700: Linia 714:
Składnia zlecenia: <code><wyrażenie_adresowe> <instrukcja_R> <tytuł_zbioru> [<opis_obszaru>]</code>
Składnia zlecenia: <code><wyrażenie_adresowe> <instrukcja_R> <tytuł_zbioru> [<opis_obszaru>]</code>


Działanie:w miejsce określone wyrażeniem adresowym i zleceniem R zostaną wprowadzone wiersze ze zbioru o podanej nazwie. Wiersze, które mają być wczytane są wskazane opisem obszaru podanym za nazwą zbioru. Opis obszaru ma składnię w zasadzie taką samą jak opisany w p 3.5. tzn. może składać się z adresu wiersza, adresów wierszy rozdzielonych znakami , lub ; (znaczenie obu separatorów jest w tym przypadku takie samo) albo adresu wiersza i liczby wierszy. Brak opisu obszaru oznacza wczytanie całego zbioru. Elementami wyrażeń adresowych nie mogą być elementy cofające wskaźnik dostępu (- < ^ ?<wzorzec>? ). Pozostałe elementy mają takie samo znaczenie, jak w wyrażeniach adresowych. Jedynym wyjątkiem jest znak $ oznaczający koniec bieżącej strony. I tu oznacza on ostatni wiersz strony, ale wiersz zawierający znacznik końca strony jest wliczany do strony. Wczytywany zbiór jest dzielony na strony tak samo jak poprawiany bufor. Długość czytanego zbioru jest określona parametrami PA1 i PA2. Jeżeli wartość tych parametrów wykracza poza dopuszczalny zakres (lub jest niezgodna z parametrem LEN) sygnalizowany jest zły typ zbioru wejściowego i zbiór nie jest wczytywany. Jeżeli parametry PA1 i PA2 zbioru mają wartość 0, długość czytanego zbioru jest wyliczana z parametru LEN. Wprowadzane wiersze muszą mieć długość do 255 znaków. Wiersze dłuższe są dzielone na wiersze o długości 255 znaków.
Działanie: w miejsce określone wyrażeniem adresowym i zleceniem R zostaną wprowadzone wiersze ze zbioru o podanej nazwie. Wiersze, które mają być wczytane są wskazane opisem obszaru podanym za nazwą zbioru. Opis obszaru ma składnię w zasadzie taką samą jak opisany w p 3.5. tzn. może składać się z adresu wiersza, adresów wierszy rozdzielonych znakami , lub ; (znaczenie obu separatorów jest w tym przypadku takie samo) albo adresu wiersza i liczby wierszy. Brak opisu obszaru oznacza wczytanie całego zbioru. Elementami wyrażeń adresowych nie mogą być elementy cofające wskaźnik dostępu (- < ^ ?<wzorzec>? ). Pozostałe elementy mają takie samo znaczenie, jak w wyrażeniach adresowych. Jedynym wyjątkiem jest znak $ oznaczający koniec bieżącej strony. I tu oznacza on ostatni wiersz strony, ale wiersz zawierający znacznik końca strony jest wliczany do strony. Wczytywany zbiór jest dzielony na strony tak samo jak poprawiany bufor. Długość czytanego zbioru jest określona parametrami PA1 i PA2. Jeżeli wartość tych parametrów wykracza poza dopuszczalny zakres (lub jest niezgodna z parametrem LEN) sygnalizowany jest zły typ zbioru wejściowego i zbiór nie jest wczytywany. Jeżeli parametry PA1 i PA2 zbioru mają wartość 0, długość czytanego zbioru jest wyliczana z parametru LEN. Wprowadzane wiersze muszą mieć długość do 255 znaków. Wiersze dłuższe są dzielone na wiersze o długości 255 znaków.


<instrukcja_R>:
<instrukcja_R>:
Linia 713: Linia 727:
=== Zlecenie podstawienia ===
=== Zlecenie podstawienia ===


Składnia zlecenia: <opis_obszaru>S/<wzorzec> [/<wzorzec_łańcucha> [/<schemat_podstawienia> <instrukcje_listujące>] ]
Składnia zlecenia: <code><opis_obszaru>S/<wzorzec> [/<wzorzec_łańcucha> [/<schemat_podstawienia> <instrukcje_listujące>] ]</code>


Działanie: we wskazanych wierszach łańcuchy zgodne ze wzorcem są zamieniane na łańcuchy wskazane przez <wzorzec_łańcucha>. Z łańcuchów zgodnych ze wzorcem są zamieniane tylko wskazane przez schemat podstawienia. Po wykonaniu zlecenia poprawione wiersze są wyprowadzane na monitor w postaci określonej przez instrukcje listujące. Uwaga. Znakiem ograniczającym wzorce może być zamiast znaku / dowolny inny znak poza spacją. Ze względu na specjalne znaczenie wielu znaków we wzorcach nie zaleca się stosowania innych znaków poza: ; : ' " i = .
Działanie: we wskazanych wierszach łańcuchy zgodne ze wzorcem są zamieniane na łańcuchy wskazane przez <wzorzec_łańcucha>. Z łańcuchów zgodnych ze wzorcem są zamieniane tylko wskazane przez schemat podstawienia. Po wykonaniu zlecenia poprawione wiersze są wyprowadzane na monitor w postaci określonej przez instrukcje listujące. Uwaga. Znakiem ograniczającym wzorce może być zamiast znaku / dowolny inny znak poza spacją. Ze względu na specjalne znaczenie wielu znaków we wzorcach nie zaleca się stosowania innych znaków poza: ; : ' " i = .
Linia 744: Linia 758:
<opis_wystąpienia> : opisuje operację wykonywaną na kolejnych łańcuchach zgodnych ze wzorcem:
<opis_wystąpienia> : opisuje operację wykonywaną na kolejnych łańcuchach zgodnych ze wzorcem:


* - - kolejny łańcuch pozostaje bez zmian
* <code>-</code> - kolejny łańcuch pozostaje bez zmian
* + - kolejny łańcuch jest zamieniany
* <code>+</code> - kolejny łańcuch jest zamieniany
* -<liczba> - wskazana liczba kolejnych łańcuchów jest pozostawiana bez zmian
* <code>-<liczba></code> - wskazana liczba kolejnych łańcuchów jest pozostawiana bez zmian
* [+]<liczba> - wskazana liczba kolejnych łańcuchów jest zamieniana
* <code>[+]<liczba></code> - wskazana liczba kolejnych łańcuchów jest zamieniana
* G - wszystkie następne łańcuchy zgodne ze wzorcem znajdujące się w wierszu są zamieniane
* <code>G</code> - wszystkie następne łańcuchy zgodne ze wzorcem znajdujące się w wierszu są zamieniane
* & - schemat podstawienia jest taki sam jak w ostatnim zleceniu podstawienia (nie dotyczy ostatniego elementu - ?)
* <code>&</code> - schemat podstawienia jest taki sam jak w ostatnim zleceniu podstawienia (nie dotyczy ostatniego elementu - ?)
* ? - wszystkie podstawienia wskazane przez schemat podstawienia będą wykonane dopiero po akceptacji. łańcuch, który ma być zamieniony, jest podkreślany przez edytor ciągiem znaków ^..^. O podstawieniu decyduje wprowadzony znak akceptacji:
* <code>?</code> - wszystkie podstawienia wskazane przez schemat podstawienia będą wykonane dopiero po akceptacji. łańcuch, który ma być zamieniony, jest podkreślany przez edytor ciągiem znaków ^..^. O podstawieniu decyduje wprowadzony znak akceptacji:
** + - podstawienie wykonywane
** <code>+</code> - podstawienie wykonywane
** - - podstawienie nie wykonywane
** <code>-</code> - podstawienie nie wykonywane
** G - wszystkie pozostałe podstawienia wykonywane bez akceptacji
** <code>G</code> - wszystkie pozostałe podstawienia wykonywane bez akceptacji
** cr - podstawienie nie wykonywane i dalsza część wiersza pozostaje bez zmian
** '''cr''' - podstawienie nie wykonywane i dalsza część wiersza pozostaje bez zmian
** dc4 - podstawienie nie wykonywane, dalsza część wiersza pozostaje bez zmian i następne wiersze wskazanego obszaru nie są analizowane
** '''dc4''' - podstawienie nie wykonywane, dalsza część wiersza pozostaje bez zmian i następne wiersze wskazanego obszaru nie są analizowane


<instrukcje_listujące>- składnia i znaczenie takie same jak opisane w p 4.2.
<instrukcje_listujące>- składnia i znaczenie takie same jak opisane w p 4.2.
Linia 787: Linia 801:
Uwaga. Ciągi % i @ niezależnie od ustawienia opcji 'magic' nie są rozwijane - wszystkie znaki oznaczają siebie.
Uwaga. Ciągi % i @ niezależnie od ustawienia opcji 'magic' nie są rozwijane - wszystkie znaki oznaczają siebie.


Schemat podstawienia i instrukcje listujące są takie same jak dla pełnej instrukcji podstawienia (6.1)
Schemat podstawienia i instrukcje listujące są takie same jak dla pełnej instrukcji podstawienia.


Ostatnio użyte wzorce i łańcuchy wymienione wyżej oraz łańcuch wskazywany przez symbol @ są wyświetlane na monitorze bezparametrowym zleceniem S. W pierwszym wierszu są wyprowadzane ostatnio użyte wzorce w postaci: /a/ S /b/d/ (a, b i d oznaczają wzorce jw.). W następnych wierszach są wyprowadzane łańcuchy wskazywane symbolami _~, @ i % używanymi we wzorcach.
Ostatnio użyte wzorce i łańcuchy wymienione wyżej oraz łańcuch wskazywany przez symbol @ są wyświetlane na monitorze bezparametrowym zleceniem S. W pierwszym wierszu są wyprowadzane ostatnio użyte wzorce w postaci: /a/ S /b/d/ (a, b i d oznaczają wzorce jw.). W następnych wierszach są wyprowadzane łańcuchy wskazywane symbolami _~, @ i % używanymi we wzorcach.
Linia 797: Linia 811:
Składnia zlecenia: <code><opis_obszaru> O</code>
Składnia zlecenia: <code><opis_obszaru> O</code>


Działanie: na ekran monitora są wyprowadzane kolejne wiersze wskazanego obszaru. Cała zawartość wiersza jest umieszczana w polu niechronionym i kursor jest ustawiany za ostatnim znakiem wiersza. Zmiany zawartości wiersza można dokonać bezpośrednio wstawiając (INS MODE), usuwając (DEL) lub zamieniając znaki na ekranie. Po wciśnięciu klawisza SEND zmodyfikowana zawartość wiersza jest zapisywana do bufora roboczego i edytor wyprowadza na ekran kolejny wiersz obszaru wskazanego w zleceniu. Wprowadzenie dc4 (PF12) przerywa wykonanie zlecenia (ostatni wiersz wyświetlony na ekranie pozostaje w buforze bez zmian). Zawartość wierszy jest wyprowadzana na ekran w postaci określonej przez handler monitorów 7910/50 . Niezależnie od ustawienia opcji 'listcontrol' znaki o kodach 1..26 są listowane (jako małe litery poprzedzone znakiem funta) a inne znaki nie wyświetlane są zamieniane na spacje. I tak też zostaną wprowadzone do bufora po poprawieniu. Poprawione wiersze są po wczytaniu modyfikowane zgodnie z ustawieniem opcji 'lowtoupper' i 'clear'. Opcja 'octalcod' jest ignorowana, nie są też wykonywane makrorozwinięcia. Uwaga. Jeżeli pole niechronione zostanie całkowicie wyzerowane, to zawartość wiersza w buforze roboczym pozostanie nie zmieniona. Zlecenie U wykonane po zleceniu O cofa zmiany wykonane w ostatnim poprawionym wierszu.
Działanie: na ekran monitora są wyprowadzane kolejne wiersze wskazanego obszaru. Cała zawartość wiersza jest umieszczana w polu niechronionym i kursor jest ustawiany za ostatnim znakiem wiersza. Zmiany zawartości wiersza można dokonać bezpośrednio wstawiając (INS MODE), usuwając (DEL) lub zamieniając znaki na ekranie. Po wciśnięciu klawisza SEND zmodyfikowana zawartość wiersza jest zapisywana do bufora roboczego i edytor wyprowadza na ekran kolejny wiersz obszaru wskazanego w zleceniu. Wprowadzenie '''dc4''' (PF12) przerywa wykonanie zlecenia (ostatni wiersz wyświetlony na ekranie pozostaje w buforze bez zmian). Zawartość wierszy jest wyprowadzana na ekran w postaci określonej przez handler monitorów 7910/50 . Niezależnie od ustawienia opcji 'listcontrol' znaki o kodach 1..26 są listowane (jako małe litery poprzedzone znakiem funta) a inne znaki nie wyświetlane są zamieniane na spacje. I tak też zostaną wprowadzone do bufora po poprawieniu. Poprawione wiersze są po wczytaniu modyfikowane zgodnie z ustawieniem opcji 'lowtoupper' i 'clear'. Opcja 'octalcod' jest ignorowana, nie są też wykonywane makrorozwinięcia. Uwaga. Jeżeli pole niechronione zostanie całkowicie wyzerowane, to zawartość wiersza w buforze roboczym pozostanie nie zmieniona. Zlecenie <code>U</code> wykonane po zleceniu <code>O</code> cofa zmiany wykonane w ostatnim poprawionym wierszu.


=== Usuwanie znaków kontrolnych ===
=== Usuwanie znaków kontrolnych ===
Linia 830: Linia 844:
=== Przenoszenie i kopiowanie wierszy w buforze ===
=== Przenoszenie i kopiowanie wierszy w buforze ===


Składnia zlecenia: <opis_obszaru> <instrukcja_C_M> <wyrażenie_adresowe>
Składnia zlecenia: <code><opis_obszaru> <instrukcja_C_M> <wyrażenie_adresowe></code>


działanie: wskazany obszar jest kopiowany lub przenoszony w miejsce określone przez wyrażenie adresowe.
Działanie: wskazany obszar jest kopiowany lub przenoszony w miejsce określone przez wyrażenie adresowe.


<instrukcja_C_M>:
<instrukcja_C_M>:
Linia 846: Linia 860:
=== Przenoszenie i kopiowanie wierszy do buforów pomocniczych ===
=== Przenoszenie i kopiowanie wierszy do buforów pomocniczych ===


Składnia zlecenia: <opis_obszaru> <instrukcja_D_Y> [>] [<litera>]
Składnia zlecenia: <code><opis_obszaru> <instrukcja_D_Y> [>] [<litera>]</code>


działanie: wskazany obszar jest kopiowany lub przenoszony (usuwany z bufora roboczego) do bufora pomocniczego nazwanego pojedyncza literą. Jeżeli jest podany parametr >, wskazane wiersze są dołączane do zawartości bufora pomocniczego. W przeciwnym razie poprzednia zawartość bufora jest niszczona. Jeżeli nazwa bufora nie zostanie podana, wiersze będą przeniesione lub skopiowane do bufora specjalnego.
Działanie: wskazany obszar jest kopiowany lub przenoszony (usuwany z bufora roboczego) do bufora pomocniczego nazwanego pojedyncza literą. Jeżeli jest podany parametr >, wskazane wiersze są dołączane do zawartości bufora pomocniczego. W przeciwnym razie poprzednia zawartość bufora jest niszczona. Jeżeli nazwa bufora nie zostanie podana, wiersze będą przeniesione lub skopiowane do bufora specjalnego.


<instrukcja_D_Y>:
<instrukcja_D_Y>:
Linia 882: Linia 896:
=== Edycja następnego zbioru ===
=== Edycja następnego zbioru ===


Składnia zlecenia: N <tytuł_zbioru>
Składnia zlecenia: <code>N <tytuł_zbioru></code>


działanie: wskazany zbiór jest wczytywany do kolejnego bufora roboczego. Bufor roboczy otrzymuje kolejny numer i nazwę zgodną z tytułem zbioru podanym w zleceniu. Dotychczas poprawiany bufor jest zachowywany w zbiorach roboczych. Wskaźnik dostępu jest ustawiany na pierwszy wiersz bufora. Długość czytanego zbioru jest określona parametrami PA1 i PA2. Jeżeli wartość tych parametrów wykracza poza dopuszczalny zakres (lub jest niezgodna z parametrem LEN) sygnalizowany jest zły typ zbioru wejściowego i bufor nie jest otwierany. Jeżeli parametry PA1 i PA2 zbioru mają wartość 0, długość czytanego zbioru jest wyliczana z parametru LEN. Jeżeli zbiór o podanym tytule nie jest dostępny, wyprowadzany jest komunikat:
Działanie: wskazany zbiór jest wczytywany do kolejnego bufora roboczego. Bufor roboczy otrzymuje kolejny numer i nazwę zgodną z tytułem zbioru podanym w zleceniu. Dotychczas poprawiany bufor jest zachowywany w zbiorach roboczych. Wskaźnik dostępu jest ustawiany na pierwszy wiersz bufora. Długość czytanego zbioru jest określona parametrami PA1 i PA2. Jeżeli wartość tych parametrów wykracza poza dopuszczalny zakres (lub jest niezgodna z parametrem LEN) sygnalizowany jest zły typ zbioru wejściowego i bufor nie jest otwierany. Jeżeli parametry PA1 i PA2 zbioru mają wartość 0, długość czytanego zbioru jest wyliczana z parametru LEN. Jeżeli zbiór o podanym tytule nie jest dostępny, wyprowadzany jest komunikat:


  *** NEW FILE ***
  *** NEW FILE ***
Linia 892: Linia 906:
=== Edycja innego bufora ===
=== Edycja innego bufora ===


Składnia zlecenia: E <wskazanie_bufora> [ ! _ <znak>]
Składnia zlecenia: <code>E <wskazanie_bufora> [ ! _ <znak>]</code>


działanie: następuje przejście do edycji innego bufora. Bufor poprawiany do tej pory jest zachowywany w zbiorach roboczych.
Działanie: następuje przejście do edycji innego bufora. Bufor poprawiany do tej pory jest zachowywany w zbiorach roboczych.


<wskazanie_bufora>:
<wskazanie_bufora>:
Linia 906: Linia 920:
Po przejściu do edycji bufora roboczego jest odtwarzany wskaźnik dostępu i znaczniki wierszy użyte w czasie poprzedniej edycji tego bufora. Po przejściu do edycji bufora pomocniczego wskaźnik dostępu jest ustawiany na pierwszy wiersz bufora a znaczniki wierszy są zerowane. Jeżeli wskazany bufor pomocniczy jest pusty, wyprowadzany jest komunikat:
Po przejściu do edycji bufora roboczego jest odtwarzany wskaźnik dostępu i znaczniki wierszy użyte w czasie poprzedniej edycji tego bufora. Po przejściu do edycji bufora pomocniczego wskaźnik dostępu jest ustawiany na pierwszy wiersz bufora a znaczniki wierszy są zerowane. Jeżeli wskazany bufor pomocniczy jest pusty, wyprowadzany jest komunikat:


*** NEW BUFFER ***
*** NEW BUFFER ***


i edytor przechodzi do wprowadzania zawartości bufora z końcówki. Działanie edytora w czasie wprowadzania jest takie samo jak w czasie wykonywania zlecenia A. Podanie jako parametru znaku ! zmienia ustawienie opcji 'autotab' na przeciwne (2.4). Wprowadzanie jest kończone wpisaniem dc4 lub wiersza zawierającego tylko znacznik końca wprowadzania - znaku podanego w zleceniu E za wskazaniem bufora. Znacznikiem końca wprowadzania może być dowolny znak kodu ASCII poza znakami !, cr, dc4, lf i spacją. Edycja buforów pomocniczych niczym nie różni się od edycji buforów roboczych, z tym że niedozwolone jest użycie nazwy poprawianego bufora pomocniczego w zleceniu kopiowania lub przenoszenia wierszy.
i edytor przechodzi do wprowadzania zawartości bufora z końcówki. Działanie edytora w czasie wprowadzania jest takie samo jak w czasie wykonywania zlecenia A. Podanie jako parametru znaku ! zmienia ustawienie opcji 'autotab' na przeciwne (2.4). Wprowadzanie jest kończone wpisaniem dc4 lub wiersza zawierającego tylko znacznik końca wprowadzania - znaku podanego w zleceniu E za wskazaniem bufora. Znacznikiem końca wprowadzania może być dowolny znak kodu ASCII poza znakami !, cr, dc4, lf i spacją. Edycja buforów pomocniczych niczym nie różni się od edycji buforów roboczych, z tym że niedozwolone jest użycie nazwy poprawianego bufora pomocniczego w zleceniu kopiowania lub przenoszenia wierszy.
Linia 924: Linia 938:
=== Listowanie informacji o buforach roboczych ===
=== Listowanie informacji o buforach roboczych ===


Składnia zlecenia: FA
Składnia zlecenia: <code>FA</code>


działanie: na monitor są wyprowadzane informacje o wszystkich buforach roboczych. W pierwszym wierszu jest wyprowadzany opis bufora aktualnie poprawianego w takiej samej postaci jak zleceniem F. W dalszych - opis pozostałych buforów roboczych w podobnej postaci:
Działanie: na monitor są wyprowadzane informacje o wszystkich buforach roboczych. W pierwszym wierszu jest wyprowadzany opis bufora aktualnie poprawianego w takiej samej postaci jak zleceniem F. W dalszych - opis pozostałych buforów roboczych w podobnej postaci:


  <numer_bufora> <tytuł_zbioru> <liczba_wierszy_w_buforze>
  <numer_bufora> <tytuł_zbioru> <liczba_wierszy_w_buforze>
Linia 934: Linia 948:
== Wyprowadzanie zawartości bufora do zbioru ==
== Wyprowadzanie zawartości bufora do zbioru ==


Składnia zlecenia: <opis_obszaru> <instrukcja_W> [> _ !] [<tytuł_zbioru>]
Składnia zlecenia: <code><opis_obszaru> <instrukcja_W> [> _ !] [<tytuł_zbioru>]</code>


działanie: opisany obszar bufora jest kopiowany do wskazanego zbioru. Jeżeli zbiór nie istnieje, jest tworzony. Gdy nie jest podany opis obszaru, kopiowany jest cały bufor.
Działanie: opisany obszar bufora jest kopiowany do wskazanego zbioru. Jeżeli zbiór nie istnieje, jest tworzony. Gdy nie jest podany opis obszaru, kopiowany jest cały bufor.


<instrukcja_W>:
<instrukcja_W>:


* W - kopiowanie bufora
* <code>W</code> - kopiowanie bufora
* WQ - kopiowanie bufora i wykonanie zlecenia Q
* <code>WQ</code> - kopiowanie bufora i wykonanie zlecenia Q
* > - wskazany obszar jest dołączany do istniejącego zbioru
 
* ! - pozwolenie na zapisanie zawartości bufora do zbioru już istniejącego (wymagane tylko wtedy, gdy jest podany tytuł zbioru)
* <code>></code> - wskazany obszar jest dołączany do istniejącego zbioru
* <code>!</code> - pozwolenie na zapisanie zawartości bufora do zbioru już istniejącego (wymagane tylko wtedy, gdy jest podany tytuł zbioru)


Gdy zostanie podany tytuł zbioru już istniejącego, wymagane jest podanie jednego z parametrów ! lub >. Inaczej zostanie wyprowadzony komunikat:
Gdy zostanie podany tytuł zbioru już istniejącego, wymagane jest podanie jednego z parametrów <code>!</code> lub <code>></code>. Inaczej zostanie wyprowadzony komunikat:


  FILE ALREADY EXIST: <tytuł_zbioru> ( !, > OR CR ) ?
  FILE ALREADY EXIST: <tytuł_zbioru> ( !, > OR CR ) ?
Linia 951: Linia 966:
Po znaku zapytania należy wprowadzić znak:
Po znaku zapytania należy wprowadzić znak:


* > - wskazany obszar będzie dołączony do zawartości zbioru
* <code>></code> - wskazany obszar będzie dołączony do zawartości zbioru
* ! - zawartość zbioru będzie zniszczona
* <code>!</code> - zawartość zbioru będzie zniszczona
* cr - zlecenie nie będzie wykonane
* '''cr''' - zlecenie nie będzie wykonane


Jeżeli nie jest podany tytuł zbioru, obszar będzie skopiowany do zbioru o tytule takim jak nazwa poprawianego bufora roboczego. Gdy jest poprawiany bufor pomocniczy, tytuł zbioru jest obowiązkowy. Wierszem bieżącym po wykonaniu instrukcji W jest ostatni skopiowany wiersz. Gdy zostanie wykonana instrukcja WQ, wierszem bieżącym zapamiętanym w zbiorze roboczym będzie wiersz dostępny w momencie wprowadzania zlecenia.
Jeżeli nie jest podany tytuł zbioru, obszar będzie skopiowany do zbioru o tytule takim jak nazwa poprawianego bufora roboczego. Gdy jest poprawiany bufor pomocniczy, tytuł zbioru jest obowiązkowy. Wierszem bieżącym po wykonaniu instrukcji W jest ostatni skopiowany wiersz. Gdy zostanie wykonana instrukcja WQ, wierszem bieżącym zapamiętanym w zbiorze roboczym będzie wiersz dostępny w momencie wprowadzania zlecenia.
Linia 969: Linia 984:
** dc4 zlecenie nie będzie wykonane i pozostałe wiersze wskazanego obszaru nie będą analizowane  
** dc4 zlecenie nie będzie wykonane i pozostałe wiersze wskazanego obszaru nie będą analizowane  


Jeżeli parametr ? nie jest podany, wiersze na których ma być wykonane zlecenie są także wyświetlane na monitorze, ale zatrzymanie wydruku następuje dopiero po zapełnieniu ekranu (zgodnie z ustawieniem opcji 'linecount'). Wprowadzenie cr wznawia wykonanie zlecenia, natomiast dc4 - kończy je. Po wykonaniu całego zlecenia G jest wykonywane automatycznie zlecenie P wyświetlające na monitorze wiersz dostępny w tym momencie (chyba, że wierszem bieżącym jest ostatni wyświetlony wiersz). Zlecenie U cofa wszystkie wykonane zmiany.
Jeżeli parametr ? nie jest podany, wiersze na których ma być wykonane zlecenie są także wyświetlane na monitorze, ale zatrzymanie wydruku następuje dopiero po zapełnieniu ekranu (zgodnie z ustawieniem opcji 'linecount'). Wprowadzenie '''cr''' wznawia wykonanie zlecenia, natomiast dc4 - kończy je. Po wykonaniu całego zlecenia G jest wykonywane automatycznie zlecenie <code>P</code> wyświetlające na monitorze wiersz dostępny w tym momencie (chyba, że wierszem bieżącym jest ostatni wyświetlony wiersz). Zlecenie <code>U</code> cofa wszystkie wykonane zmiany.


== Wykonywanie poprawek w trybie niekonwersacyjnym ==
== Wykonywanie poprawek w trybie niekonwersacyjnym ==
Linia 975: Linia 990:
=== Zmiana strumienia zleceń ===
=== Zmiana strumienia zleceń ===


Składnia zlecenia: <wyrażenie_adresowe> INT [<tytuł_zbioru>]
Składnia zlecenia: <code><wyrażenie_adresowe> INT [<tytuł_zbioru>]</code>


Działanie: wskaźnik dostępu do bufora jest ustawiany na wskazany wiersz i dalsze zlecenia edytor będzie pobierał z podanego zbioru. Rozpoznanie znacznika końca zbioru spowoduje powrót do strumienia, z którego zostało pobrane zlecenie INT (dozwolone jest zagłębianie zleceń INT). Jeżeli zlecenia są pobierane ze zbioru, to wykrycie błędnego zlecenia lub wykonanie zlecenia INT bez podanej nazwy zbioru spowoduje przejście do trybu konwersacyjnego. Do pobierania dalszych zleceń ze zbioru można powrócić wprowadzając (w trybie konwersacyjnym) zlecenie INT bez podanej nazwy zbioru.
Działanie: wskaźnik dostępu do bufora jest ustawiany na wskazany wiersz i dalsze zlecenia edytor będzie pobierał z podanego zbioru. Rozpoznanie znacznika końca zbioru spowoduje powrót do strumienia, z którego zostało pobrane zlecenie <code>INT</code> (dozwolone jest zagłębianie zleceń <code>INT</code>). Jeżeli zlecenia są pobierane ze zbioru, to wykrycie błędnego zlecenia lub wykonanie zlecenia <code>INT</code> bez podanej nazwy zbioru spowoduje przejście do trybu konwersacyjnego. Do pobierania dalszych zleceń ze zbioru można powrócić wprowadzając (w trybie konwersacyjnym) zlecenie <code>INT</code> bez podanej nazwy zbioru.


=== Bufory zleceń ===
=== Bufory zleceń ===


Składnia zlecenia: <wyrażenie_adresowe> *[<litera>] [<liczba>$]
Składnia zlecenia: <code><wyrażenie_adresowe> *[<litera>] [<liczba>$]</code>


działanie: wskaźnik dostępu do bufora jest ustawiany na wskazany wiersz, po czym są wykonywane wszystkie zlecenia zapisane we wskazanym buforze zleceń. Można używać 26 buforów o nazwach A do Z oraz jednego bufora bez nazwy. Parametr podany za nazwą bufora
Działanie: wskaźnik dostępu do bufora jest ustawiany na wskazany wiersz, po czym są wykonywane wszystkie zlecenia zapisane we wskazanym buforze zleceń. Można używać 26 buforów o nazwach A do Z oraz jednego bufora bez nazwy. Parametr podany za nazwą bufora oznacza liczbę wykonań tych zleceń. Podanie zamiast liczby wykonań znaku <code>$</code> oznacza wykonywanie zleceń zawartych w buforze aż do wystąpienia błędu. Bufory zleceń są tworzone zleceniem <code>E *</code> i mogą być poprawiane tak samo jak inne bufory pomocnicze. Informacje o używanych buforach zleceń są wyprowadzane wraz z informacjami o innych buforach zleceniem <code>"</code>.
oznacza liczbę wykonań tych zleceń. Podanie zamiast liczby wykonań znaku $ oznacza wykonywanie zleceń zawartych w buforze aż do wystąpienia błędu. Bufory zleceń są tworzone zleceniem E * (8.2) i mogą być poprawiane tak samo jak inne bufory pomocnicze. Informacje o używanych buforach zleceń są wyprowadzane wraz z informacjami o innych buforach zleceniem ".


=== Zlecenia komentarza ===
=== Zlecenia komentarza ===
Linia 1000: Linia 1014:
Składnia: <code>!<zlecenie_OSL-a></code>
Składnia: <code>!<zlecenie_OSL-a></code>


Działanie: łańcuch podany za znakiem ! zostanie przekazany procesowi obsługi operatora jako zlecenie. Składnia tego zlecenia powinna być zgodna ze składnią akceptowaną przez OSL. Przekazane zlecenie zostanie uruchomione w tle (nie należy go kończyć znakiem & oznaczającym wykonanie w tle). Uwaga. Zlecenia wykonywane w podany wyżej sposób nie powinny korzystać z końcówki.
Działanie: łańcuch podany za znakiem <code>!</code> zostanie przekazany procesowi obsługi operatora jako zlecenie. Składnia tego zlecenia powinna być zgodna ze składnią akceptowaną przez OSL. Przekazane zlecenie zostanie uruchomione w tle (nie należy go kończyć znakiem <code>&</code> oznaczającym wykonanie w tle). Uwaga: zlecenia wykonywane w podany wyżej sposób nie powinny korzystać z końcówki.


== Działanie w sytuacjach awaryjnych ==
== Działanie w sytuacjach awaryjnych ==


W tym rozdziale są opisane działania mające uchronić użytkownika przed stratami w przypadku awarii systemu, sprzętu, braku zasobów lub w innych sytuacjach, gdy wykonywanie edycji zostanie przerwane. Jak to już zostało opisane (II.1.2.) stan poprawianych buforów jest zapisywany w zbiorach roboczych EXMLIN i EXMOPI. Część informacji o aktualnie poprawianym buforze ze względu na efektywność działania edytora przechowywana w pamięci edytora. Aby uchronić użytkownika przed zbytnimi stratami w przypadku awarii uniemożliwiającej dalsze wykonanie programu (na przykład pad systemu), co pewien czas (5 minut) wszystkie informacje o poprawianym buforze są kopiowane do zbiorów roboczych. Jeżeli po przerwaniu działania edytora, zostanie on ponownie wywołany bez podanej nazwy zbioru, wczyta ostatni zapamiętany stan edycji. Wszystkie poprawki wykonane przed ostatnim zrzutem będą zachowane. Poprawki wykonane później nie są zachowywane. Ponieważ zapamiętywany jest także wskaźnik dostępu łatwo ustalić, które poprawki nie zostały zapamiętane. Powyższe uwagi dotyczą sytuacji, gdy po przerwaniu działania edytor nie może zostać zrestartowany: po awarii systemu operacyjnego, sprzętu lub przy braku zasobów niezbędnych do dalszej edycji (np brak pamięci dyskowej). Po przerwaniu wykonywania przez OPRQ, komunikat, lub inne zewnętrzne przyczyny nie naruszające programu i jego otoczenia (stan rejestrów, pamięć, przywiązane strumienie) działanie edytora należy wznowić zlecenie RS OSL-a. Z powyższych wywodów wynika, że należy stosować następującą zasadę: jeżeli działanie edytora zostało przerwane z komunikatem EXM FINISH lub EXM STOPPED, należy je wznowić zleceniem RS. We wszystkich innych przypadkach należy usunąć edytor zleceniem DE EXM i wywołać go bez podanej nazwy poprawianego zbioru.
W tym rozdziale są opisane działania mające uchronić użytkownika przed stratami w przypadku awarii systemu, sprzętu, braku zasobów lub w innych sytuacjach, gdy wykonywanie edycji zostanie przerwane. Jak to już zostało opisane, stan poprawianych buforów jest zapisywany w zbiorach roboczych EXMLIN i EXMOPI. Część informacji o aktualnie poprawianym buforze ze względu na efektywność działania edytora przechowywana w pamięci edytora. Aby uchronić użytkownika przed zbytnimi stratami w przypadku awarii uniemożliwiającej dalsze wykonanie programu (na przykład pad systemu), co pewien czas (5 minut) wszystkie informacje o poprawianym buforze są kopiowane do zbiorów roboczych. Jeżeli po przerwaniu działania edytora, zostanie on ponownie wywołany bez podanej nazwy zbioru, wczyta ostatni zapamiętany stan edycji. Wszystkie poprawki wykonane przed ostatnim zrzutem będą zachowane. Poprawki wykonane później nie są zachowywane. Ponieważ zapamiętywany jest także wskaźnik dostępu łatwo ustalić, które poprawki nie zostały zapamiętane. Powyższe uwagi dotyczą sytuacji, gdy po przerwaniu działania edytor nie może zostać zrestartowany: po awarii systemu operacyjnego, sprzętu lub przy braku zasobów niezbędnych do dalszej edycji (np brak pamięci dyskowej). Po przerwaniu wykonywania przez OPRQ, komunikat, lub inne zewnętrzne przyczyny nie naruszające programu i jego otoczenia (stan rejestrów, pamięć, przywiązane strumienie) działanie edytora należy wznowić zlecenie <code>RS</code> OSL-a. Z powyższych wywodów wynika, że należy stosować następującą zasadę: jeżeli działanie edytora zostało przerwane z komunikatem EXM FINISH lub EXM STOPPED, należy je wznowić zleceniem <code>RS</code>. We wszystkich innych przypadkach należy usunąć edytor zleceniem <code>DE</code> EXM i wywołać go bez podanej nazwy poprawianego zbioru.


= Alfabetyczny spis instrukcji edytora EXM =
= Alfabetyczny spis instrukcji edytora EXM =
Linia 1014: Linia 1028:
* CL - usunięcie znaków kontrolnych
* CL - usunięcie znaków kontrolnych
* COM - komentarz
* COM - komentarz
* D - usunięcie wierszy
* D - usunięcie wierszy i wstawienie ich do bufora pomocniczego
* i wstawienie ich do bufora pomocniczego
* E - poprawianie innego bufora
* E - poprawianie innego bufora
* F - nazwa bufora roboczego
* F - nazwa bufora roboczego

Menu nawigacyjne