Fix error in comment.
[ZOOM-Perl-moved-to-github.git] / ZOOM.xs
1 /* $Id: ZOOM.xs,v 1.14 2005-10-17 13:44:52 mike Exp $ */
2
3 #include "EXTERN.h"
4 #include "perl.h"
5 #include "XSUB.h"
6
7 #include <yaz/zoom.h>
8
9 /* Used by the *_setl() functions */
10 typedef char opaquechar;
11
12 /* Used as the return value of the *_getl() functions */
13 struct datachunk {
14         char *data;
15         int len;
16 };
17
18 MODULE = Net::Z3950::ZOOM               PACKAGE = Net::Z3950::ZOOM              PREFIX=ZOOM_
19
20 PROTOTYPES: ENABLE
21
22
23 # TESTED
24 ZOOM_connection
25 ZOOM_connection_new(host, portnum)
26         const char* host
27         int portnum
28
29 # TESTED
30 ZOOM_connection
31 ZOOM_connection_create(options)
32         ZOOM_options options
33
34 # TESTED
35 void
36 ZOOM_connection_connect(c, host, portnum)
37         ZOOM_connection c
38         const char* host
39         int portnum
40
41 # TESTED
42 void
43 ZOOM_connection_destroy(c)
44         ZOOM_connection c
45
46 # TESTED
47 const char *
48 ZOOM_connection_option_get(c, key)
49         ZOOM_connection c
50         const char *key
51
52 # TESTED
53 struct datachunk
54 ZOOM_connection_option_getl(c, key, len)
55         ZOOM_connection c
56         const char *key
57         int &len
58         CODE:
59                 RETVAL.data = (char*) ZOOM_connection_option_getl(c, key, &RETVAL.len);
60         OUTPUT:
61                 RETVAL
62
63 # TESTED
64 void
65 ZOOM_connection_option_set(c, key, val)
66         ZOOM_connection c
67         const char *key
68         const char *val
69
70 # In ZOOM-C, the `val' parameter is const char*.  However, our typemap
71 # treats this as T_PV, i.e. it's "known" that it points to a
72 # NUL-terminated string.  Instead, then, I here use opaquechar*, which
73 # is an opaque pointer.  The underlying C function can then use this
74 # along with `len' to Do The Right Thing.
75 #
76 # TESTED
77 void
78 ZOOM_connection_option_setl(c, key, val, len)
79         ZOOM_connection c
80         const char* key
81         opaquechar* val
82         int len
83
84 # The reference parameters, `cp' and `addinfo', need to already have
85 # values when this function is called, otherwise an "uninitialised
86 # value" warning is generated.  As far as I can see, there is no way
87 # around this: no way to specify in a prototype that an argument is
88 # allowed to be undefined, for example.  Since these function will
89 # never be called directly by well-behaved client code, but only by
90 # our own wrapper classes, I think we can live with that.
91 #
92 # The poxing about with cpp and caddinfo is due to Perl XS's lack of
93 # support for const char**, but who can blame it?  If you ask me, the
94 # whole "const" thing was well-intentioned by ghastly mistake.
95 #
96 # TESTED
97 int
98 ZOOM_connection_error(c, cp, addinfo)
99         ZOOM_connection c
100         char* &cp
101         char* &addinfo
102         CODE:
103                 const char *ccp, *caddinfo;
104                 RETVAL = ZOOM_connection_error(c, &ccp, &caddinfo);
105                 cp = (char*) ccp;
106                 addinfo = (char*) caddinfo;
107         OUTPUT:
108                 RETVAL
109                 cp
110                 addinfo
111
112 # See comments for ZOOM_connection_error() above
113 # TESTED
114 int
115 ZOOM_connection_error_x(c, cp, addinfo, diagset)
116         ZOOM_connection c
117         const char * &cp
118         const char * &addinfo
119         const char * &diagset
120         CODE:
121                 const char *ccp, *caddinfo, *cdset;
122                 RETVAL = ZOOM_connection_error_x(c, &ccp, &caddinfo, &cdset);
123                 cp = (char*) ccp;
124                 addinfo = (char*) caddinfo;
125                 diagset = (char*) cdset;
126         OUTPUT:
127                 RETVAL
128                 cp
129                 addinfo
130                 diagset
131
132 # TESTED
133 int
134 ZOOM_connection_errcode(c)
135         ZOOM_connection c
136
137 # TESTED
138 const char *
139 ZOOM_connection_errmsg(c)
140         ZOOM_connection c
141
142 # TESTED
143 const char *
144 ZOOM_connection_addinfo(c)
145         ZOOM_connection c
146
147 # TESTED
148 const char *
149 ZOOM_diag_str(error)
150         int error
151
152 # UNTESTED
153 int
154 ZOOM_connection_last_event(cs)
155         ZOOM_connection cs
156
157 # UNTESTED
158 ZOOM_resultset
159 ZOOM_connection_search(arg0, q)
160         ZOOM_connection arg0
161         ZOOM_query      q
162
163 # TESTED
164 ZOOM_resultset
165 ZOOM_connection_search_pqf(c, q)
166         ZOOM_connection c
167         const char *q
168
169 # TESTED
170 void
171 ZOOM_resultset_destroy(r)
172         ZOOM_resultset r
173
174 # UNTESTED
175 const char *
176 ZOOM_resultset_option_get(r, key)
177         ZOOM_resultset  r
178         const char *    key
179
180 # UNTESTED
181 void
182 ZOOM_resultset_option_set(r, key, val)
183         ZOOM_resultset  r
184         const char *    key
185         const char *    val
186
187 # TESTED
188 size_t
189 ZOOM_resultset_size(r)
190         ZOOM_resultset r
191
192 # UNTESTED
193 void
194 ZOOM_resultset_records(r, recs, start, count)
195         ZOOM_resultset  r
196         ZOOM_record *   recs
197         size_t  start
198         size_t  count
199
200 # TESTED
201 ZOOM_record
202 ZOOM_resultset_record(s, pos)
203         ZOOM_resultset s
204         size_t pos
205
206 # UNTESTED
207 ZOOM_record
208 ZOOM_resultset_record_immediate(s, pos)
209         ZOOM_resultset  s
210         size_t  pos
211
212 # UNTESTED
213 void
214 ZOOM_resultset_cache_reset(r)
215         ZOOM_resultset  r
216
217 # See "typemap" for discussion of the "const char *" return-type.
218 #
219 # TESTED
220 ### but should use datachunk
221 const char *
222 ZOOM_record_get(rec, type, len)
223         ZOOM_record rec
224         const char* type
225         int &len
226         OUTPUT:
227                 RETVAL
228                 len
229
230 # UNTESTED
231 void
232 ZOOM_record_destroy(rec)
233         ZOOM_record     rec
234
235 # UNTESTED
236 ZOOM_record
237 ZOOM_record_clone(srec)
238         ZOOM_record     srec
239
240 # UNTESTED
241 ZOOM_query
242 ZOOM_query_create()
243
244 # UNTESTED
245 void
246 ZOOM_query_destroy(s)
247         ZOOM_query      s
248
249 # UNTESTED
250 int
251 ZOOM_query_cql(s, str)
252         ZOOM_query      s
253         const char *    str
254
255 # UNTESTED
256 int
257 ZOOM_query_prefix(s, str)
258         ZOOM_query      s
259         const char *    str
260
261 # UNTESTED
262 int
263 ZOOM_query_sortby(s, criteria)
264         ZOOM_query      s
265         const char *    criteria
266
267 # UNTESTED
268 ZOOM_scanset
269 ZOOM_connection_scan(c, startterm)
270         ZOOM_connection c
271         const char *    startterm
272
273 # UNTESTED
274 const char *
275 ZOOM_scanset_term(scan, pos, occ, len)
276         ZOOM_scanset    scan
277         size_t  pos
278         int *   occ
279         int *   len
280
281 # UNTESTED
282 const char *
283 ZOOM_scanset_display_term(scan, pos, occ, len)
284         ZOOM_scanset    scan
285         size_t  pos
286         int *   occ
287         int *   len
288
289 # UNTESTED
290 size_t
291 ZOOM_scanset_size(scan)
292         ZOOM_scanset    scan
293
294 # UNTESTED
295 void
296 ZOOM_scanset_destroy(scan)
297         ZOOM_scanset    scan
298
299 # UNTESTED
300 const char *
301 ZOOM_scanset_option_get(scan, key)
302         ZOOM_scanset    scan
303         const char *    key
304
305 # UNTESTED
306 void
307 ZOOM_scanset_option_set(scan, key, val)
308         ZOOM_scanset    scan
309         const char *    key
310         const char *    val
311
312 # UNTESTED
313 ZOOM_package
314 ZOOM_connection_package(c, options)
315         ZOOM_connection c
316         ZOOM_options    options
317
318 # UNTESTED
319 void
320 ZOOM_package_destroy(p)
321         ZOOM_package    p
322
323 # UNTESTED
324 void
325 ZOOM_package_send(p, type)
326         ZOOM_package    p
327         const char *    type
328
329 # UNTESTED
330 const char *
331 ZOOM_package_option_get(p, key)
332         ZOOM_package    p
333         const char *    key
334
335 # UNTESTED
336 void
337 ZOOM_package_option_set(p, key, val)
338         ZOOM_package    p
339         const char *    key
340         const char *    val
341
342 # UNTESTED
343 void
344 ZOOM_resultset_sort(r, sort_type, sort_spec)
345         ZOOM_resultset  r
346         const char *    sort_type
347         const char *    sort_spec
348
349 # UNTESTED
350 ZOOM_options_callback
351 ZOOM_options_set_callback(opt, c, handle)
352         ZOOM_options    opt
353         ZOOM_options_callback   c
354         void *  handle
355
356 # TESTED
357 ZOOM_options
358 ZOOM_options_create()
359
360 # UNTESTED
361 ZOOM_options
362 ZOOM_options_create_with_parent(parent)
363         ZOOM_options    parent
364
365 # UNTESTED
366 ZOOM_options
367 ZOOM_options_create_with_parent2(parent1, parent2)
368         ZOOM_options    parent1
369         ZOOM_options    parent2
370
371 # UNTESTED
372 const char *
373 ZOOM_options_get(opt, name)
374         ZOOM_options    opt
375         const char *    name
376
377 # UNTESTED
378 const char *
379 ZOOM_options_getl(opt, name, len)
380         ZOOM_options    opt
381         const char *    name
382         int     &len
383
384 # UNTESTED
385 void
386 ZOOM_options_set(opt, name, v)
387         ZOOM_options    opt
388         const char *    name
389         const char *    v
390
391 # UNTESTED
392 void
393 ZOOM_options_setl(opt, name, value, len)
394         ZOOM_options    opt
395         const char *    name
396         const char *    value
397         int     len
398
399 # UNTESTED
400 void
401 ZOOM_options_destroy(opt)
402         ZOOM_options    opt
403
404 # UNTESTED
405 int
406 ZOOM_options_get_bool(opt, name, defa)
407         ZOOM_options    opt
408         const char *    name
409         int     defa
410
411 # UNTESTED
412 int
413 ZOOM_options_get_int(opt, name, defa)
414         ZOOM_options    opt
415         const char *    name
416         int     defa
417
418 # UNTESTED
419 void
420 ZOOM_options_set_int(opt, name, value)
421         ZOOM_options    opt
422         const char *    name
423         int     value
424
425 # UNTESTED
426 int
427 ZOOM_event(no, cs)
428         int     no
429         ZOOM_connection *       cs
430