Mercurial > hg > index.cgi
view lwcc/cpp/lwcpp.c @ 262:7de7b14ebaee
Add support for os9 module edition byte
Add support for the symbol "edition" in the __os9 section which defines the
module edition byte which follows immedately after the module name in the
module. It defaults to not setting one.
author | William Astle <lost@l-w.ca> |
---|---|
date | Mon, 04 Feb 2013 21:03:59 -0700 |
parents | 68f41eaf44f2 |
children |
line wrap: on
line source
/* This is the main source for lwcpp, the C preprocessor Copyright © 2012 William Astle This file is part of LWTOOLS. LWTOOLS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <lw_alloc.h> #include <lw_string.h> /* command line option handling */ #define PROGVER "lwcpp from " PACKAGE_STRING char *program_name; /* global state */ char *output_file = NULL; int debug_level = 0; static void do_help(void); static void do_usage(void); /* NOTE: We can't actually use a standard option parser here due to a raft of weird command line syntax and we want to be somewhat compatible with various other tools. That means we have a built-in help text that is preformatted. */ #define OPTARG(dest,src) do { char *___s = (src); if (!*___s) { if (i < argc) ___s = argv[i++]; else { fprintf(stderr, "Option %s requires an argument\n", arg); } } (dest) = ___s; } while (0) static void parse_cmdline(int argc, char **argv) { int i = 1; int eargs = 0; char *arg; while (i < argc) { arg = argv[i++]; if (!eargs && arg[0] == '-' && arg[1] != 0) { /* we have an option here */ if (arg[1] == '-' && arg[2] == 0) { eargs = 1; continue; } /* consume the '-' */ arg++; if (!strcmp(arg, "-help") || !strcmp(arg, "?")) { /* --help */ do_help(); exit(0); } else if (!strcmp(arg, "-usage")) { /* --usage */ do_usage(); exit(0); } else if (!strcmp(arg, "version") || !strcmp(arg, "-version")) { /* --version */ printf("%s\n", PROGVER); exit(0); } switch (*arg) { case 'o': if (output_file) lw_free(output_file); OPTARG(output_file, arg + 1); continue; case 'd': if (!arg[1]) debug_level = 50; else debug_level = atoi(arg + 1); continue; } fprintf(stderr, "Unknown option: %s\n", arg); } else { /* we have an input file here */ printf("Input file: %s\n", arg); } } } /* static struct lw_cmdline_parser cmdline_parser = { options, parse_opts, "INPUTFILE", "lwcc, a HD6309 and MC6809 cross-compiler\vPlease report bugs to lost@l-w.ca.", PROGVER }; */ int main(int argc, char **argv) { program_name = argv[0]; parse_cmdline(argc, argv); if (!output_file) { output_file = lw_strdup("a.out"); } exit(0); } void do_usage(void) { printf( "Usage: %1$s [options] <input file>\n" " %1$s --help\n" " %1$s --version\n" " %1$s --usage\n", program_name ); } void do_help(void) { printf( "Usage: %s [options] <input file>\n" "lwcpp, the lwtools C preprocessor\n" "\n" " -d[LEVEL] enable debug output, optionally set verbosity\n" " level to LEVEL\n" " -o FILE specify the output file name\n" " -?, --help give this help message\n" " --usage print a short usage message\n" " -version, --version print program version\n" "\n" "Please report bugs to lost@l-w.ca.\n", program_name ); }