commit 223faf962edad1fc475af8a65afc8319d683bc0e
parent cd12b2fea38be76fe6bd2c607598c785d979c25e
Author: Dimitrije Dobrota <mail@dimitrijedobrota.com>
Date: Fri, 14 Jun 2024 13:27:37 +0200
Add support for custom free function header
Diffstat:
2 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/demo/main.cpp b/demo/main.cpp
@@ -1,5 +1,5 @@
#include "demo_menu.hpp"
-#include "stamen.h"
+#include "stamen.hpp"
#include <iostream>
diff --git a/src/generate.cpp b/src/generate.cpp
@@ -11,26 +11,18 @@
struct arguments_t {
std::string config;
std::string display;
+ std::string header = "shared.h";
bool cpp = false;
bool user = false;
} opt;
void generateIncludeHeaders(std::ostream &os) {
- if (opt.user) {
- if (opt.cpp) os << "#include \"stamen.hpp\"\n\n";
- else os << "#include \"stamen.h\"\n\n";
- } else {
- if (opt.cpp) os << "#include <stamen/stamen.hpp>\n\n";
- else os << "#include <stamen/stamen.h>\n\n";
- }
}
void generateInclude(std::ostream &os) {
os << "#ifndef STAMEN_MENU_H\n";
os << "#define STAMEN_MENU_H\n\n";
- generateIncludeHeaders(os);
-
for (const auto &[code, menu] : stamen::menu::menu_lookup) {
os << std::format("int {}(int);\n", menu.getCode());
}
@@ -39,8 +31,14 @@ void generateInclude(std::ostream &os) {
}
void generateSource(std::ostream &os) {
- os << "#include \"shared.h\"\n";
- generateIncludeHeaders(os);
+ os << std::format("#include \"{}\"\n", opt.header);
+ if (opt.user) {
+ if (opt.cpp) os << "#include \"stamen.hpp\"\n\n";
+ else os << "#include \"stamen.h\"\n\n";
+ } else {
+ if (opt.cpp) os << "#include <stamen/stamen.hpp>\n\n";
+ else os << "#include <stamen/stamen.h>\n\n";
+ }
os << std::format("extern int {}(const char *title, ", opt.display);
if (opt.cpp) os << "const stamen::item_t itemv[], int size);\n\n";
@@ -68,13 +66,15 @@ void generateSource(std::ostream &os) {
int parse_opt(int key, const char *arg, args::Parser *parser) {
auto arguments = (arguments_t *)parser->input();
switch (key) {
- case 'u': arguments->user = true; break;
case 'd': arguments->display = arg; break;
+ case 'h': arguments->header = arg; break;
+ case 'u': arguments->user = true; break;
case 666: arguments->cpp = false; break;
case 777: arguments->cpp = true; break;
case args::ARG:
if (!arguments->config.empty()) {
- args::failure(parser, 1, 0, "Too many arguments");
+ args::failure(parser, 0, 0, "Too many arguments");
+ args::help(parser, stderr, args::STD_USAGE);
}
arguments->config = arg;
break;
@@ -98,6 +98,7 @@ static const args::option_t options[]{
{0, 0, 0, 0, "Output settings", 2},
{"display", 'd', "FUNC", 0, "Set display function to be called"},
{"user", 'u', 0, 0, "Include user stamen headers"},
+ {"header", 'h', "FUNC", 0, "Header with free functions, default: shared.h"},
{0, 0, 0, 0, "Informational Options", -1},
{0},
};