From 89715d1e59319081a03d4bd0b673a5a725922735 Mon Sep 17 00:00:00 2001 From: Ruben Dahl Date: Sun, 30 Jul 2023 19:28:18 +0200 Subject: [PATCH] Starting rework on this project Starting with refactoring a bunch of stuff, then moving on to the roadmap. Might make a small planner for this as well. --- ceevlang | 2 +- src/ceev.cc | 648 ++++++++++++++++++++++++++-------------------------- src/ceev.h | 20 +- 3 files changed, 342 insertions(+), 328 deletions(-) diff --git a/ceevlang b/ceevlang index 048b26c..fe9589c 160000 --- a/ceevlang +++ b/ceevlang @@ -1 +1 @@ -Subproject commit 048b26ca2bc63728de46ac2bfd5f3ce907b98fb1 +Subproject commit fe9589cc829d69534f7b9db526e3088807469196 diff --git a/src/ceev.cc b/src/ceev.cc index 8ce3681..eb88da1 100644 --- a/src/ceev.cc +++ b/src/ceev.cc @@ -1,377 +1,385 @@ #include "ceev.h" static int usage() { - std::cout << "Usage:"; - std::cout << "\n\t"; - std::cout << GET_PROGRAM_NAME() << " [" << cyan("command") << "] <" - << bright_green("options") << ">\n"; - std::cout << "\n"; - std::cout << "Run `" << GET_PROGRAM_NAME() << bright_green(" --help") - << "' for more information.\n" - << std::endl; - return 1; + std::cout << "Usage:"; + std::cout << "\n\t"; + std::cout << GET_PROGRAM_NAME() << " [" << cyan("command") << "] <" + << bright_green("options") << ">\n"; + std::cout << "\n"; + std::cout << "Run `" << GET_PROGRAM_NAME() << bright_green(" --help") + << "' for more information.\n" + << std::endl; + return 1; } static int show_help() { - std::cout << GET_PROGRAM_NAME() << " [" << cyan("command") << "] <" - << bright_green("options") << ">\n"; - std::cout << "\n"; - std::cout << "Usage:"; - // ceev init - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << cyan(" init ") << "<" - << bright_green("--force") << ">\n"; - std::cout << "\t\t"; - std::cout << "Creates the CeeV file system. Can only be used "; - std::cout << "if the current folder is empty,"; - std::cout << "\n\t\tor when run with `" << bright_green("--force") << "'"; - // ceev build - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << cyan(" build") << "\n"; - std::cout << "\t\t"; - std::cout << "Not yet implemented"; - // ceev run - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << cyan(" run") << "\n"; - std::cout << "\t\t"; - std::cout << "Not yet implemented"; - // ceev clean - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << cyan(" clean") << "\n"; - std::cout << "\t\t"; - std::cout << "Not yet implemented"; - // ceev devel - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << cyan(" devel ") << "<" - << bright_green("--help") << ">\n"; - std::cout << "\t\t"; - std::cout << "Supplementary command for development information"; - // ceev --help - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << cyan(" --help") << "/" << cyan("-h") - << "\n"; - std::cout << "\t\t"; - std::cout << "This help page."; - // ceev --version - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << cyan(" --version") << "/" << cyan("-v") - << "\n"; - std::cout << "\t\t"; - std::cout << "Get the current version."; - // ceev --build - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << cyan(" --build") << "/" << cyan("-B") - << "\n"; - std::cout << "\t\t"; - std::cout << "Get the current build information."; - std::cout << std::endl; - return 0; + std::cout << GET_PROGRAM_NAME() << " [" << cyan("command") << "] <" + << bright_green("options") << ">\n"; + std::cout << "\n"; + std::cout << "Usage:"; + // ceev init + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << cyan(" init ") << "<" + << bright_green("--force") << ">\n"; + std::cout << "\t\t"; + std::cout << "Creates the CeeV file system. Can only be used "; + std::cout << "if the current folder is empty,"; + std::cout << "\n\t\tor when run with `" << bright_green("--force") << "'"; + // ceev build + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << cyan(" build") << "\n"; + std::cout << "\t\t"; + std::cout << "Not yet implemented"; + // ceev run + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << cyan(" run") << "\n"; + std::cout << "\t\t"; + std::cout << "Not yet implemented"; + // ceev clean + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << cyan(" clean") << "\n"; + std::cout << "\t\t"; + std::cout << "Not yet implemented"; + // ceev devel + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << cyan(" devel ") << "<" + << bright_green("--help") << ">\n"; + std::cout << "\t\t"; + std::cout << "Supplementary command for development information"; + // ceev --help + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << cyan(" --help") << "/" << cyan("-h") + << "\n"; + std::cout << "\t\t"; + std::cout << "This help page."; + // ceev --version + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << cyan(" --version") << "/" << cyan("-v") + << "\n"; + std::cout << "\t\t"; + std::cout << "Get the current version."; + // ceev --build + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << cyan(" --build") << "/" << cyan("-B") + << "\n"; + std::cout << "\t\t"; + std::cout << "Get the current build information."; + std::cout << std::endl; + return 0; } -int buildinfo() { - std::cout << "CeeV build " << bright_cyan(bold(GIT_COMMIT_HASH)) << "\n"; - std::cout << "Commit date: " << bright_cyan(bold(GIT_COMMIT_DATE)) << "\n"; - std::cout << "Commited by: " << bright_cyan(bold(GIT_COMMIT_AUTHOR)) - << "\n\n"; - std::cout << "Commit message:\n"; - std::cout << bright_cyan(bold(GIT_COMMIT_MSG)) << std::endl; - return 0; +static int buildinfo() { + std::cout << "CeeV build " << bright_cyan(bold(GIT_COMMIT_HASH)) << "\n"; + std::cout << "Commit date: " << bright_cyan(bold(GIT_COMMIT_DATE)) << "\n"; + std::cout << "Commited by: " << bright_cyan(bold(GIT_COMMIT_AUTHOR)) + << "\n\n"; + std::cout << "Commit message:\n"; + std::cout << bright_cyan(bold(GIT_COMMIT_MSG)) << std::endl; + return 0; } static int show_version() { - char buf[6]; - std::memcpy(buf, &__ceev_version[std::strlen(__ceev_version) - 5], 6); - if (!std::strcmp(buf, "devel")) - std::cout << "CeeV version " << __ceev_version << " (Build " - << GIT_COMMIT_HASH << ")" << '\n'; - else - std::cout << "CeeV version " << __ceev_version << '\n'; - return 0; + char buf[6]; + std::memcpy(buf, &__ceev_version[std::strlen(__ceev_version) - 5], 6); + if (!std::strcmp(buf, "devel")) + std::cout << "CeeV version " << __ceev_version << " (Build " + << GIT_COMMIT_HASH << ")" << '\n'; + else + std::cout << "CeeV version " << __ceev_version << '\n'; + return 0; } bool replace(std::string& str, const std::string& from, const std::string& to) { size_t start_pos = str.find(from); - if(start_pos == std::string::npos) + if (start_pos == std::string::npos) return false; str.replace(start_pos, from.length(), to); return true; } -static std::string query_author() { - std::string author; - std::cout << "Author: "; - std::getline(std::cin, author); - return author; -} - struct config_data get_config(bool ignore_err = false) { - fs::path config_path = fs::current_path(); - std::string line; - struct config_data data; - std::ifstream config(config_path / ".ceev" / CONFIG_FILENAME); - if (!config) { - if (!ignore_err) { - std::cerr << bg_red(bold("ERROR")) << ": Could not open config\n"; - std::cerr << "Run `ceev init' to create a new project." << std::endl; + fs::path config_path = fs::current_path(); + std::string line; + struct config_data data; + std::ifstream config(config_path / ".ceev" / CONFIG_FILENAME); + if (!config) { + if (!ignore_err) { + std::cerr << bg_red(bold("ERROR")) << ": Could not open config\n"; + std::cerr << "Run `ceev init' to create a new project." + << std::endl; + } + return data; } + while (std::getline(config, line)) { + std::istringstream iss(line); + std::string key; + if (!std::getline(iss, key, '=')) + continue; + std::string value; + if (!std::getline(iss, value)) + continue; + if (key == "name") + data.name = value; + if (key == "version") + data.version = value; + if (key == "author") + data.author = value; + if (key == "email") + data.email = value; + } + config.close(); return data; - } - while (std::getline(config, line)) { - std::istringstream iss(line); - std::string key; - if (!std::getline(iss, key, '=')) - continue; - std::string value; - if (!std::getline(iss, value)) - continue; - if (key == "name") - data.name = value; - if (key == "version") - data.version = value; - if (key == "author") - data.author = value; - if (key == "email") - data.email = value; - } - config.close(); - return data; } int create_fs(std::deque args) { - fs::path cwd = fs::current_path(); - if (!fs::is_empty(cwd) && - ((!args.empty() && args[0] != "--force") || args.empty())) { - std::cerr << bg_red(bold("ERROR")) << ": Folder not empty.\n" - << "Run the command with `--force' to run anyways" << std::endl; - return 1; - } - fs::create_directory(cwd / ".ceev", cwd); - fs::create_directory(cwd / "src", cwd); - std::ofstream config(cwd / ".ceev/" / CONFIG_FILENAME); - std::string directory = - cwd.string().substr(cwd.parent_path().string().length() + 1); - std::cout << "Initializing project...\n"; - std::cout << "You can change this information later by editing .ceev/" - << CONFIG_FILENAME << "\n"; - std::string project_name; - std::cout << "Project name [" << directory << "]: "; - std::getline(std::cin, project_name); - if (project_name == "") - project_name = directory; - config << "name=" << project_name << '\n'; - std::string version; - std::cout << "Version [0.0.1]: "; - std::getline(std::cin, version); - if (version == "") - version = "0.0.1"; - config << "version=" << version << '\n'; - std::string author = query_author(); - if (author == "") { - std::cerr << bg_red(bold("ERROR")) << ": Author cannot be empty.\n"; - author = query_author(); - } - config << "author=" << author << '\n'; - std::string email; - while (author.find(' ') != std::string::npos) - replace(author, " ", "."); - std::cout << "Email [" << author << "@example.org]: "; - std::getline(std::cin, email); - if (email == "") - email = author + "@example.org"; - config << "email=" << email << '\n'; - config.close(); - return 0; + fs::path cwd = fs::current_path(); + if (!fs::is_empty(cwd) && + ((!args.empty() && args[0] != "--force") || args.empty())) { + std::cerr << bg_red(bold("ERROR")) << ": Folder not empty.\n" + << "Run the command with `--force' to run anyways" + << std::endl; + return 1; + } + fs::create_directory(cwd / ".ceev", cwd); + fs::create_directory(cwd / "src", cwd); + std::ofstream config(cwd / ".ceev/" / CONFIG_FILENAME); + std::string directory = + cwd.string().substr(cwd.parent_path().string().length() + 1); + std::cout << "Initializing project...\n"; + std::cout << "You can change this information later by editing .ceev/" + << CONFIG_FILENAME << "\n"; + std::string project_name; + std::cout << "Project name [" << directory << "]: "; + std::getline(std::cin, project_name); + if (project_name == "") + project_name = directory; + config << "name=" << project_name << '\n'; + std::string version; + std::cout << "Version [0.0.1]: "; + std::getline(std::cin, version); + if (version == "") + version = "0.0.1"; + config << "version=" << version << '\n'; + std::string author, author_email; + std::string host = ""; + std::cout << "Author: "; + std::getline(std::cin, author); + config << "author=" << author << '\n'; + char* login = (char*)malloc(sizeof(char*) * 100); + getlogin_r(login, 100); + author_email = std::string(login); + free(login); + char* hostname = (char*)malloc(sizeof(char*) * 100); + gethostname(hostname, 100); + host = std::string(hostname); + free(hostname); + std::string email; + std::cout << "Email [" << author_email << "@" << host << "]: "; + std::getline(std::cin, email); + if (email == "") + email = author_email + "@" + host; + config << "email=" << email << '\n'; + config.close(); + return 0; } int build_project(std::deque args) { - std::cout << TODO << ": Function is not made yet.\n"; - std::cout << "Building project..." << std::endl; - return 0; + NYI; + std::cout << "Building project..." << std::endl; + return 0; } int run_project(std::deque args) { - struct config_data data = get_config(); - std::cout << "Name: " << data.name << '\n'; - std::cout << "Version: " << data.version << '\n'; - std::cout << "Author: " << data.author << '\n'; - std::cout << "Email: " << data.email << '\n'; - std::cout << "Running project..." << std::endl; - return devel_sdl2(args); + struct config_data data = get_config(); + std::cout << "Name: " << data.name << '\n'; + std::cout << "Version: " << data.version << '\n'; + std::cout << "Author: " << data.author << '\n'; + std::cout << "Email: " << data.email << '\n'; + std::cout << "Running project..." << std::endl; + return devel_sdl2(args); } int clean_project(std::deque args) { - std::cout << TODO << ": Function is not made yet.\n"; - std::cout << "Cleaning project..." << std::endl; - return 0; + NYI; + std::cout << "Cleaning project..." << std::endl; + return 0; } int devel(std::deque args) { - if (args.empty()) { - std::cout << bg_red(bold("ERROR")) << ": No subcommands given." + if (args.empty()) { + std::cout << bg_red(bold("ERROR")) << ": No subcommands given." + << std::endl; + devel_help(); + return 1; + } + std::string a1 = args[0]; + args.pop_front(); + if (a1 == "roadmap") + return devel_roadmap(); + if (a1 == "sdl2") + return devel_sdl2(args); + if (a1 == "lang") + return devel_lang(args); + + std::string kw; + if (a1.substr(0, 2) == "--") { + kw = a1.substr(2); + if (kw == "help") + return devel_help(); + } + if (a1.substr(0, 1) == "-") { + kw = a1.substr(1); + if (kw == "h") + return devel_help(); + } + std::cerr << bg_red(bold("ERROR")) << ": Unknown command `" + << bright_magenta(a1) << "'\n" << std::endl; devel_help(); return 1; - } - std::string a1 = args[0]; - args.pop_front(); - if (a1 == "roadmap") - return devel_roadmap(); - if (a1 == "sdl2") - return devel_sdl2(args); - if (a1 == "lang") - return devel_lang(args); - - std::string kw; - if (a1.substr(0, 2) == "--") { - kw = a1.substr(2); - if (kw == "help") - return devel_help(); - } - if (a1.substr(0, 1) == "-") { - kw = a1.substr(1); - if (kw == "h") - return devel_help(); - } - std::cerr << bg_red(bold("ERROR")) << ": Unknown command `" - << bright_magenta(a1) << "'\n" - << std::endl; - devel_help(); - return 1; } int devel_help() { - std::cout << "Usage:"; - // ceev devel roadmap - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << " devel " << cyan("roadmap") << "\n"; - std::cout << "\t\t"; - std::cout << "Get the current roadmap."; - // ceev devel sdl2 - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << " devel " << cyan("sdl2") << " <" - << bright_green("--use-defaults") << "/" << bright_green("-D") - << ">\n"; - std::cout << "\t\t"; - std::cout << "Tests of SDL2"; - // ceev devel --help - std::cout << "\n*\t"; - std::cout << GET_PROGRAM_NAME() << " devel " << bright_green("--help") << "/" - << bright_green("-h") << "\n"; - std::cout << "\t\t"; - std::cout << "This help page."; - std::cout << std::endl; - return 0; + std::cout << "Usage:"; + // ceev devel roadmap + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << " devel " << cyan("roadmap") << "\n"; + std::cout << "\t\t"; + std::cout << "Get the current roadmap."; + // ceev devel sdl2 + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << " devel " << cyan("sdl2") << " <" + << bright_green("--use-defaults") << "/" << bright_green("-D") + << ">\n"; + std::cout << "\t\t"; + std::cout << "Tests of SDL2"; + // ceev devel --help + std::cout << "\n*\t"; + std::cout << GET_PROGRAM_NAME() << " devel " << bright_green("--help") + << "/" << bright_green("-h") << "\n"; + std::cout << "\t\t"; + std::cout << "This help page."; + std::cout << std::endl; + return 0; } int devel_roadmap() { - std::cout << "CeeV roadmap:\n"; - std::cout << "* " << HALTED << ":\tGet a working SDL prototype.\n"; - std::cout << "* " << INPROG << ":\tMake a language parser.\n"; - std::cout << "* " << TODO << " :\tMake a language compiler.\n"; - std::cout << "* " << TODO << " :\tTest the language.\n"; - std::cout << "* " << STATUS << ":\t"; - std::cout << "The beginning work on the language has begun." << std::endl; - return 0; + std::cout << "CeeV roadmap:\n"; + std::cout << "* " << HALTED << ":\tGet a working SDL prototype.\n"; + std::cout << "* " << INPROG << ":\tMake a language parser.\n"; + std::cout << "* " << TODO << " :\tMake a language compiler.\n"; + std::cout << "* " << TODO << " :\tTest the language.\n"; + std::cout << "* " << STATUS << ":\t"; + std::cout << "The beginning work on the language has begun." << std::endl; + return 0; } int devel_sdl2(std::deque args) { - struct config_data data; - if (!args.empty() && (args[0] == "--use-defaults" || args[0] == "-D")) { - data.name = "CeeV"; - data.version = __ceev_version; - data.author = "User"; - data.email = "user@example.org"; - } else - data = get_config(); - if (data.name == "") - return 1; - const int SCREEN_WIDTH = 640; - const int SCREEN_HEIGHT = 480; - SDL_Window *window = nullptr; - SDL_Surface *screen_surface = nullptr; - SDL_Surface *img_surface = nullptr; - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - std::cerr << bg_red(bold("ERROR")) - << ": SDL could not initialize! SDL_Error: " << SDL_GetError() - << std::endl; - return 1; - } - std::string name = data.name + " version " + data.version + " by " + - data.author + " <" + data.email + ">"; - window = SDL_CreateWindow(name.c_str(), SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, - SCREEN_HEIGHT, SDL_WINDOW_SHOWN); - if (window == nullptr) { - std::cerr << bg_red(bold("ERROR")) - << ": Window could not be created! SDL_Error: " << SDL_GetError() - << std::endl; - return 1; - } - screen_surface = SDL_GetWindowSurface(window); - SDL_FillRect(screen_surface, nullptr, - SDL_MapRGB(screen_surface->format, 0xFF, 0xFF, 0xFF)); - screen_surface = SDL_GetWindowSurface(window); - SDL_FillRect(screen_surface, nullptr, - SDL_MapRGB(screen_surface->format, 0xFF, 0xFF, 0xFF)); - SDL_UpdateWindowSurface(window); - // hack to make it stay open - SDL_Event e; - bool quit = false; - while (!quit) { - while (SDL_PollEvent(&e) != 0) { - if (e.type == SDL_QUIT) { - quit = true; - } + struct config_data data; + if (!args.empty() && (args[0] == "--use-defaults" || args[0] == "-D")) { + data.name = "CeeV"; + data.version = __ceev_version; + data.author = "User"; + data.email = "user@example.org"; + } else + data = get_config(); + if (CV_ISDEBUG) { + std::cout << "data.name = " << data.name << '\n'; + std::cout << "data.version = " << data.version << '\n'; + std::cout << "data.author = " << data.author << '\n'; + std::cout << "data.email = " << data.email << '\n'; } - } - SDL_DestroyWindow(window); - SDL_Quit(); - return 0; + if (data.name == "") + return 1; + const int SCREEN_WIDTH = 640; + const int SCREEN_HEIGHT = 480; + SDL_Window* window = nullptr; + SDL_Surface* screen_surface = nullptr; + SDL_Surface* img_surface = nullptr; + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + std::cerr << bg_red(bold("ERROR")) + << ": SDL could not initialize! SDL_Error: " << SDL_GetError() + << std::endl; + return 1; + } + std::string name = data.name + " version " + data.version + " by " + + data.author + " <" + data.email + ">"; + window = SDL_CreateWindow(name.c_str(), SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, + SCREEN_HEIGHT, SDL_WINDOW_SHOWN); + if (window == nullptr) { + std::cerr << bg_red(bold("ERROR")) + << ": Window could not be created! SDL_Error: " + << SDL_GetError() << std::endl; + return 1; + } + screen_surface = SDL_GetWindowSurface(window); + SDL_FillRect(screen_surface, nullptr, + SDL_MapRGB(screen_surface->format, 0xFF, 0xFF, 0xFF)); + screen_surface = SDL_GetWindowSurface(window); + SDL_FillRect(screen_surface, nullptr, + SDL_MapRGB(screen_surface->format, 0xFF, 0xFF, 0xFF)); + SDL_UpdateWindowSurface(window); + // hack to make it stay open + SDL_Event e; + bool quit = false; + while (!quit) { + while (SDL_PollEvent(&e) != 0) { + if (e.type == SDL_QUIT) { + quit = true; + } + } + } + SDL_DestroyWindow(window); + SDL_Quit(); + return 0; } int devel_lang(std::deque args) { - std::cout << TODO << ": Function is not made yet.\n"; - return 1; + NYI; + return 1; } -int main(int argc, char **argv) { - if (argc <= 1) { +int main(int argc, char** argv) { + if (argc <= 1) { + return usage(); + } + if (std::getenv("DEBUG")) + CV_ISDEBUG = true; + std::deque args; + for (int i = 1; i < argc; i++) + args.push_back(std::string(argv[i])); + std::string a1 = std::string(args[0]); + args.pop_front(); + if (a1 == "init") + return create_fs(args); + if (a1 == "build") + return build_project(args); + if (a1 == "run") + return run_project(args); + if (a1 == "clean") + return clean_project(args); + if (a1 == "devel") + return devel(args); + std::string kw; + if (a1.substr(0, 2) == "--") { + kw = a1.substr(2); + if (kw == "version") + return show_version(); + if (kw == "help") + return show_help(); + } + if (a1.substr(0, 1) == "-") { + kw = a1.substr(1); + if (kw == "v") + return show_version(); + if (kw == "h") + return show_help(); + // XXX: for now, use devel. maybe change this in the future? + if (kw == "B") + return buildinfo(); + } + std::cerr << bg_red(bold("ERROR")) << ": Unknown command `" + << bright_magenta(a1) << "'\n" + << std::endl; return usage(); - } - std::deque args; - for (int i = 1; i < argc; i++) - args.push_back(std::string(argv[i])); - std::string a1 = std::string(args[0]); - args.pop_front(); - if (a1 == "init") - return create_fs(args); - if (a1 == "build") - return build_project(args); - if (a1 == "run") - return run_project(args); - if (a1 == "clean") - return clean_project(args); - if (a1 == "devel") - return devel(args); - std::string kw; - if (a1.substr(0, 2) == "--") { - kw = a1.substr(2); - if (kw == "version") - return show_version(); - if (kw == "help") - return show_help(); - } - if (a1.substr(0, 1) == "-") { - kw = a1.substr(1); - if (kw == "v") - return show_version(); - if (kw == "h") - return show_help(); - // XXX: for now, use devel. maybe change this in the future? - if (kw == "B") - return buildinfo(); - } - std::cerr << bg_red(bold("ERROR")) << ": Unknown command `" - << bright_magenta(a1) << "'\n" - << std::endl; - return usage(); } diff --git a/src/ceev.h b/src/ceev.h index 4bc3a7d..4501bf5 100644 --- a/src/ceev.h +++ b/src/ceev.h @@ -1,8 +1,9 @@ #pragma once #include -#include #include +#include +#include #include #include #include @@ -47,19 +48,24 @@ #define HALTED bg_red(white("HALTED")) #define STATUS bg_green(bold("STATUS")) +#define WIP std::cout << TODO << ": Function is a work in progress" << std::endl +#define NYI \ + std::cout << TODO << ": Function is not yet implemented" << std::endl + +bool CV_ISDEBUG = false; + namespace fs = std::filesystem; struct config_data { - std::string name = ""; - std::string version = ""; - std::string author = ""; - std::string email = ""; + std::string name = ""; + std::string version = ""; + std::string author = ""; + std::string email = ""; }; static int usage(); static int show_help(); static int buildinfo(); bool replace(std::string& str, const std::string& from, const std::string& to); -static std::string query_author(); struct config_data get_config(bool ignore_err); int create_fs(std::deque args); int build_project(std::deque args); @@ -70,4 +76,4 @@ int devel_help(); int devel_roadmap(); int devel_sdl2(std::deque args); int devel_lang(std::deque args); -int main(int argc, char **argv); +int main(int argc, char** argv);