diff --git a/xyntax.c b/xyntax.c index 4aca4a3..c87614b 100644 --- a/xyntax.c +++ b/xyntax.c @@ -12,7 +12,6 @@ #include int syntax_count = 0; -int * syntax_mode = NULL; int * syntax_enrange = NULL; int * syntax_derange = NULL; char * * syntax_begin = NULL; @@ -33,40 +32,40 @@ static int compare_character_array (char character, char * character_array, int return (0); } -void syntax_define (int * index, int enrange, int derange, char * begin, char * end, char escape, int colour, int effect) { - syntax_mode = reallocate (syntax_mode, (unsigned long int) (syntax_count + 1) * sizeof (* syntax_mode)); - syntax_enrange = reallocate (syntax_enrange, (unsigned long int) (syntax_count + 1) * sizeof (* syntax_enrange)); - syntax_derange = reallocate (syntax_derange, (unsigned long int) (syntax_count + 1) * sizeof (* syntax_derange)); - syntax_begin = reallocate (syntax_begin, (unsigned long int) (syntax_count + 1) * sizeof (* syntax_begin)); - syntax_end = reallocate (syntax_end, (unsigned long int) (syntax_count + 1) * sizeof (* syntax_end)); - syntax_escape = reallocate (syntax_escape, (unsigned long int) (syntax_count + 1) * sizeof (* syntax_escape)); - syntax_colour = reallocate (syntax_colour, (unsigned long int) (syntax_count + 1) * sizeof (* syntax_colour)); - syntax_effect = reallocate (syntax_effect, (unsigned long int) (syntax_count + 1) * sizeof (* syntax_effect)); - - syntax_begin [syntax_count] = allocate ((string_length (begin) + 1) * (int) sizeof (* * syntax_begin)); - syntax_end [syntax_count] = allocate ((string_length (end) + 1) * (int) sizeof (* * syntax_end)); - - syntax_mode [syntax_count] = * index; - syntax_enrange [syntax_count] = enrange; - syntax_derange [syntax_count] = derange; - syntax_escape [syntax_count] = escape; - syntax_colour [syntax_count] = colour; - syntax_effect [syntax_count] = effect; - - string_copy (syntax_begin [syntax_count], begin); - string_copy (syntax_end [syntax_count], end); - - * index = syntax_count; +int syntax_define (int enrange, int derange, char * begin, char * end, char escape, int colour, int effect) { + fatal_failure (begin == NULL, "syntax_define: Begin string is null pointer."); + fatal_failure (end == NULL, "syntax_define: End string is null pointer."); ++syntax_count; + + syntax_enrange = reallocate (syntax_enrange, syntax_count * (int) sizeof (* syntax_enrange)); + syntax_derange = reallocate (syntax_derange, syntax_count * (int) sizeof (* syntax_derange)); + syntax_begin = reallocate (syntax_begin, syntax_count * (int) sizeof (* syntax_begin)); + syntax_end = reallocate (syntax_end, syntax_count * (int) sizeof (* syntax_end)); + syntax_escape = reallocate (syntax_escape, syntax_count * (int) sizeof (* syntax_escape)); + syntax_colour = reallocate (syntax_colour, syntax_count * (int) sizeof (* syntax_colour)); + syntax_effect = reallocate (syntax_effect, syntax_count * (int) sizeof (* syntax_effect)); + + syntax_begin [syntax_count - 1] = allocate ((string_length (begin) + 1) * (int) sizeof (* * syntax_begin)); + syntax_end [syntax_count - 1] = allocate ((string_length (end) + 1) * (int) sizeof (* * syntax_end)); + + syntax_enrange [syntax_count - 1] = enrange; + syntax_derange [syntax_count - 1] = derange; + syntax_escape [syntax_count - 1] = escape; + syntax_colour [syntax_count - 1] = colour; + syntax_effect [syntax_count - 1] = effect; + + string_copy (syntax_begin [syntax_count - 1], begin); + string_copy (syntax_end [syntax_count - 1], end); + + return (syntax_count - 1); } -void syntax_select (char * string, int * index, int * length) { +int syntax_select (char * string, int * length) { int offset = 0; int select = 0; fatal_failure (string == NULL, "syntax_select: String is null."); - fatal_failure (index == NULL, "syntax_select: Index is null."); fatal_failure (length == NULL, "syntax_select: Length is null."); do { @@ -92,12 +91,9 @@ void syntax_select (char * string, int * index, int * length) { selected: - if (select == syntax_count) { - * index = 0; /* Should we handle this undefined behavior? */ + if (select == syntax_count) { /* Undefined symbol. */ * length = 1; - return; - } else { - * index = select; + return (0); } do { @@ -111,7 +107,7 @@ void syntax_select (char * string, int * index, int * length) { if (syntax_derange [select] == 0) { if (string_compare_limit (& string [offset], syntax_end [select], string_length (syntax_end [select]))) { * length = offset + string_length (syntax_end [select]); - return; + return (select); } } else { int subset = 0; @@ -120,11 +116,13 @@ void syntax_select (char * string, int * index, int * length) { } do { if (string [offset] == syntax_end [select] [subset]) { * length = offset; - return; + return (select); } } while (++subset != (int) string_length (syntax_end [select])); } } while (string [offset - 1] != '\0'); + + return (select); } void syntax_delete (void) { @@ -135,7 +133,6 @@ void syntax_delete (void) { syntax_end [syntax_count] = deallocate (syntax_end [syntax_count]); } while (--syntax_count != -1); - syntax_mode = deallocate (syntax_mode); syntax_enrange = deallocate (syntax_enrange); syntax_derange = deallocate (syntax_derange); syntax_begin = deallocate (syntax_begin); diff --git a/xyntax.h b/xyntax.h index 784b1c7..c34af3d 100644 --- a/xyntax.h +++ b/xyntax.h @@ -13,7 +13,6 @@ #include extern int syntax_count; -extern int * syntax_mode; extern int * syntax_enrange; extern int * syntax_derange; extern char * * syntax_begin; @@ -22,9 +21,8 @@ extern char * syntax_escape; extern int * syntax_colour; extern int * syntax_effect; -extern void syntax_define (int *, int, int, char *, char *, char, int, int); - -extern void syntax_select (char *, int *, int *); +extern int syntax_define (int, int, char *, char *, char, int, int); +extern int syntax_select (char *, int *); extern void syntax_delete (void);