a99  V32.6
allegro Windows Hauptprogramm
 Alle Klassen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
aistruc.h
gehe zur Dokumentation dieser Datei
1 // aistruc.h : Strukturen, ident. f. c und c++
2 // 1991- / 2011
3 // Copyright 2011 Universitätsbibliothek Braunschweig, more see bottom
4 
5 
6 #define aiDATA aiDATEI
7 #define aiINDX aiDATEI
8 
9 
10 typedef struct aiDATEI // Indexdatei Steuerbloecke
11 {
12  SHORT settc; // Einstellungen : 60 + HiLo bzw. LoHi
13  uSHORT knotsz; // Knotengroesse
14  uSHORT kresrv; // dflt. blocklaenge (ungenutzt)
15  SHORT xtdfs; // Bytezahl f. Dateivergroesserung
16 
17  SHORT fmod; // file mode (virtual, etc)
18  SHORT flgcls; // flag for type of virtual close
19  SHORT unused1; // fuer spaeter
20  SHORT unused2; // fuer spaeter
21  CHAR coruf; // coruf (corrupt) flag
22  char ftyf; // file type flag, stets 12 (eigtl. obs.)
23  CHAR dupflg; // stets 1 = Mehrfacheintr. zulaessig
24  CHAR unused3; // fuer spaeter
25  PTRL entcnt; // Anz. gueltige Eintr. [nicht genutzt, kostet Leistung]
26  PTRL rmstk; // Oberende des Loeschstapels
27  PTRL lbow; // letzter ByteOffset beim Schreiben
28  PTRL lbof; // Letzter Offset der Datei
29  PTRL serian; // fuer spaeter
30  RECNR wurz; // Baumwurzel
31  RECNR kntds; // Hilfsvar. f. wurz
32  SHORT unused5; // fuer spaeter
33  uSHORT kylgmx; // Max Schl.laenge lfflg-var
34  uSHORT kybmx; // Max Bytes ohne Schl. lfflg-var
35  SHORT maxkv; // max key values Blatt
36  SHORT maxkn; // max key values NichtBlatt
37  SHORT kylgth; // max Schl.Laenge
38  SHORT nummb; // Anzahl Register in der Indexdatei
39  SHORT regnm; // Reg.Nummer (0-10 = 1-11)
40 // char end; // Endemarkierung
41  // Ende der persistenten Header-Angaben
42 
43  // weitere Dinge
44  CHAR datnam[aiNAMX]; // file name
45  PTRL cafp; // Momentane absolute Dateiposition
46  RECNR curknt; // Momentaner Knoten
47 
48  SHORT usrfn; // Dateinummer des users/Prozesses
49  uSHORT lruflg; // lru flag
50  uSHORT numlks; // Anzahl gesperrter Bloecke
51  SHORT knotel; // Momentanes Knotenelement
52  uSHORT reserv; // Reserve f. spaeter
53  CHAR ynv; // 'y' 'm' 'n' 'v'
54  int fdsc; // Dateihandle
55 } aiDATEI;
56 
57 
58 
59 /*
60 Indexdatei Steuerbloecke
61 64 Byte je Register, in den ersten 64 stecken
62 Angaben zum Index als solchem. Viele Bytes werden
63 gar nicht genutzt! Reihenfolge nicht identisch mit aiDATEI!
64 Die Position der 03 in der ersten Zeile ist ein Flag,
65 das bei geoeffneter Datei geaendert wird.
66 
67 Das erste Byte ist 61=LoHi bzw. 62=HiLo (Solaris)
68 
69 61 00 00 08 00 00 00 04 03 00 01 00 00 00 00 00
70 00 0C 01 00 BD 03 00 00 00 00 00 00 FF 57 03 00
71 FF 57 03 00 00 00 00 00 00 50 00 00 00 00 00 00
72 00 00 50 07 F2 07 0D 00 0C 00 9A 00 0C 00 00 00
73 Nur die letzten 7 Byte sind variabel:
74 00 9A =154 = 150+4 (il=150 in .API)
75 00 0C 12 Register (nur 11 genutzt)
76 00 00 dies ist Nr. 0 = Register 1
77 00 unbedeutend
78 
79 Reg.1
80 61 00 00 08 00 00 FF FF FF FF 01 00 00 00 00 00
81 00 0C 01 00 21 00 00 00 00 00 00 00 FF FF FF FF
82 FF FF FF FF 00 00 00 00 00 58 00 00 00 00 00 00
83 00 00 50 07 F2 07 0D 00 0C 00 9A 00 FF FF 01 00 Reg.2
84 
85 Reg.2
86 61 00 00 08 00 00 FF FF FF FF 01 00 00 00 00 00
87 00 0C 01 00 A2 0E 00 00 00 00 00 00 FF FF FF FF
88 FF FF FF FF 00 00 00 00 00 28 01 00 00 00 00 00
89 00 00 50 07 F2 07 0D 00 0C 00 9A 00 FF FF 02 00 Reg.3
90 
91 Reg.3
92 61 00 00 08 00 00 FF FF FF FF 01 00 00 00 00 00
93 00 0C 01 00 E6 01 00 00 00 00 00 00 FF FF FF FF
94 FF FF FF FF 00 00 00 00 00 70 01 00 00 00 00 00
95 00 00 50 07 F2 07 0D 00 0C 00 9A 00 FF FF 03 00 Reg.4
96 
97 usw. bis 12
98 Danach kommen die Datenbloecke, jeder 32x256 = 8192 byte:
99 
100 */
101 
102 
103 // *** Baumstruktur, Knoten und Blaetter
104 
105 typedef struct trstor // B*-Baum Knotenstruktur
106 {
107 // variable Angaben im ARBEITSSPEICHER:
108  RECNR knotid; // Knoten IdNum
109  SHORT kynum; // Schluesselnummer
110  uSHORT acctr; // Zugriffszaehler f. LRU
111  SHORT kylg; // Schl.Laenge
112  SHORT mxkeys; // max Schl. per Knoten
113  uSHORT mxbyt; // max Bytes per Knoten
114  SHORT cprv; // compress Flag, allegro: 12=4+8
115  uSHORT fstbyt; // Erstes Byte von aiG_ky
116  SHORT realg; // wirkl. Laenge des Schl.
117  CHAR coruf; // 'y/n' Knoten wurde upgedatet
118  CHAR *knptr; // Zeiger zu den Schl.Werten des Knotens
119  CHAR *kntptr; // Zeiger zum Knoten aiG_begin fuer read/write
120  CHAR rglfflg; // reg/dupl aiG_ky Flag
121  SHORT kypst; // Aktueller Wert der aiG_ky Pos.Nr
122  SHORT sffct; // aktueller var.Laenge aiG_ky Endstueckzaehler
123  CHAR kyxpns[aiMXLG + 4]; // aiG_ky - Expansion
124 
125 // Persistente Angaben
126 // Nur diese stehen im Kopf des Blocks (Block=8192 Byte = 32x256)
127  RECNR rgtkey; // rechter Nachbar (nachfolg. Block)
128  RECNR lftkey; // linker Nachbar (voriger Block)
129  SHORT ckyv; // Anzahl Schl.
130  uSHORT ckyb; // Anz. Bytes in aiG_ky
131  CHAR lfflg; // BlattFlag: Indikator BLATT/NichtBLATT 1/0
132  CHAR regnr; // Registernummer (0,1,..,10)
133 } aiTRSTR;
134 
135 /* In der DATEI beginnt ein Block mit den persist. Angaben:
136 00 60 00 00 00 50 00 00 EA 00 1E 07 01 00
137  Bl.60 (92) Bl.50 (80) Bl Rg
138  00 8B
139  Anzahl Bytes komprim. vorn hinten
140  dann kommen die Reg.Eintraege:
141 62 65 65 74 68 6F 76 65 6E 2C 20 6C 75 64 77 69 beethoven, ludwi
142 67 20 76 61 6E 00 00 10 89 15 8B 00 00 10 E6 15 g van
143  Satznr vorn hinten
144 D.h. hinter dem Schl. kommen 4Byte f. Satznr, dann 2 f. naechsten Schl.,
145 hier: 15 ident. Bytes vorn, hinten 139 leer
146 dann dessen Text (nur der unkomprim. Teil, in diesem Fall nichts!)
147 */
148 
149 
150 // Wichtige Funktion "aidatpoi" - Datenpointer im Index
151 /* Wenn man diesen Zeiger hat:
152 
153  aiTRSTR *aibloc;
154 
155  und eine Zahl
156 
157  SHORT N;
158 
159  dann, um die Adr. des N. Wertes im Knoten zu erhalten:
160 
161  aidatpoi(aibloc,N) [aicore2.cpp]
162 
163  Das ist dann ein CHAR *
164  und hiermit kriegt man den N. Zeiger im Knoten: (aicore2.cpp)
165 
166  aidatkno(aibloc,N), aipoidor(aibloc,N)
167 
168  in Form eines RECNR (4Byte)
169 
170 */
171 
172 /*
173  Copyright 2011 Universitätsbibliothek Braunschweig
174 
175  Licensed under the Apache License, Version 2.0 (the "License");
176  you may not use this file except in compliance with the License.
177  You may obtain a copy of the License at
178 
179  http://www.apache.org/licenses/LICENSE-2.0
180 
181  Unless required by applicable law or agreed to in writing, software
182  distributed under the License is distributed on an "AS IS" BASIS,
183  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
184  See the License for the specific language governing permissions and
185  limitations under the License.
186 */
187