* USE OR PERFORMANCE OF THIS SOFTWARE.
*
*/
+/**
+ * \file ccltoken.c
+ * \brief Implements CCL lexical analyzer (scanner)
+ */
/* CCL - lexical analysis
* Europagate, 1995
*
- * $Id: ccltoken.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ * $Id: ccltoken.c,v 1.6 2005-03-15 16:32:52 adam Exp $
*
* Old Europagate Log:
*
struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command)
{
const char *aliases;
- const char *cp = command;
+ const unsigned char *cp = (const unsigned char *) command;
struct ccl_token *first = NULL;
struct ccl_token *last = NULL;
while (1)
{
+ const unsigned char *cp0 = cp;
while (*cp && strchr (" \t\r\n", *cp))
{
cp++;
last->next->prev = last;
last = last->next;
}
+ last->ws_prefix_buf = cp0;
+ last->ws_prefix_len = cp - cp0;
last->next = NULL;
- last->name = cp;
+ last->name = (const char *) cp;
last->len = 1;
switch (*cp++)
{
break;
case '\"':
last->kind = CCL_TOK_TERM;
- last->name = cp;
+ last->name = (const char *) cp;
last->len = 0;
while (*cp && *cp != '\"')
{
return first;
}
+struct ccl_token *ccl_token_add (struct ccl_token *at)
+{
+ struct ccl_token *n = (struct ccl_token *)xmalloc (sizeof(*n));
+ ccl_assert(n);
+ n->next = at->next;
+ n->prev = at;
+ at->next = n;
+ if (n->next)
+ n->next->prev = n;
+
+ n->kind = CCL_TOK_TERM;
+ n->name = 0;
+ n->len = 0;
+ return n;
+}
+
struct ccl_token *ccl_tokenize (const char *command)
{
CCL_parser cclp = ccl_parser_create ();