summaryrefslogtreecommitdiff
path: root/src/openscad.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/openscad.cc')
-rw-r--r--src/openscad.cc45
1 files changed, 22 insertions, 23 deletions
diff --git a/src/openscad.cc b/src/openscad.cc
index 980e2af..7fe054f 100644
--- a/src/openscad.cc
+++ b/src/openscad.cc
@@ -149,9 +149,14 @@ int main(int argc, char **argv)
all_options.add(desc).add(hidden);
po::variables_map vm;
- po::store(po::command_line_parser(argc, argv).options(all_options).positional(p).run(), vm);
-// po::notify(vm);
-
+ try {
+ po::store(po::command_line_parser(argc, argv).options(all_options).positional(p).run(), vm);
+ }
+ catch(std::exception &e) { // Catches e.g. unknown options
+ fprintf(stderr, "%s\n", e.what());
+ help(argv[0]);
+ }
+
if (vm.count("help")) help(argv[0]);
if (vm.count("version")) version();
@@ -255,34 +260,28 @@ int main(int argc, char **argv)
Context root_ctx;
register_builtin(root_ctx);
- AbstractModule *root_module;
+ Module *root_module;
ModuleInstantiation root_inst;
AbstractNode *root_node;
handle_dep(filename);
- FILE *fp = fopen(filename, "rt");
- if (!fp) {
- fprintf(stderr, "Can't open input file `%s'!\n", filename);
+
+ std::ifstream ifs(filename);
+ if (!ifs.is_open()) {
+ fprintf(stderr, "Can't open input file '%s'!\n", filename);
exit(1);
- } else {
- std::stringstream text;
- char buffer[513];
- int ret;
- while ((ret = fread(buffer, 1, 512, fp)) > 0) {
- buffer[ret] = 0;
- text << buffer;
- }
- fclose(fp);
- text << "\n" << commandline_commands;
- fs::path abspath = boosty::absolute( filename );
- std::string fname = boosty::stringy( abspath );
- root_module = parse(text.str().c_str(), fname.c_str(), false);
- if (!root_module) exit(1);
}
+ std::string text((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
+ text += "\n" + commandline_commands;
+ fs::path abspath = boosty::absolute(filename);
+ std::string parentpath = boosty::stringy(abspath.parent_path());
+ root_module = parse(text.c_str(), parentpath.c_str(), false);
+ if (!root_module) exit(1);
+ root_module->handleDependencies();
- fs::path fpath = boosty::absolute( fs::path(filename) );
+ fs::path fpath = boosty::absolute(fs::path(filename));
fs::path fparent = fpath.parent_path();
- fs::current_path( fparent );
+ fs::current_path(fparent);
AbstractNode::resetIndexCounter();
root_node = root_module->evaluate(&root_ctx, &root_inst);
contact: Jan Huwald // Impressum