X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=ccl%2Fcclqfile.c;fp=ccl%2Fcclqfile.c;h=0000000000000000000000000000000000000000;hp=61cd463f00a74b31febc698a51d40aa7c28be193;hb=c6e47cbbff56f39f6d81b079ebaeac41d793d4d9;hpb=c71d717ada2a9ef730d527f161eb5ba9aa641a9f diff --git a/ccl/cclqfile.c b/ccl/cclqfile.c deleted file mode 100644 index 61cd463..0000000 --- a/ccl/cclqfile.c +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (c) 1995, the EUROPAGATE consortium (see below). - * - * The EUROPAGATE consortium members are: - * - * University College Dublin - * Danmarks Teknologiske Videnscenter - * An Chomhairle Leabharlanna - * Consejo Superior de Investigaciones Cientificas - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation, in whole or in part, for any purpose, is hereby granted, - * provided that: - * - * 1. This copyright and permission notice appear in all copies of the - * software and its documentation. Notices of copyright or attribution - * which appear at the beginning of any file must remain unchanged. - * - * 2. The names of EUROPAGATE or the project partners may not be used to - * endorse or promote products derived from this software without specific - * prior written permission. - * - * 3. Users of this software (implementors and gateway operators) agree to - * inform the EUROPAGATE consortium of their use of the software. This - * information will be used to evaluate the EUROPAGATE project and the - * software, and to plan further developments. The consortium may use - * the information in later publications. - * - * 4. Users of this software agree to make their best efforts, when - * documenting their use of the software, to acknowledge the EUROPAGATE - * consortium, and the role played by the software in their work. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE - * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF - * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA - * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND - * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE - * USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ -/* CCL qualifiers - * Europagate, 1995 - * - * $Id: cclqfile.c,v 1.14 2003-06-23 10:22:21 adam Exp $ - * - * Old Europagate Log: - * - * Revision 1.3 1995/05/16 09:39:26 adam - * LICENSE. - * - * Revision 1.2 1995/05/11 14:03:56 adam - * Changes in the reading of qualifier(s). New function: ccl_qual_fitem. - * New variable ccl_case_sensitive, which controls whether reserved - * words and field names are case sensitive or not. - * - * Revision 1.1 1995/04/17 09:31:45 adam - * Improved handling of qualifiers. Aliases or reserved words. - * - */ - -#include -#include -#include - -#include - -void ccl_qual_field (CCL_bibset bibset, const char *cp, const char *qual_name) -{ - char qual_spec[128]; - int type_ar[128]; - int value_ar[128]; - char *svalue_ar[128]; - char *attsets[128]; - int pair_no = 0; - - while (pair_no < 128) - { - char *qual_value, *qual_type; - char *split, *setp; - int no_scan = 0; - - if (sscanf (cp, "%100s%n", qual_spec, &no_scan) < 1) - break; - - if (!(split = strchr (qual_spec, '='))) - { - /* alias specification .. */ - if (pair_no == 0) - { - ccl_qual_add_combi (bibset, qual_name, cp); - return; - } - break; - } - /* [set,]type=value ... */ - cp += no_scan; - - *split++ = '\0'; - - setp = strchr (qual_spec, ','); - if (setp) - { - /* set,type=value ... */ - *setp++ = '\0'; - qual_type = setp; - } - else - { - /* type=value ... */ - qual_type = qual_spec; - } - while (pair_no < 128) - { - int type, value; - - qual_value = split; - if ((split = strchr (qual_value, ','))) - *split++ = '\0'; - - value = 0; - switch (qual_type[0]) - { - case 'u': - case 'U': - type = CCL_BIB1_USE; - break; - case 'r': - case 'R': - type = CCL_BIB1_REL; - if (!ccl_stricmp (qual_value, "o")) - value = CCL_BIB1_REL_ORDER; - break; - case 'p': - case 'P': - type = CCL_BIB1_POS; - break; - case 's': - case 'S': - type = CCL_BIB1_STR; - if (!ccl_stricmp (qual_value, "pw")) - value = CCL_BIB1_STR_WP; - if (!ccl_stricmp (qual_value, "al")) - value = CCL_BIB1_STR_AND_LIST; - if (!ccl_stricmp (qual_value, "ol")) - value = CCL_BIB1_STR_OR_LIST; - break; - case 't': - case 'T': - type = CCL_BIB1_TRU; - if (!ccl_stricmp (qual_value, "l")) - value = CCL_BIB1_TRU_CAN_LEFT; - else if (!ccl_stricmp (qual_value, "r")) - value = CCL_BIB1_TRU_CAN_RIGHT; - else if (!ccl_stricmp (qual_value, "b")) - value = CCL_BIB1_TRU_CAN_BOTH; - else if (!ccl_stricmp (qual_value, "n")) - value = CCL_BIB1_TRU_CAN_NONE; - break; - case 'c': - case 'C': - type = CCL_BIB1_COM; - break; - default: - type = atoi (qual_type); - } - - type_ar[pair_no] = type; - - if (value) - { - value_ar[pair_no] = value; - svalue_ar[pair_no] = 0; - } - else if (*qual_value >= '0' && *qual_value <= '9') - { - value_ar[pair_no] = atoi (qual_value); - svalue_ar[pair_no] = 0; - } - else - { - size_t len; - if (split) - len = split - qual_value; - else - len = strlen(qual_value); - svalue_ar[pair_no] = xmalloc(len+1); - memcpy(svalue_ar[pair_no], qual_value, len); - svalue_ar[pair_no][len] = '\0'; - } - if (setp) - { - attsets[pair_no] = (char*) xmalloc (strlen(qual_spec)+1); - strcpy (attsets[pair_no], qual_spec); - } - else - attsets[pair_no] = 0; - pair_no++; - if (!split) - break; - } - } - ccl_qual_add_set (bibset, qual_name, pair_no, type_ar, value_ar, svalue_ar, - 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 - * inf: FILE pointer. - * - * Each line format is: - * = = .... - * Where is name of qualifier; - * = is a attribute definition pair where is one of: - * u(use), r(relation), p(position), t(truncation), c(completeness) - * or plain integer. - * is an integer or special pseudo-value. - */ -void ccl_qual_file (CCL_bibset bibset, FILE *inf) -{ - char line[256]; - char *cp, *cp1; - char qual_name[128]; - - while (fgets (line, 255, inf)) - { - int no_scan = 0; - - cp = line; - if (*cp == '#') - continue; /* ignore lines starting with # */ - 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); - } -} - -int ccl_qual_fname (CCL_bibset bibset, const char *fname) -{ - FILE *inf; - inf = fopen (fname, "r"); - if (!inf) - return -1; - ccl_qual_file (bibset, inf); - fclose (inf); - return 0; -}