1 /* $Id: rsisams.c,v 1.21 2005-04-26 10:09:38 adam Exp $
2 Copyright (C) 1995-2005
5 This file is part of the Zebra server.
7 Zebra is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with Zebra; see the file LICENSE.zebra. If not, write to the
19 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
25 #include <idzebra/util.h>
28 static RSFD r_open (RSET ct, int flag);
29 static void r_close (RSFD rfd);
30 static void r_delete (RSET ct);
31 static int r_read (RSFD rfd, void *buf, TERMID *term);
32 static int r_write (RSFD rfd, const void *buf);
33 static void r_pos (RSFD rfd, double *current, double *total);
35 static const struct rset_control control =
52 struct rset_isams_info {
58 RSET rsisams_create(NMEM nmem, const struct key_control *kcontrol, int scope,
59 ISAMS is, ISAM_P pos, TERMID term)
61 RSET rnew=rset_create_base(&control, nmem, kcontrol, scope, term);
62 struct rset_isams_info *info;
63 info = (struct rset_isams_info *) nmem_malloc(rnew->nmem,sizeof(*info));
70 static void r_delete (RSET ct)
72 yaz_log (YLOG_DEBUG, "rsisams_delete");
77 RSFD r_open (RSET ct, int flag)
79 struct rset_isams_info *info = (struct rset_isams_info *) ct->priv;
81 struct rset_pp_info *ptinfo;
83 yaz_log (YLOG_DEBUG, "risams_open");
84 if (flag & RSETF_WRITE)
86 yaz_log (YLOG_FATAL, "ISAMS set type is read-only");
89 rfd=rfd_create_base(ct);
91 ptinfo=(struct rset_pp_info *)(rfd->priv);
93 ptinfo = (struct rset_pp_info *) nmem_malloc(ct->nmem,sizeof(*ptinfo));
94 ptinfo->pt = isams_pp_open (info->is, info->pos);
100 static void r_close (RSFD rfd)
102 struct rset_pp_info *ptinfo=(struct rset_pp_info *)(rfd->priv);
104 isams_pp_close (ptinfo->pt);
105 rfd_delete_base(rfd);
109 static int r_read (RSFD rfd, void *buf, TERMID *term)
111 struct rset_pp_info *ptinfo=(struct rset_pp_info *)(rfd->priv);
113 rc=isams_pp_read(ptinfo->pt, buf);
115 *term=rfd->rset->term;
119 static int r_write (RSFD rfd, const void *buf)
121 yaz_log (YLOG_FATAL, "ISAMS set type is read-only");
125 static void r_pos (RSFD rfd, double *current, double *total)
127 *current=-1; /* sorry, not implemented yet */