kprint.h without variadic functions
This commit is contained in:
parent
21b20e5e14
commit
55ab45eb56
@ -8,43 +8,67 @@ extern "C" {
|
|||||||
#include "kprint_colors.h"
|
#include "kprint_colors.h"
|
||||||
#include "kprint_format.h"
|
#include "kprint_format.h"
|
||||||
|
|
||||||
#define __count_va_args(\
|
#define __count_args(\
|
||||||
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,\
|
||||||
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,\
|
||||||
a32) a32
|
a32) a32
|
||||||
#define count_va_args(ARGS...) __count_va_args(\
|
#define count_args(ARGS...) __count_args(\
|
||||||
ARGS,\
|
ARGS,\
|
||||||
32,31,30,29,28,27,26,25,\
|
32,31,30,29,28,27,26,25,\
|
||||||
24,23,22,21,20,19,18,17,\
|
24,23,22,21,20,19,18,17,\
|
||||||
16,15,14,13,12,11,10,9,\
|
16,15,14,13,12,11,10,9,\
|
||||||
8, 7, 6, 5, 4, 3, 2, 1, 0)
|
8, 7, 6, 5, 4, 3, 2, 1, 0)
|
||||||
|
|
||||||
#define __get_va_args_sizes(\
|
#define __kprint_argsToFormats8(\
|
||||||
|
a0, a1, a2, a3, a4, a5, a6, a7)\
|
||||||
|
(kprint_format[]{ a0,a2,a4,a6 })
|
||||||
|
#define __kprint_argsToObjects8(\
|
||||||
|
a0, a1, a2, a3, a4, a5, a6, a7)\
|
||||||
|
(void*[]{ a1,a3,a5,a7 })
|
||||||
|
|
||||||
|
#define __kprint_argsToFormats16(\
|
||||||
|
a0, a1, a2, a3, a4, a5, a6, a7,\
|
||||||
|
a8, a9, a10,a11,a12,a13,a14,a15)\
|
||||||
|
(kprint_format[]{ a0,a2,a4,a6,a8,a10,a12,a14 })
|
||||||
|
#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 })
|
||||||
|
|
||||||
|
#define __kprint_argsToFormats32(\
|
||||||
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,\
|
||||||
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)\
|
||||||
(uint16[]{\
|
(kprint_format[]{ a0,a2,a4,a6,a8,a10,a12,a14,a16,a18,a20,a22,a24,a26,a28,a30 }
|
||||||
sizeof(a0), sizeof(a1), sizeof(a2), sizeof(a3), sizeof(a4), sizeof(a5), sizeof(a6), sizeof(a7),\
|
#define __kprint_argsToObjects32(\
|
||||||
sizeof(a8), sizeof(a9), sizeof(a10),sizeof(a11),sizeof(a12),sizeof(a13),sizeof(a14),sizeof(a15),\
|
a0, a1, a2, a3, a4, a5, a6, a7,\
|
||||||
sizeof(a16),sizeof(a17),sizeof(a18),sizeof(a19),sizeof(a20),sizeof(a21),sizeof(a22),sizeof(a23),\
|
a8, a9, a10,a11,a12,a13,a14,a15,\
|
||||||
sizeof(a24),sizeof(a25),sizeof(a26),sizeof(a27),sizeof(a28),sizeof(a29),sizeof(a30),sizeof(a31)\
|
a16,a17,a18,a19,a20,a21,a22,a23,\
|
||||||
})
|
a24,a25,a26,a27,a28,a29,a30,a31)\
|
||||||
#define get_va_args_sizes(ARGS...) __get_va_args_sizes(ARGS,\
|
(void*[]{ a1,a3,a5,a7,a9,a11,a13,a15,a17,a19,a21,a23,a25,a27,a29,a31 })
|
||||||
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...)(\
|
||||||
|
(COUNT<=8 __kprint_argsToFormats8(ARGS,__32zeroes) :\
|
||||||
|
COUNT<=16 __kprint_argsToFormats16(ARGS,__32zeroes) :\
|
||||||
|
__kprint_argsToFormats32(ARGS,__32zeroes)),\
|
||||||
|
(COUNT<=8 __kprint_argsToObjects8(ARGS,__32zeroes) :\
|
||||||
|
COUNT<=16 __kprint_argsToObjects16(ARGS) :\
|
||||||
|
__kprint_argsToObjects32(ARGS,__32zeroes))
|
||||||
|
|
||||||
|
|
||||||
Maybe __ksprint(uint8 n, uint16 sizes[32], ...);
|
Maybe __ksprint(uint8 n, kprint_format* formats, void** objects);
|
||||||
#define ksprint(ARGS...) __ksprint(count_va_args(ARGS), get_va_args_sizes(ARGS), ARGS)
|
#define ksprint(ARGS...) __ksprint(count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS))
|
||||||
|
|
||||||
Maybe __kfprint(FILE* fd, uint8 n, uint16 sizes[32], ...);
|
Maybe __kfprint(FILE* fd, uint8 n, kprint_format* formats, void** objects);
|
||||||
#define kfprint(FD, ARGS...) __kfprint(FD, count_va_args(ARGS), get_va_args_sizes(ARGS), ARGS)
|
#define kfprint(FD, ARGS...) __kfprint(FD, count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS))
|
||||||
|
|
||||||
void __kprint(uint8 n, uint16 sizes[32], ...);
|
void __kprint(uint8 n, kprint_format* formats, void** objects);
|
||||||
#define kprint(ARGS...) __kprint(count_va_args(ARGS), get_va_args_sizes(ARGS), ARGS)
|
#define kprint(ARGS...) __kprint(count_args(ARGS), __kprint_argsToArrs(count_args(ARGS),ARGS))
|
||||||
|
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user