a99  V32.6
allegro Windows Hauptprogramm
 Alle Klassen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
index.hpp
gehe zur Dokumentation dieser Datei
1 // index.hpp : Indexdatei, Struktur und Nutzung
2 // 1995-08-19 : Struktur und Funktionen zur Benutzung einer Indexdatei
3 // Copyright 2011 Universitätsbibliothek Braunschweig, more see bottom
4 
5 // Klasse INDEX (c) UB Braunschweig 1995
6 
7 // Erweitert Klasse EXET (Indexparameter sind besondere Exportparameter!)
8 
9 
10 #ifndef __ALLEGRO
11 #include "allegro.hpp"
12 #endif
13 
14 #include <errno.h>
15 
16 #ifndef __INDEX
17 #define __INDEX
18 
19 // aindex-Variablen u. Deklar. (elementare Funktionen)
20 #include "includes.h" // io functions
21 #include "ai-const.h" // defines constants
22 
23 // Index-Variablen
24 #include "aisetup.h" // configuration options
25 #include "aierrors.h" // error codes
26 #include "aistruc.h" // data structures
27 #include "aiglobal.h" // global variables
28 
29 // aindex-Funktionen
30 #include "aideclar.h" // aindex function declarations
31 
32 
33 #include "exet.hpp" // Klasse EXET
34 
35 // **********************
36 
37 class INDEX : public EXET
38 {
39 public:
40 
41 // int Adn; // internal database number; -> exet.hpp
42  int filmod; // mode for .TBL file
43  int shflag; // set if multiuser required NEU
44  int mult; // ==0 if single user
45  int accf; // access flag 0:readonly
46 
47  char dbDx[PATH_SIZE]; // for name of index file
48 
49  char aix; // MultiX (=='e' for .aex)
50 
51  char dbN[16]; // database name = name of index param
52  // Empfehlung: max. 4 Zeichen!
53  char dbTbl[PATH_SIZE]; // path name of TBL
54 
55  int dbSt; // short titles file handle .STL
56  int dbre; // restrictions file handle .RES
57 
58  RECORD *Rcu; // current record
59 
60 
61 // ******** Konstruktor: Indexdatei konstruieren
62 
63  INDEX(char *dbdir, char *dbn, KONFIG *, int accf=0, int iMult=3,
64  char *inxName=NULL, char *inxParam=NULL);
65 // wobei vorher KONFIG *kfg=new KONFIG("A"); gemacht werden muss
66 
67 // Destruktor
68  virtual ~INDEX();
69 
70 
71 // ******** ZUGRIFFSFUNKTIONEN ****************
72 // Die von aussen benutzbaren Funktionen beginnen mit In...
73 
74 // ******** Kurzzeile zum Satz aus STL besorgen
75 
76 int InSTL(RECNR rn, CHAR *zeile, int md=0); // get entry from STL file
77  // rn = Satznummer
78  // zeile = Adresse fuer den Text
79  // md = 0: keine Umcodierung, 1:Umcodierung (o-Befehle)
80 
81 // find any key:
82 // Sonderfall: key="wort?" sucht nach "wort*" (modus 1)
83 
84 // ********* Find index entries
85  RECNR InFindEnt(int, char *key, char *found, int modus=0, RECNR recn=0L); //$$96022
86  // modus: -2 : key < value
87  // -1 : key <= value
88  // 0 : key == value (wenn recn>0L : auch Satznummer==recn)
89  // 1 : key >= value, aber Anfangsteil von value==key
90  // 2 : key >= value
91  // 3 : key > value
92  // %% GTEKEY(), EQLKEY(), PRKEY()
93  // result: key found is written into found
94  // 0L : nothing (index empty or such)
95 
96 
97 // Version zur Bildung von Ergebnismengen (InGetSet)
98 // Beispiele:
99 // xxx->InGetSet(3,"wort"); wie oft kommt "wort" im Reg. 3 vor?
100 // xxx->InGetSet(3,"wort",1); wie oft kommt "wort*" im Reg. 3 vor?, oder:
101 // xxx->InGetSet(3,"wort?"); wie oft kommt "wort*" im Reg. 3 vor?
102 
103 
104 // $$970405 NEU : restri = "rpoXXX" Restriktion
105 
106 // *********** Erg.Menge bilden
107 
108  RECNR InGetSet(int reg, char *value, int modus=0, RECNR maxr=32767,
109  RECNR *res=0, CHAR *restri=0, unsigned int pr=0, char op=0);
110  // reg: Reg.Nr 1..11
111  // value: zu suchende Zeichenfolge
112  // modus: 0 : key == value (wenn recn>0L : auch Satznummer==recn)
113  // 1 : key >= value, aber Anfangsteil von value==key, d.h. Truncation
114  // maxr: max size of result set
115  // res: array of internal record numbers
116  // restri: qualifier (Restriktion, z.B. "r1>1990" oder "s58=1990")
117  // pr: Anzahl schon vorh. Ergebnisse
118  // op: Operator: 'O' , 'A' , 'N' (OR; AND; NOT)
119  // return: 0 nothing found
120  // -1 more than maxr, res[] is full
121  // >0 number of results
122 
123 // Restriktion anwenden
124  int InRestrict(int rnum,RECNR result[],CHAR *restri,char Cool='A'); // $$970405 NEU
125 
126 // genuegt der Satz der Restriktion?
127  RECNR InRestri(RECNR, CHAR *); // $$970405 NEU
128 
129 
130 // binary srch for r in result set rs between a and b-1
131  int bfind(RECNR r, RECNR *rs, unsigned int a, unsigned b);
132 
133 
134 // remove duplicates from array res of record numbers
135  long int InRemDupl(RECNR *res,RECNR nr,int modus=0);
136 
137 
138 // copy record number rn (hi/lo) to a address rnr
139 
140  void InRecn2Str(RECNR rn, CHAR *rnr);
141 
142 // reverse: copy record number hi/lo from string address to long
143 
144  RECNR InStr2Recn(CHAR *ca);
145 
146  int InOpen(int n); // try opening index file n times
147 
148  int InSwix(char k='d'); // switch to .AkX (MultiX)
149 
150 // up to 5 index files can be open:
151  int activeNr(int); // get a free number and set access flag, 0...4
152  void inactiveNr(int); // reset flag for this database
153 
154 
155 // void Trunc(char); // Trunkierungsmodus einstellen
156 // void Trunc(int); // 0 : Trunk abschalten
157 
158 // int KeyPut(int reg, char *value, long recn); // %% ADDKEY()
159  // Spezialfall: reg==0 : .STL-Eintrag!
160 // int KeyDel(int reg, char *value, long recn); // %% DELCHK()
161 
162 
163 // V14-Hauptfunktion: Referenzen im Datensatz feststellen und ersetzen
164  void InV14Repl(RECORD *, int);
165 
166 // $$970404 :
167 // Ergebnismenge expandieren (satzuebergreifende Suche)
168 // maxr = max size of result set
169 // res = result set array
170 // num = current size of res set
171 // qua = Qualifier character
172 
173  int InExpand(int maxr, RECNR *res, int num, char qua=0);
174 
175  int InKeyCalc(RECORD *Rec, int modus); // ****** alle Schluessel berechnen
176 
177  // Schluesselerzeugung, Ergebnisse in keyString
178  // modus: 0 : ein bestimmter Schl., label=Sprungmarke
179  // es koennen mehrere sein, Trennung Code \08x
180  // ansonsten muss label==NULL sein:
181  // 1 : Primaerschluessel
182  // 2 : naechster Schl. (Ergebnis -1 : Ende)
183 
184  int Tblopen(char*,int iWriteAccess='\07'); // open .TBL or .STL
185 
186  void pad(CHAR *, int md=0); // pad end of key with nulls
187  // md=1: don't remove trailing spaces
188  // 0: remove them
189 
190 // ******* Erg.Menge sortieren:
191 // mode= 0:aufsteigend 1:absteigend
192 // size= Laenge des Sortierschl., wenn 0: keymax-pos
193  void InRsort(RECNR results[],int anz,int pos=0,int size=0, int mode=0);
194 
195  void InIDecode(int&, char*); // umcodieren
196 
197  RECNR InMaxRecNr(); // maximale Satznummer bestimmen
198  // = (laenge der .TBL -2)/4
199 
200  int InIsStop(CHAR *s); // is s a stopword? ret 1 = yes
201 
202 
203 private:
204 
205 // Hilfsfunktion fuer ABASE:Put(): Schl. berechnen, ungueltige loeschen
206  int keyprod(int store, int fmd);
207 
208 // Ist dieser Schl. bereits auf der Liste (waehrend keyprod() laeuft)
209  int checkey(CHAR *);
210 
211  int compk(const void *, const void *); // compare two strings
212 
213 // V14 : x enthaelt Referenz? dann aufloesen
214  void refReplace(CHAR *x, int i4, int i8=0);
215 
216 }; // END class INDEX
217 
218 #endif // von #ifndef __INDEX
219 
220 /*
221  Copyright 2011 Universitätsbibliothek Braunschweig
222 
223  Licensed under the Apache License, Version 2.0 (the "License");
224  you may not use this file except in compliance with the License.
225  You may obtain a copy of the License at
226 
227  http://www.apache.org/licenses/LICENSE-2.0
228 
229  Unless required by applicable law or agreed to in writing, software
230  distributed under the License is distributed on an "AS IS" BASIS,
231  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
232  See the License for the specific language governing permissions and
233  limitations under the License.
234 */
235