00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "hconfig.h"
00023 #include "system.h"
00024
00025 #define die_unless(c) \
00026 do if (!(c)) \
00027 { \
00028 fprintf (stderr, "%s:%lu: %s\n", argv[1], lineno, #c); \
00029 die (); \
00030 } \
00031 while(0)
00032
00033 static void ATTRIBUTE_NORETURN
00034 die (void)
00035 {
00036 exit (1);
00037 }
00038
00039 int
00040 main(int argc, char **argv)
00041 {
00042 int c;
00043 static unsigned long lineno = 1;
00044
00045 die_unless (argc == 2);
00046
00047 printf ("\
00048 /* This file is automatically generated from `%s',\n\
00049 which you should modify instead. */\n\
00050 #line 1 \"%s\"\n\
00051 ",
00052 argv[1], argv[1]);
00053
00054 while ((c = getchar ()) != EOF)
00055 {
00056 switch (c)
00057 {
00058 default:
00059 putchar (c);
00060 break;
00061
00062 case '\n':
00063 ++lineno;
00064 putchar (c);
00065 break;
00066
00067 case '"':
00068 putchar (c);
00069 for (;;)
00070 {
00071 c = getchar ();
00072 die_unless (c != EOF);
00073 switch (c)
00074 {
00075 case '"':
00076 putchar (c);
00077 goto next_char;
00078
00079 case '\n':
00080 putchar ('\\');
00081 putchar ('n');
00082 putchar ('\\');
00083 putchar ('\n');
00084 ++lineno;
00085 break;
00086
00087 case '\\':
00088 putchar (c);
00089 c = getchar ();
00090 die_unless (c != EOF);
00091 putchar (c);
00092 if (c == '\n')
00093 ++lineno;
00094 break;
00095
00096 default:
00097 putchar (c);
00098 break;
00099 }
00100 }
00101 break;
00102
00103 case '\'':
00104 putchar (c);
00105 for (;;)
00106 {
00107 c = getchar ();
00108 die_unless (c != EOF);
00109 switch (c)
00110 {
00111 case '\'':
00112 putchar (c);
00113 goto next_char;
00114
00115 case '\n':
00116 putchar ('\\');
00117 putchar ('n');
00118 putchar ('\\');
00119 putchar ('\n');
00120 ++lineno;
00121 break;
00122
00123 case '\\':
00124 putchar (c);
00125 c = getchar ();
00126 die_unless (c != EOF);
00127 putchar (c);
00128 if (c == '\n')
00129 ++lineno;
00130 break;
00131
00132 default:
00133 putchar (c);
00134 break;
00135 }
00136 }
00137 break;
00138
00139 case '/':
00140 putchar (c);
00141 c = getchar ();
00142 putchar (c);
00143 if (c != '*')
00144 break;
00145 for (;;)
00146 {
00147 c = getchar ();
00148 die_unless (c != EOF);
00149
00150 switch (c)
00151 {
00152 case '\n':
00153 ++lineno;
00154 putchar (c);
00155 break;
00156
00157 case '*':
00158 c = getchar ();
00159 die_unless (c != EOF);
00160 if (c == '/')
00161 {
00162 putchar ('*');
00163 putchar ('/');
00164 goto next_char;
00165 }
00166 if (c == '\n')
00167 {
00168 ++lineno;
00169 putchar (c);
00170 }
00171 break;
00172
00173 default:
00174
00175 break;
00176 }
00177 }
00178 break;
00179 }
00180
00181 next_char:
00182 ;
00183 }
00184
00185 die_unless (c == EOF);
00186
00187 return 0;
00188 }