EXM: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
Dodane 820 bajtów ,  8 cze 2018
brak opisu edycji
Nie podano opisu zmian
Nie podano opisu zmian
 
(Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika)
Linia 301: Linia 301:
Składnia: <code>EXM [ <tytuł_zbioru> [ , <tytuł_zbioru_zleceń> ]]</code>
Składnia: <code>EXM [ <tytuł_zbioru> [ , <tytuł_zbioru_zleceń> ]]</code>


'''<tytuł_zbioru>''' - tytuł poprawianego zbioru.
<code><tytuł_zbioru></code> - tytuł poprawianego zbioru.


Jeżeli wskazany zbiór istnieje, jest wczytywany do bufora roboczego. Bufor otrzymuje numer 0 i nazwę zgodną z tytułem wczytanego zbioru. Na monitor jest wyprowadzany komunikat:
Jeżeli wskazany zbiór istnieje, jest wczytywany do bufora roboczego. Bufor otrzymuje numer 0 i nazwę zgodną z tytułem wczytanego zbioru. Na monitor jest wyprowadzany komunikat:
Linia 313: Linia 313:
  *** NEW FILE ***
  *** NEW FILE ***


i edytor przechodzi do wczytywania wierszy z końcówki - wykonywane jest niejawne zlecenie A (II.5.2). Po wpisaniu wiersza zawierającego dc4 edytor kończy wprowadzanie i rozpoczyna edycję bufora. Wprowadzenie pustego zbioru (dc4 w pierwszym wierszu) powoduje usunięcie edytora z komunikatem:
i edytor przechodzi do wczytywania wierszy z końcówki - wykonywane jest niejawne zlecenie <code>A</code>. Po wpisaniu wiersza zawierającego '''dc4''' edytor kończy wprowadzanie i rozpoczyna edycję bufora. Wprowadzenie pustego zbioru ('''dc4''' w pierwszym wierszu) powoduje usunięcie edytora z komunikatem:


  EMPTY FILE
  EMPTY FILE
Linia 323: Linia 323:
Jeżeli nie jest podany tytuł zbioru, a istnieją zbiory EXMLIN i EXMOPI zawierające bufory robocze poprawiane w poprzedniej sesji edytora, EXM odtwarza ostatni zapamiętany stan edycji i wznawia poprawianie. Poprawiany bufor roboczy, wskaźnik dostępu, znaczniki wierszy, definicje zmiennych generacyjnych i opcje edycji są takie same jakie zostały zapamiętane w ostatniej edycji.
Jeżeli nie jest podany tytuł zbioru, a istnieją zbiory EXMLIN i EXMOPI zawierające bufory robocze poprawiane w poprzedniej sesji edytora, EXM odtwarza ostatni zapamiętany stan edycji i wznawia poprawianie. Poprawiany bufor roboczy, wskaźnik dostępu, znaczniki wierszy, definicje zmiennych generacyjnych i opcje edycji są takie same jakie zostały zapamiętane w ostatniej edycji.


'''<tytuł_zbioru_zleceń>'''
<code><tytuł_zbioru_zleceń></code>


Jeżeli tytuł zbioru zleceń jest podany, to po wczytaniu poprawianego zbioru do bufora roboczego będą wykonane zlecenia zapisane we wskazanym zbiorze. Po wykonaniu wszystkich zleceń ze zbioru zleceń lub po wykryciu błędnego zlecenia edytor przechodzi do pracy w trybie konwersacyjnym. Jeżeli wykonywanie zleceń zostało przerwane po wykryciu błędnego zlecenia, wykonanie pozostałych zleceń ze zbioru można wznowić zleceniem INT.
Jeżeli tytuł zbioru zleceń jest podany, to po wczytaniu poprawianego zbioru do bufora roboczego będą wykonane zlecenia zapisane we wskazanym zbiorze. Po wykonaniu wszystkich zleceń ze zbioru zleceń lub po wykryciu błędnego zlecenia edytor przechodzi do pracy w trybie konwersacyjnym. Jeżeli wykonywanie zleceń zostało przerwane po wykryciu błędnego zlecenia, wykonanie pozostałych zleceń ze zbioru można wznowić zleceniem INT.
Linia 335: Linia 335:
  NO WRITE AFTER LAST CHANGE : <zlecenie> ( ! OR CR) ?
  NO WRITE AFTER LAST CHANGE : <zlecenie> ( ! OR CR) ?


Po znaku zapytania należy wprowadzić znak ! - zlecenie zostanie wykonane, lub '''cr''' (return) - zlecenie nie będzie wykonane. Przed usunięciem stan edycji jest zapamiętywany w zbiorach roboczych EXMLIN i EXMOPI. Zachowywane są następujące elementy:
Po znaku zapytania należy wprowadzić znak '''!''' - zlecenie zostanie wykonane, lub '''cr''' (return) - zlecenie nie będzie wykonane. Przed usunięciem stan edycji jest zapamiętywany w zbiorach roboczych EXMLIN i EXMOPI. Zachowywane są następujące elementy:


* bufory robocze
* bufory robocze
Linia 361: Linia 361:
Składnia: <code>=<litera><łańcuch></code>
Składnia: <code>=<litera><łańcuch></code>


Działanie: zmiennej generacyjnej nazwanej pojedyncza literą (są 52 zmienne o nazwach A..Z i a..z) jest nadawana wartość: podany łańcuch. Pusty łańcuch usuwa dotychczasową definicję. Zmienne generacyjne mogą być użyte w dowolnym miejscu tekstu wprowadzanego z klawiatury. Znaki: ''\<litera>'' występujące w tekście i oznaczające zmienną generacyjną są zamieniane na łańcuch zdefiniowany zleceniem <code>=</code> (wstawiany tekst nie podlega makrorozwinięciu). Jeżeli wskazana zmienna generacyjna nie jest zdefiniowana, jej oznaczenie pozostaje w tekście bez zmian. Wartości zmiennych generacyjnych są listowane zleceniem <code>\</code>. Poza wymienionymi wyżej zmiennymi mogą być używane zmienne <code>-</code> i <code>=</code> określające znaczniki końca strony. Wiersz zawierający wyłącznie łańcuch zdefiniowany przez jedną z tych zmiennych kończy stronę. Z tym, że jeżeli łańcuch ten jest zdefiniowany zmienną <code>=</code> i kończona strona ma numer nieparzysty, to następna strona ma numer będący kolejną liczbą nieparzystą. Po wywołaniu edytora zmienna <code>-</code> ma wartość: '''ff''' (znacznik końca strony przyjmowany przez programy listujące DLIST i LIST), natomiast zmienna <code>=</code> jest niezdefiniowana. Zmienne <code>-</code> i <code>=</code> mogą być przedefiniowane tak jak inne zmienne, ale definicje te muszą być zawarte w zbiorze EXMINI. W tekstach wprowadzanych z klawiatury znaki \- i \= są rozwijane tak jak inne zmienne generacyjne, ale tylko wtedy, gdy opcja 'number' ma wartość PNU.
Działanie: zmiennej generacyjnej nazwanej pojedyncza literą (są 52 zmienne o nazwach A..Z i a..z) jest nadawana wartość: podany łańcuch. Pusty łańcuch usuwa dotychczasową definicję. Zmienne generacyjne mogą być użyte w dowolnym miejscu tekstu wprowadzanego z klawiatury. Znaki: '''\<litera>''' występujące w tekście i oznaczające zmienną generacyjną są zamieniane na łańcuch zdefiniowany zleceniem <code>=</code> (wstawiany tekst nie podlega makrorozwinięciu). Jeżeli wskazana zmienna generacyjna nie jest zdefiniowana, jej oznaczenie pozostaje w tekście bez zmian. Wartości zmiennych generacyjnych są listowane zleceniem <code>\</code>. Poza wymienionymi wyżej zmiennymi mogą być używane zmienne <code>-</code> i <code>=</code> określające znaczniki końca strony. Wiersz zawierający wyłącznie łańcuch zdefiniowany przez jedną z tych zmiennych kończy stronę. Z tym, że jeżeli łańcuch ten jest zdefiniowany zmienną <code>=</code> i kończona strona ma numer nieparzysty, to następna strona ma numer będący kolejną liczbą nieparzystą. Po wywołaniu edytora zmienna <code>-</code> ma wartość: '''ff''' (znacznik końca strony przyjmowany przez programy listujące DLIST i LIST), natomiast zmienna <code>=</code> jest niezdefiniowana. Zmienne <code>-</code> i <code>=</code> mogą być przedefiniowane tak jak inne zmienne, ale definicje te muszą być zawarte w zbiorze EXMINI. W tekstach wprowadzanych z klawiatury znaki '''-''' i '''=''' są rozwijane tak jak inne zmienne generacyjne, ale tylko wtedy, gdy opcja 'number' ma wartość PNU.


=== Opcje edycji ===
=== Opcje edycji ===
Linia 396: Linia 396:
Treść tekstów (zleceń, wierszy) wprowadzanych z klawiatury jest modyfikowana w sposób zależny od ustawienia opcji 'octalcod', 'clear' i 'lowtoupper'. Ustawienie opcji 'octalcod' umożliwia wprowadzenie do zlecenia lub wiersza znaku o dowolnym kodzie 0-0177:
Treść tekstów (zleceń, wierszy) wprowadzanych z klawiatury jest modyfikowana w sposób zależny od ustawienia opcji 'octalcod', 'clear' i 'lowtoupper'. Ustawienie opcji 'octalcod' umożliwia wprowadzenie do zlecenia lub wiersza znaku o dowolnym kodzie 0-0177:


* OC - ciąg znaków: ''\0<liczba>'' występujący w tekście wprowadzanym z klawiatury jest zamieniany na bajt o kodzie oktalnym wskazanym przez liczbę.
* OC - ciąg znaków: '''\0<liczba>''' występujący w tekście wprowadzanym z klawiatury jest zamieniany na bajt o kodzie oktalnym wskazanym przez liczbę.
* NOC - kody oktalne nie są przyjmowane - oznaczają ciąg znaków.
* NOC - kody oktalne nie są przyjmowane - oznaczają ciąg znaków.


Linia 438: Linia 438:
Wprowadzenie zlecenia pustego - tylko znaku '''cr''' (RETURN) przesuwa wskaźnik dostępu na następny wiersz w buforze. Wiersz ten jest wyprowadzany w zależności od ustawienia opcji 'step':
Wprowadzenie zlecenia pustego - tylko znaku '''cr''' (RETURN) przesuwa wskaźnik dostępu na następny wiersz w buforze. Wiersz ten jest wyprowadzany w zależności od ustawienia opcji 'step':


ST - w następnej linii monitora (zalecane dla monitorów, w których znak '''cr''' nie powoduje przesunięcia kursora na początek linii ekranu)
* ST - w następnej linii monitora (zalecane dla monitorów, w których znak '''cr''' nie powoduje przesunięcia kursora na początek linii ekranu)
NST - w tej samej linii, w której zostało wprowadzone zlecenie (zalecane dla monitorów, w których '''cr''' przesuwa kursor na początek linii ekranu)
* NST - w tej samej linii, w której zostało wprowadzone zlecenie (zalecane dla monitorów, w których '''cr''' przesuwa kursor na początek linii ekranu)


Po wywołaniu edytora opcja 'step' jest zgaszona (NST).
Po wywołaniu edytora opcja 'step' jest zgaszona (NST).
Linia 479: Linia 479:
  <fragment> ::= { <ciąg> _ <ogranicznik> _ <symbol_łańcucha> }
  <fragment> ::= { <ciąg> _ <ogranicznik> _ <symbol_łańcucha> }
  <ciąg> ::= <element> [<krotność>]
  <ciąg> ::= <element> [<krotność>]
<element> - wskazuje znak w szukanym łańcuchu :
* <element> - wskazuje znak w szukanym łańcuchu:
<znak> - wskazany znak
** <znak> - wskazany znak:
 
** <code>.</code> - dowolny znak
* <code>.</code> - dowolny znak
** <code>[<zbiór_znaków>]</code> - znak należący do podanego zbioru znaków
* <code>[<zbiór_znaków>]</code> - znak należący do podanego zbioru znaków
** <code>[^<zbiór_znaków>]</code> - znak nie należący do podanego zbioru znaków
* <code>[^<zbiór_znaków>]</code> - znak nie należący do podanego zbioru znaków


  <zbiór_znaków> ::= {<znak>-<znak> _ <znak> }
  <zbiór_znaków> ::= {<znak>-<znak> _ <znak> }
Linia 495: Linia 494:
Przykładowo opis: <code>[^-a-d-Z-]]</code> oznacza dopełnienie (<code>^</code> na pierwszej pozycji) zbioru składającego się z podzbiorów: -, a-d, -, Z-] (pierwszy i trzeci znak '''-''' nie separujące pary znaków - analiza przebiega od lewej strony - oznaczają siebie; podobnie pierwszy znak ''']''' będący drugim znakiem w parze znaków, nie oznacza końca opisu zbioru). Przy zgaszonej opcji 'magic' znak '''\''' musi poprzedzać tylko nawias otwierający opis zbioru: <code>\[^-a-d-Z-]]</code>
Przykładowo opis: <code>[^-a-d-Z-]]</code> oznacza dopełnienie (<code>^</code> na pierwszej pozycji) zbioru składającego się z podzbiorów: -, a-d, -, Z-] (pierwszy i trzeci znak '''-''' nie separujące pary znaków - analiza przebiega od lewej strony - oznaczają siebie; podobnie pierwszy znak ''']''' będący drugim znakiem w parze znaków, nie oznacza końca opisu zbioru). Przy zgaszonej opcji 'magic' znak '''\''' musi poprzedzać tylko nawias otwierający opis zbioru: <code>\[^-a-d-Z-]]</code>


<krotność> : - określa liczbę elementów ciągu
* <krotność> : - określa liczbę elementów ciągu
{<liczba>} - wskazana liczba
* {<liczba>} - wskazana liczba


<code>{[<liczba>],[<liczba>]}</code> - liczba zawarta w podanym zakresie. Pominięcie pierwszego parametru oznacza 0 - ciąg pusty; pominięcie drugiego - ciąg dowolnie długi: do 255 znaków. Jeżeli pierwszy parametr ma mniejszą wartość niż drugi, to znajdowany jest najkrótszy łańcuch zgodny z tym wzorcem. Gdy drugi parametr jest mniejszy od pierwszego, szukany jest najdłuższy łańcuch  zgodny z tym wzorcem.
<code>{[<liczba>],[<liczba>]}</code> - liczba zawarta w podanym zakresie. Pominięcie pierwszego parametru oznacza 0 - ciąg pusty; pominięcie drugiego - ciąg dowolnie długi: do 255 znaków. Jeżeli pierwszy parametr ma mniejszą wartość niż drugi, to znajdowany jest najkrótszy łańcuch zgodny z tym wzorcem. Gdy drugi parametr jest mniejszy od pierwszego, szukany jest najdłuższy łańcuch  zgodny z tym wzorcem.
Linia 510: Linia 509:
<ogranicznik> - opisuje znaki leżące obok:
<ogranicznik> - opisuje znaki leżące obok:


* \( - znak następny ma rozpoczynać nazwę
* ( - znak następny ma rozpoczynać nazwę
* \) - znak poprzedni ma kończyć nazwę
* ) - znak poprzedni ma kończyć nazwę
* < - znak następny ma rozpoczynać słowo
* < - znak następny ma rozpoczynać słowo
* > - znak poprzedni ma kończyć słowo
* > - znak poprzedni ma kończyć słowo
Linia 638: Linia 637:
* NLI - obszar jest wyprowadzany bez zatrzymania wydruków  
* NLI - obszar jest wyprowadzany bez zatrzymania wydruków  
* LIN - wydruk jest zatrzymywany po zapełnieniu całego ekranu. Wykonywanie zlecenia po wprowadzeniu:
* LIN - wydruk jest zatrzymywany po zapełnieniu całego ekranu. Wykonywanie zlecenia po wprowadzeniu:
** cr - jest wznawiane
** '''cr''' - jest wznawiane
**dc4 - jest kończone
** '''dc4''' - jest kończone
* LIN=<liczba> - ustawienie długości ekranu
* LIN=<liczba> - ustawienie długości ekranu


Linia 656: Linia 655:
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>


<instrukcja_Z>:
<instrukcja_Z>:
Linia 752: Linia 751:
Jeżeli wskaźnik konwersji poprzedza symbol oznaczający łańcuch, zamienione zostaną wszystkie litery wskazanego łańcucha.
Jeżeli wskaźnik konwersji poprzedza symbol oznaczający łańcuch, zamienione zostaną wszystkie litery wskazanego łańcucha.


<schemat_podstawienia> ::= {<opis_wystąpień>}[G] [?] _ & [?]
<schemat_podstawienia> ::= {<opis_wystąpień>}[G] [?] _ & [?]


pusty schemat podstawienia oznacza zamianę tylko pierwszego zgodnego ze wzorcem łańcucha w wierszu.
Pusty schemat podstawienia oznacza zamianę tylko pierwszego zgodnego ze wzorcem łańcucha w wierszu.


<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:
Linia 835: Linia 834:
Działanie: wskazane wiersze zostaną połączone w jeden wiersz. Jeżeli opisany obszar zawiera tylko jeden wiersz, do tego wiersza jest dołączany następny wiersz. Parametry zlecenia:
Działanie: wskazane wiersze zostaną połączone w jeden wiersz. Jeżeli opisany obszar zawiera tylko jeden wiersz, do tego wiersza jest dołączany następny wiersz. Parametry zlecenia:


* ^ - usuwanie z dołączanych wierszy wszystkich początkowych spacji i znaków tabulacji ht
* <code>^</code> - usuwanie z dołączanych wierszy wszystkich początkowych spacji i znaków tabulacji '''ht'''
* /<łańcuch> - przed każdym dołączanym wierszem jest wstawiany podany łańcuch
* <code>/<łańcuch></code> - przed każdym dołączanym wierszem jest wstawiany podany łańcuch


Wierszem bieżącym po wykonaniu zlecenia jest nowo utworzony wiersz. Zlecenie U rozdziela wiersz na wiersze składowe.
Wierszem bieżącym po wykonaniu zlecenia jest nowo utworzony wiersz. Zlecenie <code>U</code> rozdziela wiersz na wiersze składowe.


== Przenoszenie i kopiowanie wierszy ==
== Przenoszenie i kopiowanie wierszy ==
Linia 850: Linia 849:
<instrukcja_C_M>:
<instrukcja_C_M>:


* CA - kopiowanie obszaru za wskazany wiersz
* <code>CA</code> - kopiowanie obszaru za wskazany wiersz
* CI - kopiowanie obszaru przed wskazany wiersz
* <code>CI</code> - kopiowanie obszaru przed wskazany wiersz
* MA - przenoszenie obszaru za wskazany wiersz
* <code>MA</code> - przenoszenie obszaru za wskazany wiersz
* MI - przenoszenie obszaru przed wskazany wiersz
* <code>MI</code> - przenoszenie obszaru przed wskazany wiersz


Wierszem bieżącym po wykonaniu zlecenia jest ostatni skopiowany lub przeniesiony wiersz (zlecenia CA i MA) lub wiersz wskazany wyrażeniem adresowym (zlecenia CI i MI).
Wierszem bieżącym po wykonaniu zlecenia jest ostatni skopiowany lub przeniesiony wiersz (zlecenia <code>CA</code> i <code>MA</code>) lub wiersz wskazany wyrażeniem adresowym (zlecenia <code>CI</code> i <code>MI</code>).
Zlecenie U usuwa skopiowany obszar (zlecenia CA i CI) lub przenosi go z powrotem (zlecenia MI i MA).
Zlecenie <code>U</code> usuwa skopiowany obszar (zlecenia <code>CA</code> i <code>CI</code>) lub przenosi go z powrotem (zlecenia <code>MI</code> i <code>MA</code>).


=== Przenoszenie i kopiowanie wierszy do buforów pomocniczych ===
=== Przenoszenie i kopiowanie wierszy do buforów pomocniczych ===
Linia 866: Linia 865:
<instrukcja_D_Y>:
<instrukcja_D_Y>:


* D - przenoszenie wierszy
* <code>D</code> - przenoszenie wierszy
* Y - kopiowanie wierszy
* <code>Y</code> - kopiowanie wierszy


Można korzystać z 26 buforów pomocniczych o nazwach A..Z oraz z bufora specjalnego bez nazwy. Informacje o zawartości buforów nazwanych są drukowane zleceniem " w postaci:
Można korzystać z 26 buforów pomocniczych o nazwach A..Z oraz z bufora specjalnego bez nazwy. Informacje o zawartości buforów nazwanych są drukowane zleceniem " w postaci:


<nazwa_bufora> <liczba_wierszy>
<nazwa_bufora> <liczba_wierszy>


Wierszem bieżącym po skopiowaniu (Y) jest ostatni wiersz obszaru a po przeniesieniu (D) - pierwszy wiersz za przeniesionymi.
Wierszem bieżącym po skopiowaniu (<code>Y</code>) jest ostatni wiersz obszaru a po przeniesieniu (<code>D</code>) - pierwszy wiersz za przeniesionymi.


Zlecenie U przenosi wiersze z powrotem do bufora roboczego (po kopiowaniu tylko je usuwa z bufora pomocniczego). Jeżeli zlecenie kopiowania lub przenoszenia wierszy do bufora pomocniczego było podane bez parametru >, to zlecenie U nie odtwarza poprzedniej zawartości bufora pomocniczego.
Zlecenie <code>U</code> przenosi wiersze z powrotem do bufora roboczego (po kopiowaniu tylko je usuwa z bufora pomocniczego). Jeżeli zlecenie kopiowania lub przenoszenia wierszy do bufora pomocniczego było podane bez parametru <code>></code>, to zlecenie <code>U</code> nie odtwarza poprzedniej zawartości bufora pomocniczego.


Bufor specjalny (bez nazwy) jest wykorzystywany także przy wykonywaniu innych zleceń niż D i Y. Gdy wykonywane jest zlecenie C, wiersze usunięte tym zleceniem są przenoszone do tego bufora. Także przy wykonywaniu zlecenia U po zleceniach I, A, C, RA i RI wiersze usunięte są przenoszone do bufora specjalnego (ponowne wykonanie zlecenia U przeniesie te wiersze z powrotem do bufora roboczego i bufor specjalny zostanie opróżniony).
Bufor specjalny (bez nazwy) jest wykorzystywany także przy wykonywaniu innych zleceń niż <code>D</code> i <code>Y</code>. Gdy wykonywane jest zlecenie <code>C</code>, wiersze usunięte tym zleceniem są przenoszone do tego bufora. Także przy wykonywaniu zlecenia U po zleceniach <code>I</code>, <code>A</code>, <code>C</code>, <code>RA</code> i <code>RI</code> wiersze usunięte są przenoszone do bufora specjalnego (ponowne wykonanie zlecenia <code>U</code> przeniesie te wiersze z powrotem do bufora roboczego i bufor specjalny zostanie opróżniony).


=== Kopiowanie buforów pomocniczych do bufora roboczego ===
=== Kopiowanie buforów pomocniczych do bufora roboczego ===
Linia 887: Linia 886:
<instrukcja_P>:
<instrukcja_P>:


* PA - kopiowanie bufora za wskazany wiersz
* <code>PA</code> - kopiowanie bufora za wskazany wiersz
* PI - kopiowanie bufora przed wskazany wiersz
* <code>PI</code> - kopiowanie bufora przed wskazany wiersz


Wierszem bieżącym po wykonaniu zlecenie jest ostatni skopiowany wiersz (PA) lub wiersz wskazany wyrażeniem adresowym (PI). Zlecenie U usuwa skopiowany obszar.
Wierszem bieżącym po wykonaniu zlecenie jest ostatni skopiowany wiersz (<code>PA</code>) lub wiersz wskazany wyrażeniem adresowym (<code>PI</code>). Zlecenie <code>U</code> usuwa skopiowany obszar.


== Edycja wielu zbiorów ==
== Edycja wielu zbiorów ==
Linia 902: Linia 901:
  *** NEW FILE ***
  *** NEW FILE ***


i edytor przechodzi do wczytywania wierszy z końcówki - wykonywane jest niejawne zlecenie A (II.5.2). Po wprowadzeniu dc4 edytor kończy wprowadzanie i rozpoczyna edycję bufora ustawiając wskaźnik dostępu na ostatni wprowadzony wiersz. Wprowadzenie pustego zbioru (dc4 w pierwszym wierszu) powoduje powrót do edycji bufora poprawianego do tej pory.
i edytor przechodzi do wczytywania wierszy z końcówki - wykonywane jest niejawne zlecenie <code>A</code>. Po wprowadzeniu '''dc4''' edytor kończy wprowadzanie i rozpoczyna edycję bufora ustawiając wskaźnik dostępu na ostatni wprowadzony wiersz. Wprowadzenie pustego zbioru ('''dc4''' w pierwszym wierszu) powoduje powrót do edycji bufora poprawianego do tej pory.


=== Edycja innego bufora ===
=== Edycja innego bufora ===
Linia 916: Linia 915:
* "<litera> - bufor pomocniczy o podanej nazwie
* "<litera> - bufor pomocniczy o podanej nazwie
* *[<litera>] - bufor pomocniczy zleceń
* *[<litera>] - bufor pomocniczy zleceń
* - - bufor poprawiany przed wykonaniem ostatniego zlecenia E lub N
* - - bufor poprawiany przed wykonaniem ostatniego zlecenia <code>E</code> lub <code>N</code>


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:
Linia 922: Linia 921:
  *** 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 <code>A</code>. Podanie jako parametru znaku ! zmienia ustawienie opcji 'autotab' na przeciwne. Wprowadzanie jest kończone wpisaniem dc4 lub wiersza zawierającego tylko znacznik końca wprowadzania - znaku podanego w zleceniu <code>E</code> 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.


=== Zmiana nazwy bufora roboczego ===
=== Zmiana nazwy bufora roboczego ===
Linia 940: Linia 939:
Składnia zlecenia: <code>FA</code>
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 <code>F</code>. 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>


Opis bufora poprawianego poprzednio (dostępnego zleceniem E) jest poprzedzony znakiem - .
Opis bufora poprawianego poprzednio (dostępnego zleceniem <code>E</code>) jest poprzedzony znakiem '''-'''.


== Wyprowadzanie zawartości bufora do zbioru ==
== Wyprowadzanie zawartości bufora do zbioru ==
Linia 955: Linia 954:


* <code>W</code> - kopiowanie bufora
* <code>W</code> - kopiowanie bufora
* <code>WQ</code> - kopiowanie bufora i wykonanie zlecenia Q
* <code>WQ</code> - kopiowanie bufora i wykonanie zlecenia <code>Q</code>
 
* <code>></code> - wskazany obszar jest dołączany do istniejącego 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)
* <code>!</code> - pozwolenie na zapisanie zawartości bufora do zbioru już istniejącego (wymagane tylko wtedy, gdy jest podany tytuł zbioru)
Linia 966: Linia 964:
Po znaku zapytania należy wprowadzić znak:
Po znaku zapytania należy wprowadzić znak:


* <code>></code> - wskazany obszar będzie dołączony do zawartości zbioru
* '''>''' - wskazany obszar będzie dołączony do zawartości zbioru
* <code>!</code> - zawartość zbioru będzie zniszczona
* '''!<''' - 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 <code>W</code> jest ostatni skopiowany wiersz. Gdy zostanie wykonana instrukcja <code>WQ</code>, wierszem bieżącym zapamiętanym w zbiorze roboczym będzie wiersz dostępny w momencie wprowadzania zlecenia.


== Globalne wykonywanie zleceń ==
== Globalne wykonywanie zleceń ==
Linia 978: Linia 976:
Znaczenie: na wszystkich wierszach opisanego obszaru zgodnych z podanym wzorcem (lub niezgodnych - jeżeli jest podany parametr ^) będzie wykonane wskazane zlecenie. Wskazany obszar musi zawierać więcej niż jeden wiersz. Jeżeli opis obszaru nie zostanie podany, przeszukany zostanie cały bufor. Wzorzec ma składnię i znaczenie opisane w 3.2. Pusty wzorzec oznacza przyjęcie wzorca użytego w ostatnim zleceniu przeszukiwania bufora. Zleceniem G można wykonywać zlecenia: D, A, I, C, RA, RI, P, L, #, Z, S, &, @, %, _~, J, CL, LU, UL, W, Y, PA, PI i O. Jeżeli zlecenie nie zostanie podane, wiersze wskazane wzorcem będą wyświetlone na monitorze w postaci określonej przez opcje listowania. Parametry zlecenia:
Znaczenie: na wszystkich wierszach opisanego obszaru zgodnych z podanym wzorcem (lub niezgodnych - jeżeli jest podany parametr ^) będzie wykonane wskazane zlecenie. Wskazany obszar musi zawierać więcej niż jeden wiersz. Jeżeli opis obszaru nie zostanie podany, przeszukany zostanie cały bufor. Wzorzec ma składnię i znaczenie opisane w 3.2. Pusty wzorzec oznacza przyjęcie wzorca użytego w ostatnim zleceniu przeszukiwania bufora. Zleceniem G można wykonywać zlecenia: D, A, I, C, RA, RI, P, L, #, Z, S, &, @, %, _~, J, CL, LU, UL, W, Y, PA, PI i O. Jeżeli zlecenie nie zostanie podane, wiersze wskazane wzorcem będą wyświetlone na monitorze w postaci określonej przez opcje listowania. Parametry zlecenia:


* ^ - zlecenie dotyczy wierszy niezgodnych z podanym wzorcem
* <code>^</code> - zlecenie dotyczy wierszy niezgodnych z podanym wzorcem
* ? - zlecenie będzie wykonane na wierszach wskazanych wzorcem i parametrem ^, ale dopiero po akceptacji użytkownika. Edytor przed wykonaniem zlecenia wyświetla zawartość wiersza i oczekuje na wprowadzenie znaku akceptacji:
* <code>?</code> - zlecenie będzie wykonane na wierszach wskazanych wzorcem i parametrem <code>^</code>, ale dopiero po akceptacji użytkownika. Edytor przed wykonaniem zlecenia wyświetla zawartość wiersza i oczekuje na wprowadzenie znaku akceptacji:
** + zlecenie będzie wykonane
** '''+''' zlecenie będzie wykonane
** cr zlecenie nie będzie wykonane
** '''cr''' zlecenie nie będzie wykonane
** 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 <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.
Jeżeli parametr <code>?</code> 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 <code>G</code> 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 1087: Linia 1085:
* =T[^:]\Y - etykieta (niepusty ciąg znaków ograniczonych znakiem ''':''')
* =T[^:]\Y - etykieta (niepusty ciąg znaków ograniczonych znakiem ''':''')
* =P!.*! - rozdziela wzorzec na części
* =P!.*! - rozdziela wzorzec na części
* =Q\3\2\1 - zmienne P i Q są wykorzystywane przy zamianie miejscami dwóch części wiersza i powinny być używane razem. Zlecenie: S/<część>\P<część>/\Q zamieni miejscami łańcuchy wskazane przez części wzorca. Gdy przestawiane części bezpośrednio stykają się ze sobą można także zapisać: S/<część>!<część>/\Q
* =Q\3\2\1 - zmienne P i Q są wykorzystywane przy zamianie miejscami dwóch części wiersza i powinny być używane razem. Zlecenie: <code>S/<część>\P<część>/\Q</code> zamieni miejscami łańcuchy wskazane przez części wzorca. Gdy przestawiane części bezpośrednio stykają się ze sobą można także zapisać: <code>S/<część>!<część>/\Q</code>. Uwaga: Wzorzec użyty w zlecenie wykorzystującym zmienne P i Q nie powinien zawierać innych znaków ! dzielących go na części. Użycie dodatkowych znaków ! może spowodować przestawienie innych części niż zostało to podane. Na przykład zlecenie <code>S/<część1>!<część2>!<część3>/\Q</code> przestawi części pierwszą i trzecią.
Uwaga. Wzorzec użyty w zlecenie wykorzystującym zmienne P i Q nie powinien zawierać innych znaków ! dzielących go na części. Użycie dodatkowych znaków ! może spowodować przestawienie innych części niż zostało to podane. Na przykład zlecenie <code>S/<część1>!<część2>!<część3>/\Q</code> przestawi części pierwszą i trzecią.
* =V\ - znak backslash \. Definicja taka jest niezbędna, gdy chcemy wprowadzać teksty zawierające litery poprzedzone znakiem \, a używamy zmiennych generacyjnych. Na przykład, jeżeli korzystamy z wcześniej opisanych definicji, to znaki \D zostaną po wprowadzeniu rozwinięte do ciągu [0-9], gdyż taki zapis oznacza zmienną generacyjną. Znaki \D zostaną wprowadzone do wiersza, dopiero jeżeli napiszemy: \VD .
* =V\ - znak backslash \. Definicja taka jest niezbędna, gdy chcemy wprowadzać teksty zawierające litery poprzedzone znakiem \, a używamy zmiennych generacyjnych. Na przykład, jeżeli korzystamy z wcześniej opisanych definicji, to znaki \D zostaną po wprowadzeniu rozwinięte do ciągu [0-9], gdyż taki zapis oznacza zmienną generacyjną. Znaki \D zostaną wprowadzone do wiersza, dopiero jeżeli napiszemy: \VD .


Menu nawigacyjne