diff options
author | marha <marha@users.sourceforge.net> | 2009-10-08 13:15:52 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2009-10-08 13:15:52 +0000 |
commit | a0c4815433ccd57322f4f7703ca35e9ccfa59250 (patch) | |
tree | f5213802ec12adb86ec3136001c1c29fe5343700 /mesalib/src/mesa/shader/slang/library/gc_to_bin.c | |
parent | c73dc01b6de45612b24dc2dd34fba24d81ebf46c (diff) | |
download | vcxsrv-a0c4815433ccd57322f4f7703ca35e9ccfa59250.tar.gz vcxsrv-a0c4815433ccd57322f4f7703ca35e9ccfa59250.tar.bz2 vcxsrv-a0c4815433ccd57322f4f7703ca35e9ccfa59250.zip |
Added MesaLib-7.6
Diffstat (limited to 'mesalib/src/mesa/shader/slang/library/gc_to_bin.c')
-rw-r--r-- | mesalib/src/mesa/shader/slang/library/gc_to_bin.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/mesalib/src/mesa/shader/slang/library/gc_to_bin.c b/mesalib/src/mesa/shader/slang/library/gc_to_bin.c new file mode 100644 index 000000000..8aef7b541 --- /dev/null +++ b/mesalib/src/mesa/shader/slang/library/gc_to_bin.c @@ -0,0 +1,85 @@ +#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; +} + |