Program to convert .syn file to .h headers.
authorMichal Krol <mjkrol@gmail.org>
Sun, 30 Jul 2006 14:48:01 +0000 (14:48 +0000)
committerMichal Krol <mjkrol@gmail.org>
Sun, 30 Jul 2006 14:48:01 +0000 (14:48 +0000)
src/mesa/shader/slang/library/syn_to_c.c [new file with mode: 0644]

diff --git a/src/mesa/shader/slang/library/syn_to_c.c b/src/mesa/shader/slang/library/syn_to_c.c
new file mode 100644 (file)
index 0000000..f997edf
--- /dev/null
@@ -0,0 +1,72 @@
+#include <stdio.h>
+
+static int was_space = 0;
+static int first_char = 1;
+
+static void put_char (int c)
+{
+   if (c == '\n') {
+      if (!first_char) {
+         fputs ("\\n\"\n\"", stdout);
+         first_char = 1;
+      }
+   }
+   else {
+      first_char = 0;
+      if (c == '\\')
+         fputs ("\\\\", stdout);
+      else if (c == '\"')
+         fputs ("\\\"", stdout);
+      else if (!was_space || !(c == ' ' || c == '\t'))
+         fputc (c, stdout);
+      was_space = (c == ' ' || c == '\t');
+   }
+}
+
+int main (int argc, char *argv[])
+{
+   int c;
+   FILE *f;
+
+   if (argc == 1)
+      return 1;
+   f = fopen (argv[1], "r");
+   if (f == NULL)
+      return 1;
+
+   fputs ("\n", stdout);
+   fputs ("/* DO NOT EDIT - THIS FILE IS AUTOMATICALLY GENERATED FROM THE .syn FILE */\n", stdout);
+   fputs ("\n", stdout);
+   fputs ("\"", stdout);
+   c = getc (f);
+   while (c != EOF) {
+      if (c == '/') {
+         int c2 = getc (f);
+         if (c2 == '*') {
+            was_space = 0;
+            c = getc (f);
+            for (;;) {
+               if (c == '*') {
+                  c2 = getc (f);
+                  if (c2 == '/')
+                     break;
+               }
+               c = getc (f);
+            }
+         }
+         else {
+            put_char (c);
+            put_char (c2);
+         }
+      }
+      else {
+         put_char (c);
+      }
+      c = getc (f);
+   }
+   fputs ("\"\n", stdout);
+
+   fclose (f);
+   return 0;
+}
+