diff options
author | Michal Krol <mjkrol@gmail.org> | 2004-03-03 18:10:40 +0000 |
---|---|---|
committer | Michal Krol <mjkrol@gmail.org> | 2004-03-03 18:10:40 +0000 |
commit | 0e7b1d88118621c34f6a7b64abf3ff4b2ff20679 (patch) | |
tree | b5f28d142f46178c30b46f1d1e0e9822306eef55 /src/mesa/shader/grammar.h | |
parent | e05d4fbf0f9382933ee7b817930f4377ad87b742 (diff) |
Grammar package supporting 8-bit registers.
TODO:
- add checking for duplicate symbols (or is it done already?)
- move all the statics (grammar objects list and last error message)
to the GL context state; I think simple pointer initialized in a
first call to ProgramString() is sufficent.
- apply an optimized version of match() - this will be needed for
glslang compiler.
Diffstat (limited to 'src/mesa/shader/grammar.h')
-rw-r--r-- | src/mesa/shader/grammar.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/mesa/shader/grammar.h b/src/mesa/shader/grammar.h new file mode 100644 index 0000000000..152ebc1086 --- /dev/null +++ b/src/mesa/shader/grammar.h @@ -0,0 +1,68 @@ +#ifndef GRAMMAR_H
+#define GRAMMAR_H
+
+
+#ifndef GRAMMAR_PORT_INCLUDE
+#error Do not include this file directly, include your grammar_XXX.h instead
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grammar_alloc_free (void *);
+void *grammar_alloc_malloc (unsigned int);
+void *grammar_alloc_realloc (void *, unsigned int, unsigned int);
+void *grammar_memory_copy (void *, const void *, unsigned int);
+int grammar_string_compare (const byte *, const byte *);
+int grammar_string_compare_n (const byte *, const byte *, unsigned int);
+byte *grammar_string_copy (byte *, const byte *);
+byte *grammar_string_copy_n (byte *, const byte *, unsigned int);
+byte *grammar_string_duplicate (const byte *);
+unsigned int grammar_string_length (const byte *);
+
+/*
+ loads grammar script from null-terminated ASCII <text>
+ returns unique grammar id to grammar object
+ returns 0 if an error occurs (call grammar_get_last_error to retrieve the error text)
+*/
+grammar grammar_load_from_text (const byte *text);
+
+/*
+ sets a new <value> to a register <name> for grammar <id>
+ returns 0 on error (call grammar_get_last_error to retrieve the error text)
+ returns 1 on success
+*/
+int grammar_set_reg8 (grammar id, const byte *name, byte value);
+
+/*
+ checks if a null-terminated <text> matches given grammar <id>
+ returns 0 on error (call grammar_get_last_error to retrieve the error text)
+ returns 1 on success, the <prod> points to newly allocated buffer with production and <size>
+ is filled with the production size
+ call grammar_alloc_free to free the memory block pointed by <prod>
+*/
+int grammar_check (grammar id, const byte *text, byte **prod, unsigned int *size);
+
+/*
+ destroys grammar object identified by <id>
+ returns 0 on error (call grammar_get_last_error to retrieve the error text)
+ returns 1 on success
+*/
+int grammar_destroy (grammar id);
+
+/*
+ retrieves last grammar error reported either by grammar_load_from_text, grammar_check
+ or grammar_destroy
+ the user allocated <text> buffer receives error description, <pos> points to error position,
+ <size> is the size of the text buffer to fill in - it must be at least 4 bytes long,
+*/
+void grammar_get_last_error (byte *text, unsigned int size, int *pos);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
|