kprint now works
This commit is contained in:
@@ -23,7 +23,7 @@ ktId __typeFromFormat(kprint_format f){
|
||||
}
|
||||
}
|
||||
|
||||
Maybe __next_toString(kprint_format f, void* object){
|
||||
Maybe __next_toString(kprint_format f, __kprint_value_union* object){
|
||||
// detecting type
|
||||
ktId typeId=__typeFromFormat(f);
|
||||
if(typeId==-1)
|
||||
@@ -34,19 +34,22 @@ Maybe __next_toString(kprint_format f, void* object){
|
||||
return SUCCESS(UniHeap(ktId_CharPtr, typeDesc.toString(object, f)));
|
||||
}
|
||||
|
||||
Maybe __ksprint(uint8 n, kprint_format* formats, void** objects){
|
||||
Maybe __ksprint(uint8 n, kprint_format* formats, __kprint_value_union* objects){
|
||||
n/=2;
|
||||
StringBuilder* strb=StringBuilder_create();
|
||||
for(uint8 i=0; i<n; i++){
|
||||
try(__next_toString(formats[i], objects[i]),mStr,;);
|
||||
try(__next_toString(formats[i], &objects[i]),mStr,;);
|
||||
StringBuilder_append_cptr(strb, mStr.value.VoidPtr);
|
||||
Unitype_free(mStr.value);
|
||||
}
|
||||
char* rezult=StringBuilder_build(strb).ptr;
|
||||
return SUCCESS(UniHeap(ktId_CharPtr, rezult));
|
||||
}
|
||||
|
||||
Maybe __kfprint(FILE* file, uint8 n, kprint_format* formats, void** objects){
|
||||
Maybe __kfprint(FILE* file, uint8 n, kprint_format* formats, __kprint_value_union* objects){
|
||||
n/=2;
|
||||
for(uint8 i=0; i<n; i++){
|
||||
try(__next_toString(formats[i], objects[i]),maybeStr,;);
|
||||
try(__next_toString(formats[i], &objects[i]),maybeStr,;);
|
||||
if(fputs(maybeStr.value.VoidPtr, file)==EOF)
|
||||
safethrow("can't write string to file", Unitype_free(maybeStr.value));
|
||||
Unitype_free(maybeStr.value);
|
||||
@@ -55,11 +58,12 @@ Maybe __kfprint(FILE* file, uint8 n, kprint_format* formats, void** objects){
|
||||
return MaybeNull;
|
||||
}
|
||||
|
||||
void __kprint(uint8 n, kprint_format* formats, void** objects){
|
||||
void __kprint(uint8 n, kprint_format* formats, __kprint_value_union* objects){
|
||||
n/=2;
|
||||
for(uint8 i=0; i<n; i++){
|
||||
kprint_format fmt=formats[i];
|
||||
kprint_setColor(fmt);
|
||||
tryLast(__next_toString(fmt, objects[i]),maybeStr);
|
||||
tryLast(__next_toString(fmt, &objects[i]),maybeStr);
|
||||
if(fputs(maybeStr.value.VoidPtr, stdout)==EOF)\
|
||||
throw("can't write string to stdout");
|
||||
//, Unitype_free(maybeStr.value)
|
||||
|
||||
@@ -8,12 +8,20 @@ extern "C" {
|
||||
#include "kprint_colors.h"
|
||||
#include "kprint_format.h"
|
||||
|
||||
typedef union {
|
||||
int64 i64;
|
||||
uint64 u64;
|
||||
float64 f64;
|
||||
void* ptr;
|
||||
} __kprint_value_union;
|
||||
#define __kprintVU(value) (__kprint_value_union){ value }
|
||||
|
||||
#define __kprint_argsToFormats8(\
|
||||
a0, a1, a2, a3, a4, a5, a6, a7,...)\
|
||||
((int32[]){ a0,a2,a4,a6 })
|
||||
#define __kprint_argsToObjects8(\
|
||||
a0, a1, a2, a3, a4, a5, a6, a7,...)\
|
||||
((void*[]){ &a1,&a3,&a5,&a7 })
|
||||
((__kprint_value_union[]){ __kprintVU(a1),__kprintVU(a3),__kprintVU(a5),__kprintVU(a7) })
|
||||
|
||||
#define __kprint_argsToFormats16(\
|
||||
a0, a1, a2, a3, a4, a5, a6, a7,\
|
||||
@@ -22,7 +30,7 @@ extern "C" {
|
||||
#define __kprint_argsToObjects16(\
|
||||
a0, a1, a2, a3, a4, a5, a6, a7,\
|
||||
a8, a9, a10,a11,a12,a13,a14,a15,...)\
|
||||
((void*[]){ &a1,&a3,&a5,&a7,&a9,&a11,&a13,&a15 })
|
||||
((__kprint_value_union[]){ __kprintVU(a1),__kprintVU(a3),__kprintVU(a5),__kprintVU(a7),__kprintVU(a9),__kprintVU(a11),__kprintVU(a13),__kprintVU(a15) })
|
||||
|
||||
#define __kprint_argsToFormats32(\
|
||||
a0, a1, a2, a3, a4, a5, a6, a7,\
|
||||
@@ -35,26 +43,26 @@ extern "C" {
|
||||
a8, a9, a10,a11,a12,a13,a14,a15,\
|
||||
a16,a17,a18,a19,a20,a21,a22,a23,\
|
||||
a24,a25,a26,a27,a28,a29,a30,a31,...)\
|
||||
((void*[]){ &a1,&a3,&a5,&a7,&a9,&a11,&a13,&a15,&a17,&a19,&a21,&a23,&a25,&a27,&a29,&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) })
|
||||
|
||||
#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...)\
|
||||
(COUNT<=8 ? __kprint_argsToFormats8(ARGS) :\
|
||||
(kprint_format*)(COUNT<=8 ? __kprint_argsToFormats8(ARGS) :\
|
||||
COUNT<=16 ? __kprint_argsToFormats16(ARGS) :\
|
||||
__kprint_argsToFormats32(ARGS)),\
|
||||
(COUNT<=8 ? __kprint_argsToObjects8(ARGS) :\
|
||||
(__kprint_value_union*)(COUNT<=8 ? __kprint_argsToObjects8(ARGS) :\
|
||||
COUNT<=16 ? __kprint_argsToObjects16(ARGS) :\
|
||||
__kprint_argsToObjects32(ARGS))
|
||||
|
||||
|
||||
Maybe __ksprint(uint8 n, kprint_format* formats, void** objects);
|
||||
Maybe __ksprint(uint8 n, kprint_format* formats, __kprint_value_union* objects);
|
||||
#define ksprint(ARGS...) __ksprint(count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS, __32zeroes))
|
||||
|
||||
Maybe __kfprint(FILE* fd, uint8 n, kprint_format* formats, void** objects);
|
||||
Maybe __kfprint(FILE* fd, uint8 n, kprint_format* formats, __kprint_value_union* objects);
|
||||
#define kfprint(FD, ARGS...) __kfprint(FD, count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS, __32zeroes))
|
||||
|
||||
void __kprint(uint8 n, kprint_format* formats, void** objects);
|
||||
void __kprint(uint8 n, kprint_format* formats, __kprint_value_union* objects);
|
||||
#define kprint(ARGS...) __kprint(count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS, __32zeroes))
|
||||
|
||||
// can take (bgColor | fgColor)
|
||||
|
||||
Reference in New Issue
Block a user