Partial port to WIN95/NT.
[idzebra-moved-to-github.git] / recctrl / recgrs.c
index 601e80a..1531b04 100644 (file)
@@ -1,10 +1,31 @@
 /*
- * Copyright (C) 1994-1996, Index Data I/S 
+ * Copyright (C) 1994-1997, Index Data I/S 
  * All rights reserved.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: recgrs.c,v $
- * Revision 1.2  1996-10-11 16:06:43  quinn
+ * Revision 1.8  1997-09-09 13:38:14  adam
+ * Partial port to WIN95/NT.
+ *
+ * Revision 1.7  1997/09/05 15:30:10  adam
+ * Changed prototype for chr_map_input - added const.
+ * Added support for C++, headers uses extern "C" for public definitions.
+ *
+ * Revision 1.6  1997/09/04 13:54:40  adam
+ * Added MARC filter - type grs.marc.<syntax> where syntax refers
+ * to abstract syntax. New method tellf in retrieve/extract method.
+ *
+ * Revision 1.5  1997/07/15 16:29:03  adam
+ * Initialized dummy variable to keep checker gcc happy.
+ *
+ * Revision 1.4  1997/04/30 08:56:08  quinn
+ * null
+ *
+ * Revision 1.2  1996/10/11  16:06:43  quinn
+ * Revision 1.3  1997/02/24 10:41:50  adam
+ * Cleanup of code and commented out the "end element-end-record" code.
+ *
+ * Revision 1.2  1996/10/11 16:06:43  quinn
  * Fixed arguments to nodetogr
  *
  * Revision 1.1  1996/10/11  10:57:25  adam
 #include <stdio.h>
 #include <assert.h>
 #include <sys/types.h>
+#ifndef WINDOWS
 #include <unistd.h>
+#endif
 
 #include <log.h>
 #include <oid.h>
@@ -118,6 +141,7 @@ static data1_node *read_grs_type (struct grs_read_info *p, const char *type)
     } tab[] = {
         { "sgml",  grs_read_sgml },
         { "regx",  grs_read_regx },
+        { "marc",  grs_read_marc },
         { NULL, NULL }
     };
     const char *cp = strchr (type, '.');
@@ -145,9 +169,9 @@ static void grs_init(void)
 static void dumpkeys_word(data1_node *n, struct recExtractCtrl *p,
     data1_att *att)
 {
-    char *b = n->u.data.data;
+    const char *b = n->u.data.data;
     int remain;
-    char **map = 0;
+    const char **map = 0;
 
     remain = n->u.data.len - (b - n->u.data.data);
     if (remain > 0)
@@ -173,7 +197,7 @@ static void dumpkeys_word(data1_node *n, struct recExtractCtrl *p,
        i = 0;
        while (map && *map && **map != *CHR_SPACE)
        {
-           char *cp = *map;
+           const char *cp = *map;
 
            while (i < GRS_MAX_WORD && *cp)
                buf[i++] = *(cp++);
@@ -199,8 +223,9 @@ static void dumpkeys_word(data1_node *n, struct recExtractCtrl *p,
 static void dumpkeys_phrase(data1_node *n, struct recExtractCtrl *p,
     data1_att *att)
 {
-    char *b = n->u.data.data;
-    char buf[GRS_MAX_WORD+1], **map = 0;
+    const char *b = n->u.data.data;
+    char buf[GRS_MAX_WORD+1];
+    const char **map = 0;
     RecWord wrd;
     int i = 0, remain;
 
@@ -225,7 +250,7 @@ static void dumpkeys_phrase(data1_node *n, struct recExtractCtrl *p,
            buf[i++] = *CHR_SPACE;
        while (map && *map && **map != *CHR_SPACE)
        {
-           char *cp = *map;
+           const char *cp = *map;
 
            if (i >= GRS_MAX_WORD)
                break;
@@ -374,6 +399,7 @@ static int grs_extract(struct recExtractCtrl *p)
 
     gri.readf = p->readf;
     gri.seekf = p->seekf;
+    gri.tellf = p->tellf;
     gri.endf = p->endf;
     gri.fh = p->fh;
     gri.offset = p->offset;
@@ -385,7 +411,7 @@ static int grs_extract(struct recExtractCtrl *p)
     if (dumpkeys(n, p, 0) < 0)
     {
        data1_free_tree(n);
-       return -1;
+       return -2;
     }
     data1_free_tree(n);
     nmem_destroy(mem);
@@ -469,6 +495,7 @@ static int grs_retrieve(struct recRetrieveCtrl *p)
     
     gri.readf = p->readf;
     gri.seekf = p->seekf;
+    gri.tellf = p->tellf;
     gri.endf = NULL;
     gri.fh = p->fh;
     gri.offset = 0;
@@ -568,9 +595,10 @@ static int grs_retrieve(struct recRetrieveCtrl *p)
        p->input_format : VAL_SUTRS))
     {
        data1_marctab *marctab;
-       int dummy;
+        int dummy;
 
        case VAL_GRS1:
+           dummy = 0;
            if (!(p->rec_buf = data1_nodetogr(node, selected, p->odr, &dummy)))
                p->diagnostic = 2; /* this should be better specified */
            else