diff options
author | YamaArashi <shadow962@live.com> | 2016-01-06 01:47:28 -0800 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-01-06 01:47:28 -0800 |
commit | be8b04496302184c6e8f04d6179f9c3afc50aeb6 (patch) | |
tree | 726e2468c0c07add773c0dbd86ab6386844259ae /gcc/f/ansify.c |
initial commit
Diffstat (limited to 'gcc/f/ansify.c')
-rwxr-xr-x | gcc/f/ansify.c | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/gcc/f/ansify.c b/gcc/f/ansify.c new file mode 100755 index 0000000..3af68e5 --- /dev/null +++ b/gcc/f/ansify.c @@ -0,0 +1,208 @@ +/* ansify.c + Copyright (C) 1997 Free Software Foundation, Inc. + Contributed by James Craig Burley (burley@gnu.org). + +This file is part of GNU Fortran. + +GNU Fortran 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. + +GNU Fortran 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 GNU Fortran; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +/* From f/proj.h, which uses #error -- not all C compilers + support that, and we want *this* program to be compilable + by pretty much any C compiler. */ +#include "hconfig.j" +#include "system.j" +#include "assert.j" +#if HAVE_STDDEF_H +#include <stddef.h> +#endif + +typedef enum + { +#if !defined(false) || !defined(true) + false = 0, true = 1, +#endif +#if !defined(FALSE) || !defined(TRUE) + FALSE = 0, TRUE = 1, +#endif + Doggone_Trailing_Comma_Dont_Work = 1 + } bool; + +#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) + +#define die_unless(c) \ + do if (!(c)) \ + { \ + fprintf (stderr, "%s:%lu: " #c "\n", argv[1], lineno); \ + die (); \ + } \ + while(0) + +static void +die () +{ + exit (1); +} + +int +main(int argc, char **argv) +{ + int c; + static unsigned long lineno = 1; + + die_unless (argc == 2); + + printf ("\ +/* This file is automatically generated from `%s',\n\ + which you should modify instead. */\n\ +# 1 \"%s\"\n\ +", + argv[1], argv[1]); + + while ((c = getchar ()) != EOF) + { + switch (c) + { + default: + putchar (c); + break; + + case '\n': + ++lineno; + putchar (c); + break; + + case '"': + putchar (c); + for (;;) + { + c = getchar (); + die_unless (c != EOF); + switch (c) + { + case '"': + putchar (c); + goto next_char; + + case '\n': + putchar ('\\'); + putchar ('n'); + putchar ('\\'); + putchar ('\n'); + ++lineno; + break; + + case '\\': + putchar (c); + c = getchar (); + die_unless (c != EOF); + putchar (c); + if (c == '\n') + ++lineno; + break; + + default: + putchar (c); + break; + } + } + break; + + case '\'': + putchar (c); + for (;;) + { + c = getchar (); + die_unless (c != EOF); + switch (c) + { + case '\'': + putchar (c); + goto next_char; + + case '\n': + putchar ('\\'); + putchar ('n'); + putchar ('\\'); + putchar ('\n'); + ++lineno; + break; + + case '\\': + putchar (c); + c = getchar (); + die_unless (c != EOF); + putchar (c); + if (c == '\n') + ++lineno; + break; + + default: + putchar (c); + break; + } + } + break; + + case '/': + putchar (c); + c = getchar (); + putchar (c); + if (c != '*') + break; + for (;;) + { + c = getchar (); + die_unless (c != EOF); + + switch (c) + { + case '\n': + ++lineno; + putchar (c); + break; + + case '*': + c = getchar (); + die_unless (c != EOF); + if (c == '/') + { + putchar ('*'); + putchar ('/'); + goto next_char; + } + if (c == '\n') + { + ++lineno; + putchar (c); + } + break; + + default: + /* Don't bother outputting content of comments. */ + break; + } + } + break; + } + + next_char: + ; + } + + die_unless (c == EOF); + + return 0; +} |