a99  V32.6
allegro Windows Hauptprogramm
 Alle Klassen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
aicore1.cpp
gehe zur Dokumentation dieser Datei
1 // aicore1.cpp/.c : Kernfunktionen Teil 1: Index und Registerstruktur anlegen
2 // 1991 / 2011 ident. f. c und c++
3 // Copyright 2011 Universitätsbibliothek Braunschweig, more see bottom
4 
5 
6 #include "includes.h" // einige Konventionen
7 #include "ai-const.h" // allg. Konstanten
8 #include "aisetup.h" // allg. Einstellungen
9 #include "aistruc.h" // Strukturen
10 #include "aiglobal.h" // glob. Variablen
11 #include "aierrors.h" // Fehlernummern
12 #include "aideclar.h" // Funktionsdeklarationen
13 
14 // ----------------------------------
15 // aiNewInx : Neue Indexdatei anlegen unter interner Nummer rgnum
16 // Die Nummer ist zur Laufzeit die Referenz zur Indexdatei, die zugreifenden
17 // Funktionen sprechen den Index mit dieser Nummer an
18 // Die log. Nummern der Register (s.u. aiNew Reg()) sind dann rgnum+i
19 
20 SHORT aiNewInx(SHORT rgnum, char *filnam, SHORT kylgth, SHORT nmreg, uSHORT expndz, SHORT fmod)
21 
22 // rgnum; Nummer der Datei waehrend der Sitzung, < nregs in NewAIX (s. aiprepar.cpp)
23 // kylgth; max Schl.Laenge
24 // *filnam; Dateiname der Indexdatei
25 // nmreg; Anzahl der Register innerhalb d. Index
26 // xtdfs; Expansionsgroesse bei Dateiverlaengerung
27 // fmod; Dateimodus (aiVRTL or aiPERM)
28 
29 // vor allem: Header der Indexdatei initialisieren
30 {
31  aiINDX *aixf;
32  uSHORT i;
33 
34  aiG_fhln = 0;
35  if (rgnum < 0 || aiG_datmx <= (rgnum + nmreg))
36  return(aierro(FHLFNOR));
37 
38  aixf = aiG_ky + rgnum;
39  i = 0;
40  while( i <= nmreg)
41  {
42  if(aixf->ynv != 'n') return(aierro(FHLFNUS));
43  ++i;
44  ++aixf;
45  }
46 
47  fmod &= ~aiNONSNG;
48  aixf = aiG_ky + rgnum;
49  aixf->regnm = 0;
50  aixf->knotsz = aiG_spn * aiSCSZ;
51  aixf->kybmx = aixf->knotsz - aiSTAT;
52  i = kylgth+2;
53 
54  aixf->maxkn = aixf->kybmx / (i + sizeof(PTRL));
55  if (aixf->maxkn < 3)
56  aiG_fhln = FHLLTLG;
57  else if (kylgth > aiMXLG)
58  aiG_fhln = FHLKLEX;
59  else
60  {
61  aixf->maxkv = aixf->kybmx / i;
62  aixf->kylgmx = (aixf->maxkv - 1) * i;
63 
64  aixf->fmod = fmod;
65  aixf->lruflg = 0;
66  strcpy((char *)aixf->datnam,filnam);
67  if ((aixf->fdsc = aiopn(aixf,fmod)) >= 0) /* file exists */
68  {
69  ai_fclose(aixf,fmod);
70  aiG_fhln = FHLNOCR;
71  }
72  else if ((aixf->fdsc = aicrt(aixf)) < 0)
74  }
75 
76  if (aiG_fhln)
77  return(aiG_fhln);
78  else
79  {
80  aixf->nummb = nmreg;
81  aixf->ynv = 'y';
82  aixf->usrfn = rgnum;
83  aixf->rmstk = aixf->kntds = aixf->wurz = aiNODNUL;
84  aixf->kylgth = kylgth;
85  aixf->ftyf = 12; // frueher Konstante COMPRS
86  aixf->entcnt = aixf->serian = 0;
87  aixf->xtdfs = expndz;
88  i = (aiHDSIZ * (nmreg + 1)) + aixf->knotsz - 1;
89  aixf->lbow = aixf->lbof = ((i / aixf->knotsz) *
90  aixf->knotsz) - 1;
91  aixf->dupflg = 1; // frueher Konstante MULTKEY
92  aixf->coruf = NO;
93  aixf->settc = aiG_opt;
94  aixf->flgcls = aiIXCL;
95 
96  airw(aiWRT,aixf,0,aiG_begin,(uSHORT) (aixf->lbow + 1));
97  if (aiprefwr(aixf))
98  return(aiG_fhln);
99 
100  aixf->knotel = aixf->numlks = 0;
101  aixf->curknt = aiNODNUL;
102  aixf->lruflg = aifixint(aixf);
103  i = 1;
104  while(i++ <= nmreg) (++aixf)->ynv = 'm';
105  return(FHLNUL);
106  }
107 }
108 
109 // --------------------------------------------
110 // Weiteres Register im selben Index einrichten (qrix legt generell 12 an)
111 
112 SHORT aiNewReg(SHORT rgnum, SHORT kylgth, CHAR membno)
113 
114 // rgnum; log. Nr d. Registerdatei, < nregs in NewAIX (s. aiprepar.cpp)
115 // kylgth; max SchlLaenge
116 // membno; Nummer (0,1,..,10) des Registers
117 
118 // Header f. d. Register initialisieren
119 {
120  aiINDX *aixf;
121  SHORT i;
122 
123  aiG_fhln = 0;
124  if ((aixf = aichktf(rgnum)) == NULL)
125  /* no action */ ;
126  else if (aixf->flgcls != aiIXCL)
127  aiG_fhln = FHLFMIN;
128  else if ((aixf += membno)->ynv != 'm')
129  aiG_fhln = FHLFNUS;
130 
131  if (aiG_fhln)
132  return(aiG_fhln);
133 
134  aixf->nummb = -1;
135  aixf->regnm = membno;
136  aixf->fdsc = -1;
137  aixf->knotsz = aiG_spn * aiSCSZ;
138  aixf->kybmx = aixf->knotsz - aiSTAT;
139  i = kylgth+2;
140 
141  aixf->maxkn = aixf->kybmx / (i + sizeof(PTRL));
142 
143  if (aixf->maxkn < 3)
144  return(aierro(FHLLTLG));
145  else if (kylgth > aiMXLG)
146  return(aierro(FHLKLEX));
147 
148  aixf->maxkv = aixf->kybmx / i;
149  aixf->kylgmx = (aixf->maxkv - 1) * i;
150 
151  aixf->fmod = -1;
152  aixf->lruflg = 0;
153  aixf->ynv = 'y';
154  aixf->usrfn = rgnum + membno;
155  aixf->kntds = aixf->wurz = aiNODNUL;
156  aixf->kylgth = kylgth;
157  aixf->ftyf = 12;
158  aixf->entcnt = aixf->serian = aiDRNULL;
159  aixf->xtdfs = -1;
160  aixf->lbow = aixf->lbof = - 1;
161  aixf->dupflg = 1;
162  aixf->coruf = NO;
163  aixf->settc = aiG_opt;
164  aixf->flgcls = aiIXCL;
165 
166  if (aiprefwr(aixf))
167  return(aiG_fhln);
168 
169  aixf->knotel = aixf->numlks = 0;
170  aixf->curknt = aiNODNUL;
171  return(FHLNUL);
172 }
173 
174 /*
175  Copyright 2011 Universitätsbibliothek Braunschweig
176 
177  Licensed under the Apache License, Version 2.0 (the "License");
178  you may not use this file except in compliance with the License.
179  You may obtain a copy of the License at
180 
181  http://www.apache.org/licenses/LICENSE-2.0
182 
183  Unless required by applicable law or agreed to in writing, software
184  distributed under the License is distributed on an "AS IS" BASIS,
185  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
186  See the License for the specific language governing permissions and
187  limitations under the License.
188 */
189