/*
* CCL - header file
*
- * $Log: ccl.h,v $
- * Revision 1.1 1999-11-30 13:47:11 adam
- * Improved installation. Moved header files to include/yaz.
+ * $Id: ccl.h,v 1.12 2002-06-06 13:02:01 adam Exp $
*
- * Revision 1.9 1998/02/11 11:53:33 adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.8 1997/09/29 09:01:19 adam
- * Changed CCL parser to be thread safe. New type, CCL-parser, declared
- * and a create/destructor ccl_parser_create/ccl_parser_destroy has been
- * added.
- *
- * Revision 1.7 1997/09/01 08:49:47 adam
- * New windows NT/95 port using MSV5.0. To export DLL functions the
- * YAZ_EXPORT modifier was added. Defined in yconfig.h.
- *
- * Revision 1.6 1997/05/14 06:53:37 adam
- * C++ support.
- *
- * Revision 1.5 1997/04/30 08:52:08 quinn
- * Null
- *
- * Revision 1.4 1996/10/11 15:02:26 adam
- * CCL parser from Europagate Email gateway 1.0.
+ * Old Europagate Log:
*
* Revision 1.10 1996/01/08 08:41:22 adam
* Minor changes.
#ifndef CCL_H
#define CCL_H
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include <yaz/yconfig.h>
+#include <stdio.h>
+#include <yaz/xmalloc.h>
+
+YAZ_BEGIN_CDECL
/* CCL error numbers */
#define CCL_ERR_OK 0
/* attribute pair (type, value) */
struct ccl_rpn_attr {
struct ccl_rpn_attr *next;
+ char *set;
int type;
int value;
};
#define CCL_BIB1_COM 6
#define CCL_BIB1_STR_WP (-1)
+#define CCL_BIB1_STR_AND_LIST (-2)
+#define CCL_BIB1_STR_OR_LIST (-3)
#define CCL_BIB1_REL_ORDER (-1)
#define CCL_BIB1_TRU_CAN_LEFT (-1)
#define CCL_TOK_AND 8
#define CCL_TOK_OR 9
#define CCL_TOK_NOT 10
-#define CCL_TOK_MINUS 11
-#define CCL_TOK_SET 12
+#define CCL_TOK_SET 11
/* CCL token */
struct ccl_token {
/* CCL Qualifier */
struct ccl_qualifier {
char *name;
+ int no_sub;
+ struct ccl_qualifier **sub;
struct ccl_rpn_attr *attr_list;
struct ccl_qualifier *next;
};
/* current bibset */
CCL_bibset bibset;
-
+
char *ccl_token_and;
char *ccl_token_or;
char *ccl_token_not;
typedef struct ccl_parser *CCL_parser;
/* Generate tokens from command string - obeys all CCL opererators */
-struct ccl_token *ccl_parser_tokenize (CCL_parser cclp,
+YAZ_EXPORT struct ccl_token *ccl_parser_tokenize (CCL_parser cclp,
const char *command);
-struct ccl_token *ccl_tokenize (const char *command);
+YAZ_EXPORT struct ccl_token *ccl_tokenize (const char *command);
/* Generate tokens from command string - oebeys only simple tokens and
quoted strings */
-struct ccl_token *ccl_token_simple (const char *command);
+YAZ_EXPORT struct ccl_token *ccl_token_simple (const char *command);
/* Delete token list */
-void ccl_token_del (struct ccl_token *list);
+YAZ_EXPORT void ccl_token_del (struct ccl_token *list);
/* Parse CCL Find command - NULL-terminated string */
-struct ccl_rpn_node *ccl_find_str (CCL_bibset bibset,
+YAZ_EXPORT struct ccl_rpn_node *ccl_find_str (CCL_bibset bibset,
const char *str, int *error, int *pos);
/* Parse CCL Find command - Tokens read by ccl_tokenize */
-struct ccl_rpn_node *ccl_find (CCL_bibset abibset, struct ccl_token *list,
+YAZ_EXPORT struct ccl_rpn_node *ccl_find (CCL_bibset abibset, struct ccl_token *list,
int *error, const char **pos);
+/* Parse CCL Find command */
+YAZ_EXPORT struct ccl_rpn_node *ccl_parser_find (CCL_parser cclp, struct ccl_token *list);
+
+/* Set various OPs */
+YAZ_EXPORT void ccl_parser_set_op_and (CCL_parser p, const char *op);
+YAZ_EXPORT void ccl_parser_set_op_or (CCL_parser p, const char *op);
+YAZ_EXPORT void ccl_parser_set_op_not (CCL_parser p, const char *op);
+YAZ_EXPORT void ccl_parser_set_op_set (CCL_parser p, const char *op);
+
+YAZ_EXPORT void ccl_parser_set_case (CCL_parser p, int case_sensitivity_flag);
+
/* Return english-readable error message */
-const char *ccl_err_msg (int ccl_errno);
+YAZ_EXPORT const char *ccl_err_msg (int ccl_errno);
/* Delete RPN tree returned by ccl_find */
-void ccl_rpn_delete (struct ccl_rpn_node *rpn);
+YAZ_EXPORT void ccl_rpn_delete (struct ccl_rpn_node *rpn);
/* Dump RPN tree in readable format to fd_out */
-void ccl_pr_tree (struct ccl_rpn_node *rpn, FILE *fd_out);
+YAZ_EXPORT void ccl_pr_tree (struct ccl_rpn_node *rpn, FILE *fd_out);
/* Add CCL qualifier */
-void ccl_qual_add (CCL_bibset b, const char *name, int no, int *attr);
+YAZ_EXPORT void ccl_qual_add (CCL_bibset b, const char *name, int no,
+ int *attr);
+
+YAZ_EXPORT void ccl_qual_add_set (CCL_bibset b, const char *name, int no,
+ int *attr, char **attsets);
+
+YAZ_EXPORT void ccl_qual_add_special (CCL_bibset bibset,
+ const char *n, const char *v);
+
+YAZ_EXPORT void ccl_qual_add_combi (CCL_bibset b, const char *n,
+ const char *names);
/* Read CCL qualifier list spec from file inf */
-void ccl_qual_file (CCL_bibset bibset, FILE *inf);
+YAZ_EXPORT void ccl_qual_file (CCL_bibset bibset, FILE *inf);
+
+/* Read CCL qualifier list spec from file inf */
+YAZ_EXPORT int ccl_qual_fname (CCL_bibset bibset, const char *fname);
/* Add CCL qualifier by using single-line spec */
-void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name);
+YAZ_EXPORT void ccl_qual_fitem (CCL_bibset bibset, const char *cp,
+ const char *qual_name);
/* Make CCL qualifier set */
-CCL_bibset ccl_qual_mk (void);
+YAZ_EXPORT CCL_bibset ccl_qual_mk (void);
/* Delete CCL qualifier set */
-void ccl_qual_rm (CCL_bibset *b);
+YAZ_EXPORT void ccl_qual_rm (CCL_bibset *b);
/* Char-to-upper function */
extern int (*ccl_toupper)(int c);
/* String utilities */
-int ccl_stricmp (const char *s1, const char *s2);
-int ccl_memicmp (const char *s1, const char *s2, size_t n);
+YAZ_EXPORT int ccl_stricmp (const char *s1, const char *s2);
+YAZ_EXPORT int ccl_memicmp (const char *s1, const char *s2, size_t n);
/* Search for qualifier 'name' in set 'b'. */
-struct ccl_rpn_attr *ccl_qual_search (CCL_parser cclp, const char *name,
- size_t len);
+YAZ_EXPORT struct ccl_rpn_attr *ccl_qual_search (CCL_parser cclp,
+ const char *name,
+ size_t len,
+ int seq);
/* Create CCL parser */
-CCL_parser ccl_parser_create (void);
+YAZ_EXPORT CCL_parser ccl_parser_create (void);
/* Destroy CCL parser */
-void ccl_parser_destroy (CCL_parser p);
+YAZ_EXPORT void ccl_parser_destroy (CCL_parser p);
+
+YAZ_EXPORT char *ccl_strdup (const char *str);
-#ifdef __cplusplus
-}
+YAZ_EXPORT const char *ccl_qual_search_special (CCL_bibset b,
+ const char *name);
+
+#ifndef ccl_assert
+#define ccl_assert(x) ;
#endif
+YAZ_END_CDECL
+
#endif