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
|
<!-- 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/lsv.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 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 List</span></a></li>
</ul>
</div>
<h1>contrib/openisis/lsv.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 LSV_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: lsv.h,v 1.11 2003/06/03 17:09:20 kripke Exp $</span>
<a name="l00026"></a>00026 <span class="comment"> OpenIsis server</span>
<a name="l00027"></a>00027 <span class="comment">*/</span>
<a name="l00028"></a>00028
<a name="l00029"></a>00029 <span class="preprocessor">#ifdef _REENTRANT </span><span class="comment">/* it's really the wrong flag, but *sigh* */</span>
<a name="l00030"></a>00030 <span class="preprocessor">#define LSVTHR</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span>
<a name="l00033"></a>00033 <span class="preprocessor">#ifdef LSVTHR</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span> <span class="comment">/* else the work is done by the receiver */</span>
<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span>
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="preprocessor">#include "loi.h"</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include "lio.h"</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include "lses.h"</span>
<a name="l00041"></a>00041
<a name="l00042"></a>00042
<a name="l00099"></a>00099 <span class="comment">/* common header tags -- actually negative tags are used */</span>
<a name="l00100"></a>00100 <span class="keyword">enum</span> {
<a name="l00101"></a>00101 <span class="comment">/* nonstandard */</span>
<a name="l00102"></a>00102 LSV_TEXT, <span class="comment">/* +- 0: a small, inlined untyped or text/plain body */</span>
<a name="l00103"></a>00103 LSV_RID, <span class="comment">/* row id, a.k.a MFN */</span>
<a name="l00104"></a>00104 LSV_SID, <span class="comment">/* session id */</span>
<a name="l00105"></a>00105 LSV_PEER, <span class="comment">/* network peer ("remote host") */</span>
<a name="l00106"></a>00106 LSV_TIME, <span class="comment">/* GTF + millis */</span>
<a name="l00107"></a>00107 LSV_ATTACH, <span class="comment">/* wrapped-up attachment, TBD */</span>
<a name="l00108"></a>00108 <span class="comment">/* MIME basics */</span>
<a name="l00109"></a>00109 LSV_CTYPE,
<a name="l00110"></a>00110 <span class="comment">/* HTTP: CGI/servlet */</span>
<a name="l00111"></a>00111 LSV_URI,
<a name="l00112"></a>00112 LSV_QUERY
<a name="l00113"></a>00113 };
<a name="l00114"></a>00114
<a name="l00115"></a>00115 <span class="keyword">enum</span> {
<a name="l00116"></a>00116 <span class="preprocessor">#ifdef LSVTHR</span>
<a name="l00117"></a>00117 <span class="preprocessor"></span> LSV_NUMWRK = 8,
<a name="l00118"></a>00118 <span class="preprocessor">#else</span>
<a name="l00119"></a>00119 <span class="preprocessor"></span> LSV_NUMWRK = 1,
<a name="l00120"></a>00120 <span class="preprocessor">#endif</span>
<a name="l00121"></a>00121 <span class="preprocessor"></span> LSV_BUFSIZ = 0x04000, <span class="comment">/* 16384 a.k.a. 16K */</span>
<a name="l00122"></a>00122 LSV_BUFMSK = 0x03fff <span class="comment">/* mask buf lengths */</span>
<a name="l00123"></a>00123 };
<a name="l00124"></a>00124
<a name="l00125"></a><a class="code" href="structQue.html">00125</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structQue.html">Que</a> {
<a name="l00126"></a>00126 <span class="keyword">struct </span><a class="code" href="structCon.html">Con</a> *head;
<a name="l00127"></a>00127 <span class="keyword">struct </span><a class="code" href="structCon.html">Con</a> *tail;
<a name="l00128"></a>00128 <span class="keywordtype">int</span> len;
<a name="l00129"></a>00129 } <a class="code" href="structQue.html">Que</a>;
<a name="l00130"></a>00130
<a name="l00131"></a>00131 <span class="comment">/* queue with pool of workers waiting */</span>
<a name="l00132"></a><a class="code" href="structPool.html">00132</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structPool.html">Pool</a> {
<a name="l00133"></a>00133 <a class="code" href="structQue.html">Que</a> que;
<a name="l00134"></a>00134 <span class="preprocessor">#ifdef LSVTHR</span>
<a name="l00135"></a>00135 <span class="preprocessor"></span> <span class="keyword">struct </span><a class="code" href="structWrk.html">Wrk</a> *wait; <span class="comment">/* stack */</span>
<a name="l00136"></a>00136 <span class="preprocessor">#endif</span>
<a name="l00137"></a>00137 <span class="preprocessor"></span>} <a class="code" href="structPool.html">Pool</a>;
<a name="l00138"></a>00138
<a name="l00139"></a><a class="code" href="structWrk.html">00139</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structWrk.html">Wrk</a> {
<a name="l00140"></a>00140 <span class="preprocessor">#ifdef LSVTHR</span>
<a name="l00141"></a>00141 <span class="preprocessor"></span> pthread_t thr;
<a name="l00142"></a>00142 <span class="preprocessor">#endif</span>
<a name="l00143"></a>00143 <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> id;
<a name="l00144"></a>00144 <span class="keyword">struct </span><a class="code" href="structSrv.html">Srv</a> *srv;
<a name="l00145"></a>00145 <span class="keyword">struct </span><a class="code" href="structWrk.html">Wrk</a> *nxt;
<a name="l00146"></a>00146 Session ses;
<a name="l00147"></a>00147 <span class="preprocessor">#ifdef LSVTHR</span>
<a name="l00148"></a>00148 <span class="preprocessor"></span> pthread_cond_t todo; <span class="comment">/* work condition waited for by workers */</span>
<a name="l00149"></a>00149 <span class="preprocessor">#endif</span>
<a name="l00150"></a>00150 <span class="preprocessor"></span> <span class="comment">/* stats */</span>
<a name="l00151"></a>00151 <span class="keyword">struct </span><a class="code" href="structCon.html">Con</a> *cur; <span class="comment">/* current job */</span>
<a name="l00152"></a>00152 <span class="keywordtype">int</span> jobs;
<a name="l00153"></a>00153 <span class="keywordtype">int</span> waits;
<a name="l00154"></a>00154 } <a class="code" href="structWrk.html">Wrk</a>;
<a name="l00155"></a>00155
<a name="l00156"></a>00156 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structSrv.html">Srv</a> {
<a name="l00157"></a>00157 <span class="comment">/*</span>
<a name="l00158"></a>00158 <span class="comment"> the protocol stream method</span>
<a name="l00159"></a>00159 <span class="comment"> - with LIO_SPUSH, input is pushed to request (len 0 indicates EOF)</span>
<a name="l00160"></a>00160 <span class="comment"> return 0=more, >0=done, <0=error</span>
<a name="l00161"></a>00161 <span class="comment"> - on LIO_SFLUSH, prt must convert output buffer to flt</span>
<a name="l00162"></a>00162 <span class="comment"> - on LIO_SCLOSE, prt must flush and close answer</span>
<a name="l00163"></a>00163 <span class="comment"> */</span>
<a name="l00164"></a>00164 int (*prt) ( <a class="code" href="structIos.html">Ios</a>*, <span class="keywordtype">int</span> op );
<a name="l00165"></a>00165 <span class="comment">/*</span>
<a name="l00166"></a>00166 <span class="comment"> the application</span>
<a name="l00167"></a>00167 <span class="comment"> - with task APPARG (called by prt for each field):</span>
<a name="l00168"></a>00168 <span class="comment"> check (and typically modify) last field extracted by prt</span>
<a name="l00169"></a>00169 <span class="comment"> return 0=more, >0=done, <0=error</span>
<a name="l00170"></a>00170 <span class="comment"> - with task APPGOT (after request is complete):</span>
<a name="l00171"></a>00171 <span class="comment"> check request, add -LSV_SID field, if needed</span>
<a name="l00172"></a>00172 <span class="comment"> (e.g. to extract from an URL or cookie)</span>
<a name="l00173"></a>00173 <span class="comment"> - with task APPRUN (0):</span>
<a name="l00174"></a>00174 <span class="comment"> process request</span>
<a name="l00175"></a>00175 <span class="comment"> */</span>
<a name="l00176"></a>00176 int (*app) ( <span class="keyword">struct </span><a class="code" href="structCon.html">Con</a>*, <span class="keywordtype">int</span> task );
<a name="l00177"></a>00177 Fdt *fdt; <span class="comment">/* field def */</span>
<a name="l00178"></a>00178 <span class="keywordtype">int</span> flg; <span class="comment">/* flags */</span>
<a name="l00179"></a>00179 <span class="keywordtype">unsigned</span> sto; <span class="comment">/* config: session timeout (seconds) */</span>
<a name="l00180"></a>00180 <span class="keywordtype">unsigned</span> nwr; <span class="comment">/* config: #workers (<= LSV_NUMWRK) */</span>
<a name="l00181"></a>00181 Session ses; <span class="comment">/* usually the default session */</span>
<a name="l00182"></a>00182 <a class="code" href="structTm.html">Tm</a> tim; <span class="comment">/* tim of last turn */</span>
<a name="l00183"></a>00183 <span class="keywordtype">char</span> gtm[20]; <span class="comment">/* generalized time (actually 18 digits) */</span>
<a name="l00184"></a>00184 <a class="code" href="structWrk.html">Wrk</a> wrk[LSV_NUMWRK];
<a name="l00185"></a>00185 <span class="comment">/*</span>
<a name="l00186"></a>00186 <span class="comment"> single receiver model</span>
<a name="l00187"></a>00187 <span class="comment"> */</span>
<a name="l00188"></a>00188 <span class="keywordtype">int</span> lsn; <span class="comment">/* listening socket */</span>
<a name="l00189"></a>00189 <a class="code" href="structQue.html">Que</a> recv; <span class="comment">/* enq by worker, deq by receiver */</span>
<a name="l00190"></a>00190 <a class="code" href="structPool.html">Pool</a> main; <span class="comment">/* enq by dispatcher, deq by workers */</span>
<a name="l00191"></a>00191 <span class="preprocessor">#ifdef LSVTHR</span>
<a name="l00192"></a>00192 <span class="preprocessor"></span> <a class="code" href="structPool.html">Pool</a> pool; <span class="comment">/* enq by dispatcher, deq by workers */</span>
<a name="l00193"></a>00193 pthread_t rcv; <span class="comment">/* the receiver thread */</span>
<a name="l00194"></a>00194 pthread_mutex_t mut; <span class="comment">/* single mutex held by recv/disp while not in select */</span>
<a name="l00195"></a>00195 <span class="keywordtype">int</span> pip[2]; <span class="comment">/* pipe for pending events */</span>
<a name="l00196"></a>00196 <span class="preprocessor">#endif</span>
<a name="l00197"></a>00197 <span class="preprocessor"></span> <span class="comment">/* stats */</span>
<a name="l00198"></a>00198 <span class="keywordtype">int</span> plen; <span class="comment">/* length of pool */</span>
<a name="l00199"></a>00199 <span class="keywordtype">int</span> jobs; <span class="comment">/* total #jobs */</span>
<a name="l00200"></a>00200 <span class="keywordtype">int</span> conn; <span class="comment">/* total #conn */</span>
<a name="l00201"></a>00201 <span class="keywordtype">int</span> turn; <span class="comment">/* total #turn */</span>
<a name="l00202"></a>00202 <span class="keywordtype">float</span> wlen; <span class="comment">/* cumulated length of work queue (on each turn) */</span>
<a name="l00203"></a>00203 <span class="keywordtype">float</span> busy; <span class="comment">/* cumulated # of active workers (on each turn) */</span>
<a name="l00204"></a>00204 } <a class="code" href="structSrv.html">Srv</a>;
<a name="l00205"></a>00205
<a name="l00206"></a>00206 <span class="keyword">enum</span> { <span class="comment">/* server flags */</span>
<a name="l00207"></a>00207 LSV_CONSES = 0x01, <span class="comment">/* session bound to connection */</span>
<a name="l00208"></a>00208 LSV_WRKSES = 0x02, <span class="comment">/* session bound to worker */</span>
<a name="l00209"></a>00209 LSV_SHUTDN = 0x100 <span class="comment">/* server is shutting down */</span>
<a name="l00210"></a>00210 };
<a name="l00211"></a>00211 <span class="keyword">enum</span> {
<a name="l00212"></a>00212 <span class="comment">/* called in worker thread: */</span>
<a name="l00213"></a>00213 LSV_APPRUN, <span class="comment">/* app called to process request */</span>
<a name="l00214"></a>00214 LSV_APPINI, <span class="comment">/* app called to initialise non-main thread (no con) */</span>
<a name="l00215"></a>00215 LSV_APPFIN, <span class="comment">/* app called to finalize non-main thread (no con) */</span>
<a name="l00216"></a>00216 <span class="comment">/* called in receiver thread: */</span>
<a name="l00217"></a>00217 LSV_APPARG, <span class="comment">/* app called to check parameter */</span>
<a name="l00218"></a>00218 LSV_APPGOT, <span class="comment">/* app called after all input */</span>
<a name="l00219"></a>00219 LSV_APPSES <span class="comment">/* app called on new session */</span>
<a name="l00220"></a>00220 };
<a name="l00221"></a>00221 <span class="keyword">enum</span> { <span class="comment">/* connection pending state */</span>
<a name="l00222"></a>00222 LSV_PDGNON, <span class="comment">/* new connection pending */</span>
<a name="l00223"></a>00223 LSV_PDGNEW, <span class="comment">/* new connection pending */</span>
<a name="l00224"></a>00224 LSV_PDGRED, <span class="comment">/* ready to read pending */</span>
<a name="l00225"></a>00225 LSV_PDGEOF <span class="comment">/* EOF pending */</span>
<a name="l00226"></a>00226 <span class="comment">/* when adding, keep array of names in sync */</span>
<a name="l00227"></a>00227 };
<a name="l00228"></a>00228 <span class="keyword">enum</span> { <span class="comment">/* connection processing stage */</span>
<a name="l00229"></a>00229 LSV_STGNEW, <span class="comment">/* connection needs to be setup */</span>
<a name="l00230"></a>00230 LSV_STGCON, <span class="comment">/* connected, no request on the way */</span>
<a name="l00231"></a>00231 LSV_STGINP, <span class="comment">/* reading input */</span>
<a name="l00232"></a>00232 LSV_STGSES, <span class="comment">/* waiting for session */</span>
<a name="l00233"></a>00233 LSV_STGWRK, <span class="comment">/* queued for work */</span>
<a name="l00234"></a>00234 <span class="comment">/* set by worker: */</span>
<a name="l00235"></a>00235 LSV_STGRUN, <span class="comment">/* dequeued */</span>
<a name="l00236"></a>00236 LSV_STGCOM, <span class="comment">/* commited (output has started) */</span>
<a name="l00237"></a>00237 LSV_STGDON, <span class="comment">/* done processing, flushing output */</span>
<a name="l00238"></a>00238 LSV_STGRET <span class="comment">/* returning (queued to recv) */</span>
<a name="l00239"></a>00239 <span class="comment">/* when adding, keep array of names in sync */</span>
<a name="l00240"></a>00240 };
<a name="l00241"></a>00241
<a name="l00242"></a><a class="code" href="structCon.html">00242</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structCon.html">Con</a> {
<a name="l00243"></a>00243 <a class="code" href="structIos.html">Ios</a> ios; <span class="comment">/* raw output */</span>
<a name="l00244"></a>00244 <a class="code" href="structBuf.html">Buf</a> flt; <span class="comment">/* protocol filtered output */</span>
<a name="l00245"></a>00245 <span class="keyword">const</span> <a class="code" href="structSrv.html">Srv</a> *srv;
<a name="l00246"></a>00246 <span class="keyword">struct </span><a class="code" href="structCon.html">Con</a> *nxt;
<a name="l00247"></a>00247 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stg; <span class="comment">/* processing stage (guarded by mutex) */</span>
<a name="l00248"></a>00248 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> pdg; <span class="comment">/* pending flags set by receiver only */</span>
<a name="l00249"></a>00249 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> grp; <span class="comment">/* thread group (0=main) set by receiver app calls */</span>
<a name="l00250"></a>00250 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> bin; <span class="comment">/* client requested binary mode */</span>
<a name="l00251"></a>00251 <span class="keywordtype">int</span> prt; <span class="comment">/* for free use by prt, 0 init */</span>
<a name="l00252"></a>00252 <span class="keywordtype">int</span> app; <span class="comment">/* for free use by app, 0 init */</span>
<a name="l00253"></a>00253 <span class="keywordtype">int</span> host;
<a name="l00254"></a>00254 <span class="keywordtype">char</span> nam[64]; <span class="comment">/* 123.123.123.123:123456 for IPv4 */</span>
<a name="l00255"></a>00255 Session ses;
<a name="l00256"></a>00256 <a class="code" href="structFld.html">Rec</a> *req; <span class="comment">/* request -- owned by srv->ses */</span>
<a name="l00257"></a>00257 <a class="code" href="structTm.html">Tm</a> tim; <span class="comment">/* time when the request was scheduled */</span>
<a name="l00258"></a>00258 <span class="comment">/* Rec *res; response -- owned by ses */</span>
<a name="l00259"></a>00259 <span class="keywordtype">int</span> con; <span class="comment">/* connection counter */</span>
<a name="l00260"></a>00260 } <a class="code" href="structCon.html">Con</a>;
<a name="l00261"></a>00261
<a name="l00262"></a>00262 <span class="keyword">extern</span> <a class="code" href="structWrk.html">Wrk</a> *svCur ();
<a name="l00263"></a>00263 <span class="keyword">extern</span> <span class="keywordtype">int</span> svRun ( <a class="code" href="structSrv.html">Srv</a> *srv, <span class="keyword">const</span> <span class="keywordtype">char</span> *addr );
<a name="l00264"></a>00264 <span class="comment">/* the plain protocol */</span>
<a name="l00265"></a>00265 <span class="keyword">extern</span> <span class="keywordtype">int</span> svPlain ( <a class="code" href="structIos.html">Ios</a> *s, <span class="keywordtype">int</span> op );
<a name="l00266"></a>00266 <span class="keyword">extern</span> <span class="keywordtype">int</span> svEcho ( <a class="code" href="structCon.html">Con</a> *c, <span class="keywordtype">int</span> task );
<a name="l00267"></a>00267
<a name="l00268"></a>00268 <span class="preprocessor">#define LSV_H</span>
<a name="l00269"></a>00269 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* LSV_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"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </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
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>
|