/
dgd-rgx/
dgd-rgx/doc/
dgd-rgx/doc/kfun/
dgd-rgx/src/
dgd-rgx/src/regex/
diff -cr dgd/src/Makefile ../dgd/src/Makefile
*** dgd/src/Makefile	Wed Jul 27 15:18:08 1994
--- ../dgd/src/Makefile	Tue Jul 26 01:43:48 1994
***************
*** 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)
  	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)
  	cd comp; $(MAKE) 'DMAKE=$(DMAKE)' 'CC=$(CC)' 'CCFLAGS=$(CCFLAGS)' dgd
***************
*** 31,36 ****
--- 31,39 ----
  	$(LD) $(LDFLAGS) $(OBJ) `cat comp/dgd` `cat lex/dgd` `cat ed/dgd` \
  	      `cat kfun/dgd` `cat lpc/dgd` `cat host/dgd` $(LIBS)
  
+ regex/regex.o: regex/regex.c regex/regex.h
+ 	cd regex; ./configure; make regex.o CFLAGS="-g -O2"
+ 
  $(BIN)/driver: a.out
  	cp a.out $(BIN)/driver
  
***************
*** 88,90 ****
--- 91,94 ----
  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/src/config.c
*** dgd/src/config.c	Wed Jul 27 15:20:20 1994
--- ../dgd/src/config.c	Sun Jul 24 23:56:10 1994
***************
*** 19,24 ****
--- 19,25 ----
  # include "compile.h"
  # include "csupport.h"
  # include "table.h"
+ # include "rgx.h"
  
  typedef struct {
      char *name;		/* name of the option */
***************
*** 392,397 ****
--- 393,401 ----
  	   (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/src/kfun/extra.c
*** dgd/src/kfun/extra.c	Sun May 15 18:09:24 1994
--- ../dgd/src/kfun/extra.c	Tue Jul 26 21:43:11 1994
***************
*** 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/src/kfun/kfun.h
*** dgd/src/kfun/kfun.h	Sun May  8 08:15:01 1994
--- ../dgd/src/kfun/kfun.h	Sun Jul 24 23:58:26 1994
***************
*** 5,7 ****
--- 5,8 ----
  # include "xfloat.h"
  # include "interpret.h"
  # include "data.h"
+ # include "rgx.h"