summaryrefslogtreecommitdiff
path: root/gcc/f/ansify.c
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-01-06 01:47:28 -0800
committerYamaArashi <shadow962@live.com>2016-01-06 01:47:28 -0800
commitbe8b04496302184c6e8f04d6179f9c3afc50aeb6 (patch)
tree726e2468c0c07add773c0dbd86ab6386844259ae /gcc/f/ansify.c
initial commit
Diffstat (limited to 'gcc/f/ansify.c')
-rwxr-xr-xgcc/f/ansify.c208
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;
+}