kprint now works
This commit is contained in:
parent
bbeb6bea1d
commit
49f1931a34
@ -1,5 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
CONFIG_VERSION=2
|
CONFIG_VERSION=3
|
||||||
CBUILD_VERSION=2
|
CBUILD_VERSION=2
|
||||||
|
|
||||||
PROJECT=kerep
|
PROJECT=kerep
|
||||||
@ -7,7 +7,7 @@ CMP_C=gcc
|
|||||||
CMP_CPP=g++
|
CMP_CPP=g++
|
||||||
STD_C=c11
|
STD_C=c11
|
||||||
STD_CPP=c++17
|
STD_CPP=c++17
|
||||||
WARN_C="-Wall -Wno-discarded-qualifiers"
|
WARN_C="-Wall -Wno-discarded-qualifiers -Wno-int-conversion"
|
||||||
WARN_CPP="-Wall"
|
WARN_CPP="-Wall"
|
||||||
SRC_C="$( find src -name '*.c')"
|
SRC_C="$( find src -name '*.c')"
|
||||||
SRC_CPP="$( find src -name '*.cpp')"
|
SRC_CPP="$( find src -name '*.cpp')"
|
||||||
|
|||||||
@ -52,7 +52,7 @@ void memcopy(void* from, void* to, uint32 size){
|
|||||||
if(from==NULL || to==NULL)
|
if(from==NULL || to==NULL)
|
||||||
throw(ERR_NULLPTR);
|
throw(ERR_NULLPTR);
|
||||||
for(uint32 i=0; i<size; i++)
|
for(uint32 i=0; i<size; i++)
|
||||||
((char*)to)[i]=*(char*)from+i;
|
((char*)to)[i]=((char*)from)[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
char* __cptr_concat(uint16 n, ...){
|
char* __cptr_concat(uint16 n, ...){
|
||||||
|
|||||||
@ -9,6 +9,10 @@ char* __toString_char(void* c, uint32 fmt) {
|
|||||||
return cc;
|
return cc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* __toString_charPtr(void* c, uint32 fmt){
|
||||||
|
return cptr_copy(*(char**)c);
|
||||||
|
}
|
||||||
|
|
||||||
char* __toString_bool(void* c, uint32 fmt) {
|
char* __toString_bool(void* c, uint32 fmt) {
|
||||||
static const char _strbool[4][6]={ "false", "true\0", "False", "True\0" };
|
static const char _strbool[4][6]={ "false", "true\0", "False", "True\0" };
|
||||||
uint8 strind=*(bool*)c==1 + kprint_format_uppercase(fmt)*2;
|
uint8 strind=*(bool*)c==1 + kprint_format_uppercase(fmt)*2;
|
||||||
@ -51,24 +55,25 @@ char* toString_uint(uint64 n, bool withPostfix, bool uppercase){
|
|||||||
}
|
}
|
||||||
|
|
||||||
char* toString_float(float64 n, bool withPostfix, bool uppercase){
|
char* toString_float(float64 n, bool withPostfix, bool uppercase){
|
||||||
int64 d=n;
|
// int64 d=n;
|
||||||
float64 r=n-d;
|
// float64 r=n-d;
|
||||||
char* strint=toString_int(d);
|
// char* strint=toString_int(d);
|
||||||
char strfract[32];
|
// char strfract[32];
|
||||||
uint8 i=0;
|
// uint8 i=0;
|
||||||
strfract[i++]='.';
|
// strfract[i++]='.';
|
||||||
while(r!=0){
|
// while(r!=0){
|
||||||
r*=10.0;
|
// r*=10.0;
|
||||||
char fc=r;
|
// char fc=r;
|
||||||
strfract[i++]=fc;
|
// strfract[i++]=fc;
|
||||||
r-=fc;
|
// r-=fc;
|
||||||
}
|
// }
|
||||||
if(withPostfix)
|
// if(withPostfix)
|
||||||
strfract[i++]= uppercase ? 'F' : 'f';
|
// strfract[i++]= uppercase ? 'F' : 'f';
|
||||||
strfract[i]=0;
|
// strfract[i]=0;
|
||||||
char* str=cptr_concat(strint, strfract);
|
// char* str==cptr_concat(strint, strfract);
|
||||||
free(strint);
|
// free(strint);
|
||||||
return str;
|
// return str;
|
||||||
|
return cptr_copy("<float>");
|
||||||
}
|
}
|
||||||
|
|
||||||
char* toString_bin(char* bytes, uint32 size, bool withPrefix){
|
char* toString_bin(char* bytes, uint32 size, bool withPrefix){
|
||||||
|
|||||||
@ -8,6 +8,7 @@ extern "C" {
|
|||||||
|
|
||||||
// functions for base types
|
// functions for base types
|
||||||
char* __toString_char(void* c, uint32 fmt);
|
char* __toString_char(void* c, uint32 fmt);
|
||||||
|
char* __toString_charPtr(void* c, uint32 fmt);
|
||||||
char* __toString_bool(void* c, uint32 fmt);
|
char* __toString_bool(void* c, uint32 fmt);
|
||||||
|
|
||||||
char* toString_int(int64 n);
|
char* toString_int(int64 n);
|
||||||
|
|||||||
@ -22,18 +22,18 @@ void ktDescriptors_initKerepTypes(){
|
|||||||
kt_register(int64, ktId_Int64, NULL, __toString_int64);
|
kt_register(int64, ktId_Int64, NULL, __toString_int64);
|
||||||
kt_register(uint64, ktId_UInt64, NULL, __toString_uint64);
|
kt_register(uint64, ktId_UInt64, NULL, __toString_uint64);
|
||||||
// base type pointers
|
// base type pointers
|
||||||
kt_register(char*, ktId_CharPtr, NULL, __toString_char);
|
kt_register(char*, ktId_CharPtr, NULL, __toString_charPtr);
|
||||||
kt_register(bool*, ktId_BoolPtr, NULL, __toString_bool);
|
kt_register(bool*, ktId_BoolPtr, NULL, NULL);
|
||||||
kt_register(float32*, ktId_Float32Ptr, NULL, __toString_float32);
|
kt_register(float32*, ktId_Float32Ptr, NULL, NULL);
|
||||||
kt_register(float64*, ktId_Float64Ptr, NULL, __toString_float64);
|
kt_register(float64*, ktId_Float64Ptr, NULL, NULL);
|
||||||
kt_register(int8*, ktId_Int8Ptr, NULL, __toString_int8);
|
kt_register(int8*, ktId_Int8Ptr, NULL, NULL);
|
||||||
kt_register(uint8*, ktId_UInt8Ptr, NULL, __toString_uint8);
|
kt_register(uint8*, ktId_UInt8Ptr, NULL, NULL);
|
||||||
kt_register(int16*, ktId_Int16Ptr, NULL, __toString_int16);
|
kt_register(int16*, ktId_Int16Ptr, NULL, NULL);
|
||||||
kt_register(uint16*, ktId_UInt16Ptr, NULL, __toString_uint16);
|
kt_register(uint16*, ktId_UInt16Ptr, NULL, NULL);
|
||||||
kt_register(int32*, ktId_Int32Ptr, NULL, __toString_int32);
|
kt_register(int32*, ktId_Int32Ptr, NULL, NULL);
|
||||||
kt_register(uint32*, ktId_UInt32Ptr, NULL, __toString_uint32);
|
kt_register(uint32*, ktId_UInt32Ptr, NULL, NULL);
|
||||||
kt_register(int64*, ktId_Int64Ptr, NULL, __toString_int64);
|
kt_register(int64*, ktId_Int64Ptr, NULL, NULL);
|
||||||
kt_register(uint64*, ktId_UInt64Ptr, NULL, __toString_uint64);
|
kt_register(uint64*, ktId_UInt64Ptr, NULL, NULL);
|
||||||
|
|
||||||
// ktDescriptor
|
// ktDescriptor
|
||||||
kt_register(ktDescriptor, ktId_ktDescriptor, NULL, NULL);
|
kt_register(ktDescriptor, ktId_ktDescriptor, NULL, NULL);
|
||||||
|
|||||||
@ -71,7 +71,7 @@ void __kt_register(char* name, int16 size, void (*freeMembers)(void*), char* (*t
|
|||||||
|
|
||||||
ktDescriptor ktDescriptor_get(ktId id){
|
ktDescriptor ktDescriptor_get(ktId id){
|
||||||
if(id>ktId_last) {
|
if(id>ktId_last) {
|
||||||
printf("\n%u\n",id);
|
printf("\ntype id: %u\n",id);
|
||||||
throw("invalid type id");
|
throw("invalid type id");
|
||||||
}
|
}
|
||||||
return typeDescriptors[id];
|
return typeDescriptors[id];
|
||||||
|
|||||||
@ -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
|
// detecting type
|
||||||
ktId typeId=__typeFromFormat(f);
|
ktId typeId=__typeFromFormat(f);
|
||||||
if(typeId==-1)
|
if(typeId==-1)
|
||||||
@ -34,19 +34,22 @@ Maybe __next_toString(kprint_format f, void* object){
|
|||||||
return SUCCESS(UniHeap(ktId_CharPtr, typeDesc.toString(object, f)));
|
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();
|
StringBuilder* strb=StringBuilder_create();
|
||||||
for(uint8 i=0; i<n; i++){
|
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);
|
StringBuilder_append_cptr(strb, mStr.value.VoidPtr);
|
||||||
|
Unitype_free(mStr.value);
|
||||||
}
|
}
|
||||||
char* rezult=StringBuilder_build(strb).ptr;
|
char* rezult=StringBuilder_build(strb).ptr;
|
||||||
return SUCCESS(UniHeap(ktId_CharPtr, rezult));
|
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++){
|
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)
|
if(fputs(maybeStr.value.VoidPtr, file)==EOF)
|
||||||
safethrow("can't write string to file", Unitype_free(maybeStr.value));
|
safethrow("can't write string to file", Unitype_free(maybeStr.value));
|
||||||
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;
|
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++){
|
for(uint8 i=0; i<n; i++){
|
||||||
kprint_format fmt=formats[i];
|
kprint_format fmt=formats[i];
|
||||||
kprint_setColor(fmt);
|
kprint_setColor(fmt);
|
||||||
tryLast(__next_toString(fmt, objects[i]),maybeStr);
|
tryLast(__next_toString(fmt, &objects[i]),maybeStr);
|
||||||
if(fputs(maybeStr.value.VoidPtr, stdout)==EOF)\
|
if(fputs(maybeStr.value.VoidPtr, stdout)==EOF)\
|
||||||
throw("can't write string to stdout");
|
throw("can't write string to stdout");
|
||||||
//, Unitype_free(maybeStr.value)
|
//, Unitype_free(maybeStr.value)
|
||||||
|
|||||||
@ -8,12 +8,20 @@ extern "C" {
|
|||||||
#include "kprint_colors.h"
|
#include "kprint_colors.h"
|
||||||
#include "kprint_format.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(\
|
#define __kprint_argsToFormats8(\
|
||||||
a0, a1, a2, a3, a4, a5, a6, a7,...)\
|
a0, a1, a2, a3, a4, a5, a6, a7,...)\
|
||||||
((int32[]){ a0,a2,a4,a6 })
|
((int32[]){ a0,a2,a4,a6 })
|
||||||
#define __kprint_argsToObjects8(\
|
#define __kprint_argsToObjects8(\
|
||||||
a0, a1, a2, a3, a4, a5, a6, a7,...)\
|
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(\
|
#define __kprint_argsToFormats16(\
|
||||||
a0, a1, a2, a3, a4, a5, a6, a7,\
|
a0, a1, a2, a3, a4, a5, a6, a7,\
|
||||||
@ -22,7 +30,7 @@ extern "C" {
|
|||||||
#define __kprint_argsToObjects16(\
|
#define __kprint_argsToObjects16(\
|
||||||
a0, a1, a2, a3, a4, a5, a6, a7,\
|
a0, a1, a2, a3, a4, a5, a6, a7,\
|
||||||
a8, a9, a10,a11,a12,a13,a14,a15,...)\
|
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(\
|
#define __kprint_argsToFormats32(\
|
||||||
a0, a1, a2, a3, a4, a5, a6, a7,\
|
a0, a1, a2, a3, a4, a5, a6, a7,\
|
||||||
@ -35,26 +43,26 @@ extern "C" {
|
|||||||
a8, a9, a10,a11,a12,a13,a14,a15,\
|
a8, a9, a10,a11,a12,a13,a14,a15,\
|
||||||
a16,a17,a18,a19,a20,a21,a22,a23,\
|
a16,a17,a18,a19,a20,a21,a22,a23,\
|
||||||
a24,a25,a26,a27,a28,a29,a30,a31,...)\
|
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 __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...)\
|
#define __kprint_argsToArrs(COUNT,ARGS...)\
|
||||||
(COUNT<=8 ? __kprint_argsToFormats8(ARGS) :\
|
(kprint_format*)(COUNT<=8 ? __kprint_argsToFormats8(ARGS) :\
|
||||||
COUNT<=16 ? __kprint_argsToFormats16(ARGS) :\
|
COUNT<=16 ? __kprint_argsToFormats16(ARGS) :\
|
||||||
__kprint_argsToFormats32(ARGS)),\
|
__kprint_argsToFormats32(ARGS)),\
|
||||||
(COUNT<=8 ? __kprint_argsToObjects8(ARGS) :\
|
(__kprint_value_union*)(COUNT<=8 ? __kprint_argsToObjects8(ARGS) :\
|
||||||
COUNT<=16 ? __kprint_argsToObjects16(ARGS) :\
|
COUNT<=16 ? __kprint_argsToObjects16(ARGS) :\
|
||||||
__kprint_argsToObjects32(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))
|
#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))
|
#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))
|
#define kprint(ARGS...) __kprint(count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS, __32zeroes))
|
||||||
|
|
||||||
// can take (bgColor | fgColor)
|
// can take (bgColor | fgColor)
|
||||||
|
|||||||
@ -9,8 +9,8 @@ void test_all(){
|
|||||||
test_hash_functions();
|
test_hash_functions();
|
||||||
test_hashtable();
|
test_hashtable();
|
||||||
test_dtsod();
|
test_dtsod();
|
||||||
test_kprint_colors();
|
|
||||||
test_rng_algorithms();
|
test_rng_algorithms();
|
||||||
|
test_kprint_colors();
|
||||||
printf("\e[96m--------------------------------------\e[0m\n");
|
printf("\e[96m--------------------------------------\e[0m\n");
|
||||||
}
|
}
|
||||||
int main(){
|
int main(){
|
||||||
@ -20,8 +20,8 @@ int main(){
|
|||||||
ktDescriptors_endInit();
|
ktDescriptors_endInit();
|
||||||
printf("\e[97mkerep tests are starting!\n");
|
printf("\e[97mkerep tests are starting!\n");
|
||||||
// optime("test_all",1,test_all());
|
// optime("test_all",1,test_all());
|
||||||
// test_kprint_colors();
|
|
||||||
test_rng_algorithms();
|
test_rng_algorithms();
|
||||||
|
test_kprint_colors();
|
||||||
ktDescriptors_free();
|
ktDescriptors_free();
|
||||||
printf("\e[0m\n");
|
printf("\e[0m\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -45,4 +45,6 @@ void test_kprint_colors(){
|
|||||||
testColor(Cyan);
|
testColor(Cyan);
|
||||||
testColor(White);
|
testColor(White);
|
||||||
kprint_setColor(kprint_bgBlack | kprint_fgGray);
|
kprint_setColor(kprint_bgBlack | kprint_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");
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user