summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-11-08 19:14:03 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-11-08 19:14:03 (GMT)
commit8394d6002b3b34b2e5c6d118c167f573edf3568d (patch)
tree120173638c2b155f65b9124dde8949d4af31d10c
parentac26c9d683edd89c54af1990760fd2159277791d (diff)
Clifford Wolf:
Added commandline_commands support git-svn-id: http://svn.clifford.at/openscad/trunk@132 b57f626f-c46c-0410-a088-ec61d464b74c
-rw-r--r--mainwin.cc2
-rw-r--r--openscad.cc11
-rw-r--r--openscad.h1
-rw-r--r--parser.y16
4 files changed, 23 insertions, 7 deletions
diff --git a/mainwin.cc b/mainwin.cc
index fcf7098..c6f2f1f 100644
--- a/mainwin.cc
+++ b/mainwin.cc
@@ -411,7 +411,7 @@ void MainWindow::compile(bool procevents)
root_ctx.set_variable("$vpr", vpr);
last_compiled_doc = editor->toPlainText();
- root_module = parse(last_compiled_doc.toAscii().data(), false);
+ root_module = parse((last_compiled_doc + commandline_commands).toAscii().data(), false);
delete highlighter;
highlighter = new Highlighter(editor->document());
diff --git a/openscad.cc b/openscad.cc
index fc9efc8..571ead5 100644
--- a/openscad.cc
+++ b/openscad.cc
@@ -30,11 +30,13 @@
static void help(const char *progname)
{
- fprintf(stderr, "Usage: %s [ -m make_command ] [ filename ]\n", progname);
- fprintf(stderr, " %s { -s stl_file | -o off_file } [ -d deps_file ] [ -m make_command ] filename\n", progname);
+ fprintf(stderr, "Usage: %s [ { -s stl_file | -o off_file } [ -d deps_file ] ]\\\n"
+ "%*s[ -m make_command ] [ -D var=val [..] ] filename\n",
+ progname, strlen(progname)+8, "");
exit(1);
}
+QString commandline_commands;
const char *make_command = NULL;
QSet<QString> dependencies;
@@ -80,7 +82,7 @@ int main(int argc, char **argv)
int opt;
- while ((opt = getopt(argc, argv, "s:o:d:m:")) != -1)
+ while ((opt = getopt(argc, argv, "s:o:d:m:D:")) != -1)
{
switch (opt)
{
@@ -104,6 +106,9 @@ int main(int argc, char **argv)
help(argv[0]);
make_command = optarg;
break;
+ case 'D':
+ commandline_commands += QString(optarg) + QString(";\n");
+ break;
default:
help(argv[0]);
}
diff --git a/openscad.h b/openscad.h
index 17a22a1..e34c491 100644
--- a/openscad.h
+++ b/openscad.h
@@ -828,6 +828,7 @@ public slots:
extern AbstractModule *parse(const char *text, int debug);
extern int get_fragments_from_r(double r, double fn, double fs, double fa);
+extern QString commandline_commands;
extern int parser_error_pos;
extern QPointer<MainWindow> current_win;
diff --git a/parser.y b/parser.y
index 8578fdd..7d74209 100644
--- a/parser.y
+++ b/parser.y
@@ -112,9 +112,19 @@ statement:
}
} |
TOK_ID '=' expr ';' {
- module->assignments_var.append($1);
- module->assignments_expr.append($3);
- free($1);
+ bool add_new_assignment = true;
+ for (int i = 0; i < module->assignments_var.size(); i++) {
+ if (module->assignments_var[i] != QString($1))
+ continue;
+ delete module->assignments_expr[i];
+ module->assignments_expr[i] = $3;
+ add_new_assignment = false;
+ }
+ if (add_new_assignment) {
+ module->assignments_var.append($1);
+ module->assignments_expr.append($3);
+ free($1);
+ }
} |
TOK_MODULE TOK_ID '(' arguments_decl optional_commas ')' {
Module *p = module;
contact: Jan Huwald // Impressum