aboutsummaryrefslogtreecommitdiff
path: root/doc/html/openisis_8h_source.html
blob: 685002da9abc6f2cf8e0deee8a906326a0ca0869 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>IsisReader: contrib/openisis/openisis.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.1 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <img id="MSearchSelect" src="search/search.png"
             onmouseover="return searchBox.OnSearchSelectShow()"
             onmouseout="return searchBox.OnSearchSelectHide()"
             alt=""/>
        <input type="text" id="MSearchField" value="Search" accesskey="S"
             onfocus="searchBox.OnSearchFieldFocus(true)" 
             onblur="searchBox.OnSearchFieldFocus(false)" 
             onkeyup="searchBox.OnSearchFieldChange(event)"/>
        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
        </div>
      </li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    </ul>
  </div>
<h1>contrib/openisis/openisis.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">        openisis - an open implementation of the CDS/ISIS database</span>
<a name="l00003"></a>00003 <span class="comment">        Version 0.8.x (patchlevel see file Version)</span>
<a name="l00004"></a>00004 <span class="comment">        Copyright (C) 2001-2003 by Erik Grziwotz, erik@openisis.org</span>
<a name="l00005"></a>00005 <span class="comment"></span>
<a name="l00006"></a>00006 <span class="comment">        This library is free software; you can redistribute it and/or</span>
<a name="l00007"></a>00007 <span class="comment">        modify it under the terms of the GNU Lesser General Public</span>
<a name="l00008"></a>00008 <span class="comment">        License as published by the Free Software Foundation; either</span>
<a name="l00009"></a>00009 <span class="comment">        version 2.1 of the License, or (at your option) any later version.</span>
<a name="l00010"></a>00010 <span class="comment"></span>
<a name="l00011"></a>00011 <span class="comment">        This library is distributed in the hope that it will be useful,</span>
<a name="l00012"></a>00012 <span class="comment">        but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00013"></a>00013 <span class="comment">        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00014"></a>00014 <span class="comment">        Lesser General Public License for more details.</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment">        You should have received a copy of the GNU Lesser General Public</span>
<a name="l00017"></a>00017 <span class="comment">        License along with this library; if not, write to the Free Software</span>
<a name="l00018"></a>00018 <span class="comment">        Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
<a name="l00019"></a>00019 <span class="comment"></span>
<a name="l00020"></a>00020 <span class="comment">        see README for more information</span>
<a name="l00021"></a>00021 <span class="comment">EOH */</span>
<a name="l00022"></a>00022 <span class="preprocessor">#ifndef OPENISIS_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span>
<a name="l00024"></a>00024 <span class="comment">/*</span>
<a name="l00025"></a>00025 <span class="comment">        $Id: openisis.h,v 1.95 2003/11/23 10:25:38 kripke Exp $</span>
<a name="l00026"></a>00026 <span class="comment">        public interface of the openisis lib.</span>
<a name="l00027"></a>00027 <span class="comment">        usage samples of most calls are found in openisis.c</span>
<a name="l00028"></a>00028 <span class="comment">*/</span>
<a name="l00029"></a>00029 
<a name="l00030"></a>00030 <span class="preprocessor">#define OPENISIS_VERSION &quot;0.9.1&quot;</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span>
<a name="l00032"></a>00032 <span class="preprocessor">#ifndef __STDC__</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#       ifndef const</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#               define const</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#       endif</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span>
<a name="l00038"></a>00038 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {
<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span>
<a name="l00042"></a>00042 <span class="comment">/* ************************************************************</span>
<a name="l00043"></a>00043 <span class="comment">        record structure</span>
<a name="l00044"></a>00044 <span class="comment">*/</span>
<a name="l00045"></a>00045 
<a name="l00049"></a><a class="code" href="structOpenIsisField.html">00049</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structOpenIsisField.html">OpenIsisField</a> {
<a name="l00050"></a>00050         <span class="keywordtype">int</span>         tag;
<a name="l00051"></a>00051         <span class="keyword">const</span> <span class="keywordtype">char</span> *val;
<a name="l00052"></a>00052         <span class="keywordtype">int</span>         len;
<a name="l00053"></a>00053 } <a class="code" href="structOpenIsisField.html">OpenIsisField</a>;
<a name="l00054"></a>00054 
<a name="l00055"></a>00055 
<a name="l00058"></a><a class="code" href="structOpenIsisRec.html">00058</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> {
<a name="l00059"></a>00059         <span class="keywordtype">int</span>           dbid;
<a name="l00060"></a>00060         <span class="keywordtype">int</span>           rowid;
<a name="l00061"></a>00061         <span class="keywordtype">int</span>           bytes; <span class="comment">/* total avail bytes */</span>
<a name="l00062"></a>00062         <span class="keywordtype">int</span>           used; <span class="comment">/* total used bytes (originally BWB) */</span>
<a name="l00063"></a>00063         <span class="keywordtype">int</span>           fields;  <span class="comment">/* avail number of fields (originally BWP) */</span>
<a name="l00064"></a>00064         <span class="keywordtype">int</span>           base; <span class="comment">/* byte offset of contents area (after fields) */</span>
<a name="l00065"></a>00065         <span class="keywordtype">int</span>           len;      <span class="comment">/* used number of fields */</span>
<a name="l00066"></a>00066         <span class="keywordtype">int</span>           state;
<a name="l00067"></a>00067         <a class="code" href="structOpenIsisField.html">OpenIsisField</a> field[1];
<a name="l00068"></a>00068 } <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>;
<a name="l00069"></a>00069 
<a name="l00070"></a>00070 <span class="comment">/* compute base from fields (for both raw and cooked record) */</span>
<a name="l00071"></a>00071 <span class="preprocessor">#define OPENISIS_BASESZ( nfields ) ((int)sizeof(int)*(8 + 3*(nfields)))</span>
<a name="l00072"></a>00072 <span class="preprocessor"></span>
<a name="l00073"></a>00073 <span class="comment">/* initialise record of f fields, n bytes */</span>
<a name="l00074"></a>00074 <span class="preprocessor">#define OPENISIS_INITREC( r, n, f ) \</span>
<a name="l00075"></a>00075 <span class="preprocessor">        do { \</span>
<a name="l00076"></a>00076 <span class="preprocessor">                memset( r, 0, n ); \</span>
<a name="l00077"></a>00077 <span class="preprocessor">                (r)-&gt;bytes = (n); \</span>
<a name="l00078"></a>00078 <span class="preprocessor">                (r)-&gt;fields = (f); \</span>
<a name="l00079"></a>00079 <span class="preprocessor">                (r)-&gt;used = (r)-&gt;base = OPENISIS_BASESZ( (r)-&gt;fields ); \</span>
<a name="l00080"></a>00080 <span class="preprocessor">        }       while (0)</span>
<a name="l00081"></a>00081 <span class="preprocessor"></span>
<a name="l00082"></a>00082 <span class="comment">/* init with std 1 field per 100 bytes */</span>
<a name="l00083"></a>00083 <span class="preprocessor">#define OPENISIS_INITSTD( r, n ) OPENISIS_INITREC( r, n, (n)/100 )</span>
<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="comment">/* init a buffer structure which has a member r */</span>
<a name="l00085"></a>00085 <span class="preprocessor">#define OPENISIS_INITBUF( x ) OPENISIS_INITSTD( &amp;x.r, sizeof(x) )</span>
<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define OPENISIS_CLRREC( r ) \</span>
<a name="l00087"></a>00087 <span class="preprocessor">        do { \</span>
<a name="l00088"></a>00088 <span class="preprocessor">                (r)-&gt;len = (r)-&gt;state = 0; \</span>
<a name="l00089"></a>00089 <span class="preprocessor">                (r)-&gt;used = (r)-&gt;base = OPENISIS_BASESZ( (r)-&gt;fields ); \</span>
<a name="l00090"></a>00090 <span class="preprocessor">        }       while (0)</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span>
<a name="l00092"></a>00092 <span class="comment">/* check some invariants (for both raw and cooked record) */</span>
<a name="l00093"></a>00093 <span class="preprocessor">#define OPENISIS_RECOK( r ) \</span>
<a name="l00094"></a>00094 <span class="preprocessor">        ( (r)-&gt;base &lt;= (r)-&gt;used \</span>
<a name="l00095"></a>00095 <span class="preprocessor">        &amp;&amp; (r)-&gt;used &lt;= (r)-&gt;bytes \</span>
<a name="l00096"></a>00096 <span class="preprocessor">        &amp;&amp; (r)-&gt;len &lt;= (r)-&gt;fields \</span>
<a name="l00097"></a>00097 <span class="preprocessor">        &amp;&amp; (r)-&gt;base == OPENISIS_BASESZ( (r)-&gt;fields ) )</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span>
<a name="l00099"></a>00099 
<a name="l00102"></a>00102 <span class="keyword">enum</span> { <span class="comment">/* field types */</span>
<a name="l00103"></a>00103         OPENISIS_FTX =  0, <span class="comment">/* alphanum */</span>
<a name="l00104"></a>00104         OPENISIS_FTA =  1, <span class="comment">/* STRICTLY alpha */</span>
<a name="l00105"></a>00105         OPENISIS_FTN =  2, <span class="comment">/* numeric */</span>
<a name="l00106"></a>00106         OPENISIS_FTP =  3, <span class="comment">/* pattern */</span>
<a name="l00107"></a>00107         OPENISIS_FTB =  4, <span class="comment">/* bool (old: 13) */</span>
<a name="l00108"></a>00108         OPENISIS_FTE =  5, <span class="comment">/* enum (old: 12) */</span>
<a name="l00109"></a>00109         OPENISIS_FTI =  8, <span class="comment">/* ISO (unused) */</span>
<a name="l00110"></a>00110         OPENISIS_FTT =  9, <span class="comment">/* table (unused) */</span>
<a name="l00111"></a>00111         OPENISIS_FTO = 13, <span class="comment">/* structure: operator */</span>
<a name="l00112"></a>00112         OPENISIS_FTR = 14, <span class="comment">/* structure: record */</span>
<a name="l00113"></a>00113         OPENISIS_FTS = 15, <span class="comment">/* structure: sequence */</span>
<a name="l00114"></a>00114         OPENISIS_FTV = 16, <span class="comment">/* enum value (old: 31) */</span>
<a name="l00115"></a>00115         OPENISIS_FTF = 16  <span class="comment">/* subfield (unused) */</span>
<a name="l00116"></a>00116 };
<a name="l00117"></a>00117 
<a name="l00118"></a>00118 <span class="preprocessor">#define OPENISIS_FD_NAMELEN  32</span>
<a name="l00119"></a><a class="code" href="structOpenIsisFd.html">00119</a> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structOpenIsisFd.html">OpenIsisFd</a> {
<a name="l00120"></a>00120         <span class="keywordtype">int</span>   id; <span class="comment">/* tag */</span>
<a name="l00121"></a>00121         <span class="keywordtype">char</span>  subf; <span class="comment">/* subfield char or 0 */</span>
<a name="l00122"></a>00122         <span class="keywordtype">char</span>  type; <span class="comment">/* type */</span>
<a name="l00123"></a>00123         <span class="keywordtype">char</span>  rep; <span class="comment">/* !0 for repeated */</span>
<a name="l00124"></a>00124         <span class="keywordtype">char</span>  slen; <span class="comment">/* length of childs */</span>
<a name="l00125"></a>00125         <span class="keywordtype">short</span> len; <span class="comment">/* max length or enum value */</span>
<a name="l00126"></a>00126         <span class="keywordtype">char</span>  name[OPENISIS_FD_NAMELEN]; <span class="comment">/* name, 0 terminated, max 30 */</span>
<a name="l00127"></a>00127         <span class="keywordtype">char</span>  desc[OPENISIS_FD_NAMELEN]; <span class="comment">/* 0 terminated description */</span>
<a name="l00128"></a>00128         <span class="keywordtype">char</span> *pat; <span class="comment">/* 0 terminated pattern */</span>
<a name="l00129"></a>00129         <span class="keywordtype">char</span> *dflt; <span class="comment">/* 0 terminated default value */</span>
<a name="l00130"></a>00130         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *info; <span class="comment">/* additional application dependent attributes */</span>
<a name="l00131"></a>00131         <span class="keyword">struct </span><a class="code" href="structOpenIsisFd.html">OpenIsisFd</a> **subs; <span class="comment">/* subfield childs */</span>
<a name="l00132"></a>00132 }       <a class="code" href="structOpenIsisFd.html">OpenIsisFd</a>;
<a name="l00133"></a>00133 
<a name="l00134"></a>00134 
<a name="l00137"></a><a class="code" href="structOpenIsisFdt.html">00137</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00138"></a>00138         <span class="keywordtype">int</span>          len;
<a name="l00139"></a>00139         <a class="code" href="structOpenIsisFd.html">OpenIsisFd</a>  *fd;
<a name="l00140"></a>00140         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec; <span class="comment">/* additional fields like formats, worksheets ... */</span>
<a name="l00141"></a>00141         <span class="comment">/* additional internal data like a hash might follow */</span>
<a name="l00142"></a>00142 }       <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a>;
<a name="l00143"></a>00143 
<a name="l00144"></a>00144 
<a name="l00145"></a><a class="code" href="structOpenIsisHit.html">00145</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="comment">/* where a key has a hit */</span>
<a name="l00146"></a>00146 
<a name="l00147"></a>00147         <span class="keywordtype">unsigned</span>       mfn;
<a name="l00148"></a>00148         <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> tag;
<a name="l00149"></a>00149         <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> occ; <span class="comment">/* hit is in occ&apos;th occurence of field tag in row mfn */</span>
<a name="l00150"></a>00150         <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> pos; <span class="comment">/* ... as the pos&apos;th word */</span>
<a name="l00151"></a>00151         <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> dbn; <span class="comment">/* for multi-db index; ignored by now */</span>
<a name="l00152"></a>00152 }       <a class="code" href="structOpenIsisHit.html">OpenIsisHit</a>;
<a name="l00153"></a>00153 
<a name="l00154"></a><a class="code" href="structOpenIsisVal.html">00154</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00155"></a>00155         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> len;
<a name="l00156"></a>00156         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byt[23];
<a name="l00157"></a>00157 }       <a class="code" href="structOpenIsisVal.html">OpenIsisVal</a>;
<a name="l00158"></a>00158 
<a name="l00159"></a><a class="code" href="structOpenIsisKey.html">00159</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00160"></a>00160         <a class="code" href="structOpenIsisVal.html">OpenIsisVal</a>   val;
<a name="l00161"></a>00161         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> len;
<a name="l00162"></a>00162         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byt[255];
<a name="l00163"></a>00163 }       <a class="code" href="structOpenIsisKey.html">OpenIsisKey</a>;
<a name="l00164"></a>00164 
<a name="l00165"></a>00165 
<a name="l00170"></a>00170 <span class="keyword">enum</span> {
<a name="l00171"></a>00171         OPENISIS_XCTL = -1, <span class="comment">/* the &quot;index&quot; control field */</span>
<a name="l00172"></a>00172         OPENISIS_XFST = -2, <span class="comment">/* fst view line */</span>
<a name="l00173"></a>00173         OPENISIS_XHIT = -3, <span class="comment">/* dotted decimal hit plus val */</span>
<a name="l00174"></a>00174         OPENISIS_XADD = -4, <span class="comment">/* (prefix of) binary OpenIsisKey to add */</span>
<a name="l00175"></a>00175         OPENISIS_XDEL = -5  <span class="comment">/* (prefix of) binary OpenIsisKey to del */</span>
<a name="l00176"></a>00176 };
<a name="l00177"></a>00177 
<a name="l00178"></a>00178 
<a name="l00186"></a>00186 <span class="keyword">extern</span> <a class="code" href="structOpenIsisField.html">OpenIsisField</a> *openIsisRGet ( <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *r, <span class="keywordtype">int</span> tag, <span class="keywordtype">int</span> *pos );
<a name="l00187"></a>00187 
<a name="l00188"></a>00188 <span class="keyword">extern</span> <a class="code" href="structOpenIsisField.html">OpenIsisField</a> *openIsisROccurence ( <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *r, <span class="keywordtype">int</span> tag, <span class="keywordtype">int</span> occ );
<a name="l00189"></a>00189 
<a name="l00194"></a>00194 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisA2i ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p, <span class="keywordtype">int</span> l );
<a name="l00199"></a>00199 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisA2il ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p, <span class="keywordtype">int</span> l, <span class="keywordtype">int</span> *res );
<a name="l00203"></a>00203 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisA2id ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p, <span class="keywordtype">int</span> l, <span class="keywordtype">int</span> dflt );
<a name="l00208"></a>00208 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisI2a ( <span class="keywordtype">char</span> *p, <span class="keywordtype">int</span> i );
<a name="l00209"></a>00209 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisU2a ( <span class="keywordtype">char</span> *p, <span class="keywordtype">unsigned</span> u );
<a name="l00210"></a>00210 
<a name="l00216"></a>00216 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisRInt ( <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *r, <span class="keywordtype">int</span> tag, <span class="keywordtype">int</span> def, <span class="keywordtype">int</span> *pos );
<a name="l00217"></a>00217 
<a name="l00223"></a>00223 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisRInt2 (<a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec,
<a name="l00224"></a>00224         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *dflt, <span class="keywordtype">int</span> tag, <span class="keywordtype">int</span> def);
<a name="l00225"></a>00225 
<a name="l00230"></a>00230 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisREnum ( <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *fdt,
<a name="l00231"></a>00231         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *r, <span class="keywordtype">int</span> tag, <span class="keywordtype">int</span> def, <span class="keywordtype">int</span> *pos );
<a name="l00232"></a>00232 
<a name="l00237"></a>00237 <span class="keyword">extern</span> <span class="keywordtype">char</span>* openIsisRString (<a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *r,
<a name="l00238"></a>00238         <span class="keywordtype">int</span> tag, <span class="keywordtype">int</span> *pos, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);
<a name="l00239"></a>00239 
<a name="l00243"></a>00243 <span class="keyword">extern</span> <span class="keywordtype">char</span>* openIsisRString2 (<a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec,
<a name="l00244"></a>00244         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *dflt, <span class="keywordtype">int</span> tag, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len);
<a name="l00245"></a>00245 
<a name="l00256"></a>00256 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisRSerialize ( <span class="keywordtype">char</span> *buf, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec );
<a name="l00261"></a>00261 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisRSerializeBin ( <span class="keywordtype">char</span> *buf, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec );
<a name="l00262"></a>00262 
<a name="l00270"></a>00270 <span class="keyword">extern</span> <span class="keywordtype">char</span>* openIsisRSerializeAlloc (<a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec, <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> *len);
<a name="l00271"></a>00271 
<a name="l00277"></a>00277 <span class="comment">/* ************************************************************</span>
<a name="l00278"></a>00278 <span class="comment">        fdt</span>
<a name="l00279"></a>00279 <span class="comment">*/</span>
<a name="l00280"></a>00280 
<a name="l00283"></a>00283 <span class="keyword">extern</span> <a class="code" href="structOpenIsisFd.html">OpenIsisFd</a>* openIsisFById ( <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *fdt, <span class="keywordtype">int</span> <span class="keywordtype">id</span>, <span class="keywordtype">int</span> subf );
<a name="l00284"></a>00284 
<a name="l00287"></a>00287 <span class="keyword">extern</span> <a class="code" href="structOpenIsisFd.html">OpenIsisFd</a>* openIsisFByName (<span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *fdt, <span class="keyword">const</span> <span class="keywordtype">char</span> *name);
<a name="l00288"></a>00288 
<a name="l00289"></a>00289 <span class="keyword">enum</span> {
<a name="l00290"></a>00290         OPENISIS_NOENUM = 0x10000 <span class="comment">/* enum NOENUM :) -- not a short */</span>
<a name="l00291"></a>00291 };
<a name="l00292"></a>00292 
<a name="l00297"></a>00297 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisFEnum ( <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *fdt, <span class="keywordtype">int</span> <span class="keywordtype">id</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *name );
<a name="l00298"></a>00298 
<a name="l00302"></a>00302 <span class="keyword">extern</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a>* openIsisFFree (<a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *fdt);
<a name="l00303"></a>00303 
<a name="l00311"></a>00311 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>* openIsisFFdt2Rec (
<a name="l00312"></a>00312         <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *fdt, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec, <span class="keywordtype">int</span> embchld);
<a name="l00313"></a>00313 
<a name="l00318"></a>00318 <span class="keyword">extern</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a>* openIsisFRec2Fdt (<a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec);
<a name="l00319"></a>00319 
<a name="l00320"></a>00320 
<a name="l00321"></a>00321 <span class="comment">/* ************************************************************</span>
<a name="l00322"></a>00322 <span class="comment">        session type and utilities</span>
<a name="l00323"></a>00323 <span class="comment">*/</span>
<a name="l00324"></a>00324 
<a name="l00325"></a>00325 <span class="keyword">typedef</span> <span class="keyword">struct </span>OpenIsisSes *OpenIsisSession;
<a name="l00326"></a>00326 
<a name="l00327"></a>00327 <span class="keyword">extern</span> <span class="keywordtype">void</span> *openIsisMAlloc ( <span class="keywordtype">int</span> size );
<a name="l00328"></a>00328 <span class="keyword">extern</span> <span class="keywordtype">void</span>  openIsisMFree ( <span class="keywordtype">void</span> *mem );
<a name="l00329"></a>00329 <span class="keyword">extern</span> <span class="keywordtype">void</span> *openIsisMDup ( <span class="keyword">const</span> <span class="keywordtype">void</span> *str, <span class="keywordtype">int</span> size );
<a name="l00330"></a>00330 
<a name="l00338"></a>00338 <span class="keyword">extern</span> <span class="keywordtype">char</span> *openIsisToHtml ( <span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">int</span> len );
<a name="l00339"></a>00339 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisUtf8Chk ( <span class="keywordtype">void</span> *mem, <span class="keywordtype">int</span> len, <span class="keywordtype">int</span> *tof );
<a name="l00340"></a>00340 
<a name="l00341"></a>00341 
<a name="l00342"></a>00342 <span class="comment">/* ************************************************************</span>
<a name="l00343"></a>00343 <span class="comment">        stream IO</span>
<a name="l00344"></a>00344 <span class="comment">*/</span>
<a name="l00345"></a>00345 
<a name="l00346"></a>00346 <span class="keyword">typedef</span> <span class="keyword">struct </span>OpenIsisIos *OpenIsisStream;
<a name="l00347"></a>00347 <span class="keyword">typedef</span> <span class="keywordtype">int</span> OpenIsisSFunc ( OpenIsisStream s, <span class="keywordtype">int</span> op );
<a name="l00348"></a>00348 
<a name="l00349"></a>00349 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisSOpen ( <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> flags, OpenIsisSFunc *type );
<a name="l00350"></a>00350 
<a name="l00354"></a>00354 <span class="keyword">enum</span> { <span class="comment">/* our very own errno */</span>
<a name="l00355"></a>00355         OPENISIS_ERR_OK    = 0, <span class="comment">/* 0 is no error, also read(2)&apos;s EINTR, EAGAIN */</span>
<a name="l00356"></a>00356         <span class="comment">/* errors logged at level VERBOSE */</span>
<a name="l00357"></a>00357         OPENISIS_ERR_EOF   = 0x10000, <span class="comment">/* end of file */</span>
<a name="l00358"></a>00358         <span class="comment">/* errors logged at level ERROR */</span>
<a name="l00359"></a>00359         OPENISIS_ERR_FAULT = 0x20000, <span class="comment">/* NULL pointer or bad sized buffer given */</span>
<a name="l00360"></a>00360         OPENISIS_ERR_INVAL = 0x30000, <span class="comment">/* general invalid parameters, any EINVAL errno */</span>
<a name="l00361"></a>00361         OPENISIS_ERR_BADF  = 0x40000, <span class="comment">/* bad file, also read(2)&apos;s EINVAL, some of open(2) */</span>
<a name="l00362"></a>00362         <span class="comment">/* errors logged at level SYSERR */</span>
<a name="l00363"></a>00363         OPENISIS_ERR_IO    = 0x50000, <span class="comment">/* real IO error, also write(2)&apos;s ENOSPC, EPIPE */</span>
<a name="l00364"></a>00364         OPENISIS_ERR_NOMEM = 0x60000, <span class="comment">/* out of memory, also open(2)&apos;s EMFILE, ENFILE */</span>
<a name="l00365"></a>00365         OPENISIS_ERR_BUSY  = 0x70000, <span class="comment">/* object is busy */</span>
<a name="l00366"></a>00366         <span class="comment">/* errors logged at level FATAL */</span>
<a name="l00367"></a>00367         OPENISIS_ERR_TRASH = 0x80000, <span class="comment">/* database internal consistency */</span>
<a name="l00368"></a>00368         OPENISIS_ERR_IDIOT = 0x90000 <span class="comment">/* caught programming error */</span>
<a name="l00369"></a>00369 };
<a name="l00370"></a>00370 
<a name="l00371"></a>00371 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
<a name="l00372"></a>00372         OPENISIS_LOG_OFF = 0, <span class="comment">/* don&apos;t log anything */</span>
<a name="l00373"></a>00373         OPENISIS_LOG_FATAL   = 0x100000, <span class="comment">/* fatal internal errors: we can&apos;t go on */</span>
<a name="l00374"></a>00374         OPENISIS_LOG_SYSERR  = 0x200000, <span class="comment">/* problem with system ressources: bad file, no mem */</span>
<a name="l00375"></a>00375         OPENISIS_LOG_IOERR   = 0x300000, <span class="comment">/* problem on IO */</span>
<a name="l00376"></a>00376         OPENISIS_LOG_ERROR   = 0x400000, <span class="comment">/* unusable input, database or query */</span>
<a name="l00377"></a>00377         OPENISIS_LOG_WARN    = 0x500000, <span class="comment">/* bad input */</span>
<a name="l00378"></a>00378         OPENISIS_LOG_INFO    = 0x600000, <span class="comment">/* some major event like opening a db */</span>
<a name="l00379"></a>00379         OPENISIS_LOG_VERBOSE = 0x700000, <span class="comment">/* any event like reading a record */</span>
<a name="l00380"></a>00380         OPENISIS_LOG_TRACE   = 0x800000, <span class="comment">/* database content (log_str) */</span>
<a name="l00381"></a>00381         <span class="comment">/* highest levels only with debug built */</span>
<a name="l00382"></a>00382         OPENISIS_LOG_DEBUG   = 0x900000, <span class="comment">/* lots of processing details */</span>
<a name="l00383"></a>00383         OPENISIS_LOG_ALL     = 0xa00000  <span class="comment">/* just everything, even built-in content */</span>
<a name="l00384"></a>00384 } OpenIsisLogLevel;
<a name="l00385"></a>00385 
<a name="l00386"></a>00386 <span class="keyword">enum</span> {
<a name="l00387"></a>00387         OPENISIS_ERR_ERRORS = 10,
<a name="l00388"></a>00388         OPENISIS_ERR_MASK  = 0xf0000, <span class="comment">/* mask for filtering error code */</span>
<a name="l00389"></a>00389         OPENISIS_ERR_SHIFT = 16, <span class="comment">/* shift to make codes 0,1...ERR_ERRORS */</span>
<a name="l00390"></a>00390         OPENISIS_LOG_NOCHANGE = -1, <span class="comment">/* leave as is when initialising log */</span>
<a name="l00391"></a>00391         OPENISIS_LOG_LEVELS  = 11,
<a name="l00392"></a>00392         OPENISIS_LOG_MASK    = 0xf00000, <span class="comment">/* mask for filtering log levels */</span>
<a name="l00393"></a>00393         OPENISIS_LOG_SHIFT   = 20, <span class="comment">/* shift to make codes 0,1...LOG_LEVELS */</span>
<a name="l00394"></a>00394         <span class="comment">/*</span>
<a name="l00395"></a>00395 <span class="comment">                the following ids are provided just in case</span>
<a name="l00396"></a>00396 <span class="comment">                you don&apos;t feel comfortable assuming that in,out,err are always 0,1,2 ;)</span>
<a name="l00397"></a>00397 <span class="comment">                typically, you don&apos;t need any of these, 0 will work ...</span>
<a name="l00398"></a>00398 <span class="comment">        */</span>
<a name="l00399"></a>00399         OPENISIS_SIN  = 0, <span class="comment">/* stream id of stdin */</span>
<a name="l00400"></a>00400         OPENISIS_SOUT = 1, <span class="comment">/* stdout */</span>
<a name="l00401"></a>00401         OPENISIS_SERR = 2, <span class="comment">/* stderr */</span>
<a name="l00402"></a>00402         OPENISIS_SMASK = 0xffff, <span class="comment">/* mask of stream id part of to */</span>
<a name="l00403"></a>00403         OPENISIS_MSG_VA = 0x1000000 <span class="comment">/* 1st parameter after fmt IS a va_list */</span>
<a name="l00404"></a>00404 };
<a name="l00405"></a>00405 
<a name="l00425"></a>00425 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisSMsg ( <span class="keywordtype">int</span> to, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ... );
<a name="l00426"></a>00426 
<a name="l00436"></a>00436 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisSGets ( <span class="keywordtype">int</span> fd, <span class="keywordtype">char</span> **ptr, <span class="keywordtype">char</span> delim );
<a name="l00437"></a>00437 <span class="preprocessor">#define openIsisSReadln( p ) openIsisSGets( 0, p, &apos;\n&apos; )</span>
<a name="l00438"></a>00438 <span class="preprocessor"></span>
<a name="l00439"></a><a class="code" href="structOpenIsisRecStream.html">00439</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structOpenIsisRecStream.html">OpenIsisRecStream</a> {
<a name="l00440"></a>00440         OpenIsisStream  in; <span class="comment">/* input stream to read from */</span>
<a name="l00441"></a>00441         <span class="keywordtype">int</span>             flg; <span class="comment">/* flags */</span>
<a name="l00442"></a>00442         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>    *buf; <span class="comment">/* original buffer */</span>
<a name="l00443"></a>00443         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>    *rec; <span class="comment">/* record read */</span>
<a name="l00444"></a>00444         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>    *dict; <span class="comment">/* dictionary of field names */</span>
<a name="l00445"></a>00445 } <a class="code" href="structOpenIsisRecStream.html">OpenIsisRecStream</a>;
<a name="l00446"></a>00446 
<a name="l00447"></a>00447 <span class="comment">/*</span>
<a name="l00448"></a>00448 <span class="comment">        stream in records in some free-style format suitable for</span>
<a name="l00449"></a>00449 <span class="comment">        mails, properties, syspar ...</span>
<a name="l00450"></a>00450 <span class="comment">        fields are delimited by CR or NL or CR-NL</span>
<a name="l00451"></a>00451 <span class="comment">        within a field, tag stops at blank,TAB,= or :</span>
<a name="l00452"></a>00452 <span class="comment">        after a TAB, val starts immediately</span>
<a name="l00453"></a>00453 <span class="comment">        after a = or :, val starts at 1st character not a blank</span>
<a name="l00454"></a>00454 <span class="comment">        after a blank, val starts at 1st char not one of the above separators</span>
<a name="l00455"></a>00455 <span class="comment"></span>
<a name="l00456"></a>00456 <span class="comment">        processing</span>
<a name="l00457"></a>00457 <span class="comment">-       a field or record separator is recognized anywhere</span>
<a name="l00458"></a>00458 <span class="comment">- within each field, the tag is read up to the first separator</span>
<a name="l00459"></a>00459 <span class="comment">        (any &quot;special&quot; char, all controls, whitespace and most punctuation).</span>
<a name="l00460"></a>00460 <span class="comment">        upon reaching a separator, the tag is identified.</span>
<a name="l00461"></a>00461 <span class="comment">        if it is empty, and the record has a field, now new field is created.</span>
<a name="l00462"></a>00462 <span class="comment">        else, if the tag cannot be identified,</span>
<a name="l00463"></a>00463 <span class="comment">        a tag of -1 is used and the tag string appended as value.</span>
<a name="l00464"></a>00464 <span class="comment">- the separator consists of any number of leading blanks,</span>
<a name="l00465"></a>00465 <span class="comment">  some separator char, and, unless the sepchar is TAB, trailing blanks.</span>
<a name="l00466"></a>00466 <span class="comment">        if the current field is not empty, the separator is appended as value.</span>
<a name="l00467"></a>00467 <span class="comment">- the rest of the field is appended as value</span>
<a name="l00468"></a>00468 <span class="comment"></span>
<a name="l00469"></a>00469 <span class="comment">- a field with empty tag and value (blank line)</span>
<a name="l00470"></a>00470 <span class="comment">        terminates the record in most modes</span>
<a name="l00471"></a>00471 <span class="comment">- a field with empty tag (continuation line)</span>
<a name="l00472"></a>00472 <span class="comment">        has it&apos;s separator AND value appended to the previous field</span>
<a name="l00473"></a>00473 <span class="comment">- if either a tag or a separator extend over more than 4k,</span>
<a name="l00474"></a>00474 <span class="comment">        the stream is considered over limit.</span>
<a name="l00475"></a>00475 <span class="comment"></span>
<a name="l00476"></a>00476 <span class="comment">*/</span>
<a name="l00477"></a>00477 <span class="keyword">enum</span> {
<a name="l00478"></a>00478         OPENISIS_STOPONEMPTY =   0x10, <span class="comment">/* stop at empty line */</span>
<a name="l00479"></a>00479         OPENISIS_AUTOCLONE   =   0x20, <span class="comment">/* clone the record even if not needed */</span>
<a name="l00480"></a>00480         OPENISIS_TRANSPARENT =   0x40, <span class="comment">/* do not convert vtabs to newlines */</span>
<a name="l00481"></a>00481         OPENISIS_MAIL        =  0x100, <span class="comment">/* process mail body */</span>
<a name="l00482"></a>00482         OPENISIS_MBOX        =  0x200, <span class="comment">/* input stream is mbox format */</span>
<a name="l00483"></a>00483         OPENISIS_DETACH      =  0x400, <span class="comment">/* detach body */</span>
<a name="l00484"></a>00484         OPENISIS_CONVERT     =  0x800  <span class="comment">/* fix body parts */</span>
<a name="l00485"></a>00485 };
<a name="l00486"></a>00486 
<a name="l00487"></a>00487 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisSGetr ( <a class="code" href="structOpenIsisRecStream.html">OpenIsisRecStream</a> *stream );
<a name="l00488"></a>00488 
<a name="l00489"></a>00489 
<a name="l00490"></a>00490 
<a name="l00491"></a>00491 <span class="comment">/* ************************************************************</span>
<a name="l00492"></a>00492 <span class="comment">        record utilities requiring a session</span>
<a name="l00493"></a>00493 <span class="comment">*/</span>
<a name="l00494"></a>00494 
<a name="l00505"></a>00505 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>* openIsisRDup (
<a name="l00506"></a>00506         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *r, <span class="keywordtype">int</span> room, <span class="keywordtype">int</span> discard );
<a name="l00507"></a>00507 
<a name="l00508"></a>00508 
<a name="l00512"></a>00512 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>* openIsisRMsg (
<a name="l00513"></a>00513         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *r, <span class="keywordtype">int</span> discard, <span class="keywordtype">int</span> tag, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ... );
<a name="l00514"></a>00514 
<a name="l00521"></a>00521 <span class="preprocessor">#define OPENISIS_RSPACE( recp, room, disc ) \</span>
<a name="l00522"></a>00522 <span class="preprocessor">        do { if ( ! (recp) \</span>
<a name="l00523"></a>00523 <span class="preprocessor">                || (recp)-&gt;len &gt;= (recp)-&gt;fields \</span>
<a name="l00524"></a>00524 <span class="preprocessor">                || (recp)-&gt;bytes &lt; (recp)-&gt;used + (room) \</span>
<a name="l00525"></a>00525 <span class="preprocessor">        ) (recp) = openIsisRDup( (recp), (room), (disc) ); } while (0)</span>
<a name="l00526"></a>00526 <span class="preprocessor"></span>
<a name="l00534"></a>00534 <span class="preprocessor">#define OPENISIS_RADD( recp, ntag, s, n, disc ) \</span>
<a name="l00535"></a>00535 <span class="preprocessor">        do { \</span>
<a name="l00536"></a>00536 <span class="preprocessor">                int _ll = (n); \</span>
<a name="l00537"></a>00537 <span class="preprocessor">                OPENISIS_RSPACE( recp, _ll, disc ); \</span>
<a name="l00538"></a>00538 <span class="preprocessor">                if ( (recp) ) { \</span>
<a name="l00539"></a>00539 <span class="preprocessor">                        OpenIsisField *_ff = (recp)-&gt;field + (recp)-&gt;len++; \</span>
<a name="l00540"></a>00540 <span class="preprocessor">                        _ff-&gt;tag = (ntag); \</span>
<a name="l00541"></a>00541 <span class="preprocessor">                        _ff-&gt;val = ((char*)recp)+(recp)-&gt;used; \</span>
<a name="l00542"></a>00542 <span class="preprocessor">                        if ( ! s ) \</span>
<a name="l00543"></a>00543 <span class="preprocessor">                                _ff-&gt;len = 0; \</span>
<a name="l00544"></a>00544 <span class="preprocessor">                        else \</span>
<a name="l00545"></a>00545 <span class="preprocessor">                                memcpy( (char*)_ff-&gt;val, s, _ff-&gt;len = _ll ); \</span>
<a name="l00546"></a>00546 <span class="preprocessor">                        (recp)-&gt;used += _ff-&gt;len; \</span>
<a name="l00547"></a>00547 <span class="preprocessor">                } \</span>
<a name="l00548"></a>00548 <span class="preprocessor">        } while(0)</span>
<a name="l00549"></a>00549 <span class="preprocessor"></span>
<a name="l00556"></a>00556 <span class="preprocessor">#define OPENISIS_RCAT( recp, s, n, disc ) \</span>
<a name="l00557"></a>00557 <span class="preprocessor">        do { \</span>
<a name="l00558"></a>00558 <span class="preprocessor">                OpenIsisField *_ff; \</span>
<a name="l00559"></a>00559 <span class="preprocessor">                int _ll = (n); \</span>
<a name="l00560"></a>00560 <span class="preprocessor">                assert ( (recp) ); \</span>
<a name="l00561"></a>00561 <span class="preprocessor">                assert ( (recp)-&gt;len ); \</span>
<a name="l00562"></a>00562 <span class="preprocessor">                if ( (recp)-&gt;bytes &lt; (recp)-&gt;used + _ll ) \</span>
<a name="l00563"></a>00563 <span class="preprocessor">                        (recp) = openIsisRDup( (recp), _ll, (disc) ); \</span>
<a name="l00564"></a>00564 <span class="preprocessor">                _ff = (recp)-&gt;field + (recp)-&gt;len - 1; \</span>
<a name="l00565"></a>00565 <span class="preprocessor">                memcpy( (char*)(_ff-&gt;val+_ff-&gt;len), s, _ll ); \</span>
<a name="l00566"></a>00566 <span class="preprocessor">                _ff-&gt;len += _ll; \</span>
<a name="l00567"></a>00567 <span class="preprocessor">                (recp)-&gt;used += _ll; \</span>
<a name="l00568"></a>00568 <span class="preprocessor">        } while(0)</span>
<a name="l00569"></a>00569 <span class="preprocessor"></span>
<a name="l00570"></a>00570 <span class="comment">/* like OPENISIS_RADD, but based on strlen */</span>
<a name="l00571"></a>00571 <span class="preprocessor">#define OPENISIS_RADDS( recp, ntag, s, disc ) \</span>
<a name="l00572"></a>00572 <span class="preprocessor">        OPENISIS_RADD( recp, ntag, s, strlen(s), disc )</span>
<a name="l00573"></a>00573 <span class="preprocessor"></span><span class="comment">/* like OPENISIS_RADD, but based on field */</span>
<a name="l00574"></a>00574 <span class="preprocessor">#define OPENISIS_RADDF( recp, f, disc ) \</span>
<a name="l00575"></a>00575 <span class="preprocessor">        OPENISIS_RADD( recp, (f)-&gt;tag, (f)-&gt;val, (f)-&gt;len, disc )</span>
<a name="l00576"></a>00576 <span class="preprocessor"></span><span class="comment">/* like OPENISIS_RCAT, but based on strlen */</span>
<a name="l00577"></a>00577 <span class="preprocessor">#define OPENISIS_RCATS( recp, s, disc ) \</span>
<a name="l00578"></a>00578 <span class="preprocessor">        OPENISIS_RCAT( recp, s, strlen(s), disc )</span>
<a name="l00579"></a>00579 <span class="preprocessor"></span>
<a name="l00595"></a>00595 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *openIsisRSplitf (
<a name="l00596"></a>00596         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec, <span class="keyword">const</span> <a class="code" href="structOpenIsisField.html">OpenIsisField</a>* field );
<a name="l00597"></a>00597 
<a name="l00598"></a>00598 
<a name="l00599"></a>00599 <span class="keyword">enum</span> { <span class="comment">/* RSet flags */</span>
<a name="l00600"></a>00600         OPENISIS_RARGC = 0xffff, <span class="comment">/* argc mask */</span>
<a name="l00601"></a>00601         OPENISIS_RFDT = 0x0010000, <span class="comment">/* first vararg is the Fdt to use */</span>
<a name="l00602"></a>00602         OPENISIS_RARGV= 0x0020000, <span class="comment">/* next vararg is a char **argv */</span>
<a name="l00603"></a>00603         OPENISIS_RDIS = 0x0040000, <span class="comment">/* discard original record on change */</span>
<a name="l00604"></a>00604         OPENISIS_RNOC = 0x0080000, <span class="comment">/* do not recompact after CHG/DEL op */</span>
<a name="l00605"></a>00605         OPENISIS_RIGN = 0x0100000, <span class="comment">/* ignore unknown fields */</span>
<a name="l00606"></a>00606         <span class="comment">/* default op is to append fields at the end */</span>
<a name="l00607"></a>00607         OPENISIS_RCHG = 0x1000000, <span class="comment">/* change mode: overwrite previous field values */</span>
<a name="l00608"></a>00608         OPENISIS_RDEL = 0x2000000, <span class="comment">/* args is a list of tags to delete */</span>
<a name="l00609"></a>00609         OPENISIS_RDFLT= 0x4000000, <span class="comment">/* default mode: set field value only if not already present */</span>
<a name="l00610"></a>00610         OPENISIS_ROP  = 0xf000000  <span class="comment">/* op mask */</span>
<a name="l00611"></a>00611 };
<a name="l00612"></a>00612 
<a name="l00629"></a>00629 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *openIsisRSet ( <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec, <span class="keywordtype">int</span> mode, ... );
<a name="l00630"></a>00630 
<a name="l00636"></a>00636 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisRDeserialize (
<a name="l00637"></a>00637         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> **rec, <span class="keyword">const</span> <span class="keywordtype">char</span> *buf, <span class="keywordtype">int</span> len, <span class="keywordtype">int</span> flg );
<a name="l00638"></a>00638 
<a name="l00639"></a>00639 
<a name="l00643"></a>00643 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *openIsisRAddI (
<a name="l00644"></a>00644         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec, <span class="keywordtype">int</span> tag, <span class="keywordtype">int</span> value, <span class="keywordtype">int</span> discard);
<a name="l00645"></a>00645 
<a name="l00646"></a>00646 <span class="keyword">enum</span> {
<a name="l00647"></a>00647         OPENISIS_FMT_SHARP = 32,        <span class="comment">/* # */</span>
<a name="l00648"></a>00648         OPENISIS_FMT_SLASH,     <span class="comment">/* / */</span>
<a name="l00649"></a>00649         OPENISIS_FMT_PERCENT,   <span class="comment">/* % */</span>
<a name="l00650"></a>00650         OPENISIS_FMT_OPEN,      <span class="comment">/* { */</span>
<a name="l00651"></a>00651         OPENISIS_FMT_CLOSE,     <span class="comment">/* } */</span>
<a name="l00652"></a>00652         OPENISIS_FMT_ESC,       <span class="comment">/* ! */</span>
<a name="l00653"></a>00653         OPENISIS_FMT_B, <span class="comment">/* bold */</span>
<a name="l00654"></a>00654         OPENISIS_FMT_BOX,       <span class="comment">/* draw a box (0i) */</span>
<a name="l00655"></a>00655         OPENISIS_FMT_BPICT,     <span class="comment">/* draw background pict (1sn) */</span>
<a name="l00656"></a>00656         OPENISIS_FMT_C, <span class="comment">/* column (1i) */</span>
<a name="l00657"></a>00657         OPENISIS_FMT_CL,        <span class="comment">/* colour (1i) */</span>
<a name="l00658"></a>00658         OPENISIS_FMT_COLS,      <span class="comment">/* colour table (s_) - emits a string of hex vals */</span>
<a name="l00659"></a>00659         OPENISIS_FMT_FONTS,     <span class="comment">/* font table (s_) */</span>
<a name="l00660"></a>00660         OPENISIS_FMT_FS,        <span class="comment">/* font size (1i) */</span>
<a name="l00661"></a>00661         OPENISIS_FMT_F, <span class="comment">/* font (1i) */</span>
<a name="l00662"></a>00662         OPENISIS_FMT_I, <span class="comment">/* italic */</span>
<a name="l00663"></a>00663         OPENISIS_FMT_LINK,      <span class="comment">/* link (2s_) */</span>
<a name="l00664"></a>00664         OPENISIS_FMT_LW,        <span class="comment">/* line width (1i) */</span>
<a name="l00665"></a>00665         OPENISIS_FMT_M, <span class="comment">/* indentation in twips(1in) */</span>
<a name="l00666"></a>00666         OPENISIS_FMT_NC,        <span class="comment">/* new column (0i) */</span>
<a name="l00667"></a>00667         OPENISIS_FMT_NEWLINE,   <span class="comment">/* set newline (1s) */</span>
<a name="l00668"></a>00668         OPENISIS_FMT_NP,        <span class="comment">/* newpage (0i) */</span>
<a name="l00669"></a>00669         OPENISIS_FMT_PICT,      <span class="comment">/* draw pict (1s) */</span>
<a name="l00670"></a>00670         OPENISIS_FMT_QC,        <span class="comment">/* center */</span>
<a name="l00671"></a>00671         OPENISIS_FMT_QJ,        <span class="comment">/* justify */</span>
<a name="l00672"></a>00672         OPENISIS_FMT_TAB,       <span class="comment">/* tab (0i) */</span>
<a name="l00673"></a>00673         OPENISIS_FMT_UL,        <span class="comment">/* underline */</span>
<a name="l00674"></a>00674         OPENISIS_FMT_X  <span class="comment">/* blanks (1i) */</span>
<a name="l00675"></a>00675 };
<a name="l00676"></a>00676 
<a name="l00677"></a>00677 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>* openIsisRFmt (
<a name="l00678"></a>00678         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *buf, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *r );
<a name="l00679"></a>00679 
<a name="l00680"></a>00680 
<a name="l00681"></a>00681 
<a name="l00682"></a>00682 <span class="comment">/* ************************************************************</span>
<a name="l00683"></a>00683 <span class="comment">        db access</span>
<a name="l00684"></a>00684 <span class="comment">*/</span>
<a name="l00685"></a>00685 
<a name="l00691"></a>00691 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisDMaxId ( <span class="keywordtype">int</span> dbid );
<a name="l00692"></a>00692 
<a name="l00700"></a>00700 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *openIsisDRead ( <span class="keywordtype">int</span> db, <span class="keywordtype">int</span> rowid );
<a name="l00701"></a>00701 
<a name="l00705"></a>00705 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *openIsisDFmt (
<a name="l00706"></a>00706         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *buf, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, <span class="keywordtype">int</span> db, <span class="keywordtype">int</span> rowid );
<a name="l00707"></a>00707 
<a name="l00708"></a>00708 
<a name="l00717"></a>00717 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisDWritex ( <span class="keywordtype">int</span> dbid, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec,
<a name="l00718"></a>00718         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *idx );
<a name="l00719"></a>00719 
<a name="l00724"></a>00724 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisDWrite ( <span class="keywordtype">int</span> dbid, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec );
<a name="l00725"></a>00725 <span class="preprocessor">#define OPENISIS_DWRITE( rec ) openIsisDWrite( (rec)-&gt;dbid, rec )</span>
<a name="l00726"></a>00726 <span class="preprocessor"></span>
<a name="l00727"></a>00727 
<a name="l00738"></a>00738 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *openIsisDScan (
<a name="l00739"></a>00739         <span class="keywordtype">int</span> db, <span class="keywordtype">int</span> rowid, <span class="keywordtype">int</span> tag, <span class="keyword">const</span> <span class="keywordtype">char</span> *key );
<a name="l00740"></a>00740 
<a name="l00752"></a>00752 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>* openIsisDTerm (
<a name="l00753"></a>00753         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rec, <span class="keywordtype">int</span> db, <span class="keyword">const</span> <span class="keywordtype">char</span> *key );
<a name="l00754"></a>00754 
<a name="l00755"></a>00755 
<a name="l00756"></a>00756 <span class="preprocessor">#ifndef OPENISIS_SETLEN</span>
<a name="l00757"></a>00757 <span class="preprocessor"></span><span class="preprocessor">#define OPENISIS_SETLEN 1000</span>
<a name="l00758"></a>00758 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00759"></a>00759 <span class="preprocessor"></span>
<a name="l00765"></a><a class="code" href="structOpenIsisSet.html">00765</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00766"></a>00766         <span class="keywordtype">int</span> len;
<a name="l00767"></a>00767         <span class="keywordtype">int</span> <span class="keywordtype">id</span>[OPENISIS_SETLEN];
<a name="l00768"></a>00768 } <a class="code" href="structOpenIsisSet.html">OpenIsisSet</a>;
<a name="l00769"></a>00769 
<a name="l00770"></a>00770 
<a name="l00771"></a>00771 <span class="comment">/* query mode */</span>
<a name="l00772"></a>00772 <span class="keyword">enum</span> {
<a name="l00773"></a>00773         <span class="comment">/* search given string using index */</span>
<a name="l00774"></a>00774         OPENISIS_QRY_KEYEQ, <span class="comment">/* index scan key equal */</span>
<a name="l00775"></a>00775         OPENISIS_QRY_KEYPF, <span class="comment">/* index scan key prefix */</span>
<a name="l00776"></a>00776         OPENISIS_QRY_KEYAT, <span class="comment">/* index scan key auto (checks for &apos;$&apos;) */</span>
<a name="l00777"></a>00777         <span class="comment">/* fulltext scan for given string */</span>
<a name="l00778"></a>00778         OPENISIS_QRY_SCANE=64, <span class="comment">/* fulltext scan for equal */</span>
<a name="l00779"></a>00779         OPENISIS_QRY_SCANC, <span class="comment">/* fulltext scan for contains */</span>
<a name="l00780"></a>00780         <span class="comment">/* parse string as query expression */</span>
<a name="l00781"></a>00781         OPENISIS_QRY_SIMPLE=128, <span class="comment">/* simple left-to-right binding */</span>
<a name="l00782"></a>00782         OPENISIS_QRY_PROPER <span class="comment">/* proper binding using precedence, () */</span>
<a name="l00783"></a>00783 };
<a name="l00784"></a>00784 
<a name="l00785"></a>00785 
<a name="l00798"></a>00798 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisDQuery ( <a class="code" href="structOpenIsisSet.html">OpenIsisSet</a> *<span class="keyword">set</span>, <span class="keywordtype">int</span> db,
<a name="l00799"></a>00799         <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">int</span> mode, <span class="keywordtype">int</span> skip );
<a name="l00800"></a>00800 
<a name="l00801"></a>00801 
<a name="l00805"></a>00805 <span class="keyword">typedef</span> <span class="keywordtype">int</span> OpenIsisDXCb ( <span class="keywordtype">void</span> *me, <a class="code" href="structOpenIsisKey.html">OpenIsisKey</a> *key, <a class="code" href="structOpenIsisHit.html">OpenIsisHit</a> *hit );
<a name="l00806"></a>00806 
<a name="l00807"></a><a class="code" href="structOpenIsisDXLoop.html">00807</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00808"></a>00808         <span class="keywordtype">int</span>            flg;
<a name="l00809"></a>00809         <span class="keywordtype">void</span>          *me; <span class="comment">/* commonly the session */</span>
<a name="l00810"></a>00810         OpenIsisDXCb  *cb;
<a name="l00811"></a>00811         <a class="code" href="structOpenIsisKey.html">OpenIsisKey</a>    key;
<a name="l00812"></a>00812         <a class="code" href="structOpenIsisKey.html">OpenIsisKey</a>    to;
<a name="l00813"></a>00813 }       <a class="code" href="structOpenIsisDXLoop.html">OpenIsisDXLoop</a>;
<a name="l00814"></a>00814 
<a name="l00815"></a>00815 <span class="keyword">enum</span> { <span class="comment">/* flags */</span>
<a name="l00816"></a>00816         OPENISIS_IDXPF   = 0, <span class="comment">/* loop where from is prefix of key */</span>
<a name="l00817"></a>00817         OPENISIS_IDXEQ   = 1, <span class="comment">/* loop from == key */</span>
<a name="l00818"></a>00818         OPENISIS_IDXUPTO = 2, <span class="comment">/* loop from &lt;= key &lt; to */</span>
<a name="l00819"></a>00819         OPENISIS_IDXINCL = 3, <span class="comment">/* loop from &lt;= key &lt;= to */</span>
<a name="l00820"></a>00820         OPENISIS_IDXMODE = 0x03, <span class="comment">/* mask for match mode */</span>
<a name="l00821"></a>00821         OPENISIS_IDXTRAD = 0x10000  <span class="comment">/* use traditional index */</span>
<a name="l00822"></a>00822 };
<a name="l00823"></a>00823 
<a name="l00826"></a>00826 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisDXLoop ( <span class="keywordtype">int</span> dbid, <a class="code" href="structOpenIsisDXLoop.html">OpenIsisDXLoop</a> *l );
<a name="l00827"></a>00827 
<a name="l00828"></a>00828 
<a name="l00829"></a>00829 
<a name="l00830"></a>00830 <span class="comment">/* ************************************************************</span>
<a name="l00831"></a>00831 <span class="comment">        system control -- session 0 only</span>
<a name="l00832"></a>00832 <span class="comment">*/</span>
<a name="l00833"></a>00833 
<a name="l00834"></a>00834 <span class="keyword">enum</span> {
<a name="l00835"></a>00835         <span class="comment">/* search hit result record */</span>
<a name="l00836"></a>00836         OPENISIS_SEA_KEY   = 1, <span class="comment">/* key value */</span>
<a name="l00837"></a>00837         OPENISIS_SEA_NHITS = 2, <span class="comment">/* number of hits */</span>
<a name="l00838"></a>00838         OPENISIS_SEA_HIT   = 3, <span class="comment">/* hit: &lt;mfn tag occ pos dbn&gt; */</span>
<a name="l00839"></a>00839         <span class="comment">/* system (schema 0) parameters */</span>
<a name="l00840"></a>00840         OPENISIS_SPATH   = 5, <span class="comment">/* db dir */</span>
<a name="l00841"></a>00841         OPENISIS_SLOGF   = 700, <span class="comment">/* logfile */</span>
<a name="l00842"></a>00842         OPENISIS_SLOGV   = 701, <span class="comment">/* verbosity */</span>
<a name="l00843"></a>00843         <span class="comment">/* schema parameters */</span>
<a name="l00844"></a>00844         OPENISIS_SC_NAME   = 710, <span class="comment">/* schema n name */</span>
<a name="l00845"></a>00845         OPENISIS_SC_HOST   = 711, <span class="comment">/* schema n host */</span>
<a name="l00846"></a>00846         OPENISIS_SC_PORT   = 712, <span class="comment">/* schema n port */</span>
<a name="l00847"></a>00847         OPENISIS_SC_DFLTDB = 721, <span class="comment">/* schema default db */</span>
<a name="l00848"></a>00848         <span class="comment">/* database parameters */</span>
<a name="l00849"></a>00849         OPENISIS_DNAME = 800,
<a name="l00850"></a>00850         OPENISIS_DTYPE = 801,
<a name="l00851"></a>00851         OPENISIS_DRO   = 802,
<a name="l00852"></a>00852         OPENISIS_DPATH = 803,
<a name="l00853"></a>00853         OPENISIS_DDUMP = 804,
<a name="l00854"></a>00854         OPENISIS_DENC  = 810, <span class="comment">/* encoding */</span>
<a name="l00855"></a>00855         OPENISIS_DFDT  = 811, <span class="comment">/* path to serialized fdt */</span>
<a name="l00856"></a>00856         OPENISIS_DFMT  = 850, <span class="comment">/* worksheets */</span>
<a name="l00857"></a>00857         OPENISIS_DPFT  = 851, <span class="comment">/* printformats */</span>
<a name="l00858"></a>00858         OPENISIS_DFST  = 852, <span class="comment">/* field selections */</span>
<a name="l00859"></a>00859         <span class="comment">/* fdt entries */</span>
<a name="l00860"></a>00860         OPENISIS_FDID    = 860, <span class="comment">/* tag */</span>
<a name="l00861"></a>00861         OPENISIS_FDSUB   = 861, <span class="comment">/* subfield char */</span>
<a name="l00862"></a>00862         OPENISIS_FDTYPE  = 862, <span class="comment">/* field type */</span>
<a name="l00863"></a>00863         OPENISIS_FDREP   = 863, <span class="comment">/* repeatable flag */</span>
<a name="l00864"></a>00864         OPENISIS_FDNUMC  = 864,
<a name="l00865"></a>00865         OPENISIS_FDLEN   = 865, <span class="comment">/* length: 0 variable, &gt;0 maxlen, &lt;0 fixed len */</span>
<a name="l00866"></a>00866         OPENISIS_FDNAME  = 866, <span class="comment">/* field name */</span>
<a name="l00867"></a>00867         OPENISIS_FDDESC  = 867, <span class="comment">/* field description */</span>
<a name="l00868"></a>00868         OPENISIS_FDPAT   = 868, <span class="comment">/* pattern */</span>
<a name="l00869"></a>00869         OPENISIS_FDDFLT  = 869, <span class="comment">/* default value */</span>
<a name="l00870"></a>00870         OPENISIS_FDINFO  = 870, <span class="comment">/* application specific addons */</span>
<a name="l00871"></a>00871         OPENISIS_FDCHLD  = 871,
<a name="l00872"></a>00872         OPENISIS_FDT_LEN = 880, <span class="comment">/* fdt: number of fd&apos;s */</span>
<a name="l00873"></a>00873         OPENISIS_FDT_FD  = 881, <span class="comment">/* fdt: embedded fd */</span>
<a name="l00874"></a>00874         OPENISIS_FDT_REC = 882, <span class="comment">/* fdt: application specific addons */</span>
<a name="l00875"></a>00875         <span class="comment">/* communication parameters */</span>
<a name="l00876"></a>00876         OPENISIS_COM_SID    = 900,  <span class="comment">/* session id */</span>
<a name="l00877"></a>00877         OPENISIS_COM_SER    = 901,  <span class="comment">/* serial no of request */</span>
<a name="l00878"></a>00878         OPENISIS_COM_DBN    = 902,  <span class="comment">/* db name */</span>
<a name="l00879"></a>00879         OPENISIS_COM_TMS    = 903,  <span class="comment">/* server timestamp */</span>
<a name="l00880"></a>00880         OPENISIS_COM_ROW    = 904,  <span class="comment">/* rowid */</span>
<a name="l00881"></a>00881         OPENISIS_COM_CFG    = 907,  <span class="comment">/* embedded cfg */</span>
<a name="l00882"></a>00882         OPENISIS_COM_REC    = 908,  <span class="comment">/* embedded data record */</span>
<a name="l00883"></a>00883         <span class="comment">/* communication parameters: request */</span>
<a name="l00884"></a>00884         OPENISIS_RQS_TYPE   = 920,  <span class="comment">/* request type */</span>
<a name="l00885"></a>00885         OPENISIS_RQS_FLG    = 921,  <span class="comment">/* flags */</span>
<a name="l00886"></a>00886         OPENISIS_RQS_QMOD   = 922,  <span class="comment">/* mode (query) */</span>
<a name="l00887"></a>00887         OPENISIS_RQS_SKIP   = 923,  <span class="comment">/* skip (query) */</span>
<a name="l00888"></a>00888         OPENISIS_RQS_SIZE   = 924,  <span class="comment">/* output size (query, search) */</span>
<a name="l00889"></a>00889         OPENISIS_RQS_KEY    = 925,  <span class="comment">/* key value (query, search) */</span>
<a name="l00890"></a>00890         OPENISIS_RQS_IDX    = 926,  <span class="comment">/* index record (insert, update) */</span>
<a name="l00891"></a>00891         OPENISIS_RQS_KUP    = 927,  <span class="comment">/* upper key value (search) */</span>
<a name="l00892"></a>00892         OPENISIS_RQS_TAG    = 928,  <span class="comment">/* tag restrictions (search) */</span>
<a name="l00894"></a>00894         OPENISIS_RSP_DBID   = 940,  <span class="comment">/* local db id */</span>
<a name="l00895"></a>00895         OPENISIS_RSP_ERR    = 941,  <span class="comment">/* error code */</span>
<a name="l00896"></a>00896         OPENISIS_RSP_MSG    = 942,  <span class="comment">/* error message */</span>
<a name="l00897"></a>00897         OPENISIS_RSP_NUMT   = 943,  <span class="comment">/* total number of records (query, read) */</span>
<a name="l00898"></a>00898         OPENISIS_RSP_NUMR   = 944,  <span class="comment">/* number in this response (query, read) */</span>
<a name="l00899"></a>00899         OPENISIS_RSP_CERR   = 945   <span class="comment">/* client side error */</span>
<a name="l00900"></a>00900 };
<a name="l00901"></a>00901 
<a name="l00902"></a>00902 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *openIsisFdtSyspar; <span class="comment">/* schema 0 */</span>
<a name="l00903"></a>00903 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *openIsisFdtScheme; <span class="comment">/* schema n */</span>
<a name="l00904"></a>00904 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *openIsisFdtDbpar;  <span class="comment">/* db cfg */</span>
<a name="l00905"></a>00905 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *openIsisFdtFd;     <span class="comment">/* fd rec */</span>
<a name="l00906"></a>00906 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *openIsisFdtFdt;    <span class="comment">/* fdt rec */</span>
<a name="l00907"></a>00907 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *openIsisFdtRqs;    <span class="comment">/* request rec */</span>
<a name="l00908"></a>00908 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *openIsisFdtRsp;    <span class="comment">/* response rec */</span>
<a name="l00909"></a>00909 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *openIsisFdtHit;    <span class="comment">/* search hit result record */</span>
<a name="l00910"></a>00910 
<a name="l00912"></a>00912 <span class="keyword">enum</span> {
<a name="l00913"></a>00913         OPENISIS_RQST_OPEN     =  1, <span class="comment">/* open db */</span>
<a name="l00914"></a>00914         OPENISIS_RQST_CLOS     =  3, <span class="comment">/* close db */</span>
<a name="l00915"></a>00915         OPENISIS_RQST_MNT      =  4, <span class="comment">/* mount db */</span>
<a name="l00916"></a>00916         OPENISIS_RQST_LSDB     =  6, <span class="comment">/* list available dbs */</span>
<a name="l00917"></a>00917         OPENISIS_RQST_MROW     = 10, <span class="comment">/* get maxrowid of db */</span>
<a name="l00918"></a>00918         OPENISIS_RQST_QRY      = 11, <span class="comment">/* exec query on db */</span>
<a name="l00919"></a>00919         OPENISIS_RQST_READ     = 12, <span class="comment">/* get rec for rowid */</span>
<a name="l00920"></a>00920         OPENISIS_RQST_SEA      = 15, <span class="comment">/* search index of db */</span>
<a name="l00921"></a>00921         OPENISIS_RQST_INS      = 20, <span class="comment">/* insert rec */</span>
<a name="l00922"></a>00922         OPENISIS_RQST_UPD      = 21, <span class="comment">/* update rec */</span>
<a name="l00923"></a>00923         OPENISIS_RQST_DEL      = 22, <span class="comment">/* delete row */</span>
<a name="l00924"></a>00924         OPENISIS_RQST_EVAL     = 30  <span class="comment">/* command evaluation */</span>
<a name="l00925"></a>00925 };
<a name="l00926"></a>00926 
<a name="l00928"></a>00928 <span class="keyword">enum</span> {
<a name="l00929"></a>00929         OPENISIS_RQSF_MNT   = 0x0001, <span class="comment">/* mount db */</span>
<a name="l00930"></a>00930         OPENISIS_RQSF_QRR   = 0x0002, <span class="comment">/* fetch records on query */</span>
<a name="l00931"></a>00931         OPENISIS_RQSF_SENH  = 0x0004  <span class="comment">/* sort search result by nhits */</span>
<a name="l00932"></a>00932 };
<a name="l00933"></a>00933 
<a name="l00935"></a>00935 <span class="preprocessor">#define OPENISIS_QRY_KEYLEN 1024</span>
<a name="l00936"></a>00936 <span class="preprocessor"></span>
<a name="l00937"></a>00937 <span class="preprocessor">#define OPENISIS_ERRMSGLEN  1024</span>
<a name="l00938"></a>00938 <span class="preprocessor"></span>
<a name="l00939"></a>00939 <span class="keyword">enum</span> {
<a name="l00940"></a>00940         OPENISIS_RELE = 0x0000000, <span class="comment">/* release, unlock */</span>
<a name="l00941"></a>00941         OPENISIS_LOCK = 0x1000000,
<a name="l00942"></a>00942         OPENISIS_WAKE = 0x2000000, <span class="comment">/* broadcast signal, notifyall */</span>
<a name="l00943"></a>00943         OPENISIS_WAIT = 0x3000000,
<a name="l00944"></a>00944         OPENISIS_COND = 0x0ffffff  <span class="comment">/* condition mask */</span>
<a name="l00945"></a>00945 };
<a name="l00967"></a>00967 <span class="keyword">typedef</span> <span class="keywordtype">int</span> OpenIsisCLockFunc ( <span class="keywordtype">int</span> lock );
<a name="l00968"></a>00968 
<a name="l00972"></a>00972 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisCInit ( <span class="keywordtype">int</span> argc, <span class="keyword">const</span> <span class="keywordtype">char</span> **argv,
<a name="l00973"></a>00973         OpenIsisCLockFunc lock );
<a name="l00974"></a>00974 
<a name="l00984"></a>00984 <span class="keyword">extern</span> <span class="keywordtype">void</span> openIsisCLog ( <span class="keywordtype">int</span> level, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename );
<a name="l00985"></a>00985 
<a name="l00986"></a>00986 
<a name="l00991"></a>00991 <span class="keyword">extern</span> OpenIsisSession openIsisCOpen ( <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *args );
<a name="l00992"></a>00992 
<a name="l00997"></a>00997 <span class="keyword">extern</span> OpenIsisSession openIsisCSession ( <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *args );
<a name="l00998"></a>00998 
<a name="l00999"></a>00999 
<a name="l01000"></a>01000 <span class="comment">/* ************************************************************</span>
<a name="l01001"></a>01001 <span class="comment">        schema</span>
<a name="l01002"></a>01002 <span class="comment">*/</span>
<a name="l01003"></a>01003 
<a name="l01004"></a>01004 <span class="preprocessor">#define OPENISIS_SC_NAMELEN  32 </span><span class="comment">/* max length of schema identification */</span>
<a name="l01005"></a>01005 <span class="preprocessor">#define OPENISIS_DB_NAMELEN  32 </span><span class="comment">/* max length of db id relative to schema */</span>
<a name="l01006"></a>01006 
<a name="l01007"></a>01007 <span class="preprocessor">#define OPENISIS_SCIDMSK  0x0ff00  </span><span class="comment">/* schema part of id */</span>
<a name="l01008"></a>01008 <span class="preprocessor">#define OPENISIS_DBIDMSK  0x000ff  </span><span class="comment">/* db part of id */</span>
<a name="l01009"></a>01009 
<a name="l01010"></a><a class="code" href="structOpenIsisDb.html">01010</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l01011"></a>01011         <span class="keywordtype">char</span>           name[OPENISIS_DB_NAMELEN];
<a name="l01012"></a>01012         <span class="keywordtype">int</span>            dbid;
<a name="l01013"></a>01013         <span class="keywordtype">int</span>            mntcnt; <span class="comment">/* number of sessions currently using this */</span>
<a name="l01014"></a>01014         <span class="keywordtype">int</span>            tms;    <span class="comment">/* last (re)opening timestamp */</span>
<a name="l01015"></a>01015         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>   *cfg;
<a name="l01016"></a>01016         <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a>   *fdt;
<a name="l01017"></a>01017 } <a class="code" href="structOpenIsisDb.html">OpenIsisDb</a>;
<a name="l01018"></a>01018 
<a name="l01019"></a><a class="code" href="structOpenIsisSchema.html">01019</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l01020"></a>01020         <span class="keywordtype">char</span>           name[OPENISIS_SC_NAMELEN];
<a name="l01021"></a>01021         <span class="keywordtype">int</span>            scid;
<a name="l01022"></a>01022         <span class="keywordtype">int</span>            mntcnt;
<a name="l01023"></a>01023         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a>   *cfg;
<a name="l01024"></a>01024         <span class="keywordtype">int</span>            ndbs;
<a name="l01025"></a>01025         <a class="code" href="structOpenIsisDb.html">OpenIsisDb</a>   **dbs;
<a name="l01026"></a>01026 } <a class="code" href="structOpenIsisSchema.html">OpenIsisSchema</a>;
<a name="l01027"></a>01027 
<a name="l01028"></a>01028 <span class="comment">/* ************************************************************</span>
<a name="l01029"></a>01029 <span class="comment">        client side</span>
<a name="l01030"></a>01030 <span class="comment">*/</span>
<a name="l01031"></a>01031 
<a name="l01032"></a>01032 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structOpenIsisStb.html">OpenIsisStb</a> *<a class="code" href="structOpenIsisStb.html">OpenIsisStub</a>;
<a name="l01033"></a>01033 
<a name="l01036"></a>01036 <span class="keyword">typedef</span> <span class="keywordtype">int</span> OpenIsisStbRqsProc (OpenIsisStub stb, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rqs);
<a name="l01037"></a>01037 
<a name="l01041"></a>01041 <span class="keyword">typedef</span> <span class="keywordtype">void</span> OpenIsisStbDelProc (OpenIsisStub stb, <span class="keywordtype">void</span> *client_data);
<a name="l01042"></a>01042 
<a name="l01045"></a>01045 <span class="keyword">typedef</span> <span class="keywordtype">int</span> OpenIsisRspCb (<span class="keywordtype">void</span> *client_data,
<a name="l01046"></a>01046         OpenIsisStub stub, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *response, <a class="code" href="structOpenIsisDb.html">OpenIsisDb</a> *db);
<a name="l01047"></a>01047 
<a name="l01048"></a><a class="code" href="structOpenIsisStubCbData.html">01048</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l01049"></a>01049         <span class="comment">/*      function for request sending.</span>
<a name="l01050"></a>01050 <span class="comment">                if 0, defaults to internal blocking sender</span>
<a name="l01051"></a>01051 <span class="comment">        */</span>
<a name="l01052"></a>01052         int (*sendproc) (OpenIsisStub stub, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rqs);
<a name="l01053"></a>01053         <span class="comment">/*      default response callback */</span>
<a name="l01054"></a>01054         OpenIsisRspCb  *dfltcb;
<a name="l01055"></a>01055         <span class="comment">/*      delete callback: cleanup client data cbd that is no longer</span>
<a name="l01056"></a>01056 <span class="comment">                used. if 0==cbd, session is going to be deleted.</span>
<a name="l01057"></a>01057 <span class="comment">        */</span>
<a name="l01058"></a>01058         void (*delcb) (<span class="keywordtype">void</span> *cld, OpenIsisStub session, <span class="keywordtype">void</span> *cbd);
<a name="l01059"></a>01059         <span class="comment">/*      client data for dfltcb */</span>
<a name="l01060"></a>01060         <span class="keywordtype">void</span> *dfltcld; 
<a name="l01061"></a>01061         <span class="comment">/*      client data for delcb */</span>
<a name="l01062"></a>01062         <span class="keywordtype">void</span> *delcld; 
<a name="l01063"></a>01063 } <a class="code" href="structOpenIsisStubCbData.html">OpenIsisStubCbData</a>;
<a name="l01064"></a>01064 
<a name="l01065"></a>01065 <span class="keyword">extern</span> OpenIsisStub openisis_stub0;
<a name="l01066"></a>01066 
<a name="l01069"></a>01069 <span class="keyword">extern</span> OpenIsisStub openIsisNInit (
<a name="l01070"></a>01070         <span class="keywordtype">int</span> argc, <span class="keyword">const</span> <span class="keywordtype">char</span> **argv, <a class="code" href="structOpenIsisStubCbData.html">OpenIsisStubCbData</a> *dta
<a name="l01071"></a>01071 );
<a name="l01072"></a>01072 
<a name="l01075"></a>01075 <span class="keyword">extern</span> <span class="keywordtype">void</span> openIsisNDeinit ();
<a name="l01076"></a>01076 
<a name="l01079"></a>01079 <span class="keyword">extern</span> OpenIsisStub openIsisNOpen (
<a name="l01080"></a>01080         <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> argc, <span class="keyword">const</span> <span class="keywordtype">char</span> **argv, <a class="code" href="structOpenIsisStubCbData.html">OpenIsisStubCbData</a> *dta
<a name="l01081"></a>01081 );
<a name="l01082"></a>01082 
<a name="l01085"></a>01085 <span class="keyword">extern</span> <span class="keywordtype">void</span> openIsisNClose (OpenIsisStub stub);
<a name="l01086"></a>01086 
<a name="l01089"></a>01089 <span class="keyword">extern</span> <a class="code" href="structOpenIsisSchema.html">OpenIsisSchema</a>* openIsisNSchema (OpenIsisStub stub);
<a name="l01090"></a>01090 
<a name="l01102"></a>01102 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisNSend (
<a name="l01103"></a>01103         OpenIsisStub stub, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *rqs,
<a name="l01104"></a>01104         OpenIsisRspCb *actcb, <span class="keywordtype">void</span> *actcld, <span class="keywordtype">int</span> rdup
<a name="l01105"></a>01105 );
<a name="l01106"></a>01106 
<a name="l01110"></a>01110 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *openIsisNRecv (OpenIsisStub stub, <a class="code" href="structOpenIsisDb.html">OpenIsisDb</a> **db);
<a name="l01111"></a>01111 
<a name="l01114"></a>01114 <span class="keyword">extern</span> <span class="keywordtype">void</span> openIsisNClean (OpenIsisStub stub);
<a name="l01115"></a>01115 
<a name="l01118"></a>01118 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisNGetResult (OpenIsisStub stub,
<a name="l01119"></a>01119         <span class="keywordtype">int</span> **rowids, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> ***recs, <span class="keywordtype">int</span> *total,
<a name="l01120"></a>01120         <a class="code" href="structOpenIsisDb.html">OpenIsisDb</a> **db, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> **rqs);
<a name="l01121"></a>01121 
<a name="l01127"></a>01127 <span class="keyword">extern</span> <span class="keywordtype">void</span> openIsisNNotifyResponse (OpenIsisStub stub, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> **rsp);
<a name="l01128"></a>01128 
<a name="l01134"></a>01134 <span class="keyword">extern</span> <span class="keywordtype">void</span> openIsisNNotifyError (OpenIsisStub stub, <span class="keywordtype">int</span> errcode);
<a name="l01135"></a>01135 
<a name="l01138"></a>01138 <span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="structCliChnl.html">CliChnl</a>* openIsisNGetChannel (OpenIsisStub stub);
<a name="l01139"></a>01139 
<a name="l01142"></a>01142 <span class="keyword">extern</span> <a class="code" href="structOpenIsisDb.html">OpenIsisDb</a> *openIsisNDbByName (OpenIsisStub stub, <span class="keyword">const</span> <span class="keywordtype">char</span> *dbname);
<a name="l01143"></a>01143 
<a name="l01146"></a>01146 <span class="keyword">extern</span> <a class="code" href="structOpenIsisDb.html">OpenIsisDb</a> *openIsisNDbById (<span class="keywordtype">int</span> dbid);
<a name="l01147"></a>01147 
<a name="l01148"></a>01148 
<a name="l01149"></a>01149 <span class="comment">/* ************************************************************</span>
<a name="l01150"></a>01150 <span class="comment">        db control</span>
<a name="l01151"></a>01151 <span class="comment">*/</span>
<a name="l01152"></a>01152 
<a name="l01187"></a>01187 <span class="keyword">extern</span> <a class="code" href="structOpenIsisDb.html">OpenIsisDb</a>* openIsisCDOpen ( <span class="keyword">const</span> <span class="keywordtype">char</span> *dbname,
<a name="l01188"></a>01188         <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *dbpar, <a class="code" href="structOpenIsisRec.html">OpenIsisRec</a> *syspar, <a class="code" href="structOpenIsisFdt.html">OpenIsisFdt</a> *fdt );
<a name="l01196"></a>01196 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisCDOpenv ( <span class="keyword">const</span> <span class="keywordtype">char</span> *dbname, <span class="keyword">const</span> <span class="keywordtype">char</span> **argv, <span class="keywordtype">int</span> argc );
<a name="l01197"></a>01197 
<a name="l01198"></a>01198 <span class="keyword">enum</span> {
<a name="l01199"></a>01199         OPENISIS_CHK_ONLY = 0x01,       <span class="comment">/* check only, do not fix */</span>
<a name="l01200"></a>01200         OPENISIS_CHK_XRF  = 0x02,       <span class="comment">/* check the xrf */</span>
<a name="l01201"></a>01201         OPENISIS_CHK_FIX  = 0xfe,       <span class="comment">/* check all and fix */</span>
<a name="l01202"></a>01202         OPENISIS_CHK_ALL  = 0xff        <span class="comment">/* check all, no fix */</span>
<a name="l01203"></a>01203 };
<a name="l01206"></a>01206 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisCDCheck ( <span class="keywordtype">int</span> dbid, <span class="keywordtype">int</span> flags );
<a name="l01207"></a>01207 
<a name="l01208"></a>01208 
<a name="l01209"></a>01209 
<a name="l01215"></a>01215 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisCDClose ( <span class="keywordtype">int</span> dbid );
<a name="l01216"></a>01216 
<a name="l01217"></a>01217 
<a name="l01218"></a>01218 <span class="comment">/* ************************************************************</span>
<a name="l01219"></a>01219 <span class="comment">        low level index access</span>
<a name="l01220"></a>01220 <span class="comment"></span>
<a name="l01221"></a>01221 <span class="comment">        DO NOT USE unless you know what you&apos;re doing !!!!!!!!!</span>
<a name="l01222"></a>01222 <span class="comment"></span>
<a name="l01223"></a>01223 <span class="comment">*/</span>
<a name="l01224"></a>01224 
<a name="l01225"></a>01225 <span class="keyword">typedef</span> <span class="keyword">struct </span>OpenIsisIdx *OpenIsisIndex;
<a name="l01226"></a>01226 
<a name="l01232"></a>01232 <span class="keyword">extern</span> OpenIsisIndex openIsisCXOpen ( <span class="keywordtype">int</span> dbid, <span class="keywordtype">int</span> mode );
<a name="l01233"></a>01233 
<a name="l01239"></a>01239 <span class="keyword">extern</span> <span class="keywordtype">int</span> openIsisCXAdd ( OpenIsisIndex idx,
<a name="l01240"></a>01240         <a class="code" href="structOpenIsisKey.html">OpenIsisKey</a> *key, <a class="code" href="structOpenIsisHit.html">OpenIsisHit</a> *hit );
<a name="l01241"></a>01241 
<a name="l01242"></a>01242 <span class="preprocessor">#define openIsisCXClose( idx ) openIsisCXAdd( idx, 0, 0 )</span>
<a name="l01243"></a>01243 <span class="preprocessor"></span>
<a name="l01244"></a>01244 <span class="preprocessor">#ifdef _REENTRANT</span>
<a name="l01245"></a>01245 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> openisis_threaded;
<a name="l01246"></a>01246 <span class="preprocessor">#endif</span>
<a name="l01247"></a>01247 <span class="preprocessor"></span>
<a name="l01248"></a>01248 <span class="comment">/* ************************************************************</span>
<a name="l01249"></a>01249 <span class="comment">        single session and legacy mode pre 0.9</span>
<a name="l01250"></a>01250 <span class="comment">*/</span>
<a name="l01251"></a>01251 
<a name="l01256"></a><a class="code" href="structOpenIsisFld.html">01256</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l01257"></a>01257         <span class="comment">/*</span>
<a name="l01258"></a>01258 <span class="comment">        although isis-1 dbs have only 2 bytes for field tags (numbers),</span>
<a name="l01259"></a>01259 <span class="comment">        we use ints with the lower 3 bytes for the tag.</span>
<a name="l01260"></a>01260 <span class="comment">        The highest byte may have special usage in some context.</span>
<a name="l01261"></a>01261 <span class="comment">        */</span>
<a name="l01262"></a>01262         <span class="keywordtype">int</span> tag;
<a name="l01263"></a>01263         <span class="keywordtype">int</span> off;
<a name="l01264"></a>01264         <span class="keywordtype">int</span> len;
<a name="l01265"></a>01265 } <a class="code" href="structOpenIsisFld.html">OpenIsisFld</a>;
<a name="l01266"></a>01266 
<a name="l01269"></a><a class="code" href="structOpenIsisRaw.html">01269</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l01270"></a>01270         <span class="keywordtype">int</span>         dbid;
<a name="l01271"></a>01271         <span class="keywordtype">int</span>         rowid;
<a name="l01272"></a>01272         <span class="keywordtype">int</span>         bytes; <span class="comment">/* total avail bytes */</span>
<a name="l01273"></a>01273         <span class="keywordtype">int</span>         used; <span class="comment">/* total used bytes (originally BWB) */</span>
<a name="l01274"></a>01274         <span class="keywordtype">int</span>         fields;  <span class="comment">/* avail number of fields (originally BWP) */</span>
<a name="l01275"></a>01275         <span class="keywordtype">int</span>         base; <span class="comment">/* byte offset of contents area (after fields) */</span>
<a name="l01276"></a>01276         <span class="keywordtype">int</span>         len;        <span class="comment">/* used number of fields */</span>
<a name="l01277"></a>01277         <span class="keywordtype">int</span>         state;
<a name="l01278"></a>01278         <a class="code" href="structOpenIsisFld.html">OpenIsisFld</a> field[1];
<a name="l01279"></a>01279 } <a class="code" href="structOpenIsisRaw.html">OpenIsisRaw</a>;
<a name="l01280"></a>01280 
<a name="l01282"></a>01282 <span class="keyword">extern</span> <a class="code" href="structOpenIsisRaw.html">OpenIsisRaw</a> *openIsisDRaw ( <span class="keywordtype">int</span> db, <span class="keywordtype">int</span> rowid );
<a name="l01283"></a>01283 
<a name="l01284"></a>01284 <span class="preprocessor">#ifndef OPENISIS_NOPRE09</span>
<a name="l01285"></a>01285 <span class="preprocessor"></span>
<a name="l01286"></a>01286 
<a name="l01287"></a>01287 <span class="comment">/* utilities */</span>
<a name="l01288"></a>01288 <span class="preprocessor">#define openIsis2Html( str, len ) \</span>
<a name="l01289"></a>01289 <span class="preprocessor">        openIsisToHtml ( str, len )</span>
<a name="l01290"></a>01290 <span class="preprocessor"></span><span class="preprocessor">#define openIsisValidUTF8( mem, len, tof ) \</span>
<a name="l01291"></a>01291 <span class="preprocessor">        openIsisUtf8Chk ( mem, len, tof )</span>
<a name="l01292"></a>01292 <span class="preprocessor"></span>
<a name="l01293"></a>01293 <span class="comment">/* record tools */</span>
<a name="l01294"></a>01294 <span class="preprocessor">#define openIsisClone( r, ro, d ) \</span>
<a name="l01295"></a>01295 <span class="preprocessor">        openIsisRDup( r, ro, d )</span>
<a name="l01296"></a>01296 <span class="preprocessor"></span><span class="comment">/* GNUC only, and waaarns ...</span>
<a name="l01297"></a>01297 <span class="comment">#define openIsisPrintf( r, d, t, f, a... ) \</span>
<a name="l01298"></a>01298 <span class="comment">        openIsisRMsg( r, d, t, f, ## a )</span>
<a name="l01299"></a>01299 <span class="comment">*/</span>
<a name="l01300"></a>01300 <span class="preprocessor">#define OPENISIS_CHKFREE( recp, room, disc ) \</span>
<a name="l01301"></a>01301 <span class="preprocessor">        OPENISIS_RSPACE( recp, room, disc )</span>
<a name="l01302"></a>01302 <span class="preprocessor"></span><span class="preprocessor">#define OPENISIS_ADD( recp, ntag, s, n, disc ) \</span>
<a name="l01303"></a>01303 <span class="preprocessor">        OPENISIS_RADD( recp, ntag, s, n, disc )</span>
<a name="l01304"></a>01304 <span class="preprocessor"></span><span class="preprocessor">#define OPENISIS_CAT( recp, s, n, disc ) \</span>
<a name="l01305"></a>01305 <span class="preprocessor">        OPENISIS_RCAT( recp, s, n, disc )</span>
<a name="l01306"></a>01306 <span class="preprocessor"></span><span class="preprocessor">#define OPENISIS_SADD( recp, ntag, s, disc ) \</span>
<a name="l01307"></a>01307 <span class="preprocessor">        OPENISIS_RADDS( recp, ntag, s, disc )</span>
<a name="l01308"></a>01308 <span class="preprocessor"></span><span class="preprocessor">#define OPENISIS_SCAT( recp, s, disc ) \</span>
<a name="l01309"></a>01309 <span class="preprocessor">        OPENISIS_RCATS( recp, s, disc )</span>
<a name="l01310"></a>01310 <span class="preprocessor"></span><span class="preprocessor">#define openIsisReadField( rec, f ) \</span>
<a name="l01311"></a>01311 <span class="preprocessor">        openIsisRSplitf( rec, f )</span>
<a name="l01312"></a>01312 <span class="preprocessor"></span><span class="preprocessor">#define openIsisFmt( buf, fmt, r ) \</span>
<a name="l01313"></a>01313 <span class="preprocessor">        openIsisRFmt( buf, fmt, r )</span>
<a name="l01314"></a>01314 <span class="preprocessor"></span><span class="preprocessor">#define openIsisReadStream( stream ) \</span>
<a name="l01315"></a>01315 <span class="preprocessor">        openIsisSGetr( stream )</span>
<a name="l01316"></a>01316 <span class="preprocessor"></span>
<a name="l01317"></a>01317 <span class="comment">/* database */</span>
<a name="l01318"></a>01318 <span class="preprocessor">#define openIsisMaxRowid( db ) \</span>
<a name="l01319"></a>01319 <span class="preprocessor">        openIsisDMaxId( db )</span>
<a name="l01320"></a>01320 <span class="preprocessor"></span><span class="preprocessor">#define openIsisReadRow( db, rowid ) \</span>
<a name="l01321"></a>01321 <span class="preprocessor">        openIsisDRead( db, rowid )</span>
<a name="l01322"></a>01322 <span class="preprocessor"></span><span class="preprocessor">#define openIsisReadRaw( db, rowid ) \</span>
<a name="l01323"></a>01323 <span class="preprocessor">        openIsisDRaw( db, rowid )</span>
<a name="l01324"></a>01324 <span class="preprocessor"></span><span class="preprocessor">#define openIsisRead( buf, fmt, db, rowid ) \</span>
<a name="l01325"></a>01325 <span class="preprocessor">        openIsisDFmt( buf, fmt, db, rowid )</span>
<a name="l01326"></a>01326 <span class="preprocessor"></span><span class="preprocessor">#define openIsisWrite( db, r ) \</span>
<a name="l01327"></a>01327 <span class="preprocessor">        openIsisDWrite( db, r )</span>
<a name="l01328"></a>01328 <span class="preprocessor"></span><span class="preprocessor">#define openIsisWritex( db, r, i ) \</span>
<a name="l01329"></a>01329 <span class="preprocessor">        openIsisDWritex( db, r, i )</span>
<a name="l01330"></a>01330 <span class="preprocessor"></span><span class="preprocessor">#define openIsisScan( db, rowid, tag, key ) \</span>
<a name="l01331"></a>01331 <span class="preprocessor">        openIsisDScan( db, rowid, tag, key )</span>
<a name="l01332"></a>01332 <span class="preprocessor"></span><span class="preprocessor">#define openIsisTerm( rec, db, key ) \</span>
<a name="l01333"></a>01333 <span class="preprocessor">        openIsisDTerm( rec, db, key )</span>
<a name="l01334"></a>01334 <span class="preprocessor"></span><span class="preprocessor">#define openIsisQuery( set, db, key, mode, skip ) \</span>
<a name="l01335"></a>01335 <span class="preprocessor">        openIsisDQuery( set, db, key, mode, skip )</span>
<a name="l01336"></a>01336 <span class="preprocessor"></span><span class="comment">/* database index */</span>
<a name="l01337"></a>01337 <span class="preprocessor">#define OpenIsisIdxCb OpenIsisDXCb</span>
<a name="l01338"></a>01338 <span class="preprocessor"></span><span class="preprocessor">#define OpenIsisIdxLoop OpenIsisDXLoop</span>
<a name="l01339"></a>01339 <span class="preprocessor"></span><span class="preprocessor">#define openIsisIdxLoop( dbis, cb ) \</span>
<a name="l01340"></a>01340 <span class="preprocessor">        openIsisDXLoop( dbis, cb )</span>
<a name="l01341"></a>01341 <span class="preprocessor"></span>
<a name="l01342"></a>01342 <span class="comment">/* system control (main session only) */</span>
<a name="l01343"></a>01343 <span class="preprocessor">#define openIsisLog openIsisCLog</span>
<a name="l01344"></a>01344 <span class="preprocessor"></span><span class="preprocessor">#define OpenIsisLockFunc OpenIsisCLockFunc</span>
<a name="l01345"></a>01345 <span class="preprocessor"></span><span class="preprocessor">#define openIsisInit( argc, argv, lock ) \</span>
<a name="l01346"></a>01346 <span class="preprocessor">        openIsisCInit( argc, argv, lock )</span>
<a name="l01347"></a>01347 <span class="preprocessor"></span><span class="preprocessor">#define openIsisSesGet( id, args ) \</span>
<a name="l01348"></a>01348 <span class="preprocessor">        (id) ? openIsisCSession( args ) : openIsisCOpen( args )</span>
<a name="l01349"></a>01349 <span class="preprocessor"></span><span class="comment">/* database control (main session only) */</span>
<a name="l01350"></a>01350 <span class="preprocessor">#define openIsisOpen openIsisCDOpenv</span>
<a name="l01351"></a>01351 <span class="preprocessor"></span><span class="preprocessor">#define openIsisCheck openIsisCDCheck</span>
<a name="l01352"></a>01352 <span class="preprocessor"></span><span class="preprocessor">#define openIsisClose openIsisCDClose</span>
<a name="l01353"></a>01353 <span class="preprocessor"></span><span class="comment">/* database index control (main session only) */</span>
<a name="l01354"></a>01354 <span class="preprocessor">#define openIsisIdxOpen openIsisCXOpen</span>
<a name="l01355"></a>01355 <span class="preprocessor"></span><span class="preprocessor">#define openIsisIdxAdd openIsisCXAdd</span>
<a name="l01356"></a>01356 <span class="preprocessor"></span><span class="preprocessor">#define openIsisIdxDone( idx ) openIsisCXClose( idx )</span>
<a name="l01357"></a>01357 <span class="preprocessor"></span>
<a name="l01358"></a>01358 <span class="preprocessor">#endif  </span><span class="comment">/* OPENISIS_NOPRE09 */</span>
<a name="l01359"></a>01359 
<a name="l01360"></a>01360 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l01361"></a>01361 <span class="preprocessor"></span>}
<a name="l01362"></a>01362 <span class="preprocessor">#endif </span><span class="comment">/* extern &quot;C&quot; */</span>
<a name="l01363"></a>01363 <span class="preprocessor">#define OPENISIS_H</span>
<a name="l01364"></a>01364 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* OPENISIS_H */</span>
</pre></div></div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Variables</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr size="1"/><address style="text-align: right;"><small>Generated on Tue Mar 30 14:47:13 2010 for IsisReader by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>