/
dgd-rgx/
dgd-rgx/doc/
dgd-rgx/doc/kfun/
dgd-rgx/src/
dgd-rgx/src/regex/
diff -cr dgd/src/Makefile dgd-patched/src/Makefile
*** dgd/src/Makefile	Sat Jan 28 08:44:22 1995
--- dgd-patched/src/Makefile	Thu Feb  2 22:25:17 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/src/config.c dgd-patched/src/config.c
*** dgd/src/config.c	Sat Jan 28 08:23:57 1995
--- dgd-patched/src/config.c	Thu Feb  2 22:25:17 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 */
***************
*** 395,400 ****
--- 396,404 ----
  	   (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/src/kfun/extra.c dgd-patched/src/kfun/extra.c
*** dgd/src/kfun/extra.c	Tue Sep 27 09:28:26 1994
--- dgd-patched/src/kfun/extra.c	Thu Feb  2 22:25:18 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 | C_LOCAL,
+ 			    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 | C_LOCAL,
+ 			  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/src/kfun/kfun.h dgd-patched/src/kfun/kfun.h
*** dgd/src/kfun/kfun.h	Sun May  8 08:15:01 1994
--- dgd-patched/src/kfun/kfun.h	Thu Feb  2 22:25:18 1995
***************
*** 5,7 ****
--- 5,8 ----
  # include "xfloat.h"
  # include "interpret.h"
  # include "data.h"
+ # include "rgx.h"