diff --git a/xtandard.c b/xtandard.c index ba8b6fe..ebe2818 100644 --- a/xtandard.c +++ b/xtandard.c @@ -9,17 +9,20 @@ #ifndef XTANDARD_SOURCE #define XTANDARD_SOURCE -#include "xtandard.h" +#include char * program_name = NULL; char * program_mode = NULL; char * program_license = NULL; -int argument_count = 0; -char * * argument_nick = NULL; -char * * argument_name = NULL; -char * argument_input = NULL; -char * argument_output = NULL; +char * log_notify = NULL; + +int argument_count = 0; +char * * argument_nick = NULL; +char * * argument_name = NULL; +char * argument_input = NULL; +char * argument_output = NULL; + void (* * argument_function) (void) = NULL; int file_list_active = 0; @@ -43,7 +46,42 @@ void out (void * data, int size) { (void) write (STDOUT_FILENO, data, (unsigned long int) size); } +void log_in (int type, int flag, char * data) { + char * type_mark [LOG_COUNT] = { + "[\033[0;32mSuccess\033[0m] ", + "[\033[0;33mWarning\033[0m] ", + "[\033[0;31mFailure\033[0m] ", + "[\033[0;34mComment\033[0m] " + }; + + if ((flag == 0) || (type <= -1) || (type >= LOG_COUNT)) { + return; + } + + if (log_notify == NULL) { + log_notify = allocate (string_length (type_mark [type]) + string_length (data) + 2); + } else { + log_notify = reallocate (log_notify, string_length (log_notify) + string_length (type_mark [type]) + string_length (data) + 2); + + log_notify [string_length (log_notify)] = '\0'; + } + + string_concatenate (log_notify, type_mark [type]); + string_concatenate (log_notify, data); + string_concatenate (log_notify, "\n"); +} + +void log_out (void) { + echo (log_notify); + + log_notify = deallocate (log_notify); +} + void echo (char * data) { + if (data == NULL) { + return; + } + out (data, string_length (data)); } @@ -59,7 +97,7 @@ void echo_byte (int byte) { void fatal_failure (int condition, char * message) { if (condition != 0) { - echo ("\033[1;31m[!]\033[0m "); + echo ("\033[1;31m[FATAL_FAILURE]\033[0m "); echo (message); echo ("\n"); @@ -80,7 +118,9 @@ void limit (int * value, int minimum, int maximum) { void * allocate (int size) { char * data = NULL; - fatal_failure (size == 0, "allocate: Failed to allocate memory, size is zero."); + if (size <= 0) { + return (NULL); + } data = calloc ((unsigned long int) size, sizeof (* data)); @@ -90,7 +130,9 @@ void * allocate (int size) { } void * reallocate (void * data, int size) { - fatal_failure (size == 0, "reallocate: Failed to reallocate memory, size is zero."); + if (size <= 0) { + return (data); + } data = realloc (data, (unsigned long int) size); @@ -102,9 +144,9 @@ void * reallocate (void * data, int size) { } void * deallocate (void * data) { - fatal_failure (data == NULL, "deallocate: Failed to deallocate memory, data is null pointer."); - - free (data); + if (data != NULL) { + free (data); + } return (NULL); } @@ -467,7 +509,9 @@ int character_compare_array (char character, char * character_array, int count) int string_length (char * string) { int length = 0; - fatal_failure (string == NULL, "string_length: String is null pointer."); + if (string == NULL) { + return (0); + } for (length = 0; string [length] != '\0'; ++length); @@ -490,8 +534,9 @@ void string_reverse (char * string) { void string_delete (char * string, int length) { int i; - fatal_failure (string == NULL, "string_delete: String is null pointer."); - fatal_failure (length == 0, "string_delete: String length is zero."); + if ((string == NULL) || (length <= 0)) { + return; + } for (i = 0; i != length; ++i) { string [i] = '\0'; @@ -514,33 +559,29 @@ int string_compare (char * string_0, char * string_1) { } void string_copy (char * string_0, char * string_1) { - int i = 0; - int length = 0; + int i = 0; fatal_failure (string_0 == NULL, "string_copy: Destination string is null pointer."); fatal_failure (string_1 == NULL, "string_copy: Source string is null pointer."); - length = string_length (string_1); - - for (i = 0; i != length; ++i) { + for (i = 0; i != string_length (string_1) + 1; ++i) { string_0 [i] = string_1 [i]; } } void string_concatenate (char * string_0, char * string_1) { - int i = 0; - int length_0 = 0; - int length_1 = 0; - fatal_failure (string_0 == NULL, "string_concatenate: Destination string is null pointer."); fatal_failure (string_1 == NULL, "string_concatenate: Source string is null pointer."); - length_0 = string_length (string_0); - length_1 = string_length (string_1); + string_0 += string_length (string_0); - for (i = 0; i != length_1; ++i) { - string_0 [length_0 + i] = string_1 [i]; + while (* string_1 != '\0') { + * string_0++ = * string_1++; + /*++string_0; + ++string_1;*/ } + + * string_0 = '\0'; } int string_compare_limit (char * string_0, char * string_1, int limit) { @@ -635,7 +676,7 @@ int memory_compare (void * memory, void * source, int length) { fatal_failure (source == NULL, "memory_compare: Source is null pointer."); if (length <= 0) { - return; + return (-1); } for (i = 0; (cast_0 [i] != '\0') && (cast_1 [i] != '\0'); ++i) { @@ -702,7 +743,12 @@ int encode_byte (char * byte) { } char * decode_byte (int byte) { - static char * decode = " "; + char * decode = " "; + + fatal_failure ((byte <= -1) || (byte >= 256), "decode_byte: Byte is out of range."); + + decode [0] = byte / 16; + decode [1] = byte % 16; return (decode); } diff --git a/xtandard.h b/xtandard.h index c54b94d..f1e9082 100644 --- a/xtandard.h +++ b/xtandard.h @@ -14,54 +14,39 @@ #include enum { - EFFECT_NORMAL, - EFFECT_BOLD, - EFFECT_DARK, - EFFECT_ITALIC, - EFFECT_UNDERLINE, - EFFECT_BLINK, - EFFECT_UNDEFINED, - EFFECT_REVERSE, + LOG_SUCCESS, LOG_WARNING, LOG_FAILURE, LOG_COMMENT, + LOG_COUNT +}; + +enum { + FILE_TYPE_TEXT, FILE_TYPE_COMMON_ASSEMBLY, FILE_TYPE_FLAT_ASSEMBLY, FILE_TYPE_GNU_ASSEMBLY, + FILE_TYPE_NETWIDE_ASSEMBLY, FILE_TYPE_YET_ANOTHER_ASSEMBLY, FILE_TYPE_C_SOURCE, FILE_TYPE_C_HEADER, + FILE_TYPE_ADA_BODY, FILE_TYPE_ADA_SPECIFICATION, FILE_TYPE_CPP_SOURCE, FILE_TYPE_CPP_HEADER, + FILE_TYPE_COUNT +}; + +enum { + EFFECT_NORMAL, EFFECT_BOLD, EFFECT_DARK, EFFECT_ITALIC, EFFECT_UNDERLINE, EFFECT_BLINK, EFFECT_UNDEFINED, EFFECT_REVERSE, EFFECT_COUNT }; enum { - COLOUR_GREY, - COLOUR_RED, - COLOUR_GREEN, - COLOUR_YELLOW, - COLOUR_BLUE, - COLOUR_PINK, - COLOUR_CYAN, - COLOUR_WHITE, + COLOUR_GREY, COLOUR_RED, COLOUR_GREEN, COLOUR_YELLOW, COLOUR_BLUE, COLOUR_PINK, COLOUR_CYAN, COLOUR_WHITE, COLOUR_COUNT }; -enum { - FILE_TYPE_TEXT, - FILE_TYPE_COMMON_ASSEMBLY, - FILE_TYPE_FLAT_ASSEMBLY, - FILE_TYPE_GNU_ASSEMBLY, - FILE_TYPE_NETWIDE_ASSEMBLY, - FILE_TYPE_YET_ANOTHER_ASSEMBLY, - FILE_TYPE_C_SOURCE, - FILE_TYPE_C_HEADER, - FILE_TYPE_ADA_BODY, - FILE_TYPE_ADA_SPECIFICATION, - FILE_TYPE_CPP_SOURCE, - FILE_TYPE_CPP_HEADER, - FILE_TYPE_COUNT -}; - extern char * program_name; extern char * program_mode; extern char * program_license; -extern int argument_count; -extern char * * argument_nick; -extern char * * argument_name; -extern char * argument_input; -extern char * argument_output; +extern char * log_notify; + +extern int argument_count; +extern char * * argument_nick; +extern char * * argument_name; +extern char * argument_input; +extern char * argument_output; + extern void (* * argument_function) (void); extern int file_list_active; @@ -74,6 +59,9 @@ extern char * * file_list_data; extern void in (void *, int); extern void out (void *, int); +extern void log_in (int, int, char *); +extern void log_out (void); + extern void echo (char *); extern void echo_new_line (void); extern void echo_byte (int);