-#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;
+}
+