X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=recctrl%2Fmarcomp.h;fp=recctrl%2Fmarcomp.h;h=48a90f8c560f25333c85bcd7df5b0a45ba309fe6;hb=0a5aa3b65fe14789bcada545a0e399545725d1ff;hp=0000000000000000000000000000000000000000;hpb=52fad02a1584f75a0c7ea56c5e3381f84c3f1ce0;p=idzebra-moved-to-github.git diff --git a/recctrl/marcomp.h b/recctrl/marcomp.h new file mode 100644 index 0000000..48a90f8 --- /dev/null +++ b/recctrl/marcomp.h @@ -0,0 +1,109 @@ +/* + $Id: marcomp.h,v 1.1 2003-02-28 12:33:39 oleg Exp $ +*/ +#ifndef MARCOMP_H +#define MARCOMP_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct mc_subfield +{ + char *name; + char *prefix; + char *suffix; + struct { + int start; + int end; + } interval; + int which; + union { +#define MC_SF 1 +#define MC_SFGROUP 2 +#define MC_SFVARIANT 3 + struct mc_field *in_line; + struct mc_subfield *child; + } u; + struct mc_subfield *next; + struct mc_subfield *parent; +} mc_subfield; + +#define SZ_FNAME 3 +#define SZ_IND 1 +#define SZ_SFNAME 1 +#define SZ_PREFIX 1 +#define SZ_SUFFIX 1 + +typedef struct mc_field +{ + char *name; + char *ind1; + char *ind2; + struct { + int start; + int end; + } interval; + struct mc_subfield *list; +} mc_field; + +typedef enum +{ + NOP, + REGULAR, + LVARIANT, + RVARIANT, + LGROUP, + RGROUP, + LINLINE, + RINLINE, + SUBFIELD, + LINTERVAL, + RINTERVAL, +} mc_token; + +typedef enum +{ + EMCOK = 0, /* first always, mondatory */ + EMCNOMEM, + EMCF, + EMCSF, + EMCSFGROUP, + EMCSFVAR, + EMCSFINLINE, + EMCEND /* last always, mondatory */ +} mc_errcode; + +typedef struct mc_context +{ + int offset; + + int crrval; + mc_token crrtok; + + mc_errcode errcode; + + int len; + const char *data; +} mc_context; + +mc_context *mc_mk_context(const char *s); +void mc_destroy_context(mc_context *c); + +mc_field *mc_getfield(mc_context *c); +void mc_destroy_field(mc_field *p); +void mc_pr_field(mc_field *p, int offset); + +mc_subfield *mc_getsubfields(mc_context *c, mc_subfield *parent); +void mc_destroy_subfield(mc_subfield *p); +void mc_destroy_subfields_recursive(mc_subfield *p); +void mc_pr_subfields(mc_subfield *p, int offset); + +mc_errcode mc_errno(mc_context *c); +const char *mc_error(mc_errcode no); + +#ifdef __cplusplus +} +#endif + +#endif