mesa: added support for GLSL 1.20 array.length() method
[mesa.git] / src / mesa / shader / slang / library / gc_to_bin.c
old mode 100755 (executable)
new mode 100644 (file)
index 4bd2114..8aef7b5
@@ -1,79 +1,85 @@
-#include "../../grammar/grammar_crt.h"\r
-#include "../../grammar/grammar_crt.c"\r
-#include <stdio.h>\r
-\r
-static const char *slang_shader_syn =\r
-#include "slang_shader_syn.h"\r
-;\r
-\r
-static void gc_to_bin (grammar id, const char *in, const char *out)\r
-{\r
-       FILE *f;\r
-       byte *source, *prod;\r
-       unsigned int size, i, line = 0;\r
-\r
-       f = fopen (in, "r");\r
-       if (f == NULL)\r
-               return;\r
-       fseek (f, 0, SEEK_END);\r
-       size = ftell (f);\r
-       fseek (f, 0, SEEK_SET);\r
-       source = (byte *) grammar_alloc_malloc (size + 1);\r
-       source[fread (source, 1, size, f)] = '\0';\r
-       fclose (f);\r
-\r
-       if (!grammar_fast_check (id, source, &prod, &size, 65536))\r
-       {\r
-               grammar_alloc_free (source);\r
-               return;\r
-       }\r
-\r
-       f = fopen (out, "w");\r
-       for (i = 0; i < size; i++)\r
-       {\r
-               unsigned int a;\r
-               if (prod[i] < 10)\r
-                       a = 1;\r
-               else if (prod[i] < 100)\r
-                       a = 2;\r
-               else\r
-                       a = 3;\r
-               if (i < size - 1)\r
-                       a++;\r
-               if (line + a > 100)\r
-               {\r
-                       fprintf (f, "\n");\r
-                       line = 0;\r
-               }\r
-               line += a;\r
-               fprintf (f, "%d", prod[i]);\r
-               if (i < size - 1)\r
-                       fprintf (f, ",");\r
-       }\r
-       fclose (f);\r
-       grammar_alloc_free (prod);\r
-}\r
-\r
-int main ()\r
-{\r
-       grammar id;\r
-\r
-       id = grammar_load_from_text ((const byte *) slang_shader_syn);\r
-       if (id == 0)\r
-               return 1;\r
-\r
-       grammar_set_reg8 (id, (const byte *) "parsing_builtin", 1);\r
-\r
-       grammar_set_reg8 (id, (const byte *) "shader_type", 1);\r
-       gc_to_bin (id, "slang_core.gc", "slang_core_gc_bin.h");\r
-       gc_to_bin (id, "slang_common_builtin.gc", "slang_common_builtin_gc_bin.h");\r
-       gc_to_bin (id, "slang_fragment_builtin.gc", "slang_fragment_builtin_gc_bin.h");\r
-\r
-       grammar_set_reg8 (id, (const byte *) "shader_type", 2);\r
-       gc_to_bin (id, "slang_vertex_builtin.gc", "slang_vertex_builtin_gc_bin.h");\r
-\r
-       grammar_destroy (id);\r
-\r
-       return 0;\r
-}\r
-\r
+#include "../../grammar/grammar_crt.h"
+#include "../../grammar/grammar_crt.c"
+#include <stdlib.h>
+#include <stdio.h>
+
+static const char *slang_shader_syn =
+#include "slang_shader_syn.h"
+;
+
+static int gc_to_bin (grammar id, const char *in, const char *out)
+{
+       FILE *f;
+       byte *source, *prod;
+       unsigned int size, i, line = 0;
+
+       printf ("Precompiling %s\n", in);
+
+       f = fopen (in, "r");
+       if (f == NULL)
+               return 1;
+       fseek (f, 0, SEEK_END);
+       size = ftell (f);
+       fseek (f, 0, SEEK_SET);
+       source = (byte *) grammar_alloc_malloc (size + 1);
+       source[fread (source, 1, size, f)] = '\0';
+       fclose (f);
+
+       if (!grammar_fast_check (id, source, &prod, &size, 65536))
+       {
+               grammar_alloc_free (source);
+               return 1;
+       }
+
+       f = fopen (out, "w");
+       fprintf (f, "\n");
+       fprintf (f, "/* DO NOT EDIT - THIS FILE IS AUTOMATICALLY GENERATED FROM THE FOLLOWING FILE: */\n");
+       fprintf (f, "/* %s */\n", in);
+       fprintf (f, "\n");
+       for (i = 0; i < size; i++)
+       {
+               unsigned int a;
+               if (prod[i] < 10)
+                       a = 1;
+               else if (prod[i] < 100)
+                       a = 2;
+               else
+                       a = 3;
+               if (i < size - 1)
+                       a++;
+               if (line + a >= 100)
+               {
+                       fprintf (f, "\n");
+                       line = 0;
+               }
+               line += a;
+               fprintf (f, "%d", prod[i]);
+               if (i < size - 1)
+                       fprintf (f, ",");
+       }
+       fprintf (f, "\n");
+       fclose (f);
+       grammar_alloc_free (prod);
+   return 0;
+}
+
+int main (int argc, char *argv[])
+{
+   grammar id;
+
+   id = grammar_load_from_text ((const byte *) slang_shader_syn);
+   if (id == 0) {
+      fprintf(stderr, "Error loading grammar from text\n");
+      return 1;
+   }
+   grammar_set_reg8 (id, (const byte *) "parsing_builtin", 1);
+   grammar_set_reg8 (id, (const byte *) "shader_type", atoi (argv[1]));
+   if (gc_to_bin (id, argv[2], argv[3])) {
+      fprintf(stderr, "Error in gc_to_bin %s %s\n", argv[2], argv[3]);
+      grammar_destroy (id);
+      return 1;
+   }
+   grammar_destroy (id);
+   return 0;
+}
+