* Europagate, 1995
*
* $Log: ccltoken.c,v $
- * Revision 1.9 1995/05/16 09:39:28 adam
+ * Revision 1.10 1995/07/11 12:28:31 adam
+ * New function: ccl_token_simple (split into simple tokens) and
+ * ccl_token_del (delete tokens).
+ *
+ * Revision 1.9 1995/05/16 09:39:28 adam
* LICENSE.
*
* Revision 1.8 1995/05/11 14:03:57 adam
}
/*
+ * ccl_token_simple: tokenize CCL raw tokens
+ */
+struct ccl_token *ccl_token_simple (const char *command)
+{
+ const char *cp = command;
+ struct ccl_token *first = NULL;
+ struct ccl_token *last = NULL;
+
+ while (1)
+ {
+ while (*cp && strchr (" \t\r\n", *cp))
+ {
+ cp++;
+ continue;
+ }
+ if (!first)
+ {
+ first = last = malloc (sizeof (*first));
+ assert (first);
+ last->prev = NULL;
+ }
+ else
+ {
+ last->next = malloc (sizeof(*first));
+ assert (last->next);
+ last->next->prev = last;
+ last = last->next;
+ }
+ last->next = NULL;
+ last->name = cp;
+ last->len = 1;
+ switch (*cp++)
+ {
+ case '\0':
+ last->kind = CCL_TOK_EOL;
+ return first;
+ case '\"':
+ last->kind = CCL_TOK_TERM;
+ last->name = cp;
+ last->len = 0;
+ while (*cp && *cp != '\"')
+ {
+ cp++;
+ ++ last->len;
+ }
+ if (*cp == '\"')
+ cp++;
+ break;
+ default:
+ while (*cp && !strchr (" \t\n\r", *cp))
+ {
+ cp++;
+ ++ last->len;
+ }
+ last->kind = CCL_TOK_TERM;
+ }
+ }
+ return first;
+}
+
+/*
* ccl_tokenize: tokenize CCL command string.
* return: CCL token list.
*/
}
return first;
}
+
+/*
+ * ccl_token_del: delete CCL tokens
+ */
+void ccl_token_del (struct ccl_token *list)
+{
+ struct ccl_token *list1;
+
+ while (list)
+ {
+ list1 = list->next;
+ free (list);
+ list = list1;
+ }
+}
* CCL - header file
*
* $Log: ccl.h,v $
- * Revision 1.7 1995/05/16 09:39:38 adam
+ * Revision 1.8 1995/07/11 12:28:34 adam
+ * New function: ccl_token_simple (split into simple tokens) and
+ * ccl_token_del (delete tokens).
+ *
+ * Revision 1.7 1995/05/16 09:39:38 adam
* LICENSE.
*
* Revision 1.6 1995/05/11 14:04:03 adam
};
struct ccl_token *ccl_tokenize (const char *command);
+struct ccl_token *ccl_token_simple (const char *command);
+void ccl_token_del (struct ccl_token *list);
struct ccl_rpn_node *ccl_find_str (CCL_bibset bibset,
const char *str, int *error, int *pos);