Towards GPL
[idzebra-moved-to-github.git] / recctrl / regxread.c
index 945c705..78b4449 100644 (file)
@@ -1,9 +1,26 @@
-/*
- * Copyright (C) 1994-2002, Index Data
- * All rights reserved.
- *
- * $Id: regxread.c,v 1.39 2002-04-15 09:07:10 adam Exp $
- */
+/* $Id: regxread.c,v 1.44 2002-08-02 19:26:56 adam Exp $
+   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
+   Index Data Aps
+
+This file is part of the Zebra server.
+
+Zebra is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Zebra; see the file LICENSE.zebra.  If not, write to the
+Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+*/
+
+
 #include <stdio.h>
 #include <assert.h>
 #include <string.h>
@@ -672,28 +689,14 @@ static void execData (struct lexSpec *spec,
     {
        org_len = 0;
 
-       res = data1_mk_node (spec->dh, spec->m);
-       res->parent = parent;
-       res->which = DATA1N_data;
+       res = data1_mk_node2 (spec->dh, spec->m, DATA1N_data, parent);
        res->u.data.what = DATA1I_text;
        res->u.data.len = 0;
        res->u.data.formatted_text = formatted_text;
-#if 0
-       if (elen > DATA1_LOCALDATA)
-           res->u.data.data = nmem_malloc (spec->m, elen);
-       else
-           res->u.data.data = res->lbuf;
-       memcpy (res->u.data.data, ebuf, elen);
-#else
        res->u.data.data = 0;
-#endif
-       res->root = parent->root;
        
-       parent->last_child = res;
        if (spec->d1_stack[spec->d1_level])
            spec->d1_stack[spec->d1_level]->next = res;
-       else
-           parent->child = res;
        spec->d1_stack[spec->d1_level] = res;
     }
     if (org_len + elen >= spec->concatBuf[spec->d1_level].max)
@@ -776,21 +779,9 @@ static void variantBegin (struct lexSpec *spec,
     
     if (parent->which != DATA1N_variant)
     {
-       res = data1_mk_node (spec->dh, spec->m);
-       res->parent = parent;
-       res->which = DATA1N_variant;
-       res->u.variant.type = 0;
-       res->u.variant.value = 0;
-       res->root = parent->root;
-
-       parent->last_child = res;
+       res = data1_mk_node2 (spec->dh, spec->m, DATA1N_variant, parent);
        if (spec->d1_stack[spec->d1_level])
-       {
            tagDataRelease (spec);
-           spec->d1_stack[spec->d1_level]->next = res;
-       }
-       else
-           parent->child = res;
        spec->d1_stack[spec->d1_level] = res;
        spec->d1_stack[++(spec->d1_level)] = NULL;
     }
@@ -805,10 +796,7 @@ static void variantBegin (struct lexSpec *spec,
     logf (LOG_LOG, "variant node (%d)", spec->d1_level);
 #endif
     parent = spec->d1_stack[spec->d1_level-1];
-    res = data1_mk_node (spec->dh, spec->m);
-    res->parent = parent;
-    res->which = DATA1N_variant;
-    res->root = parent->root;
+    res = data1_mk_node2 (spec->dh, spec->m, DATA1N_variant, parent);
     res->u.variant.type = tp;
 
     if (value_len >= DATA1_LOCALDATA)
@@ -818,14 +806,8 @@ static void variantBegin (struct lexSpec *spec,
 
     res->u.variant.value = res->lbuf;
     
-    parent->last_child = res;
     if (spec->d1_stack[spec->d1_level])
-    {
        tagDataRelease (spec);
-        spec->d1_stack[spec->d1_level]->next = res;
-    }
-    else
-        parent->child = res;
     spec->d1_stack[spec->d1_level] = res;
     spec->d1_stack[++(spec->d1_level)] = NULL;
 }
@@ -863,8 +845,7 @@ static void tagBegin (struct lexSpec *spec,
     parent = spec->d1_stack[spec->d1_level -1];
     partag = get_parent_tag(spec->dh, parent);
    
-    res = data1_mk_node_type (spec->dh, spec->m, DATA1N_tag);
-    res->parent = parent;
+    res = data1_mk_node2 (spec->dh, spec->m, DATA1N_tag, parent);
 
     if (len >= DATA1_LOCALDATA)
        res->u.tag.tag = (char *) nmem_malloc (spec->m, len+1);
@@ -887,16 +868,9 @@ static void tagBegin (struct lexSpec *spec,
                                      spec->d1_stack[0]->u.root.absyn,
                                      e, res->u.tag.tag);
     res->u.tag.element = elem;
-    res->root = parent->root;
 
-    parent->last_child = res;
     if (spec->d1_stack[spec->d1_level])
-    {
        tagDataRelease (spec);
-        spec->d1_stack[spec->d1_level]->next = res;
-    }
-    else
-        parent->child = res;
     spec->d1_stack[spec->d1_level] = res;
     spec->d1_stack[++(spec->d1_level)] = NULL;
 }
@@ -1074,23 +1048,20 @@ static int cmd_tcl_begin (ClientData clientData, Tcl_Interp *interp,
     if (!strcmp(argv[1], "record") && argc == 3)
     {
        char *absynName = argv[2];
-       data1_absyn *absyn;
         data1_node *res;
 
 #if REGX_DEBUG
        logf (LOG_LOG, "begin record %s", absynName);
 #endif
-       absyn = data1_get_absyn (spec->dh, absynName);
+        res = data1_mk_root (spec->dh, spec->m, absynName);
         
-        res = data1_mk_node (spec->dh, spec->m);
-        res->which = DATA1N_root;
-        res->u.root.type =
-            data1_insert_string(spec->dh, res, spec->m, absynName);
-        res->u.root.absyn = absyn;
-        res->root = res;
-        
-        spec->d1_stack[spec->d1_level] = res;
-        spec->d1_stack[++(spec->d1_level)] = NULL;
+        spec->d1_stack[spec->d1_level++] = res;
+
+        res = data1_mk_tag (spec->dh, spec->m, absynName, 0, res);
+
+        spec->d1_stack[spec->d1_level++] = res;
+
+        spec->d1_stack[spec->d1_level] = NULL;
     }
     else if (!strcmp(argv[1], "element") && argc == 3)
     {
@@ -1322,27 +1293,24 @@ static void execCode (struct lexSpec *spec, struct regxCode *code)
                 if (spec->d1_level == 0)
                 {
                     static char absynName[64];
-                    data1_absyn *absyn;
                     data1_node *res;
 
                     if (cmd_len > 63)
                         cmd_len = 63;
                     memcpy (absynName, cmd_str, cmd_len);
                     absynName[cmd_len] = '\0';
-
 #if REGX_DEBUG
                     logf (LOG_LOG, "begin record %s", absynName);
 #endif
-                    absyn = data1_get_absyn (spec->dh, absynName);
-
-                    res = data1_mk_node (spec->dh, spec->m);
-                    res->which = DATA1N_root;
-                    res->u.root.type = absynName;
-                    res->u.root.absyn = absyn;
-                    res->root = res;
+                    res = data1_mk_root (spec->dh, spec->m, absynName);
                     
-                    spec->d1_stack[spec->d1_level] = res;
-                    spec->d1_stack[++(spec->d1_level)] = NULL;
+                    spec->d1_stack[spec->d1_level++] = res;
+
+                    res = data1_mk_tag (spec->dh, spec->m, absynName, 0, res);
+
+                    spec->d1_stack[spec->d1_level++] = res;
+
+                    spec->d1_stack[spec->d1_level] = NULL;
                 }
                 r = execTok (spec, &s, &cmd_str, &cmd_len);
             }