aboutsummaryrefslogtreecommitdiff
path: root/doc/html/pw_8h_source.html
blob: d71f299f63bf4f0dd11d54b1933ffd5c9117b9b4 (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
<!-- 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/malete/mlt/pw.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/malete/mlt/pw.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">        The Malete project - the Z39.2/Z39.50 database framework of OpenIsis.</span>
<a name="l00003"></a>00003 <span class="comment">        Version 0.9.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.</span>
<a name="l00014"></a>00014 <span class="comment">        See the GNU 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 PW_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: pw.h,v 1.2 2005/02/23 17:09:52 kripke Exp $</span>
<a name="l00026"></a>00026 <span class="comment">        interface of the Malete patchwork</span>
<a name="l00027"></a>00027 <span class="comment">*/</span>
<a name="l00028"></a>00028 
<a name="l00029"></a>00029 <span class="preprocessor">#define PW_VERSION &quot;1.0&quot;</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 
<a name="l00032"></a>00032 <span class="preprocessor">#include &quot;core.h&quot;</span>
<a name="l00033"></a>00033 
<a name="l00034"></a>00034 
<a name="l00035"></a>00035 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structObj.html">Obj</a> <a class="code" href="structObj.html">Obj</a>;
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 
<a name="l00038"></a>00038 <span class="comment">/* ****************************************************************** */</span>
<a name="l00039"></a>00039 <span class="comment">/*                                                                    */</span>
<a name="l00040"></a>00040 <span class="comment">/* HASH TABLE                                                         */</span>
<a name="l00041"></a>00041 <span class="comment">/*                                                                    */</span>
<a name="l00042"></a>00042 <span class="comment">/* ****************************************************************** */</span>
<a name="l00043"></a>00043 
<a name="l00044"></a>00044 <span class="preprocessor">#define HEDEFKEYLEN 1</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span>
<a name="l00046"></a>00046 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structHEntry.html">HEntry</a> <a class="code" href="structHEntry.html">HEntry</a>;
<a name="l00047"></a>00047 <span class="comment">/* hmmm ... maybe this should become part of Obj */</span>
<a name="l00048"></a><a class="code" href="structHEntry.html">00048</a> <span class="keyword">struct </span><a class="code" href="structHEntry.html">HEntry</a> {
<a name="l00049"></a>00049         <a class="code" href="structHEntry.html">HEntry</a> *nxt;
<a name="l00050"></a>00050         <a class="code" href="structObj.html">Obj</a>    *obj;
<a name="l00051"></a>00051         <span class="keywordtype">int</span>     hv; <span class="comment">/* hash value of this entry */</span>
<a name="l00052"></a>00052 <span class="preprocessor">#ifndef NDEBUG</span>
<a name="l00053"></a>00053 <span class="preprocessor"></span>        <span class="keywordtype">int</span>     dpt;
<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
<a name="l00055"></a>00055 <span class="preprocessor"></span>        <span class="keywordtype">int</span>     len;
<a name="l00056"></a>00056         <span class="keywordtype">char</span>    key[HEDEFKEYLEN]; <span class="comment">/* not 0 terminated */</span>
<a name="l00057"></a>00057 };
<a name="l00058"></a>00058 
<a name="l00059"></a>00059 <span class="comment">/* hmmm ... maybe this should become part of Struct */</span>
<a name="l00060"></a><a class="code" href="structHTable.html">00060</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structHTable.html">HTable</a> {
<a name="l00061"></a>00061         <a class="code" href="structList.html">List</a> *list;
<a name="l00062"></a>00062         <span class="keywordtype">int</span>   mask;
<a name="l00063"></a>00063         <span class="keywordtype">int</span>   nume; <span class="comment">/* # of entries */</span>
<a name="l00064"></a>00064         <span class="keywordtype">int</span>   dsize; <span class="comment">/* # bytes of unlinked entries */</span>
<a name="l00065"></a>00065 <span class="preprocessor">#ifndef NDEBUG</span>
<a name="l00066"></a>00066 <span class="preprocessor"></span>        <span class="keywordtype">int</span>   coll; <span class="comment">/* # of collisions */</span>
<a name="l00067"></a>00067 <span class="preprocessor">#endif</span>
<a name="l00068"></a>00068 <span class="preprocessor"></span>} <a class="code" href="structHTable.html">HTable</a>;
<a name="l00069"></a>00069 
<a name="l00070"></a>00070 <span class="preprocessor">#define HSIZ(t) (-((t)-&gt;list-&gt;fld-&gt;tag)-1) </span><span class="comment">/* number of buckets */</span> 
<a name="l00071"></a>00071 <span class="preprocessor">#define HSHIFT 1 </span><span class="comment">/* rebuild factor: HSIZ(t) &lt;&lt; HSHIFT */</span> 
<a name="l00072"></a>00072 <span class="preprocessor">#define HESIZ(he)  (sizeof(HEntry)+(he)-&gt;len-HEDEFKEYLEN) </span><span class="comment">/* entry size */</span> 
<a name="l00073"></a>00073 <span class="preprocessor">#define HINITIAL 32 </span><span class="comment">/* initial # of buckets */</span>
<a name="l00074"></a>00074 <span class="preprocessor">#define HMAXLOAD 75 </span><span class="comment">/* max load factor */</span>
<a name="l00075"></a>00075 <span class="preprocessor">#define HCURLOAD(t) ( (100*(t)-&gt;nume) /  HSIZ(t) ) </span><span class="comment">/* current load */</span> 
<a name="l00076"></a>00076 <span class="preprocessor">#define HSHRINKLOAD 25 </span><span class="comment">/* shrink, if HCURLOAD(t) &lt; HSHRINKLOAD */</span>
<a name="l00077"></a>00077 <span class="preprocessor">#define HMAXFRAG 50 </span><span class="comment">/* max fragmentation factor */</span> 
<a name="l00078"></a>00078 <span class="preprocessor">#define HCURFRAG(t) ( (100*((t)-&gt;dsize)) / LSIZ((t)-&gt;list) ) </span><span class="comment">/* current frag */</span>
<a name="l00079"></a>00079 
<a name="l00080"></a>00080 
<a name="l00081"></a>00081 <span class="keyword">extern</span> <a class="code" href="structHEntry.html">HEntry</a>* OPT_STDCALL hGet ( <a class="code" href="structHTable.html">HTable</a> *table, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">int</span> len );
<a name="l00082"></a>00082 <span class="keyword">extern</span> <a class="code" href="structHEntry.html">HEntry</a>* OPT_STDCALL hAdd ( <a class="code" href="structHTable.html">HTable</a> *table, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">int</span> len );
<a name="l00083"></a>00083 <span class="keyword">extern</span> <a class="code" href="structHEntry.html">HEntry</a>* OPT_STDCALL hSet ( <a class="code" href="structHTable.html">HTable</a> *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">int</span> len, <a class="code" href="structObj.html">Obj</a> *o );
<a name="l00084"></a>00084 <span class="keyword">extern</span> <span class="keywordtype">int</span> OPT_STDCALL hDel ( <a class="code" href="structHTable.html">HTable</a> *table, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">int</span> len );
<a name="l00085"></a>00085 <span class="keyword">extern</span> <a class="code" href="structHTable.html">HTable</a>* OPT_STDCALL hInit ( <a class="code" href="structHTable.html">HTable</a> *table, <span class="keyword">const</span> <span class="keywordtype">char</span>* header );
<a name="l00086"></a>00086 <span class="keyword">extern</span> <span class="keywordtype">void</span> OPT_STDCALL hFini ( <a class="code" href="structHTable.html">HTable</a> *table );
<a name="l00087"></a>00087 
<a name="l00088"></a>00088 <span class="comment">/* free al resources held by table */</span>
<a name="l00089"></a>00089 <span class="preprocessor">#define HFREE( table ) do { \</span>
<a name="l00090"></a>00090 <span class="preprocessor">                hFini( (table) ); \</span>
<a name="l00091"></a>00091 <span class="preprocessor">                mFree( table ); \</span>
<a name="l00092"></a>00092 <span class="preprocessor">        } while (0)</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span>
<a name="l00094"></a>00094 <span class="preprocessor">#ifndef NDEBUG</span>
<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="comment">/* debug statistics */</span>
<a name="l00096"></a>00096 <span class="keyword">extern</span> <span class="keywordtype">void</span> OPT_STDCALL hstat ( <a class="code" href="structHTable.html">HTable</a> *table );
<a name="l00097"></a>00097 <span class="preprocessor">#       define HSTAT(t) hstat(t);</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor"># define HSTAT(t)</span>
<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span>
<a name="l00102"></a>00102 
<a name="l00103"></a>00103 
<a name="l00104"></a>00104 <span class="comment">/* ****************************************************************** */</span>
<a name="l00105"></a>00105 <span class="comment">/*                                                                    */</span>
<a name="l00106"></a>00106 <span class="comment">/* OBJECTS AND MESSAGES                                               */</span>
<a name="l00107"></a>00107 <span class="comment">/*                                                                    */</span>
<a name="l00108"></a>00108 <span class="comment">/* ****************************************************************** */</span>
<a name="l00109"></a>00109 
<a name="l00110"></a>00110 <span class="keyword">typedef</span> <a class="code" href="structFld.html">Fld</a> * <a class="code" href="structFld.html">Msg</a>;
<a name="l00111"></a>00111 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structQry.html">Qry</a> <a class="code" href="structQry.html">Qry</a>; <span class="comment">/* query implemented by dbo */</span>
<a name="l00112"></a>00112 
<a name="l00113"></a>00113 
<a name="l00114"></a>00114 <span class="comment">/*</span>
<a name="l00115"></a>00115 <span class="comment">        dispatch message &quot;msg&quot;, starting at object obj.</span>
<a name="l00116"></a>00116 <span class="comment"></span>
<a name="l00117"></a>00117 <span class="comment">        -----------------------------------</span>
<a name="l00118"></a>00118 <span class="comment">        Syntax and semantics of messages</span>
<a name="l00119"></a>00119 <span class="comment"></span>
<a name="l00120"></a>00120 <span class="comment">        A message is basically an array of fields - usually of length 1. The leader</span>
<a name="l00121"></a>00121 <span class="comment">        of this array containes the messagename, denoting a method, and possibly</span>
<a name="l00122"></a>00122 <span class="comment">        options. The mesagename has to be given in the leader&apos;s primary value, the</span>
<a name="l00123"></a>00123 <span class="comment">        options in following subfields.  Data to be processed is contained in the</span>
<a name="l00124"></a>00124 <span class="comment">        following fields - if any. The messagename may contain subobject specifiers,</span>
<a name="l00125"></a>00125 <span class="comment">        which have to be separated by a &apos;.&apos;. Besides this the evaluation of the</span>
<a name="l00126"></a>00126 <span class="comment">        given leader is solely in the responsibility of the method invoked. The</span>
<a name="l00127"></a>00127 <span class="comment">        message evaluation may change the given message. The significant length of a</span>
<a name="l00128"></a>00128 <span class="comment">        messagename may be limited to four bytes. A leader should not be longer</span>
<a name="l00129"></a>00129 <span class="comment">        than DEFBLKLEN bytes, though some messages may allow longer sizes. Some</span>
<a name="l00130"></a>00130 <span class="comment">        messagenames may use special characters denoting a special treatment of the</span>
<a name="l00131"></a>00131 <span class="comment">        given leader - thus such characters should not be used for ordinary</span>
<a name="l00132"></a>00132 <span class="comment">        messagenames. The result of the evaluation, if any, is always written to</span>
<a name="l00133"></a>00133 <span class="comment">        env.out.</span>
<a name="l00134"></a>00134 <span class="comment">*/</span>
<a name="l00135"></a>00135 <span class="keyword">typedef</span> <span class="keywordtype">int</span> OPT_STDCALL disp ( <a class="code" href="structObj.html">Obj</a> *<span class="keyword">self</span>, <a class="code" href="structFld.html">Msg</a> msg );
<a name="l00136"></a>00136 
<a name="l00137"></a>00137 <span class="comment">/*</span>
<a name="l00138"></a>00138 <span class="comment">        the general form of an object</span>
<a name="l00139"></a>00139 <span class="comment">        send it a message using that-&gt;snd(msg)</span>
<a name="l00140"></a>00140 <span class="comment">        In general, snd must return &lt;0 on error, &gt;=0 else</span>
<a name="l00141"></a>00141 <span class="comment">*/</span>
<a name="l00142"></a><a class="code" href="structObj.html">00142</a> <span class="keyword">struct </span><a class="code" href="structObj.html">Obj</a> {
<a name="l00143"></a>00143         disp *snd; <span class="comment">/* method implementation */</span>
<a name="l00144"></a>00144 };
<a name="l00148"></a>00148 <span class="keyword">extern</span> <span class="keywordtype">int</span> OPT_STDCALL oObj ( <a class="code" href="structObj.html">Obj</a> *<span class="keyword">self</span>, <a class="code" href="structFld.html">Msg</a> msg );
<a name="l00149"></a>00149 
<a name="l00150"></a>00150 
<a name="l00151"></a>00151 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structStruct.html">Struct</a> <a class="code" href="structStruct.html">Struct</a>;
<a name="l00152"></a>00152 
<a name="l00153"></a>00153 <span class="keyword">typedef</span> <a class="code" href="structObj.html">Obj</a>* OPT_STDCALL factory ( <a class="code" href="structStruct.html">Struct</a> *<span class="keyword">self</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">int</span> len );
<a name="l00154"></a>00154 <span class="comment">/*</span>
<a name="l00155"></a>00155 <span class="comment">        an object with variable number of childs</span>
<a name="l00156"></a>00156 <span class="comment">*/</span>
<a name="l00157"></a><a class="code" href="structStruct.html">00157</a> <span class="keyword">struct </span><a class="code" href="structStruct.html">Struct</a> {
<a name="l00158"></a>00158         disp    *snd; <span class="comment">/* method implementation */</span>
<a name="l00159"></a>00159         <a class="code" href="structHTable.html">HTable</a>  *reg; <span class="comment">/* child registry */</span>
<a name="l00160"></a>00160         factory *fac; <span class="comment">/* child factory */</span>
<a name="l00161"></a>00161 };
<a name="l00165"></a>00165 <span class="keyword">extern</span> <span class="keywordtype">int</span> OPT_STDCALL oStruct ( <a class="code" href="structStruct.html">Struct</a> *<span class="keyword">self</span>, <a class="code" href="structFld.html">Msg</a> msg );
<a name="l00166"></a>00166 
<a name="l00167"></a>00167 
<a name="l00171"></a><a class="code" href="structSes.html">00171</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structSes.html">Ses</a> {
<a name="l00172"></a>00172         disp    *snd;
<a name="l00173"></a>00173         <a class="code" href="structHTable.html">HTable</a>  *reg; <span class="comment">/* main registry */</span>
<a name="l00174"></a>00174         factory *fac; <span class="comment">/* main factory */</span>
<a name="l00175"></a>00175         <a class="code" href="structSink.html">Sink</a>    *out; <span class="comment">/* main env.out for this session */</span>
<a name="l00176"></a>00176         <a class="code" href="structSink.html">Sink</a>    *err; <span class="comment">/* env.err for this session */</span>
<a name="l00177"></a>00177         <span class="keywordtype">unsigned</span> rid; <span class="comment">/* last rid written */</span>
<a name="l00178"></a>00178         <a class="code" href="structQry.html">Qry</a>     *qry; <span class="comment">/* array of q queries */</span>
<a name="l00179"></a>00179         lolo     req; <span class="comment">/* request counter */</span>
<a name="l00180"></a>00180         <span class="comment">/* options */</span>
<a name="l00181"></a>00181         <span class="keywordtype">char</span>    *at; <span class="comment">/* default target */</span>
<a name="l00182"></a>00182         <span class="keywordtype">unsigned</span> r; <span class="comment">/* max # of records per read, 0 = unlimited */</span>
<a name="l00183"></a>00183         <span class="keywordtype">unsigned</span> q; <span class="comment">/* max # of open query cursors != 0 */</span>
<a name="l00184"></a>00184         <span class="keywordtype">unsigned</span> s; <span class="comment">/* max # of results in search set, 0 = unlimited */</span>
<a name="l00185"></a>00185 } <a class="code" href="structSes.html">Ses</a>;
<a name="l00186"></a>00186 <span class="keyword">extern</span> <span class="keywordtype">int</span>  OPT_STDCALL oSes ( <a class="code" href="structSes.html">Ses</a> *<span class="keyword">self</span>, <a class="code" href="structFld.html">Msg</a> msg );
<a name="l00187"></a>00187 
<a name="l00188"></a>00188 <span class="comment">/*</span>
<a name="l00189"></a>00189 <span class="comment">        default main factory (i.e. for the session).</span>
<a name="l00190"></a>00190 <span class="comment">        scans the environment options for defined objects</span>
<a name="l00191"></a>00191 <span class="comment">*/</span>
<a name="l00192"></a>00192 <span class="keyword">extern</span> <a class="code" href="structObj.html">Obj</a>* OPT_STDCALL facMain ( <a class="code" href="structSes.html">Ses</a> *<span class="keyword">self</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">int</span> len );
<a name="l00193"></a>00193 
<a name="l00194"></a>00194 <span class="comment">/* init session */</span>
<a name="l00195"></a>00195 <span class="keyword">extern</span> <span class="keywordtype">void</span> sInit (<a class="code" href="structSes.html">Ses</a> *s);
<a name="l00196"></a>00196 
<a name="l00197"></a>00197 
<a name="l00198"></a>00198 <span class="keyword">extern</span> <a class="code" href="structSes.html">Ses</a> *ses; <span class="comment">/* current session */</span>
<a name="l00199"></a>00199 
<a name="l00200"></a>00200 <span class="comment">/*</span>
<a name="l00201"></a>00201 <span class="comment">        main dispatcher</span>
<a name="l00202"></a>00202 <span class="comment">*/</span>
<a name="l00203"></a>00203 <span class="preprocessor">#define dispatch( msg ) ses-&gt;snd((Obj*)ses, msg)</span>
<a name="l00204"></a>00204 <span class="preprocessor"></span>
<a name="l00205"></a>00205 
<a name="l00206"></a>00206 <span class="comment">/*</span>
<a name="l00207"></a>00207 <span class="comment">        object linked to a session on some remote server</span>
<a name="l00208"></a>00208 <span class="comment">*/</span>
<a name="l00209"></a><a class="code" href="structSrv.html">00209</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structSrv.html">Srv</a> {
<a name="l00210"></a>00210         disp *snd; <span class="comment">/* method implementation */</span>
<a name="l00211"></a>00211         file *con; <span class="comment">/* connection */</span>
<a name="l00212"></a>00212 } <a class="code" href="structSrv.html">Srv</a>;
<a name="l00216"></a>00216 <span class="keyword">extern</span> <span class="keywordtype">int</span> OPT_STDCALL oSrv ( <a class="code" href="structSrv.html">Srv</a> *<span class="keyword">self</span>, <a class="code" href="structFld.html">Msg</a> msg );
<a name="l00217"></a>00217 
<a name="l00218"></a>00218 
<a name="l00219"></a>00219 <span class="comment">/*</span>
<a name="l00220"></a>00220 <span class="comment">        database object</span>
<a name="l00221"></a>00221 <span class="comment">        NOTE that these are childs of session, so all status is per session.</span>
<a name="l00222"></a>00222 <span class="comment">*/</span>
<a name="l00223"></a><a class="code" href="structDbo.html">00223</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structDbo.html">Dbo</a> {
<a name="l00224"></a>00224         disp    *snd;
<a name="l00225"></a>00225         <a class="code" href="structHTable.html">HTable</a>  *reg; <span class="comment">/* views etc */</span>
<a name="l00226"></a>00226         factory *fac; <span class="comment">/* child factory */</span>
<a name="l00227"></a>00227         <a class="code" href="structDb.html">Db</a>      *db;  <span class="comment">/* shared by the Dbos */</span>
<a name="l00228"></a>00228         <a class="code" href="structQry.html">Qry</a>     *qry; <span class="comment">/* chain of queries */</span>
<a name="l00229"></a>00229         <span class="keywordtype">unsigned</span> qid; <span class="comment">/* number of last query, 0 = none */</span>
<a name="l00230"></a>00230         <span class="keywordtype">unsigned</span> rid; <span class="comment">/* number of last written rec, 0 = none */</span>
<a name="l00231"></a>00231         <span class="comment">/* options */</span>
<a name="l00232"></a>00232         <span class="keywordtype">unsigned</span> p; <span class="comment">/* position limit for snapshot read, 0 = none */</span>
<a name="l00233"></a>00233 } <a class="code" href="structDbo.html">Dbo</a>;
<a name="l00237"></a>00237 <span class="keyword">extern</span> <span class="keywordtype">int</span> OPT_STDCALL oDbo ( <a class="code" href="structDbo.html">Dbo</a> *<span class="keyword">self</span>, <a class="code" href="structFld.html">Msg</a> msg );
<a name="l00238"></a>00238 
<a name="l00239"></a>00239 <span class="keyword">extern</span> <a class="code" href="structDbo.html">Dbo</a> *newDbo ( <span class="keywordtype">char</span> *name ); <span class="comment">/* constructor */</span>
<a name="l00240"></a>00240 <span class="keyword">extern</span> <span class="keywordtype">void</span> delDbo ( <a class="code" href="structDbo.html">Dbo</a> *<span class="keyword">self</span> ); <span class="comment">/* destructor */</span>
<a name="l00241"></a>00241 
<a name="l00242"></a>00242 
<a name="l00243"></a>00243 <span class="comment">/* ****************************************************************** */</span>
<a name="l00244"></a>00244 <span class="comment">/*                                                                    */</span>
<a name="l00245"></a>00245 <span class="comment">/* HANDLERS FOR VARIOUS STANDARD MESSAGES                             */</span>
<a name="l00246"></a>00246 <span class="comment">/*                                                                    */</span>
<a name="l00247"></a>00247 <span class="comment">/* ****************************************************************** */</span>
<a name="l00248"></a>00248 
<a name="l00249"></a>00249 
<a name="l00250"></a>00250 <span class="comment">/*</span>
<a name="l00251"></a>00251 <span class="comment">        Process a pipe message &apos;|&apos;.</span>
<a name="l00252"></a>00252 <span class="comment">        The leader is parsed for the subfields &apos;|&apos;. Each of which should contain a</span>
<a name="l00253"></a>00253 <span class="comment">        valid messagename, options may be given in following subfields terminated by</span>
<a name="l00254"></a>00254 <span class="comment">        the next &apos;|&apos; subfield or the end of the leader. The output of the first</span>
<a name="l00255"></a>00255 <span class="comment">        method is used as data input for the next and so on. The first submessage</span>
<a name="l00256"></a>00256 <span class="comment">        may start directly after the primary field w/o the &apos;|&apos; identifier.</span>
<a name="l00257"></a>00257 <span class="comment">*/</span>
<a name="l00258"></a>00258 <span class="keyword">extern</span> <span class="keywordtype">int</span> OPT_STDCALL mPipe ( <a class="code" href="structObj.html">Obj</a> *<span class="keyword">self</span>, <a class="code" href="structFld.html">Msg</a> msg );
<a name="l00259"></a>00259 
<a name="l00260"></a>00260 <span class="comment">/*</span>
<a name="l00261"></a>00261 <span class="comment">        Process a compound message &apos;;&apos;.</span>
<a name="l00262"></a>00262 <span class="comment">        The leader is parsed for the subfields &apos;;&apos;. Each of which should contain a</span>
<a name="l00263"></a>00263 <span class="comment">        valid messagename, options may be given in following subfields terminated by</span>
<a name="l00264"></a>00264 <span class="comment">        the next &apos;;&apos; subfield or the end of the leader. Each message is processed</span>
<a name="l00265"></a>00265 <span class="comment">        separately, given data is used for all messages. The first submessage may</span>
<a name="l00266"></a>00266 <span class="comment">        start directly after the primary field w/o the &apos;;&apos; identifier.</span>
<a name="l00267"></a>00267 <span class="comment">*/</span>
<a name="l00268"></a>00268 <span class="keyword">extern</span> <span class="keywordtype">int</span> OPT_STDCALL mComp ( <a class="code" href="structObj.html">Obj</a> *<span class="keyword">self</span>, <a class="code" href="structFld.html">Msg</a> msg );
<a name="l00269"></a>00269 
<a name="l00270"></a>00270 <span class="comment">/*</span>
<a name="l00271"></a>00271 <span class="comment">        Process a comment message &apos;#&apos;.</span>
<a name="l00272"></a>00272 <span class="comment">*/</span>
<a name="l00273"></a>00273 <span class="keyword">extern</span> <span class="keywordtype">int</span> OPT_STDCALL mComm ( <a class="code" href="structObj.html">Obj</a> *<span class="keyword">self</span>, <a class="code" href="structFld.html">Msg</a> msg );
<a name="l00274"></a>00274 
<a name="l00275"></a>00275 
<a name="l00276"></a>00276 <span class="preprocessor">#define PW_H</span>
<a name="l00277"></a>00277 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* PW_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>