diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/dynarray.h | 2 | ||||
-rw-r--r-- | include/ttycolor.h | 84 | ||||
-rw-r--r-- | include/utility.h | 17 |
3 files changed, 99 insertions, 4 deletions
diff --git a/include/dynarray.h b/include/dynarray.h index bdb9db9..79b548e 100644 --- a/include/dynarray.h +++ b/include/dynarray.h @@ -63,7 +63,7 @@ /// set capacity to minimum possible value #define array_shrink(array) array = _memshrink_array(array) /// bound-checks and returns a pointer to that element. on error returns NULL -#define array_at(array, idx) (idx < array_size(array) ? array[idx] : NULL) +#define array_at(array, idx) (idx < array_size(array) ? (typeof(array))((byte*)array + idx*array_size(array)) : NULL) /// sorts the array using compare_func for comparison #define array_qsort(array, compare_func) qsort(array, array_size(array), array_element_size(array), compare_func) /// sorts the array using pre-defined compariton functions for signed integers based on size (1, 2, 4, 8) diff --git a/include/ttycolor.h b/include/ttycolor.h new file mode 100644 index 0000000..d3f6f85 --- /dev/null +++ b/include/ttycolor.h @@ -0,0 +1,84 @@ +#ifndef JUSTANOTHERCATGIRL_HEADERS_TTYCOLOR +#define JUSTANOTHERCATGIRL_HEADERS_TTYCOLOR + +/// This header is a collection of macros and escape sequences for ANSII terminals. +/// It has common tempalte for abbreviation <Letter1><Letter2(optional)><3 letters>. +/// * First letter: C for Color (text color), B for Backdround (bg color), T for Text (text mode) +/// * Second letter: B for Bright, N for uNset (only in combination with T as 1st letter) +/// * 3 last letters can be checked in comments after each definition + +#include "utility.h" + + +#define PAINT_STRING(string, args...) ("\x1b[" arg1 ";" arg2 ";" ... "m" string ARES) + +#define ARES "\x1b[0m" // All RESet + +// resular text colors +#define CBLK "\x1b[30m" // black +#define CRED "\x1b[31m" // red +#define CGRN "\x1b[32m" // green +#define CYLW "\x1b[33m" // yellow +#define CBLU "\x1b[34m" // blue +#define CMAG "\x1b[35m" // magenta +#define CCYN "\x1b[36m" // cyan +#define CWHT "\x1b[37m" // white +#define CDEF "\x1b[39m" // default +#define CBLK "\x1b[30m" // black + +// regular background colors +#define BBLK "\x1b[40m" // black +#define BRED "\x1b[41m" // red +#define BGRN "\x1b[42m" // green +#define BYLW "\x1b[43m" // yellow +#define BBLU "\x1b[44m" // blue +#define BMAG "\x1b[45m" // magenta +#define BCYN "\x1b[46m" // cyan +#define BWHT "\x1b[47m" // white +#define BDEF "\x1b[49m" // default +#define BBLK "\x1b[40m" // black + + +// bright text colors +#define CBBLK "\x1b[90m" // bright black +#define CBRED "\x1b[91m" // bright red +#define CBGRN "\x1b[92m" // bright green +#define CBYLW "\x1b[93m" // bright yellow +#define CBBLU "\x1b[94m" // bright blue +#define CBMAG "\x1b[95m" // bright magenta +#define CBCYN "\x1b[96m" // bright cyan +#define CBWHT "\x1b[97m" // bright white + +// bright baclground colors +#define BBBLK "\x1b[100m" // bright black +#define BBRED "\x1b[101m" // bright red +#define BBGRN "\x1b[102m" // bright green +#define BBYLW "\x1b[103m" // bright yellow +#define BBBLU "\x1b[104m" // bright blue +#define BBMAG "\x1b[105m" // bright magenta +#define BBCYN "\x1b[106m" // bright cyan +#define BBWHT "\x1b[107m" // bright white + + +// text style set +#define TSBLD "\x1b[1m" // bold +#define TSDIM "\x1b[2m" // dim/faint +#define TSITL "\x1b[3m" // italic +#define TSUND "\x1b[4m" // underline +#define TSBNK "\x1b[5m" // blinking +#define TSINV "\x1b[7m" // inverse/reverse +#define TSHID "\x1b[8m" // hidden/invisible +#define TSSTR "\x1b[9m" // strikethrough + +// text style unset +#define TNBLD "\x1b[22m" // bold +#define TNDIM "\x1b[22m" // dim/faint +#define TNITL "\x1b[23m" // italic +#define TNUND "\x1b[24m" // underline +#define TNBNK "\x1b[25m" // blinking +#define TNINV "\x1b[27m" // inverse/reverse +#define TNHID "\x1b[28m" // hidden/invisible +#define TNSTR "\x1b[29m" // strikethrough + +#endif //JUSTANOTHERCATGIRL_HEADERS_TTYCOLOR + diff --git a/include/utility.h b/include/utility.h index 4f264f0..85948cf 100644 --- a/include/utility.h +++ b/include/utility.h @@ -4,6 +4,8 @@ #define stringify(val) _stringify_helper(val) #define _stringify_helper(val) #val +#define string_concat_separator(first, ...) stringify(first) ";" string_concat_separator(__VA_ARGS__) + #define struct_member_size(type, member) sizeof(( (type*)0 )->member) typedef unsigned char byte; #define upper_2_power_32(number) (32 - __builtin_clz(number)) @@ -11,7 +13,7 @@ typedef unsigned char byte; typedef int(*qsort_cmp_t)(const void*, const void*); #define get_qsort_cmp(type) __qsort_cmps[sizeof(type)] -extern const qsort_cmp_t __qsort_cmps[]; +extern const qsort_cmp_t __qsort_cmps[64]; #ifdef UTILITY_EXPOSE_HELPERS #define _UTILITY_STATIC @@ -58,17 +60,26 @@ _UTILITY_STATIC int __default_long_cmp(const void* a, const void* b) { return 0; } +#ifdef __GNUC__ // cope #pragma GCC diagnostic ignored "-Woverride-init" // Is is meant to override it on different platforms -const qsort_cmp_t __qsort_cmps[] = { +const qsort_cmp_t __qsort_cmps[64] = { [sizeof(char)] = __default_char_cmp, [sizeof(short)] = __default_short_cmp, [sizeof(int)] = __default_int_cmp, [sizeof(long)] = __default_long_cmp, [sizeof(long long)] = __default_long_long_cmp, - [64] = 0, + [63] = 0, }; #pragma GCC diagnostic warning "-Woverride-init" +#else // not __GNUC__ +const qsort_cmp_t __qsort_cmps[64] = { + 0, + __default_char_cmp, __default_short_cmp, 0, __default_int_cmp, + 0, 0, 0, __default_long_long_cmp, +}; +#endif // __GNUC__ + #endif // UTILITY_IMPLEMENTATION |