From 128e53d220d97225803d61d86f8e43439563181d Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Tue, 26 Jul 2016 00:22:55 +0200 Subject: WIP: kicad_gen is a util to generate schematic.h files from KiCAD netlist files. Current code contains a lexer and parser for KiCAD's netlist files and code to build a tree of the netlist which can be used for generation. Contains CMake code for integrating the generation into CMake too. --- main.cpp | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 main.cpp (limited to 'main.cpp') diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b5e998d --- /dev/null +++ b/main.cpp @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include "trygvis/kicad.h" + +using namespace std; +using namespace trygvis::kicad; + +char *program; + +__attribute__((noreturn)) +void usage(const char *reason = nullptr) { + if (reason) { + fprintf(stderr, "%s\n", reason); + } + fprintf(stderr, "usage: %s -f file -r ref\n", program); + exit(EX_USAGE); +} + +void parse_args(int argc, char **argv, bool *debug, char **filename, char **ref) { + *debug = false; + *filename = *ref = nullptr; + + int c; + while ((c = getopt(argc, argv, "Df:r:")) != -1) { + switch (c) { + case 'D': + *debug = true; + break; + case 'f': + *filename = optarg; + break; + case 'r': + *ref = optarg; + break; + default: + abort(); + } + } + + if (!*filename) { + usage(); + } +} + +bool generate(const char *ref, const trygvis::kicad::netlist &netlist) { + opt componentO = netlist.find_component(ref); + + if (!componentO) { + cerr << "Could not find component '" << ref << "'" << endl; + return false; + } + + const component *c = *componentO; + + cerr << "Generating connections for " << ref << endl; + + cerr << c->value << endl; + + return true; +} + +int main(int argc, char **argv) { + program = argv[0]; + + bool debug; + char *filename; + char *ref; + parse_args(argc, argv, &debug, &filename, &ref); + + kicad_net_loader loader; + + try { + auto netlist = loader.load(filename); + + auto ok = generate(ref, netlist); + + if (ok) { + return EXIT_SUCCESS; + } + return EXIT_FAILURE; + } catch (kicad_parse_exception &e) { + for (auto &m: e.messages) { + fprintf(stderr, "%s\n", m.c_str()); + } + errx(EX_DATAERR, "Could not parse netlist"); + } +} -- cgit v1.2.3