removing the XSLT filter from the build, only keeping the ALVIS filter
[idzebra-moved-to-github.git] / recctrl / csvread.c
index 0703d42..6e2b064 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: csvread.c,v 1.1 2005-12-05 12:18:41 marc Exp $
+/* $Id: csvread.c,v 1.5 2006-05-10 08:13:28 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -46,7 +46,7 @@ struct csv_getc_info {
 };
 */
 
-static struct csv_t {
+struct csv_t {
   NMEM nmem;
   int buf_size;
   char *buf;
@@ -66,7 +66,7 @@ static struct csv_t {
 };
 
 
-static void grs_config_csv(void *clientData, Res res, const char *args)
+static ZEBRA_RES grs_config_csv(void *clientData, Res res, const char *args)
 {
   int i;
   struct csv_t *csvp = (struct csv_t*) clientData;
@@ -91,8 +91,8 @@ static void grs_config_csv(void *clientData, Res res, const char *args)
   /* csvp->field_names = 0; */ /*nmem_strdup(csvp->nmem, "a|b|c|d|e");*/
 
   csvp->field_name 
-    = nmem_malloc(csvp->nmem, 
-                  sizeof(*(csvp->field_name)) * csvp->max_nr_fields);
+      = nmem_malloc(csvp->nmem, 
+                   sizeof(*(csvp->field_name)) * csvp->max_nr_fields);
   for (i = 0; i < csvp->max_nr_fields; i++){
     csvp->field_name[i] = 0; 
   }
@@ -103,6 +103,7 @@ static void grs_config_csv(void *clientData, Res res, const char *args)
   */
 
   yaz_log (YLOG_LOG, "Ended CSV filter grs_config_csv");
+  return ZEBRA_OK;
 }
 
 
@@ -180,11 +181,14 @@ static data1_node *grs_read_csv (struct grs_read_info *gri)
         if (read_header){
           /* read field names from header line */
           if (csvp->nr_fields < csvp->max_nr_fields){
+            csvp->field_name[csvp->nr_fields] 
+              = nmem_strdup(csvp->nmem, csvp->value);
+            
             csvp->nr_fields++;
-              yaz_log (YLOG_LOG, "CSV filter grs_read_csv header %d %s", 
+            yaz_log (YLOG_LOG, "CSV filter grs_read_csv field %d name '%s'", 
                        field_nr, csvp->value);
           } else {
-            yaz_log (YLOG_WARN, "CSV filter grs_read_csv header %d %s "
+            yaz_log (YLOG_WARN, "CSV filter grs_read_csv field %d name '%s' "
                      "exceeds configured max number of fields %d", 
                      field_nr, csvp->value, csvp->max_nr_fields);
           }
@@ -192,21 +196,23 @@ static data1_node *grs_read_csv (struct grs_read_info *gri)
           /* process following value line fields */
           if (field_nr < csvp->nr_fields){
             /* less or qual fields number */
-            yaz_log (YLOG_LOG, "CSV filter grs_read_csv value %d %s", 
-                     field_nr, csvp->value);
+            yaz_log (YLOG_LOG, "CSV filter grs_read_csv field %d %s: '%s'", 
+                     field_nr, csvp->field_name[field_nr], csvp->value);
           } else {
           /* too many fields */
-            yaz_log (YLOG_WARN, "CSV filter grs_read_csv value %d %s "
+            yaz_log (YLOG_WARN, "CSV filter grs_read_csv field value %d %s "
                      "exceeds dynamic configured number of fields %d", 
                      field_nr, csvp->value, csvp->nr_fields);
           }
           
         }
+        /* advance buffer and proceed to next field */
         cb++;
         cv = csvp->value;
         field_nr++;
       } else if (*cb == csvp->record_char){
         /* if record finished */
+        /* advance buffer and proceed to record */
         *cv = '\0';
         cb++;
         cv = csvp->value;
@@ -219,7 +225,7 @@ static data1_node *grs_read_csv (struct grs_read_info *gri)
           yaz_log (YLOG_LOG, "CSV filter grs_read_csv record end");
         }
       } else {
-        /* just plain char to be stored in value */
+        /* just plain char to be stored in value, no special action at all */
         if (csvp->lower_case && read_header){
           *cv = tolower(*cb);
         } else {
@@ -236,12 +242,12 @@ static data1_node *grs_read_csv (struct grs_read_info *gri)
   }
 
   /* try to build GRS node and document */
-  /*
-  root_node = data1_mk_root(gri->dh, gri->mem, cvsp->root_name);
+  
+  root_node = data1_mk_root(gri->dh, gri->mem, csvp->root_element);
   node = data1_mk_node2(gri->dh, gri->mem, DATA1N_data, root_node);
   node = data1_mk_tag(gri->dh, gri->mem, "pr_name_gn", 0, node);  
   data1_mk_text_n(gri->dh, gri->mem, csvp->buf, read_bytes, node);
-  */
+  
   if (!root_node){
     yaz_log (YLOG_WARN, "empty CSV record of type '%s' "
              "near file offset %d "
@@ -256,9 +262,9 @@ static data1_node *grs_read_csv (struct grs_read_info *gri)
 
 static void *grs_init_csv(Res res, RecType recType)
 {
-  yaz_log (YLOG_LOG, "Called CSV filter grs_init_csv");
   NMEM m = nmem_create();
   struct csv_t *csvp = (struct csv_t *) nmem_malloc(m, sizeof(*csvp));
+  yaz_log (YLOG_LOG, "Called CSV filter grs_init_csv");
   csvp->nmem = m;
   yaz_log (YLOG_LOG, "Ended CSV filter grs_init_csv");
   return csvp;
@@ -328,3 +334,11 @@ idzebra_filter
     &grs_type_csv,
     0,
 };
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+