CROOK-5 - Interpretator zleceń użytkownika - XOSL
Budowa i zasady realizacji zleceń
XOSL realizuje zlecenia podawane przez użytkownika z końcówki. Wynikiem użycia zlecenia może być wykonanie podprogramu wewnętrznego XOSL, programu, albo też realizacja szeregu zleceń pobieranych z przygotowanego wcześniej zbioru. Dla użytkownika (za wyjątkiem zaawansowanych programistów przygotowywujących nowe zlecenia i programy) sposób realizacji zlecenia nie jest istotny, a na ogół nawet nie jest widoczny.
Standardowe zlecenie mieści się w jednym wierszu i składa się z nazwy podprogramu wewnętrznego (zlecenia OSL) lub tytułu zbioru dyskowego lub nazwy procesu (programu) oraz (opcjonalnie) argumentów oddzielonych separatorami. Separatorami są przecinek lub odstęp (spacja). Argumentami zlecenia mogą być: nazwa procesu, tytuł zbioru, tekst wyrażenie arytmetyczne lub wskazanie opcji. Zlecenie kończy znak powrotu karetki lub znak "'" po którym może być umieszczony komentarz. Nadmiarowe odstępy (występujące między argumentami zlecenia) są przez XOSL pomijane. XOSL dopuszcza również zlecenia o niestandardowej budowie.
Niektóre zlecenia i mechanizmy OSL są zastrzeżone i zostaną wykonane tylko wtedy, gdy wyda je użytkownik posiadający odpowiednie uprawnienia (atrybuty). W opisie poszczególnych zleceń zaznaczono, które z nich wymagają od użytkownika specjalnych uprawnień. Same zaś atrybuty użytkowników omówione są w cz.IV (instrukcja kierownika instalacji).
XOSL jest uruchamiany (powoływany jako proces) po rozpoznaniu użytkownika przez INI. Umożliwia on konwersację użytkownika z systemem operacyjnym, uruchamianie programów i sterowanie nimi oraz uruchamianie makrozleceń pisanych w języku zleceń OSL.
Kod R40
Wszystkie nazwy w systemie kodowane są za pomocą kodu R40. Umożliwia on upakowanie 3-ch znaków w jednym, 16-to bitowym słowie. Wartością upakowanego kodu jest wartość wielomianu:
- 1600*Kz1 + 40*Kz2 + Kz3
gdzie Kzn jest liczbą przyporządkowaną poszczególnym znakom nazwy. Literom (A-Z oraz a-z ) przyporządkowane są liczby 1-26, cyfrom (0-9) - liczby 27-36, znakom dodatkowym (_, %, #) liczby odpowiednio 37-39. W skład nazwy mogą wchodzić wszystkie znaki dozwolone w kodzie R40, przy czym znakiem zaczynającym nazwę nie może być cyfra.
Standardowe argumenty zleceń
Standardowymi argumentami zleceń mogą być:
- tekst - tekst składa się z ciągu znaków ograniczonych nawiasami: (), <>, [] lub znakami "".
- tytuł zbioru (TZ) - tytuł zbioru składa się z trzech elementów: nazwy przestrzeni, nazwy skorowidza i nazwy zbioru. Poszczególne elementy oddzielone są znakiem "/" i mogą być pomijane lub puste. Podanie niepełnego tytułu OSL interpretuje jako podanie jego mniej znaczących elementów. OSL dopuszcza również tytuły zbiorów o niestandardowej budowie. Dopuszczalne jest mianowicie: umieszczanie w polu identyfikatora przestrzeni liczby, w polu nazwy skorowidza dwóch liczb przedzielonych przecinkiem oraz w polu nazwy zbioru dnej liczby. Interpretacja tytułów niestandardowych jest zależna od zlecenia. Na ogół jest ona zgodna z interpretacją przez ekstrakod ASG:
- <ident. obszaru>/<adres>,<adres>/ lub <nr obszaru>/<adres>,<adres>/ - określa fragment wskazanego talerza dyskowego (obsługiwanego przez system lub nie) zawarty między wskazanymi adresami;
- DEV//<nr urządzenia> - określa urządzenie zdefiniowane przez numer kolejny;
- STR//<liczba> - określa strumień zdefiniowany przez liczbę.
- przedłużenie nazwy zbioru
- przedłużenie nazwy zbioru (typ zbioru) jest trzyznakowym identyfikatorem występującym opcjonalnie bezpośrednio po tytule zbioru i oddzielonym od niego kropką. Przedłużenia zaczynające się jednym ze znaków dodatkowych (_, % lub #) wchodzą w skład nazwy zbioru i muszą być każdorazowo podawane. W dalszej części przez TZ rozumiemy tytuł zbioru wraz z opcjonalnie podanym przedłużeniem.
- nazwa procesu (programu)
- nazwa procesu jest identyfikatorem sześcioznakowym.
- wyrażenie arytmetyczne (WA) - wyrażenie arytmetyczne może być identyfikatorem trzyznakowym albo ciągiem liczb przedzielonych znakami operacji dodawania lub odejmowania. Liczby zaczynające się cyfrą 0 są traktowane jako ósemkowe (oktalne).
- wskazanie opcji (WO) - wskazanie opcji składa się ze znaku "?" i następującego po nim wyrażenia arytmetycznego.
Wszystkie zlecenia OSL-a mogą być zakończone sekwencją znaków określającą tryb pracy prpgramu wywoływanego w wyniku realizacji zlecenia. OSL dopuszcza następujące sekwencje kończące zlecenie: "&", "+", "-", "&+" oraz "&-".
Znak "&" powoduje, że program uruchomiony przez zlecenie będzie wykonywany w tle tzn. niezależnie od dalszej realizacji zleceń. Jego użycie jest sensowne tylko w odniesieniu do programów nie używających strumieni INT ani OUT (strumienie te służą do komunikacji z systemem przy wydawaniu zleceń). Dopuszczalne jest jednoczesne uruchomienie wielu programów.
Znak "+" ("-") oznacza że uruchomiony program będzie posiadał podwyższony (lub odpowiednio, obniżony) priorytet. Ustalenie priorytetu jest możliwe tylko przy pierwszym uruchomieniu programu, a jego podwyższenie jest dozwolone tylko użytkownikom o atrybucie 4.
Zasady realizacji zleceń
XOSL po wczytaniu zlecenia wyodrębnia z niego tytuł zbioru i przystępuje do trzyfazowej analizy zlecenia:
- sprawdzenia czy tytuł zbioru może być nazwą podprogramu wewnętrznego (tzn. podprogramu będącego częścią samego XOSL). W przypadku stwierdzenia zgodności następuje wywołanie odpowiedniego podprogramu;
- sprawdzenia czy nazwa odpowiada nazwie istniejącego procesu (już uruchomionego programu). Odszukany proces zostanie uruchomiony i zostaną mu przesłane parametry zlecenia;
- odszukania zbioru na dysku. Dalsze czynności zależą od atrybutów znalezionego zbioru.
Zlecenia OSL
Gotowość przyjęcia nowego zlecenia sygnalizowana jest wyprowadzeniem na końcówce znaku zachęty poprzedzonego znakiem nowej lini. W obrębie jednego zlecenia można używać znaków BS (kasowanie ostatniego znaku) oraz CAN (kasowanie całego wiersza). Znaku BS można użyć wielokrotnie w celu skasowania większej liczby znaków.
Pojawienie się litery zamiast normalnego znaku zachęty jest sygnalizacją wykrycia błędu sumy kontrolnej. W przypadku wykrycia błędu sumy kontrolnej systemu (litera S lub E) należy załadować system operacyjny z dysku. Przy sygnalizacji błędu sumy kontrolnej XOSL (litera O) należy uruchomić system od adresu IC=0. Litera E zamiast normalnego znaku zachęty oznacza wykrycie obu błędów jednocześnie.
Zlecenie uruchomienia
RUN [,<TZ lub nazwa procesu>[,<lista parametrów>]]
- Argument tego zlecenia traktowany jest jako zlecenie, dla którego nie wykonuje się pierwszej fazy analizy (patrz Standardowe argumenty zleceń). Pominięcie argumentów powoduje uruchomienie procesu który spowodował ostatni alarm systemowy.
Zlecenia ogólne
TERM [<opcja> {ON | OFF}]...
- Polecenie ustalenia trybu pracy terminala. Zlecenie bez parametrów powoduje ustalenie trybu pracy takiego jak przy dopuszczeniu użytkownika do pracy.
- Dopuszczalne są następujące opcje:
- EOF - obserwuj znacznik końca wejścia,
- EVE - sprawdzaj i generuj parzystość,
- ODD - sprawdzaj i generuj nieparzystość,
- LON - przekazuj 8 bitów,
- XON - włącz obsługę protokołu X-ON, X-OFF,
- CAN - obsługuj znaki sterujące BS i CAN,
- UPP - zamieniaj małe litery na duże,
- BRE - obserwuj i sygnalizuj zgłoszenie operatora.
- Użycie parametru ON powoduje włączenie wskazanej opcji, OFF zaś jej wyłączenie.
OUT [,<TZ>]
- Ustalenie strumienia wyjściowego komunikatów (OUT). Argumentem zlecenia nie może być tytuł zbioru wskazującego na urządzenie znakowe. Pominięcie tytułu zbioru powoduje domknięcie zbioru wyjściowego i dołączenie strumienia do końcówki. Warto nadmienić, że zleceniem OUT można ustalać również strumień wyjściowy komunikatów wyprowadzanych przez program użytkownika.
- UWAGA: Kierownik instalacji może zezwolić na używanie nazwy urządzenia znakowego jako argumentu zlecenia OUT. Musi w tym celu ustalić bit 14=1 w słowie o adresie 4 zbioru XOSL.
REP [,<parametr>]...
- Ustalenie formatu informacji wyprowadzanych przez XOSL. OSL rozpoznaje następujące parametry:
- LIN [,<WA>] - ustalenie zatrzymywania się po wyprowadzeniu wskazanej liczby wierszy. Wyprowadzanie może być wznowione znakiem powrotu karetki (znak DC4 przerywa i kończy realizację zlecenia);
- NLI - anulowanie polecenia LIN;
- COP - ustalenie powtarzania na strumieniu wyjściowym zleceń wczytywanych ze strumienia wejściowego;
- NOC - anulowanie polecenia COP;
- ENG - wyprowadzanie alarmów w angielskiej wersji językowej;
- POL - wyprowadzanie alarmów w polskiej wersji językowej.
- Ustalenie formatu informacji wyprowadzanych przez XOSL. OSL rozpoznaje następujące parametry:
ASS ,<WA>[,<TZ>[,<WA>]]
- Zlecenie dołączenia zbioru do strumienia wskazanego wyrażeniem. Strumień zdefiniowany zleceniem ASS jest globalny dla wszystkich programów danego użytkownika. Pominięcie tytułu zbioru powoduje usunięcie wskazanego strumienia. Użycie trzeciego parametru oznacza polecenie otwarcia zbioru o wskazanej długości (w sektorach) i dołączenie go do definiowanego strumienia.
DIS ,<WA>
- Podaj nazwę zbioru dołączonego do wskazanego strumienia.
REW ,<WA>
- Zlecenie ustawienia wskażnika dostępu do zbioru na początek zbioru. Wyrażenie arytmetyczne określa identyfikator strumienia do którego jest dołączony zbiór.
APP ,<WA>
- Zlecenie ustawienia wskażnika dostępu na koniec zbioru.
EOF ,<WA>
- Zlecenie domknięcia zbioru sekwencyjnego dołączonego do wskazanego strumienia.
USR
- Zlecenie wyprowadzenia informacji o zasobach systemowych i użytkownikach obsługiwanych przez XOSL. W pierwszym wierszu podawana jest informacja o aktualnie nie zajętych zasobach systemowych:
- MEM - rozmiar wolnej pamięci operacyjnej;
- BUF - liczba wolnych buforów współpracy z dyskiem;
- PRO - liczba nie używanych wektorów opisu procesów;
- STR - liczba wektorów opisu strumieni;
- DIR - liczba wektorów opisu użytkownika.
- W następnych wierszach wyprowadzane są kolejno:
- systemowy numer końcówki - gwiazdka przy numerze końcówki oznacza końcówkę użytkownika, który wydał zlecenie;
- nazwa użytkownika - gwiazdka przy nazwie użytkownika oznacza aktywny XOSL;
- nazwy uruchomionych przez niego procesów. Procesy działające (aktywne) oznaczone są znakiem "*" lub "&".
- Zlecenie wyprowadzenia informacji o zasobach systemowych i użytkownikach obsługiwanych przez XOSL. W pierwszym wierszu podawana jest informacja o aktualnie nie zajętych zasobach systemowych:
DISJ
- Zlecenie wyprowadzania informacji o procesach uruchomionych przez użytkownika wydającego zlecenie. W kolejnych kolumnach podawane są:
- nazwa programu i oznaczenie trybu pracy,
- zawartość licznika rozkazów,
- słowo stanu procesu,
- komentarz określający stan procesu (według słowa stanu).
- Dla każdego procesu wyprowadzany jest jeden wiersz.
- Zlecenie wyprowadzania informacji o procesach uruchomionych przez użytkownika wydającego zlecenie. W kolejnych kolumnach podawane są:
MES ,<adresat komunikatu>,<treść komunikatu>
- Zlecenie nadania komunikatu do wskazanego adresata. Adresatem komunikatu, w zależności od parametru, może być:
- <nazwa użytk.> - dowolny, aktualnie pracujący użytkownik;
- ALL/ - wszyscy aktualnie pracujący użytkownicy;
- MON/ - lub OUT/ końcówka lub strumień OUT.
- Komunikat jest wyprowadzany na końcówkę adresata (adresatów) natychmiast, jednak tak, by mu jak najmniej zakłócać pracę.
- Zlecenie nadania komunikatu do wskazanego adresata. Adresatem komunikatu, w zależności od parametru, może być:
MAIL ,{?ERF lub {<adresat> lub ?ALL lub ?LIS} [,<TZ>]}
- Przesłanie komunikatu do dowolnego użytkownika. Komunikat zostanie wydrukowany po zgłoszeniu się użytkownika do systemu. Poszczególne opcje oznaczają:
- ?ALL - polecenie nadawania komunikatu do wszystkich użytkowników;
- ?ERF - polecenie usunięcia komunikatu globalnego ("zainstalowanego" opcją ?ALL);
- ?LIS - polecenie wydrukowania nieodebranego komunikatu.
- Komunikaty adresowane do wszystkich użytkowników może nadawać tylko użytkownik o uprawnieniu 037. Treść komunikatu zostanie pobrana ze zbioru którego tytuł jest parametrem zlecenia.
- Przesłanie komunikatu do dowolnego użytkownika. Komunikat zostanie wydrukowany po zgłoszeniu się użytkownika do systemu. Poszczególne opcje oznaczają:
PRT ,<tekst>
- Zlecenie wyprowadzenia wskazanego tekstu na strumień OUT.
ES [,{ERF lub NOT}]
- Zlecenie zakończenia sesji. Poszczególne opcje oznaczają:
- ?ERF - polecenie usunięcia nietrwałych zbiorów,
- ?NOT - polecenie zachowania nietrwałych zbiorów.
- Opcja NOT wykonywana jest tylko dla użytkowników o uprawnieniu 037.
- Zlecenie zakończenia sesji. Poszczególne opcje oznaczają:
Zlecenia działań na zbiorach
DIR [,<nazwa skorowidza>[,?ALL]]
- Zlecenie ustalenia skorowidza bieżącego. Zlecenie bez argumentu ustala skorowidz główny użytkownika. Użycie opcji ALL powoduje przeszukanie wszystkich skorowidzów (nie tylko podległych). Jej użycie dozwolone jest użytkownikowi o uprawnieniu 010.
LIF [,[<TZ>][,<typ>]][,<WO>]...
- Zlecenie drukowania opisów zbiorów dostępnych we wskazanym skorowidzu na wskazanym obszarze. Podawanie nazwy obszaru i skorowidza nie jest obowiązkowe zaś podana nazwa zbioru traktowana jest jako początek (pierwsze znaki) nazw zbiorów których opisy mają być wyprowadzone.
- Nagłówek wydruków zawiera informację o obszarze dyskowym:
- numer kolejny obszaru;
- nazwę obszaru;
- nazwę skorowidza (pole puste oznacza skorowidz roboczy);
- budżet użytkownika na danym obszarze;
- ogólną liczbę sektorów wolnych (nie należących do żadnego zbioru);
- liczbę sektorów wolnych stanowiących największy spójny obszar (wielkość największego zbioru jaki można utworzyć na danym obszarze).
- Dla obszarów RAM nagłówek wydruku zawiera informację o zajętości obszaru:
- w nawiasach okrągłych - ogólną liczbę sektorów wolnych (po 16 sektorów na każde 4Ksłowa pamięci);
- w nawiasach prostokątnych - liczbę zbiorów w przestrzeni oraz liczbę Ksłów pamięci zajętych przez zbiory.
- Podstawowy opis zbioru zawiera:
- wyróżnik określający dostęp do zbioru, gdzie:
- * oznacza zezwolenie tylko na odczyt ze zbioru;
- # oznacza zezwolenie na odczyt i zapis do zbioru;
- brak wyróżnika oznacza zbiór chwilowy (nietrwały, istniejący tylko w czasie sesji użytkownika);
- nazwa zbioru;
- typ zbioru;
- długość zbioru (parametr LEN);
- czteroznakowe określenie kwalifikacji zbioru, przy czym pojawienie się poniższych liter oznacza:
- B zbiór wchodzący w budżet użytkownika;
- R zbiór rezydujący (informacja dla programu MTC);
- T istnieje kopia tego zbioru na taśmie magnetycznej (wskażnik ustawiany przez program MTC);
- E zbiór uszkodzony (wskażnik ustawiany przez zlecenie GOF programu BOSS).
- wyróżnik określający dostęp do zbioru, gdzie:
- Użycie opcji oznacza polecenie wykonania następujących operacji:
- ?NLI - jak polecenie NLI zlecenia REP;
- ?WRK - polecenie drukowania tylko opisów zbiorów nietrwałych;
- ?PAR - drukuj parametry zbiorów. Wyprowadzane są dodatkowo parametry 1 i 2, liczby określające atrybuty i parametr MEM, oraz określenia kategorii dostępu;
- ?LIM - drukuj budżet użytkownika. Informacja o przekroczonym budżecie podawana jest niezależnie od ustalenia opcji;
- ?ULI - podaj informacje o zbiorach innych użytkowników wchodzących w budżet użytkownika wydającego zlecenie;
- ?OLI - podaj informacje o zbiorach własnych użytkownika wchodzących w budżet innych użytkowników;
- ?ALL - podaj informacje o wszystkich zbiorach o podanej nazwie we wszystkich dostępnych skorowidzach (jeżeli używamy tej opcji, to nazwa zbioru jest traktowana jako pełna nazwa, a nie tylko początkowe litery);
- ?SPE - podaj informacje o zbiorach specjalnych (typy: -1 ÷ -5);
- ?ADR - podaj informacje o położeniu zbioru. Wyprowadzany jest adres etykiety zbioru w słowniku, oraz adresy dyskowe początku i końca zbioru .
- Zlecenie drukowania opisów zbiorów dostępnych we wskazanym skorowidzu na wskazanym obszarze. Podawanie nazwy obszaru i skorowidza nie jest obowiązkowe zaś podana nazwa zbioru traktowana jest jako początek (pierwsze znaki) nazw zbiorów których opisy mają być wyprowadzone.
CRF ,<TZ>[,<długość zbioru> lub _(DEV][,<par. zlecenia SET>]
- Zlecenie utworzenia zbioru z ewentualnym ustaleniem jego parametrów. Użycie słowa kluczowego DEV oznacza polecenie utworzenia w skorowidzu zbiorów etykiety opisującej urządzenie. Parametry tak utworzonej etykiety mogą być zmieniane za pomocą zleceń: OWE, PER, SET, ERF, GIF oraz REN. Opcja DEV może być użyta tylko przez użytkownika o uprawnieniu 010.
ERF ,<TZ>[,<TZ>]...
- Zlecenie usunięcia wskazanych zbiorów.
PER ,<TZ>[,<TZ>][,<WO>]...
- Zlecenie utrwalenia zbioru i ustalenia ochrony przed usunięciem i zapisem. Zlecenie umożliwia przepisanie zbioru z obszaru roboczego z ewentualną zmianą nazwy i przynależności do skorowidza (zgodnie z drugim tytułem zbioru). Zlecenie rozpoznaje opcje: ?OR, ?OW, ?LR, ?LW, ?AR oraz ?AW. Użycie opcji (jednej lub kilku) oznacza polecenie ustalenia odpowiedniej kategorii dostępu do zbioru.
OWE ,<TZ>[,<TZ>]...
- Zlecenie zniesienia ochrony przed usunięciem i zapisem dla wskazanych zbiorów.
REN ,<TZ>,<nowy tytu_l zbioru>
- Zlecenie zmiany nazwy zbioru i/lub przynależności do skorowidza (zmiany przynależności można dokonać tylko dla zbiorów utrwalonych). Zlecenie nie dokonuje przepisywania treści zbioru (w tytule zbioru nie można zmienić pola identyfikatora przestrzeni).
GIF ,<TZ>,<nazwa skorowidza>
- Zlecenie przeniesienia wskazanego zbioru do innego skorowidza. Przedmiotowy zbiór musi być utrwalony i znajdować się w skorowidzu bieżącym lub podległym.
- UWAGA: Skorowidzem docelowym może być tylko skorowidz bieżący lub podległy. Dotyczy to również przenoszenia zbiorów zleceniami PER, REN, SET.
SET ,<TZ>[[,<typ>]{,<WO>}...]{,<lista parametrów> lub ?ERF}
- Zlecenie ustalenia parametrów zbioru. Za pomocą zlecenia SET można uzyskać wykonanie wszystkich tych operacji co zleceniami PER (zlecenie PER można zastąpić parą zleceć COPFIL i SET), OWE, GIF, REN oraz ERF. Te ostatnie są dostępne ku wygodzie użytkowników, mimo, że de facto są zbądne.
- Użycie opcji powoduje ustalenie parametrów grupy zbiorów. Tytuł i typ zbioru (przy użytej opcji) mają interpretację taką samą jak w zleceniu LIF. Zlecenie rozpoznaje następujące opcje:
- ?WRK - zlecenie dotyczy tylko zbiorów nietrwałych;
- ?ALL - parametry są ustalane automatycznie;
- ?ACC - parametry są ustalane po akceptacji przez użytkownika;
- Odpowiedzią na zapytanie o akceptacje może być:
- * - zgoda na operację;
- DC4 - zaniechanie dalszej realizacji zlecenia;
- inny znak - pominięcie operacji.
- Lista parametrów składa się z wyrażeń określających wartości ustalanych parametrów poprzedzonych identyfikatorami, oraz z identyfikatorów kategorii dostępu. Parametry zbioru nie ustalane zleceniem pozostaję bez zmian.
- ?ERF (zamiast listy parametrów) oznacza polecenie usunięcia zbiorów. Próba usunięcia zbioru z ochroną powoduje zapytanie o akceptację. Znaczenie odpowiedzi na zapytanie o akceptację jest takie samejak przy użyciu opcji ACC.
- Elementy listy parametrów:
- TYP ,<typ zbioru> - ustalenie bądź zmiana typu zbioru na podany;
- LEN ,<rozmiar zbioru w sektorach> - ustalenie rozmiaru zbioru;
- MEM ,<liczba K-słów> - ustalenie wymiaru bloku pamięci przydzielanej przy pierwszym uruchomieniu programu (przy tworzeniu procesu);
- ATR ,<atrybut zbioru> - ustalenie atrybutów zbioru;
- NAM ,[<nazwa skorowidza>/][<nazwa zbioru>] - zmiana nazwy zbioru i/lub przynależności do skorowidza;
- PA1 ,<WA> - ustalenie pierwszego parametru zbioru;
- PA2 ,<WA> - ustalenie drugiego parametru zbioru;
- MAC- zadeklarowanie zbioru jako makrozlecenia (tzn. jako zawierającego ciąg zleceń);
- Kategorie dostępu:
- OR - udzielenie właścicielowi zbioru zezwolenia na odczyt;
- OW - udzielenie właścicielowi zbioru zezwolenia na zapis i odczyt;
- LR - udzielenie użytkownikom podległym zezwolenia na odczyt;
- LW - udzielenie użytkownikom podległym zezwolenia na zapis i odczyt;
- AR - udzielenie wszystkim użytkownikom zezwolenia na odczyt;
- AW - udzielenie wszystkim użytkownikom zezwolenia na zapis i odczyt.
- Litery mają, jak widać, znaczenie mnemotechniczne (O: owner - właściciel; L: lower - niższy; A: all - wszyscy; R: read - odczyt; W: write - zapis).
- Przykłady:
- SET,FIX/LIBRAR/,?ALL,LR - udostępnienie wszystkich zbiorów skorowidza LIBRAR na obszarze FIX do odczytu użytkownikom podległym;
- SET,,MAK,?ACC,MAC,AR - zlecenie z akceptacją, dotyczące wszystkich zbiorów o typie MAK z bieżącego skorowidza na wszystkich obszarach. Po akceptacji ustala dla tych zbiorów:
- oznaczenie jako zawierające makrowzorzec,
- udostępnienie wszystkim do odczytu.
UNL {,<nr obszaru> lub <nazwa obszaru>}[?LOC lub ?CH]
- Zlecenie odłączenia obszaru dyskowego. Zlecenie powoduje odłączenie użytkownika od obszaru i sprawdzenie zajętości obszaru. Jeżeli obszar okaże się nie używany następuje odłączenie obszaru (obszar "obcy"),jeżeli używany - podany zostaje wykaz działających na nim użytkowników.
- Użycie opcji LOC lub brak opcji powoduje odłączenie użytkownika, natomiast opcji CH sprawdzenie czy można odłączyć obszar.
LOD ,<nr obszaru>
- Zlecenie dołączenia wskazanego obszaru dyskowego. W wyniku wykonania zlecenia następuje udostępnienie obszaru użytkownikowi (o ile jest on na tym obszarze znany).
Zlecenia działań na skorowidzach
W zleceniach tej grupy używane są następujące elementy:
- <nazwa> - nazwa użytkownika lub skorowidza;
- <hasło> - trzyznakowe hasło użytkownika;
- <obszar> - nazwa obszaru (talerza) dyskowego;
- <uprawn> - kod uprawnień użytkownika (0:-63);
- <budżet> - liczba sektorów przyznanych użytkownikowi do utrwalania zbiorów.
Termin użytkownik oznacza skorowidz główny użytkownika lub jego wektor zasobów i parametrów.
Zdefiniowane są następujące zlecenia działania na skorowidzach:
CRU ,<nazwa użytkownika> ,<uprawn> {,<obszar> ,<budżet>}...
- Zlecenie utworzenia podległego użytkownika. Zlecenie jest wykonywane tylko dla użytkownika o uprawnieniu 020. Uprawnienia użytkownika tworzonego nie mogą być wyższe niż użytkownika tworzącego.
CRD ,<nazwa skorowidza> {,<obszar>}...
- Zlecenie utworzenia skorowidza bezpośrednio podległego aktualnemu.
ERD ,<nazwa skorowidza> [,<obszar>]... ERU ,<nazwa użytkownika> [,<obszar>]...
- Zlecenie usunięcia skorowidza lub użytkownika. Usunięte zostaje całe poddrzewo skorowidzów poczynając od wskazanego. Podanie obszarów ogranicza usuwanie do wskazanych obszarów. Zlecenie nie usuwa zbiorów należących do usuwanych skorowidzów.
CLU [,<nazwa> [,?ALL]]
- Zlecenie oznaczenia użytkownika jako czasowo zawieszonego w zezwoleniu na pracę pod systemem CROOK. Opcja ALL oznacza, że zawieszenie obejmuje także wszystkich użytkowników podległych. Pominięcie parametrów powoduje oznaczenie wszystkich użytkowników, podległych użytkownikowi wydającemu zlecenie, jako chwilowo zawieszonych w zezwoleniu na pracę pod systemem CROOK.
OPU [,<nazwa> [,?ALL]]
- Zlecenie przywrócenia użytkownikowi (oraz użytkownikom mu podległym jeżeli użyto opcji ALL) prawa do pracy pod systemem.
ATR ,<nazwa użytkownika> ,<uprawn>
- Zlecenie zmiany uprawnień podległego użytkownika. Uprawnienia podległego użytkownika nie mogą być wyższe od uprawnień użytkownika wydającego zlecenie.
ADL ,<nazwa użytkownika> {,<obszar> ,<liczba>}...
- Zleceni własnegoe przekazania części budżetu sektorów użytkownikowi podległemu. Zmiany budżetu można dokonywać tylko ze skorowidza bezpośrednio nadrzędnego. Liczba (może być ona ujemna) jest dodawana do budżetu wskazanego użytkownika a odejmowana od budżetu użytkownika wydającego zlecenie.
OSL [,[<nazwa interpretatora zleceń>][,<nazwa zlecenia>]]
- Deklaracja interpretatora zleceń i zlecenia wykonywanego przez OSL po rozpoznaniu użytkownika (jako pierwsze zlecenie sesji). Standardowy interpretator zleceń nosi nazwę XOSL i jest deklarowany w chwili tworzenia użytkownika. Zlecenie podane jako parametr zlecenia OSL może być dowolnym, bezparametrowym zleceniem (może to być wywołanie programu lub makrozlecenia). Pominięcie parametrów powoduje unieważnienie poprzednich deklaracji i ustalenie interpretatora standardowego.
LUS [,<obszar>/][<nazwa>]
- Zlecenie wyprowadzenia listy podległych skorowidzów. Użycie parametru pozwala ograniczyć wyprowadzanie do określonego nim poddrzewa. W kolejnych wierszach wyprowadzane są:
- w nagłówku:
- nazwa obszaru;
- ścieżka od skorowidza bieżącego do korzenia skorowidzów;
- budżet przypadający na użytkownika;
- w nawiasach dane dla całego obszaru: liczba sektorów wolnych oraz długość w sektorach największego wolnego obszaru spójnego.
- w kolejnych wierszach:
- nazwa skorowidza lub użytkownika. Nazwa użytkownika chwilowo zawieszonego opatrzona jest znakiem "*";
- liczba określająca kod uprawnień użytkownika;
- budżet sektorów dostępnych do utrwalania zbiorów.
- w nagłówku:
- Wcięcia występujące w wydruku pozwalają na łatwą orientację w drzewie skorowidzów. Nazwa skorowidza nie będącego skorowidzem głównym użytkownika opatrzona jest napisem DIR.
- Zlecenie wyprowadzenia listy podległych skorowidzów. Użycie parametru pozwala ograniczyć wyprowadzanie do określonego nim poddrzewa. W kolejnych wierszach wyprowadzane są:
PAS ,<hasło>
- Zlecenie ustalenia nowego hasła dostępu.
Zlecenia dotyczące procesów
Zlecenia tej grupy służą do uruchamiania procesów i interwencji w sytuacjach awaryjnych. Przeznaczone są one dla bardziej zaawansowanych użytkowników tworzących procesy w języku symbolicznym. Większych możliwości dostarcza zlecenie (i wywołany nim program) DEBU. Ominięcie nazwy procesu oznacza, że zlecenie odnosi się do procesu który spowodował ostatni alarm systemowy.
SP [,<nazwa procesu>]
- Zlecenie zatrzymania procesu.
RS [,<nazwa procesu>] [,[<WA>]]...
- Wznowienie wykonywania procesu. Wyrażenia arytmetyczne podają wartości, jakie przed wznowieniem wykonywania zostaną umieszczone kolejno w rejestrach IC, R1, R2,R3, itd. Podanie parametru pustego powoduje wyzerowanie odpowiedniego rejestru, pominięcie końcowych parametrów powoduje pozostawienie pozostawienie zawartości rejestrów bez zmian. Do zmiany zawartości wybranych rejestrów służy zlecenie LR.
DE [,<nazwa procesu>]
- Zlecenie usunięcia procesu.
DR [,<nazwa procesu>]
- Zlecenie wyprowadzenia zawartości rejestrów (IC,R0,R1...R7).
IC [,<nazwa procesu>],<nowa zawartość IC>[,<WA>]...
- Zlecenie zapisu do IC i rejestrów od R1 począwszy.
LR [,<nazwa procesu>],<numer rejestru>[,<WA>]...
- Zlecenie zapisu do kolejnych rejestrów począwszy od wskazanego.
ST [,<nazwa procesu>],<adres>[,<WA>]...
- Zlecenie zapisu do pamięci procesu kolejnych wartości począwszy od podanego adresu.
Poniższa grupa zleceń służy do wyprowadzania zawartości komórek pamięci procesu w różnych formatach. Wszystkie one mają taką samą składnię.
PD [,<nazwa procesu>],<adres>[,<liczba>]
- Zlecenie wyprowadzenia zawartości wskazanej liczby komórek pamięci procesu od zadeklarowanego adresu począwszy. Wyprowadzanie odbywa się w postaci liczb dziesiętnych.
PO
- Jak PD lecz w postaci liczb ósemkowych (oktalnych).
PB
- Jak PO lecz w postaci zawartości kolejnych byte'ów. Byte'y należące do jednego słowa oddzielone są dwukropkiem, starszy byte po lewej stronie dwukropka, młodszy po prawej.
PC
- Jak PB lecz w postaci znaków kodu ISO. Bajty nie mające reprezentacji graficznej (w tym równierz odstęp - spacja) są przedstawione jako liczby ósemkowe.
PCN
- Jak PD lecz w postaci znaków kodu R40.
Ogólnodostępne zlecenia zewnętrzne
TM
- Zlecenie wydrukowania aktualnego czasu i daty.
CC {,<wyrażenie arytmetyczne>}...
- Zlecenie obliczenia wartości wyrażeń arytmetycznych i konwersji liczb. W wyrażeniu arytmetycznym dopuszczalne jest używanie czterech podstawowych działań arytmetycznych (+ - * :), skalowania (/) oraz nawiasów. Składnikami wyrażenia arytmetycznego mogą być liczby ósemkowe,dziesiętne, szestnastkowe (poprzedzone znakiem #). Dopuszczalne jest używanie składników o postaci: !<znak><znak>, !!<znak>, !<znak>! oraz $<znak><znak><znak>. Ich interpretacja, jak również interpretacja skalowania jest taka sama jak w języku symbolicznym ASSM. Po obliczeniu wartości wyrażeń brane są ich wartości modulo 65536 (tzn. 16 najmłodszych bitów) i wyprowadzane, każde w oddzielnym wierszu, w postaci kolejno:
- liczby ósemkowej (oktalnej) 7-cyfrowej;
- liczby dziesiętnej (jedynie w tym przypadku wartość jest interpretowana jako uzupełnienie dwójkowe) składającej się z jednej do pięciu cyfr, poprzedzonej znakiem minus dla liczb ujemnych;
- liczby szestnastkowej 4-cyfrowej, poprzedzonej znakiem #;
- dwóch znaków repertuaru ASCII rozdzielonych dwukropkiem (kody nie mające reprezentacji graficznej drukowane są jako liczby ósemkowe);
- trzech znaków kodu R-40, poprzedzonych znakiem $, spacja jest zastąpiona znakiem -;
- liczby dwójkowej (binarnej) 16-bitowej.
- Obliczenia wykonywane są na wartościach 32-bitowych.
- Zlecenie obliczenia wartości wyrażeń arytmetycznych i konwersji liczb. W wyrażeniu arytmetycznym dopuszczalne jest używanie czterech podstawowych działań arytmetycznych (+ - * :), skalowania (/) oraz nawiasów. Składnikami wyrażenia arytmetycznego mogą być liczby ósemkowe,dziesiętne, szestnastkowe (poprzedzone znakiem #). Dopuszczalne jest używanie składników o postaci: !<znak><znak>, !!<znak>, !<znak>! oraz $<znak><znak><znak>. Ich interpretacja, jak również interpretacja skalowania jest taka sama jak w języku symbolicznym ASSM. Po obliczeniu wartości wyrażeń brane są ich wartości modulo 65536 (tzn. 16 najmłodszych bitów) i wyprowadzane, każde w oddzielnym wierszu, w postaci kolejno:
COPY [,<TZ_we>]...,<TZ_wy>[,<tekst>][,<WO>]...
- Zlecenie kopiowania zawartości wskazanych zbiorów do zbioru wyjściowego. Zlecenie powyższe realizuje sekwencyjne kopiowanie i łączenie zbiorów znakowych. Podanie jednego tylko tytułu (tytułu zbioru wyjściowego) zbioru powoduje zapisywanie do tego zbioru ze strumienia wejściowego zleceń. Podany opcjonalnie tekst definiuje niestandardowe zakończenie zbioru. Umożliwia on tworzenie zbiorów danych wewnątrz makrozleceń. Tekst ten jest rozpoznawany tylko na początku wiersza i nie jest kopiowany do zbioru.
- Zlecenie dopuszcza następujące opcje:
- ?NUM - przy wprowadzaniu z końcówki wyprowadza na nią kolejny numer wiersza w zbiorze wynikowym. (wyprowadzane liczby nie są przenoszone do zbioru);
- ?NUL - nie ignoruje przy kopiowaniu znaków o kodzie 0;
- ?NOR - polecenie standaryzacji zbioru wynikowego do postaci akceptowanej przez system. Standardowy rekord rozpoczyna sie jednym ze znaków LF, FF lub VT, kończy zaś znakiem CR. Konwencja ta obowiązuje tylko dla programów współpracujących ze standardowym interpretatorem zleceń XOSL;
- ?APP - ustala dopisanie do zbioru wyjściowego;
- ?DEL - deklaracja wpisywania do już istniejącego zbioru (ze zmianą jego poprzedniej zawartości);
- ?SPE - deklaracja kopiowania po jednym znaku (głownie dla zbiorów niestandardowych).
- Przykład: Taśmę wyperforowaną pod systemem GEORGE-3 można wczytać do zbioru ZBIOR zleceniem:
- COPY,TR1,ZBIOR,?SPE,?NOR
LIST ,<TZ_we>[,<TZ_wy>][,<W1>[,<W2>]][,<WO>]...
- Zlecenie wyprowadzenia zawartości zbioru na końcówkę. Program zatrzymuje się po wyprowadzeniu 22-ch wierszy. Można wówczas wznowić jego pracę znakiem powrotu karetki lub zakończyć znakiem DC4 (CTRL T). Podanie tytułu zbioru wyjściowego <TZ_wy> powoduje przekopiowanie zbioru wejściowego (lub jego fragmentu) do zbioru wyjściowego. Parametry W1 i W2 określają początek i koniec wyprowadzanego tekstu. Mogą one przybierać jedną z trzech postaci:
- numer podany jako parametr W1 określa numer kolejny pierwszego wyprowadzanego wiersza, podany zaś jako W2 - liczbę wyprowadzanych wierszy;
- tekst ograniczony znakami '<' i '>' - wiersz od którego będzie rozpoczęte (W1) lub na którym zostanie zakończone (W2) wyprowadzanie. Program poszukuje wiersza zaczynającego się wskazanym tekstem;
- tekst zamknięty w inne znaki ograniczające tekst - działanie jak wyżej, przy czym poszukiwany jest wiersz zawierający wskazany tekst.
- Zlecenie rozpoznaje następujące opcje:
- ?NLI - jak polecenie NLI zlecenia REP;
- ?NUM - wyprowadzanie z numerowaniem wierszy.
- ?ALL - wyprowdzanie wszystkich wierszy zawierających tekst wskazany wyrażeniem W1.
- UWAGA: W komórkach o adresach 3 i 4 umieszczone są liczby określające długość wiersza dla końcówki (pod adresem 3) oraz dla innych urządzeń (pod adresem 4).
- Zlecenie wyprowadzenia zawartości zbioru na końcówkę. Program zatrzymuje się po wyprowadzeniu 22-ch wierszy. Można wówczas wznowić jego pracę znakiem powrotu karetki lub zakończyć znakiem DC4 (CTRL T). Podanie tytułu zbioru wyjściowego <TZ_wy> powoduje przekopiowanie zbioru wejściowego (lub jego fragmentu) do zbioru wyjściowego. Parametry W1 i W2 określają początek i koniec wyprowadzanego tekstu. Mogą one przybierać jedną z trzech postaci:
DLIST ,<TZ_we>[,<TZ_wy>][,<WA >[,<WA >[,<WA >]]]
- Zlecenie wydrukowania na drukarce (zbiorze o nazwie LP2) zawartości podanego zbioru, po dwie strony na arkuszu papieru drukarki, z numeracją stron oraz z informacją nagłówkową podającą nazwę drukowanego zbioru oraz datę i czas rozpoczęcia wydruku.Drugi parametr zlecenia umożliwia zmianę zbioru wyjściowego. Parametry WA-1 oraz WA-2 określają numer (w zbiorze wejściowym) pierwszej wyprowadzanej strony, oraz numer jaki zostanie jej nadany na wydruku. Parametr WA-3 określa liczbę stron do wydrukowania.
- UWAGA: W kolejnych komórkach programu od adresu 2 począwszy umieszczone są kolejno: nazwa urządzenia (dwa słowa w kodzie R40), liczba znaków w wierszu, liczba wierszy na stronie, szerokość (w znakach) nie zadrukowanego odstępu między szpaltami stron oraz liczba znaków na komentarz (drugi tabulator).
STAPE ,<TZ 1>,<TZ 2>
- Zlecenie porównywania dwóch zbiorów znakowych i wyprowadzania na końcówkę wierszy różniących się między sobą.
DUMP ,<TZ_we>[,<TZ_wy>][,<WO>]...
- Zlecenie wyprowadzenia zawartości zbioru zawierającego program binarny w postaci znakowej o formacie umożliwiającym umieszczenie w zbiorze za pomocą programu (zlecenia zewnętrznego) LOAD. Jeśli nie podano tytułu zbioru wyjściowego, informacja jest wyprowadzana na zbiór PUN (dziurkarka taśmy). Jako długość wyprowadzanego zbioru brana jest wartość parametru 2 zbioru. Wyprowadzany tekst rozpoczyna się od nagłówka zawierającego opisu zbioru (bez bitu istotności).
- Program rozpoznaje następujące opcje:
- ?ALL - długość wyliczana jest według parametru LEN;
- ?CR3 - nagłówek ma postać akceptowaną przez program LOAD systemu CROOK-3.
LOAD [,[<TZ_wy>] [,<TZ_we>]]
- Zlecenie wczytania zawartości zbioru binarnego ze zbioru znakowego przygotowanego zleceniem DUMP (na ogół będzie to taśma papierowa). Pierwszy tytuł zbioru określa zbior wynikowy (pominięcie oznacza zbiór którego nazwa i parametry znajdują się w nagłówku) drugi tytuł określa zbiór wejściowy (pominięcie oznacza zbiór TR1).
CHECK ,<TZ 1>,<TZ 2> [,<TZ>] [,<WA_1> [,<WA_2>]] [,<WO>]...
- Zlecenie binarnego (słowo po słowie) porównania zawartości dwóch zbiorów lub ich części. Trzeci (opcjonalny) tytuł zbioru określa wyjście informacji o znalezionych róznicach. Pozostałe parametry określają:
- <WA_1> - adres początku porównania;
- <WA_2> - liczbę porównywanych słów;
- opcje:
- ?NOP - podana ma być tylko informacja zbiorcza - czy różnice były, czy ich nie było;
- ?PAR - liczba porównywanych słów będzie równa parametrowi 2. Pominięcie opcji i WA_2 powoduje przyjęcie liczby słów wynikającej z parametru LEN;
- ?LIN ?NLI -jak w zleceniu REP.
- Zlecenie binarnego (słowo po słowie) porównania zawartości dwóch zbiorów lub ich części. Trzeci (opcjonalny) tytuł zbioru określa wyjście informacji o znalezionych róznicach. Pozostałe parametry określają:
REWR ,<oper>,<strum>,<adr PAO>,<dysk adr pocz>[,<dług>]
- Zlecenie transmisji fragmentów zbioru dyskowego do/z bufora. Zlecenie posługuje się buforem o długości 11.5 K słów (mogącym pomieścić 46 sektorów) zaczynającym się od adresu 0.
- Poszczególne parametry oznaczają:
- <oper> - określenie operacji;
- <strum> - strumień przywiązany do zbioru na którym będą dokonywane operacje odczytu/zapisu;
- <adr PAO> - adres początku transmisji w pamięci operacyjnej (wewnątrz bufora);
- <dysk adr pocz> - dyskowy adres początku transmisji (względem początky zbioru);
- <dług> - długość transmisji.
- Zlecenie wykonuje operacje opisane następującymi kodami:
- RE - czytanie do bufora, długość transmisji podawana w sektorach, pominięta - jeden sektor;
- WR - pisanie z bufora do zbioru, długość jak w RE;
- RF - czytanie do bufora, długość transmisji w słowach, pominięta - cały zbiór;
- WF - pisanie z bufora do zbioru, długość jak w RF.
COPFIL ,<TZ_we>,<TZ_wy>[,<WO>]...
- Zlecenie kopiowania zawartości zbioru wejściowego do zbioru wyjściowego. Zbiór wyjściowy jest w razie potrzeby tworzony.
- Program rozpoznaje następujące opcje:
- ?OWE - polecenie usunięcia ochrony zbioru wynikowego przed zapisem;
- ?ERF - polecenie usunięcia zbioru wejściowego po wykonaniu operacji kopiowania;
- ?AW ?AR ?LW ?LR ?OW ?OR - polecenie ustalenia odpowiedniej kategorii dostępu do zbioru wynikowego;
- ?ALL - polecenie przekopiowania wszystkich dostępnych zbiorów podanego skorowidza na wskazanym obszarze;
- ?ACC - jak ?ALL, lecz po akceptacji użytkownika. Program podaje nazwę zbioru, użytkownik zaś może ją zaakceptować podając znak "*". Każda inna odpowiedż na pytanie o akceptację powoduje zaniechanie kopiowania zbioru;
- ?ARE - potwierdzenie podania tytułu zbioru wejściowego z pustym polem nazwy zbioru. Opcja jest wymagana gdy nie występuje żadna z opcji ?ALL ani ?ACC. Opcja ta umożliwia podanie tytułu zbioru w postaci: <numer lub nazwa obsz>/<adr.pocz>,<adr.konca>/ Daje to możliwośc operowania na fragmentach talerzy dyskowych z pominięciem systemu zbiorów (według adresów). Do używania tej opcji upoważnieni są użytkownicy o uprawnieniu 1.
- Podanie pustej nazwy zbioru w tytule zbioru wyjściowego powoduje przeniesienie nazwy zbioru wejściowego na wyjściowy. Przy ustalonej opcji ?ALL lub ?ACC niepusta nazwa zbioru wejściowego określa początkowe znaki nazw kopiowanych zbiorów (analogicznie jak w zleceniu LIF).
MTO
- Zlecenie uruchomienia programu organizacji zbiorów na taśmie magnetycznej. Opis działania tego programu znajduje się w cz. II.
EXM [,<TZ>]
- Zlecenie uruchomienia edytora EXM.
EDIT [,<TZ_we>,<TZ_wy>[,<TZ_cor>]]
- Zlecenie interakcyjnego poprawiania zbioru wejściowego z przesyłaniem poprawionego tekstu do zbioru wynikowego za pomocą sekwencyjnego edytora kontekstowego EDIT. Podanie trzeciej nazwy zbioru powoduje przyłączenie wejścia poprawek. Bliższe dane o zleceniu znajdują się w opisie edytora kontekstowego w cz. II.
BASIC [,<tekst dla systemu BASIC>]
- Zlecenie uruchomienia systemu programowania w języku BASIC. Tekst zostanie przekazany systemowi BASIC jako wiersz informacji wejściowej.
ASSM [,<wiersz przekazywany translatorowi ASSM>]
- Zlecenie uruchomienia translatora języka symbolicznego ASSM. Lista parametrów składa się ze zleceń akceptowanych przez ten translator.
NORM ,<TZ_we>,<TZ_wy>
- Zlecenie normalizacji zbioru zawierającego program w języku symbolicznym.
DEBU [,<zlecenie programu DEBU>]
- Zlecenie uruchomienia programu wspomagającego uruchamianie programów. Informacje o możliwościach tego programu i sposobie jego użytkowania znajdują się w cz. II.
CEMMA
- Zlecenie uruchomienia translatora języka CEMMA.
BASBIN ,<TZ_we>,<TZ_wy>
- Zlecenie translacji subprogramu binarnego dla translatorów BASIC i CEMMA. Tekst subprogramu (w języku symbolicznym) pobierany jest ze zbioru wejściowego. Zbiór wyjściowy zawiera gotowy do załadowania subprogram.
Makrozlecenia OSL
Makrowołanie (z parametrami) powoduje wygenerowanie makrozlecenia (ciągu zleceń OSL) na podstawie makrowzorca i parametrów (argumentów). Makrozleceniem OSL nazywamy zlecenie powodujące wykonanie ciągu zleceń OSL. Składnia wiersza wywołania makrozlecenia (makrowołania) nie różni się od składni innych zleceń OSL. Tytuł zbioru (nazwa zlecenia) jest tytułem zbioru dyskowego zawierającego makrowzorzec zlecenia. Dla wyróżnienia zbiór ten musi mieć ustalony zleceniem SET odpowiedni atrybut. Zbiór ten (po rozwinięciu go przez makrogenerator zleceń MACRO), stanie się ciągiem zleceń dla XOSL i innych programów z niego wywoływanych. W makrowzorcu i makrozleceniu mogą występować także dane dla programów.
Po wywołaniu makrogenerator tworzy zbiór roboczy o nazwie takiej samej jak zbiór makrowzorca i typie specjalnym '-2' (w wydruku zlecenia LIF ?SPE typ %%%).Do tego zbioru będzie przesyłany przetworzony tekst makrozlecenia. Po zakończeniu stanie się on zbiorem wejściowym zleceń (strumień INT). Zbiór jest usuwany z chwilą zakończenia wykonywania makrozlecenia lub po przyjściu przerwania "zgłoszenie operatora". Użytkownik może śledzić przebieg realizacji makrowołania (wydawszy zlecenie REP COP). Można również prześledzić fazę generacji makrozlecenia poprzez podanie makrogeneratorowi makrowołania:
- MACRO ,<tytuł zbioru makrowzorca>[,<lista parametrów>]
Ten sposób wywołania powoduje wyprowadzenie przetworzonego (rozwiniętego) tekstu makrozlecenia na strumień OUT, bez tworzenia specjalnego zbioru roboczego i wykonywania wygenerowanego ciągu zleceń.
Należy zwrócić uwagę na dwuprzebiegowe przetwarzanie makrozleceń (makrowołań). Dopiero w drugiej fazie (po skompletowaniu zbioru roboczego) następuje właściwe wykonywanie zleceń przez XOSL.
Makrowzorzec (makrodefinicja zlecenia)
Makrowzorzec składa się z trzech elementów: nagłówka, treści i zakończenia. W treści makrowzorca, obok tekstów które zostaną bezpośrednio przeniesione do zbioru wyjściowego, mogą również znajdować się zmienne, etykiety i instrukcje generacyjne. MACRO rozpoznaje jeden znak wyróżniony. Jest on początkiem wszystkich (z wyjątkiem etykiety) obiektów rozpoznawanych przez makrogenerator. Znakiem wyróżnionym jest znak waluty '$'. Może on być przedefiniowywany we wnętrzu makrozlecenia. W dalszej części opisu jako znak wyróżniony używany będzie znak waluty. Makrogenerator rozpoznaje 26 zmiennych generacyjnych znakowych oraz 10 zmiennych generacyjnych numerycznych. Ich nazwy składają się z litery lub cyfry poprzedzonej znakiem $. Wartościami zmiennych są ciągi co najwyżej 160 znaków.
W czasie wykonywania instrukcji generacyjnych wartości numeryczne i funkcje numeryczne są traktowane jako liczby 16-bitowe w notacji uzupełnienia dwójkowego (liczba zostanie w razie potrzeby pobrana z pierwszych znaków łańcucha).
Nagłówek makrowzorca składa się z powtórzenia nazwy zbioru i z opcjonalnie podawanych parametrów. Separatorem tak w nagłówku, jak i w wierszu makrowołania może być przecinek albo ciąg odstępów. Parametry zawierające separator muszą być ujęte w dowolną parę nawiasów tekstowych: (),[] lub <> albo w parę znaków cudzysłowu '"'. Rezultatem przetworzenia wiersza nagłówka jest nadanie wartości zmiennym generacyjnym.
Nadawanie wartości odbywa się w następującej kolejności:
- za wszystkie zmienne generacyjne podstawiany jest łańcuch pusty;
- za zmienne podstawione zostają parametry występujące w nagłówku makrowzorca, przy czym za $A podstawiony zostanie pierwszy parametr, za $B drugi itd.;
- teraz makrogenerator przystępuje do przetwarzania wiersza makrozlecenia (makrowołania), nadając ponownie kolejnym zmiennym łańcuchowym, począwszy od zmiennej $A wartości argumentów makrowołania. Parametr pusty powoduje pozostawienie poprzedniej wartości odpowiadającej mu zmiennej.
- za zmienne numeryczne podstawiane są odpowiednio:
- $0 - liczba przesłanych parametrów,
- $1 - rok,
- $2 - miesiąc,
- $3 - dzień,
- $4 - liczba godzin jaka upłynęła od początku doby,
- $5 - liczba minut jaka upłynęła od pełnej godziny,
- $6 - liczba sekund jaka upłynęła od pełnej minuty.
Zmienne te są w fazie generacji rozwijane w możliwie najkrótszy zapis dziesiętny.
Treść makrowzorca stanowi tekst, mogący zawierać definicje etykiet, zmienne generacyjne oraz funkcje i instrukcje makrogeneratora. Etykieta jest nazwą sześcioznakową. Jej definicja ma następującą składnię:
- $$<etykieta>:
i musi znajdować się na początku wiersza. Definicje etykiet nie są przenoszone do zbioru wyjściowego.
Przetwarzanie wierszy makrowzorca przez makrogenerator ma niżej podany przebieg:
- Sprawdzenie, czy wiersz zaczyna się definicją etykiety. Jeśli tak, jest ona ignorowana;
- Sprawdzenie, czy wiersz (po zignorowaniu etykiety) zaczyna się znakami '$$'. Jeśli tak, to makrogenerator sprawdza czy jest to instrukcja generacyjna i jeśli jest, to przystępuje do jej wykonywania (patrz opis instrukcji generacyjnych poniżej);
- Jeżeli w wyniku wykonania jednej z instrukcji $$IF $$FIL $$INP na wyjście ma zostać wyprowadzony rekord uwarunkowany, to staje się on wierszem przygotowywanym do wyprowadzenia;
- Podstawianie za zmienne i funkcje generacyjne występujące w wierszu ich aktualnych wartości;
- Przeniesienie przetworzonego wiersza do zbioru wyjściowego (bez deinicji etykiety).
Instrukcje generacyjne MACRO
$$COM,<komentarz>
- Wiersz ignorowany.
$$SEP,<znak wyróżniony>
- Instrukcja przedefiniowania znaku wyróżnionego.
$$GO,<etykieta>
- Instrukcja zmiany kolejności generowania. Następnym przetwarzanym wierszem będzie wiersz zaczynający się definicją wskazanej etykiety. Poszukiwanie etykiety zaczyna się od początku makrowzorca.
$$LET,<zmienna znakowa>=<wyrażenie łańcuchowe>
- Instrukcja nadania nowej wartości zmiennej znakowej. <wyrażenie łańcuchowe> może składać się z dowolnej liczby elementów połączonych znakiem konkatenacji (złożenia) &. Elementami tymi mogą być:
- zmienna numeryczna: <zmienna numeryczna>::=$<cyfra>
- zmienna znakowa: <zmienna znakowa>::=$<litera>
- zmienna znakowa wybierana: <zm.znakowa wybierana>::=$(<zm.numeryczna>)
- podłańcuch: <podłańcuch>::=<zm.znakowa><selektor> albo <zm.znakowa wybierana><selektor> gdzie <selektor>::=<wskazanie znaku>[<+ lub -><liczba>]
- Zmienna znakowa wybierana to jedna z 26 zmiennych znakowych. Wybór następuje na podstawie wartości zmiennej numerycznej - wartość jeden wybiera zmienną $A, wartość 2 - zmienną $B itd. Wartością każdej zmiennej znakowej jest ciąg (łańcuch) znaków. Można sobie wyobrazić, że są one ponumerowane od jedności do wartości równej długości zmiennej. Wartością podłańcucha zmiennej znakowej lub zmiennej znakowej wybieranej wybieranej jest ciąg (podłańcuch) znaków tej zmiennej począwszy od znaku o numerze równym indeksowi początku do znaku o numerze równym indeksowi końca włącznie.
- <wskazanie znaku> może być numeryczne:
- liczba;
- zmienna numeryczna;
- litera E (tylko w indeksie końca, jej wartością jest długość - liczba znaków zmiennej);
- albo też łańcuchowe :
- tekst (ujęty w parę nawiasów lub w znaki '"');
- zmienna znakowa.
- W drugim przypadku <wskazanie znaku> równe jest numerowi pierwszego znaku łańcucha określonego <wskazaniem znaku> w wartości ziennej znakowej. <indeks> otrzymuje się ze <wskazania znaku> po ewentualnym dodaniu lub odjęciu podanej <liczby>.
- Przykłady:
- $$LET $A="ABCDEFG,123" - zmienna $A przyjmie wartość "ABCDEFG,123" - 11 znaków;
- $$LET $B=$A[1,","-1] - zmienna $B przyjmie wartość "ABCDEFG" - 7 znaków
- $$LET $9=$A[","+1,E] - zmienna $9 przyjmie wartość 123, (symbol E oznacza koniec zmiennej);
- $$LET $B=$B&"***" - zmienna $B przyjmie wartość "ABCDEFG***" - 10 znaków
- $$LET $C=$9 - zmienna $C przyjmie wartość "123" - 3 znaki
- Instrukcja nadania nowej wartości zmiennej znakowej. <wyrażenie łańcuchowe> może składać się z dowolnej liczby elementów połączonych znakiem konkatenacji (złożenia) &. Elementami tymi mogą być:
$$LET,<zmienna numeryczna>=<wyrażenie numeryczne>
- Instrukcja nadania nowej wartości zmiennej numerycznej. W <wyrażeniu numerycznym> można używać tylko operacji dodawania '+' i odejmowania '-'. Składnikami mogą być:
- liczby,
- zmienne numeryczne,
- teksty (zamknięte w nawiasy lub znaki '"'),
- zmienne znakowe.
- W tych ostatnich dwóch przypadkach, gdzie mamy do czynienia z obiektami o wartościach łańcuchowych, muszą one zawierać na początku znaki reprezentujące liczbę. Liczba ta, będąca wartością składnika, jest pobierana z obiektu łańcuchowego od jego początku aż do napotkania znaku nie będącego cyfrą.
- Instrukcja nadania nowej wartości zmiennej numerycznej. W <wyrażeniu numerycznym> można używać tylko operacji dodawania '+' i odejmowania '-'. Składnikami mogą być:
$$IF,<zmienna><operator><wzorzec>,<rek. uwarunk.>
- Instrukcja warunkowa. Rekord uwarunkowany zostanie przetworzony przy pozytywnym wyniku porównania. Może on zawierać dowolną instrukcję generacyjną lub tekst wyprowadzany do zbioru wyjściowego. Jako <wzorzec>, z którym jest porównywana zmienna, mogą wystąpić:
- zmienna znakowa,
- zmienna numeryczna,
- łańcuch (zamknięty w nawiasy lub znaki '"'),
- liczba (tylko wtedy, gdy porównywana <zmienna> jest zmienną numeryczną.
- Jeśli po lewej stronie operatora relacji występuje zmienna numeryczna, to porównanie jest wykonywane na liczbach. Dopuszczalne są następujące operatory relacji: >,<,=,<>,<=,=>. Ich interpretacja jest naturalna, a wszystkie porównania są wykonywane na łańcuchach. Porównanie łańcuchów wykonywane jest dla kolejnych znaków obu łańcuchów - pierwszy znak z pierwszym; jeśli równe, to drugi z drugim itd. Jeśli kolejne znaki nie są sobie równe, to "mniejszy" jest ten łańcuch, którego znaku wartość kodowa ASCII (ISO-7) jest mniejsza. Jeśli znaki jednego z łańcuchów się wyczerpią, a wszystkie były do tej pory jednakowe, to ten krótszy łańcuch jest "mniejszy".
- Instrukcja warunkowa. Rekord uwarunkowany zostanie przetworzony przy pozytywnym wyniku porównania. Może on zawierać dowolną instrukcję generacyjną lub tekst wyprowadzany do zbioru wyjściowego. Jako <wzorzec>, z którym jest porównywana zmienna, mogą wystąpić:
$$SHL[,<zmienna znakowa>]
- Instrukcja przedefiniowania zmiennych znakowych, od wskazanej począwszy. Brak argumentu powoduje automatyczne przyjęcie zmiennej $A. Przedefiniowanie polega na wykonaniu ciągu podstawień: $$LET $A=$B, $$LET $B=$C, ..., $$LET $Z="" (jeśli argumentem była zmienna $A)
$$END[,<liczba>]
- Deklaracja końca makrowzorca. Po zakończeniu wykonywania makrozlecenia wartość wewnętrzna będzie równa wskazanej liczbie.
$$EXI[,<liczba>]
- Deklaracja zakończenia rozwijania makrowzorca. Instrukcja ta może wystąpić we wnętrzu makrowzorca.
$$FIL[,{"<TZ>" lub <zm.zakowa>}[,<rekord uwarunkowany>]]
- Instrukcja określenia zbioru wejściowego dla zlecenia $$INP. Wartość <zmiennej znakowej>, jeśli występuje, zostanie potraktowana jako tytuł zbioru. Kolejno użyte zlecenia $$FIL powodują powstanie stosu zbiorów. Brak argumentów powoduje odłączenie strumienia wejściowego od ostatnio określonego zbioru.Rekord uwarunkowany zostaje przetworzony w przypadku braku dostępu do odczytu z podanego zbioru.
$$INP,<zminenna znakowa> [,<rekord uwarunkowany>]
- Instrukcja nadania wartości wskazanej zmiennej. Zmienna ta przyjmuje wartość kolejnego wiersza wczytanego z wcześniej określonego zbioru. Rekord uwarunkowany zostanie przetworzony przy próbie czytania spoza końca zbioru.
- UWAGA: Zbiór, o którym mowa w opisie zleceń $$FIL, $$INP musi istnieć przed wywołaniem makrozlecenia.
Zakończenie makrowzorca składa się z deklaracji $$END. Wymagane jest, aby znajdowała się ona na poziomie analizy zleceń przez XOSL. Jej wystąpienie powoduje przesłanie do zbioru wynikowego zlecenia END języka XOSL, domknięcie zbioru wynikowego i rozpoczęcie wykonywania zleceń z tego zbioru przez XOSL, tzn. rozpoczęcie realizacji programu w języku OSL.
Funkcje generacyjne makrogeneratora
$$<nawias lewy>
- Zawieszenie analizy tekstu, aż do wystąpienia funkcji $$<nawias prawy>. Nawiasem lewym może być jeden ze znaków:(, [, < lub ". Tekst makrowzorca jest wyprowadzany do zbioru wyjściowego bez żadnych zmian.
$$<nawias prawy>
- Przywrócenie analizy tekstu. <nawias prawy> musi odpowiadać lewemu. Nawiasem prawym może być, odpowiednio do nawiasu lewego, jeden ze znaków:), ], > lub ".
$$<numer zmiennej numerycznej>
- Funkcja generuje znak o kodzie równym wartości zmiennej numerycznej.
$$USR
- Funkcja generuje 6-znakową nazwę użytkownika.
$$MAC
- Funkcja generuje 6-znakową nazwę makrozlecenia.
$$ATR
- Funkcja generuje uprawnienia użytkownika w postaci 3-znakowej liczby ósemkowej.
Omówione w tym punkcie obiekty generacyjne służą do sterowania generacją i do generacji programów w języku OSL. Nie są one jako takie przenoszone do wynikowego programu (tj. makrozlecenia). Poniżej omówimy obiekty, które wraz ze zleceniami właściwymi składają się na język takich programów tzn. tworzą język OSL.
Elementy makrozleceń języka OSL
OSL rozpoznaje kilka dodatkowych obiektów makrozleceń. Są to:
- <etykieta> - sześcioznakowa nazwa. Definicją etykiety jest występująca na początku wiersza nazwa zakończona znakiem dwukropka ':'.
- <wartość wewnętrzna> - ustawiana po zakończeniu zlecenia. Dla zleceń powodujących wywołanie programu jest to numer (ze znakiem -) alarmu spowodowanego przez program, lub (przy zakończeniu prawidłowym) zawartość rejestru R4. Wartość wewnętrzna może być testowana przez instrukcję sterującą WHEN oraz pobierana przez programy.
- <słowo stanu> - słowo zawierające szesnaście bitów które mogą być ustawiane i testowane przez XOSL a jego zawartość może być pobierana przez programy. Przy wywoływaniu do makrozlecenia przekazywane jest całe słowo stanu. Dwa z bitów są globalne w czasie sesji, pozostałe zaś lokalne na danym poziomie makrozlecenia (tzn. ich zmiana w makrozleceniu nie jest przenoszona do makrozlecenia wywołującego). Pięć z nich jest używanych przez XOSL, pozostałe (11) mogą być dowolnie używane przez makrozlecenia.
Poniżej zestawiono nazwy i znaczenia bitów słowa stanu w kolejności od najbardziej znaczącego (bitu 0) do najmniej znaczącego (bitu 15). Podane znaczenia mają one wtedy, gdy są ustawione na 1:
- P - istnieje program wykonywany w tle;
- E - program w tle zakończył pracę alarmem systemowym;
- R - odpowiednik zlecenia REP COP;
- L - odpowiednik zlecenia REP LIN;
- N - wskażnik wstrzymania drukowania alarmów;
- A - ustalenie angielskiej wersji językowej;
- B, C - bity globalne w czasie sesji;
- 1-8 - bity lokalne w makrozleceniu.
Bity P i E zwierają informację o stanie procesów wykonywanych w tle. Błędne zakończenie programu powoduje wyprowadzenie odpowiedniego alarmu i ustawienie bitu E na 1, nie zmienia natomiast wartości wewnętrznej. Bity słowa stanu mogą być ustawiane i badane za pomocą dalej opisanych instrukcji sterujących OSL. Instrukcje te używają podanych znaków jako identyfikatorów poszczególnych bitów.
Instrukcje sterujące
Instrukcje sterujące pozwalają na sterowanie kolejnością wykonywania zleceń, testowanie wskażników, oraz umożliwiają zadeklarowanie różnych działań, które mają być wykonywane po wykryciu błędu przez XOSL lub system operacyjny. Instrukcje sterujące, z wyjątkiem instrukcji SETVAL oraz END nie zmieniają wartości wewnętrznej. Mogą być używane na dowolnym poziomie realizacji makrozlecenia (również na poziomie wczytywania zleceń z monitora). Ten ostatni przypadek ma znaczenie głównie dydaktyczne.
Instrukcje sterujące:
TRANSF ,<etykieta>
- Następnym realizowanym zleceniem będzie zlecenie poprzedzone wskazaną etykietą. Poszukiwanie tej etykiety rozpocznie się od początku makrozlecenia.
WHENER {,<etykieta> lub -1 lub 0}
- Deklaracja działania, które ma być podjęte po wystąpieniu błędu lub alarmu systemowego. Deklaracja jest lokalna w makrozleceniu (tzn. obowiązuje tylko na danym poziomie realizacji makrozlecenia, do chwili jego opuszczenia). W makrozleceniu może być kilka deklaracji WHENER, obowiązuje zawsze ostatnio przetworzona. Poszczególne wartości argumentu oznaczają:
- <etykieta> - po wystąpieniu błędu wykonaj instrukcję TRANSF do wskazanej etykiety;
- -1 - po wystąpieniu błędu zakończ makrozlecenie przekazując (poprzez wartość wewnętrzną) informację o błędzie;
- 0 - ignoruj błąd.
- Deklaracja działania, które ma być podjęte po wystąpieniu błędu lub alarmu systemowego. Deklaracja jest lokalna w makrozleceniu (tzn. obowiązuje tylko na danym poziomie realizacji makrozlecenia, do chwili jego opuszczenia). W makrozleceniu może być kilka deklaracji WHENER, obowiązuje zawsze ostatnio przetworzona. Poszczególne wartości argumentu oznaczają:
SETVAL ,<WA>
- Ustal wartość zmiennej wewnętrznej.
INPUT <tekst>
- Polecenie wyprowadzenia tekstu na urządzenie MON i wczytanie identyfikatora trzyznakowego (lub liczby). Wczytana wartość podstawiona zostaje pod zmienną VAL i może być testowana instrukcją WHEN. Instrukcja służy do dynamicznego sterowania przebiegiem makrozlecenia.
SETCON <wskazanie bitów>
- Zlecenie ustawienia bitów w słowie stanu.
- <wskazanie bitów> ::= <lista bitów>[-<lista bitów>]
- lub ::= -<lista bitów>
- lub ::= 0
- gdzie:
- <lista bitów> ::= <nazwa bitu>...
- Bity występujące na liście nie poprzedzonej znakiem '-' zostaną ustawione na 1, na poprzedzonej tym znakiem zaś na 0. Bity nie występujące na żadnej z list nie będą zmieniane. Podanie jako wskazania bitów liczby zero jest równoważne podaniu wskazania bitów -BC12345678.
DISP
- Zlecenie wyprowadzenia wartości wewnętrznej, aktualnie obowiązującej deklaracji WHENER oraz zawartości słowa stanu.
WHEN [NOT], <test>, <zlecenie>
- Instrukcja warunkowa. Wskazane zlecenie zostanie wykonane przy pozytywnym wyniku testu (lub negatywnym gdy użyto słowa NOT); w przeciwnym przypadku zostanie zignorowane. Zleceniem tym może być również instrukcja WHEN, co pozwala na uzyskanie iloczynu logicznego testów.
- W OSL można stosować następujące testy:
- FIL <TZ> - pozytywny jeśli istnieje wskazany zbiór;
- OW <TZ> - pozytywny jeśli jest zezwolenie na zapis do wskazanego zbioru;
- RUN <nazwa programu> - pozytywny jeśli wskazany proces jest wykonywany w tle;
- OLD <nazwa programu> - pozytywny jeśli istnieje proces o wskazanej nazwie;
- CON <wskazanie bitów - pozytywny jeśli stan bitów określonych we <wskazaniu bitów> i odpowiadających im bitów słowa stanu jest zgodny;
- VAL {'<' , '=' lub '>'} <WA> - pozytywny jeśli relacja jest spełniona przy podstawieniu wartości wewnętrznej zamiast VAL.
WAIT [,<WA>]
- Zlecenie zawieszenia wykonywania makrozlecenia. Wznowienie nastąpi po spowodowaniu alarmu systemowego przez dowolny program (zakończenie programu), lub po upływie wskazanej liczby kwantów czasu (jak w ekstrakodzie WAIT).
END [,<WA>]
- Zlecenie zakończenia makrozlecenia. Wartość wyrażenia arytmetycznego zostanie nadana wartości wewnętrznej. Wraz z wartością wewnętrzną do makrozlecenia wywołującego przekazane zostaną bity ABC słowa stanu. Jeśli makrozlecenie zakończy się z ujemną wartością wewnętrzną, to makrozlecenie wywołujące potraktuje ją jako błąd (obsługa zgodna z deklaracją WHENER).
Źródło: SYSTEM OPERACYJNY CROOK-5 dla minikomputera MERA-400 (wersja 7), Zbigniew Czerniak, Marek Nikodemski, Gdańsk 1988