Fully implement arbitrary delimiters on DATA LIST, extending the half
[pspp-builds.git] / src / q2c.c
index 13e8013e89ab9d17cb7b0b3fa25517e6cc7869b2..1c0ddb79669d73e99760e5b40c0b8bd77457ed09 100644 (file)
--- a/src/q2c.c
+++ b/src/q2c.c
@@ -1570,7 +1570,7 @@ dump_subcommand (const subcommand *sbc)
          outdent ();
        }
       dump (0, "free(p->s_%s);", st_lower(sbc->name) );
-      dump (0, "p->s_%s = xstrdup (ds_value (&tokstr));",
+      dump (0, "p->s_%s = xstrdup (ds_c_str (&tokstr));",
            st_lower (sbc->name));
       dump (0, "lex_get ();");
       if (sbc->restriction)
@@ -1727,6 +1727,21 @@ dump_parser (int persistent)
        outdent ();
       }
   }
+  /* Now deal with the /ALGORITHM subcommand implicit to all commands */
+  dump(1,"else if ( get_syntax() != COMPATIBLE && lex_match_id(\"ALGORITHM\"))");
+  dump(1,"{");
+
+  dump (0, "lex_match ('=');");
+
+  dump(1,"if (lex_match_id(\"COMPATIBLE\"))");
+  dump(0,"set_cmd_algorithm(COMPATIBLE);");
+  outdent();
+  dump(1,"else if (lex_match_id(\"ENHANCED\"))");
+  dump(0,"set_cmd_algorithm(ENHANCED);");
+
+  dump (-1, "}");
+  outdent ();
+
   
   dump (1, "if (!lex_match ('/'))");
   dump (0, "break;");
@@ -1909,6 +1924,9 @@ dump_header (void)
   dump (0, "   Generated by q2c from %s on %s.", ifn, timep);
   dump (0, "   Do not modify!");
   dump (0, " */");
+
+  dump (0, nullstr);
+  dump (0, "#include \"settings.h\"");
   dump (0, nullstr);
 }
 
@@ -2000,6 +2018,7 @@ main (int argc, char *argv[])
 
   dump_header ();
 
+
   indent = 0;
   dump (0, "#line %d \"%s\"", ln + 1, ifn);
   while (get_line ())
@@ -2027,13 +2046,13 @@ main (int argc, char *argv[])
        {
          indent = 0;
 
-         dump (0, "#include <assert.h>");
          dump (0, "#include <stdlib.h>");
          dump (0, "#include \"alloc.h\"");
          dump (0, "#include \"error.h\"");
          dump (0, "#include \"lexer.h\"");
          dump (0, "#include \"str.h\"");
          dump (0, "#include \"var.h\"");
+
          dump (0, nullstr);
        }
       else if (!strcmp (directive, "declarations"))
@@ -2059,6 +2078,8 @@ main (int argc, char *argv[])
       dump (0, "#line %d \"%s\"", ln + 1, ifn);
     }
 
+
+
   return EXIT_SUCCESS;
 }