Minor changes.
[egate.git] / ccl / ccltoken.c
index e9cca4e..6930adf 100644 (file)
@@ -2,7 +2,10 @@
  * Europagate, 1995
  *
  * $Log: ccltoken.c,v $
- * Revision 1.5  1995/02/23 08:32:00  adam
+ * Revision 1.6  1995/04/17 09:31:48  adam
+ * Improved handling of qualifiers. Aliases or reserved words.
+ *
+ * Revision 1.5  1995/02/23  08:32:00  adam
  * Changed header.
  *
  * Revision 1.3  1995/02/15  17:42:16  adam
 
 #include <ccl.h>
 
-static int strin (const char *s, const char *cset)
+const char *ccl_token_and = "and";
+const char *ccl_token_or = "or";
+const char *ccl_token_not = "not andnot";
+const char *ccl_token_set = "set";
+
+/*
+ * token_cmp: Compare token with keyword(s)
+ * kw:     Keyword list. Each keyword is separated by space.
+ * token:  CCL token.
+ * return: 1 if token string matches one of the keywords in list;
+ *         0 otherwise.
+ */
+static int token_cmp (const char *kw, struct ccl_token *token)
 {
-    while (*cset)
+    const char *cp1 = kw;
+    const char *cp2;
+    while ((cp2 = strchr (cp1, ' ')))
     {
-       if (*cset++ == *s)
+        if (token->len == cp2-cp1 &&
+           !memcmp (cp1, token->name, token->len))
            return 1;
+       cp1 = cp2+1;
     }
-    return 0;
+    return token->len == strlen(cp1) 
+           && !memcmp (cp1, token->name, token->len);
 }
 
-const char *ccl_token_and = "and";
-const char *ccl_token_or = "or";
-const char *ccl_token_not = "not";
-const char *ccl_token_set = "set";
-
+/*
+ * ccl_tokenize: tokenize CCL command string.
+ * return: CCL token list.
+ */
 struct ccl_token *ccl_tokenize (const char *command)
 {
     const char *cp = command;
@@ -49,7 +68,7 @@ struct ccl_token *ccl_tokenize (const char *command)
 
     while (1)
     {
-       while (*cp && strin (cp, " \t\r\n"))
+       while (*cp && strchr (" \t\r\n", *cp))
        {
            cp++;
            continue;
@@ -123,23 +142,19 @@ struct ccl_token *ccl_tokenize (const char *command)
                cp++;
            break;
        default:
-           while (*cp && !strin (cp, "(),%!><=- \t\n\r"))
+           while (*cp && !strchr ("(),%!><=- \t\n\r", *cp))
            {
                cp++;
                ++ last->len;
            }
-           if (strlen (ccl_token_and)==last->len &&
-               !memcmp (ccl_token_and, last->name, last->len))
-               last->kind = CCL_TOK_AND;
-           else if (strlen (ccl_token_or)==last->len &&
-               !memcmp (ccl_token_or, last->name, last->len))
-               last->kind = CCL_TOK_OR;
-           else if (strlen (ccl_token_not)==last->len &&
-               !memcmp (ccl_token_not, last->name, last->len))
-               last->kind = CCL_TOK_NOT;
-           else if (strlen (ccl_token_set)==last->len &&
-               !memcmp (ccl_token_set, last->name, last->len))
-               last->kind = CCL_TOK_SET;
+           if (token_cmp (ccl_token_and, last))
+               last->kind = CCL_TOK_AND;
+           else if (token_cmp (ccl_token_or, last))
+               last->kind = CCL_TOK_OR;
+            else if (token_cmp (ccl_token_not, last))
+               last->kind = CCL_TOK_NOT;
+           else if (token_cmp (ccl_token_set, last))
+               last->kind = CCL_TOK_SET;
            else
                last->kind = CCL_TOK_TERM;
        }