diff options
author | bothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-03-16 21:59:07 +0000 |
---|---|---|
committer | bothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1995-03-16 21:59:07 +0000 |
commit | 1d6fa33fdede7e80d46b1c52fc79db93f9794085 (patch) | |
tree | 0194faf594c2891f5c06b75959e9314b81c1b28c /gcc/cppmain.c | |
parent | 2a9ac197d04e43aad2615cf6e1db5da92dbe66ce (diff) | |
download | ppe42-gcc-1d6fa33fdede7e80d46b1c52fc79db93f9794085.tar.gz ppe42-gcc-1d6fa33fdede7e80d46b1c52fc79db93f9794085.zip |
Initial revision
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@9191 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cppmain.c')
-rw-r--r-- | gcc/cppmain.c | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/gcc/cppmain.c b/gcc/cppmain.c new file mode 100644 index 00000000000..32131720c93 --- /dev/null +++ b/gcc/cppmain.c @@ -0,0 +1,102 @@ +/* CPP main program, using CPP Library. + Copyright (C) 1995 Free Software Foundation, Inc. + Written by Per Bothner, 1994-95. + +This program 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 2, 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, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#include "cpplib.h" +#include <stdio.h> + +extern char *getenv (); + +cpp_reader parse_in; +cpp_options options; + +/* More 'friendly' abort that prints the line and file. + config.h can #define abort fancy_abort if you like that sort of thing. */ + +void +fancy_abort () +{ + fatal ("Internal gcc abort."); +} + + +int +main (argc, argv) + int argc; + char **argv; +{ + char *p; + int i; + int argi = 1; /* Next argument to handle. */ + struct cpp_options *opts = &options; + + p = argv[0] + strlen (argv[0]); + while (p != argv[0] && p[-1] != '/') --p; + progname = p; + + init_parse_file (&parse_in); + parse_in.data = opts; + + init_parse_options (opts); + + argi += cpp_handle_options (&parse_in, argc - argi , argv + argi); + if (argi < argc) + fatal ("Invalid option `%s'", argv[argi]); + parse_in.show_column = 1; + + i = push_parse_file (&parse_in, opts->in_fname); + if (i != SUCCESS_EXIT_CODE) + return i; + + /* Now that we know the input file is valid, open the output. */ + + if (!opts->out_fname || !strcmp (opts->out_fname, "")) + opts->out_fname = "stdout"; + else if (! freopen (opts->out_fname, "w", stdout)) + cpp_pfatal_with_name (&parse_in, opts->out_fname); + + for (;;) + { +#if 0 + int ch = PARSE_GETC (&parse_in); + if (ch < 0) + break; + if (! opts->no_output) + putchar (ch); +#else + enum cpp_token kind; + if (! opts->no_output) + { + fwrite (parse_in.token_buffer, 1, CPP_WRITTEN (&parse_in), stdout); + } + parse_in.limit = parse_in.token_buffer; + kind = cpp_get_token (&parse_in); + if (kind == CPP_EOF) + break; +#endif + } + + cpp_finish (&parse_in); + + if (parse_in.errors) + exit (FAILURE_EXIT_CODE); + exit (SUCCESS_EXIT_CODE); +} |