/* -*-c-*-
*
- * $Id: anag.c,v 1.3 2001/02/16 21:45:19 mdw Exp $
+ * $Id: anag.c,v 1.8 2004/04/08 01:36:19 mdw Exp $
*
* Main driver for anag
*
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: anag.c,v $
- * Revision 1.3 2001/02/16 21:45:19 mdw
- * Be more helpful. Improve full help message. Special-case error for
- * empty command strings.
- *
- * Revision 1.2 2001/02/07 09:09:11 mdw
- * Fix spurious error when `-file' is used.
- *
- * Revision 1.1 2001/02/04 17:14:42 mdw
- * Initial checkin
- *
- */
-
/*----- Header files ------------------------------------------------------*/
#include "anag.h"
-subgram WORD matches words which only use letters in WORD\n\
-wildcard PATTERN matches with wildcards `*' and `?'\n\
-trackword WORD matches words which can be found in a trackword\n\
+-mono PATTERN matches words isomorphic to the given PATTERN\n\
+"
+#ifdef HAVE_REGCOMP
+"\
+-regexp REGEXP matches with an (extended) regular expression\n\
+"
+#endif
+#ifdef HAVE_PCRE
+"\
+-pcre REGEXP matches with a Perl-like regular expression\n\
+"
+#endif
+"\
\n\
These simple tests can be combined using the operators `-a', `-o' and `-n'\n\
(for `and', `or' and `not'; they may also be written `&', `|' and `!' if\n\
you like), and grouped using parentheses `(' and `)'.\n\
-", fp);
+", fp); /*"*/
}
/*----- The options parser ------------------------------------------------*/
O_HELP, O_VERSION, O_USAGE,
O_FILE,
O_AND, O_OR, O_NOT, O_LPAREN, O_RPAREN,
- O_ANAG, O_SUBG, O_WILD, O_TRACK,
+ O_ANAG, O_SUBG, O_WILD, O_TRACK, O_REGEXP, O_PCRE, O_MONO,
O_EOF
};
{ "subgram", 1, 0, O_SUBG },
{ "wildcard", 1, 0, O_WILD },
{ "trackword", 1, 0, O_TRACK },
+ { "mono", 1, 0, O_MONO },
+#ifdef HAVE_REGCOMP
+ { "regexp", 1, 0, O_REGEXP },
+#endif
+#ifdef HAVE_PCRE
+ { "pcre", 1, 0, O_PCRE },
+#endif
/* --- End marker --- */
p_next(p);
p_expr(p, nn);
if (p->t != O_RPAREN)
- die("syntax error near `%s': missing `('", *p->a);
+ die("syntax error near `%s': missing `)'", *p->a);
p_next(p);
} else if (p->t == O_NOT) {
n = xmalloc(sizeof(node_un));
case O_SUBG: *nn = subgram(p->a + 1); break;
case O_WILD: *nn = wildcard(p->a + 1); break;
case O_TRACK: *nn = trackword(p->a + 1); break;
+#ifdef HAVE_REGCOMP
+ case O_REGEXP: *nn = regexp(p->a + 1); break;
+#endif
+#ifdef HAVE_PCRE
+ case O_PCRE: *nn = pcrenode(p->a + 1); break;
+#endif
+ case O_MONO: *nn = mono(p->a + 1); break;
default: die("syntax error near `%s': unexpected token", *p->a);
}
p_next(p);
p_next(p);
default:
break;
- case O_LPAREN:
case O_RPAREN:
case O_OR:
case O_EOF: