-<!-- $Id: zoom.xml,v 1.16 2002-01-03 12:18:37 adam Exp $ -->
+<!-- $Id: zoom.xml,v 1.17 2002-01-28 09:27:48 adam Exp $ -->
<chapter id="zoom"><title>Building clients with ZOOM</title>
<para>
size_t start, size_t count);
ZOOM_record ZOOM_resultset_record (ZOOM_resultset s, size_t pos);
- void *ZOOM_record_get (ZOOM_record rec, const char *type,
- size_t *len);
+ const char *ZOOM_record_get (ZOOM_record rec, const char *type,
+ size_t *len);
ZOOM_record ZOOM_record_clone (ZOOM_record rec);
<variablelist>
<varlistentry><term><literal>database</literal></term>
<listitem><para>Database of record is returned
- as a C null-terminated string. Return type <literal>char *</literal>.
+ as a C null-terminated string. Return type
+ <literal>const char *</literal>.
</para></listitem>
</varlistentry>
<varlistentry><term><literal>syntax</literal></term>
<listitem><para>The transfer syntax (OID) of the record is returned
- as a C null-terminated string. Return type <literal>char *</literal>.
+ as a C null-terminated string. Return type is
+ <literal>const char *</literal>.
</para></listitem>
</varlistentry>
<varlistentry><term><literal>render</literal></term>
<listitem><para>The record is returned in a display friendly
format. Upon completion buffer is returned
- (type <literal>char *</literal>) and length is stored in
+ (type <literal>const char *</literal>) and length is stored in
<literal>*len</literal>.
</para></listitem>
</varlistentry>
<varlistentry><term><literal>raw</literal></term>
<listitem><para>The record is returned in the internal
- YAZ specific format. The raw data is returned as type
+ YAZ specific format. For GRS-1, Explain, and others, t
+ he raw data is returned as type
<literal>Z_External *</literal> which is just the type for
the member <literal>retrievalRecord</literal> in
type <literal>NamePlusRecord</literal>.
+ For SUTRS and octet aligned record (including all MARCs) the
+ octet buffer is returned and the length of the buffer.
</para></listitem>
</varlistentry>
</variablelist>
/*
- * $Id: zoom-c.c,v 1.22 2002-01-24 19:33:09 adam Exp $
+ * $Id: zoom-c.c,v 1.23 2002-01-28 09:27:48 adam Exp $
*
* ZOOM layer for C, connections, result sets, queries.
*/
static ZOOM_Event ZOOM_Event_create (int kind)
{
- ZOOM_Event event = xmalloc (sizeof(*event));
+ ZOOM_Event event = (ZOOM_Event) xmalloc (sizeof(*event));
event->kind = kind;
event->next = 0;
event->prev = 0;
ZOOM_task *taskp = &c->tasks;
while (*taskp)
taskp = &(*taskp)->next;
- *taskp = xmalloc (sizeof(**taskp));
+ *taskp = (ZOOM_task) xmalloc (sizeof(**taskp));
(*taskp)->running = 0;
(*taskp)->which = which;
(*taskp)->next = 0;
ZOOM_connection ZOOM_connection_create (ZOOM_options options)
{
- ZOOM_connection c = xmalloc (sizeof(*c));
+ ZOOM_connection c = (ZOOM_connection) xmalloc (sizeof(*c));
c->cs = 0;
c->mask = 0;
}
else
cp = "Default";
- databaseNames = odr_malloc (con->odr_out, no * sizeof(*databaseNames));
+ databaseNames = (char**)
+ odr_malloc (con->odr_out, no * sizeof(*databaseNames));
no = 0;
while (*cp)
{
}
/* cp ptr to first char of db name, c is char
following db name */
- databaseNames[no] = odr_malloc (con->odr_out, 1+c-cp);
+ databaseNames[no] = (char*) odr_malloc (con->odr_out, 1+c-cp);
memcpy (databaseNames[no], cp, c-cp);
databaseNames[no++][c-cp] = '\0';
cp = c;
ZOOM_query ZOOM_query_create(void)
{
- ZOOM_query s = xmalloc (sizeof(*s));
+ ZOOM_query s = (ZOOM_query) xmalloc (sizeof(*s));
s->refcount = 1;
s->query = 0;
int ZOOM_query_prefix(ZOOM_query s, const char *str)
{
- s->query = odr_malloc (s->odr, sizeof(*s->query));
+ s->query = (Z_Query *) odr_malloc (s->odr, sizeof(*s->query));
s->query->which = Z_Query_type_1;
s->query->u.type_1 = p_query_rpn(s->odr, PROTO_Z3950, str);
if (!s->query->u.type_1)
}
ZOOM_resultset ZOOM_resultset_create ()
{
- ZOOM_resultset r = xmalloc (sizeof(*r));
+ ZOOM_resultset r = (ZOOM_resultset) xmalloc (sizeof(*r));
r->refcount = 1;
r->size = 0;
const char *impname;
Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_initRequest);
Z_InitRequest *ireq = apdu->u.initRequest;
- Z_IdAuthentication *auth = odr_malloc(c->odr_out, sizeof(*auth));
+ Z_IdAuthentication *auth = (Z_IdAuthentication *)
+ odr_malloc(c->odr_out, sizeof(*auth));
const char *auth_groupId = ZOOM_options_get (c->options, "group");
const char *auth_userId = ZOOM_options_get (c->options, "user");
const char *auth_password = ZOOM_options_get (c->options, "pass");
impname = ZOOM_options_get (c->options, "implementationName");
ireq->implementationName =
- odr_malloc (c->odr_out, 15 + (impname ? strlen(impname) : 0));
+ (char *) odr_malloc (c->odr_out, 15 + (impname ? strlen(impname) : 0));
strcpy (ireq->implementationName, "");
if (impname)
{
if (auth_groupId || auth_password)
{
- Z_IdPass *pass = odr_malloc(c->odr_out, sizeof(*pass));
+ Z_IdPass *pass = (Z_IdPass *) odr_malloc(c->odr_out, sizeof(*pass));
int i = 0;
pass->groupId = 0;
if (auth_groupId && *auth_groupId)
{
- pass->groupId = odr_malloc(c->odr_out, strlen(auth_groupId)+1);
+ pass->groupId = (char *)
+ odr_malloc(c->odr_out, strlen(auth_groupId)+1);
strcpy(pass->groupId, auth_groupId);
i++;
}
pass->userId = 0;
if (auth_userId && *auth_userId)
{
- pass->userId = odr_malloc(c->odr_out, strlen(auth_userId)+1);
+ pass->userId = (char *)
+ odr_malloc(c->odr_out, strlen(auth_userId)+1);
strcpy(pass->userId, auth_userId);
i++;
}
pass->password = 0;
if (auth_password && *auth_password)
{
- pass->password = odr_malloc(c->odr_out, strlen(auth_password)+1);
+ pass->password = (char *)
+ odr_malloc(c->odr_out, strlen(auth_password)+1);
strcpy(pass->password, auth_password);
i++;
}
else if (auth_userId)
{
auth->which = Z_IdAuthentication_open;
- auth->u.open = odr_malloc(c->odr_out, strlen(auth_userId)+1);
+ auth->u.open = (char *)
+ odr_malloc(c->odr_out, strlen(auth_userId)+1);
strcpy(auth->u.open, auth_userId);
ireq->idAuthentication = auth;
}
}
if (smallSetElementSetName && *smallSetElementSetName)
{
- Z_ElementSetNames *esn = odr_malloc (c->odr_out, sizeof(*esn));
+ Z_ElementSetNames *esn = (Z_ElementSetNames *)
+ odr_malloc (c->odr_out, sizeof(*esn));
esn->which = Z_ElementSetNames_generic;
esn->u.generic = odr_strdup (c->odr_out, smallSetElementSetName);
}
if (mediumSetElementSetName && *mediumSetElementSetName)
{
- Z_ElementSetNames *esn = odr_malloc (c->odr_out, sizeof(*esn));
+ Z_ElementSetNames *esn = (Z_ElementSetNames *)
+ odr_malloc (c->odr_out, sizeof(*esn));
esn->which = Z_ElementSetNames_generic;
esn->u.generic = odr_strdup (c->odr_out, mediumSetElementSetName);
return 0;
buf = odr_getbuf (odr_enc, &size, 0);
- nrec = xmalloc (sizeof(*nrec));
+ nrec = (ZOOM_record) xmalloc (sizeof(*nrec));
nrec->odr = odr_createmem(ODR_DECODE);
nrec->wrbuf_marc = 0;
odr_setbuf (nrec->odr, buf, size, 0);
xfree (rec);
}
-void *ZOOM_record_get (ZOOM_record rec, const char *type, size_t *len)
+const char *ZOOM_record_get (ZOOM_record rec, const char *type, int *len)
{
Z_NamePlusRecord *npr;
if (!rec)
if (r->which == Z_External_sutrs)
{
*len = r->u.sutrs->len;
- return r->u.sutrs->buf;
+ return (const char *) r->u.sutrs->buf;
}
else if (r->which == Z_External_octet)
{
if (!rec->wrbuf_marc)
rec->wrbuf_marc = wrbuf_alloc();
wrbuf_rewind (rec->wrbuf_marc);
- if (marc_display_wrbuf (r->u.octet_aligned->buf,
- rec->wrbuf_marc, 0,
+ if (marc_display_wrbuf ((const char *)
+ r->u.octet_aligned->buf,
+ rec->wrbuf_marc, 0,
r->u.octet_aligned->len) > 0)
{
*len = wrbuf_len(rec->wrbuf_marc);
}
}
*len = r->u.octet_aligned->len;
- return r->u.octet_aligned->buf;
+ return (const char *) r->u.octet_aligned->buf;
}
else if (r->which == Z_External_grs1)
{
if (r->which == Z_External_sutrs)
{
*len = r->u.sutrs->len;
- return r->u.sutrs->buf;
+ return (const char *) r->u.sutrs->buf;
}
else if (r->which == Z_External_octet)
{
*len = r->u.octet_aligned->len;
- return r->u.octet_aligned->buf;
+ return (const char *) r->u.octet_aligned->buf;
}
else /* grs-1, explain, ... */
{
*len = -1;
- return (Z_External *) npr->u.databaseRecord;
+ return (const char *) npr->u.databaseRecord;
}
}
return 0;
}
}
}
- rc = odr_malloc (r->odr, sizeof(*rc));
+ rc = (ZOOM_record_cache) odr_malloc (r->odr, sizeof(*rc));
rc->rec.npr = npr;
rc->rec.odr = 0;
rc->rec.wrbuf_marc = 0;
if (schema && *schema)
{
- Z_RecordComposition *compo = odr_malloc (c->odr_out, sizeof(*compo));
+ Z_RecordComposition *compo = (Z_RecordComposition *)
+ odr_malloc (c->odr_out, sizeof(*compo));
req->recordComposition = compo;
compo->which = Z_RecordComp_complex;
}
else if (element && *element)
{
- Z_ElementSetNames *esn = odr_malloc (c->odr_out, sizeof(*esn));
- Z_RecordComposition *compo = odr_malloc (c->odr_out, sizeof(*compo));
+ Z_ElementSetNames *esn = (Z_ElementSetNames *)
+ odr_malloc (c->odr_out, sizeof(*esn));
+ Z_RecordComposition *compo = (Z_RecordComposition *)
+ odr_malloc (c->odr_out, sizeof(*compo));
esn->which = Z_ElementSetNames_generic;
esn->u.generic = odr_strdup (c->odr_out, element);
ZOOM_scanset ZOOM_connection_scan (ZOOM_connection c, const char *start)
{
- ZOOM_scanset scan = xmalloc (sizeof(*scan));
+ ZOOM_scanset scan = (ZOOM_scanset) xmalloc (sizeof(*scan));
scan->connection = c;
scan->odr = odr_createmem (ODR_DECODE);
}
const char *ZOOM_scanset_term (ZOOM_scanset scan, size_t pos,
- int *occ, size_t *len)
+ int *occ, int *len)
{
const char *term = 0;
size_t noent = ZOOM_scanset_size (scan);
if (t->term->which == Z_Term_general)
{
- term = t->term->u.general->buf;
+ term = (const char *) t->term->u.general->buf;
*len = t->term->u.general->len;
}
*occ = t->globalOccurrences ? *t->globalOccurrences : 0;