From f24cd0c773b3567ad9019aaf5216186d4ed30a75 Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Fri, 21 Jul 1989 12:40:00 +0000 Subject: [PATCH] ING_DB --- WEGA/contrib/ingres/dbs/sys/man/amxi | 797 +++++++ WEGA/contrib/ingres/dbs/sys/man/eqc | 68 + WEGA/contrib/ingres/dbs/sys/man/iqli | 27 + WEGA/contrib/ingres/dbs/sys/man/monitor | 614 ++++++ WEGA/contrib/ingres/dbs/sys/man/rc | 42 + WEGA/contrib/ingres/dbs/sys/man/rd | 43 + WEGA/contrib/ingres/dbs/sys/man/reporti | 2352 +++++++++++++++++++++ WEGA/contrib/ingres/dbs/sys/man/retrieve | 80 + WEGA/contrib/ingres/dbs/sys/man/rp_desc | 41 + WEGA/contrib/ingres/dbs/sys/man/toc | 379 ++++ WEGA/contrib/ingres/dbs/sys/ref/rp_desc | 27 + WEGA/contrib/ingres/dbs/sys/ref/save | 22 + WEGA/contrib/ingres/dbs/sys/ref/saver | 20 + WEGA/contrib/ingres/dbs/sys/ref/startup | 19 + WEGA/contrib/ingres/dbs/sys/ref/sysmod | 33 + WEGA/contrib/ingres/dbs/sys/ref/toc | 13 + WEGA/contrib/ingres/dbs/sys/ref/users | 59 + WEGA/contrib/ingres/dbs/sys/ref/usersetup | 53 + WEGA/contrib/ingres/dbs/sys/ref/view | 27 + 19 files changed, 4716 insertions(+) create mode 100644 WEGA/contrib/ingres/dbs/sys/man/amxi create mode 100644 WEGA/contrib/ingres/dbs/sys/man/eqc create mode 100644 WEGA/contrib/ingres/dbs/sys/man/iqli create mode 100644 WEGA/contrib/ingres/dbs/sys/man/monitor create mode 100644 WEGA/contrib/ingres/dbs/sys/man/rc create mode 100644 WEGA/contrib/ingres/dbs/sys/man/rd create mode 100644 WEGA/contrib/ingres/dbs/sys/man/reporti create mode 100644 WEGA/contrib/ingres/dbs/sys/man/retrieve create mode 100644 WEGA/contrib/ingres/dbs/sys/man/rp_desc create mode 100644 WEGA/contrib/ingres/dbs/sys/man/toc create mode 100644 WEGA/contrib/ingres/dbs/sys/ref/rp_desc create mode 100644 WEGA/contrib/ingres/dbs/sys/ref/save create mode 100644 WEGA/contrib/ingres/dbs/sys/ref/saver create mode 100644 WEGA/contrib/ingres/dbs/sys/ref/startup create mode 100644 WEGA/contrib/ingres/dbs/sys/ref/sysmod create mode 100644 WEGA/contrib/ingres/dbs/sys/ref/toc create mode 100644 WEGA/contrib/ingres/dbs/sys/ref/users create mode 100644 WEGA/contrib/ingres/dbs/sys/ref/usersetup create mode 100644 WEGA/contrib/ingres/dbs/sys/ref/view diff --git a/WEGA/contrib/ingres/dbs/sys/man/amxi b/WEGA/contrib/ingres/dbs/sys/man/amxi new file mode 100644 index 0000000..75cfac6 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/amxi @@ -0,0 +1,797 @@ + AMX(DABA) DABA16 AMX(DABA) + + NAME + amx - Einbettung der Datenmanipulationssprache AMX in "C" + + BESCHREIBUNG + + Einleitung + + Die Sprache AMX stellt ein Interface zur Einbettung von Da- + tenbankzugriffen in "C"-Programme dar und ist leicht erlern- + bar. + + Es werden eine Laufzeitbibliothek, i.allg. .../lib/libamx.a, + und DABA-MUTOS-Kommandos (i.allg. amx(mutos)) bereitge- + stellt. Durch ein solches Kommando (z.B. amx) werden bei + entsprechend spezifizierten Optionen (Flags) ein DABA- + Praecompiler fuer AMX und der C-Compiler "cc" (einschliess- + lich Linker) aufgerufen. Der Praecompiler erzeugt ein guel- + tiges C-Programm, das mit dem C-Compiler uebersetzt wird. + Anschliessend werden die fuer die Datenbankaktionen notwen- + digen Objektmoduln aus der Laufzeitbibliothek eingebunden. + + + + In AMX-Programmen ist das parallele Arbeiten mehrerer Nutzer + in den gleichen Relationen unterstuetzt. + + Die Vorteile bei der Benutzung dieser AMX-Sprache bestehen + in der Moeglichkeit der Realisierung laufzeiteffektiver Pro- + gramme, in der Formulierbarkeit von Transaktionen und in ei- + ner rekursiven Anwendbarkeit. Letzteres bedeutet, dass z.B. + Wiederfinden und Aendern geschachtelt benutzbar sind. Aus- + serdem sind prozedurale Probleme, z.B. die totale + Mengenbedarfsermittlung (totale Stuecklistenaufloesung), + elegant loesbar. + + Alle (auch temporaere) Relationen (einschliesslich aller da- + tenbankspezifischen Namen), die in AMX-Programmen verarbei- + tet werden sollen, muessen zur Uebersetzungszeit bereits + existieren. Das bedeutet, dass sie vorher mit IQL, EQL oder + "creater" (creater(mutos)) erstellt werden muessen. + + Mit AMX-Programmen manipulierte Relationen sind mit IQL, EQL + oder auch AMX weiterhin bearbeitbar. + + Uebersicht + + Alle tupelorientierten AMX-Anweisungen sind ausschliesslich + auf eine einzige Relation anwendbar. + + Die Sprache AMX hat als maechtigste Operation das Bereit- + stellen von Werten spezifizierter Domaenen aus einer u.U. + selektierten Tupelmenge einer Relation (Wiederfinden) (re- + trieve). + + Die Recherche (Wiederfinden) kann alle Daten der Relation + umfassen oder durch Selektionsbedingungen (Qualifiktionen) + eingeschraenkt werden. + + In einer retrieve-Anweisung kann eine Qualifikation und muss + eine Auswahl spezifizierter oder aller Domaenen als + target_list (Ergebnis- oder Zielliste) angegeben werden. + Eine solche Ergebnisliste besitzen ausser der retrieve nur + die append und die replace Anweisung. + + Nach einer erfolgreichen Recherche, die eine Tupelmenge + (mindestens ein Tupel) bereitstellt, wird fuer jedes dieser + Tupel eine Aktion ausgefuehrt. + + Die anderen tupelorientierten AMX-Anweisungen beziehen sich + immer nur auf ein Tupel. + + + + Es sind das Ersetzen der Werte der Domaenen eines Tupels + (Ersetzen) (replace), das Loeschen eines Tupels (Loeschen) + (delete), das Anzeigen eines Tupels (print) bzw. das Erzeu- + gen eines neuen Tupels (Zufuegen zu einer Relation) (ap- + pend), aus der Menge vorher mit "retrieve" selektierter Tu- + pel, moeglich. + + Des weiteren ist das Zufuegen eines neuen Tupels zur Rela- + tion ohne vorherige Selektion nutzbar (append). + + Es gibt weiterhin AMX-Anweisungen fuer das Eroeffnen einer + spezifizierten Datenbank entweder mit exklusiver (alleini- + ger) Benutzung (daba oder exclusive), ohne Sperrung oder mit + geteilter Benutzung (shared) sowie fuer das Eroeffnen (open) + bzw. das Schliessen (close) einer Relation. + + Sollen in einem AMX-Programm miteinander in logischer Bezie- + hung stehende Datenmanipulationen (i.allg. in mehreren Rela- + tionen) ausgefuehrt werden, ist es zur Erhaltung der Date- + nintegritaet erforderlich, Transaktionen zu formulieren. + Eine Transaktion ist eine Folge von AMX-Anweisungen als lo- + gische Arbeitseinheit. Es gibt jeweils eine Anweisung zur + Spezifikation des Transaktionsbeginns (use), des Transak- + tionsendes (commit), sowie des Abbrechens einer Transaktion + und das Ruecksetzen (abort) und fuer das Behandeln einer + Verklemmung (if (deadlock)). + + Bei Transaktionsbeginn sind die beteiligten Relationen und + die Art ihrer Benutzung (alleinig (exclusive), geteilt + (shared) oder ohne Sperrung (nolock)) spezifizierbar. Aus- + serdem ist u.a. das Sperrniveau (Seitensperrung (page) oder + Relationssperrung (table)) angebbar. + + Des weiteren sind Anweisungen zur vorzeitigen Beendigung + eine Wiederfindungszyklusses (endretrieve), zur vorzeitigen + Beendigung einer Tupelverarbeitung im Wiederfindungszyklus + (nextretrieve), zum Bereitstellen der Gesamt-Tupelanzahl ei- + ner Relation (tuplecount) sowie der maximalen Tupellaenge + der Relation (tuplelength), und eine Leeranweisung (;) ver- + fuegbar. + + Neben den durch "C" bereitgestellten und von AMX unter- + stuetzten Datentypen short (2), int (2 bei 16 Bit- und 4 bei + 32-Bit Rechnern), long(4) , float(4), double(8), char * und + char [] (1-255) sind durch AMX zusaetzlich die mit den + DABA-Datentypen uebereinstimmenden Typen + + i1, i2, i4, f4, und f8 + + verfuegbar. + + Einschraenkungen + + Die Geschwindigkeit der AMX-Zugriffe erfordert einige Ein- + schraenkungen. AMX gestattet Datenveraenderungen und Wie- + derfinden ausschliesslich in Basis-Nutzerrelationen (nicht + in Sichten!). Das Wiederfinden in Index-Nutzerrelationen + wird unterstuetzt. Die Katalogrelationen sind, entsprechend + definierte Befugnisse vorausgesetzt, lesbar. + + Da nur die in einem AMX-Programm konkret benoetigten Zu- + griffsroutinen eingebunden werden, sind keine Universallo- + esungen, z.B. universelle Druckprogramme, realisierbar. + + Aus dem Dargelegten ergibt sich ebenfalls, dass die Nutzer- + relationen nicht mit AMX erstellt werden koennen. Bevor ein + AMX-Programm uebersetzt werden kann, muessen die in diesem + Programm spezifizierten Relationen bereits mit IQL, EQL oder + dem DABA-MUTOS-Kommandos "creater" (creater(mutos)) erstellt + worden sein. + + Da nur die in einem AMX-Programm benoetigten Zugriffsrouti- + nen zu den Relationen, entsprechend den konkreten Bedingun- + gen, zugriffsoptimiert in das ausfuehrbare Programm einge- + bunden werden, ist nach jeder Modifikation der Relations- + struktur (modify(ql), modifyr(mutos), index(ql) bzw. + indexr(mutos), destroy(ql) bzw. destroyr(mutos) und crea- + te(ql) bzw. creater(mutos), eine Neuuebersetzung des AMX- + Programmes notwendig! + + Eine Relation, die durch ein AMX-Programm verarbeitet werden + soll, darf keine definierten Integritaetsbedingungen besit- + zen! Als Befugnisse einer solchen Relation duerfen aus- + schliesslich operationelle Befugnisse (append, retrieve, de- + lete, replace oder all) ohne jede Qualifikation definiert + worden sein! + + Werden mehrere Objektmodule zu einem ausfuehrbaren Programm + verbunden, darf nur einer dieser Objektmodule AMX- + Anweisungen enthalten! + + Konvertierungen zwischen numerischen und Zeichenkettenwerten + (und umgekehrt) werden nicht unterstuetzt. Numerische Kon- + vertierungen erfolgen ohne Unter- bzw. Ueberlaufkontrolle. + + Vergleiche von Zeichenkettenwerten zwischen Domaenen und Va- + riablen werden in der Laenge der Domaene ausgefuehrt, z.B. + liefert der Variablenwert "Automat" den Wert "Auto" fuer die + Datenbankaktion, wenn die zugehoerige Domaene den DABA- + Datentyp "c4" hat. + + Uebersetzung + + AMX-Anweisungen, im Anwendungsprogramm durch ein besonde- + res Praefixsymbol "##" gekennzeichnet, werden durch den + Voruebersetzer (Praeprozessor) syntaktisch und semantisch + ueberprueft und in Prozeduraufrufe der hoeheren Programm- + iersprache uebersetzt. Vorbild fuer diesen Loesungsansatz + war EQL des DABA. + + "C"-Anweisungen werden unveraendert in das "C"-Programm ko- + piert. + + Damit ein AMX-Quellprogramm vom AMX-Compiler verarbeitet + werden kann, muss das File, in dem es enthalten ist, den + File-Namenssuffix ".x" (z.B. prog.x) besitzen. + + Der AMX-Compiler holt sich alle Informationen zu den Rela- + tionen und Domaenen aus den Systemkatalogen (Katalogrelatio- + nen) der Datenbank und entlastet somit den Anwender von der + Angabe dieser Details und den Fehlern, die an dieser Stelle + gemacht werden koennen. Durch diesen Ansatz ist eine weit- + gehende Quelltextunabhaengigkeit von der Struktur der Daten- + bank gesichert. + + Bei der Zugriffspfadoptimierung werden die vorhandenen In- + dizes voll herangezogen. Wenn der AMX-Programmierer es for- + dert, ist eine davon abweichende Zugriffsgestaltung spezifi- + zierbar. + + Aenderungen sind nur in Nutzerrelationen gestattet, die Sy- + stemkataloge und Indizes werden durch AMX aktualisiert. + + Eine Aenderung der Speicherungsstruktur einer Relation er- + fordert, wie bereits betont, keine Aenderung des AMX- + Quellprogramms, wohl aber dessen neue Uebersetzung. + + Wenn der AMX-Compiler ein AMX-Programm uebersetzen soll, ar- + beitet dieser als Nutzer "daba". Damit das erzeugte "C"- + Programm in das aktuelle Arbeits-Directory geschrieben wer- + den kann, muss deshalb "daba" in diesem Directory die + Schreiberlaubnis besitzen. + + Die Spezifikation des AMX-Quell-Files erfolgt, wie ueblich, + entweder als absoluter Pfadname oder relativ zum aktuellen + Arbeit-Directory. + + + + + Das durch den AMX-Compiler erzeugte AMX-Programm besitzt den + Filemodus oktal "6755" und ist dem Nutzer daba und der Grup- + pe daba zugeordnet. Es ist z.B. beim Kopieren eines AMX- + Programmes darauf zu achten, dass dieser Filemodus erhalten + bleibt. + + Zur Fehlererkennung beimm Compilieren ist folgendes zu be- + merken. Nach Erkennung eines Fehlers wird die Uebersetzung + erst nach drei als richtig erkannten syntaktischen Einheiten + (Token, Morpheme) fortgesetzt, sodass eine zweite Ueberset- + zung Fehler erzeugen kann, die in der ersten nicht gemeldet + wurden. Die zu jedem Fehler mit ausgegebene Zeilennummer ist + nicht immer exakt. Sie kann sich auf eine der vorherigen + Zeilen beziehen, wenn der Fehler am Zeilenende erkannt wur- + de, da der Compiler immer eine syntaktische Einheit voraus + liest. + Wird ein Fehler festgestellt, ist in dem oben genannten Fall + der Zeilenzaehler aber schon um eins (oder mehr, bei Zeilen + ohne syntaktische Einheiten) hochgezaehlt. Bei einigen syn- + taktischen Fehler ist eine Angabe der Fehlerursache aeus- + serst schwierig. + Aufgrund der einfachen Syntax von AMX wurde auf eine detail- + lierte Fehlererkennung verzichtet und der Anwender muss den + erzeugten Fehler + + "syntax error" + selbst deuten. + + Namenskonventionen + + Fuer Datenbankbegriffe (ql(iql)) und auch bezueglich der + Grenzwerte gelten die gleichen Bedingungen wie in den an- + deren DABA-Interfaces. Es sei nochmals daran erinnert, dass + die Namen der Systemrelationen: + + "relation" Verwaltung der Relationen + "attribute" Verwaltung der Domaenen + "indexes" Verwaltung der Indizes + "integrities" Verwaltung der definierten Integritaeten + "protect" Verwaltung der vergebenen Zugriffsrechte + "tree" Verwaltung der voruebersetzten Datenbank- + aktionen + "references" Verwaltung von Beziehungen zwischen + Relationen + + als Namen von Nutzerrelationen gesperrt sind. + + + + + Alle Namen (Datenbank, Relationen, Domaenen) sind maximal 12 + Zeichen lang und bestehen aus den Zeichen "[a-z_0-9]", wobei + der Name nicht mit einer Ziffer "[0-9]" beginnen darf (siehe + ql(iql)). Der AMX-Compiler konvertiert bei Namen grosse + Buchstaben "[A-Z]" automatisch in kleine "[a-z]". + + Durch die Laufzeitbibliothek werden eine Reihe von Objekten + definiert, die alle mit "AA" beginnen. Der Anwendungspro- + grammierer hat zu gewaehrleisten, dass diese Objekte nicht + ueberdefiniert werden. Er sollte Namen, die mit "AA" begin- + nen, generell vermeiden. + + AMX-Programm + + Jedes AMX-Programm besteht aus "C"-Anweisungen und eingebet- + teten AMX-Anweisungen, die vom AMX-Praeprozessor verarbeitet + werden. + + Alle AMX-Anweisungen sind durch das AMX-Kommandopraefix, das + aus zwei Nummernzeichen "##" am Zeilenanfang gebildet wird, + gekennzeichnet. + + + + + "C"-Variablen, die in AMX-Anweisungen verwendet werden, sind + ebenfalls durch "##" zu kennzeichnen. + + Wie bereits dargelegt, sind die "C"-Variablentypen und zu- + saetzlich "i1", "i2", "i4", "f4" und "f8" verfuegbar. + + Alle Variablen sind global zu deklarieren! + + Die erste Anweisung im AMX-Quellprogramm muss eine der An- + weisungen zum Eroeffnen der Datenbank (exclusive, daba, no- + lock oder shared) sein. + + Die erste auszufuehrende Funktion, anstelle von "main", muss + die Funktion "amx" sein. Fuer diese Funktion sind die glei- + chen Parameter wie bei "main" spezifizierbar (amx() ohne Pa- + rameter). + + Jede Relation muss vor ihrer Verwendung eroeffnet und kann + nach Beendigung der Verarbeitung geschlossen werden. Durch + die MUTOS Funktion "exit" werden alle noch eroeffneten Rela- + tionen geschlossen, nachdem die entsprechenden noch ausste- + henden Ausgaben erfolgt sind. + + + + Zur Bildung syntaktischer Konstruktionen werden zur Darstel- + lung einer Auswahl oder Wiederholung die folgenden Metasym- + bole verwendet: + + | : Alternative. + + [ ] : wahlweiser Ausdruck, kann entfallen. + + { } : mindestens einmalige Wiederholung, + mehrere Elemente werden durch ein Komma "," getrennt. + + Als syntaktische Variable werden u.a. die folgenden verwen- + det: + + dbname = Datenbankname + c_code = C-Anweisung + c_decl = Deklaration einer C-Variablen + relname = Relationsname + c_var = C-Variablenname + domname = Domaenenname bzw. Domaenennummer + const = int-Konstante | long-Konstante + | double-Konstante | "string"-Konstante + + + + Sprachbeschreibung + + Das Folgende ist eine Beschreibung der allgemeinen Syntax + der Sprache AMX und der syntaktischen Klassen aus denen die + Teile der AMX-Anweisungen gebildet werden. Die einzelnen + Anweisungen werden ebenfalls hier erlaeutert. + + Kennzeichnung der AMX-Anweisungen + + Alle AMX-Anweisungen beginnen mit "##" am Zeilenanfang. Nur + diese Anweisungen werden im folgenden behandelt. Alle an- + deren Anweisungen sind "C"-Anweisungen die den Regeln des + "C"-Compilers unterliegen. + + Die erste AMX-Anweisung im Programm + + Die erste AMX-Anweisung in einem AMX-Programm muss das Ero- + effnen einer Datenbank sein. + + Ist keine Sperrung der Datenbank vorgesehen, ist die Anwei- + sung: + + ## nolock [ flags ] dbname [ with deadlock ] + + zu verwenden. + + Soll eine Datenbank alleinig benutzt werden, sind die Anwei- + sungen: + + ## daba [ flags ] dbname [ with deadlock ] + + oder + + ## exclusive [ flags ] dbname [ with deadlock ] + + zu benutzen. + + Bei geteilter Nutzung ist: + + ## shared [ flags ] dbname [ with deadlock ] + + zu verwenden. + + Die wahlweisen Flags haben folgende Bedeutung: + + -uname Erlaubt es, sich als Nutzer mit dem Login-Namen + name auszugeben. Das AMX-Programm arbeitet dann + mit den Datenbankbefugnissen des entsprechenden + Nutzers. Nur der DBA und der DABA- + Systemverantwortliche duerfen dieses Flag benut- + zen. + + +bufno Ist die Spezifikation zusaetzlich verfuegbaren + DABA-Puffer. Normalerweise werden nur insgesamt + drei Puffer bereitgestellt. Bei paralleler Arbeit + mit mehreren Relationen (Indexrelationen muessen + mit gezaehlt werden!), sollte jeder Relation + mindestens ein Puffer zugeordnet werden. Empfeh- + lenswert sind zwei Puffer pro Relation. + + Die Spezifikation with deadlock bedeutet, dass Deadlocks + (Totsperren) auftreten koennen, die der Nutzer selbst abfan- + gen will. + + Kommentar + + Kommentare sind innerhalb von AMX-Anweisungen in der C- + ueblichen Notation zugelassen und duerfen nicht geschachtelt + werden: + + ## . . . /* Kommentar */ . . . + + + + + Deklaration von C-Variablen + + "C"-Variable, die in einer AMX-Anweisung verwendet werden + sollen, sind unbedingt durch "##" zu kennzeichnen. Folgende + "C"-Typen werden unterstuetzt: + + - short + - int + - long + - float + - double + - char * + - char [] + + + Ausserdem sind die DABA-Typen i1, i2, i4, f4 und f8 zugelas- + sen. + + Folgende Speicherklassen werden unterstuetzt: + + - auto + - extern + - static + + + Relationseroeffnung + + Die Anweisung: + + ## open relation + + eroeffnet die Relation relname fuer die weitere Verarbei- + tung. + Die Relation relname muss eine Primaer- bzw. Basisrelation + sein, d.h. es ist nicht moeglich, explizit eine Indexrela- + tion zu eroeffnen. + + Durch die open Anweisung werden automatisch alle zur Rela- + tion gehoerigen Indizes miteroeffnet. + Die Relation relname darf keine Sicht (View) sein, und es + duerfen keine Integritaetsbedingungen bzw. nur operationelle + Befugnisse (append, replace, retrieve, delete oder all) ohne + jede Qualifikation auf ihr definiert sein. Die Systemkata- + loge relation , attribute und indexes werden durch den Start + eines AMX-Programms automatisch eroeffnet. Sie duerfen vom + Nutzer nicht explizit eroeffnet werden. + Recherchen sind auf alle Relationen zugelassen, d.h. auf + Basis-, Indexrelationen und Katalogen. + Aenderungen und Einfuegungen sind nur auf Basisrelationen + zulaessig, fuer die das Programm die Aenderungsbefugnis (de- + lete, append, replace) hat. + + ## close relname + + Die close Anweisung schliesst die Relation relname fuer die + weitere Verarbeitung. Es koennen nur Relationen geschlossen + werden, die zuvor durch die open Anweisung eroeffnet wurden. + Die Beendigung eines Programms ( exit ) schliesst automati- + sch alle eroeffneten Relationen und Kataloge. + + ## tuplecount relname c_var + + Die tuplecount-Anweisung weist der C-Variable c_var als Wert + die Anzahl der Tupel der Relation relname zu. C_var muss + von numerischem Typ und als long (oder besser i4 ) definiert + worden sein. + + ## tuplelength relname c_var + + Die tuplelength-Anweisung weist der C-Variablen c_var als + Wert die Laenge eines Tupels zu und sollte als short ( oder + besser als i2 ) definiert sein. + + + + Die Anzahl der Tupel einer Relation und ihre Laenge sind die + einzigen verfuegbaren variablen Kataloginformationen fuer + ein AMX-Programm. Auf Umwegen kann so die Anzahl der Aende- + rungen in einer Relation bestimmt werden: + + . . . + ## long old, new; + . . . + ## tuplecount rel old + { Neueinfuegungen } + ## tuplecount rel new + printf("# of updates", new - old); + . . . + + Ergebnisliste + + In der retrieve, der replace und der append Anweisung kann + eine Domaenenauswahl in Form einer target_list (Ergebnis- + oder Zielliste) spezifiziert werden. + + Die target_list ist eine durch Kommas separierte Liste von + Domaenenzuordnungen (dom_assign). Sie muss in runde Klam- + mern eingeschlossen werden und mindestens eine Domaenenspe- + zifikation enthalten. + + Eine Domaenenzuordnung der Ergebnisliste besteht aus: + + $domname = value. + + Sie weist der Domaene domname den Wert value zu. Dabei + kennzeichnet das Dollar-Zeichen $ den Domaenennamen. + Als domname kann auch eine Domaenennummer ( attid des attri- + bute Kataloges) spezifiziert werden. + Bei den Zuweisungen von numerischen zu numerischen Typen + werden die notwendigen Konvertierungen ohne Ueberlauf- bzw. + Unterlaufkontrolle vorgenommen. + Zuweisungen von numerischen zu Zeichenkettenwerten und um- + gekehrt sind nicht zulaessig. + Durch die explizite Kennzeichnung von Domaenennamen durch + das Zeichen "$" werden im Gegensatz zu EQL Konflikte mit dem + Namen von C-Variablen vermieden. + Die Referenzierung von Domaenen ueber ihre interne Nummer + (Reihenfolge vom create(ql)) kann sinnvoll bei einer vekto- + risierten Verarbeitung sein. + + Ein Wert value kann der aktuelle Wert der C-Variablen c_var, + eine in C uebliche Konstante const oder eine Domaenenzuord- + nung sein. Ein Wert kann der aktuelle Wert der Domaene (Do- + maenenzuordnung) (gekennzeichnet durch das Dollarzeichen) + $domname sein. Diese Form des Wertes kann nur im Aktions- + teil der Recherche angegeben werden und setzt eine ueber- + geordnete retrieve Anweisung voraus, aus dem der Wert fuer + die Domaene domname geholt werden kann. + + Die retrieve-Anweisung + + + ## [ over over_relname ] retrieve ret_relname [ qual ] [ ( + target_list ) ] + + Die retrieve Anweisung zur Recherche ist die maechtigste + AMX-Anweisung, sie uebernimmt die Zugriffspfadoptimierung + und ermoeglicht eine rekursive Verarbeitung, da innerhalb + einer Recherche eine weitere Recherche aufgerufen werden + kann. + + Die over Klausel gestattet die Zuweisung des Zugriffspfades + ueber die Relation over_relname fuer die Recherche und damit + die Ausschaltung der Zugriffspfadoptimierung im AMX- + Compiler. + + Over_relname muss die wiederzufindende Relation selbst oder + ein Index von ret_relname sein. Ist over_relname ein Index + und wird durch die Selektion qual keinem Schluessel von + over_relname ein Wert zugewiesen, wird der Zugriffspfad ue- + ber die Primaerrelation rel_relname gewaehlt, da eine Re- + cherche ueber die gesamte Relation und ueber einen Index un- + sinning ist. + + Die retrieve Klausel ( retrieve ret_relname ) adressiert die + zu suchende Relation ret_relname. + + Qualifikation + + Die Recherche kann durch eine Qualifikation qual als Spezi- + fikation einer Selektion eingeschraenkt werden, wodurch die + relevanten Tupel selektiert werden. + Die Selektion ist eine Einschraenkung des Wertebereichs ein- + zelner (oder aller) Domaenen. + Mehrere Einschraenkungen werden durch "and" getrennt. + Eine Qualifikation qual hat maximal zwei Klausel pro Doma- + enenname. Eine Klausel besteht aus einer Domaenenspezifika- + tion (einem Domaenennamen domname, gekennzeichnet durch ein + Dollarzeichen "$" davor), einem Vergleichsoperator und einem + Wert value. Domname gibt die einzuschraenkende Domaene und + value den Wert der Einschraenkung an. Fuer die Spezifika- + tion von value gilt das in "Ergebnisliste" dargelegte. + + + + Es sind die Vergleichsoperatoren: + + "=", "==", "<", "<=", ">", ">=", "!=" + + zulaessig. + Wird eine Domaene doppelt eingeschraenkt, sind folgende zu- + laessige Kombinationen zu beachten: + + "<[=]" und ">[=]" + "<[=]" und "!=" + ">[=]" und "!=" + + Die Reihenfolge der Einschraenkungen fuer eine Domaene ist + in folgender Art einzuhalten: + + "<[=]" --> ">[=]" --> "!=" + + Alle zugewiesenen Bedingungen und Werte der angebenen Ein- + schraenkungen werden beim Einlauf in die Recherche gekel- + lert, sodass z.B. eine Aenderung des Wertes einer verwende- + ten C-Variablen keinen Einfluss auf die Selektion hat. + + + + + Ergebnisliste der retrieve-Anweisung + + Die Ergebnisliste ( target_list ) zur Spezifikation der Do- + maenenauswahl (Projektionsoperation des DBBS) ist wahlweise. + + Aktion + + Die Aktion, die bei jedem gefundenen Tupel duchlaufen werden + soll, ist durch den Einschluss der ##{ und der ##} Anweisun- + gen, die unmittelbar der ## retrieve Anweisung folgen soll- + ten, zu spezifizieren. Zwischen diesen Anweisungen koennen + beliebige AMX-Anweisungen und C-Anweisungen stehen. Die Ak- + tion kann leer sein, allerdings muessen die Klammern ange- + geben sein. + Es ist wichtig zu wissen, dass innerhalb der Aktion die Do- + maenenwerte des gefundenen Tupel immer vorhanden sind und + sich nicht aendern. + Eine Aktion fuer ein Tupel kann vorzeitig beendet werden. + Es ist moeglich, durch die Anweisung + + ## nextretrieve + + zur Verabeitung des naechsten Tupels ueberzugehen oder durch + + ## endretrieve + + die Aktion (Recherche) zu beenden. + + Variablenzuweisung + + Eine Zuweisung weist der C-Variablen c_var den aktuellen + Wert der Domaene domname zu. + + c_var = $domname + + Bei den Zuweisungen von numerischen zu numerischen Typen + werden die notwendigen Konvertierungen ohne Ueberlauf- + bzw. Unterlaufkontrolle vorgenommen. + Zuweisungen von numerischen zu Zeichenkettenwerten und um- + gekehrt sind nicht zulaessig. + + Die print-Anweisung + + ## print ([{ domname }]) + + Die print-Anweisung gibt die Werte der, durch eine oeffnende + "(" und eine schliessende runde Klammer ")", begrenzten Li- + ste der Domaenen in einem Standardformat nach Standardoutput + aus. + Die Liste enthaelt eine durch Kommas "," getrennte Aufza- + ehlung der auszugebenden Domaenen. Eine leere Liste "()" + gibt die Werte aller Domaenen aus. + + Das Standardformat enthaelt den Namen und den Wert der Doma- + ene in folgender Form: + + "%12s: %?\n", domname, value + + ? == Format der auszugebenden Domaene + + Die delete-Anweisung + + ## delete + + Eine delete-Anweisung loescht das innerhalb der laufenden + Recherche gefundene aktuelle Tupel aus der Relation. In- + nerhalb der Aktion bleibt das aktuelle Tupel mit seinen Wer- + ten erhalten. + Eventuell vorhandene Indizes werden automatisch aktuali- + siert. + + Die replace-Anweisung + + ## replace (target_list) + + Die replace Anweisung gestattet die Aenderung von Werten + einzelner (oder aller) Domaenen eines wiedergefundenen Tu- + pels. + Eine Unterscheidung von Schluessel- und Nichtschluesseldoma- + enen ist nicht zu beachten. + Die Aenderungen werden durch die Projektions target_list + spezifiziert. + + Es ist zu beachten, dass die Aenderungen in einem gesonder- + tem Puffer ausgefuehrt werden, das aktuell gefundene Tupel + also innerhalb der Aktion unveraendert bleibt. + Eventuell vorhandene Indizes werden, falls noetig, auto- + matisch aktualisiert. Eine Aktualsierung entfaellt z.B., + wenn eine identische Aenderung (geaendertes == Ursprungstu- + pel) ausgefuehrt wurde oder wenn die geaenderten Domaenen + nicht Bestandteil des Index sind und sich die Tupeladresse + TID nicht geaendert hat. + + Die append-Anweisung + + ## append [ relname ] (target-list) + + Die append Anweisung mit der Spezifikation relname fuegt ein + neues Tupel in die Relation relname ein. Die nicht in der + target_list spezifizierten Domaenen der Relation relname + werden mit einem Nullwert initialisiert, alle numerischen + Domaenen bekommen den Wert 0. + Den Zeichenkettendomaenen wird eine mit Leerzeichen gefuell- + te Zeichenkette zugewiesen. + + Die append Anweisung ohne relname fuegt ein neues Tupel in + die Relation ein. Sie kann nur innerhalb einer Recherche ge- + nutzt werden. Durch die Projektion target_list werden den + aufgefuehrten Domaenen Werte zugewiesen. + Alle nicht angebenen Domaenen erhalten den Wert aus dem ak- + tuell gefundenen Tupel der laufenden Recherche. + + Es ist zu beachten, dass die Aenderungen in einem gesonder- + ten Puffer ausgefuehrt werden, also das aktuell gefundene + Tupel unveraendert bleibt. Eventuell vorhandene Indizes + werden automatisch aktualisiert. + + Arbeit mit Transaktionen + + Zur Arbeit mit Transaktionen stehen die AMX-Anweisungen use, + commit, abort und if (deadlock) bereit. + + ## use ( use_rel [, ...] ) + + Use spezifiziert den Beginn einer Transaktion. den Beginn + einer Transaktion. Use_rel wird wie folgt angegeben: + + [ exclusive | shared | nolock | + ] relname [ + + with [ level = page | table ] + + [ readlock = exclusive | shared | nolock ] + + [ maxlock = int ] + + [ timeout = int ] ] + + Exclusive oder + bedeuten exklusive (alleinige), das Weglas- + sen oder shared eine geteilte Benutzung. Die geteilte Be- + nutzung und nolock (kein Sperren) sind nur fuer Leseopera- + tionen, exklusive Benutzung fuer Schreiboperationen anwend- + bar. + + Level kennzeichnet das Sperrniveau page (Seitensperren) oder + table (Relationsperren). + + Readlock ist nur fuer Leseoperationen anwendbar und kenn- + zeichnet die Art der Lesesperren. + + + Maxlock spezifiziert die maximale Anzahl der Sperren ( -1 : + unbegrenzt) und timeout die Zeit (in Sekunden), bis eine + Rueckkehr vom DBBS erfolgt sein muss ( - 1 : warten, bis + verfuegbar). + + Nur, wenn beim Eroeffnen der Datenbank with deadlock spezi- + fiziert wurde, sind die folgenden Anweisungen nutzbar. + + ## if ( bd deadlock ) { stmt_list } + + Mit dieser Anweisung kann abgetestet werden, ob ein Deadlock + aufgetreten ist. Diese Anweisung ist unmittelbar nach use, + retrieve, append, replace oder delete anzuordnen. Wenn ein + Deadlock aufgetreten ist, wird die Anweisungsfolge stmt_list + abgearbeitet werden, was i.allg. die Anweisung abort sein + wird. + + ## abort + + Diese Anweisung beendet eine Transaktion zwangsweise und + setzt die Datenbank auf den Stand vor Beginn der Transaktion + zurueck. diff --git a/WEGA/contrib/ingres/dbs/sys/man/eqc b/WEGA/contrib/ingres/dbs/sys/man/eqc new file mode 100644 index 0000000..1f00c53 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/eqc @@ -0,0 +1,68 @@ + EQC(MUTOS) DABA16 EQC(MUTOS) + + NAME + eqc - Aufruf des EQL-Praecompilers + + UEBERSICHT + eqc [ -d ] [ -f ] [ -r ] file.q {file.q} + + BESCHREIBUNG + EQL (Eingebettete QL) ist eine Sprache zur Einbettung von + Datenbankanfragen der Sprache QL in eine Wirts- + Programmiersprache. + + EQL besteht aus der EQL-Laufzeitbibliothek, die die Schnitt- + stelle zur Datenbank realisiert (Call- Interface), und einem + Praecompiler zur Uebersetzung eines Programms mit eingebet- + teten QL-Anweisungen in gueltige Anweisungen der Programm- + iersprache C. + Das Call-Interface ist fuer alle Programmiersprachen ver- + fuegbar; ein Praecompiler existiert zur Zeit nur fuer die + Programmiersprache C. + + Compilation + + Der Praecompiler wird durch das Kommando: + + eqc {flags} file1.q {flags} file2.q ... + + aufgerufen, wobei filen.q die Quelleingabe-Files sind, deren + Namen mit .q enden muessen. Die Ausgabe wird auf das File + `filen.c' geschrieben. + + Folgende Flags koennen gesetzt werden: + + -d Generiert Code zum Quelltext des Files mit Name und + Zeilennummer, die bei auftretenden Laufzeit-Fehlern an- + gezeigt werden. Das ist zum Analysieren der Fehler + nuetzlich, benoetigt aber mehr Platz. + + -f Erzeugt Code, bei dem "Output"- und "Input"-Files + gewoehnlich die gleiche Zeilennummer haben, um die C- + Diagnose-Mitteilungen leichter interpretieren zu ko- + ennen. Manchmal muss EQL versuchen, Anfragen in mehrere + Zeilen zu zerlegen, um einen Zeilenueberlauf des C- + Praeprozessors zu vermeiden. Dann verschiebt es C-Code + einige Zeilen nach vorn. Mit der -f Flagspezifikation + erfolgt das nicht. C-Code steht in der richtigen Zeile + und Reihenfolge. Entsprechend kann die Zeile des + Quellcodes mit der Zeile der C-Diagnose uebereinstim- + men. + + -r Setzt Flags auf Standardwerte zurueck. Das wird + verwendet, um andere Flags fuer Files aus der Argument- + liste zu unterdruecken. + + Die Ausgabe-Files koennen dann mittels des C-Compilers uebersetzt + werden: + + cc file1.c file2.c ... -lq + + Die Schreibweise -lq fordert die EQL-Laufzeit-Bibliothek an. + + Die Bibliothek libq.a muss zur Angabe der Option -lq in + /lib/libq.a oder /usr/lib/libq.a vorhanden sein, d.h. sie muss + bei der Installation aus + + /.../daba/lib/libq.a + dorthin kopiert werden. diff --git a/WEGA/contrib/ingres/dbs/sys/man/iqli b/WEGA/contrib/ingres/dbs/sys/man/iqli new file mode 100644 index 0000000..bfe9408 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/iqli @@ -0,0 +1,27 @@ + IQLI(DABA) DABA16 IQLI(DABA) + + NAME + IQLI - Interaktives QL-Interface von DABA + + BESCHREIBUNG + Das interaktive QL-Interface (IQL) von DABA ist nach dem + Aufruf von iql (iql(mutos)) verfuegbar. + + In IQL stehen die Datenbanksprache QL, die Terminal- + Monitor-Kommando-Unterstuetzung und die Makro-Unterstuetzung + bereit. + + Die Sprache QL wird durch das DBBS, die Terminal-Monitor- + Kommandos und die Makros werden durch den Terminal-Monitor + realisiert. + + Fuer eine Einarbeitung ist zu empfehlen, sich zuerst mit den + Terminal-Monitor-Kommandos und der QL-Sprache zu beschaefti- + gen. + + + + + + SIEHE AUCH + ql(iql), monitor(iql), macros(iql), iql(mutos) diff --git a/WEGA/contrib/ingres/dbs/sys/man/monitor b/WEGA/contrib/ingres/dbs/sys/man/monitor new file mode 100644 index 0000000..07582ad --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/monitor @@ -0,0 +1,614 @@ + MONITOR(IQL) DABA16 MONITOR(IQL) + + NAME + monitor - interaktiver Terminal-Monitor + + BESCHREIBUNG + Der Terminal-Monitor realisiert zusammen mit dem DBBS das + interaktive Interface (Nutzeroberflaeche) IQL von DABA. + + Der Monitor stellt einen Monitor-Puffer, die Terminal- + Monitor-Kommando-Unterstuetzung und die Makrounterstuetzung + (Makroprozessor) (macros(iql)) nach seinem Start bereit. + Die von der Monitor-Kommando-Unterstuetzung verarbeiteten + Monitor-Kommandos erlauben u.a. in Zusammenarbeit mit einem + Editor und dem Makro-Prozessor die Manipulation des Inhaltes + des Monitor-Puffers. Dieser manipulierte Inhalt wird dem + DBBS als QL-Anfragenstapel uebergeben und von diesem ver- + arbeitet. Ausserdem gestatten die Kommandos einen vorueber- + gehenden Wechsel der interaktiven Umgebung (Shell bzw. Edi- + tor). + + Die Monitor-Kommandos gestatten in vom Nutzer vorgefertigten + Kommandofiles (Monitor-Programme als Include-Files) eine Ab- + laufsteuerung. Diese Files (aber auch Terminal-Eingaben) ko- + ennen Monitor-Kommandos, Makro-Anweisungen und als wichtig- + ste QL-Anweisungen (bzw. Text, aus dem mittels Makro- + Substitution QL-Anweisungen erzeugt werden) enthalten. + + Zusammenstellung der Monitor-Kommandos + + Der Monitor-Puffer kann mit Monitor-Kommandos: + + - geloescht (\reset, \r), + - editiert (Aufruf eines Editors) (\editor, \edit, \ed, + \e), + - angezeigt (\list, \l oder \print, \p), + - durch Terminal-Eingaben ersetzt (Eingabe nach \go + und Autoloeschfunktion "ein") + oder ergaenzt (Eingabe nach \append, \a oder \e, \l + bzw. \p), + - durch den Inhalt eines MUTOS-File ersetzt (\include, + \read, \i) + oder ergaenzt (\include, \read, \i nach \a, \l bzw. + \p) bzw. + - in ein MUTOS-File geschrieben (\write, \w) + + werden. + + Ausserdem gibt es Monitor-Kommandos fuer: + + - die Flucht in eine MUTOS-Shell (\shell, \sh, \s), + - den Ausgang aus DABA (\quit, \q), + - die Verarbeitung eines sich im Puffer befindlichen + Monitor-Makros durch den Makroprozessor (\eval, \v), + - das Anzeigen von Uhrzeit und Datum (\date, \time, \d), + - das Anzeigen von Komponentenbeschreibungen des Handbuches + in Lang- oder Kurzform (\H bzw. \h), + - das Aendern des Arbeits-Directory (\chdir, \cd), + - das Setzen von Sprungmarken (\mark, \k), + - das Verzweigen zu einer Sprungmarke (\branch, \b) + (bedingt oder unbedingt), + - die Uebergabe des Inhaltes des Monitor-Puffers (QL- + Anfragenstapel) zur Verarbeitung durch das DBBS (\go, \g) + - und zur Aenderung des Kommandokennzeichens (\monitor, \m). + + + Nachrichten und Eingabe-Aufforderungen (Prompts) + + Um den Nutzer ueber den Status des Monitors und des Anfragenpuf- + fers zu informieren, gibt der Terminal-Monitor verschiedene Nach- + richten aus. + + Wenn DABA bereit ist, Eingaben zu akzeptieren, wird die Nachricht + "DABA>" angezeigt. Das bedeutet, dass der Anfragenpuffer leer + ist. + + Die Nachricht "DABA:" erscheint, wenn der Anfragenpuffer nicht + leer ist. + + In jedem Falle wird der Nutzer durch einen Stern "*" (Prompt) auf + der naechsten Zeile zur Eingabe aufgefordert. + + Die Ausgaben "DABA>" bzw. "DABA:" und "*" werden bei einer "-s"- + Option unterdrueckt. + + Der Monitor schreibt den Eingabetext in den Monitor-Puffer, je + nach eingestelltem Terminalmodus entweder sofort (cbreak-Modus) + oder erst nach (echo-Modus), dann sind Korrekturen vor + mit oder moeglich. + Bei der Eingabe werden alle Zeichen mit Ausnahme von , + und , die kleiner als oktal 040 sind, in Blanks konver- + tiert, wobei die Warnung: + + Zeichen 0xx konvertiert in Blank + + erscheint. + + + + + Nachdem die Eingabe in den Monitor-Puffer uebernommen wurde, kann + sie dort nur noch durch \edit editiert oder der gesamte Puffer + durch \reset geloescht werden. + + Bei der Uebernahme der Eingabe in den Monitor-Puffer filtert der + Terminal-Monitor die Monitor-Kommandos aus und fuehrt diese so- + fort aus. + + Das Monitor-Kommando \go (oder \g) uebergibt den Inhalt des + Monitor-Puffers an den Parser des DBBS, der die QL-Anweisungen + analysiert und zur Ausfuehrung weitergibt. Bei einer Bearbeitung + der Anfrage (bzw. Anfragenstapels) erscheint die Meldung: + + DABA . . . + + (nicht bei "-s"-Flag), wodurch signalisiert wird, dass der Moni- + tor auf die Beantwortung der Anfrage wartet. + + Wird ein \edit- oder ein \shell-Kommando spezifiziert, erscheint + die Nachricht: + + >>"Aufrufparameter" + + So ergeben z.B. die Eingaben "\ed", "\sh" und "\sh ls -l die + Nachrichten ">>/bin/ed", ">>sh" und ">>ls -l". Im interaktiven + Modus des Editors (Eingabe: "\edit") bzw. der Shell (Eingabe: + "\sh") erscheinen anschliessend die Standard-Prompts dieser Pro- + gramme. + + Nach einem \go-Monitor-Kommando (oder \eval) wird der Anfragen- + puffer standardmaessig (Autoloeschfunktion "ein") zur Loeschung + vorgemerkt. Wenn unmittelbar anschliessend eine andere Anfrage + eingegeben wird, erfolgt das Loeschen des Puffers. Es erfolgt + nicht, wenn unmittelbar nach der Bearbeitung des Anfragenstapels + (\go) bzw. nach \eval die Vormerkung zum Loeschen durch die Kom- + mandos \append, \print, \list oder \edit aufgehoben wurde. + + Nach der Eingabe: + help teile + \go + print teile + enthaelt der Anfragenpuffer: + print teile + Die Eingabe : + help teile + \go + \print + print teile + ergibt als Inhalt des Anfragenpuffer : + help teile + print teile + + Ist die Autoloeschfunktion ausgeschaltet ("aus"), wird jede neue + Anfrage an den Inhalt des Monitor-Puffers angehangen, sodass vor + einer Neueingabe der Puffer stets explizit mit dem \reset- + Kommando zu loeschen ist. + + Monitor-Kommandos + + Ein Monitor-Kommando besteht aus dem Kommandopraefix (Standard: + \), dem Namen des Monitor-Kommandos und wahlweisen Parametern als + Argument des Kommandos. Zwischen diesen Bestandteilen sind als + Trennzeichen entweder Leerzeichen oder Tabulatorzeichen erlaubt + (nach Kommandopraefix) bzw. notwendig (ansonsten). + + Einige Terminal-Monitor-Kommandos enthalten nach dem Kommandona- + men bis zum Zeilenende ein Argument (u.U. aus mehreren Woertern) + (z.B. Filenamen). Diese Kommandos duerfen auf der Zeile kein + weiteres Kommando beinhalten. Die maximale ausgewertete Laenge + des Argumentes dieser Kommandos betraegt 100 Byte. Es ist zu be- + achten, dass das Argument dieser Kommandos ueber den Makro- + Prozessor ausgewertet wird! + + + + Kommandos ohne Parameter koennen auf der Zeile aneinandergereiht + werden. + + Durch + \date\go\date + wird die Zeit vor und nach der Ausfuehrung des Inhaltes des An- + fragenpuffers angezeigt. + Nachfolgend werden die Kommandos im Detail beschrieben, wobei al- + le Kommandos keinen Parameter haben duerfen, bei denen er in der + Erlaeuterung nicht erwaehnt wird. + + \h + \help Anzeige einer Komponenten-Kurzbeschreibung (Name als + Parameter) bzw. der Kurzfassung des Inhaltsver- + zeichnisses der Komponenten (ohne Parameter). + + \H + \HELP Anzeige einer Komponentenbeschreibung (Name als Para- + meter) bzw. des Inhaltsverzeichnisses der Kompo- + nenten (ohne Parameter). + + \m + \monitor Ersetzen des \-Zeichens (Monitor-Kommandopraefix) + Ein Parameter ist das neue Terminal-Monitor- + Kommandopraefix. Wenn er fehlt, wird der Standard + (\) eingestellt. + + Nach einer Neudefinition des Monitor-Praefixes + sind u.U. bestehende Kommando-Files (Include- + Files) nicht mehr abarbeitbar! + + \r + \reset Loeschen des Monitor-Puffers (Ruecksetzen des Anfra- + genpuffers). Danach ist der Inhalt des Anfragen- + puffers unwiederbringlich verloren. + + \p + \print Anzeigen des Anfragenpuffers. Der Inhalt des Anfra- + genpuffers wird (ohne Veraenderung durch den + Makro-Prozessor) am Terminal des Nutzers ange- + zeigt. + + \l + \list Anzeigen des aktuellen Anfragenstapels, nach der + Makro-Verarbeitung. Nebeneffekte bei der Arbeit + des Makro-Prozessors, wie z.B. die Makro- + Definition, werden ausgefuehrt. Dem Makroprozes- + sor wird der Inhalt des Monitor-Puffers ueberge- + ben, dem der Makro {begintrap} vorangestellt und + der Makro {endtrap} nachgestellt werden. Damit + wird dem Nutzer angezeigt, welcher Text dem Parser + des DBBS bei einem \go-Kommandos uebergeben werden + wuerde. Es ist zu beachten, dass bei wiederholter + Anwendung durch die vorherige Definition von Sub- + stitutionsmakros andere Ergebnisse auftreten ko- + ennen. + + \v + \eval Der Makro-Prozessor verarbeitet den Anfragenpuffer und + ersetzt seinen Inhalt durch das Ergebnis der + Makro-Verarbeitung. Definierte Makros werden in + die Makro-Tabelle des Makro-Prozessors uebernommen + und sind damit aktiviert. + + Im Unterschied zum \list-Kommando erfolgen kein + Einbeziehen der Makros {begintrap} und {endtrap} + und keine Anzeige am Terminal. Auf Standard- + Output wirkende Ausgaben der Makros {dump}, {type} + und {read...} werden ausgefuehrt. + + Das \eval-Kommando ist das fuer die Abarbeitung + von Funktionsmakros zu bevorzugende Kommando. + + \e + \ed + \edit + \editor Eintritt in einen der MUTOS-Text-Editoren (z.B. "ed" + als Standard-Text-Editor). Wird "ed" benutzt, ist + ein "w"- gefolgt von einem "q"-ed-Kommando ein- + zugeben, um die Steuerung an DABA zurueckzugeben. + Wird ein File-Name als Parameter spezifiziert, er- + folgt ein Aufruf zum Editieren dieses File und + nicht der Aufruf eines anderen Editors! + Wurde in einem der Start-Files der Makro + "{editor}" definiert, wird er benutzt, um den + Pfadnamen eines spezifizierten Editors (z.B. "vi" + oder "em") einzugeben. Standardmaessig (ohne + "{editor}"-Makro) wird als Pfadname "/bin/ed" be- + nutzt. + + Innnerhalb des Editors darf kein "e"- + Kommandoaufruf erfolgen. Wenn er irrtuemlich doch + erfolgte, geht der Name des Anfragenpuffers ver- + loren. + + \g + \go Verarbeitet die aktuelle Anfrage (Anfragenstapel). Der + Inhalt des Puffers wird vom Makro-Prozessor ver- + arbeitet, DABA uebergeben und ausgefuehrt. Bei + den tupelorientierten QL-Anweisungen "retrieve", + "replace", "append" und "delete" wird der Makro + {tuplecount} mit der Anzahl der bearbeiteten Tupel + definiert (an den Nutzer zurueckgegeben). Dem + Parser wird vom Makro-Prozessor der Inhalt des Mo- + nitorpuffers uebergeben, dem der Makro {begintrap} + voran und der Makro {endtrap} nachgestellt werden. + Es ist darauf zu achten, dass nach der Verarbei- + tung durch den Makro-Prozessor, dem DBBS aus- + schliesslich QL-Anweisungen uebergeben werden + (u.U. Bereinigen des Puffers). + + \a + \append Anfuegen der folgenden Eingaben an den Anfragenpuf- + fer. Nach Eingabe eines \a wird die automatische + Loeschunterstuetzung des Anfragenpuffers (falls + sie "ein" war) ausgeschaltet und damit der Anfra- + genpuffer nicht zurueckgesetzt (kein reset). + + \d + \time + \date Anzeigen der aktuellen Tageszeit und des Datums. + + \s + \sh + \shell Flucht in eine MUTOS-Shell. Wurde der {shell}-Makro + definiert, wird dieses Shell-Programm zur aktiven + Shell. Wenn nicht, wird "/bin/sh" aktiv. + + Der Aufruf des \shell-Monitor-Kommandos kann mit + oder ohne Parameter erfolgen. + + Ein Aufruf ohne Parameter startet die Shell inter- + aktiv. Danach kann wie unter einer normalen, dem + Terminal zugeordneten Shell gearbeitet werden, bis + diese entsprechend den Konventionen (z.B. + Control-z oder Control-d ) verlassen wird und eine + Rueckkehr zum Monitor erfolgt. + + Sind Parameter spezifiziert, werden diese als Auf- + ruf eines einzigen MUTOS-Programmes (1.Parameter + ist der Shell-Kommandoname (Filename des auszu- + fuehrendes Files), die weiteren Parameter sind die + dem Kommando zu uebergebenden Parameter) verstan- + den, das unter Steuerung der aktiven Shell abzu- + arbeiten ist. Anschliessend erfolgt automatisch + die Rueckkehr zum Monitor. Wenn z.B. "\shell ls + -l" spezifiziert wird, erfolgt die Anzeige des In- + haltes des Arbeits-Directory in der Langform und + anschliessend sofort die Rueckkehr zum Terminal- + Monitor. + + \q + \quit Ausgang aus DABA (Verlassen des IQL-Interfaces). + + \cd + \chdir Aendern des Arbeits-Directory fuer den Monitor in ein + benanntes Directory (Parameter). + + \i + \include + \read Umschalten der Eingabe auf ein benanntes File (Parame- + ter). Backslash-Zeichen im File (Include-File) + werden wie bei der Eingabe vom Terminal behandelt. + + Ohne Parameter wird die entsprechende Programmebe- + ne verlassen. In der Basis-Terminal-Ebene ent- + spricht die Wirkung dem \quit-Kommando. + + Die maximale Schachtelungstiefe ist 5 (generie- + rungsabhaengig). + + Ist in einem Include-File ein \read-Kommando mit + dem Zeichen "-" spezifiziert erfolgt die Meldung + "" und zwischenzeitlich (bis ) ist + das Terminal die Eingabe. Anschliessend wird die + Eingabe aus dem Include-File fortgesetzt. + + + \w + \write Schreiben des Inhaltes des Anfragenpuffers in ein be- + nanntes File (Parameter). Der File-Modus eines + neu erstellten Files ist oktal "0644". + + \b + \branch Springen (Verzweigen der Steuerung) bedingt (Frage- + zeichen, Ausdruck und Marke als Parameter) oder + unbedingt (Marke als Parameter) innerhalb eines + Include-File (s.a. Abschnitt "Springen"). + + \k + \mark Setzen einer Sprungmarke (Parameter). Diese ist die + Zielangabe eines auszufuehrenden \branch- + Kommandos. + + \ + Ignoriert irgendeine spezielle Bedeutung des nach- + folgenden Zeichens. Das erlaubt, das "\" als li- + terales Zeichen einzugeben (ql(iql). Es ist wich- + tig zu bemerken, dass Backslash-Folgen manchmal + durch den Makro-Prozessors verloren gehen. Des- + halb sind zwei Backslash zu schreiben, wenn einer + zu senden ist. + + Makros + + Eine ganaue Beschreibung der Makros ist in (macros(iql)) zu + finden. + + Springen + + Die \branch und \mark Kommandos erlauben ein beliebiges + Springen innerhalb eines Include-File. Dem \mark Kommando + muss eine Marke folgen. Dem \branch kann eine Marke folgen + (entspricht einem unbedingten Sprung), oder es folgt ein + Ausdruck, dem ein Fragezeichen ("?") vorangeht und eine Mar- + ke folgt (bedingter Sprung). Der Sprung wird ausgefuehrt, + wenn der Ausdruck groesser als Null ist. + + Das Kommando : + + \branch ?{tuplecount}<=0 notups + + + + + verzweigt zur Marke "notups", wenn der Makro "{tuplecount}" + kleiner oder gleich Null ist (keine relevanten Tupel). + + Die Ausdruecke, die im \branch spezifizierbar sind, haben + folgende Einschraenkungen. + + Die Operatoren +, -, *, /, <=, >=, <, >, =, and != sind, wie + ueblich definiert. Der linke, einstellige Operator "!" kann + fuer eine logische Negation benutzt werden. Leerzeichen + (Blanks) innerhalb des Ausdruckes sind nicht erlaubt, da ein + Leerzeichen den Ausdruck beendet. Folgende Besonderheiten + sind zu beachten: + + - Ueberfluessige Endklammern werden ignoriert. + + - Ueberfluessige Anfangsklammern ergeben Null aus + Ausdruckswert. + + - Ein leerer Ausdruck bekommt den Wert Null. + + - Nur ein nicht akzeptiertes Zeichen als Ausdruck hat den + Wert Null. + + - Der Wert eines Zeichens, dass kein Operator ist wird Null. + + - Die Division durch Null ergibt den Wert Null. + + + Wenn das \branch-Kommando als Eingabetext vom Terminal ge- + geben wurde, wird das abgelehnt ("Kein Sprung am Terminal"). + + Aus einem Include-File wird zuerst ein vorhandener Ausdruck + ausgewertet und bei einem Wert groeser Null ein Sprung ver- + sucht. + + Wird eine Marke gefunden, wird mit der dieser Marke folgen- + den Textposition die Eingabe des Textes fortgesetzt. + + Ist keine Marke gefunden worden, wird, falls der Makro {de- + fault} definiert wurde, zu dieser dort definierten Marke ge- + sprungen. + + Andernfalls wird eine Meldung ausgegeben ("? Label ..."). + + IQL-Start + + Beim IQL-Start (iql(mutos)) wird zuerst eine bei allen + DABA-MUTOS-Kommandos ausgefuehrte Startprozedur durchlaufen. + Dabei wird auf das MUTOS-File /etc/passwd zugegriffen und + der Eintrag des Nutzers "daba" gelesen. Aus diesem Eintrag + wird der Pfadname des Home-Directory gemerkt. Mit diesem + Pfadnamen (durch .../ gekennzeichnet) sind alle nachfolgen- + den DABA-Files lokalisierbar. Mit dem Nutzercode des auf- + rufenden Nutzers wird im File .../sys/etc/users ein Nutzer- + eintrag gelesen. Ist ein solcher nicht vorhanden, ist der + Nutzer nicht autorisiert DABA anzuwenden. Aus dem Nutzer- + eintrag wird ermittelt, ob der Nutzer berechtigt ist, die + spezifizierte Datenbank zu nutzen. Wenn ja, erfolgt eine + Pruefung auf das Vorhandensein dieser Datenbank. Anschlies- + send werden die spezifizierten Optionen (Flags) auf Gueltig- + keit geprueft. Danach erfolgt entsprechend der Prozessta- + belle im vorliegenden Falle das Laden des DBBS und des + Terminal-Monitor-Programmes. + + Initialisierung + + Nach Ablauf der allgemeinen Startprozedur steht das DBBS zur + Arbeit bereit, und es beginnt eine Startprozedur des + Terminal-Monitors (Initialisierung), bevor dieser seinen Ar- + beitszyklus beginnt. + + Erstens werden vom Monitor-Programm die Makros {pathname}, + {usercode}, {database} und {tuplecount} (macros(iql)) defi- + niert, sodass sie fuer die Nutzung bereitstehen. + + Zweitens wird das allgemeine Initialisierungs- oder Start- + File (startup(files)) gelesen und verarbeitet. Dieses File + ist vorgesehen, um z.B. mittels Makrodefinitionen den fuer + alle Nutzer anwendbaren Standard-Editor und die Standard- + Shell zu definieren. + + Ist im Nutzereintrag des Files "users" (users(files)) ein + nutzerspezifisches Start-File (Standard-Filename: ".ql") + spezifiziert, wird drittens dieses gelesen und verarbeitet. + Diese File kann die speziellen Spezifikationen des Nutzers + enthalten. So kann z.B. in diesem File ein nutzerspezifi- + scher Editor bzw. eine Shell definiert werden. Es ist aber + auch moeglich, mit den Spezifikationen vorbereitende nut- + zerspezifische Arbeiten auszufuehren. + + Am Ende der Initialisierung wird die Steuerung standardma- + essig an das Nutzerterminal uebergeben. + + Flags + + Die Arbeitsweise des Terminal-Monitors wird durch folgende + Optionen (Flags) beim Aufruf des interaktiven Interface IQL + (iql(mutos)) gesteuert: + + -d Anzeige (keine Anzeige) des Inhaltes des "dayfile" (day- + file(files)) (Standard: Anzeige). + -s Anzeige (keine Anzeige, "schweigendes Arbeiten") von + Monitor-Nachrichten (Standard: Anzeige). Das -s + Flag unterdrueckt alle Nachrichten (ausser Fehler- + nachrichten) des Monitors, einschliesslich der + Login- und Logout-Nachrichten sowie die Ausgabe + des "dayfile"-Inhaltes (entspricht -d Flag "ein") + und die Ausgabe der Eingabeaufforderungen + (Prompts). + -/+a Autoloeschfunktion (automatisches Loeschen des + Terminal-Monitorpuffers) "aus" ("ein") (Standard: + "ein"). Das -a Flag unterdrueckt die automatische + Loeschfunktion (nach \go bzw. \eval), sodass der + Anfragenpuffer nicht automatisch geloescht wird. + Die Wirkung ist so, als wuerde stets ein \append + nach jedem \go eingegeben werden. + + Fuer den Nutzer bedeutet dies, dass vor jeder neu + eingegebenen Anfrage der Anfragenpuffer explizit + durch \reset geloescht werden muss. + + Das -I Flag gestattet, zum IQL-Start ein Include-File einzuzie- + hen. Wurde das -I Flag mit einem Filenamen spezifiziert, wird + dieses File abgearbeitet, Standard-Input bleibt aber dem Terminal + zugeordnet. + + Standardmaessig arbeitet der Terminal-Monitor in der Basis- + Terminal-Ebene (Eingaben von Standard-Input). Wenn ein Include- + File eingezogen wurde, erfolgt die Arbeit des Terminal-Monitors + durch das Include-File gesteuert, und das File ist die Quelle des + Eingabetextes. Werden aus dem Include-File neue Include-Files + eingezogen, kann das als neue Programmebene betrachtet werden. + Der Ruecksprung in die uebergeordnete Programmebene erfolgt durch + ein "include" ohne Operanden. + + Erfolgte eine Fileumlenkung (Standard-Input einem File zugeord- + net), werden alle Eingaben aus diesem File erwartet. + + Die Ausgaben des Monitors erfolgen stets auf Standard-Output + (i.allg. dem Terminal zugeordnet). Die Eingaben der Funktions- + makros {read} und {readdefine} (macros(iql)) werden in allen Pro- + grammebenen von Standard-Input erwartet. + + Unterbrechungen + + Wenn der Terminal-Monitor auf das Ende der Bearbeitung einer An- + frage durch das DBBS wartet, besteht die Moeglichkeit, die Arbeit + des DBBS durch ein Unterbrechungssignal (Control-c) zu unterbre- + chen, um die Steuerung dem Monitor zuruueckzugeben. Achtung, bei + der Bearbeitung von QL-Anweisungen, die die Datenbank veraendern, + ist eine Unterbrechung nicht angebracht (obwohl das DBBS fuer + "normale" Unterbrechungen nicht unterbrechbar ist)! + + Eine Unterbrechung waehrend der Arbeit mit einem Include-File + fuehrt zur Rueckkehr in die Basis-Terminal-Ebene. + + Ein in einer unter der Basis-Terminal-Ebene liegenden Pro- + grammebene fuehrt zur Rueckkehr in die darueber liegenden Pro- + grammebene. Ein in der Basis-Terminal-Ebene entspricht dem + \quit-Kommando. + + Fehler + + Die Kommandos \edit und \shell erfordern das Erzeugen eines neuen + Prozesses (Betriebssystem-Kommandos "fork" und "exec") . Gelingt + das nicht, erfolgen die Fehlermeldungen "edit: fork" bzw. + "shell: fork". Gelingt es nicht, die in den Makros {editor} bzw. + {shell} spezifizierten Programme zu laden, wird der Makro {error- + cout} auf den Wert -1 gesetzt und der Makro {exectrap} ausge- + fuehrt. Als Ergebnis werden die Fehlermeldungen "edit: exec" + bzw. "shell: exec" ausgegeben. + + + + + Liefern die Editor- bzw. Shell-Programme einen Rueckkehrwert ver- + schieden von Null, wird der Makro {exectrap} ausgefuehrt. + + Bei einem \go-Kommando kann die Fehlermeldung "go: open 1" aus- + gegeben werden, wenn die Eroeffnung des Monitor-Puffers nicht ge- + lingt. + + Bei einer ueber der maximal zugelassenen Schachtelungstiefe er- + folgenden \include-Kommando wird die Fehlermeldung "Mehr als 5 + INCLUDE'S" ausgegeben. + + Wurde ein \write-Kommando spezifiziert koennen die Fehlermeldun- + gen "unakzeptabler file name ..." und "create WRITE-file ..." er- + scheinen. + + SIEHE AUCH + daba(mutos), macros(iql), ql(iql), + + DIAGNOSE + DABA> Eine neue Anfrage kann begonnen werden. + + DABA: Die vorherige Anfrage ist beendet, jedo- + ch enthaelt der Puffer einen Inhalt. Der + Monitor besitzt wieder die Steuerung. + + DABA . . . Die Anfrage wird von DABA bearbeitet. + + >>ed Es wird im MUTOS-Text-Editor gearbeitet. + + >>sh Es wird zwischenzeitlich in der MUTOS- + Shell gearbeitet. + + Zeichen 0xx konvertiert in Blank + DABA hat ein nichtdruckbares ASCII- + Zeichen (oktal 0xx) in Blank umgewan- + delt. Diese Nachricht zeigt an, dass + eine solche Konvertierung fuer das Zei- + chen (0xx) erfolgte. + FEHLERQUELLEN diff --git a/WEGA/contrib/ingres/dbs/sys/man/rc b/WEGA/contrib/ingres/dbs/sys/man/rc new file mode 100644 index 0000000..cdb0292 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/rc @@ -0,0 +1,42 @@ + RC(MUTOS) DABA16 RC(MUTOS) + + NAME + rc - REPORT-Compiler + + UEBERSICHT + rc {[ flags ] file} + + BESCHREIBUNG + + Der Report-Compiler rc uebersetzt ein oder mehrere Report- + Quell-Files in Report-Code-Files (uebersetzte Report- + Anweisungen). Ein Report-Code-File wird zur Steuerung der + Report-Generierung mit rg verwendet. + + Das Quell-File enthaelt Report-Anweisungen und wahlweise + Domaenen-Beschreibungen (z.B. durch rd (rd(mutos)) mit dem + Flag -r erstellt). Ist letzteres der Fall, wird ein + Domaenen-Beschreibungs-File erzeugt. + + Flags: + + -c Nur Uebersetzen, keine Codeerzeugung + -i Eingabe von Standard-Input + -l automatische Umwandlung der Klein- in Grossbuchstaben + -o Ausgabe des Report-Code-Files r_code + -s Unterdrueckung des Uebersetzungsprotokolls + -v Ausgabe des Uebersetzungsprotokolls + + BEISPIELE + /* Uebersetze das Quell-File "pers_r" und + erzeuge das Report-Code-File "r_code" */ + rc -o pers_r + + SIEHE AUCH + rp_desc(mutos), rg(mutos), rd(mutos), report(mutos), + report(daba) + + + DIAGNOSE + Im Laufzeitprotokoll (auf Standard-Output) werden selbst- + erklaerende Hinweise gegeben. diff --git a/WEGA/contrib/ingres/dbs/sys/man/rd b/WEGA/contrib/ingres/dbs/sys/man/rd new file mode 100644 index 0000000..c25d8ba --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/rd @@ -0,0 +1,43 @@ + RD(MUTOS) DABA16 RD(MUTOS) + + NAME + rd - Erstellen eines Domaenen-Beschreibungs-Files oder eines + Reportskelettes + + UEBERSICHT + rd [ flags ] dbname relname [file] + + BESCHREIBUNG + + Rd erstellt ohne flags aus der Relation relname der Daten- + bank dbname ein Domaenen-Beschreibungs(Description)-File. + Fehlt der Parameter file (Ausgabe-File), wird der Name desc + gewaehlt. + + Bei Spezifikation eines -r Flags wird ein Skelett eines Re- + portprogrammes erzeugt. Das ist ein Report-Quellcode-File, + das sowohl die Domaenen-Beschreibung als auch das Skelett + einiger Report-Quellcode-Anweisungen enthaelt. + + Flags: + + -o Ausgabe auf Standard-Output (anstelle eines Files) + -r Ausgabe eines Skelett-Reportprogramms einschliesslich der + Domaenen-Beschreibungen. Fehlt das Argument file wird + der Name report gewaehlt. + + SIEHE AUCH + rc(mutos), rp_desc(mutos), rg(mutos), report(mutos), + report(daba) + + BEISPIELE + rd dt personal + + rd -o dt teile > teile_d + + rd dt teile teile_d + + /*Reportskelett*/ + rd -r dt personal + + rd -r dt personal pers_r diff --git a/WEGA/contrib/ingres/dbs/sys/man/reporti b/WEGA/contrib/ingres/dbs/sys/man/reporti new file mode 100644 index 0000000..cc41ecb --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/reporti @@ -0,0 +1,2352 @@ + REPORT(DABA) DABA16 REPORT(DABA) + + NAME + report - Reportunterstuetzung + + BESCHREIBUNG + Die Reportunterstuetzung gestattet die Erzeugung von Reports + (Berichten) aus Daten eines MUTOS-Files. + + Einleitung + + Die hier vorgestellte Unterstuetzung gestattet mit aus- + schliesslich DABA-Werkzeugen einen Report zu erzeugen. + + Fuer Daten aus der Datenbank wird das dadurch realisiert, + dass mit copy (copy(ql)) oder copyr (copyr(mutos)) Daten aus + einer Relation in ein MUTOS-File (Tupel-File) kopiert wer- + den. Anschliessend wird dieses Tuple-File durch den DABA- + Report-Generator (Interpreter) verarbeitet, der den Report + erstellt. + + Der Report-Generator rg (rg(mutos)) benoetigt ein Domaenen- + Beschreibung-File des Tupel-Files, das mit rd (rd(mutos)) + direkt oder das aus einem Report-Quellcode-File mit + Domaenen-Beschreibung durch den Report-Compiler rc + (rc(mutos)) mit erzeugt werden kann. + + Der Report-Generator wird durch ein Report-Code-File gesteu- + ert. Dieses File wird aus einem Report-Quellcode-File durch + den Report-Compiler rc (rc(mutos)) erstellt. + + Das Report-Quellcode-File enthaelt Anweisungen der Report- + sprache von DABA. + + Ueber die hier beschriebene Moeglichkeit hinaus gibt es an- + dere, um mit DABA- und MUTOS-Mitteln Reports zu erzeugen. + + Wenn z.B. keine Berechnungen auszufuehren und/oder die Re- + ports in Texte einzufuegen sind, ist es moeglich, den Pra- + eprozessor tbl des MUTOS-Textaufbereitungsprogrammes nroff + zu verwenden. In diesem Fall koennen die Daten aus einer + Relation der Datenbank mit copy (copy(ql)) oder mit copyr + (copyr(mutos)) in ein MUTOS-File kopiert werden. Dabei + muessen zwischen den Domaenenwerten Tabulator-Zeichen ein- + gesteuert werden. + + Eine andere Moeglichkeit des Erzeugens von Reports aus Daten + der Datenbank waere u.U. ebenfalls das Kopieren mit copy + oder copyr und eine anschliessende Reportgenerierung mit dem + MUTOS-Programm awk. + + Uebersicht + + Die DABA-Report-Unterstuetzung wird durch die DABA-MUTOS- + Kommandos rc, rg, rd und rp_desc realisiert. + + Das Kommando rc ruft den Report-Compiler auf, der die Re- + portdefinition (alle Report-Sprachanweisungen fuer einen Re- + port) verarbeitet. Die Reportsprache ist prozedural und ge- + stattet umfangreiche Berechnungen. + + Das Kommando rg ruft den Report-Generator auf, der die Li- + sten erzeugt. + + Das Kommando rp kann benutzt werden, um bei Spezifikation + einer Relation der Datenbank entweder nur ein + Domaenenbeschreibungs-File oder ein Reportskelett mit Doma- + enenbeschreibung zu erzeugen. + + Das Kommando rp_desc druckt ein Doaenenbeschreibungs-File. + + Ein einfaches Beispiel + + Wir wollen den folgenden Report erstellen. + + -------------------------------------------------- + Gehalt und Geburtsjahr nach Leitern 24-Jun-89 + + Abtlg. Name Gehalt Geburtsjahr + -------------------------------------------------- + + Rose, Petra 1206,- M 1931 + Gruene, Peter 1700,- M 1920 + + 10 Mueller, Ernst 700,- M 1950 + + 13 Fleischer, Karl 877,- M 1952 + + 26 Neumann, Inge 1198,- M 1950 + Schmidt, Hermann 1120,- M 1936 + Warnke, Peter 788,- M 1940 + + 32 Loda, Dieter 500,- M 1952 + Baum, Klaus 837,- M 1956 + + 33 Kayser, Helmut 600,- M 1952 + Weber, Franz 1337,- M 1944 + + 55 Maerz, Udo 1116,- M 1947 + Mueller, Petra 1362,- M 1939 + + 129 Moser, Otto 1567,- M 1938 + Schulze, Ernst 1564,- M 1944 + Zeidler, Fritz 1686,- M 1928 + + 199 Rose, Peter 1590,- M 1927 + Wunsch, Peter-Paul 900,- M 1928 + Schneider, Peter 1300,- M 1930 + Heine, Rolf 905,- M 1929 + Ernst, Eva 1010,- M 1931 + Malter, Juergen 1200,- M 1920 + Weise, Juergen 900,- M 1935 + Thoms, Rolf 1000,- M 1941 + Schmidt, Petra 1200,- M 1940 + -------------------------------------------------- + + + Dazu ist folgendes zu tun. + + Es wird das Kommando + + modifyr dt personal heapsort leiter + + aufgerufen, um die personal Beispielrelation der + Demonstrations-Datenbank dt in eine Speicherungsstruktur + heapsort mit der Spezifikation leiter zu ueberfuehren. Da- + mit ist diese Relation nach leiter sortiert. + + Anschliessend wird das Tupel-File tuple im aktuellen Direc- + tory aus der Relation personal erstellt. Das erfolgt z.B. + mit dem Kommando: + + copyr dt personal into tuple + + + Anschliessend wird ein Report-Skelettfile erstellt: + + rd -r dt personal pers_r + + + Dieses File hat folgendes Aussehen: + + report r_code # desc + with + /* page layout */ + + /* procedures */ + + /* variables */ + + /* switches */ + + /* domains */ + define num = 1 + define #num = integer 2 + define name = 2 + define #name = char 20 + define gehalt = 3 + define #gehalt = integer 2 + define leiter = 4 + define #leiter = integer 2 + define gebdat = 5 + define #gebdat = integer 2 + define einstdat = 6 + define #einstdat = integer 2 + + as + + on pagebegin do + end + + on pageend do + end + + on linebegin do + end + + on lineend do + end + + on batchline do + end + + for all do + for one do + end one + end all + ; + + Dieses File + pers_r + wird so editiert, + dass es folgendes Aussehen bekommt. + + report pers_r + with + columns 50 + lines 60 + all lines 66 + + define num = 1 + define #num = integer 2 + define name = 2 + define #name = char 20 + define gehalt = 3 + define #gehalt = integer 2 + define leiter = 4 + define #leiter = integer 2 + define gebdat = 5 + define #gebdat = integer 2 + define einstdat = 6 + define #einstdat = integer 2 + + as + + on pagebegin do + '-' 50 \n + 'Gehalt und Geburtsjahr nach Leitern' + \42 date \n2 + 'Abtlg.' + \8 'Name' + \30 'Gehalt' + \40 'Geburtsjahr' + \n + '-' 50 \n2 + end + + for all do + for one do + if groupbegin leiter then + \n integer @4 #leiter + end if + \8 char @20 #name + \30 integer @5 #gehalt ',- M' + \40 integer @9 #gebdat + \n + end one + end all + ; + + Dieses File enthaelt die Reportdefinition und die Domaenen- + definition. + + Anschliessend wird der Inhalt des Files pers_r mit dem + Report-Compiler uebersetzt. + + rc -o pers_r + + Es entsteht das File r_code, das den erzeugten Report-Code + enthaelt und das File desc, das die Domaenenbeschreibungen + beinhaltet. + + Jetzt kann das Kommando + + rg + + gegeben werden, das als Eingabe das File tuple, als Ausgabe + den Bildschirm hat und durch r_code gesteuert wird. Das Fi- + le desc dient zur Lokalisation der Domaenen im File tuple. + + Aufbau der Reportdefinition + + Jede Reportdefinition beginnt mit report und wird mit ; ab- + geschlossen. + + Der grundsaetzliche Aufbau: + + + [define] report r_code_name [desc_name] + with + formatierung + definitionen + as + kopfangaben + tupelverarbeitung + fussangaben + ; + + Prozeduren werden mit call aufgerufen, hierzu wurde kein + Symbol eingefuehrt. + + Fuer die definitionen erfolgt eine Zuordnung moeglicher Va- + riablen, Prozeduren, Boolescher Variablen zu einer laufenden + Nummer (jeweils mit 0 beginnend) und Domaenen zu einer lau- + fenden Nummer (mit 1 beginnend). Die Domaenendefinition + muss anschliessend durch eine Typzuordnung ergaenzt werden, + wobei dem Domaenennamen ein '#' voranzustellen ist. Im Pro- + gramm gilt folgende Zuordnung von Bezeichnung und Symbol: + + Boolesche Variable (switch) ^ + Domaene (val) # + Variable (var) $ + + Fuer die formatierung koennen den Bezeichnern + + lines + all lines + columns + from page to page + from tupel to tupel + + Werte zugewiesen und gegebenenfalls mit big eine + Grossbuchstaben-Konvertierung eingeschaltet werden. + + Die Parameter koennen in beliebiger Reihenfolge angegeben + werden. Bei doppelt aufgefuehrten gilt der zuletzt defi- + nierte Parameter. Werden zum Zeitpunkt des Reportaufbaus + neue Festlegungen getroffen, verlieren die jeweiligen alten + Parameter ihre Gueltigkeit. Fuer alle Parameter gelten + Standardfestlegungen. Die Parameter haben folgende Bedeu- + tung (die Grossschreibung im Text dient nur der Hervorhe- + bung, Schluesselwoerter koennen im Programm klein und gross + geschrieben werden ): + + LINES int + + Laenge des Informationsteils auf einer Seite ( int + Zeilen), Standard: Wert von ALL LINES, wenn definiert, + sonst: 66. + + ALL LINES int + + Laenge der physischen Druckseite ( int Zeilen). Stan- + dard: Wert von LINES + + COLUMNS int + + Breite des Informationsteils ( int Spalten). Standard: + 132 + + FROM PAGE int + + Es werden nur die Seiten in die Liste eingetragen, de- + ren Seitennummern groesser oder gleich der angegebenen + Zahl int sind. Standard: 0 + + TO PAGE int + + Es werden nur die Seiten in die Liste eingetragen, de- + ren Seitennummern kleiner oder gleich der angegebenen + Zahl int sind. Standard: 32767 (Maximum) + + FROM TUPLE int + + Es werden nur die Tupel verarbeitet, deren Tupelnummern + groesser oder gleich der angegebenen Zahl int sind. + Standard: 0 + + TO TUPLE int + + Es werden nur die Tupel verarbeitet, deren Tupelnummern + kleiner oder gleich der angegebenen Zahl int sind. + Standard:32767 (Maximum) + + BIG + + Alle Kleinbuchstaben werden beim Einschreiben in die + Liste automatisch in Grossbuchstaben umgewandelt. + Standard: keine Umwandlung + + Ist der Wert von LINES groesser als der von ALL LINES, wird + ALL LINES um ganze Vielfache seines Wertes erhoeht. Dies be- + deutet, dass sich eine Informationsseite ueber zwei oder + mehr Druckseiten erstreckt. + + In prozeduren werden alle in der Reportdefinition benoetig- + ten Prozeduren notiert. + + Die kopfangaben enthalten alle Anweisungen zur Gestaltung + des Listenkopfes. In der Regel wird am Beginn der Kopfan- + gaben der Seitenaufbau definiert. Die Ausgabe von Tupelwer- + ten in den Kopfangaben ist nicht sinnvoll. + + Die laufsteuerung vereinigt in sich alle Moeglichkeiten zur + Eintragung von Werten und Zeichenketten in die Liste, zur + Arithmetik und zur Seitengestaltung. + + Die Syntax und Semantik der Sprachanweisungen sind in den + angegebenen Kapiteln beschrieben. + + Die tupelverarbeitung umfasst alle Anweisungen zur Aufberei- + tung und Ausgabe der Tupelwerte. Die Beschreibung der Tupel- + verarbeitung erfolgt im Abschnitt "Bereitstellung der Tupel- + werte". + + Im abschliessenden Teil fussangaben wird die Definition des + Listenfusses beschrieben. In der vorliegenden Version ko- + ennen hier die Funktionswerte einer Anfrage ausgewertet wer- + den. + + Viele Anweisungen haben als Parameter die syntaktische Kon- + struktion number. Bei number kann entweder ein Direktwert + int angegeben werden oder aber eine Variable. + + Vorschub und Positionieranweisungen + + Fuer die Positionierung der auszugebenden Werte auf den Sei- + ten gibt zwei Varianten, eine Kurz- und eine Langform. Die + Kurzform erspart viel Schreibaufwand und kann emfpohlen wer- + den. Es koennen folgende Anweisungen gegeben werden: + + NEW PAGE oder \f + + Die aktuelle Seite wird abgeschlossen. Es erfolgt der + Vorschub auf eine neue Seite. Aus Sparsamkeitsgruenden + wird ein mehrfaches NEW PAGE nur einmal ausgefuehrt. + Es werden nur Seiten ausgegeben, die mindestens ein + Zeichen enthalten. Wird also eine Leerseite gewuenscht, + muss zwischen den zwei NEW-PAGE-Anweisungen mindestens + ein Leerzeichen ausgegeben werden. + + NEW LINE number oder \n number + + Es erfolgt der Vorschub auf eine neue Zeile. Die alte + Zeile wird abgeschlossen und number-1 Leerzeilen werden + ausgegeben. Der Standardwert fuer number ist 1. Wurde + der Wert von LINES erreicht, wird ein Seitenvorschub + ausgefuehrt. + + COL number oder \n number + + Es wird auf die Spalte number positioniert. Hat die ak- + tuelle Schreibposition in der Zeile bereits die ange- + gebene Spalte number ueberschritten, erfolgt ein auto- + matisches NEW LINE und danach die Positionierung. Wenn + bei Variante 2 der Aufwand zum Auszaehlen zu gross ist, + koennen sie mit \\ it number auch relativ positionie- + ren. + + SPACE number oder \\ number + + Es werden number Leerzeichen eingefuegt. + + + Bei der Kurzform sollte der Zwischenraum von \ zu number + entfallen, er verwirrt nur. + + Positionierungen auf einer Seite koennen ausserdem durch + Wertzuweisungen erreicht werden (SET LINE..., SET CO- + LUMN...). Diese Moeglichkeit ist in Abschnitt "Wertzuwei- + sung zu Systemvariablen .." beschrieben. + + Beispiel + + new page + new line 5 + col 11 + + Es wird auf die 11. Spalte der 5. Zeile einer neuen Seite + positioniert. In Kurzform + + \f + \n5 + \11 + + Ausgabe konstanter Zeichenketten + + Es besteht die Moeglichkeit, Zeichenketten in der Listende- + finition festzulegen, die unveraendert in die Liste ueber- + nommen werden. + + 'zeichenkette' BATCH number + 'zeichenkette' number + + Bei zeichenkette number wird die zeichenkette number -mal in + die Liste uebertragen. + + Beispiel: + + '=+' 5 + + Es wird die Zeichenkette '=+=+=+=+=+' in die Liste ein- + getragen. + + Die BATCH-Funktion erlaubt das "Stapeln" einer Zeichen- + kette. Unter Stapeln wird die Moeglichkeit verstanden, eine + Zeichenkette in einer bestimmten Breite ( number Zeichen) + ueber mehrere Zeilen auszugeben. Dabei wird durch den Re- + portgenerator versucht, nur ganze Worte zu uebertragen. + Ist ein Wort laenger als die festgelegte Breite, muss es + auf zwei oder mehr Zeilen verteilt werden. Eine Silbentren- + nung fuehrt das System nicht aus. + + Der Aufbau einer BATCH-Zeichenkette erfolgt in zwei Schrit- + ten: + + In die aktuelle Zeile wird der erste Teil der Zeichen- + kette in der durch number bestimmten Laenge eingetra- + gen. Danach werden weitere Anweisungen fuer die Zeile + bearbeitet. + + Bei Vorschub auf eine neue Zeile wird der Rest der + BATCH-Zeichenkette auf zusaetzliche Zeilen verteilt, + den sogenannten BATCH-Zeilen. Wenn sie erwarten, dass + die gesamte Zeichenkette ausgegeben und verteilt werden + soll, muss eine Laengenangabe erfolgen. + + Beispiel + + 'DAS IST ALLES NICHT SO KOMPLIZIERT' batch $breite @35 + + Folgende Zeichenketten werden eingetragen, wenn die Varia- + ble "breite" die Werte + 12 bzw. 5 hat: + + DAS IST DAS + ALLES NICHT IST + SO ALLES + KOMPLIZIERT NICHT + SO + KOMPL + IZIER + T + + Die BATCH-Funktion kann fuer mehrere Zeichenketten in einer + Zeile verwendet werden. Die naechste regulaere Zeile folgt + dann unmittelbar nach dem laengsten aller Stapel. + + Um auch BATCH-Zeilen gestalten zu koennen, z. B. Tabellen- + striche weiter zu fuehren oder auch Werte auszugeben, wird + eine spezielle Anweisung zur Verfuegung gestellt. + + + + + Syntax + + + ON BATCHLINE [DO] [laufsteuerung] ENDO + + Sie definiert den Grundaufbau ("Hintergrund") einer BATCH- + Zeile. Beim Auftreten dieser Anweisung wird eine solche Zei- + le noch nicht aufgebaut. Dies erfolgt erst nach dem Ab- + schluss der regulaeren Zeile vor dem Aufbau einer BATCH- + Zeile. Die BATCH-Zeichenketten werden dann in die vorberei- + teten BATCH-Zeilen eingetragen. + + Beispiel + + on batchline do + 'I' + \15 'I' + \29 'I' + endo + \n2 + + + I DAS IST I WIE ES I + I ALLES NICHT I SCHEINT I + I SO I I + I KOMPLIZIERT I I + + Zeichenketten-Eingabe vom Terminal + + Fuer die Gestaltung variabler Texte in der Liste, die nicht + Teil der Tupeldatei sind, steht die Moeglichkeit der Bedie- + nereingabe von Zeichenketten zur Verfuegung. + + Syntax + + + TERMINAL zeichenkette [BATCH number] + + Die Bearbeitung der Anweisung vollzieht sich in folgenden + Schritten: + + Der Text von 'zeichenkette' wird auf dem Terminal unter + Anfuegung des Zeichens ">" ausgegeben. + + Die Eingabe der, in die Liste einzutragenden Zeichen- + kette, vom Terminal wird erwartet. + + Die eingelesene Zeichenkette wird nun genauso behan- + delt, wie eine Zeichenkette, die direkt in der Listen- + definition angegeben wurde. Die Bearbeitung eines Wie- + derholungsfaktors ist nicht moeglich. + + Zu beachten ist, dass die eingelesenen Zeichenketten nicht + abgespeichert werden. Dies bedeutet, dass die Eingabe wie- + derholt vorgenommen werden muss, wenn die Anweisung TERMINAL + in einem Zyklus steht. + + Beispiel + + terminal 'NAME DES KUNDEN' \n2 + + Bei der Abarbeitung dieser Anweisungen erscheint auf dem + Terminal die Ausschrift: + + NAME DES KUNDEN> + + Wird als Name "Mueller" angegeben, steht in der Liste + z.B.: + + Werter Herr Mueller! + + Bereitstellung der Tupelwerte + + Die Bereitstellung der Tupelwerte erfolgt im Teil + tupelverarbeitung. + + Syntax + + FOR ALL [DO] [laufsteuerung] + + FOR [ONE] [DO] [laufsteuerung] END [ONE] | ENDO + [laufsteuerung] END ALL | ENDA + + Die Tupelverarbeitung hat also folgendes Aussehen: + + FOR ALL DO + . + . + . + FOR ONE DO + . + . + . + END ONE + . + . + . + END ALL + + Erreicht die Abarbeitung die Anweisung FOR ALL DO, wird das + jeweils naechste Tupel gelesen. Zwischen FOR ONE DO und END + ONE kann das Tupel verarbeitet werden. Wird festgestellt, + dass alle Tupel gelesen wurden, erfolgt die weitere Abarbei- + tung der Listendefinition ab der ersten Anweisung nach END + ALL. + + Die Konstruktion FOR ALL DO ... END ALL kann als Zyklus + betrachtet werden, der verlassen wird, wenn alle Tupel der + Eingabedatei verarbeitet wurden. + + Der Zugriff auf die Werte eines Tupels wird durch das + Schluesselwort VALUE oder das Schluesselzeichen # und + die Nummer der Domaene realisiert. + + define p_num = 1 + . + . + define #p_num = integer 2 + + Das spart aber viel Arbeit, weil sie nicht unbedingt #p_num + schreiben muessen, um den Wert dieser Domaene zu erreichen - + es genuegt auch #1. Sie haben zu entscheiden, ob die Ueber- + sicht mit der zweiten Variante noch gewahrt bleibt. + + Der Reportgenerator ermoeglicht nicht nur den Zugriff zum + aktuellen Tupel, sondern auch zum unmittelbar vorhergehenden + und nachfolgenden durch die Schluesselwoerter LAST und NEXT. + + Syntax + + LAST number + NEXT number + + LAST und NEXT koennen ueberall dort verwendet werden, wo + auch # moeglich ist. Das heisst, dass gleichzeitig drei Tu- + pel ausgewertet werden koennen und ermoeglicht beispielswei- + se die Ausgabe von drei Tupeln nebeneinander ueber mehrere + Zeilen. + + Wird mit number auf ein Attribut zugegriffen, das im Tupel + gar nicht existiert, wird eine Warnung auf dem Bedientermi- + nal ausgegeben und die Domaene Null verwendet. Wird auf ein + Tupel zugegriffen, welches nicht existiert, z. B. bei der + erstmaligen Abarbeitung von FOR ONE DO auf das Tupel "LAST", + haben alle Tupelattribute einen NULL-Wert. + + Der NULL-Wert kennzeichnet ein Attribut als nicht definiert. + Er kann auch innerhalb von Tupeln auftreten. Intern ist der + NULL-Wert durch eine bestimmte Bitkombination verschlues- + selt. + + Es sei folgende Relation erstellt: + + Relation: perskomp + + + |name |qual |pkz |lohn |abt|gruppe| + |----------------------------------------------------------| + |Gruene, Peter |Dipl.Ing|301220433447| 1700| 0| 1| + |Rose, Petra |Oekonom |270531327326| 1206| 0| 1| + |Mueller, Ernst |Kaufmann|110450423412| 700| 10| 12| + |Fleischer, Karl |Kraftf. |200652456768| 877| 13| 23| + |Schmidt, Hermann |Ing.Oek.|130536487246| 1120| 26| 10| + |Neumann, Inge |Ing. |120950366789| 1198| 26| 23| + |Warnke, Peter |FA |120740423408| 788| 26| 23| + |Baum, Klaus |FA |191156423577| 837| 32| 10| + |Loda, Dieter |FA |040352433406| 500| 32| 10| + |Weber, Franz |Dipl.Ing|261044466201| 1337| 33| 2| + |Kayser, Helmut |TFA |200652434556| 600| 33| 11| + |Maerz, Udo |Ing. |120947434566| 1116| 55| 2| + |Mueller, Petra |Dipl.Ing|111139334464| 1362| 55| 3| + |Schulze, Ernst |Dipl.Ing|221144434043| 1564|129| 1| + |Zeidler, Fritz |Dipl.Oek|310328434035| 1686|129| 1| + |Moser, Otto |Dipl.Ing|241238434052| 1567|129| 3| + |Weise, Juergen |FA |131235435334| 900|199| 4| + |Malter, Juergen |Ing. |180620435662| 1200|199| 5| + |Rose, Peter |Dipl.Oek|200227435046| 1590|199| 5| + |Ernst, Eva |Dipl.Ma.|130431334667| 1010|199| 6| + |Heine, Rolf |Oek. |220829435672| 905|199| 6| + |Schmidt, Petra |Dipl.Ma.|101040334223| 1200|199| 6| + |Thoms, Rolf |Oek. |100341434221| 1000|199| 6| + |Schneider, Peter |Oek. |130730434446| 1300|199| 7| + |Wunsch, Peter-Paul|Ing. |050428433078| 900|199| 7| + |----------------------------------------------------------| + + Das Programm kompl_p soll eine stark vereinfachte FZR- + Beitragsuebersicht erstellen: + + report kompl_r + with + /* page layout */ + columns 60 + lines 36 + all lines 48 + + /* procedures */ + define p_fzr = 1 + define p_pgw = 2 + + /* switches */ + define last_page = 1 + + /* variables */ + define next_page = 0 + define fzr = 1 + define grp_lohn = 2 + define grp_fzr = 3 + define grp_cnt = 4 + define abt_lohn = 5 + define abt_fzr = 6 + define abt_cnt = 7 + + /* domains */ + define d_name = 1 + define d_qual = 2 + define d_pkz = 3 + define d_lohn = 4 + define d_abt = 5 + define d_gruppe = 6 + + define #d_name = char 20 + define #d_qual = char 8 + define #d_pkz = char 12 + define #d_lohn = integer 2 + define #d_abt = integer 2 + define #d_gruppe = integer 2 + as + + proc p_fzr + set $fzr = ($fzr - 600) / 10 + if $fzr > 60 then set $fzr = 60 end if + return + + proc p_pgw + if line < 47 then 'I' end if + return + + on pagebegin do + '-' 60 \n + 'VEB Generatorwerke' + \50 date \n + '1234 Berlin' + \50 time \n + 'Beispielstr. 13' + \28 'Seite: ' integer page \n + '-' 60 \n2 + if ! page == 1 then + \20 'Liste der Abteilung ' integer #d_abt + end if + \n2 + end + + on pageend do + if ! ^last_page then + set $next_page = page + 1 + \36 'Es folgt Seite: ' integer $next_page + end if + \n + '-' 60 \n3 + end + + on lineend do call p_pgw end + on linebegin do call p_pgw end + + on batchline do + \18 + if #d_pkz from 7 to 7 == '4' + then 'maennl' + else 'weibl' + end if + end + + set line = 10 + \\20 'Liste der Abteilungen ' new page + + for all do + for one do + if groupbegin d_abt then new page end if + if groupbegin d_gruppe then + '**** Gruppe ' integer @3 #d_gruppe + ' ****' \n2 + 'Name' + \15 'Qualifikation' + \32 'Geb.-Datum' + \45 'Lohn' + \55 'FZR' \n + \15 'maennl/weibl' \n2 + end if + + set $fzr = #d_lohn + call p_fzr + char batch 10 @20 #d_name + \18 char #d_qual + \33 char to 2 #d_pkz '.' + char from 3 to 4 #d_pkz '.' + char from 5 to 6 #d_pkz + \44 integer @4 #d_lohn ',-M' + \54 integer @3 $fzr ',-M' \n + set $grp_lohn += #d_lohn + set $grp_fzr += $fzr + set $grp_cnt += 1 + if groupend d_gruppe then + set $abt_lohn += $grp_lohn + set $abt_fzr += $grp_fzr + set $abt_cnt += $grp_cnt + if $grp_cnt > 0 then + set $grp_lohn := $grp_cnt + set $grp_fzr := $grp_cnt + end if + \28 'Durchschnitt: ' + \44 integer @4 $grp_lohn ',-M' + \54 integer @3 $grp_fzr ',-M' \n2 + set $grp_lohn = 0 + set $grp_fzr = 0 + set $grp_cnt = 0 + '-' 60 \n + end if + if groupend d_abt then + if $abt_cnt > 0 then + set $abt_lohn := $abt_cnt + set $abt_fzr := $abt_cnt + end if + 'Durchschnitt der Abteilung: ' + \44 integer @4 $abt_lohn ',-M' + \54 integer @3 $abt_fzr ',-M' \n2 + set $abt_lohn = 0 + set $abt_fzr = 0 + set $abt_cnt = 0 + '=' 60 \n + end if + end one + end all + + set ^last_page; + + Als Ausgabegeraet wurde ein Seriendrucker mit 48 Zeilen Sei- + tenlaenge gewaehlt, der softwareseitig keinen Seitenvorschub + realisieren kann (Ausgabe von Zeilenvorschub). Da jeweils + am Zeilenanfang und -ende mit 'I' gerahmt werden soll, ist + durch die Prozedur p_pgw die Abfrage nach den Zeilennummern + 1..46 eingeordnet, um zu verhindern, dass auf den Zeilen 47 + und 48 (Seitenfalz) ebenfalls ein 'I' erscheint. Bei Druk- + kern (Paralleldrucker), die diese Einschraenkung nicht ken- + nen, kann die Prozedur p_pgw entfallen. + + Die Rolle von lines und all lines soll am Beispiel noch ein- + mal erklaert werden. Die Differenz zwischen beiden betraegt + 12, also die Summe der new lines, die fuer die Abschnitte on + pagebegin do und on pageend do verwendet wurden. Damit ste- + hen fuer den Informationsteil tatsaechlich nur 36 Zeilen zur + Verfuegung. Bei einem Drucker mit 72 Zeilen muessten ent- + sprechend fuer lines 60 Zeilen und all lines 72 Zeilen ge- + schrieben werden. Falls sie sich hierbei verzaehlen, erhal- + ten sie in der Regel unbrauchbare Seitenformatierungen. Be- + vor weitere Erlaeuterungen folgen, einige Auszuege aus dem + tatsaechlichen Druckbild: + + I------------------------------------------------------------I + IVEB Generatorwerke 19-May-88 I + I1234 Berlin 11:18:42 I + IBeispielstr. 13 Seite: 2 I + I------------------------------------------------------------I + I I + I Liste der Abteilung 0 I + I I + I**** Gruppe 1 **** I + I I + IName Qualifikation Geb.-Datum Lohn FZR I + I maennl/weibl I + I I + IGruene, Dipl.Ing 30.12.20 1700,-M 60,-M I + IPeter maennl I + IRose, Oekonom 27.05.31 1206,-M 60,-M I + IPetra weibl I + I Durchschnitt: 1453,-M 60,-M I + I I + I------------------------------------------------------------I + IDurchschnitt der Abteilung: 1453,-M 60,-M I + I I + I============================================================I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I Es folgt Seite: 3 I + I------------------------------------------------------------I + + + I------------------------------------------------------------I + IVEB Generatorwerke 19-May-88 I + I1234 Berlin 11:19:29 I + IBeispielstr. 13 Seite: 10 I + I------------------------------------------------------------I + I I + I Liste der Abteilung 199 I + I I + I**** Gruppe 4 **** I + I I + IName Qualifikation Geb.-Datum Lohn FZR I + I maennl/weibl I + I I + IWeise, FA 13.12.35 900,-M 30,-M I + IJuergen maennl I + I Durchschnitt: 900,-M 30,-M I + I I + I------------------------------------------------------------I + I**** Gruppe 5 **** I + I I + IName Qualifikation Geb.-Datum Lohn FZR I + I maennl/weibl I + I I + IMalter, Ing. 18.06.20 1200,-M 60,-M I + IJuergen maennl I + IRose, Dipl.Oek 20.02.27 1590,-M 60,-M I + IPeter maennl I + I Durchschnitt: 1395,-M 60,-M I + I I + I------------------------------------------------------------I + I**** Gruppe 6 **** I + I I + IName Qualifikation Geb.-Datum Lohn FZR I + I maennl/weibl I + I I + IErnst, Eva Dipl.Ma. 13.04.31 1010,-M 41,-M I + I weibl I + IHeine, Oek. 22.08.29 905,-M 30,-M I + IRolf maennl I + ISchmidt, Dipl.Ma. 10.10.40 1200,-M 60,-M I + IPetra weibl I + IThoms, Oek. 10.03.41 1000,-M 40,-M I + IRolf maennl I + I Durchschnitt: 1029,-M 43,-M I + I Es folgt Seite: 11 I + I------------------------------------------------------------I + + I------------------------------------------------------------I + IVEB Generatorwerke 19-May-88 I + I1234 Berlin 11:19:41 I + IBeispielstr. 13 Seite: 11 I + I------------------------------------------------------------I + I I + I Liste der Abteilung 199 I + I I + I I + I------------------------------------------------------------I + I**** Gruppe 7 **** I + I I + IName Qualifikation Geb.-Datum Lohn FZR I + I maennl/weibl I + I I + ISchneider, Oek. 13.07.30 1300,-M 60,-M I + IPeter maennl I + IWunsch, Ing. 05.04.28 900,-M 30,-M I + IPeter-Paul maennl I + I Durchschnitt: 1100,-M 45,-M I + I I + I------------------------------------------------------------I + IDurchschnitt der Abteilung: 1112,-M 46,-M I + I I + I============================================================I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I------------------------------------------------------------I + + + + Sofern sie die Liste auf einem Paralleldrucker mit einer + Seitenlaenge von 66 Zeilen ausgeben wollen, kann die Pro- + zedur p_pgw, wie ereits erwaehnt, weggelassen werden. Die + Kopfinformationen sehen dann so aus: + + /* page layout */ + columns 60 + lines 56 + all lines 66 + big + + Die Behandlung des Seitenendes muss entsprechend obiger De- + finition auf + + on pageend do + if ! ^last_page then + set $next_page = page + 1 + \36 'Es folgt Seite: ' integer $next_page + end if + '-' 60 \n + end + + geaendert werden und die Zeilenende und -anfangsbehandlung + sieht jetzt so aus: + + on lineend do 'I' end + on linebegin do 'I' end + + Falls sie in der Zeile + + char batch 10 @20 #d_name + + die Laengenangabe @20 vergessen, werden in der 2. Zeile + exakt soviele Zeichen nicht ausgegeben, wie in der 1. ge- + spart wurden. Es steht dann beispielsweise: + + Thoms, + R + Schmidt, + Petr + + Systemvariable + + Systemvariablen werden automatisch dem Nutzer zur Verfuegung + gestellt. Sie besitzen einen definierten Anfangswert und ko- + ennen durch den Nutzer beliebige Werte zugewiesen bekommen. + + Die Variablen haben folgende Bedeutung: + + PAGE + + Nummer der aktuellen Seite + Mit 1 beginnend, wird bei jedem Vorschub auf eine neue + Seite der Wert PAGE um eins erhoeht. PAGE kann vom Nut- + zer ein beliebiger Wert zwischen 0 und 32767 zugewiesen + werden. + + TUPLE + + Nummer des aktuellen Tupels + Mit 1 beginnend, wird bei jedem Einlesen eines neuen + Tupels dieser Wert um eins erhoeht. TUPLE kann vom Nut- + zer ein beliebiger Wert zwischen 0 und 32767 zugewiesen + werden. + + LINE + + aktuelle Zeilennummer auf der Seite + Ist LINE das Ziel einer Wertzuweisung, wird nicht nur + die neue Zeilennummer in LINE eingetragen, sondern tat- + saechlich auch die angegebene Zeile der Seite positio- + niert. Ist die aktuelle Zeilennummer bereits groesser + oder gleich der berechneten, erfolgt automatisch der + Vorschub auf eine neue Seite und danach die Positionie- + rung auf die gewuenschte Zeile. + + COLUMN + + aktuelle Schreibposition (Spalte, mit 1 beginnend) in + der Zeile + Ist COLUMN Ziel einer Wertzuweisung, wird der ge- + wuenschte Wert in COLUMN eingetragen und auf die Spalte + positioniert. + + VAR + + allgemeine Variable + Dem Nutzer stehen 126 Variable (VAR0 - VAR125) zur + freien Verfuegung. Der Nummer kann mit define ein ent- + sprechender Name zugeordnet werden. Sie werden im Ge- + gensatz zu Domaenenwerten (#) mit $NAME oder $number + (mit 0 beginnend) gerufen. Den verfuegbaren Variablen + koennen Integer- und Realwerte zugewiesen werden. Am + Anfang sind alle Variablen mit dem Wert 0 initiali- + siert. + Die allgemeinen Variablen sollten nicht mit den Bool- + schen Variablen verwechselt werden, hier sind ebenfalls + 126 Variable verfuegbar, die den Wert TRUE oder FALSE + annehmen koennen (siehe Abschnitt "Boolsche Variable"). + + Alle Systemvariablen beinhalten numerische Werte und ko- + ennen als solche in die Liste eingetragen werden. + + Zeichenkettenvariablen gibt es im Reportgenerator nicht. + + Systemkonstante, Datum, Uhrzeit + + Die Systemkonstanten werden dem Nutzer fuer die Ausgabe und + Verwendung in arithmetischen Ausdruecken zur Verfuegung + gestellt. Sie koennen nicht Ziel einer Wertzuweisung sein: + + + YEAR aktuelles Jahr (0 bis 99 als Jahr - 99) + MONTH aktueller Monat (0 bis 11) + DAY aktueller Tag (1 bis 31) + M_DAY aktueller Tag im Monat (1 bis 31) + W_DAY aktueller Tag der Woche (0 = Sonntag bis 6) + Y_DAY aktueller Tag im Jahr (0 bis 365) + HOUR aktuelle Stunde (0 bis 23) + MINUTE aktuelle Minute (0 bis 59) + SECOND aktuelle Sekunde (0 bis 59). + + Die Konstanten werden beim Start des Report-Generators neu + aus der Systemzeit des Rechners ermittelt. + + Der Reportgenerator stellt zwei spezielle Funktionen fuer + die Ausgabe von Datum und Uhrzeit zur Verfuegung: + + + DATE in der Form tt-mmm-jj + TIME in der Form hh:mm:ss. + + Beispiel + + 'DATUM UND UHRZEIT:' date ' ' time + + erzeugt den Text + + DATUM UND UHRZEIT: 27-JAN-86 11:13:25 + + Ausgabe von numerischen Werten + + In diesem Abschnitt werden die Ausgabemoeglichkeiten von nu- + merischen Werten vorgestellt. Dafuer stehen die drei Funk- + tionen + + - INTEGER + - REAL + - GRAPHIC + + zur Verfuegung. Welchen numerischen Typ die auszugebenden + Werte intern besitzen, ist fuer die Funktionen ohne Bedeu- + tung. Welcher Wert ausgegeben werden soll, wird unmittelbar + hinter der Funktion angegeben. + + Der erste Parameter dieser Funktionen ist die Laenge. + + [LENGTH number] + oder + [@number] + + Number legt die Anzahl der Zeichen fest, die fuer die Aus- + gabe des Wertes in der Listenzeile zur Verfuegung gestellt + werden. Diese Anzahl kann den Funktionen mit Angabe von num- + ber vorgegeben werden. Die Zahlen werden dann rechtsbuendig + in den bereitgestellten Platz eingetragen. Fehlt die Laenge- + nangabe, wird genau so viel Platz in der Zeile beansprucht, + wie fuer die Darstellung des Wertes notwendig ist. Die Zahl + wird also linksbuendig ab der aktuellen Schreibposition ein- + getragen. Die naechste Ausgabe erfolgt dann unmittelbar hin- + ter dem Wert. + + + + Ausgabe als Integer-Zahl + + Die Darstellung eines Wertes erfolgt als ganze Zahl. + + _ _ + | | + INTEGER laenge | SCALE real | num daten + | PIC zeichenkette | + ~ ~ + + + Wahlweise kann ein Skalierungsfaktor und eine Druckauf- + bereitungsmaske spezifiziert werden. + + Der Wert wird mit dem Skalierungsfaktor multipliziert. Damit + lassen sich bequem Massstabsveraenderungen, Zinsberechnun- + gen, Prozentrechnungen u.a. realisieren. Der auszugebende + Wert wird eventuell gerundet. + + Beispiel + + integer @18 + scale 0.0325 + pic 'ZINSEN: 00009.99 M' + #p_guthab + + Hat #p_guthab den Wert 20000, wird in die Liste eingetra- + gen: + + ZINSEN: 6.50 M + + Die Symbole einer Druckaufbereitungsmaske PIC haben fest zu- + geordnete Bedeutungen. Diese sind im einzelnen: + + < + + linksbuendiges Eintragen der aufbereiteten Maske in die + verfuegbare Spalte + + > + + rechtsbuendiges Eintragen der aufbereiteten Maske in + die verfuegbare Spalte + + = + + zentriertes Eintragen der aufbereiteten Maske in die + verfuegbare Spalte + + 9 + + Eintragen einer Ziffer + + 0 + + Eintragen einer Ziffer, falls es sich nicht um eine + Vornull handelt. Bei Vornullen wird ein Leerzeichen + bzw. das Vorzeichen (falls gewuenscht) eingetragen. + + + + + unbedingte Darstellung des Vorzeichens unmittelbar + vor der ersten Ziffer; + + - + + Darstellung nur des negativen Vorzeichens unmittelbar + vor der ersten Ziffer (Standard); sonst unveraenderte + Uebernahme in das Ausgabebild. + + Um die Symbole fuer die Druckaufbereitung als normale Zei- + chen verwenden zu koennen, mueen sie mit dem Zeichen '\' ka- + schiert (geschuetzt) werden. Das Zeichen '\' ist durch die + Umschreibung '\\' verfuegbar. + + Die Symbole fuer die Positionierung der Druckaufbereitungs- + maske koennen an beliebiger Stelle stehen, das zuletzt ge- + gebene Symbol wird fuer die Druckaufbereitung verwendet, al- + le anderen werden "verschluckt". + + Das Symbol fuer das Vorzeichen kann an drei Stellen ange- + geben werden: + + - vor dem ersten '0'-Symbol + Darstellung des Vorzeichens an dieser Position; + + - vor dem ersten '9'-Symbol + Darstellung des Vorzeichens unmittelbar vor der ersten Zif- + fer; + + - nach dem letzten '9'-Symbol + Darstellung des Vorzeichens nach der letzten Ziffer + + Beachte: + + Das zuletzt verwendete Vorzeichensymbol wird fuer die Auf- + bereitung verwendet. + + + + Ausgabe als Real-Zahl + + Die Darstellung eines Wertes erfolgt als Gleitkommazahl. + + _ _ + | | + | SCALE real | + | BEFORE number | + REAL laenge | POINT number | num daten + | NORM number | + | IGNORE | + | EXP zeichenkette | + ~ ~ + + + Die wahlweise anzugebenden Parameter haben folgende Bedeu- + tung: + + SCALE real + + Der Attributwert wird vor der Aufbereitung mit dem + Skalierungsfaktor multipliziert. + + BEFORE number + + Anzahl der Stellen vor dem Komma + Standard: 0 + + POINT number + + Anzahl der Stellen nach dem Komma + Die letzte Stelle ist gerundet. + Standard: 6 + + NORM number + + Die Zahl soll mit einem bestimmten Exponenten dar- + gestellt werden. Beispielsweise wird bei NORM 5 + die Zahl mit dem Exponenten E+05 dargestellt. Der Para- + meter BEFORE wird dabei unwirksam. + + IGNORE + + Die Angabe des Exponenten soll unterdrueckt werden. Der + Parameter BEFORE wird dabei unwirksam. Ist die Darstel- + lung des Wertes ohne Exponenten nicht moeglich, gelten + die anderen Parameter. + + EXP zeichenkette + + Es wird die Zeichenkette vor dem Exponentenwert defi- + niert. + Standard: 'E' + + Beispiel + + Es sollen verschiedene Darstellungsmoeglichkeiten der Varia- + blen $1 mit dem Wert 123.45 veranschaulicht werden: + + + 1) real $1 + 0.123450E 03 + + 2) real length 20 scale 2000 before 3 point 2 exp 'EXP' $1 + 246.90 EXP 03 + 3) real length 20 scale 2000 before 3 point 2 + exp 'EXP' ignore $1 + 246900.00 + 4) real length 20 norm -2 $1 + 12345.000000E-02 + 5) real length 15 exp '*10**' point 1 $1 + 0.1*10** 03 + + Die Darstellung noch einmal zum besseren Vergleich: + + 1) 0.123450E 03 + 2) 246.90 EXP 03 + 3) 246900.00 + 4) 12345.000000E-02 + 5) 0.1*10** 03 + + + Pseudographische Ausgabe + + Der Reportgenerator ermoeglicht die einfache Darstellung + von Diagrammen. + + _ _ + |_ _ _ _ | + || | | | | + || FROM | | VAR int| | + GRAPHIC laenge || TO | | real | | num daten + |~ ~ ~ ~ | + | WITH zeichenkette | + ~ ~ + + Der durch die Grenzen FROM und TO definierte Wertebereich + wird auf den mit 'laenge' angegebenen Darstellungsbereich + abgebildet. Die Abbildung erfolgt mit dem bei WITH angege- + benen Zeichen. Ist FROM < TO erfolgt eine linksbuendige und + ist FROM > TO eine rechtsbuendige Darstellung der Pseudogra- + fik in der Spalte. + + Standards: laenge = 50 + FROM 0 + TO 0 + WITH '*' + + Beispiel + + Es soll das Attribut "menge" grafisch dargestellt werden. + Vor der grafischen Darstellung soll der Wert als Integer- + Zahl ausgegeben werden. + + for one do + integer @3 #menge + \6 + graphic @20 from 0 to 10 with '+' #menge + \n + end one + + Darstellung: + + 7 ++++++++++++++ + 3 ++++++ + 4 ++++++++ + 8 ++++++++++++++++ + 1 ++ + 0 + 11 ++++++++++++++++++++ + + Ausgabe von Zeichenkettenwerten + + Fuer die Ausgabe von Zeichenkettenwerten steht die Funktion + CHAR zur Verfuegung: + + + _ _ + | _ _ | _ _ + | | FROM | | | LAST | + CHAR laenge | | TO | number| | VALUE | number + | | BATCH | | | NEXT | + ~ ~ ~ ~ ~ ~ + + Ist die Laenge angegeben, wird die Zeichenkette linksbuendig + in den bereitgestellten Platz eingetragen. Sollte die Zei- + chenkette laenger sein, wird rechts abgeschnitten. Mit FROM + und TO kann die auszugebende Zeichenkette eingeschraenkt + werden. Ist keine Laenge angegeben, wird die Zeichenkette in + ihrer Originallaenge eingetragen. Die Tupelwerte duerfen + nicht numerischer Wertart sein. + + Die Zeichenketten koennen mit der Funktion BATCH ueber meh- + rere Zeilen verteilt werden. Zu beachten ist, dass eine La- + engenangabe nicht die Laenge der auszugebenden Zeichenkette + bestimmt, sondern den bereitgestellten Platz in der Liste. + Dieser Unterschied existiert, da die Zeichenketten ueberwie- + gend in ganzen Worten ausgegeben werden und dadurch Platz + verloren geht. Mit CHAR 110 BATCH 20 werden zum Beispiel ge- + nau 5 Zeilen zu 20 und eine Zeile mit 10 Zeichen gefuellt, + unabhaengig davon, wie lang die Zeichenkette ist. + + Beispiel + + char from 3 #text + \n + char from 5 to 12 #text + + Hat #text die Zeichenkette + + 'PLATSCH BATCH', + + erzeugen die Anweisungen die Zeichenketten + + ATSCH BATCH + SCH BATC + + Ausgabe von Werten verschiedener Formate + + Der Reportgenerator bietet die Moeglichkeit, Werte in einem + anderen Zahlensystem darzustellen. Die Werte werden unab- + haengig von der Wertart als Bitketten interpretiert und in + das gewuenschte Zahlensystem umgewandelt. + + Syntax + + + _ _ + | | + | Systemvariable | + _ _ | Systemkonstante | + | BIT | _ _ |_ _ | + | OCT | | BYTE | laenge || LAST | | + | HEX | | WORD | || VALUE | number | + | DEC | ~ ~ || NEXT | | + ~ ~ ~~ ~ ~ + + + BYTE ist Standard, fuehrende Nullen werden unterdrueckt. + + Ist die Laenge angegeben, wird der Wert entweder vollsta- + endig oder rechts verkuerzt linksbuendig in den bereitge- + stellten Platz eingetragen. Fehlt die Laengenangabe, wird + der Wert vollstaendig in der tatsaechlichen Laenge ausge- + geben. + + Beispiel + + BIT LENGTH 10 VALUE 1 '*' + OCT VALUE 1 '*' + HEX VALUE 1 + NEW LINE + + Wert von VALUE 1: + + a) 71 =i2 + b) 30 =i1 + c) 'ABC' string =c3 + + Darstellung: + + BIT OCT HEX + + a) 0001000111 * 000000 000107 * 0000 0047 + b) 00011110 * 036 * 1E + c) 0100000101 * 101 102 103 * 41 42 43 + + Systemvariable und arithmetische Ausdruecke + + Fuer die Berechnung nicht in der Relation enthaltener Werte + steht im Reportgenerator eine umfangreiche Arithmetik zur + Verfuegung. Dem an C gewoehnten Nutzer wird zusaetzlich die + Notation arithmetischer Zuweisungen gemaess C gestattet. + + Syntax + + + SET systemvariable = arithm_ausdruck + + Durch die SET-Anweisung wird einer Systemvariablen das Er- + gebnis eines arithmetischen Ausdrucks zugewiesen. Bei + den Variablen COLUMN und LINE ist die Wertzuweisung mit + Ausgabeoperationen verbunden. Im arithmetischen Ausdruck + koennen beliebige numerische Werte mit den Operationen + + + + oder += Addition + - oder -= Subtration + * oder *= Multiplikation + : oder := Division + / oder /= ganzzahlige Division + % oder %= Modulodivision (Divisionsrest) + + verknuepft werden. Die Klammerung von Teilausdruecken und + die Negation von Werten ist moeglich. Die Syntax eines + arithmetischen Ausdruckes entspricht der allgemein ueblichen + Notation mathematischer Formeln. + + Beispiele + Allgemeiner Ausdruck: + + SET VAR 30 = ( - VALUE 10 * VAR 3 + 27.12E-7 ) + : ( VAR 7 % 19 / 7.2 ) + + Es soll die durchschnittliche Planerfuellung einer + Plankennziffer VALUE 4 mit den Istwerten VALUE 5 bis 7 + ausgegeben werden: + + SET VAR 1 = ( VALUE 5 + VALUE 6 + VALUE 7 ) / 3 + INTEGER SCALE 100 PIC 'DURCHSCHNITT: 009.99 %' VAR 1 + + Es soll auf die 30. Zeile der Seite positioniert wer- + den: + + SET LINE = 30 + + Tritt waehrend der Bearbeitung eines arithmetischen Aus- + drucks ein Fehler auf, wenn z. B. ein Zeichenkettenwert be- + teiligt ist, wird die Berechnung abgebrochen. Der Variablen + wird kein Wert zugewiesen, sie bleibt unveraendert. + + Boolesche Variable und Ausdruck + + Fuer die wertabhaengige Programmabarbeitung stehen Moeg- + lichkeiten zur Formulierung Boolescher Ausdruecke sowie + 101 logische Variable zur Verfuegung. + + Die Schalter + + SWITCH 0 bis SWITCH 125 + + koennen die zwei Zustaende "ein" und "aus" bzw. TRUE und + FALSE annehmen. + + Initialisiert sind die Variablen bei Programmbeginn mit + FALSE. Fuer ihre Aenderung stehen vier Moeglichkeiten zur + Auswahl. + + Syntax + + + _ _ + | CLEAR | + | COMPLEMENT | SWITCH number + | SET | + ~ ~ + SET SWITCH number = boolean + + Mit CLEAR, COMPLEMENT und SET kann ein bestimmter Schalter + geloescht (FALSE), umgekehrt (TRUE-->FALSE, FALSE-->TRUE) + bzw. gesetzt (TRUE) werden. Die Wertzuweisung erlaubt das + Eintragen des Ergebnisses eines Booleschen Ausdrucks. Dieser + wird durch die Verknuepfung von Boole-Werten (TRUE/FALSE) + gebildet. Verknuepfungsoperatoren sind + + OR || bzw. | logisches "oder" (Disjunktion) + AND && bzw. & logisches "und" (Konjunktion). + + Die Negation erfolgt mit einem vorgestellten NOT oder !. + Eine Klammerung von Teilausdruecken ist moeglich. + + Boole-Werte koennen logische Variablen (SWITCH number ) mit + den Werten TRUE oder FALSE sowie die Ergebnisse von + Vergleichsoperatoren sein. Als Vergleichsoperanden sind alle + numerischen und Zeichenkettenwerte, arithmetische Ausdruecke + sowie NULL (Vergleich auf NULL-Wert) zugelassen. + + Die Operanden koennen miteinander verglichen werden durch: + + + < kleiner + > groesser + != ungleich + <> ungleich + <= kleiner gleich + >= groesser gleich + = gleich. + == gleich + + Zeichenkettenwerte koennen nicht mit numerischen Werten ver- + glichen werden. Ein NULL-Wert ist grundsaetzlich kleiner als + ein beliebiger anderer Wert. Zwei NULL-Werte sind gleich. + + Die Abarbeitungsfolge eines Booleschen Ausdrucks wird durch + die Prioritaet der Operatoren bestimmt. Die hoechste Prio- + ritaet hat die numerische Negation, die kleinste OR: + + + ^ ! (Negationszeichen) + | * / : % + | + - + Prioritaet < > <> != <= >= = == + | NOT ! + | AND && & + | OR || | + ^ + + Bei gleicher Prioritaet erfolgt die Bearbeitung von links + nach rechts. + + Beispiele + + SET SWITCH 10 + COMPLEMENT SWITCH 10 + Mit SET wird die logische Variable 10 TRUE gesetzt und durch + COMPLEMENT umgekehrt, d.h. FALSE + + SET SWITCH 5 = VALUE 3 + 5 < VAR 7 AND + (SWITCH 5 OR SWITCH 10) AND + (VALUE 2 <> NULL OR + NOT VALUE 3 + 100 = VAR 8) + + Der logischen Variablen 5 wird das Ergebnis des Booleschen + Ausdrucks zugewiesen. + + Tritt waehrend der Bearbeitung eines Booleschen Ausdrucks + ein Fehler auf, wird diese abgebrochen und das Ergebnis FAL- + SE gesetzt. + + Steuerung der Programmabarbeitung Verzweigung + + Die Verzweigung ermoeglicht die Abarbeitung von Anweisun- + gen in Abhaengigkeit von einer Bedingung (Boolescher Aus- + druck). + + Syntax + + IF boolean THEN laufsteuerung [ELSE laufsteuerung] END- + IF / ENDI + + Hat der Boolesche Ausdruck den Wert TRUE, wird der THEN- + Zweig abgearbeitet, bei FALSE, wenn angegeben, der ELSE- + Zweig. Abgeschlossen wird die Anweisung durch ENDI. Anstel- + le ENDI kann auch END IF stehen. Die Verschachtelung von + IF-Anweisungen ist moeglich. + + Beispiel + + Es soll das Quartal ermittelt und ausgegeben werden: + + IF MONTH < 6 + THEN IF MONTH < 3 + THEN 'I' + ELSE 'II' + ENDI + ELSE IF MONTH < 9 + THEN 'III' + ELSE 'IV' + ENDI + ENDI + '. QUARTAL' + + Im Dezember wird zum Beispiel IV. QUARTAL ausgegeben. + + Hinweis: + + Die Werte der Systemvariablen MONTH haben den Bereich 0...11 + ! + + Zyklus + + Fuer die Programmierung von Zyklen stehen zwei Anweisungen + bereit. + + Syntax + + + REPEAT number laufsteuerung ENDREPEAT/ENDR + WHILE boolean DO laufsteuerung ENDWHILE/ENDW + + Bei REPEAT wird der Zyklus in einer vorher festgelegten An- + zahl ( number ), jedoch mindestens einmal, durchlaufen. Ist + number ein reeller Wert, wird er durch Abrunden zu einem + ganzzahligen umgewandelt. Der WHILE-Zyklus wird ausgefuehrt, + solange der Boolesche Ausdruck den Wert TRUE liefert. + + Beispiel + + In VALUE 1 bis VALUE 10 stehen Werte zwischen 0 und 100. Die + Werte sollen, wenn sie kleiner als 50 sind, als roemische + Zahlen ausgegeben werden: + + + SET VAR 1 = 1 + REPEAT 10 + IF VALUE VAR 1 < 50 + THEN + SET VAR 2 = VALUE VAR 1 + WHILE VAR 2 >= 10 + DO 'X' SET VAR 2 -= 10 + ENDW + IF VAR 2 >= 5 + THEN 'V' SET VAR 2 -= 5 + ENDI + IF VAR 2 > 0 + THEN REPEAT VAR 2 'I' ENDR + ENDI + SPACE 3 + ENDI + SET VAR 1 += 1 + ENDR + + Sind im Tupel die ersten 10 Werte + 1, 30, 60, 12, 77, 3, 90, 17, 22, 33 + wird in die Liste eingetragen: + I XXX XII III XVII XXII XXXIII + + Fallauswahl + + Die Fallauswahl ist eine Mehrfachverzweigung, die durch + eine Variable gesteuert wird. + + Syntax + + CASE VAR number [IN] [DO laufsteuerung] + [OUT laufsteuerung]ENDCASE/ENDC + + VAR number enthaelt einen ganzzahligen Wert. Ist er 0, wer- + den die Anweisungen nach dem 1. DO abgearbeitet, ist er 2, + die nach dem 2. DO usw. Ist fuer den Wert keine DO- + Konstruktion mehr da, oder ist der Wert kleiner als 1, wer- + den die Anweisungen von OUT abgearbeitet, vorausgesetzt, OUT + ist definiert. Ist VAR number reell, wird durch Abrunden ein + ganzzahliger Wert erzeugt. Die CASE-Klausel wird mit ENDC + abgeschlossen. Die Angabe von IN kann entfallen. + + Achtung + + Die direkte Verschachtelung von CASE-Klauseln ist nicht mo- + eglich! Wird eine CASE-Klausel jedoch in einer Prozedur + vereinbart, ist deren Aufruf innerhalb einer anderen CASE- + Klausel realisierbar. + + Beispiel + + Im Kopf einer Monatsabrechnung soll der Name des Monats + ausgegeben werden: + + 'ABRECHNUNG FUER DEN MONAT ' + SET VAR 1 = MONTH + CASE VAR 1 + DO 'JANUAR' + DO 'FEBRUAR' + DO 'MAERZ' + DO 'APRIL' + DO 'MAI' + DO 'JUNI' + DO 'JULI' + DO 'AUGUST' + DO 'SEPTEMBER' + DO 'OKTOBER' + DO 'NOVEMBER' + DO 'DEZEMBER' + OUT '(DER MONAT MUSS ERST ERFUNDEN WERDEN)' + ENDC + + Im September wird in den Report eingetragen: + ABRECHNUNG FUER DEN MONAT SEPTEMBER + + Prozeduren + + Oft verwendete gleichartige Programmteile koennen in Pro- + zeduren vereinbart werden. + + Syntax + + PROC int laufsteuerung RETURN + + Der Wert fuer int beginnt mit 1. Es sind maximal 50 Werte + vorgesehen. Als Identifikator der Prozedur wird eine Nummer + int festgelegt. Die Definition der Prozeduren muss im Teil + definitionen, die Notierung der Prozedur selbst im Teil pro- + zeduren unmittelbar hinter AS erfolgen. + + Beim Aufruf einer Prozedur werden alle Anweisungen bis RE- + TURN abgearbeitet. + + Syntax + + CALL [PROC] int + + Der Parameter PROC kann ohne Bedeutungsverlust weggelassen + werden. int bestimmt die Nummer der gerufenen Prozedur. Es + gilt der Grundsatz, dass eine Prozedur vor dem ersten Auf- + ruf definiert sein muss. Das ist insbesondere bei der Defi- + nition mehrerer Prozeduren zu beachten. Nicht erlaubt ist + z.B. folgende Konstruktion: + + PROC 1 CALL 5 RETURN + PROC 5 .... RETURN + + Beispiel + + Es soll eine Prozedur fuer die Potenz XLYK definiert werden + (Y = natuerliche Zahl). X wird in VAR 1, Y in VAR 2 erwar- + tet, das Ergebnis steht in VAR 0. + + PROC 1 + SET VAR 0 = 1 + REPEAT VAR 2 + SET VAR 0 = VAR 0 * VAR 1 + ENDR + RETURN + + Die Berechnung von 13L11K wird realisiert mit: + + SET VAR 1 = 13 + SET VAR 2 = 11 + CALL 1 + REAL VAR 0 + + Seitengestaltung + + Eine Seite hat im Reportgenerator folgende Gestalt: + + + COLUMNS + |<----------------->| + ________|___________________|______________ + /|\ | | PAGEBEGIN | | /|\ | + | | L |___________________| L | A | | + | | I | | I | L | | + | | N | Informationsteil | N | L | | + L| | E | | E | | | + I| | B | | E | L | | + N| | E | | N | I | | + E| | G | | D | N | | + S| | I | | | E | | + \|/ | N | | | S | | + ________|___________________| | | | + | | PAGEEND | | | | + | |___________________|___| | | + |________________________________\ /__| + + Die Groesse einer Seite wird durch die Parameter COLUMNS, + LINES und ALL LINES bestimmt. Der Seitenrahmen mit Seiten- + kopf (PAGEBEGIN), Seitenfuss (PAGEEND), linkem Seitenrand + (LINEBEGIN) und rechtem Seitenrand (LINEEND) wird, wenn die + Teile vom Nutzer definiert wurden, vom Reportgenerator auto- + matisch fuer jede Seite aufgebaut. + + Syntax + + _ _ + | LINEBEGIN | + | LINEEND | + ON | PAGEBEGIN | [DO] [laufsteuerung] END/ENDO + | PAGEEND | + ~ ~ + + Ist die Laufsteuerung nicht angegeben, gilt der Rahmenteil + als nicht definiert, d. h. eine existierende Definition wird + geloescht. Sind im Programm mehrere Definitionen fuer einen + Rahmenteil angegeben, gilt immer die aktuellste. + + In PAGEBEGIN und PAGEEND werden Informationen vereinbart, + die auf jeder Seite erscheinen sollen. Das koennen die ak- + tuelle Seitennummer, Ueberschriften, Fussnoten und Tupelwer- + te sein. Aber auch Berechnungen koennen ausgefuehrt werden. + Soll zum Beispiel die Seitennummerierung in 10er Schritten + erfolgen, muss in PAGEBEGIN die Wertzuweisung SET PAGE = PA- + GE + 9 enthalten sein, da bei Seitenwechsel automatisch um 1 + erhoeht wird. Mit LINEBEGIN und LINEEND koennen "Begrenzun- + gen", Zeilennummerierungen u.a. vereinbart werden. + + Der Aufbau eines Rahmenteils wird vorzeitig abgebrochen, + wenn bei PAGEBEGIN und PAGEEND ein unerlaubter Seitenwechsel + veranlasst wird bzw. bei LINEBEGIN und LINEEND ein Zeilen- + vorschub. + + Der Informationsteil nimmt den eigentlichen Inhalt der Seite + auf. Ist eine Zeile laenger als mit COLUMNS festgelegt, wer- + den ueberstehende Zeichen auf eine neue Zeile . Ist eine + Seite voll, wird automatisch ein Seitenwechsel ausgeloest. + + Die Laenge von PAGEBEGIN und PAGEEND ist beliebig und kann + auch von Seite zu Seite unterschiedlich sein. Reicht die + physische Seite nicht aus, wird eine zweite hinzugezogen. + + Auch bei LINEBEGIN und LINEEND ist die Laenge zunaechst un- + erheblich. Allerdings sollte darauf geachtet werden, dass + diese zusammen mit COLUMNS nicht groesser als die maximale + Druckbreite wird. Werden die Seitenraender bis zum physi- + schen Blattende gewuenscht, muss PAGEEND um die entsprechen- + de Anzahl Leerzeilen erweitert werden. + + Die Variable LINE bezieht sich in PAGEBEGIN und PAGEEND auf + die physische Seite, ebenso COLUMN in LINEBEGIN und LINEEND. + + Ansonsten geben diese Variablen die Position bezueglich des + Informationsteils an. + + Beispiel + + Die Funktionsweise der Seitendefinition soll im folgenden an + einer "Mini"-Seite mit 12 Spalten und 7 Zeilen gezeigt wer- + den. Die physische Seite habe eine Laenge von 12 Zeilen: + + report kompl1_r + with + columns 12 + lines 7 + all lines 12 + big + + /* switches */ + define last_page = 1 + + /* domains */ + define d_name = 1 + define d_qual = 2 + define d_pkz = 3 + define d_lohn = 4 + define d_abt = 5 + define d_gruppe = 6 + + define #d_name = char 20 + define #d_qual = char 8 + define #d_pkz = char 12 + define #d_lohn = integer 2 + define #d_abt = integer 2 + define #d_gruppe = integer 2 + + as + + on pagebegin do + '-' 12 + \n + ' Seite: ' + integer @2 page + \n + \2 date + \n + end + + on pageend do + if ! ^last_page then + \6 'b.w.' + \n + end if + '-' 12 + \n + end + + on linebegin do 'I' end + on lineend do 'I' end + + \n2 + \f + + for all do + for one do + if #5 = 26 then + \2 + char #1 batch 10 @20 + \n3 + end if + end one + end all + + set ^last_page + \5 'Ende' ; + + Als Tupelfile wird die Datenmenge des Beispiels kompl_p ver- + wendet. Mit dem Programm wird folgende Liste generiert: + + Erlaeuterung: + + I------------I Seitenkopf + I SEITE: 1 I mit Seitennummer + I 20-MAY-88 I und Datum + I I + I I + I DECKBLATT I Listenkopf + I I + I I + I I + I I + I B.W. I Seitenfuss + I------------I + I------------I + I SEITE: 2 I + I 20-MAY-88 I + I SCHMIDT, I automatischer Zeichenketten- + I HERMANN I umbruch (batch) + I I Zeilenvorschub + I I + I NEUMANN, I + I INGE I + I I Seitenvorschub, da Seite 2 + I B.W. I gefuellt ist + I------------I + I------------I + I SEITE: 3 I + I 20-MAY-88 I + I I + I WARNKE, I + I PETER I + I I + I I + I ENDE I Listenende + I I kein Seitenfuss + I------------I + + + Bei kurzen Programmen steht der Aufwand zur Domaenendefini- + tion in einem unguenstigen Verhaeltnis zur Gesamtbeschrei- + bung. Auch wenn diese Definition im Programm nicht komplett + gebraucht wird, muss sie vollstaendig sein (Identitaet zum + Deskription-File). + + Gruppenwechselprogrammierung + + In diesem Abschnitt sollen Hinweise zur Gruppenwechselpro- + grammierung gegeben werden. Diese erfolgt innerhalb der An- + weisung + + FOR ONE DO ... ENDONE + + waehrend der Bearbeitung eines Tupels. Unterschieden wird in + Gruppenbeginn und -ende. Ein Gruppenbeginn liegt vor, wenn + das Gruppenattribut im aktuellen Tupel verschieden ist von + dem im vorhergehenden Tupel. Das bedeutet natuerlich, dass + ein zum Gruppenattribut sortiertes Tupelfile vorliegen muss. + In einem Booleschen Ausdruck laesst sich das durch den Ver- + gleich VALUE x <> LAST x fuer das Tupelattribut x abtesten. + Verkuerzend kann dafuer auch geschrieben werden + + GROUPBEGIN x. + + Diese Anweisung liefert einen Boole-Wert. Liegt ein Gruppen- + beginn vor, ist er TRUE. + + Das Gruppenende laesst sich durch einen Vergleich mit dem + naechsten Tupel feststellen. Aendert sich das Gruppenattri- + but, bedeutet das das Ende der Gruppe. Abtesten laesst sich + das mit der Konstruktion VALUE x <> NEXT x oder verkuerzend + + GROUPEND x. + + Liegt das Gruppenende fuer das Gruppenattribut x vor, lie- + fert die Anweisung den Wert TRUE. + + Im einfuehrenden Beispiel pers_p ist ein sehr einfacher Fall + der Gruppenwechselprogrammierung angefuehrt. Der Gruppenname + p_abt wird jeweils nur einmal am Beginn einer Gruppe aus- + gegeben. Realisiert wurde das durch die Anweisungen + + IF GROUPBEGIN p_abt THEN + INTEGER @4 #p_abt + END IF + + Ein komplizierteres Beispiel ist im Programm kompl_p ange- + fuehrt. Um eventuell mehr Klarheit zu schaffen, soll nun + noch ein relativ uebersichtliches Beispiel folgen. Fuer die + Relation perskomp ist fuer jede Abteilung und jede Gruppe + sowie fuer alle Mitarbeiter die Summe der Loehne zu berech- + nen und auszugeben: + + report kompl2_r + with + columns 35 + lines 20 + all lines 24 + big + + /* variables */ + define grp_lohn = 1 + define abt_lohn = 2 + define all_lohn = 3 + + /* domains */ + define d_name = 1 + define d_qual = 2 + define d_pkz = 3 + define d_lohn = 4 + define d_abt = 5 + define d_gruppe = 6 + + define #d_name = char 20 + define #d_qual = char 8 + define #d_pkz = char 12 + define #d_lohn = integer 2 + define #d_abt = integer 2 + define #d_gruppe = integer 2 + + as + + on pagebegin do + '-' 35 + \n + ' Seite: ' + integer @2 page + \\15 + date + \n + '-' 35 + \n + end + + on pageend do + '-' 35 + \n + end + + on linebegin do 'I' end + on lineend do 'I' end + + \n2 + \f + set $1 = 0 + set $2 = 0 + set $3 = 0 + + for all do + for one do + set $1 += #4 + set $2 += #4 + set $3 += #4 + if groupend d_gruppe then + \5 'Gruppe' + \15 + integer @4 #d_gruppe + \20 integer @8 $1 ',- M' + \n + set $1 = 0 + end if + if groupend d_abt then + \5 'Abteilung' + \15 + integer @4 #d_abt + \20 integer @8 $2 ',- M ' + \n2 + set $2 = 0 + '-' 35 \n + end if + end one + end all + + \5 'Gesamt' + \20 integer @8 $3 ',- M' + \n + \5 'Listenende' ; + + Bei Abarbeitung wird folgende Liste generiert: + + I-----------------------------------I + I SEITE: 1 20-MAY-88 I + I-----------------------------------I + I I + I I + I DECKBLATT I + I LOHN NACH ABTEILUNGEN UND GRUPPEN I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I-----------------------------------I + I-----------------------------------I + I SEITE: 2 20-MAY-88 I + I-----------------------------------I + I GRUPPE 1 2906,- M I + I ABTEILUNG 0 2906,- M I + I I + I-----------------------------------I + I GRUPPE 12 700,- M I + I ABTEILUNG 10 700,- M I + I I + I-----------------------------------I + I GRUPPE 23 877,- M I + I ABTEILUNG 13 877,- M I + I I + I-----------------------------------I + I GRUPPE 10 1120,- M I + I GRUPPE 23 1986,- M I + I ABTEILUNG 26 3106,- M I + I I + I-----------------------------------I + I GRUPPE 10 1337,- M I + I ABTEILUNG 32 1337,- M I + I I + I-----------------------------------I + I-----------------------------------I + I SEITE: 3 20-MAY-88 I + I-----------------------------------I + I-----------------------------------I + I GRUPPE 2 1337,- M I + I GRUPPE 11 600,- M I + I ABTEILUNG 33 1937,- M I + I I + I-----------------------------------I + I GRUPPE 2 1116,- M I + I GRUPPE 3 1362,- M I + I ABTEILUNG 55 2478,- M I + I I + I-----------------------------------I + I GRUPPE 1 3250,- M I + I GRUPPE 3 1567,- M I + I ABTEILUNG 129 4817,- M I + I I + I-----------------------------------I + I GRUPPE 4 900,- M I + I GRUPPE 5 2790,- M I + I GRUPPE 6 4115,- M I + I GRUPPE 7 2200,- M I + I-----------------------------------I + I-----------------------------------I + I SEITE: 4 20-MAY-88 I + I-----------------------------------I + I ABTEILUNG 199 10005,- M I + I I + I-----------------------------------I + I-----------------------------------I + I GESAMT 28163,- M I + I===================================I + I I + I I + I LISTENENDE I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I I + I-----------------------------------I + + Gruppen koennen auf verschiedenen Ebenen gebildet werden. Im + Beispiel-Tupelfile kann nach der Abteilung gruppiert werden + und innerhalb dieser nach den Gruppen. Die Liste wurde so + definiert, dass eine seitenweise Ausgabe auf dem Bildschirm + erfolgt (HOLD-MODUS). + + + + + + + + + + + + + + + + + + + Schluesselworte + + all end linebegin repeat + and enda lineend report + as endc lines return + batch endi m_day scale + batchline endo minute second + before endr mod set + big endw month space + bit exp new switch + byte false next terminal + call for norm then + case from not time + char graphic null to + clear groupbegin oct true + col groupend on tuple + column hex one value + columns hour or var + complement if out w_day + date ignore page while + day in pagebegin with + dec integer pageend word + default is_dst pic y_day + define last point year + do length proc + else line real diff --git a/WEGA/contrib/ingres/dbs/sys/man/retrieve b/WEGA/contrib/ingres/dbs/sys/man/retrieve new file mode 100644 index 0000000..a4b71fd --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/retrieve @@ -0,0 +1,80 @@ + RETRIEVE(QL) DABA16 RETRIEVE(QL) + + NAME + retrieve - Wiederfinden (Suchen) von Tupel aus einer Rela- + tion + + UEBERSICHT + retrieve [into relname ] (target_list) [where qual ] + + retrieve unique (target_list) [where qual ] + + BESCHREIBUNG + Retrieve stellt alle Tupel bereit, die die Qualifikation er- + fuellen und zeigt sie entweder am Terminal (Standardausgabe) + an oder speichert sie in eine neue Relation. Wurde into mit + relname nicht spezifiziert, werden doppelte Tupel nicht aus- + geblendet. Wenn relname spezifiziert wurde, wird das Ergeb- + nis der Anfrage mit diesem Namen in eine neue Relation ge- + speichert. + + Eine Relation mit diesem Namen und dem Anwender als + Relations-Eigentuemer darf nicht bereits existieren. Der + retrieve Anwender wird zum Eigentuemer der neuen Relation. + Die Relation wird die Domaenen-Namen besitzen, die in der + target_list als result_attnames spezifiziert wurden. Die + neue Relation wird vom System fuer sieben Tage geschuetzt, + falls der Nutzer nicht explizit durch eine save Anweisung + das Schutzdatum der Relation verlaengert. + + Wenn das Schluesselwort unique spezifiziert wird, werden die + Tupel nach der Reihenfolge der angegebenenen Domaenen sor- + tiert und doppelte Tupel vor der Anzeige entfernt. + + + Das Schluesselwort all kann benutzt werden, um alle Domaenen + wiederzufinden. + + Wenn kein Ergebnis-Relations-Name relname spezifiziert wur- + de, wird das Ergebnis der Anfrage am Terminal angezeigt und + nicht gespeichert. Doppelte Tupel werden bei einer Anzeige + am Terminal nicht entfernt. + + Das Format, in dem die Domaenen angezeigt werden, kann zum + Zeitpunkt des iql-Aufrufes definiert werden (iql(mutos)). + + Wenn eine Ergebnis-Relation spezifiziert wurde, erfolgt + standardmaessig eine Modifikation der Ergebnis-Relation in + die Speicherungsstruktur "cheapsort", wobei doppelte Tupel + entfernt werden. + + Wenn die Standardstruktur "cheapsort" nicht gewuenscht wird, + kann der Nutzer zum Zeitpunkt des iql-Aufrufes diese Stan- + dardannahme mit dem -r Flag ueberschreiben (iql(mutos)). + + Nur der Relations-Eigentuemer und Anwender mit retrieve Be- + fugnis koennen die Anweisung nutzen. + + + BEISPIEL[E] + /* Finde alle Beschaeftigten, die mehr als ihr + Leiter verdienen */ + + range of p is personal + range of l is personal + retrieve (p.name) where p.leiter = l.name + and p.gehalt > l.gehalt + + /* Finde alle Domaenen fuer Personen, + die mehr als das Durchschnittsgehalt verdienen */ + + retrieve into temp (p.all) where p.gehalt > avg(p.gehalt) + + /* Wiederfinden der Beschaeftigtennamen, sortiert */ + + retrieve unique (p.name) + + SIEHE AUCH + iql(mutos), modify(ql), permit(ql), ql(iql), range(ql), + save(ql) + FEHLERQUELLEN diff --git a/WEGA/contrib/ingres/dbs/sys/man/rp_desc b/WEGA/contrib/ingres/dbs/sys/man/rp_desc new file mode 100644 index 0000000..7039389 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/rp_desc @@ -0,0 +1,41 @@ + RP_DESC(MUTOS) DABA16 RP_DESC(MUTOS) + + NAME + rp_desc - Drucken eines Domaenen-Beschreibungs-Files + + UEBERSICHT + rp_desc [desc-file] + + BESCHREIBUNG + Der Parameter desc-file muss angegeben werden, wenn der + Standard-File-Name desc nicht zutrifft. + + + Rp_desc druckt ein Domaenen-Beschreibungs-File, das durch rd + (rd(mutos)) oder rc (rc(mutos)) aus einem Report-Quellcode- + File einschliesslich Domaenen-Beschreibung erzeugt wurde, in + lesbarer Form. + + Dieses File enthaelt eine Tabelle, die die Beschreibung der + Domaenen eines Tupels darstellt und vom Report-Generator zur + Lokalisation der Domaenen eines Tupel benutzt wird. + + In der Tabelle beschreibt jede Zeile eine Domaene. Die + Spalten enthalten die Domaenenreihenfolge (mit 1 beginnend), + den Domaenentyp, die Domaenenlaenge und die Verschiebung + (Offset, mit 0 beginnend) der Domaene vom Tupelanfang. + + BEISPIELE + rp_desc pers_d + rp_desc > beispiel + cat beispiel + + | field | type | len | off | + |~~~~~~~|~~~~~~~|~~~~~~~|~~~~~~~| + | | | | | + | | | | | + |~~~~~~~|~~~~~~~|~~~~~~~|~~~~~~~| + | | | | | + + SIEHE AUCH + rc(mutos), rd(mutos), rg(mutos), report(mutos), report(daba) diff --git a/WEGA/contrib/ingres/dbs/sys/man/toc b/WEGA/contrib/ingres/dbs/sys/man/toc new file mode 100644 index 0000000..04cc7db --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/man/toc @@ -0,0 +1,379 @@ + KOMPONENTENUEBERSICHT(DABA) DABA16 KOMPONENTENUEBERSICHT(DABA) + + AMXI(DABA) - Einbettung der Datenmanipulationssprache AMX in + "C" + + + EQL(DABA) - Eingebettetes QL-Interface + + + IQLI(DABA) - Interaktives QL-Interface von DABA + + + REPORTI(DABA) - Reportunterstuetzung + + + + + + + + + + + + + KOMPONENTENUEBERSICHT(IQL) DABA16 KOMPONENTENUEBERSICHT(IQL) + + MACROS(IQL) - Makro-Unterstuetzung des Terminal-Monitors + + + MONITOR(IQL) - interaktiver Terminal-Monitor + + + QL(IQL) - DABA-Anfragesprache (Query Language) + + + + + + + + + + + + + + + + + KOMPONENTENUEBERSICHT(QL) DABA16 KOMPONENTENUEBERSICHT(QL) + + APPEND(QL) - Anfuegen (Einfuegen) neuer Tupel an die Rela- + tion + + append [to] relname (target_list) [where qual] + + COPY(QL) - Kopieren von Daten zwischen Relation und MUTOS- + File + + copy relname (domname = format {, domname = format }) + + direction "filename" + + CREATE(QL) - Erstellen einer neuen Relation + + create relname (domname1 = format {, domname2 = format + }) + + DEFINE(QL) - Definieren Sicht, Befugnisse oder Integritaets- + bedingungen + + define view name (target_list) [ where qual ] + + define permit oplist on tuple_variable [ (attlist) ] to + name [ at term ] [ from time to time ] + [ on day to day ] [ where qual ] + + define integrity on tuple_variable is qual + + DELETE(QL) - Loeschen von Tupel aus einer Relation + + delete tuple_variable [where qual] + + DESTROY(QL) - Zerstoeren einer bestehenden Relation + + destroy relname { , relname } + + destroy [ permit | integrity ] relname + [ integer { , integer } | all ] + + HELP(QL) - Anzeigen von Nutzungs- oder Datenbank- + Informationen + + help [ relname ] [ "[komponentenname]" ] + {, relname}{, "[komponentenname]"} + + help view relname {, relname} + + help permit relname {, relname} + + help integrity relname {, relname} + + INDEX(QL) - Erstellen eines Sekundaerindex ueber eine Rela- + tion + + index on relname is indexname (domain1 { ,domain2 }) + + MODIFY(QL) - Modifizieren der Speicherungsstruktur einer Re- + lation + + modify relname [ to storage_structure [ on key1 + [ : sortorder ] { , key_n [ : sortorder ] } ] + [ where [ fillfactor = n ] + [ , minpages = n ] [ , maxpages = n ] ] ] + + PERMIT(QL) - Zufuegen von Befugnissen zu einer Relation + + define permit oplist on tuple_variable [ (attlist) ] + + to name [ at term ] [ from time to time ] + + [ on day to day ] [ where qual ] + + PRINT(QL) - Drucken von Relationen + + print relname {, relname} + + RANGE(QL) - Deklarieren einer Variablen (Tupelvariablen) ue- + ber einer Relation + + range [ [ of ] tuple_variable is relname ] + + REPLACE(QL) - Ersetzen von Domaenen-Werten in einer Relation + + replace tuple_variable (target_list) [where qual] + + RETRIEVE(QL) - Wiederfinden (Suchen) von Tupel aus einer Re- + lation + + retrieve [[into] relname ] (target_list) [where qual ] + + retrieve unique (target_list) [where qual ] + + SAVE(QL) - Verlaengern des Schutzdatums einer Relation + + save relname until month day year + + VIEW(QL) - Definieren einer Sicht (virtuellen Relation) + + define view name (target_list) [ where qual ] + + + + + + + + + + + + + + + + + + + + + + + + + KOMPONENTENUEBERSICHT(MUTOS) DABA16 KOMPONENTENUEBERSICHT(MUTOS) + + AMX(MUTOS) - AMX-Compiler + + amx [ flags ] file.x + + amxf [ flags ] file.x + + samx [ flags ] file.x + + oamx [ flags ] file.x + + oamxf [ flags ] file.x + + COPYDB(MUTOS) - Kopieren einer Datenbank + + copydb [ -uname ] dbname directory { relname } + + COPYR(MUTOS) - Kopieren von Daten zwischen Relation und + MUTOS-File + + copyr [ flags ] dbname relname { domname format }) + into/from file + + CREATDB(MUTOS) - Erstellen einer Datenbank + + creatdb [ -uname ] [ -e ] [ -m ] [ -/+c ] + [ -/+q ] [ -1 | -2 | -4 | -8 ] dbname + + + CREATER(MUTOS) - Erstellen einer neuen Relation + + creater [ flags ] dbname relname { domname format } + + DESTROYDB(MUTOS) - Zerstoeren einer bestehenden Datenbank + + destroydb [ -s ] [ -m ] dbname + + DESTROYR(MUTOS) - Zerstoeren einer bestehenden Relation + + destroyr [ flags ] dbname { [ permit | integrity ] rel- + name [ integer { , integer } | all ] } + + EQC(MUTOS) - Aufruf des EQL-Praecompilers + + eqc [ -d ] [ -f ] [ -r ] file.q {file.q} + + HELPR(MUTOS) - Anzeigen von Informationen ueber die Relatio- + nen der Datenbank + + helpr [ flags ] dbname [ [ integrity | permit | view ] + {relname} | all ] + + INDEXR(MUTOS) - Erstellen eines Sekundaerindex ueber eine + Relation + + indexr [ flags ] dbname prim_rel index_rel { domname } + + IQL (MUTOS) - Aufruf des interaktiven Ql-Interface des DBBS + DABA16 + + iql [ flags ] dbname [ process_table ] + + MANR(MUTOS) - Anzeigen der Komponentenbeschreibungen + + manr {komponentenname} + + MODIFYR(MUTOS) - Modifizieren der + + modifyr [ flags ] dbname relname [ storage_strukture + { domname [ :sortorder ] } ] + + PRINTR(MUTOS) - Drucken von Relationen + + printr [ flags ] dbname { relname } + + PURGE(MUTOS) - Zerstoeren verfallener und temporaerer Rela- + tionen + + purge [ -f ] [ -p ] [ -a ] [ -s ] [ -w ] { dbname } + + RC(MUTOS) - REPORT-Compiler + + rc {[ flags ] file} + + RD(MUTOS) - Erstellen eines Domaenen-Beschreibungs-Files + oder eines Reportskelettes + + rd [ flags ] dbname relname [file] + + REFR(MUTOS) - Anzeige einer Komponenten-Kurzbeschreibung + + refr { komponentenname } + + REPORT MUTOS() - DABA-Reportunterstuetzung + + + rc {[ flags ] file } + + rd [ flags ] dbname [ file ] + + rg [ flags ] + + rp_desc [ desc_file ] + + + RESTORE(MUTOS) - Wiederherstellen nach einem DBBS- oder + MUTOS-Absturz + + restore [ -s ] [ -a ] [ -f ] [ +/-p ] [ +/-w ] + [ -S ] [ -P ] { dbname } + + RG(MUTOS) - REPORT-Generator (Interpreter) + + rg [ flags ] + + RP_DESC(MUTOS) - Drucken eines Domaenen-Beschreibungs-Files + + rp_desc [desc-file] + + SAVER(MUTOS) - Verlaengern des Schutzdatums einer Relation + + saver [ flags ] dbname relname month day year + + SYSMOD(MUTOS) - Modifizieren (Optimieren) der Systemrelatio- + nen + + sysmod [ flags ] dbname { relname } + + USERSETUP(MUTOS) - Erstelle Nutzer-File + + + + + + + + + + + + + + + + + + + + + KOMPONENTENUEBERSICHT(FILES) DABA16 KOMPONENTENUEBERSICHT(FILES) + + DAYFILE(FILES) - DABA-Login-Nachrichten + + + DBTMPLT(FILES) - Datenbank-Spezifikation(Template) + + + ERROR(FILES) - Files mit DABA-Fehlernachrichten + + + LIBAMX(FILES) - AMX-Laufzeit-Bibliothek + + + LIBQ(FILES) - EQL Laufzeit-Bibliothek + + + STARTUP(FILES) - DABA-Start-File + + + USERS(FILES) - DABA-Nutzerverzeichnis + + + + + KOMPONENTENUEBERSICHT(ERROR) DABA16 KOMPONENTENUEBERSICHT(ERROR) + + EINFUEHRUNG(ERROR) - Einfuehrung in die Fehlernachrichten + + + PARSER(ERROR) - Zusammenstellung der Parser- + Fehlernachrichten + + Fehlernummern 2000 - 2999. + + QRYMOD(ERROR) - Zusammenstellung der Fehlernachrichten der + Anfragenmodifikation + + Fehlernummern 3000 - 3999. + + OVQP(ERROR) - Zusammenstellung der Fehlernachrichten des + Ein-Variablen-Anfragenprozessors + + Fehlernummern 4000 - 4499. + + DECOMP(ERROR) - Zusammenstellung der Fehlernachrichten der + Dekomposition + + Fehlernummern 4500 - 4999. + + DBU(ERROR) - Zusammenstellung der Fehlernachrichten der Da- + tenbankdienste + + Fehlernummern 5000 - 5999 diff --git a/WEGA/contrib/ingres/dbs/sys/ref/rp_desc b/WEGA/contrib/ingres/dbs/sys/ref/rp_desc new file mode 100644 index 0000000..221c684 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/ref/rp_desc @@ -0,0 +1,27 @@ + RP_DESC(MUTOS) DABA16 RP_DESC(MUTOS) + + NAME + rp_desc - Drucken eines Domaenen-Beschreibungs-Files + + UEBERSICHT + rp_desc [desc-file] + + BESCHREIBUNG + Der Parameter desc-file muss angegeben werden, wenn der + Standard-File-Name desc nicht zutrifft. + + + BEISPIELE + rp_desc pers_d + rp_desc > beispiel + cat beispiel + + | field | type | len | off | + |~~~~~~~|~~~~~~~|~~~~~~~|~~~~~~~| + | | | | | + | | | | | + |~~~~~~~|~~~~~~~|~~~~~~~|~~~~~~~| + | | | | | + + SIEHE AUCH + rc(mutos), rd(mutos), rg(mutos), report(mutos), report(daba) diff --git a/WEGA/contrib/ingres/dbs/sys/ref/save b/WEGA/contrib/ingres/dbs/sys/ref/save new file mode 100644 index 0000000..519ffdf --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/ref/save @@ -0,0 +1,22 @@ + SAVE(QL) DABA16 SAVE(QL) + + NAME + save - Verlaengern des Schutzdatums einer Relation + + UEBERSICHT + save relname until month day year + + BESCHREIBUNG + Save wird benutzt, um das Schutzdatum ueber die standard- + maessigen 7 Tage hinaus zu verlaengern. + + month ist der Monat (1,2,...12), day der Tag (1,2,3...) und + year das Jahr (...1988,1989...). + + + BEISPIEL[E] + /* Schuetzen der Relation "personal" bis Ende Februar 1987 */ + save personal until 2 28 1987 + + SIEHE AUCH + create(ql), purge(mutos), retrieve(ql), saver(mutos) diff --git a/WEGA/contrib/ingres/dbs/sys/ref/saver b/WEGA/contrib/ingres/dbs/sys/ref/saver new file mode 100644 index 0000000..aae96d7 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/ref/saver @@ -0,0 +1,20 @@ + SAVER(MUTOS) DABA16 SAVER(MUTOS) + + NAME + saver - Verlaengern des Schutzdatums einer Relation + + UEBERSICHT + saver [ flags ] dbname relname month day year + + BESCHREIBUNG + Die Aussagen zu save(ql) gelten auch fuer saver(mutos). + + Sie sind jedoch um Folgendes zu ergaenzen: + + Flags: + + -uname erlaubt es, sich als Nutzer mit dem Login-Namen + name auszugeben (iql(mutos)). + + +/-w Warten oder kein Warten auf die Nutzbarkeit + der Datenbank dbname (iql(mutos)). diff --git a/WEGA/contrib/ingres/dbs/sys/ref/startup b/WEGA/contrib/ingres/dbs/sys/ref/startup new file mode 100644 index 0000000..223a6e2 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/ref/startup @@ -0,0 +1,19 @@ + STARTUP(FILES) DABA16 STARTUP(FILES) + + NAME + .../sys/etc/startup - DABA-Start-File + + BESCHREIBUNG + Dieses File wird durch den DABA-Terminal-Monitor zum Login- + Zeitpunkt gelesen. Es wird vor dem Start-File gelesen, das + im File "users" spezifiziert werden kann. Der Hauptzweck + besteht darin, einen neuen Standard-Editor und/oder eine + Standard-Shell fuer den Aufruf durch das \e oder das \s + Monitor-Kommando zu definieren. + + Diese Spezifikationen sind Standard-Spezifikationen und gel- + ten fuer alle Nutzer. Durch Spezifikationen des File + "users" koennen sie ueberschrieben werden. + + SIEHE AUCH + monitor(iql), users(files) diff --git a/WEGA/contrib/ingres/dbs/sys/ref/sysmod b/WEGA/contrib/ingres/dbs/sys/ref/sysmod new file mode 100644 index 0000000..10ccc74 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/ref/sysmod @@ -0,0 +1,33 @@ + SYSMOD(MUTOS) DABA16 SYSMOD(MUTOS) + + NAME + sysmod - Modifizieren (Optimieren) der Systemrelationen + + UEBERSICHT + sysmod [ flags ] dbname { relname } + + BESCHREIBUNG + Sysmod modifiziert die relation-, attribute-, integrities-, + protect-, tree-, references- und indexes- Systemrelationen + in optimale Speicherungsstrukturen, wenn nicht wenigstens + einer der Parameter relation, attribute, integrities, pro- + tect, tree, references, oder indexes fuer die Systemrelatio- + nen relname spezifiziert wurde. Wurden diese Parameter an- + gegeben, werden nur die entsprechenden Systemrelationen mo- + difiziert. + Die Systemrelationen werden so modifiziert, dass eine maxi- + male Zugriffsleistung bei der Nutzung von DABA erreicht + wird. + Der Anwender muss der Datenbankadministrator (DBA) der spe- + zifizierten Datenbank oder der DABA-Systemverantwortliche + (Verwendung des -s Flags) sein. + + Sysmod sollte abgearbeitet werden, wenn die Datenbank er- + stellt wurde. Danach sollte es periodisch angewendet wer- + den, um eine groesstmoegliche Zugriffsleistung zu erhalten. + Wenn einige Relationen und Sekundaerindizes erstellt + und/oder zerstoert wurden, ist sysmod des oefteren abzuar- + beiten. + + SIEHE AUCH + modify(ql), modifyr(mutos), restore(mutos) diff --git a/WEGA/contrib/ingres/dbs/sys/ref/toc b/WEGA/contrib/ingres/dbs/sys/ref/toc new file mode 100644 index 0000000..137ad15 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/ref/toc @@ -0,0 +1,13 @@ + +toc range eqc restore +append replace helpr rg +copy retrieve indexr rp_desc +create save iql saver +define view manr sysmod +delete amx modifyr usersetup +destroy copydb printr dayfile +help copyr purge error +index creatdb rc startup +integrity creater rd users +modify destroydb refr +print destroyr report diff --git a/WEGA/contrib/ingres/dbs/sys/ref/users b/WEGA/contrib/ingres/dbs/sys/ref/users new file mode 100644 index 0000000..a654bf6 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/ref/users @@ -0,0 +1,59 @@ + USERS(FILES) DABA16 USERS(FILES) + + NAME + .../sys/etc/users - DABA-Nutzerverzeichnis + + BESCHREIBUNG + Dieses File enthaelt die Nutzerinformationen in Feldern, die + durch den Doppelpunkt separiert werden. Es gibt folgende + Felder: + + 0. Nutzername, direkt entnommen aus dem /etc/passwd File. + 1. Nutzercode, zugeordnet durch den DABA- + Systemverantwortlichen. Es muss ein eindeutiger Code + aus zwei Zeichen(Character) sein. + 2. MUTOS-Nutzeridentifikator. Er muss mit dem Eintrag im + File /etc/passwd -ubereinstimmen. + 3. MUTOS-Gruppenidentifikator (gleiche Bemerkung). + 4. Statuswort in oktaler Darstellung. Erlaubte Bit-Werte + sind: + + 0000001 creatdb + Befugnis zur Erzeugung von Datenbanken + 0000002 direct update + Befugnis zum Ueberschreiben der Stapelaenderung + (Aenderund des Hintergrundes). + 0000004 update os system catalogs + Befugnis zum Aendern der Systemkataloge + 0000020 trace flag + Befugnis zur Benutzung der Trace-Flags + 0000100 proctabs + Befugnis zur Benutzung der Prozesstabellen + 0000200 =proctab form + Berechtigung zur Benutzung von undefinierten + Prozesstabellen der Form "=file" + (file ist eine Prozesstabelle im Verzeichnis + .../sys/etc). + 0100000 DABA superuser + Kennzeichen des DABA-Systemverantwortlicher + + 5. Eine Liste von automatisch gesetzter Flags fuer diesen + Nutzer. + 6. Die fuer diesen Nutzer anwendbare Prozesstabelle. + 7. Ein Initialisierungs-File, das durch den DABA-Terminal- + Monitor zum Login-Zeitpunkt gelesen wird. + 8. Kommentarfeld. + 9. Komma separierte Liste von Datenbanken. Wenn die Liste + nicht vorhanden ist, kann der Nutzer jede Datenbank be- + nutzen. Wenn sie mit einem "-" beginnt, kann der Nutzer + jede Datenbank, ausser den nachfolgend spezifizierten + benutzen. Andernfalls kann der Nutzer nur die spezifi- + zierten Datenbanken benutzen. + + WARNUNG: Das Erteilen der Befugnis, spezielle Prozesstabel- + len zu benutzen, ist gleichbedeutend mit dem Ausschalten des + Schutzsystems fuer diesen Nutzer. + + BEISPIEL[E] + daba:aa:5:2:177777:-d:=special:/mnt/daba/.ql:: + gast:ah:35:1:000000:::::demo.gast diff --git a/WEGA/contrib/ingres/dbs/sys/ref/usersetup b/WEGA/contrib/ingres/dbs/sys/ref/usersetup new file mode 100644 index 0000000..f1d37fc --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/ref/usersetup @@ -0,0 +1,53 @@ + USERSETUP(MUTOS) DABA16 USERSETUP(MUTOS) + + NAME + usersetup - Erstelle Nutzer-File + + UEEBERSICHT + usersetup [ - ] + + BESCHREIBUNG + Das /etc/passwd File wird gelesen und zur Erstellung des + DABA-Nutzer-Verzeichnis verwendet, das in ...sys/etc/users + abgelegt ist. Wenn das Flag - gesetzt wird, wird das Ergeb- + nis nach Standardoutput geschrieben. + + Die Struktur des DABA-Nutzer-Files ist in users(files) be- + schrieben. Der Nutzername, sowie die Nutzer- und Gruppeni- + dentifikatoren werden so initialisiert, dass sie mit den + korrespondierenden Eintrittspunkten im /etc/passwd File + identisch sind. Das Status-Feld wird auf 000000 initiali- + siert, ausgenommen fuer den Nutzer daba, bei dem alle Bits + gesetzt sind (alle Berechtigungen). Als Initialisierungs- + File wird das File .ql im Home-Directory (User's Login- + Directory) des Nutzers eingetragen. Das Feld fuer den + "DABA"- Nutzercode wird mit einem aufsteigenden Code, begin- + nend mit 'aa' gefuellt. Alle anderen Felder werden mit Null + initialisiert. + + Nach dem Ablauf von usersetup kann das Nutzerverzeichnis + editiert werden. Bei Nutzern, die eine spezielle Berecht- + igung erhalten sollen, ist das Statusfeld zu aendern + + Falls DABA-Nutzer nach Erstellung des DABA- + Nutzerverzeichnisses im File /etc/passwd zugefuegt oder ge- + loescht werden, ist es notwendig, das Nutzerverzeichnis zu + editieren, um diese Aenderung einzuarbeiten. Das Kommando + usersetup kann nur einmal ausgefuehrt werden, um das Nutzer- + verzeichnis zu initialisieren. + + FILES + .../sys/etc/users + /etc/passwd + + BEISPIEL[E] + usersetup soll befaehigen, das users -File auf einen Aus- + gangsstand zu bringen. + Der Nutzer mit dem Login-Namen "neumann" kann zum Beispiel + durch folgendes Kommando im DABA-Nutzerverzeichnis aufgenom- + men werden: + + usersetup -|fgrep neumann >> .../sys/etc/users + + SIEHE AUCH + iql(mutos), users(file) diff --git a/WEGA/contrib/ingres/dbs/sys/ref/view b/WEGA/contrib/ingres/dbs/sys/ref/view new file mode 100644 index 0000000..ce7d082 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/sys/ref/view @@ -0,0 +1,27 @@ + VIEW(QL) DABA16 VIEW(QL) + + NAME + view - Definieren einer Sicht (virtuellen Relation) + + UEBERSICHT + define view name (target_list) [ where qual ] + + BESCHREIBUNG + Die Syntax der view Anweisung ist die der retrieve into An- + weisung fast identisch. Die Daten werden jedoch physisch + abgelet. Stattdessen wird die Definition gespeichert. + Wenn die Sicht mit dem Namen name spaeter benutzt wird, + erfolgt die Konvertierung der Anfrage, um mit den in + der target_list spezifizierten Domaenen zu operieren. + + + BEISPIEL[E] + range of p is personal + range of a is abt + define view persabt (pname = p.name, p.gehalt, aname = + a.name) + where p.leiter = a.leiter + + + SIEHE AUCH + retrieve(ql), destroy(ql)