diff --git a/src/base/type_system/base_toString.c b/src/base/type_system/base_toString.c index fc3ccf0..2d62307 100644 --- a/src/base/type_system/base_toString.c +++ b/src/base/type_system/base_toString.c @@ -4,14 +4,14 @@ char* __toString_char(void* c, uint32 fmt) { //*c=char - if(kprint_format_dataFormat(fmt)==kprint_fmtChar){ + if(kp_fmt_dataFormat(fmt)==kp_c){ char* cc=malloc(2); cc[0]=*(char*)c; cc[1]=0; return cc; } // *c=cstring - else if(kprint_format_dataFormat(fmt)==kprint_fmtString){ + else if(kp_fmt_dataFormat(fmt)==kp_s){ return cptr_copy(*(char**)c); } else throw(ERR_FORMAT); @@ -19,7 +19,7 @@ char* __toString_char(void* c, uint32 fmt) { char* __toString_bool(void* c, uint32 fmt) { static const char _strbool[4][6]={ "false", "true\0", "False", "True\0" }; - uint8 strind=*(bool*)c==1 + kprint_format_isUppercase(fmt)*2; + uint8 strind=*(bool*)c==1 + kp_fmt_isUpper(fmt)*2; char* rez=malloc(6); rez[0]=_strbool[strind][0]; rez[1]=_strbool[strind][1]; @@ -134,16 +134,16 @@ char* toString_hex(void* _bytes, uint32 size, bool withPrefix, bool uppercase){ #define __toString_int_def(BITS) char* __toString_int##BITS(void* _n, uint32 f){\ - switch(kprint_format_dataFormat(f)){\ - case kprint_fmtInt: ;\ + switch(kp_fmt_dataFormat(f)){\ + case kp_i: ;\ int##BITS n=*(int##BITS*)_n;\ return toString_int(n);\ - case kprint_fmtBin:\ - return toString_bin(_n, BITS/8, kprint_format_isWithPrefix(f));\ - case kprint_fmtHex:\ - return toString_hex(_n, BITS/8, kprint_format_isWithPrefix(f), kprint_format_isUppercase(f));\ + case kp_b:\ + return toString_bin(_n, BITS/8, kp_fmt_withPrefix(f));\ + case kp_h:\ + return toString_hex(_n, BITS/8, kp_fmt_withPrefix(f), kp_fmt_isUpper(f));\ default:\ - kprintf("\n%u\n", kprint_format_dataFormat(f));\ + kprintf("\n%u\n", kp_fmt_dataFormat(f));\ throw(ERR_FORMAT);\ return NULL;\ }\ @@ -154,16 +154,16 @@ __toString_int_def(32) __toString_int_def(64) #define __toString_uint_def(BITS) char* __toString_uint##BITS(void* _n, uint32 f){\ - switch(kprint_format_dataFormat(f)){\ - case kprint_fmtUInt: ;\ + switch(kp_fmt_dataFormat(f)){\ + case kp_u: ;\ uint##BITS n=*(uint##BITS*)_n;\ - return toString_uint(n, kprint_format_isWithPostfix(f), kprint_format_isUppercase(f));\ - case kprint_fmtBin:\ - return toString_bin(_n, BITS/8, kprint_format_isWithPrefix(f));\ - case kprint_fmtHex:\ - return toString_hex(_n, BITS/8, kprint_format_isWithPrefix(f), kprint_format_isUppercase(f));\ + return toString_uint(n, kp_fmt_withPostfix(f), kp_fmt_isUpper(f));\ + case kp_b:\ + return toString_bin(_n, BITS/8, kp_fmt_withPrefix(f));\ + case kp_h:\ + return toString_hex(_n, BITS/8, kp_fmt_withPrefix(f), kp_fmt_isUpper(f));\ default:\ - kprintf("\n%u\n", kprint_format_dataFormat(f));\ + kprintf("\n%u\n", kp_fmt_dataFormat(f));\ throw(ERR_FORMAT);\ return NULL;\ }\ @@ -174,16 +174,16 @@ __toString_uint_def(32) __toString_uint_def(64) #define __toString_float_def(BITS) char* __toString_float##BITS(void* _n, uint32 f){\ - switch(kprint_format_dataFormat(f)){\ - case kprint_fmtFloat: ;\ + switch(kp_fmt_dataFormat(f)){\ + case kp_f: ;\ float##BITS n=*(float##BITS*)_n;\ - return toString_float(n, kprint_format_isWithPostfix(f), kprint_format_isUppercase(f));\ - case kprint_fmtBin:\ - return toString_bin(_n, BITS/8, kprint_format_isWithPrefix(f));\ - case kprint_fmtHex:\ - return toString_hex(_n, BITS/8, kprint_format_isWithPrefix(f), kprint_format_isUppercase(f));\ + return toString_float(n, kp_fmt_withPostfix(f), kp_fmt_isUpper(f));\ + case kp_b:\ + return toString_bin(_n, BITS/8, kp_fmt_withPrefix(f));\ + case kp_h:\ + return toString_hex(_n, BITS/8, kp_fmt_withPrefix(f), kp_fmt_isUpper(f));\ default:\ - kprintf("\n%u\n", kprint_format_dataFormat(f));\ + kprintf("\n%u\n", kp_fmt_dataFormat(f));\ throw(ERR_FORMAT);\ return NULL;\ }\ diff --git a/src/kprint/README.md b/src/kprint/README.md index 96375a2..cb78373 100644 --- a/src/kprint/README.md +++ b/src/kprint/README.md @@ -11,7 +11,7 @@ Unlike in standard printf, `%l...` and `%ll...` placeholders dont depend on size | float32 / float64 | %f | | char | %c | | char[] | %s | -| void* | %p / %x | +| void\* | %p / %x |
@@ -20,31 +20,31 @@ I don't really like printf function (and its variants), so i made safer and more | function | returns | arguments | |----------|---------|-----------| -| kprint | void/throw | kprint_format, void*, kprint_format, void*... | -| ksprint | Maybe | kprint_format, void*, kprint_format, void*... | -| kfprint | Maybe | FILE*, kprint_format, void*, kprint_format, void*... | +| kprint | void/throw | kp_fmt, void\*, kp_fmt, void\*... | +| ksprint | Maybe| kp_fmt, void\*, kp_fmt, void\*... | +| kfprint | Maybe | FILE\*, kp_fmt, void\*, kp_fmt, void\*... | ## how to use it: + **format construction:** ``` - kprint_format fmt= kprint_fgColor | kprint_bgColor | kprint_fdataFmt | flags | ktid; + kp_fmt fmt= kp_fgColor | kp_bgColor | kprint_fdataFmt | flags | ktid; ``` - [more about `kprint_format`](kprint_format.md) + [more about `kp_fmt`](kp_fmt.md) + fgColor and bgColor can be set to change console output color - + you should set dataFormat for `int`/`uint`/`float`/`char*` arguments and ktid for other types + + you should set dataFormat for `int`/`uint`/`float`/`char\*` arguments and ktid for other types + flags can be set to modify TypeDescriptor.toString() behavior + don't forget to set TypeDescriptor.toString when registering type, or kprint will crash + **using base type arguments:** you can just put them into a function ``` - kprint(kprint_fmtHex | kprint_fmtUppercase | kprint_fmtWithPrefix, 255); + kprint(kp_h|kp_upper|kp_prefix, 255); ``` output: 0xFF + **using other registered types:** should be sent as pointers ``` Maybe m=MaybeNull; - kprint(kprint_fgBlue | kprint_fmtString, "Maybe: ", kprint_fgGreen | ktid_MaybePtr, &m); + kprint(kp_fgBlue|kp_s, "Maybe: ", kp_fgGreen|ktid_MaybePtr, &m); ``` output: Maybe: {value={0, ktid_Null}} diff --git a/src/kprint/kprint.c b/src/kprint/kprint.c index 16307bb..091fe8a 100644 --- a/src/kprint/kprint.c +++ b/src/kprint/kprint.c @@ -1,29 +1,29 @@ #include "../String/StringBuilder.h" #include "kprint.h" -ktid __typeFromFormat(kprint_format f){ - ktid typeId=kprint_format_ktid(f); +ktid __typeFromFormat(kp_fmt f){ + ktid typeId=kp_fmt_ktid(f); if(typeId) return typeId; - switch(kprint_format_dataFormat(f)){ - case kprint_fmtInt: - case kprint_fmtHex: - case kprint_fmtBin: + switch(kp_fmt_dataFormat(f)){ + case kp_i: + case kp_h: + case kp_b: return ktid_name(int64); - case kprint_fmtUInt: + case kp_u: return ktid_name(uint64); - case kprint_fmtFloat: + case kp_f: return ktid_name(float64); - case kprint_fmtChar: + case kp_c: return ktid_char; - case kprint_fmtString: + case kp_s: return ktid_ptrName(char); default: return -1; } } -Maybe __next_toString(kprint_format f, __kprint_value_union* object){ +Maybe __next_toString(kp_fmt f, __kp_value_union* object){ // detecting type ktid typeId=__typeFromFormat(f); if(typeId==-1) @@ -34,7 +34,7 @@ Maybe __next_toString(kprint_format f, __kprint_value_union* object){ return SUCCESS(UniHeapPtr(char, typeDesc.toString(object, f))); } -Maybe __ksprint(uint8 n, kprint_format* formats, __kprint_value_union* objects){ +Maybe __ksprint(uint8 n, kp_fmt* formats, __kp_value_union* objects){ n/=2; StringBuilder* strb=StringBuilder_create(); for(uint8 i=0; i #define FOREGROUND_YELLOW FOREGROUND_GREEN | FOREGROUND_RED -DWORD kprint_fgColor_toWin(kprint_fgColor f){ +DWORD kp_fgColor_toWin(kp_fgColor f){ //kprintf("fg: %x\n", f); switch(f){ - case kprint_fgBlack: return 0; - case kprint_fgDarkRed: return FOREGROUND_RED; - case kprint_fgDarkGreen: return FOREGROUND_GREEN; - case kprint_fgDarkYellow: return FOREGROUND_GREEN | FOREGROUND_RED; - case kprint_fgDarkBlue: return FOREGROUND_BLUE; - case kprint_fgDarkMagenta: return FOREGROUND_RED | FOREGROUND_BLUE; - case kprint_fgDarkCyan: return FOREGROUND_BLUE | FOREGROUND_GREEN; - case kprint_fgGray: return FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED; - case kprint_fgDarkGray: return FOREGROUND_INTENSITY; - case kprint_fgRed: return FOREGROUND_RED | FOREGROUND_INTENSITY; - case kprint_fgGreen: return FOREGROUND_GREEN | FOREGROUND_INTENSITY; - case kprint_fgYellow: return FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY; - case kprint_fgBlue: return FOREGROUND_BLUE | FOREGROUND_INTENSITY; - case kprint_fgMagenta: return FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY; - case kprint_fgCyan: return FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY; - case kprint_fgWhite: return FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY; + case kp_fgBlack: return 0; + case kp_fgRedD: return FOREGROUND_RED; + case kp_fgGreenD: return FOREGROUND_GREEN; + case kp_fgYellowD: return FOREGROUND_GREEN | FOREGROUND_RED; + case kp_fgBlueD: return FOREGROUND_BLUE; + case kp_fgMagentaD: return FOREGROUND_RED | FOREGROUND_BLUE; + case kp_fgCyanD: return FOREGROUND_BLUE | FOREGROUND_GREEN; + case kp_fgGray: return FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED; + case kp_fgGrayD: return FOREGROUND_INTENSITY; + case kp_fgRed: return FOREGROUND_RED | FOREGROUND_INTENSITY; + case kp_fgGreen: return FOREGROUND_GREEN | FOREGROUND_INTENSITY; + case kp_fgYellow: return FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY; + case kp_fgBlue: return FOREGROUND_BLUE | FOREGROUND_INTENSITY; + case kp_fgMagenta: return FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY; + case kp_fgCyan: return FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY; + case kp_fgWhite: return FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY; default: throw(ERR_FORMAT); } } -DWORD kprint_bgColor_toWin(kprint_bgColor f){ +DWORD kp_bgColor_toWin(kp_bgColor f){ //kprintf("bg: %x\n", f); switch(f){ - case kprint_bgBlack: return 0; - case kprint_bgDarkRed: return BACKGROUND_RED; - case kprint_bgDarkGreen: return BACKGROUND_GREEN; - case kprint_bgDarkYellow: return BACKGROUND_GREEN | BACKGROUND_RED; - case kprint_bgDarkBlue: return BACKGROUND_BLUE; - case kprint_bgDarkMagenta: return BACKGROUND_RED | BACKGROUND_BLUE; - case kprint_bgDarkCyan: return BACKGROUND_BLUE | BACKGROUND_GREEN; - case kprint_bgGray: return BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED; - case kprint_bgDarkGray: return BACKGROUND_INTENSITY; - case kprint_bgRed: return BACKGROUND_RED | BACKGROUND_INTENSITY; - case kprint_bgGreen: return BACKGROUND_GREEN | BACKGROUND_INTENSITY; - case kprint_bgYellow: return BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY; - case kprint_bgBlue: return BACKGROUND_BLUE | BACKGROUND_INTENSITY; - case kprint_bgMagenta: return BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY; - case kprint_bgCyan: return BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY; - case kprint_bgWhite: return BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY; + case kp_bgBlack: return 0; + case kp_bgRedD: return BACKGROUND_RED; + case kp_bgGreenD: return BACKGROUND_GREEN; + case kp_bgYellowD: return BACKGROUND_GREEN | BACKGROUND_RED; + case kp_bgBlueD: return BACKGROUND_BLUE; + case kp_bgMagentaD: return BACKGROUND_RED | BACKGROUND_BLUE; + case kp_bgCyanD: return BACKGROUND_BLUE | BACKGROUND_GREEN; + case kp_bgGray: return BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED; + case kp_bgGrayD: return BACKGROUND_INTENSITY; + case kp_bgRed: return BACKGROUND_RED | BACKGROUND_INTENSITY; + case kp_bgGreen: return BACKGROUND_GREEN | BACKGROUND_INTENSITY; + case kp_bgYellow: return BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY; + case kp_bgBlue: return BACKGROUND_BLUE | BACKGROUND_INTENSITY; + case kp_bgMagenta: return BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY; + case kp_bgCyan: return BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY; + case kp_bgWhite: return BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY; default: throw(ERR_FORMAT); } } -void kprint_setColor(kprint_format f){ +void kprint_setColor(kp_fmt f){ DWORD color=0; - if(!kprint_format_isFgColorChanged(f) & !kprint_format_isBgColorChanged(f)) + if(!kp_fmt_fgColorSet(f) & !kp_fmt_bgColorSet(f)) return; - if(kprint_format_isFgColorChanged(f)) - color+=kprint_fgColor_toWin(kprint_format_fgColor(f)); - if(kprint_format_isBgColorChanged(f)) - color+=kprint_bgColor_toWin(kprint_format_bgColor(f)); + if(kp_fmt_fgColorSet(f)) + color+=kp_fgColor_toWin(kp_fmt_fgColor(f)); + if(kp_fmt_bgColorSet(f)) + color+=kp_bgColor_toWin(kp_fmt_bgColor(f)); HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, color); } #else -void kprint_setColor(kprint_format f){ - if(kprint_format_isFgColorChanged(f)){ +void kprint_setColor(kp_fmt f){ + if(kp_fmt_fgColorSet(f)){ uint8 fg=(f&0x0f000000)>>24; if(fg<8) fg+=30; else fg+=90-8; printf("\e[%um", fg); } - if(kprint_format_isBgColorChanged(f)){ + if(kp_fmt_bgColorSet(f)){ uint8 bg=(f&0x00f00000)>>20; if(bg<8) bg+=40; else bg+=100-8; @@ -150,7 +150,7 @@ void kprint_setColor(kprint_format f){ } #endif -/* Maybe ksprint_ar(uint32 count, kprint_format format, ktid typeId, void* array){ +/* Maybe ksprint_ar(uint32 count, kp_fmt format, ktid typeId, void* array){ ktDescriptor typeDesc=ktDescriptor_get(format.typeId); if(!typeDesc.toString) safethrow("type descriptor doesnt have toString() func",;); diff --git a/src/kprint/kprint.h b/src/kprint/kprint.h index 3971cf2..ab93761 100644 --- a/src/kprint/kprint.h +++ b/src/kprint/kprint.h @@ -8,76 +8,91 @@ extern "C" { #include "kprint_colors.h" #include "kprint_format.h" +/* + +This file looks like a mess, but all cotnent here just solves the problem of putting variadic arguments to array of formats and array of objects. + +*/ + typedef union { int64 i64; uint64 u64; float64 f64; void* ptr; -} __kprint_value_union; -#define __kprintVU(value) (__kprint_value_union){ value } +} __kp_value_union; +#define __kpVU(value) (__kp_value_union){ value } -#define __kprint_argsToFormats8(\ +#define __kp_argsToFmts8(\ a0, a1, a2, a3, a4, a5, a6, a7,...)\ ((int32[]){ a0,a2,a4,a6 }) -#define __kprint_argsToObjects8(\ +#define __kp_argsToObjs8(\ a0, a1, a2, a3, a4, a5, a6, a7,...)\ - ((__kprint_value_union[]){ __kprintVU(a1),__kprintVU(a3),__kprintVU(a5),__kprintVU(a7) }) + ((__kp_value_union[]){ __kpVU(a1),__kpVU(a3),__kpVU(a5),__kpVU(a7) }) -#define __kprint_argsToFormats16(\ +#define __kp_argsToFmts16(\ a0, a1, a2, a3, a4, a5, a6, a7,\ a8, a9, a10,a11,a12,a13,a14,a15,...)\ ((int32[]){ a0,a2,a4,a6,a8,a10,a12,a14 }) -#define __kprint_argsToObjects16(\ +#define __kp_argsToObjs16(\ a0, a1, a2, a3, a4, a5, a6, a7,\ a8, a9, a10,a11,a12,a13,a14,a15,...)\ - ((__kprint_value_union[]){ __kprintVU(a1),__kprintVU(a3),__kprintVU(a5),__kprintVU(a7),__kprintVU(a9),__kprintVU(a11),__kprintVU(a13),__kprintVU(a15) }) + ((__kp_value_union[]){ __kpVU(a1),__kpVU(a3),__kpVU(a5),__kpVU(a7),__kpVU(a9),__kpVU(a11),__kpVU(a13),__kpVU(a15) }) -#define __kprint_argsToFormats32(\ +#define __kp_argsToFmts32(\ a0, a1, a2, a3, a4, a5, a6, a7,\ a8, a9, a10,a11,a12,a13,a14,a15,\ a16,a17,a18,a19,a20,a21,a22,a23,\ a24,a25,a26,a27,a28,a29,a30,a31,...)\ ((int32[]){ a0,a2,a4,a6,a8,a10,a12,a14,a16,a18,a20,a22,a24,a26,a28,a30 }) -#define __kprint_argsToObjects32(\ +#define __kp_argsToObjs32(\ a0, a1, a2, a3, a4, a5, a6, a7,\ a8, a9, a10,a11,a12,a13,a14,a15,\ a16,a17,a18,a19,a20,a21,a22,a23,\ a24,a25,a26,a27,a28,a29,a30,a31,...)\ - ((__kprint_value_union[]){ __kprintVU(a1),__kprintVU(a3),__kprintVU(a5),__kprintVU(a7),__kprintVU(a9),__kprintVU(a11),__kprintVU(a13),__kprintVU(a15),__kprintVU(a17),__kprintVU(a19),__kprintVU(a21),__kprintVU(a23),__kprintVU(a25),__kprintVU(a27),__kprintVU(a29),__kprintVU(a31) }) + ((__kp_value_union[]){ __kpVU(a1),__kpVU(a3),__kpVU(a5),__kpVU(a7),__kpVU(a9),__kpVU(a11),__kpVU(a13),__kpVU(a15),__kpVU(a17),__kpVU(a19),__kpVU(a21),__kpVU(a23),__kpVU(a25),__kpVU(a27),__kpVU(a29),__kpVU(a31) }) #define __32zeroes 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -#define __kprint_argsToArrs(COUNT,ARGS...)\ - (kprint_format*)(COUNT<=8 ? __kprint_argsToFormats8(ARGS) :\ - COUNT<=16 ? __kprint_argsToFormats16(ARGS) :\ - __kprint_argsToFormats32(ARGS)),\ - (__kprint_value_union*)(COUNT<=8 ? __kprint_argsToObjects8(ARGS) :\ - COUNT<=16 ? __kprint_argsToObjects16(ARGS) :\ - __kprint_argsToObjects32(ARGS)) +#define __kp_argsToArrs(COUNT,ARGS...)\ + (kp_fmt*)(\ + COUNT<=8 ? __kp_argsToFmts8(ARGS) :\ + COUNT<=16 ? __kp_argsToFmts16(ARGS) :\ + __kp_argsToFmts32(ARGS)),\ + (__kp_value_union*)(\ + COUNT<=8 ? __kp_argsToObjs8(ARGS) :\ + COUNT<=16 ? __kp_argsToObjs16(ARGS) :\ + __kp_argsToObjs32(ARGS)) -Maybe __ksprint(uint8 n, kprint_format* formats, __kprint_value_union* objects); +Maybe __ksprint(uint8 n, kp_fmt* formats, __kp_value_union* objects); + +/// @param ARGS kp_fmt, value, kp_fmt, value... +///@returns Maybe #define ksprint(ARGS...) WARNING_DISABLE( W_INT_CONVERSION,\ - __ksprint(count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS, __32zeroes))\ + __ksprint(count_args(ARGS), __kp_argsToArrs(count_args(ARGS),ARGS, __32zeroes))\ ) +/*-Wint-conversion warning was produced during value to __kp_value_union conversion*/ -Maybe __kfprint(FILE* fd, uint8 n, kprint_format* formats, __kprint_value_union* objects); +Maybe __kfprint(FILE* fd, uint8 n, kp_fmt* formats, __kp_value_union* objects); + +/// @param FD FILE* +/// @param ARGS kp_fmt, value, kp_fmt, value... +///@returns Maybe #define kfprint(FD, ARGS...) WARNING_DISABLE( W_INT_CONVERSION,\ - __kfprint(FD, count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS, __32zeroes))\ + __kfprint(FD, count_args(ARGS), __kp_argsToArrs(count_args(ARGS),ARGS, __32zeroes))\ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wint-conversion" -void __kprint(uint8 n, kprint_format* formats, __kprint_value_union* objects); +void __kprint(uint8 n, kp_fmt* formats, __kp_value_union* objects); + +///can use non-catchable throw !!! +///@param ARGS kp_fmt, value, kp_fmt, value... +///@returns void #define kprint(ARGS...) WARNING_DISABLE( W_INT_CONVERSION,\ - __kprint(count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS, __32zeroes))\ + __kprint(count_args(ARGS), __kp_argsToArrs(count_args(ARGS),ARGS, __32zeroes))\ ) - - -#pragma GCC diagnostic pop - -// can take (bgColor | fgColor) -void kprint_setColor(kprint_format f); + +///@param f bgColor | fgColor +void kprint_setColor(kp_fmt f); #if __cplusplus } diff --git a/src/kprint/kprint_colors.h b/src/kprint/kprint_colors.h index 028ec91..acc15ac 100644 --- a/src/kprint/kprint_colors.h +++ b/src/kprint/kprint_colors.h @@ -4,51 +4,82 @@ extern "C" { #endif -typedef enum kprint_fgColor{ - // 10000000 00000000 00000000 00000000 - // ^ ^^^^ - // | color num - // fgColorChanged flag +// 10000000 00000000 00000000 00000000 +// ^ ^^^^ +// | color num +// fgColorSet flag +typedef enum kp_fgColor{ + /// black foreground + kp_fgBlack = 0x80000000, + /// dark red foreground + kp_fgRedD = 0x81000000, + /// dark green foreground + kp_fgGreenD = 0x82000000, + /// dark yellow foreground + kp_fgYellowD = 0x83000000, + /// dark blue foreground + kp_fgBlueD = 0x84000000, + /// dark magenta foreground + kp_fgMagentaD= 0x85000000, + /// dark cyan foreground + kp_fgCyanD = 0x86000000, + /// gray foreground + kp_fgGray = 0x87000000, + /// dark gray foreground + kp_fgGrayD = 0x88000000, + /// red foreground + kp_fgRed = 0x89000000, + /// green foreground + kp_fgGreen = 0x8a000000, + /// yellow foreground + kp_fgYellow = 0x8b000000, + /// blue foreground + kp_fgBlue = 0x8c000000, + /// magenta foreground + kp_fgMagenta = 0x8d000000, + /// cyan foreground + kp_fgCyan = 0x8e000000, + /// white foreground + kp_fgWhite = 0x8f000000 +} kp_fgColor; - kprint_fgBlack = 0x80000000, - kprint_fgDarkRed = 0x81000000, - kprint_fgDarkGreen = 0x82000000, - kprint_fgDarkYellow = 0x83000000, - kprint_fgDarkBlue = 0x84000000, - kprint_fgDarkMagenta= 0x85000000, - kprint_fgDarkCyan = 0x86000000, - kprint_fgGray = 0x87000000, - kprint_fgDarkGray = 0x88000000, - kprint_fgRed = 0x89000000, - kprint_fgGreen = 0x8a000000, - kprint_fgYellow = 0x8b000000, - kprint_fgBlue = 0x8c000000, - kprint_fgMagenta = 0x8d000000, - kprint_fgCyan = 0x8e000000, - kprint_fgWhite = 0x8f000000 -} kprint_fgColor; - -typedef enum kprint_bgColor{ - // 01000000 00000000 00000000 00000000 - // ^ ^^^^ - // bgColorChanged flag color num - kprint_bgBlack = 0x40000000, - kprint_bgDarkRed = 0x40100000, - kprint_bgDarkGreen = 0x40200000, - kprint_bgDarkYellow = 0x40300000, - kprint_bgDarkBlue = 0x40400000, - kprint_bgDarkMagenta= 0x40500000, - kprint_bgDarkCyan = 0x40600000, - kprint_bgGray = 0x40700000, - kprint_bgDarkGray = 0x40800000, - kprint_bgRed = 0x40900000, - kprint_bgGreen = 0x40a00000, - kprint_bgYellow = 0x40b00000, - kprint_bgBlue = 0x40c00000, - kprint_bgMagenta = 0x40d00000, - kprint_bgCyan = 0x40e00000, - kprint_bgWhite = 0x40f00000 -} kprint_bgColor; +// 01000000 00000000 00000000 00000000 +// ^ ^^^^ +// bgColorSet flag color num +typedef enum kp_bgColor{ + /// black background + kp_bgBlack = 0x40000000, + /// dark red background + kp_bgRedD = 0x40100000, + /// dark green background + kp_bgGreenD = 0x40200000, + /// dark yellow background + kp_bgYellowD = 0x40300000, + /// dark blue background + kp_bgBlueD = 0x40400000, + /// dark magenta background + kp_bgMagentaD= 0x40500000, + /// dark cyan background + kp_bgCyanD = 0x40600000, + /// gray background + kp_bgGray = 0x40700000, + /// dark gray background + kp_bgGrayD = 0x40800000, + /// red background + kp_bgRed = 0x40900000, + /// green background + kp_bgGreen = 0x40a00000, + /// yellow background + kp_bgYellow = 0x40b00000, + /// blue background + kp_bgBlue = 0x40c00000, + /// magenta background + kp_bgMagenta = 0x40d00000, + /// cyan background + kp_bgCyan = 0x40e00000, + /// white background + kp_bgWhite = 0x40f00000 +} kp_bgColor; #if __cplusplus } diff --git a/src/kprint/kprint_format.h b/src/kprint/kprint_format.h index b925cb3..8f72c94 100644 --- a/src/kprint/kprint_format.h +++ b/src/kprint/kprint_format.h @@ -7,41 +7,42 @@ extern "C" { #include "../base/std.h" #include "../base/type_system/ktid.h" -typedef enum kprint_dataFormat{ - // 00000000 00000000 00000000 00000000 - // ^^^^ - // type - kprint_fmtInt = 0x00000000, - kprint_fmtUInt = 0x00010000, - kprint_fmtHex = 0x00020000, - kprint_fmtBin = 0x00030000, - kprint_fmtFloat = 0x00040000, - kprint_fmtChar = 0x00050000, - kprint_fmtString = 0x00060000, +/// kprint_format +typedef uint32 kp_fmt; + +typedef enum kp_dataFmt{ +// 00000000 00000000 00000000 00000000 +// ^^^^ +// type + kp_i = 0x00000000, + kp_u = 0x00010000, + kp_h = 0x00020000, + kp_b = 0x00030000, + kp_f = 0x00040000, + kp_c = 0x00050000, + kp_s = 0x00060000, - // 00100000 00000000 00000000 00000000 - // ^ - // prefix/postfix flag - kprint_fmtWithPrefix=0x20000000, - kprint_fmtWithPostfix=kprint_fmtWithPrefix, +// 00100000 00000000 00000000 00000000 +// ^ +// prefix/postfix flag + kp_pre=0x20000000, + kp_post=kp_pre, - // 00010000 00000000 00000000 00000000 - // ^ - // uppercase flag - kprint_fmtUppercase=0x10000000 -} kprint_dataFormat; +// 00010000 00000000 00000000 00000000 +// ^ +// uppercase flag + kp_upper=0x10000000 +} kp_dataFmt; -typedef uint32 kprint_format; - -#define kprint_format_isFgColorChanged(FMT) (bool)((FMT&0x80000000)!=0) -#define kprint_format_isBgColorChanged(FMT) (bool)((FMT&0x40000000)!=0) -#define kprint_format_isWithPrefix(FMT) (bool)((FMT&kprint_fmtWithPrefix)!=0) -#define kprint_format_isWithPostfix(FMT) (bool)((FMT&kprint_fmtWithPostfix)!=0) -#define kprint_format_isUppercase(FMT) (bool)((FMT&kprint_fmtUppercase)!=0) -#define kprint_format_fgColor(FMT) (kprint_fgColor)(FMT&0x8f000000) -#define kprint_format_bgColor(FMT) (kprint_bgColor)(FMT&0x40f00000) -#define kprint_format_dataFormat(FMT) (kprint_dataFormat)(FMT&0x000f0000) -#define kprint_format_ktid(FMT) (kprint_dataFormat)(FMT&0x0000ffff) +#define kp_fmt_fgColorSet(FMT) (bool)((FMT&0x80000000)!=0) +#define kp_fmt_bgColorSet(FMT) (bool)((FMT&0x40000000)!=0) +#define kp_fmt_withPrefix(FMT) (bool)((FMT&kp_pre)!=0) +#define kp_fmt_withPostfix(FMT) (bool)((FMT&kp_post)!=0) +#define kp_fmt_isUpper(FMT) (bool)((FMT&kp_upper)!=0) +#define kp_fmt_fgColor(FMT) (kp_fgColor)(FMT&0x8f000000) +#define kp_fmt_bgColor(FMT) (kp_bgColor)(FMT&0x40f00000) +#define kp_fmt_dataFormat(FMT) (kp_dataFmt)(FMT&0x000f0000) +#define kp_fmt_ktid(FMT) (ktid)(FMT&0x0000ffff) #if __cplusplus } diff --git a/src/kprint/kprint_format.md b/src/kprint/kprint_format.md index 14edb48..f0b2f7d 100644 --- a/src/kprint/kprint_format.md +++ b/src/kprint/kprint_format.md @@ -1,8 +1,8 @@ # kerep_format ``` - 00000000 00000000 00000000 00000000 -fgColorSet┘│││└┼┴┘ └┼┴┘└┴┴┤ ktid + 00000000 00000000 00000000 00000000 +fgColorSet┘│││└┼┴┘ └┼┴┘└┴┴┤ ktid bgColorSet─┘││ │ bgColor └data format prefix┬────┘│ └fgColor postfix └uppercase @@ -12,61 +12,61 @@ bgColorSet─┘││ │ bgColor └data format ## Console colors ### *Foreground* -| kprint_fg | hex | bin | -|-----------|-----|-----| -| Black | 0x80000000 | 10000000 00000000... | -| DarkRed | 0x81000000 | 10000001 00000000... | -| DarkGreen | 0x82000000 | 10000010 00000000... | -| DarkYellow | 0x83000000 | 10000011 00000000... | -| DarkBlue | 0x84000000 | 10000100 00000000... | -| DarkMagenta | 0x85000000 | 10000101 00000000... | -| DarkCyan | 0x86000000 | 10000110 00000000... | -| Gray | 0x87000000 | 10000111 00000000... | -| DarkGray | 0x88000000 | 10001000 00000000... | -| Red | 0x89000000 | 10001001 00000000... | -| Green | 0x8a000000 | 10001010 00000000... | -| Yellow | 0x8b000000 | 10001011 00000000... | -| Blue | 0x8c000000 | 10001100 00000000... | -| Magenta | 0x8d000000 | 10001101 00000000... | -| Cyan | 0x8e000000 | 10001110 00000000... | -| White | 0x8f000000 | 10001111 00000000... | +| kp_fg | hex | bin | +|-------|-----|-----| +| Black | 0x80000000 | 10000000 00000000... | +| RedD | 0x81000000 | 10000001 00000000... | +| GreenD | 0x82000000 | 10000010 00000000... | +| YellowD | 0x83000000 | 10000011 00000000... | +| BlueD | 0x84000000 | 10000100 00000000... | +| MagentaD | 0x85000000 | 10000101 00000000... | +| CyanD | 0x86000000 | 10000110 00000000... | +| Gray | 0x87000000 | 10000111 00000000... | +| GrayD | 0x88000000 | 10001000 00000000... | +| Red | 0x89000000 | 10001001 00000000... | +| Green | 0x8a000000 | 10001010 00000000... | +| Yellow | 0x8b000000 | 10001011 00000000... | +| Blue | 0x8c000000 | 10001100 00000000... | +| Magenta | 0x8d000000 | 10001101 00000000... | +| Cyan | 0x8e000000 | 10001110 00000000... | +| White | 0x8f000000 | 10001111 00000000... | ### *Background* -| kprint_bg | hex | bin | -|-----------|-----|-----| -| Black | 0x40000000 | 01000000 00000000... | -| DarkRed | 0x40100000 | 01000000 00010000... | -| DarkGreen | 0x40200000 | 01000000 00100000... | -| DarkYellow | 0x40300000 | 01000000 00110000... | -| DarkBlue | 0x40400000 | 01000000 01000000... | -| DarkMagenta | 0x40500000 | 01000000 01010000... | -| DarkCyan | 0x40600000 | 01000000 01100000... | -| Gray | 0x40700000 | 01000000 01110000... | -| DarkGray | 0x40800000 | 01000000 10000000... | -| Red | 0x40900000 | 01000000 10010000... | -| Green | 0x40a00000 | 01000000 10100000... | -| Yellow | 0x40b00000 | 01000000 10110000... | -| Blue | 0x40c00000 | 01000000 11000000... | -| Magenta | 0x40d00000 | 01000000 11010000... | -| Cyan | 0x40e00000 | 01000000 11100000... | -| White | 0x40f00000 | 01000000 11110000... | +| kp_bg | hex | bin | +|-------|-----|-----| +| Black | 0x40000000 | 01000000 00000000... | +| RedD | 0x40100000 | 01000000 00010000... | +| GreenD | 0x40200000 | 01000000 00100000... | +| YellowD | 0x40300000 | 01000000 00110000... | +| BlueD | 0x40400000 | 01000000 01000000... | +| MagentaD | 0x40500000 | 01000000 01010000... | +| CyanD | 0x40600000 | 01000000 01100000... | +| Gray | 0x40700000 | 01000000 01110000... | +| GrayD | 0x40800000 | 01000000 10000000... | +| Red | 0x40900000 | 01000000 10010000... | +| Green | 0x40a00000 | 01000000 10100000... | +| Yellow | 0x40b00000 | 01000000 10110000... | +| Blue | 0x40c00000 | 01000000 11000000... | +| Magenta | 0x40d00000 | 01000000 11010000... | +| Cyan | 0x40e00000 | 01000000 11100000... | +| White | 0x40f00000 | 01000000 11110000... | ## Data format -| kprint_fmt | possible flags | data types | hex value | bin value | -|------------|----------------|------------|-----------|-----------| -| Int | | int8... int64 | 0x00000000 | 00000000 00000000... | -| UInt | WithPostfix, Uppercase | uint8... uint64 | 0x00010000 | 00000000 00000001... | -| Hex | WithPrefix, Uppercase | any | 0x00020000 | 00000000 00000010... | -| Bin | WithPrefix, | any | 0x00030000 | 00000000 00000011... | -| Float | WithPostfix, Uppercase | float32, float64 | 0x00040000 | 00000000 00000100... | -| Char | | char | 0x00050000 | 00000000 00000101... | -| String | | char* | 0x00060000 | 00000000 00000110... | +| format | possible flags | data types | hex value | bin value | +|-----------|----------------|------------|-----------|-----------| +| kp_i | | int8... int64 | 0x00000000 | 00000000 00000000... | +| kp_u | Postfix, Upper | uint8... uint64 | 0x00010000 | 00000000 00000001... | +| kp_h | Prefix, Upper | any | 0x00020000 | 00000000 00000010... | +| kp_b | Prefix | any | 0x00030000 | 00000000 00000011... | +| kp_f | Postfix, Upper | float32, float64 | 0x00040000 | 00000000 00000100... | +| kp_c | | char | 0x00050000 | 00000000 00000101... | +| kp_sing | | char* | 0x00060000 | 00000000 00000110... | ### *Flags* -| kprint_fmt | hex value | bin value | -|-------------|------------|-----------| -| withPrefix | 0x20000000 | 00100000 00000000... | -| withPostfix | 0x20000000 | 00100000 00000000... | -| upperase | 0x10000000 | 00010000 00000000... | \ No newline at end of file +| flag | hex value | bin value | +|------|------------|-----------| +| kp_pre | 0x20000000 | 00100000 00000000... | +| kp_post | 0x20000000 | 00100000 00000000... | +| kp_upper | 0x10000000 | 00010000 00000000... | diff --git a/tests/test_kprint_colors.c b/tests/test_kprint_colors.c index afe3640..7858f4f 100644 --- a/tests/test_kprint_colors.c +++ b/tests/test_kprint_colors.c @@ -5,11 +5,11 @@ #endif #define testColor(COLOR) \ - kprint_setColor(kprint_bgBlack | kprint_fg##COLOR);\ + kprint_setColor(kp_bgBlack | kp_fg##COLOR);\ kprintf(#COLOR " ");\ - kprint_setColor(kprint_bg##COLOR | kprint_fgGray);\ + kprint_setColor(kp_bg##COLOR | kp_fgGray);\ kprintf(#COLOR);\ - kprint_setColor(kprint_bgBlack | kprint_fgBlack);\ + kprint_setColor(kp_bgBlack | kp_fgBlack);\ kprintf("\n"); void test_kprint_colors(){ @@ -29,14 +29,14 @@ void test_kprint_colors(){ kprintf("\n"); */ testColor(Black); - testColor(DarkRed); - testColor(DarkGreen); - testColor(DarkYellow); - testColor(DarkBlue); - testColor(DarkMagenta); - testColor(DarkCyan); + testColor(RedD); + testColor(GreenD); + testColor(YellowD); + testColor(BlueD); + testColor(MagentaD); + testColor(CyanD); testColor(Gray); - testColor(DarkGray); + testColor(GrayD); testColor(Red); testColor(Green); testColor(Yellow); @@ -44,7 +44,7 @@ void test_kprint_colors(){ testColor(Magenta); testColor(Cyan); testColor(White); - kprint_setColor(kprint_bgBlack | kprint_fgGray); + kprint_setColor(kp_bgBlack | kp_fgGray); - kprint(kprint_fmtInt | kprint_fgCyan, 8888, kprint_fmtString | kprint_fgYellow, " ooo ", kprint_fmtFloat | kprint_bgDarkGreen | kprint_fgRed, 4.01, kprint_fmtString | kprint_fgWhite, "\ngg\n"); + kprint(kprint_fmtInt | kp_fgCyan, 8888, kprint_fmtString | kp_fgYellow, " ooo ", kprint_fmtFloat | kp_bgGreenD | kp_fgRed, 4.01, kprint_fmtString | kp_fgWhite, "\ngg\n"); } \ No newline at end of file