.ds LH Anwendung .ds RH \f3Monitor\f1 .ds CH - % - .LP .bp .NH 2 .ft B Monitor ** .ft R .LP .sp 10 .NH 3 .ft B Einf\o'u"'hrung .ft R .LP Der Monitor realisiert die interaktive Arbeit mit dem DBS \*(yy\. Die Monitor-Kommandos erlauben in Zusammenarbeit mit einem Editor und dem \*(yy\-Makro-Prozessor gewisse Manipulationen an einem Text von QUEL-Statements, bevor diese aus dem Monitor-Puffer an den \*(yy\-Parser zur Analyse und zur Veranlassung ihrer Ausf\o'u"'hrung \o'u"'bergeben werden. Die Monitor-Kommandos erlauben die Steuerung der Arbeit mit \*(yy\ aus vorgefertigten Kommandofiles, die Monitor-Kommandos, Makro-Anweisungen und QUEL-Statements enthalten k\o'o"'nnen. .br Der Monitor ist der front_end_process des DBS \*(yy\. Er liest einen Eingabetext - prim\o'a"'r von standard_input - und analysiert diesen auf Monitor-Kommandos. Der Monitor f\o'u"'hrt in seinem Eingabetext gefundene Monitor-Kommandos sofort aus, anderer Text wird in den Monitor-Puffer gestellt. .br Beispiele f\o'u"'r eine komplexe Anwendung des Monitors sind erst in Verbindung mit Makros interessant und finden sich in der "Beschreibung des Makro-Prozessors" und dem Kapitel "Beispiele f\o'u"'r Monitor und Makro-Prozessor". .NH 3 .ft B Modifikationen durch Optionen .ft R .LP Der Monitor wird durch folgende Optionen gesteuert: .DS I -d Unterdr\o'u"'ckung der Ausgabe des dayfile (s. Startvorgang und Arbeitszyklus) -s Unterdr\o'u"'ckung der Ausgabe von Prompt-Meldungen (s. Startvorgang und Arbeitszyklus) -a Unterdr\o'u"'ckung des automatischen L\o'o"'schens des Monitor-Puffers (Ausschalten des autoclear_modus) (s.Arbeit mit dem Monitor-Puffer) .DE .NH 3 .ft B Startvorgang und Arbeitszyklus .ft R .LP Beim Start von \*(yy\ wird neben dem DBS der Monitor ge\%startet. .sp 1 Der Monitor definiert den Makro .DS C "{pathname}" .DE mit dem Pfadnamen des \*(yy\-File-Systems. (Folgend wird in diesem Kapitel ein File_name unter diesem Pfadnamen mit .DS C ing_db/ .DE symbolisiert.) .LP Der Monitor definiert weiter den Makro .DS C "{usercode}" .DE mit dem 2-Byte-\\*(yy\-Usercode (s. usersfile des arbeitenden Nutzers. .sp 1 Der Monitor meldet sich durch Ausgabe der .DS I \*(yy\-login-Meldung .sp 1 "ing_db version login " .DE .LP Diese Ausgabe wird durch die Option "-s" unterdr\o'u"'ckt. Anschliessend wird das .DS C ing_db/sys/etc/dayfile .DE angelistet, was durch die Option "-d" unterdr\o'u"'ckt werden kann. Mit der Ausgabe des dayfile sollen den \*(yy\-Nutzern aktuelle Informationen vermittelt werden. Da es allen Nutzern angeboten wird, ist es nicht zur Aufnahme nutzerspezifischer Informationen geeignet. .sp 1 Durch den Monitor werden danach nacheinander die Monitor-Kommandos .DS B \einclude ing_db/sys/etc/startup \einclude .DE automatisch ausgef\o'u"'hrt, was zur Abarbeitung von Kommandofolgen f\o'u"'hren kann, falls generell im startupfile f\o'u"'r \*(yy\, oder spezifisch f\o'u"'r den Nutzer (Angabe im 7.Feld der Nutzerzeile des ing_db/sys/etc/users) solche Files angelegt wurden (s. auch \einclude-Kommando). .sp 1 Danach geht der Monitor in den Eingabe-Status und beginnt seinen Arbeitszyklus. .sp 1 Zu Beginn des Eingabe-Status meldet sich der Monitor mit den Prompt-Meldungen .DS C " ING_db>" .DE wenn der Monitor-Puffer leer ist, oder mit .DS C " ING_db:" .DE wenn der Monitor-Puffer nicht leer ist und zeigt seine Eingabebereitschaft durch das .DS C Prompt-Symbol "* " .DE zu jedem Zeilenanfang. Die Ausgabe der Prompt-Meldungen und auch des Prompt-Symbols wird durch die Option "-s" unterdr\o'u"'ckt. Davon unber\o'u"'hrt bleibt die Ausgabe aller anderen folgend aufgez\o'a"'hlten Meldungen zur Fehleranzeige. .sp 1 Der Monitor liest den Eingabetext in den Monitor-Puffer, filtert die Monitor-Kommandos heraus und f\o'u"'hrt diese sofort aus. .sp 1 Das spezielle Monitor-Kommando \ego (s.dort) \o'u"'bergibt den Monitor-Puffer an den Parser, der die QUEL-Statements analysiert und ausf\o'u"'hren l\o'a"'sst. Mit \o'U"'bernahme dieses Kommendos meldet der Monitor .DS C "I N G _ d b . . . " .DE (diese Meldung unterbleibt, wenn die Option "-s" gesetzt ist) und versetzt sich in einen Warte-Status. .sp 1 Der Monitor wird nach Abschluss der Arbeiten des Parsers und den, diesen nachgelagerten weiteren \*(yy\-Prozessen, wieder in den Eingabe-Status versetzt und beginnt erneut seinen Arbeitszyklus. .sp 1 Nach Start von \*(yy\ arbeitet der Monitor von standard_input (i.d.R. also vom Terminal). Durch ein \einclude-Kommando (s. dort) arbeitet er danach file-gesteuert, sein included_file ist der Eingabetextspender. Da man die Files hintereinander liegender \einclude-Kommandos als Programm-Ebenen betrachten kann, sagen wir, der Monitor arbeitet nach Start in der Basis-Terminal-Ebene und durch \einclude-Kommandos in darunter liegenden Programm-Ebenen. .sp 1 Die Ausgaben des Monitor erfolgen immer auf standard_output (i.d.R. also ebenfalls auf dem Terminal). Die Eingaben der Funktions-Makros {read...}, {readdefine...} (s.Makro-Prozessor) erfolgen in allen Programm-Ebenen von standard_input. .sp 1 Der Arbeitszyklus des Monitor und damit auch die \*(yy\-Sitzung wird mit Ausf\o'u"'hrung eines \equit-Monitor-Kommandos (s.dort) oder nach Einlesen eines in der Basis-Terminal-Ebene (s. \einclude-Kommando) beendet. .sp 1 Bei der Ausf\o'u"'hrung von Monitor-Kommandos wird der Makroprozessor (s. dessen Kapitel) benutzt. Folgend wird der Output-Text, den der Makroprozessor aus einem Input-Text erzeugt, als .DS C < MACRO ( ) > .DE symbolisiert. .NH 3 .ft B Arbeit mit dem Monitor-Puffer .ft R .LP Bei der Eingabe vom Terminal wird der Eingabetext vom Monitor erst als vollst\o'a"'ndige Zeile (also erst nach Eintasten des ) \o'u"'bernommen. Vorher sind Korrekturen mit oder m\o'o"'glich. Nach \o'U"'bernahme der Zeile k\o'o"'nnen Korrekturen im Monitor-Puffer nur noch durch die Monitor-Kommandos \ereset oder \eeditor ausgef\o'u"'hrt werden. .sp 1 Der Monitor lehnt die Eingabe aller Zeichen, deren Codewert kleiner als oktal 040 ist, ausser , und , ab. Genauer gesagt, er wandelt sie in ein um und signalisiert das durch die Meldung .DS C "Zeichen 0** konvertiert in blanks" .DE Die im Monitor-Puffer formulierten QUEL-Statements werden mit einem \ego-Kommando zur Ausf\o'u"'hrung angewiesen. Danach kann der Monitor-Puffer in der Regel gel\o'o"'scht werden. Das passiert auch im sogenannten autoclear_mode. Das L\o'o"'schen erfolgt nicht, wenn man sich nach R\o'u"'ckkehr in den Eingabe-Status des Monitor sofort noch einmal f\o'u"'r den alten Inhalt des Monitor-Puffers interessiert. .sp Der autoclear_mode wird durch die Option "-a" abgeschaltet. Mit dieser Option muss man in allen F\o'a"'llen selbst\o'a"'ndig - durch ein \ereset-Kommando - den Monitor-Puffer l\o'o"'schen. .sp 1 Genauer gesagt, l\o'a"'uft folgendes ab: .br Nach einem \ego-Kommando ist der Monitor-Puffer zun\o'a"'chst noch unver\o'a"'ndert. Er wird jetzt aber zur L\o'o"'schung vorgemerkt. Diese Vormerkung kann durch die Option "-a" unterdr\o'u"'ckt werden. Die Ausf\o'u"'hrung eines vorgemerkten L\o'o"'schens h\o'a"'ngt davon ab, welches Monitor-Kommando folgt: .br Die Kommandos \eappend, \eprint, \elist, \eedit machen die Vormerkung r\o'u"'ckg\o'a"'ngig; das Kommando \ereset f\o'u"'hrt ohnehin ein L\o'o"'schen aus, alle anderen Kommandos ber\o'u"'cksichtigen die Vormerkung nicht, \eeval setzt sie selbst. Die Ausf\o'u"'hrung der vorgemerkten L\o'o"'schung erfolgt unmittelbar vor und anl\o'a"'sslich der Eintragung des ersten Nicht-Kommando-Zeichens des Eingabetextes in den Monitor-Puffer. .sp 1 Durch dieses automatische L\o'o"'schen des Monitor-Puffers sollen die normalen Arbeitszyklen .DS I \ego \ego .DE oder z.B. .DS I \ego \eappend | \eeditor \ego .DE unterst\o'u"'tzt werden. .NH 3 .ft B Synchrone Beendigung und .br asynchrone Unterbrechung .ft R .LP Durch Abgabe eines Interruptsignals wird der Warte-Status des Monitor beendet. Das bedeutet, dass die vom Parser initiierten \*(yy\-Prozesse asynchron zum Abbrechen veranlasst werden (Achtung: Bei QUEL-Statements, die die Datenbasis \o'a"'ndern, besteht darin eine gewisse Gefahr!). Die Abgabe eines Interruptsignals, w\o'a"'hrend sich der Monitor im Eingabe-Status befindet, ist wirkungslos. .sp 1 Die Abgabe eines Interruptsignals w\o'a"'hrend der file-gesteuerten Arbeit des Monitor f\o'u"'hrt zur R\o'u"'ckkehr in die Basis-Terminal-Ebene. .sp 1 Ein in einer, unter der Basis-Terminal-Ebene liegenden Programmebene (s. \einclude-Kommando) f\o'u"'hrt zur R\o'u"'ckkehr in die dar\o'u"'ber liegende Programm-Ebene und die der letzten zur Beendigung des Monitors ( wie Monitor-\quit-Kommandos ). .sp 1 .NH 3 .ft B Struktur der Monitor-Kommandos .ft R .LP Ein Monitor-Kommando ist eine Zeichenfolge der Form .DS L "\e" {|} [] .sp 1 mit .sp 1 = {|} ; .DE .DS L und = .sp 1 .DE .DS "H" | "help" | "a" | "append" | "b" | "branch" | "cd" | "chdir" | "e" | "ed" | "edit" | "editor" | "g" | "go" | "h" | "help" | "i" | "include" | "read" | "k" | "mark" | "l" | "list" | "p" | "print" | "q" | "quit" | "r" | "reset" | "s" | "sh" | "shell" | "d" | "time" | "date" | "v" | "eval" | "w" | "write" | "m" | "monitor"; .DE .LP Das sind die Monitor-Kommando-Namen mit ihren Alias-Namen. .sp 1 Die sind abh\o'a"'ngig vom jeweiligen Kommandotyp und werden dort beschrieben. Es gibt grunds\o'a"'tzlich drei Gruppen von Kommandos: solche, die .br keinen haben, .br wahlweise einen haben, .br unbedingt einen haben m\o'u"'ssen. .br Da mit abgeschlossen wird, k\o'o"'nnen Kommandos der letztgenannten beiden Gruppen nur am Ende einer Zeile formuliert werden. Das Zeilenende kann f\o'u"'r einen Monitor-Parameter nicht durch kaschiert werden ! .sp 1 Eine genaue Darstellung der Verwendung der in den Monitor-Kommandos ist folgende: .br Zur Auswertung des Kommandoparameters wird die Zeichenkette .DS I < MACRO( ) > .DE herangezogen. Input-Text f\o'u"'r den Makro-Prozessor ist der, im Kommando formulierte Text bis zum . Beim \ebranch-Kommando m\o'u"'ssen beide Parameterteile und vor dem untergebracht werden. Vom Output-Text des Makro-Prozessors werden die Zeichen nach den f\o'u"'hrenden oder bis zum Ende, aber maximal nur 100 Zeichen genommen (beim \ebranch-Kommando 100 Zeichen f\o'u"'r beide Parameter). .sp 1 Bei der Analyse des Eingabetextes versucht der Monitor jede, einem ("\e") folgende Zeichenfolge als Monitor-Kommando zu interpretieren, unabh\o'a"'ngig davon, ob dem Klammern ( (... oder {... ) oder Quoting-Symbole ( "... oder `... oder /*... ) vorausgegangen sind. Auch die Formulierung von "\e\e" f\o'u"'hrt nur dazu, dass das erste "\e" in den Monitor-Puffer \o'u"'bernommen wird, dann aber die dem zweiten "\e" folgenden Zeichen auf ein Monitor-Kommando analysiert w\o'u"'rden. .sp 1 Eine als Monitor-Kommando identifizierte Zeichenfolge gelangt nicht in den Monitor-Puffer; wohl aber sonst die gesamte Zeichenfolge einschliesslich des . .sp 1 Der Monitor liest seine Kommandos nur aus dem Eingabetext; er kann nicht dazu gebracht werden, den Monitor-Puffer als Eingabetext zu lesen. .NH 3 .ft B Beschreibung der Monitor-Kommandos .ft R .LP Der folgende Abschnitt beschreibt die einzelnen Monitor-Kommandos. Die Kommando-Schreibweise in den Zwischen\o'u"'berschriften ist als plausible Abk\o'u"'rzung der vorn exakt definierten Notation zu verstehen. .NH 4 .ft B Append .ft R .LP .sp 1 \ea .br \eappend .IP Eine ggf. eingetragene L\o'o"'schvormerkung des Monitor-Puffers (autoclear_mode) wird ausgetragen, sodass ein folgender Eingabetext - jedenfalls beginnend als neue Zeile - dem bisherigen Monitor-Puffer angef\o'u"'gt wird. .NH 4 .ft B Branch .ft R .LP .sp 1 \eb .br \ebranch .IP = .br {|} ["?"] .br {|} ; .br .sp 1 Durch das Kommando erfolgt ein bedingter oder unbedingter Sprung im Eingabetext. Die Ausf\o'u"'hrung eines Sprungs wird mit der Meldung .DS C "Kein Sprung am Terminal" .DE abgelehnt, wenn der Eingabetext vom Terminal gelesen wird. Andernfalls wird im Falle eines auszuf\o'u"'hrenden Sprungs im Eingabetext - also im included_file - die Marke .DS C \ek .DE gesucht (s. \ek-Kommando), f\o'u"'r die .DS C )> = .DE ist. Wird eine solche Marke gefunden, wird anschliessend die Eingabe des Eingabetextes mit der, dieser Marke folgenden Textposition fortgesetzt. Wird keine solche Marke gefunden, wird versucht, einen Sprung .DS C \ebranch {default} .DE auszuf\o'u"'hren. Gelingt auch das nicht (weil der Makro "{default}" nicht definiert ist, oder im included_file nicht addressiert), wird darauf mit der Meldung .DS C " ? Label )>" " ? Label < MACRO ({default}) > ({default}) " .DE hingewiesen und das included_file folgend verlassen (folgend wird aus dem Eingabetext gelesen (s. \einclude-Kommando)). .sp 1 Ein unbedingter Sprung ohne die Angabe "?" wird in jedem Falle auszuf\o'u"'hren versucht. Bei einem bedingten Sprung wird der Ausdruck .DS C )> .DE ausgewertet. Dieser Ausdruck darf Operatoren und Operanden enthalten. Operatoren sind: .DS ** Potenzieren - ! Vorzeichen, logische Negation * / % Multiplikation, Division, Divisionsrest + - als zweistellige Operationen > >= < <= Vergleichsoperatoren = != Gleichheit, Ungleichheit & logisches UND | logisches inclusives ODER .DE .sp 1 Operationen auf gleicher Zeile sind von gleicher Bindungsst\o'a"'rke, sonst gilt absteigende Bindung entsprechend der Aufz\o'a"'hlung zur Festlegung der Bindung von Operationen. .sp 1 Der Ausdruck darf als Operanden nur noch ganzzahlig numerische Werte mit einem Wertebereich zwischen -32768 bis 32767 enthalten, sonst erfolgt nach entsprechenden Meldungen (s. unten) ein Abbruch der weiteren Ausdrucksberechnung. Die Ausdrucksauswertung wird durch die Zeichen .DS C , , oder .DE beendet. .sp 1 Die arithmetischen Operationen werden in \o'u"'blicher Ganzzahlarithmetik (/: ganzer Teil der Division, %: Divisionsrest; Division durch 0 ergibt nach Warnung den Wert 0) berechnet. Die logischen Operationen ( !,=,>,<,| ) deuten bei ihren Operanden <=0 als FALSE und >0 als TRUE. Die logischen Operationen und die Vergleichsoperationen liefern den arithmetischen Wert 0 f\o'u"'r FALSE und 1 f\o'u"'r TRUE. Die Ausdrucksberechnung erfolgt von links nach rechts, entsprechend den Bindungsregeln, geklammerte Teile werden ge- und entkellert. .sp 1 Bei der Ausdrucksauswertung (nach Makro-Aufl\o'o"'sung) werden folgende Fehler im Ausdruck erkannt: .DS B \ \ \ \ zus\o'a"'tzliche schliessende Klammern \ \ \ \ am Ende werden ignoriert \ \ \ \ zus\o'a"'tzliche \o'o"'ffnende Klammern \ \ \ \ am Ende, ergeben 0 als Ausdruckswert \ \ \ \ der Ausdruck ist leer, \ \ \ \ sein Wert ist 0 \ \ \ \ der Ausdruck enth\o'a"'lt nur das \ \ \ \ nicht akzeptable Zeichen , \ \ \ \ sein Wert wird 0 \ \ \ \ das gefundene ist kein Operator \ \ \ \ der Wert wird 0 \ \ \ \ Division durch 0 ergibt den Wert 0 .DE Ein bedingter Sprung wird ausgef\o'u"'hrt, wenn die Auswertung des Ausdrucks einen Wert > 0 erbringt. Andernfalls wird die Eingabe des Eingabetextes hinter folgend fortgesetzt. .NH 4 .ft B Chdir .ft R .LP .sp 1 \ecd .br \echdir .IP Das vom Nutzer bei Start von \*(yy\ von ihm eingestellte working_directory bleibt auch w\o'a"'hrend der Arbeit von \*(yy\ erhalten. Unter diesem Pfadnamen bestimmte Files werden im Unterschied zu dem, durch {Pathname} mit "ing_db" symbolisierten Files, in diesem Kapitel als .DS I / .DE symbolisiert. .sp 1 Das f\o'u"'r den Nutzer vor Start von \*(yy\ eingestellte working_directory wird durch das \echdir-Monitor-Kommando auf .DS I = )> .DE ver\o'a"'ndert; \o'u"'ber einen Misserfolg dabei informiert die Meldung .DS C "cannot access directory )> " .DE Der Monitor meldet sich nach Kommando-Ausf\o'u"'hrung wieder mit einer Prompt-Meldung "ING_db>" oder "ING_db:". .NH 4 .ft B Editor .ft R .LP .sp 1 \ee [] .br \eed [] .br \eedit [] .br \eeditor [] .IP Es wird ein Editor aus dem File .DS C .DE zu laden versucht. Ist der Makro nicht definiert, wird gleich ein installationsabh\o'a"'ngiger System-Editor, z.B. .ft B ed, vi, rand, .ft R geladen. Gelingt das nicht, erfolgt eine Fehlerausschrift. Ausserdem wird der Makro {errorcount} mit dem Wert -1 gef\o'u"'llt und der Macro {exectrap} mit der Meldung .DS C "edit: exec" .DE ausgef\o'u"'hrt. .sp 1 Der Monitor meldet .DS C ">> " .DE Danach arbeitet man unter Steuerung des geladenen Editors, ihm wird als Parameter .DS C )> .DE oder falls das Kommando keinen Parameter hatte, der File-Name des Monitor-Puffers \o'u"'bergeben. Das bedeutet, dass der Editor das File l\o'a"'dt und als currentfile einstellt. .sp 1 Im Falle der Arbeit auf dem Monitor-Puffer kommen mit dem Editor ausgef\o'u"'hrte \o'A"'nderungen nur dann dort an, wenn dem Editor ein w-Editor-Kommando vor \o'A"'nderung seines currentfile gegeben wird. Jedenfalls wird bei Ausf\o'u"'hrung eines \ee-Monitor-Kommandos eine ggf. eingetragene L\o'o"'schvormerkung f\o'u"'r den Monitor-Puffer (autoclear_mode) ausgetragen. .sp 1 Nat\o'u"'rlich kann nach der Arbeit auf dem Monitor-Puffer oder \o'u"'berhaupt auch in anderen Files editiert werden. Beachten sie bei der Formulierung von File-Namen, dass user_cd als current_directory (s. \echdir-Kommando) eingestellt ist. .sp 1 Nach einem q-Editor-Kommando f\o'u"'r den System-Editor oder einer anderen Beendigung des geladenen Editors erfolgt die R\o'u"'ckkehr zum \*(yy\-Monitor. Der Monitor ruft f\o'u"'r den Fall, dass der Editor einen R\o'u"'ckkehrcode\ !=\ 0 lieferte, den Makro {exectrap}. Vorher wird der Makro {errorcount} mit dem exit-Status des Editors gef\o'u"'llt. Das erfolgt so, als g\o'a"'be man selbst das Monitor-Kommando .DS C {exectrap}\eeval .DE .NH 4 .ft B Go .ft R .LP .sp 1 \eg .br \ego .IP Mit diesem Kommando werden QUEL-Statements zur Ausf\o'u"'hrung angewiesen. Der Monitor zeigt die Kommando\o'u"'bernahme mit der Prompt-Meldung .DS C "I N G - d b . . ." .DE an und beendet damit seinen Eingabe-Status f\o'u"'r die Dauer der Arbeit des Parsers und der diesem nachgelagerter Prozesse. .sp 1 Dem Parser wird die vom Makro-Prozessor verarbeitete Verkettung folgender Texte \o'u"'bergeben: .DS I < MACRO ( , , ) > .DE Man achte darauf, dass der Monitor-Puffer so bereinigt wurde, dass dem Parser nur QUEL-Statements \o'u"'bergeben werden, er signalisiert sonst Fehler. .sp 1 Nachdem die Arbeit des Parsers und dessen nach\%gelagerter Prozesse bei der Ausf\o'u"'hrung der QUEL-Statements beendet ist, arbeitet der Monitor weiter. Der Monitor \o'u"'bernimmt N als Anzahl der bearbeiteten Tupel und definiert den Makro {tuplecount} als .DS C {define; {tuplecount}; N} .DE Der Monitor arbeitet den Makro {continuetrap} ab, als h\o'a"'tte man das Monitor-Kommando .DS C {continuetrap} \eeval .DE (s. Makroprozessor) gegeben. Der Monitor zeigt seine Eingabebereitschaft durch die Prompt-Meldungen "ING_db>" oder "ING_db:" an. .sp 1 Nach einem \ego-Kommando ist der Monitor-Puffer zun\o'a"'chst noch unver\o'a"'ndert; er ist jetzt aber zur L\o'o"'schung vorgemerkt (autoclear_mode). Diese L\o'o"'schvormerkung wird durch die Option "-a" unterdr\o'u"'ckt. .sp 1 Wenn die Er\o'o"'ffnung des Monitor-Puffers f\o'u"'r den Makro-Prozessor nicht gelingt, erfolgt ein Systemabbruch mit der Meldung .DS C "go: open 1" .DE .NH 4 .ft B Help .ft R .LP .sp 1 \eh [] .br \ehelp [] .br .IP Der Monitor w\o'a"'hlt mit Angabe aus ../sys/ref die Kurzdokumentation zum \*(yy\-Kommando und schreibt auf "std_out". Ohne wird das Inhaltsverzeichnis ausgegeben. .NH 4 .ft B Include und Read .ft R .LP .sp 1 \ei .br \einclude .br \eread .IP Dem Monitor wird das File .DS I / )> .DE als Eingabetextspender zugeordnet. Das Kommando wirkt wie ein Sprung an den Anfang dieses File. .sp 1 Fehlt oder ist )> leer, wirkt das Kommando so, dass das folgende Zeichen des dem Monitor angeschlossenen Eingabetextes wird. Das bedeutet, dass ein included_file folgend verlassen wird; in der Basis-Terminal-Ebene tritt der Effekt wie nach einem \equit-Kommando ein. .sp 1 Andernfalls wird das durch )> bezeichnete File zum k\o'u"'nftigen Eingabetextspender f\o'u"'r den Monitor (es sei denn die Meldung .DS C "open INCLUDE file )> " .DE zeigt den Abbruch der Kommandobearbeitung an). Solange der Monitor "file-gesteuert" arbeitet, werden die Prompt-Meldungen wie durch die \*(yy\-Option "-s" unterdr\o'u"'ckt. .sp 1 F\o'u"'r die Funktions-Makros {read...}, {readdefine...} (s. Makro-Prozessor) bleibt auch bei dieser Arbeitsweise des Monitor das Terminal (genauer standard_input) das Eingabemedium. .sp 1 Das angeschlossene File darf weitere \einclude-Kommandos enthalten; diese sind bis zu einer Schachtelungstiefe von 5 (diese Anzahl ist generierungsf\o'a"'hig) hierarchisch hintereinander liegender \einclude-Kommandos erlaubt. Ggf. erfolgt eine Kommandoabweisung durch die Meldung .DS C "Mehr als 5 INCLUDE'S" .DE Liest der Monitor aus dem included_file (nachdem es sequentiell durchlesen wurde, oder bei Nichterfolg eines dort enthaltenen Monitor-Kommandos), wird das File verlassen; die Monitoreingabe wird mit dem Text des File hinter dem letztwirksamen \einclude-Kommando fortgesetzt. .sp 1 Bei R\o'u"'ckkehr in die Basis-Terminal-Ebene meldet sich der Monitor - falls nicht "-s" gesetzt war - wieder mit einer Prompt-Meldung "ING_db>" oder "ING_db:". Die Abgabe eines in der Basis-Terminal-Ebene hat die gleiche Wirkung wie das \equit-Kommando: die \*(yy\-Sitzung wird synchron beendet. .sp 1 Ist )> das einzelne Zeichen "-", erfolgt die Meldung .DS C "" .DE und der k\o'u"'nftige Eingabetext f\o'u"'r den Monitor wird wieder vom Terminal (standard_input) gelesen. Das ist nicht die oben erw\o'a"'hnte Basis-Terminal-Ebene; durch Abgabe eines vom Terminal erfolgt kein Sitzungs\%abbruch, sondern es wird wieder das File zum Eingabetextspender, aus dem das "\einclude -" abgesetzt worden war. Das er\o'o"'ffnet die M\o'o"'glichkeit, unter grunds\o'a"'tzlicher Steuerung durch ein File, zwischenzeitlich in freiem Format vom Terminal zu lesen. Das Nachrichtenlevel f\o'u"'r die Promptmeldungen ("-s" oder nicht) ist w\o'a"'hrend dieser Arbeit am Terminal wieder so, wie f\o'u"'r die \*(yy\-Sitzung eingestellt. .NH 4 .ft B Mark .ft R .LP .sp 1 \ek .br \emark .IP Der Eingabetext enth\o'a"'lt eine Marke als Zielangabe eines ggf. auszuf\o'u"'hrenden \ebranch-Kommandos. Das Kommando selbst ist wirkungslos. Der Eingabetext wird bis hinter \o'u"'berlesen; der Monitor-Puffer wird folgend jedenfalls mit einer neuen Zeile weiter beschrieben, der Monitor meldet sich wieder mit einem Prompt-Symbol. Anl\o'a"'sslich der Ausf\o'u"'hrung eines \ebranch-Kommandos wird das included_file von vorn beginnend nach der zutreffenden Marke abgesucht. .NH 4 .ft B List .ft R .LP .sp 1 \el .br \elist .IP Der vom Makro-Prozessor aus dem verketteten Text erzeugte Text .DS B < MACRO( , , ) > .DE wird auf dem Terminal angelistet. Man erh\o'a"'lt dadurch Auskunft, welcher Text tats\o'a"'chlich dem Parser mit einem \ego-Kommando angeboten w\o'u"'rde. Weiterhin werden durch die Arbeit des Makro-Prozessors die Funktions-Makros (s. Makro-Prozessor) bearbeitet. Der Monitor-Puffer bleibt unver\o'a"'ndert. (Achtung: Dadurch, dass bei der ersten Verwendung des Kommandos ggf. Substitutions-Makros definiert werden, kann die wiederholte Anwendung des Kommandos andere Ergebnisse bringen.) .sp 1 Eine ggf. eingetragene L\o'o"'schvormerkung f\o'u"'r den Monitor-Puffer wird ausgetragen (autoclear_mode). .NH 4 .ft B Monitor .ft R .LP Mit dem Monitor-Kommando l\o'a"'sst sich das standardm\o'a"'ssige Kommandokennzeichen .ft B "\e" .ft R umdefinieren. Fehlt das Argument , wird wieder auf den Standard zur\o'u"'ckgeschaltet. .br Die Neudefinition des Kommandokennzeichens sollte nur dann vorgenommen werden, wenn das Zeichen .ft B "\e" .ft R nicht oder nur umst\o'a"'ndlich erreicht werden kann. .br Es wird darauf hingewiesen, dass bei Neudefinition des Kommandokennzeichens Monitor-Kommandodateien unter Umst\o'a"'nden nicht mehr abarbeitungsf\o'a"'hig sind. .NH 4 .ft B Print .ft R .LP .sp 1 \ep .br \eprint .IP Der Inhalt des Monitor-Puffers wird ohne Ver\o'a"'nderung durch den Makro-Prozessor auf dem Terminal angelistet. Eine ggf. eingetragene L\o'o"'schvormerkung f\o'u"'r den Monitor-Puffer wird ausgetragen (autoclear_mode). Der Monitor meldet sich nach Kommandoausf\o'u"'hrung wieder mit einer Prompt-Meldung "ING_db>" oder "ING_db:". .NH 4 .ft B Quit .ft R .LP .sp 1 \eq .br \equit .IP Die \*(yy\-Sitzung wird synchron beendet. Falls nicht die \*(yy\ 6.3-Option "-s" gesetzt war, erfolgt abschliessend die .DS \*(yy\-logout-Meldung .sp 1 "ing_db vers logout Auf Wiedersehen [] -- Kommen Sie bald wieder" .DE .NH 4 .ft B Reset .ft R .LP .sp 1 \er .br \ereset .IP Der Inhalt des Monitor-Puffers wird gel\o'o"'scht. .NH 4 .ft B Shell .ft R .LP .sp 1 \es [] .br \esh [] .br \eshell [] .IP Das Kommando dient der Ausf\o'u"'hrung von \*(xx\-Programmen w\o'a"'hrend der \*(yy\-Sitzung, insbesondere unter Steuerung des \*(xx\-Kommandointerpreters SHELL. Das Kommando kann weitreichender benutzt werden. Es wird ein neuer process "geforkt" (Systemabbruch mit Meldung "shell: fork", wenn das nicht gelingt), ein Programm geladen und die Meldung .DS C ">> " .DE gebracht. Das Programm wird als File .DS C .DE zu laden versucht. Ist dieser Makro definiert und ge\%lingt der Ladevorgang nicht, wird der Makro {errorcount} auf -1 gesetzt und der Makro {exetrap} ausgef\o'u"'hrt. .IP Gelingt der Ladevorgang, wurde dem gerufenen Programm als 0.Parameter der Programmname, als 1.Parameter der File_name des Monitor-Puffers und als 2.Parameter der Wert des ggf. durch den Makro-Prozessor transformierten \eshell-Kommandoparameters \o'u"'bergeben. .LP Ist der Makro nicht definiert, wird eine instal\%lation\%sab\%h\o'a'n\%gige SHELL aufgerufen. .DS C //sh//csh//vsh .DE geladen. .br Gelingt das nicht, erfolgt ein Systemabbruch mit der Meldung .DS C "shell: exec" .DE .sp 1 Falls in diesem Falle das \eshell-Kommando keinen hatte, wird die geladene SHELL als interaktive SHELL gestartet; durch Abgabe eines quit-SHELL-Signals kommt man in den Monitor zur\o'u"'ck. Falls das \eshell-Kommando hatte, wird \o'u"'ber eine SHELL das, durch MACRO() bezeichnete, SHELL-Kommando aufgerufen. Man beachte, dass aus mehreren durch getrennten W\o'o"'rtern bestehen darf ( reicht bis zum nicht kaschierbaren Zeilenende des Monitor-Kommandos !). Dadurch k\o'o"'nnen dem SHELL-Kommando Parameter \o'u"'bermittelt werden. Die R\o'u"'ckkehr zum Monitor erfolgt automatisch mit Beendigung des aufgerufenen SHELL-Kommandos. .sp 1 In Auswertung eines R\o'u"'ckkehrcodes des aufgerufenen Programms, der interaktiven SHELL oder des SHELL-Kommandos erfolgt durch den \*(yy\-Monitor die Ausf\o'u"'hrung des {exectrap}, wenn der R\o'u"'ckkehrcode\ !=\ 0 war. Das erfolgt in einer Form, als g\o'a"'be man selbst das Monitor-Kommando .DS C {exectrap}\eeval .DE Nach R\o'u"'ckkehr aus der SHELL ist der Monitor wieder im vorangehend verlassenen Eingabe-Status. .NH 4 .ft B Time und Date .ft R .LP .sp 1 \ed .br \etime .br \edate .IP Die aktuelle Zeit wird auf dem Terminal ausgegeben. Im Monitor-Puffer wird ein Zeilenwechsel eingetragen. .NH 4 .ft B Eval .ft R .LP .sp 1 \ev .br \eeval .IP Dem Makro-Prozessor wird der Monitor-Puffer als Eingabetext angeboten, wodurch insbesondere die define-Makros in die Makro-Tabelle \o'u"'bernommen (s. Makro-Prozessor), aber ggf. auch andere Funktions-Makros abgearbeitet werden. .sp 1 Im Unterschied zum \elist-Kommando erfolgt keine Einbe\%ziehung von {begintrap} und {endtrap} und keine Anli\%stung des Makro-Ausgabetextes. Es erfolgen aber die auf standard_output wirkenden Ausgaben der {dump;...}-, {type;...}- und {read....}-Makros. Weiterhin wird anschliessend der Monitor-Puffer zum L\o'o"'schen vorgemerkt (falls nicht "-a" gesetzt war, autoclear_mode). .sp 1 Damit ist das \eeval-Kommando das f\o'u"'r die Abarbeitung von Funktions-Makros zu bevorzugende Kommando (s. Makro-Prozessor) .sp 1 Der Monitor meldet sich nach Kommando-Ausf\o'u"'hrung mit einer Prompt-Meldung "ING_db>" oder "ING_db:". .NH 4 .ft B Write .ft R .LP .sp 1 \ew .br \ewrite .IP Der Monitor-Puffer wird auf das File .DS C / )> .DE (s. \echdir-Kommando) ausgeschrieben (das File wird mit Modus 0644 cre\o'i"'ert). .sp 1 Es k\o'o"'nnen folgende Fehlermeldungen den Misserfolg anzeigen: .DS B "unakzeptabler file name )>" "create WRITE-file )>" .DE .sp 1 Nach Ausf\o'u"'hrung des Kommandos meldet sich der Monitor wieder mit einer Prompt-Meldung "ING_db>" oder "ING_db:". .sp 1 .LP Der Monitor als Programm-Prozess bringt einige Fehlermeldungen, die sich auf die Ausgabe von Fehlertexten aus anderen \*(yy\-Prozessen beziehen, wenn die dazu n\o'o"'tigen Fehlertext-Files nicht lesbar, oder syntaktisch regelwidrig sind.