diff -Nbru clearsilver-0.6/cgi/cgi.c clearsilver-0.6.1/cgi/cgi.c
--- clearsilver-0.6/cgi/cgi.c	Thu Apr 11 18:11:39 2002
+++ clearsilver-0.6.1/cgi/cgi.c	Tue Apr 30 20:05:15 2002
@@ -27,6 +27,12 @@
 #include "cgi.h"
 #include "cs/cs.h"
 
+/* HACK for now, until we actually support autoconf/configure */
+#if __GNU_LIBRARY__ < 6
+char * strtok_r (char *s,const char * delim, char **save_ptr);
+#endif
+
+
 struct _cgi_vars
 {
   char *env_name;
@@ -1183,4 +1189,52 @@
 
   return STATUS_OK;
 }
+
+#if __GNU_LIBRARY__ < 6
+#include <string.h>
+
+/* from glibc */
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+     char s[] = "-abc-=-def";
+     char *sp;
+     x = strtok_r(s, "-", &sp);  // x = "abc", sp = "=-def"
+     x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+     x = strtok_r(NULL, "=", &sp);   // x = NULL 
+          // s = "abc\0-def\0"
+*/
+
+char * strtok_r (char *s,const char * delim, char **save_ptr)
+{
+  char *token;
+
+  if (s == NULL)
+    s = *save_ptr;
+
+  /* Scan leading delimiters.  */
+  s += strspn (s, delim);
+  if (*s == '\0')
+  {
+    *save_ptr = s;
+    return NULL;
+  }
+
+  /* Find the end of the token.  */
+  token = s;
+  s = strpbrk (token, delim);
+  if (s == NULL)
+    /* This token finishes the string.  */
+    /**save_ptr = __rawmemchr (token, '\0');*/
+    *save_ptr = strchr (token, '\0');
+  else
+  {
+    /* Terminate the token and make
+     * *SAVE_PTR point past it.  */
+    *s = '\0';
+    *save_ptr = s + 1;
+  }
+  return token;
+}
+#endif
 
diff -Nbru clearsilver-0.6/cgi/html.c clearsilver-0.6.1/cgi/html.c
--- clearsilver-0.6/cgi/html.c	Wed Mar 27 10:20:34 2002
+++ clearsilver-0.6.1/cgi/html.c	Tue Apr 30 20:05:15 2002
@@ -10,6 +10,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <sys/types.h>
 #include <regex.h>
 #include <ctype.h>
 #include "util/neo_err.h"
diff -Nbru clearsilver-0.6/cs/Makefile clearsilver-0.6.1/cs/Makefile
--- clearsilver-0.6/cs/Makefile	Fri Apr 19 19:02:08 2002
+++ clearsilver-0.6.1/cs/Makefile	Tue Apr 30 19:57:02 2002
@@ -23,7 +23,7 @@
 
 TARGETS = $(CS_LIB) $(CSTEST_EXE) test
 
-CS_TESTS = test.cs test2.cs test3.cs test4.cs test5.cs test6.cs test7.cs test8.cs test9.cs test10.cs test11.cs test12.cs
+CS_TESTS = test.cs test2.cs test3.cs test4.cs test5.cs test6.cs test7.cs test8.cs test9.cs test10.cs test11.cs test12.cs test13.cs
 
 all: $(TARGETS)
 
diff -Nbru clearsilver-0.6/cs/csparse.c clearsilver-0.6.1/cs/csparse.c
--- clearsilver-0.6/cs/csparse.c	Thu Apr 25 18:48:13 2002
+++ clearsilver-0.6.1/cs/csparse.c	Tue Apr 30 19:57:02 2002
@@ -61,6 +61,8 @@
 static NEOERR *var_parse (CSPARSE *parse, int cmd, char *arg);
 static NEOERR *var_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
 static NEOERR *evar_parse (CSPARSE *parse, int cmd, char *arg);
+static NEOERR *lvar_parse (CSPARSE *parse, int cmd, char *arg);
+static NEOERR *lvar_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
 static NEOERR *if_parse (CSPARSE *parse, int cmd, char *arg);
 static NEOERR *if_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
 static NEOERR *else_parse (CSPARSE *parse, int cmd, char *arg);
@@ -103,6 +105,8 @@
     var_parse, var_eval,     1},
   {"evar",    sizeof("evar")-1,    ST_ANYWHERE,     ST_SAME, 
     evar_parse, skip_eval,    1},
+  {"lvar",    sizeof("lvar")-1,    ST_ANYWHERE,     ST_SAME, 
+    lvar_parse, lvar_eval,    1},
   {"if",      sizeof("if")-1,      ST_ANYWHERE,     ST_IF,   
     if_parse, if_eval,      1},
   {"else",    sizeof("else")-1,    ST_IF,           ST_POP | ST_ELSE, 
@@ -1124,6 +1128,33 @@
   return STATUS_OK;
 }
 
+static NEOERR *lvar_parse (CSPARSE *parse, int cmd, char *arg)
+{
+  NEOERR *err;
+  CSTREE *node;
+
+  /* ne_warn ("lvar: %s", arg); */
+  err = alloc_node (&node);
+  if (err) return nerr_pass(err);
+  node->cmd = cmd;
+  if (arg[0] == '!')
+    node->flags |= CSF_REQUIRED;
+  arg++;
+  /* Validate arg is a var (regex /^[#" ]$/) */
+  err = parse_expr (parse, arg, &(node->arg1));
+  if (err)
+  {
+    dealloc_node(&node);
+    return nerr_pass(err);
+  }
+
+  *(parse->next) = node;
+  parse->next = &(node->next);
+  parse->current = node;
+  
+  return STATUS_OK;
+}
+
 static NEOERR *alt_parse (CSPARSE *parse, int cmd, char *arg)
 {
   NEOERR *err;
@@ -1550,6 +1581,46 @@
     if (s)
     {
       err = parse->output_cb (parse->output_ctx, s);
+    }
+  }
+  if (val.alloc) free(val.s);
+
+  *next = node->next;
+  return nerr_pass(err);
+}
+
+static NEOERR *lvar_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
+{
+  NEOERR *err = STATUS_OK;
+  CSARG val;
+
+  err = eval_expr(parse, &(node->arg1), &val);
+  if (err) return nerr_pass(err);
+  if (val.op_type & (CS_TYPE_NUM | CS_TYPE_VAR_NUM))
+  { 
+    char buf[256];
+    long int n_val;
+
+    n_val = arg_eval_num (parse, &val);
+    snprintf (buf, sizeof(buf), "%ld", n_val);
+    err = parse->output_cb (parse->output_ctx, buf);
+  }
+  else
+  {
+    char *s = arg_eval (parse, &val);
+    
+    if (s)
+    {
+      CSPARSE *cs = NULL;
+      do {
+	err = cs_init(&cs, parse->hdf);
+	if (err) break;
+	err = cs_parse_string(cs, s, strlen(s));
+	if (err) break;
+	err = cs_render(cs, parse->output_ctx, parse->output_cb);
+	if (err) break;
+      } while (0);
+      cs_destroy(&cs);
     }
   }
   if (val.alloc) free(val.s);
diff -Nbru clearsilver-0.6/cs/test.hdf clearsilver-0.6.1/cs/test.hdf
--- clearsilver-0.6/cs/test.hdf	Fri Apr 19 19:02:08 2002
+++ clearsilver-0.6.1/cs/test.hdf	Tue Apr 30 19:57:02 2002
@@ -117,3 +117,13 @@
 Files.2.Sub.2.Type = file
 Files.2.Sub.2.Name = postponed
 Files.2.Sub.2.Type = file
+
+
+EvarTests {
+  0 = <?cs alt:Foo ?>ERROR<?cs /alt ?>
+  1 = test1
+  2 = test 2 <?cs var:Blah ?>
+}
+
+CS_START = <?cs
+CS_END = ?>
diff -Nbru clearsilver-0.6/cs/test13.cs clearsilver-0.6.1/cs/test13.cs
--- clearsilver-0.6/cs/test13.cs	Wed Dec 31 16:00:00 1969
+++ clearsilver-0.6.1/cs/test13.cs	Tue Apr 30 19:57:02 2002
@@ -0,0 +1,6 @@
+
+<?cs each:test = EvarTests ?>
+  <?cs lvar:test ?>
+<?cs /each ?>
+
+<?cs lvar: CS_START + " alt:Foo " + CS_END ?>
diff -Nbru clearsilver-0.6/cs/test13.cs.gold clearsilver-0.6.1/cs/test13.cs.gold
--- clearsilver-0.6/cs/test13.cs.gold	Wed Dec 31 16:00:00 1969
+++ clearsilver-0.6.1/cs/test13.cs.gold	Tue Apr 30 19:57:02 2002
@@ -0,0 +1,11 @@
+Parsing test13.cs
+
+
+  Worn Out
+
+  test1
+
+  test 2 wow
+
+
+Worn Out
diff -Nbru clearsilver-0.6/cs/test7.cs.gold clearsilver-0.6.1/cs/test7.cs.gold
--- clearsilver-0.6/cs/test7.cs.gold	Fri Apr 19 22:54:42 2002
+++ clearsilver-0.6.1/cs/test7.cs.gold	Tue Apr 30 19:57:02 2002
@@ -12,7 +12,7 @@
 205, 203, 201, 199, 197, 195, 193, 191, 189, 187, 185, 183, 181, 179, 177, 175, 173, 171, 169, 167, 165, 163, 161, 159, 157, 155, 153, 151, 149, 147, 145, 143, 141, 139, 137, 135, 133, 131, 129, 127, 125, 123, 121, 119, 117, 115, 113, 111, 109, 107, 105, 103, 101, 99, 97, 95, 93, 91, 89, 87, 85, 83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59, 57, 55, 53, 51, 49, 47, 45, 43, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 
 
 broken
-205, 203, 201, 199, 197, 195, 193, 191, 189, 187, 185, 183, 181, 179, 177, 175, 173, 171, 169, 167, 165, 163, 161, 159, 157, 155, 153, 151, 149, 147, 145, 143, 141, 139, 137, 135, 133, 131, 129, 127, 125, 123, 121, 119, 117, 115, 113, 111, 109, 107, 105, 103, 101, 99, 97, 95, 93, 91, 89, 87, 85, 83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59, 57, 55, 53, 51, 49, 47, 45, 43, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 
+
 
 
 
diff -Nbru clearsilver-0.6/rules.mk clearsilver-0.6.1/rules.mk
--- clearsilver-0.6/rules.mk	Sat Apr 13 11:59:01 2002
+++ clearsilver-0.6.1/rules.mk	Tue Apr 30 20:05:14 2002
@@ -12,8 +12,12 @@
 ## which ships with various versions of Linux as part of glibc.  If you
 ## are going to use that code, you should compile against SleepyCat
 ## 2.7.7 instead
+USE_DB2 = 1
+
+ifeq ($(USE_DB2),1)
 DB2_INC = -I$(HOME)/src/db-2.7.7/dist
 DB2_LIB = -L$(HOME)/src/db-2.7.7/dist -ldb
+endif
 PYTHON_INC = -I/neo/opt/include/python2.1 -I/neo/opt/include/python2.2
 
 ## Programs
diff -Nbru clearsilver-0.6/util/Makefile clearsilver-0.6.1/util/Makefile
--- clearsilver-0.6/util/Makefile	Thu Feb 28 16:53:41 2002
+++ clearsilver-0.6.1/util/Makefile	Tue Apr 30 20:05:17 2002
@@ -8,8 +8,11 @@
 
 UTL_LIB = $(LIB_DIR)libneo_utl.a
 UTL_SRC = neo_err.c neo_files.c neo_misc.c neo_test.c ulist.c neo_hdf.c \
-	  neo_str.c ulocks.c skiplist.c dict.c wdb.c neo_date.c rcfs.c \
+	  neo_str.c ulocks.c skiplist.c dict.c neo_date.c rcfs.c \
 	  wildmat.c
+ifeq ($(USE_DB2),1)
+UTL_SRC += wdb.c
+endif
 UTL_OBJ = $(UTL_SRC:%.c=%.o)
 
 TARGETS = $(UTL_LIB)
