a99  V32.6
allegro Windows Hauptprogramm
 Alle Klassen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
exet.hpp
gehe zur Dokumentation dieser Datei
1 // exet.hpp : Exportmodul
2 // 1995-08-19 : Parameterdatei
3 // Copyright 2011 Universitätsbibliothek Braunschweig, more see bottom
4 
5 // Klasse EXET Teil 1 (c) UB Braunschweig 1995
6 
7 // $$991119 : ii NEU
8 
9 // Derives from KONFIG
10 // Exports a RECORD
11 
12 
13 #ifndef __ALLEGRO
14 #include "allegro.hpp"
15 #endif
16 
17 #ifndef __EXET
18 #define __EXET
19 
20 // Die Klassen KONFIG und RECORD werden gebraucht:
21 
22 #include "record.hpp"
23 #include "konfig.hpp"
24 
25 
26 int main_ixl(int, RECORD *, CHAR *,int,int ui4=-2); // %% in ABASE.CPP
27 
28 int main_find(int adn, int ix, CHAR *find, CHAR *found); // $$03-01-30
29 
30 
31 // Einlesen einer Param.datei und Initialisierung der Variablen
32 // wird in exet2.cpp gemacht
33 
34 class EXET
35 {
36  //===========//
37 public: // Variablen //
38  //===========//
39 
40  KONFIG *kfg; // pointer auf die Konfig (muss existieren!)
41 
42  char dbDir[PATH_SIZE]; // name of data dir
43 
44 
45  int Adn; // internal nr of database obj. of current record
46 
47  int Gns; // internal number of EXET obj. (0..9)
48 
49 
50  long xCount; // number of recs exported (statistics)
51 
52 
53  int rkflag,rkp1,rkp2; // for processing of headings (ak commands)
54 
55  int cri, gri; // fuer Variablen von RECORD, s. record.hpp
56 
57 // int gdim; // obsolet
58 
59  CHAR **ga; // String-Array des Datensatzes
60 
61  CHAR *gend; // seine Endadresse
62 
63  int *gi; // Array der internen Kategorienummern
64 
65 
66  int tgl; // f. tgl aus KONFIG
67 
68  CHAR *xk; // space for the real program: # and ! lines
69  // Raum fuer die Exportbefehle (Zeilen mit # und !)
70  // Die Befehle stehen hier in einer internen, kompakteren Form!
71  // Vorverarbeitung in EXET2.CPP
72 
73 
74 // Werte ML und MC in allegro.hpp, (130 und 152)
75 
76  CHAR ct[ML+2][MC];
77  // text output space, MC=152 = max Zeilenlaenge, zl>120 problematisch!
78 
79 
80 // Belegt werden die meisten dieser Werte beim Einlesen der Parameter in exet2.cpp
81 
82  int xl, xi; // Zeilenlaenge und Einrueckung, zl und zi
83  int xll, xli; // Hilfsvar. dazu
84 
85  int ln, xlm, xl1, xl2; // Anz. Zeilen auf laufender Seite, max zm
86 
87  int fct; // form count, fm
88 
89  CHAR xle[10]; // Wert ze = Codes f. Zeilenende
90 
91  CHAR *nonterm[1024]; // index stop words (.API only)
92 
93  CHAR ptb[2][256]; // Export-ZeichenKonvertierung, p/q-Codes
94  CHAR *ptx; // pointer p/q table
95  CHAR *utx; // pointer P/Q table (UTF-8)
96  int pix; // flag 0/1 for normal/alternate table, which one to use
97 
98  CHAR etb[2][256]; // Editor-Konvertierung ASCII-ANSI (o-Tabelle)
99 
100 
101  CHAR *uc, *ucp, *ucq; // Space for Unicode codings $$030427
102  int xuc; // size of Unicode space, Ps=...
103 
104 
105  RECNR xrn; // #nr
106 
107 // Die globalen Variablen der Parameterdatei, z.B. rm=...
108  int xrm, xri, xrg, xrd, hdl, hdc;
109 
110  CHAR *xrK, xrb[80], xrs[80], xre[80], xrf[40];
111 
112  CHAR *xrk; // addr of headings numbers
113 
114  int xfl, xff, xfn, xfc;
115 
116  CHAR xfa[50];
117 
118  CHAR xfb[50], xlb[8], xfs[50]; // form brk, feed sheet
119 
120 
121  int xkS, xks, xkT, xkt, xkb, ntn, nt1;
122 
123  CHAR xkE[50], *xke;
124 
126 
127  CHAR *x0, *xhd, *xft, *xk1, *xk0, *xkc, *x0c;
128 
129  // xk1=Anfangspunkt der abzuarbeitenden Liste, xkc Endpunkt
130 
131 
132 
133  CHAR xpB[20], *xpb; // backspace codes
134 
135  int xpx, xpy, xbl; // code conv. y/n , len xpb
136 
137  CHAR xpi[180]; // printer initialization string
138 
139  long tcn; // Flag, wenn 0, dann zuerst Kopfteil verarb.
140 
142 
143 // char UT1[8], UT2[8]; // UTF-Prae-Postfix, z.B. &# bzw. ;
144 // wird in a99/acon von xcode Uvor nach uebernommen
145 
146 
147 
148 // index specific parameters
149 
150 
151  char *IndeX[13]; // Index headlines, '|' commands in .API
152 
153  // 0..10 = indexes 1..11, 11=STL, 12=Database headline
154 
155  char InamE[100][24]; // Index Kurzbezeichnungen, z.B. PER, TIT, ...
156 
157  // Form: NAM i<praefix> "name" i=1..9,:,;
158 
159 // $$960723 NEU:
160 
161  char *InamX[100]; // Beschreibende Kennzeichnung des Registers
162 
163  // z.B. I PER 1 "Personennamen"
164 
165  int tnix; // total number of index names
166 
167 
168 
169  CHAR delim1[9]; // index delimiter characters, i8 und i9
170 
172 
173 
174 
175  CHAR xisep1[11], xisep2[11], xisep3[50]; // separators i1,i2,i3
176 
177 
178 
179  int keymax; // max key length for index, il=...
180 
181 
182 
183  int stll; // short title length (index 0), i0=...
184 
185  int resl; // restrict length $$970218, ir=...
186 
187  int ress; // number of symbolic names for restrictions
188 
189  char restrics[80]; // string to hold the symbolic names
190 
191 
192 
193  CHAR ecod; // 1:user entry on index must be decoded in browse()
194 
195 
196 
197  int xi4; // Ersetzungsmodus fuer Stammsatz-Referenzen
198 
199  CHAR i5; // Steuerzeichen fuer Stammsatz-Referenz, 0=inaktiv
200 
201  int i6; // Register fuer Stammsatznummern
202 
203  int i7; // Register der SR-Schluessel $$970227
204 
205  char ia; // normal=0, sonst Anfangscode fuer Ersetzungsschl.
206 
207  char ib; // Begrenzercode fuer Ers.schl.
208 
209  char ic; // V14-Modus, 0=alt(_...=...) / 1=neu(_..._...)
210 
211  char ixf[12]; // MultiX, z.B. ix=ddeddd : Index 3 is in file e
212 
213  int ii; // Faktor fuer TBL $$ii ("Aufbohrung")
214 
215 
216 
217 // XXX muss das global sein?
218 
219  CHAR svTab[256]; // sort value tbl for index : i-Befehle
220 
221 
222  int rcd; // Flag 0: decoding already done 1: not yet
223 
224 
225 
226  // PARAMETERS
227 
228  // global
229 
230  int xfm; // form mode: 0:list 1:card 2:separate card
231 
232 
233  int xmod; // flag = 1 bei Indexparam, 0 sonst
234 
235  int xfca; // actual page# of print outp
236 
237  CHAR xpn[84]; // par file title (pn=...)
238 
239  CHAR expo[PATH_SIZE]; // output file name
240 
241  int pos; // position in scanned param line
242 
243  int xrp[2]; // number of glob replacements for this param set
244 
245  // 0 : internal, 1 : external
246 
247  CHAR wildc_e; // Wert hinter ?
248 
249 
250  CHAR *ch1, *ch2; // addresses of #u1 #u2
251 
252  int crl, crc; // cursor line & col (write pos in ct[][] )
253 
254  int lop; // lines-of-output already produced
255 
256  int crix; // current rec or subr starting point
257 
258 
259 
260 // FILES
261 
262  char idp[PATH_SIZE]; // param file name
263 
264 
265  // NEU: um die Adresse einer Ausgabefunktion von aussen zu ueberreichen:
266 
267  void ExOutf(int (*Output)(int));
268 
269 
270  // Dummy-Funktion, wenn keine Datenbank zum Nachladen existiert
271 
272  static int ixld(RECORD *, CHAR *a, int i); // DOS : %% presto3.c
273 
274  // wird per Aufruf ixload(ixld); aktiviert
275 
276 
277 
278  RECORD *rec; // pointer auf zu exportierenden Record
279 
280  CHAR *akey, *bkey; // Schluessel-Hilfsvariablen
281 
282 
283 
284 private:
285 
286  // GLOBAL VARIABLES FOR the OUTPUT PROCEDURE
287  // wird fuer die Zeichenausgabe benutzt:
288 
289  int (*outChar)(int); // external function for character output
290 
291  CHAR **kat; // from KONFIG: descriptor lines
292 
293  short ck1, ck2; // heading #s
294 
295  CHAR cc1, cc2; // their multicodes
296 
297  CHAR *curr_kat; // current kategory text
298 
299  CHAR *curr_head; // current heading text from ak=...
300 
301  int curr_kn; // current kategory internal #
302 
303 
304  int cri_base; // Hilfsvar. b. hierarch. Saetzen
305  int cix0;
306 
307 
308  CHAR *chx; // heading auxil
309 
310  CHAR *aux;
311 
312 
313  CHAR cp[ML+2][MC]; // positional values f. ct[][]
314 
315  int cnr; // card# of rec
316 
317 
318  int nlfl; // nwline flag: >0 if last line has already been written on
319 
320  int prfl; // flag 1 or 0
321 
322  int ftf; // foot mode flag 0:normal 1:foot, 2:head
323 
324 
325  int ami,ami0,cri0; // analytic mode indic, # of start kat
326 
327  int lap; // lines-actually-printed
328 
329  int repfix; // fix# to be repeated after page feed
330 
331 
332  int pfl; // 1: print, 0: not
333 
334 
335  int rmx,rmc; // rec max for outp, rec counter
336 
337  CHAR *prefix0; // addr of embedded prefix
338 
339  int postfix0; // # for embedded postfix
340 
341  CHAR *postfix1; // addr of embedded postfix
342 
343 
344  int dcd; // 1: do coding 0: don't
345 
346 
347  //============//
348 public: // Funktionen // (Methoden)
349  //============//
350 
351 
352 // In exet2.cpp:
353 // Konstruktor
354  EXET(char *, KONFIG *, int md=0, char *dbdir=".\\"); // Konstruktor: APR file einlesen
355 
356  int E2Exet(char *, KONFIG *, int md); // Satz verarbeiten; wird von EXET aufgerufen
357 
358  virtual ~EXET(); // Destructor
359 
360 
361 // In exet.cpp:
362 // most important method:
363 
364  int Exp(RECORD* Rec, int mn=0, CHAR *labl=0);
365 
366  // means: export the record Rec using this param set
367 
368 // ACHTUNG: wenn V14-Ersetzungen vorkommen, dann die Methode ExpV14()
369 // von ABASE aufrufen (abase.cpp), sonst klappts nicht!
370 
371 
372 
373  int cmd_px(CHAR *); // zusaetzliche Param.Zeile von aussen uebergeben
374 
375  // z.B. per #b-Befehl in den Parametern
376  // i.d.R. um einen Grundparameter dynamisch zu aendern
377 
378 // Hauptfunktion
379  int format(int); // aktuellen Datensatz mit diesen Parametern formatieren
380 
381  int h_test(); // move nxt kat#s from xrk to ck1, ck2, ch1, ch2
382  // #d40./20 85+s 27 272 41.+h 3.."; "+w or such
383 
384  int getk(int i); // get addr of nxt kat to ch1 + get label
385  // return 0 if none, i=pos to look nxt
386 
387 
388  int crif(); // set cri to nxt relevant rec
389 
390 // exet3.cpp:
391 
392  void rempunc(CHAR *); // remove punctuation at end of string
393 
394 
395  int replace(int md, int ps); // do global replacements
396 
397  // md 0: restore
398 
399  // 1: replace (execute _ commands)
400 
401  // 2: replace in an uploaded rec
402 
403  // ps 0: internal replaces
404 
405  // 1: editor replaces (Globale Ersetzung)
406 
407  // return: >0: sthg was repl, 0:nthg
408 
409 
410  void restore(); // undo the replacements exet3.cpp
411 
412  void E3Coding(CHAR *a, unsigned int len=0, int md=0); // ANSI-ASCII Coding
413 
414 // len: Laenge der Zeichenkette, 0: bis zum Code 0
415 // md: 0: ASCII->ANSI, 1: ANSI->ASCII
416 
417 // Es werden die o-Befehle umgesetzt.
418 
419 // Wenn o .x y gegeben war, wird (x, y dezimal 0..255)
420 // bei md==0 x->y
421 // 1 y->x umgesetzt
422 
423  CHAR *ExFindKat(int fni,CHAR fmk,int crib); // find kat fni with multcode fmk
424  // ret: addr of kat or NULL
425 
426 
427  void pghf(int ); // page or card head:1 or foot:0
428 
429  CHAR *ExRcode(CHAR *); // decode, remove codes with values 1..3,4,5
430 
431 // frueher aexp3.c:
432  CHAR *fndstr(CHAR *adr,CHAR *st,int m,int qt,int gm=0);
433  // find st in adr, end-of-st = qt
434  // m=0: pos of st in adr , ?=wildcard in st
435  // 1: pos after st
436  // gm=0 : Modus <> wirksam 1: unwirksam //$$081128
437  // return: addr of st or NULL */
438  // SPECIAL CASE: st=[xyz]: find any of xyz in adr
439 
440 // ============================================================
441 
442 // DOS: naexp3.c: ($$970901 diese 2 waren vorher private:
443 
444  short E3SpecKat(CHAR *w); // w="#xyz..." special kat
445 
446  int STRCMP(CHAR *,CHAR *);
447 
448  int ntfind(int, int);
449 
450 
451 // ***********************************************
452 private: // interne Funktionen des Exportsystems
453 
454 
455 // DOS: naexp2.c: (Initialisierungsfunktionen)
456 
457  void par_init(); // initialize this param
458 
459  int pr_par(void); // preprocess the parameter line in Awx
460 
461  int kmode(); // get kat# to be skipped (Zeile mit /nnn )
462 
463  int ex_preproc(); // transform an export command line : => Handb. 10.2.6.1
464 
465  void ersatz(CHAR); // move ersatz to phrase space
466 
467  void get_z(); // get 'fix' and put it to phrase space
468 
469  int geti(int i); // get int value from Awx at pos i, set pos after int
470 
471  int getcs(int i,CHAR *adr); // get control string from wx at pos i to adr
472 
473  void prw(int i); // error
474 
475  int pr_init(); // initialize printer
476 
477 
478  void destruct(); // free memory
479 
480 
481 // Routinen aus DOS NAEXP1.C
482 
483 
484  int form_pr(int hif,CHAR sub); // main routine for form-print
485 
486  // 1:with hierarchy 0:without
487 
488  // not0:called as subrout, 0: as main
489 
490 
491  CHAR *pre_chk(CHAR *,unsigned int *,int ,CHAR *); // chk ad for ersatz, non-sort etc.
492 
493  // and do replacements on CHAR level
494 
495  // current position in field list
496 
497  // 0:normal 1:repetition
498 
499  // prefix list
500 
501  // ret: ax = string for output after preprocessing
502 
503  // nil : do nothing
504 
505  // NULL : do pre/postfixes, but no text
506 
507 
508  void cpr(CHAR *,int ); // cardpr procedure: get out what you find at adr
509 
510 
511  void get_txt_out(); // vorhandenen Text in ct[] ausgeben
512 
513 
514  void pr_this_card(); // print the card just displayed
515 
516 
517  void pr_ct(int ); // print contents of buffer
518  // 1:rec end was reached 0:not yet
519 
520 
521  void pr_foot(); // print foot (ftf=1) or head (ftf=2) text
522 
523 
524  void nwpag(); // neue Seite
525 
526 
527  int cont_card(); // Fortsetzungskarte
528 
529 
530  int kat_pr(int); // alle Kategorien ausgeben
531 
532 
533  void form_brk(); // zwischen 2 Formularen
534 
535 
536  void nxtlin(); // naechste Zeile beginnen
537 
538 
539  void subroutine(CHAR); // Unterprogramm ausfuehren
540 
541 
542  void pr_ct1(int ); // actually print 1 line
543  // print-ersatz used here
544 
545  CHAR *specl(int ,CHAR ,int ); // special kats for output
546 
547 
548  void hier(CHAR *, int ,int ,CHAR); // write hierarchy to adr, #hi
549  // h0=0: go back to crix; 1: to #00
550 
551  int pr_fix(int ); // get and print a fix
552  // return 1:subroutine 0:texel
553 
554  int pr_fixo(int ); // get and print a fix : used for repfix m.. only
555  // return 0:subroutine 1:texel
556 
557  void pr_cs(CHAR *); // print text-related contr string
558 
559  void PR_CS(); // nur f. param. ke
560 
561 
562  void pr_cso(CHAR *); // print form-related contr string
563  // ctrl-cmds &%$# not allowed here
564 
565 
566  int pr_cs1(CHAR *,CHAR); // QT-string to prn
567 
568  int pr_cs2(CHAR *,CHAR); // QT-string to prn
569  // line breaking not relevant
570 
571  void cpc(CHAR); // print 1 ctrl CHAR out
572  // dont raise char counter in line
573 
574  void cps(CHAR); // print 1 CHAR out (screen)
575  // AND raise counter for line breaking!
576 
577  void ctrl_cmd(CHAR , CHAR); // Sonderwerte in einem CS: $%&#h
578 
579  int findfix(int n); // find the texel n
580 
581  void c_init(int ); // init print area
582 
583  void c_init2(); // init foot area (2 lines)
584 
585  double ATOF(CHAR *); // ASCII string -> float number, Rechenfunkt.
586 
587  double NUMBER(CHAR *); // extract number from string
588 
589  int ActiveGns(void); // Verwaltung der Set-Nummer; Vergabe bei Oeffnen der Db
590 
591  void InactiveGns(int); // beim Schliessen einer Db.: Nr. freigeben
592 };
593 
594 #endif
595 
596 
597 /*
598  Copyright 2011 Universitätsbibliothek Braunschweig
599 
600  Licensed under the Apache License, Version 2.0 (the "License");
601  you may not use this file except in compliance with the License.
602  You may obtain a copy of the License at
603 
604  http://www.apache.org/licenses/LICENSE-2.0
605 
606  Unless required by applicable law or agreed to in writing, software
607  distributed under the License is distributed on an "AS IS" BASIS,
608  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
609  See the License for the specific language governing permissions and
610  limitations under the License.
611 */
612