diff options
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/shader/slang/MachineIndependent/preprocessor/cpp_comment_fix.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/mesa/shader/slang/MachineIndependent/preprocessor/cpp_comment_fix.c b/src/mesa/shader/slang/MachineIndependent/preprocessor/cpp_comment_fix.c new file mode 100644 index 0000000000..0c3073590d --- /dev/null +++ b/src/mesa/shader/slang/MachineIndependent/preprocessor/cpp_comment_fix.c @@ -0,0 +1,76 @@ +/* converts c++ to c comments */ +/* usage: ./cpp_comment_fix source */ + +#include <stdio.h> + +int main (int argc, char *argv[]) +{ + FILE *f; + int c; + char *buf = NULL; + int size = 0, i = 0; + + f = fopen (argv[1], "r"); + while ((c = fgetc (f)) != EOF) + { + buf = (void *) realloc (buf, size + 1); + buf[size] = c; + size++; + } + fclose (f); + + f = fopen (argv[1], "w"); + + while (i < size) + { + if (buf[i] == '/') + { + if (buf[i+1] == '/') + { + fprintf (f, "/*"); + i+=2; + while (buf[i] != '\n' && buf[i] != '\r' && i < size) + fprintf (f, "%c", buf[i++]); + fprintf (f, " */\n"); + if (i < size && buf[i] == '\n') + i++; + else if (i < size && buf[i] == '\r') + i+=2; + } + else + { + fprintf (f, "/"); + i++; + + if (buf[i] == '*') + { + fprintf (f, "*"); + i++; + + for (;;) + { + if (buf[i] == '*' && buf[i+1] == '/') + { + fprintf (f, "*/"); + i+=2; + break; + } + else + { + fprintf (f, "%c", buf[i]); + i++; + } + } + } + } + } + else + { + fprintf (f, "%c", buf[i]); + i++; + } + } + fclose (f); + return 0; +} + |