More verbose.
[yaz-moved-to-github.git] / ccl / cclqfile.c
index fa93894..af18a4b 100644 (file)
  * Europagate, 1995
  *
  * $Log: cclqfile.c,v $
- * Revision 1.8  2001-02-21 13:46:53  adam
+ * Revision 1.11  2001-09-14 10:49:51  adam
+ * Bug fix: file wasn't closed in ccl_qual_fname.
+ *
+ * Revision 1.10  2001/05/16 07:30:16  adam
+ * Minor cosmetic changes that makes checker gcc happier.
+ *
+ * Revision 1.9  2001/03/07 13:24:40  adam
+ * Member and_not in Z_Operator is kept for backwards compatibility.
+ * Added support for definition of CCL operators in field spec file.
+ *
+ * Revision 1.8  2001/02/21 13:46:53  adam
  * C++ fixes.
  *
  * Revision 1.7  2001/01/24 11:55:31  adam
 
 #include <yaz/ccl.h>
 
-void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name)
+void ccl_qual_field (CCL_bibset bibset, const char *cp, const char *qual_name)
 {
     char qual_spec[128];
-    int no_scan;
     int pair[256];
     char *attsets[128];
     int pair_no = 0;
@@ -103,8 +112,9 @@ void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name)
     {
         char *qual_value, *qual_type;
         char *split, *setp;
+        int no_scan = 0;
         
-        if (sscanf (cp, "%s%n", qual_spec, &no_scan) != 1)
+        if (sscanf (cp, "%100s%n", qual_spec, &no_scan) < 1)
            break;
 
         if (!(split = strchr (qual_spec, '=')))
@@ -191,6 +201,14 @@ void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name)
     ccl_qual_add_set (bibset, qual_name, pair_no, pair, attsets);
 }
 
+void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name)
+{
+    if (*qual_name == '@')
+       ccl_qual_add_special(bibset, qual_name+1, cp);
+    else
+       ccl_qual_field(bibset, cp, qual_name);
+}
+
 /*
  * ccl_qual_file: Read bibset definition from file.
  * bibset:  Bibset
@@ -207,18 +225,22 @@ void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name)
 void ccl_qual_file (CCL_bibset bibset, FILE *inf)
 {
     char line[256];
-    char *cp;
+    char *cp, *cp1;
     char qual_name[128];
-    int  no_scan;
 
     while (fgets (line, 255, inf))
     {
+        int  no_scan = 0;
+
         cp = line;
         if (*cp == '#')
             continue;        /* ignore lines starting with # */
-        if (sscanf (cp, "%s%n", qual_name, &no_scan) != 1)
+        if (sscanf (cp, "%100s%n", qual_name, &no_scan) < 1)
             continue;        /* also ignore empty lines */
         cp += no_scan;
+       cp1 = strchr(cp, '#');
+       if (cp1)
+           *cp1 = '\0';
         ccl_qual_fitem (bibset, cp, qual_name);
     }
 }
@@ -230,5 +252,6 @@ int ccl_qual_fname (CCL_bibset bibset, const char *fname)
     if (!inf)
         return -1;
     ccl_qual_file (bibset, inf);
+    fclose (inf);
     return 0;
 }