X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=ccl%2Fcclqfile.c;h=a007a5749f7442ac471c3f5996294aa768d60b2e;hb=d96213e7e29deb01d3f24408b557319adea3cb3d;hp=339447619ed889d5859eb42ba94fcf1dde096872;hpb=448e7f2a48f6485a8d452c75420524fb37453bc1;p=yaz-moved-to-github.git diff --git a/ccl/cclqfile.c b/ccl/cclqfile.c index 3394476..a007a57 100644 --- a/ccl/cclqfile.c +++ b/ccl/cclqfile.c @@ -45,7 +45,21 @@ * Europagate, 1995 * * $Log: cclqfile.c,v $ - * Revision 1.6 2000-11-16 09:58:02 adam + * 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 + * Fixed nasty bug introduced by previous commit (attribute sets not + * properly allocated). + * + * Revision 1.6 2000/11/16 09:58:02 adam * Implemented local AttributeSet setting for CCL field maps. * * Revision 1.5 2000/10/17 19:50:28 adam @@ -84,10 +98,9 @@ #include -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; @@ -96,8 +109,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, '='))) @@ -109,17 +123,11 @@ void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name) setp = strchr (qual_spec, ','); if (setp) { - *setp++ = '\0'; - attsets[pair_no] = malloc (strlen(qual_spec)+1); - strcpy (attsets[pair_no], qual_spec); qual_type = setp; } else - { - attsets[pair_no] = 0; qual_type = qual_spec; - } while (pair_no < 128) { int type, value; @@ -175,6 +183,13 @@ void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name) } pair[pair_no*2] = type; pair[pair_no*2+1] = value; + if (setp) + { + attsets[pair_no] = (char*) malloc (strlen(qual_spec)+1); + strcpy (attsets[pair_no], qual_spec); + } + else + attsets[pair_no] = 0; pair_no++; if (!split) break; @@ -183,6 +198,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 @@ -199,18 +222,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); } }