diff -cr dgd-1.0.9.10/src/Makefile dgd/src/Makefile
*** dgd-1.0.9.10/src/Makefile Wed May 3 23:52:11 1995
--- dgd/src/Makefile Thu May 4 00:44:49 1995
***************
*** 14,24 ****
BIN= ../bin
OBJ= alloc.o error.o hash.o swap.o str.o array.o object.o data.o path.o \
! ed.o comm.o call_out.o interpret.o config.o dgd.o
EDOBJ= alloc.o error.o
LEXOBJ= alloc.o hash.o
COMPOBJ=alloc.o error.o hash.o path.o str.o array.o object.o data.o \
! interpret.o config.o
a.out: $(OBJ) always
cd comp; $(MAKE) 'DMAKE=$(DMAKE)' 'CC=$(CC)' 'CCFLAGS=$(CCFLAGS)' dgd
--- 14,24 ----
BIN= ../bin
OBJ= alloc.o error.o hash.o swap.o str.o array.o object.o data.o path.o \
! ed.o comm.o call_out.o interpret.o config.o dgd.o rgx.o regex/regex.o
EDOBJ= alloc.o error.o
LEXOBJ= alloc.o hash.o
COMPOBJ=alloc.o error.o hash.o path.o str.o array.o object.o data.o \
! interpret.o config.o rgx.o regex/regex.o
a.out: $(OBJ) always
cd comp; $(MAKE) 'DMAKE=$(DMAKE)' 'CC=$(CC)' 'CCFLAGS=$(CCFLAGS)' dgd
***************
*** 34,39 ****
--- 34,42 ----
always:
@rm -f a.out
+ regex/regex.o: regex/regex.c regex/regex.h
+ cd regex; ./configure; make regex.o CFLAGS="-O2"
+
$(BIN)/driver: a.out
-mv $(BIN)/driver $(BIN)/driver.old
cp a.out $(BIN)/driver
***************
*** 89,91 ****
--- 92,95 ----
call_out.o config.o dgd.o: call_out.h
error.o comm.o call_out.o config.o dgd.o: comm.h
config.o: version.h
+ rgx.o: str.h array.h rgx.h regex/regex.h interpret.h
diff -cr dgd-1.0.9.10/src/config.c dgd/src/config.c
*** dgd-1.0.9.10/src/config.c Wed May 3 23:51:55 1995
--- dgd/src/config.c Thu May 4 00:44:49 1995
***************
*** 19,24 ****
--- 19,25 ----
# include "compile.h"
# include "csupport.h"
# include "table.h"
+ # include "rgx.h"
typedef struct {
char *name; /* name of the option */
***************
*** 449,454 ****
--- 450,458 ----
(int) conf[CALL_STACK].u.num,
(int) conf[RESERVED_CSTACK].u.num,
conf[CREATE].u.str);
+
+ /* initialize regular expressions */
+ rgx_init();
mdynamic();
diff -cr dgd-1.0.9.10/src/kfun/extra.c dgd/src/kfun/extra.c
*** dgd-1.0.9.10/src/kfun/extra.c Wed May 3 23:51:43 1995
--- dgd/src/kfun/extra.c Thu May 4 00:45:13 1995
***************
*** 560,562 ****
--- 560,640 ----
error("Not yet implemented");
}
# endif
+
+
+ # ifdef FUNCDEF
+ FUNCDEF("regexp_compile", kf_regexp_compile, p_regexp_compile)
+ # else
+ char p_regexp_compile[] = { C_TYPECHECKED | C_STATIC | C_VARARGS,
+ T_STRING | (1 << REFSHIFT), 2, T_STRING, T_INT };
+
+ /*
+ * NAME: kfun->regexp_compile()
+ * DESCRIPTION: compile a regexp pattern
+ */
+ int kf_regexp_compile(nargs)
+ int nargs;
+ {
+ int case_matters;
+ array *compiled;
+
+ if (nargs < 1)
+ return -1;
+
+ case_matters = (nargs == 2 ? ! (sp++)->u.number : 1);
+
+ compiled = rgx_new(sp->u.string, case_matters);
+
+ str_del(sp->u.string);
+ sp->type = T_ARRAY;
+ arr_ref(sp->u.array = compiled);
+
+ return 0;
+ }
+ # endif
+
+
+ # ifdef FUNCDEF
+ FUNCDEF("regexp_match", kf_regexp_match, p_regexp_match)
+ # else
+ char p_regexp_match[] = { C_TYPECHECKED | C_STATIC | C_VARARGS,
+ T_INT | (1 << REFSHIFT), 3,
+ T_STRING | (1 << REFSHIFT), T_STRING, T_INT };
+
+ /*
+ * NAME: kfun->regexp_match()
+ * DESCRIPTION: perform regexp matching with a previously compiled pattern
+ */
+ int kf_regexp_match(nargs)
+ int nargs;
+ {
+ int reverse;
+ string *subject;
+ array *compiled, *result;
+
+ if (nargs < 2)
+ return -1;
+
+ reverse = (nargs == 3 ? (sp++)->u.number : 0);
+ subject = sp->u.string;
+ compiled = sp[1].u.array;
+
+ if (compiled->size != 3)
+ return 1;
+
+ result = rgx_match(d_get_elts(compiled), subject, reverse);
+
+ str_del((sp++)->u.string);
+ arr_del(sp->u.array);
+
+ if (result == (array *) 0)
+ {
+ sp->type = T_INT;
+ sp->u.number = 0;
+ }
+ else
+ arr_ref(sp->u.array = result);
+
+ return 0;
+ }
+ # endif
diff -cr dgd-1.0.9.10/src/kfun/kfun.h dgd/src/kfun/kfun.h
*** dgd-1.0.9.10/src/kfun/kfun.h Sun May 8 08:15:01 1994
--- dgd/src/kfun/kfun.h Thu May 4 00:44:49 1995
***************
*** 5,7 ****
--- 5,8 ----
# include "xfloat.h"
# include "interpret.h"
# include "data.h"
+ # include "rgx.h"