#include "common.h" #include #include //declare the singleton Command command; void initCommand(int argc, const char* argv[]) { //default values command.error = false; command.help = false; command.version = false; command.binaryfile = NULL; command.sourcefile = NULL; command.compilefile = NULL; command.outfile = "out.tb"; command.source = NULL; command.verbose = false; command.optimize = 1; for (int i = 1; i < argc; i++) { //start at 1 to skip the program name if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { command.help = true; continue; } if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) { command.version = true; continue; } //binary file check at the end if ((!strcmp(argv[i], "-f") || !strcmp(argv[i], "--sourcefile")) && i + 1 < argc) { command.sourcefile = (char*)argv[i + 1]; i++; continue; } if ((!strcmp(argv[i], "-c") || !strcmp(argv[i], "--compile")) && i + 1 < argc) { command.compilefile = (char*)argv[i + 1]; i++; continue; } if ((!strcmp(argv[i], "-o") || !strcmp(argv[i], "--output")) && i + 1 < argc) { command.outfile = (char*)argv[i + 1]; i++; continue; } if ((!strcmp(argv[i], "-i") || !strcmp(argv[i], "--input")) && i + 1 < argc) { command.source = (char*)argv[i + 1]; i++; continue; } if (!strcmp(argv[i], "-d") || !strcmp(argv[i], "--debug")) { command.verbose = true; continue; } if (!strncmp(argv[i], "-O", 2)) { sscanf(argv[i], "-O%d", &command.optimize); continue; } //option without a flag = binary input if (i < argc) { command.binaryfile = (char*)argv[i]; continue; } command.error = true; } } void usageCommand(int argc, const char* argv[]) { printf("Usage: %s [ | -h | -v | [-OX][-d][-f file | -i source | -c file [-o outfile]]]\n\n", argv[0]); } void helpCommand(int argc, const char* argv[]) { usageCommand(argc, argv); printf("\t\t\tBinary input file in tb format, must be version %d.%d.%d.\n\n", TOY_VERSION_MAJOR, TOY_VERSION_MINOR, TOY_VERSION_PATCH); printf("-h\t| --help\t\tShow this help then exit.\n\n"); printf("-v\t| --version\t\tShow version and copyright information then exit.\n\n"); printf("-f\t| --file filename\tParse, compile and execute the source file.\n\n"); printf("-c\t| --compile filename\tParse and compile the specified source file into an output file.\n\n"); printf("-o\t| --output filename\tName of the file compiled with --compile (default: out.tb).\n\n"); printf("-i\t| --input source\tParse, compile and execute this given string of source code.\n\n"); printf("-d\t| --debug\t\tBe verbose when operating.\n\n"); printf("-OX\t\t\t\tUse level X optimization (default 1)\n\n"); } void copyrightCommand(int argc, const char* argv[]) { printf("Toy Programming Language Interpreter Version %d.%d.%d (built on %s)\n\n", TOY_VERSION_MAJOR, TOY_VERSION_MINOR, TOY_VERSION_PATCH, TOY_VERSION_BUILD); printf("Copyright (c) 2020-2022 Kayne Ruse, KR Game Studios\n\n"); printf("This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.\n\n"); printf("Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\n\n"); printf("1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n\n"); printf("2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n\n"); printf("3. This notice may not be removed or altered from any source distribution.\n\n"); }