From 97f943910a32b9c326b354c6682ad03abd01045e Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Wed, 4 Jan 1989 05:58:50 +0000 Subject: [PATCH] ING_DB --- WEGA/contrib/ingres/dbs/ing_src/teil2/lib | 951 ++++++++++++++++++++++ 1 file changed, 951 insertions(+) create mode 100644 WEGA/contrib/ingres/dbs/ing_src/teil2/lib diff --git a/WEGA/contrib/ingres/dbs/ing_src/teil2/lib b/WEGA/contrib/ingres/dbs/ing_src/teil2/lib new file mode 100644 index 0000000..4e5518a --- /dev/null +++ b/WEGA/contrib/ingres/dbs/ing_src/teil2/lib @@ -0,0 +1,951 @@ +.ds RF \f3LIBRARY \f1 +.ds RH \f3GUTIL \f1 +.ds CH - % - +.ds LH Anwendung +.ds LF ING_DB 6.3/0 +.bp +.NH 2 +.ft B +Bibliotheksfunktionen ** +.ft R +.LP +.sp 10 +.NH 3 +.ft B +Vorbemerkung ** +.ft R +.LP +Zwangsl\o'a"'ufig werden bei einem so umfangreichen +Programmkomplex wie ING_DB eine Reihe von Bibliotheken +verwendet. Dieser Abschnitt soll keine Erl\o'a"'uterungen +zum Inhalt und zur Leistung der einzelnen Prozeduren +und Funktionen +bringen, es soll nur auf einige Besonderheiten +hingewiesen werden. Mit dem \o'U"'bergang von UNIX Version 6 +zu Version 7 wurden die Konvertierungsfunktionen +.ft B +atoX +.ft R +in ihrer Parameter\o'u"'bergabe bzw. -\o'u"'bernahme nicht +den Bedingungen der V7-Bibliothek +.ft B +libc.a +.ft R +angepasst. Es ist deshalb sinnvoll in AMX-Programmen +grunds\o'a"'tzlich die V6-Variante zu verwenden, um die +Namensgleichheit zu \o'u"'berbr\o'u"'cken. +.LP +Dar\o'u"'berhinaus kennt die Bibliothek +.ft B +gutil +.ft R +eine Reihe von Funktionen, deren Anwendung durchaus +Erleichterungen bei der Programmierung in C bringen kann, +ohne das Gesamtkonzept zu st\o'o"'ren. Allerdings wird +nachfolgend nur ein sehr bescheidener Teil der Prozeduren +beschrieben. +.NH 3 +.ft B +Funktionen ** +.ft R +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3APPEND \f1 +.DE +.ft B NAME +.IP +append - Block-Verkettung +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +append (b1, l1, b2, l2, b3) +int l1, l2; +char *b1, *b2, *b3; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +Die Bl\o'o"'cke b1 und b2, jeweils mit der L\o'a"'nge l1 und l2, werden +zum Block b3 verkettet. "return" erfolgt mit der Adresse des +ersten Bytes nach b3. +.RE +.sp 1 +.ft B +FEHLER +.ft R +.IP +Es wird nicht gepr\o'u"'ft, ob die Bl\o'o"'cke in unzul\o'a"'ssiger Weise +\o'u"'berlappen. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3ATOF \f1 +.DE +.ft B +NAME +.ft R +.IP +atof - konvertiert eine Zeichenkette in eine Float-Zahl +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +atof (str, val) +char *str; +double *val; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +atof konvertiert eine durch str adressierte Zeichenkette in eine +float-Zahl. Das Ergebnis steht auf der durch val adressierten +Variablen. +.br +.RS +.IP return: 8 +-1 Syntaxfehler +.br +0 keine Fehler +.br +1 \o'U"'berlauf +.RE +.sp 1 +Syntax: +.IP +{}[+|-]{}{}[. ]{}[] +.sp +wobei "sp" ein Leerzeichen, exp=[e|E] der Exponent und int +eine Integer Zahl im Sinne der Konvertierungsfunktion atoi ist. +.RE +.sp 1 +.ft B +SIEHE-AUCH +.ft R +.IP +atoi() +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3ATOI \f1 +.DE +.ft B +NAME +.ft R +.IP +atoi - konvertiert eine Zeichenkette in eine Integerzahl +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +atoi (str, val) +char *str; +int *val; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +atoi konvertiert eine durch str adressierte Zeichenkette +in eine 16-Bit Integer-Zahl. +Das Ergebnis steht auf der durch val adressierten Variablen. +.br +.RS +.IP return: 8 +-1 Syntaxfehler +.br +0 keine Fehler +.br +1 \o'U"'berlauf +.RE +.sp 1 +Syntax: +.IP +{}[+|-]{}{Ziffer}{} +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3ATOL \f1 +.DE +.ft B +NAME +.ft R +.IP +atol - konvertiert eine Zeichenkette in eine Long-Zahl +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +atol (str, val) +char *str; +int *val; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +atol konvertiert eine durch str adressierte Zeichenkette +in eine 32-Bit Integer-Zahl. +Das Ergebnis steht auf der durch val adressierten Variablen. +.RS +.IP return: 8 +-1 Syntaxfehler +.br +0 keine Fehler +.br +1 \o'U"'berlauf +.RE +.sp 1 +Syntax: +.IP +{}[+|-]{}{Ziffer}{} +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3BEQUAL \f1 +.DE +.ft B +NAME +.ft R +.IP +bequal - Test auf Blockgleichheit +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +bequal (a, b, l) +char *a, *b; +int l; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +.ft B +bequal +.ft R +testet zwei Bl\o'o"'cke a und b, beide in der L\o'a"'nge l, +auf Gleichheit. +.RS +.IP return: 8 +1 bei Gleichheit +.br +0 bei Ungleichheit +.RE +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3BITPOS \f1 +.DE +.ft B +NAME +.ft R +.IP +bitpos - h\o'o"'chstwertige Bitposition ermitteln +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +bitpos (w) +.br +int w; +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +bitpos ermittelt die Stellung des h\o'o"'chstwertigen Bits +der 16-Bit Integer-Zahl w. +Die Bits werden von rechts nach links, beginnend mit Null, +aufsteigend numeriert. +.RS +.IP return: 8 +0, . . . , 15 entsprechend der Bitposition, +.br +-1 wenn kein Bit gesetzt ist. +.RE +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3BMOVE \f1 +.DE +.ft B +NAME +.ft R +.IP +bmove - Block Transport +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +char *bmove (a, b, l) +char *a, *b; +int l; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +bmove transportiert l Bytes von a nach b. +Die Sinnf\o'a"'lligkeit von l und ein "\o'U"'berlauf" von b +werden nicht gepr\o'u"'ft. +.IP +"return" erfolgt mit der Adresse des l+1. Elementes von b. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3CONCAT \f1 +.DE +.ft B +NAME +.ft R +.IP +concat - Zeichenketten Verkettung +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +char *concat (s1, s2, s3) +char *s1, *s2, *s3; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +Die Zeichenketten s1 und s2 werden zur Zeichenkette s3 verkettet. +Dabei d\o'u"'rfen s1 und s3 \o'u"'berlappen. +"return" erfolgt mit der Adresse des letzten Bytes (Null-Byte) +von s3. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3FTOA \f1 +.DE +.ft B +NAME +.ft R +.IP +ftoa - konvertiert eine Gleitkommazahl in eine Zeichenkette +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +ftoa (val, str, l, prec, form) +.br +double val; +.br +char *str, form; +.br +int l, prec; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +ftoa konvertiert eine doppeltgenaue Gleitkommazahl val in eine +entsprechende Zeichenkette str. Die Zeichenkette str muss +mindestens in der L\o'a"'nge l+1 vereinbart sein. +Die Genauigkeit prec gibt die Anzahl der Stellen nach dem +Dezimalpunkt an. Mit "form" wird das +Ausgabeformat festgelegt. +Es kann die Werte e, E, f, F, g, G, n<, N annehmen. E steht f\o'u"'r die +exponentielle- und F f\o'u"'r die Gleitkommadarstellung. G und N sind +analog zu F; passt die konvertierte Zahl aber nicht in die +Ausgabebreite, wird auf die exponentielle Form umgeschaltet. +G garantiert die Ausrichtung des Dezimalpunktes, N nicht. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3GETSTR \f1 +.DE +.ft B +NAME +.ft R +.IP +getstr - liesst eine Zeichenkette von der Standard-Eingabe +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +getstr (str, d, n) +char *str, d; +int n; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +Es werden Zeichen von der Standard-Eingabe nach str \o'u"'bertragen +und zwar solange, bis der Begrenzer +.ft B +d +.ft R +erkannt wird. +Dabei werden h\o'o"'chstens n Zeichen \o'u"'bertragen. Wenn der +Begrenzer nach n Zeichen noch nicht erkannt wurde, +werden alle weiteren Zeichen bis zur Erkennung des Begrenzers +\o'u"'bergangen. An Stelle des Begrenzers wird in jedem Falle +das Null-Byte \o'u"'betragen, sodass das Feld str mindestens von +der L\o'a"'nge n+1 sein muss. +"return" erfolgt mit dem Wert 1. Sollte vor der Erkennung des +Begrenzers das file-Ende erkannt werden, wird die Zeichenkette +ebenfalls mit dem Null-Byte abgeschlossen. "return" erfolgt dann +mit dem Wert 0. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3IOCV \f1 +.DE +.ft B +NAME +.ft R +.IP +iocv - konvertiert eine Integer-Zahl in eine Zeichenkette +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +iocv (i) +int i; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +Die Integer-Zahl i wird mittels der Funktion itoa in eine +Zeichenkette konvertiert. Das Ergebniss wird in einem internen +statischen Bereich gespeichert, dessen Adresse durch +"return" zur\o'u"'ckgegeben wird. +.RE +.sp 1 +.ft B +SIEHE AUCH +.ft R +.IP +itoa () +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3ITOA \f1 +.DE +.ft B +NAME +.ft R +.IP +itoa - konvertiert 16-Bit Integerzahl in Zeichenkette +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +itoa (i, str) +int i; +char *str; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +Die Integer-Zahl i wird in eine 7 Byte lange Zeichenkette konvertiert +und in dem durch str adressierten Feld gespeichert. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3LENGTH \f1 +.DE +.LP +.ft B +NAME +.ft R +.IP +length - ermittelt die L\o'a"'nge einer Zeichenkette +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +length (str) +char *str; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +Es wird die Anzahl der Bytes einer Zeichenkette, mit Ausnahme +des die Kette abschliessenden Null-Bytes, ermittelt und +durch "return" zur\o'u"'ckgegeben. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3OATOI \f1 +.DE +.ft B +NAME +.ft R +.IP +oatoi - konvertiert eine Zeichenkette, die eine Oktalzahl +darstellt, in eine Integer-Zahl +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +oatoi (str) +char *str; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +oatoi konvertiert die Zeichenkette str, die nur oktale Ziffern +und kein Vorzeichen enthalten darf, in eine 16-Bit Integer-Zahl. +Die Konvertierung wird beendet, sobald ein Zeichen ungleich einer +Oktalziffer erkannt wird. Der konvertierte Wert wird durch +"return" zur\o'u"'ckgegeben. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3PAD \f1 +.DE +.ft B +NAME +.ft R +.IP +pad - f\o'u"'llt eine Zeichenkette mit Leerzeichen auf +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +pad (str, l) +char *str; +int l; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +pad f\o'u"'llt die Zeichenkette str vom Null-Byte an bis zum +Erreichen der l-ten Position mit Leerzeichen, vorausgesetzt, +l ist gr\o'o"'sser als die L\o'a"'nge der Zeichenkette. +Erf\o'u"'llt l diese Bedingung nicht, wird die Kette nicht ver\o'a"'ndert. +pad wird durch den Aufruf von pmove (str, str, l, ' ') realisiert. +.RE +.sp 1 +.ft B +SIEHE AUCH +.ft R +.IP +pmove () +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3PMOVE \f1 +.DE +.ft B +NAME +.ft R +.IP +pmove - transportiert eine Zeichenkette und f\o'u"'llt auf +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +char *pmove (str, b, l, c) +char *str, *b, c; +int l; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +pmove transportiert die Zeichenkette str in den Speicherbereich b. +Dabei werden genau l Bytes \o'u"'bertragen. Ist die Zeichenkette l\o'a"'nger, +wird abgeschnitten, ist sie k\o'u"'rzer, wird ab Nullbyte mit dem Zeichen +c aufgef\o'u"'llt. +.RE +.lP +------------------------------------------------------------ +.sp 2 +.DS C + \f3PRARGS \f1 +.DE +.ft B +NAME +.ft R +.IP +prargs - protokolliert die Argumente einer Kommandozeile +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +prargs (pc, pv) +int pc; +char **pv; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +prargs protokolliert \o'u"'ber Standardausgabe die Argumente einer +Kommandozeile (main(argc, argv)). Dabei werden Sonderzeichen +(Zeichen, deren oktaler Code zwischen 040 und 0177 liegt) +als Oktalzahl protokolliert. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3SCOMPARE \f1 +.DE +.ft B +NAME +.ft R +.IP +scompare - vergleicht zwei Zeichenketten +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +scompare (stra, la, strb, lb) +char *stra, *strb; +int la, lb; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.tf R +.IP +Zwei Zeichenketten stra und strb werden auf der Basis ihres +ascii-Codes verglichen. Die Anzahl der zu vergleichenden Zeichen +wird durch la bzw. lb definiert. +Die Zeichenkettenl\o'a"'ngen sollten mindestens so gross, wie die +angegebenen Vergleichsl\o'a"'ngen la und lb sein, andernfalls wird +als Vergleichswert das Nullbyte benutzt. +Werden die L\o'a"'ngen la und lb mit dem Wert Null angegeben, so +wird daf\o'u"'r automatisch ein Maximalwert (32767) benutzt. +Ebenso wird, falls la und lb ungleich sind f\o'u"'r die Kette +mit der kleineren Vergleichsl\o'a"'nge das Nullbyte zum Vergleich benutzt. +Leerzeichen werden \o'u"'bergangen. +IP return: 8 +-1 stra < strb +.br + 0 stra = strb +.br + 1 stra > strb +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3SEQUAL \f1 +.DE +.ft B +NAME +.ft R +.IP +sequal - testet zwei Zeichenketten auf Gleichheit +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +sequal (stra, strb) +.br +char *stra, *strb; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +Zwei Zeichenketten stra und strb werden auf absolute Gleichheit getestet. +"return" erfolgt mit 1 bei Gleichheit, sonst mit 0. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3SMOVE \f1 +.DE +.ft B +NAME +.ft R +.IP +smove - Zeichenkette transportieren +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +smove (str, b) +.br +char *str, *b; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +Die Zeichenkette str wird zum Block b transportiert. +"return" erfolgt mit der L\o'a"'nge der transportierten Zeichenkette. +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3SYSERR \f1 +.DE +.ft B +NAME +.ft R +.IP +syserr - Systemfehlermitteilung und Abbruch +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +syserr (ptr) +char *ptr; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +syserr liefert eine Fehlermitteilung \o'u"'ber Standardausgabe +und bricht im Normalfall durch Aufruf der Funktion exit ab. +Argumente f\o'u"'r syserr sind in der gleichen Form +wie bei printf anzugeben. Sie sind allerdings in ihrer +Anzahl auf 5 beschr\o'a"'nkt. +syserr unterscheidet zwei Aufrufarten: +.RS +.IP 1. +der erste Parameter ist Null (die folgenden Parameter +wie bei printf), dann wird genau die +printf Funktion realisiert. +.IP 2. +Der erste Parameter ist nicht Null (also alle Parameter +wie bei printf), dann wird mit Hilfe der externen Variablen +char *Proc_name und int erron, Acceerror eine erweiterte +Fehlerprotokollierung realisiert (UNIX error, +ACCESS METHOD error, mit Angabe einer Fehlernummer +und eventuell vorangestelltem Programmnamen). +.RE +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3XPUTCHAR \f1 +.DE +.ft B +NAME +.ft R +.IP +xputchar - Zeichenausgabe \o'u"'ber Standard-output +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +xputchar (c) +.br +char c; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +xputchar \o'u"'bertr\o'a"'gt alle Zeichen mit Ausnahme derer, +deren oktaler Code gr\o'o"'sser als 040 +und kleiner als 0200 ist (Sonderzeichen) +mittels der Funktion putchar zur Standardausgabe. +Sonderzeichen werden mittels printf als Oktalzahl +zur Standardausgabe geleitet. +Diesen wird das Zeichen "\\" vorangestellt. +.RE +.sp 1 +.ft B +SIEHE AUCH +.ft R +.IP +printf (), putchar() +.RE +.LP +------------------------------------------------------------ +.sp 2 +.DS C + \f3ZTACK \f1 +.DE +.ft B +NAME +.ft R +.IP +ztack - Zeichenkettenverkn\o'u"'pfung in einem Puffer +.RE +.sp 1 +.ft B +SYNOPSIS +.ft R +.IP +.DS L +char *ztack (stra, strb() +.br +char *stra; +char *strb; +.DE +.RE +.sp 1 +.ft B +BESCHREIBUNG +.ft R +.IP +Die Zeichenketten stra und strb werden in einem +statischen Pufferbereich zu einer Zeichenkette verbunden. +"return" erfolgt mit der Anfangsadresse +des Puffers. Bei Puffer\o'u"'berlauf wird mittels Funktion syserr +der Fehlersachverhalt "ztack overflow" nebst Pufferinhalt mitgeteilt. +Der Puffer fasst maximal 100 Zeichen, wobei das Programm so angelegt ist, +das erst nach dem Umspeichern der Zeichenkette in den Puffer auf \o'U"'berlauf +getestet wird. Ein rekursiver Aufruf von ztack ist m\o'o"'glich +(ztack(ztack(x, y), z)). +.RE +.sp 1 +.ft B +SIEHE AUCH +.ft R +.IP +syserr () +.RE