/* ansify.c Copyright (C) 1997 Free Software Foundation, Inc. Contributed by James Craig Burley. 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. */ #include "hconfig.h" #include "system.h" #define die_unless(c) \ do if (!(c)) \ { \ fprintf (stderr, "%s:%lu: %s\n", argv[1], lineno, #c); \ die (); \ } \ while(0) static void ATTRIBUTE_NORETURN die (void) { 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\ #line 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; }