kprint_format
This commit is contained in:
parent
eca678026f
commit
2b4046313d
@ -11,6 +11,7 @@ extern "C" {
|
||||
#include "types.h"
|
||||
#include "unitype.h"
|
||||
#include "init.h"
|
||||
#include "kprint/kprint.h"
|
||||
|
||||
#if __cplusplus
|
||||
}
|
||||
|
||||
2
src/base/kprint/README.md
Normal file
2
src/base/kprint/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
## kprint
|
||||
I don't really like printf function, so i made safer and more convinient replacement.
|
||||
13
src/base/kprint/data_fmt.txt
Normal file
13
src/base/kprint/data_fmt.txt
Normal file
@ -0,0 +1,13 @@
|
||||
[data types]
|
||||
int 0x2000 00100000 00000000
|
||||
uint + withPostfix + uppercase 0x2001 00100000 00000001
|
||||
hex + withPrefix + uppercase 0x2002 00100000 00000010
|
||||
bin + withPrefix 0x2003 00100000 00000011
|
||||
float + withPostfix + uppercase 0x3000 00110000 00000000
|
||||
char 0x3001 00110000 00000001
|
||||
string 0x3002 00110000 00000010
|
||||
??? 0x3003 00110000 00000011
|
||||
|
||||
[optional flags]
|
||||
withPrefix = withPostfix 0x0004 00000000 00000100
|
||||
upperase 0x0008 00000000 00001000
|
||||
22
src/base/kprint/kprint.c
Normal file
22
src/base/kprint/kprint.c
Normal file
@ -0,0 +1,22 @@
|
||||
#include "../base.h"
|
||||
|
||||
|
||||
|
||||
Maybe __ksprint(uint8 n, uint16 sizes[32], ...){
|
||||
for(uint8 i=0; i<n; i++)
|
||||
|
||||
}
|
||||
|
||||
Maybe __kfprint(FILE* fd, uint8 n, uint16 sizes[32], ...){
|
||||
try(__ksprint(n, sizes, ...), str,;);
|
||||
if(fputs(str.value.VoidPtr, fd)==EOF)
|
||||
safethrow("can't write string to file",;);
|
||||
free(str.value.VoidPtr);
|
||||
}
|
||||
|
||||
void __kprint(uint8 n, uint16 sizes[32], ...){
|
||||
va_list args;
|
||||
va_start(args, sizes);
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
51
src/base/kprint/kprint.h
Normal file
51
src/base/kprint/kprint.h
Normal file
@ -0,0 +1,51 @@
|
||||
#pragma once
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "../errors.h"
|
||||
#include "kprint_colors.h"
|
||||
#include "kprint_format.h"
|
||||
|
||||
#define __count_va_args(\
|
||||
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,\
|
||||
a32) a32
|
||||
#define count_va_args(ARGS...) __count_va_args(\
|
||||
ARGS,\
|
||||
32,31,30,29,28,27,26,25,\
|
||||
24,23,22,21,20,19,18,17,\
|
||||
16,15,14,13,12,11,10,9,\
|
||||
8, 7, 6, 5, 4, 3, 2, 1, 0)
|
||||
|
||||
#define get_va_args_sizes(\
|
||||
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)\
|
||||
(uint16[]{\
|
||||
sizeof(a0), sizeof(a1), sizeof(a2), sizeof(a3), sizeof(a4), sizeof(a5), sizeof(a6), sizeof(a7),\
|
||||
sizeof(a8), sizeof(a9), sizeof(a10),sizeof(a11),sizeof(a12),sizeof(a13),sizeof(a14),sizeof(a15),\
|
||||
sizeof(a16),sizeof(a17),sizeof(a18),sizeof(a19),sizeof(a20),sizeof(a21),sizeof(a22),sizeof(a23),\
|
||||
sizeof(a24),sizeof(a25),sizeof(a26),sizeof(a27),sizeof(a28),sizeof(a29),sizeof(a30),sizeof(a31)\
|
||||
})
|
||||
#define get_va_args_sizes(ARGS...) get_va_args_sizes(ARGS,\
|
||||
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)
|
||||
|
||||
|
||||
Maybe __ksprint(uint8 n, uint16 sizes[32], ...);
|
||||
#define ksprint(ARGS...) __ksprint(count_va_args(ARGS), get_va_args_sizes(ARGS), ARGS)
|
||||
|
||||
Maybe __kfprint(FILE* fd, uint8 n, uint16 sizes[32], ...);
|
||||
#define kfprint(FD, ARGS...) __kfprint(FD, count_va_args(ARGS), get_va_args_sizes(ARGS), ARGS)
|
||||
|
||||
void __kprint(uint8 n, uint16 sizes[32], ...);
|
||||
#define kprint(ARGS...) __kprint(count_va_args(ARGS), get_va_args_sizes(ARGS), ARGS)
|
||||
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
55
src/base/kprint/kprint_colors.h
Normal file
55
src/base/kprint/kprint_colors.h
Normal file
@ -0,0 +1,55 @@
|
||||
#pragma once
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum kprint_fgColor{
|
||||
// 01000000 0000000
|
||||
// ^ ^^^^
|
||||
// | color num
|
||||
// fgColorChanged flag
|
||||
|
||||
kprint_fgBlack = 0x80000000, // optional
|
||||
kprint_fgDarkRed = 0x81000000, // optional
|
||||
kprint_fgDarkGreen = 0x82000000, // optional
|
||||
kprint_fgDarkYellow = 0x83000000, // optional
|
||||
kprint_fgDarkBlue = 0x84000000, // optional
|
||||
kprint_fgDarkMagneta= 0x85000000, // optional
|
||||
kprint_fgDarkCyan = 0x86000000, // optional
|
||||
kprint_fgGray = 0x87000000, // optional
|
||||
kprint_fgDarkGray = 0x88000000, // optional
|
||||
kprint_fgRed = 0x89000000, // optional
|
||||
kprint_fgGreen = 0x8a000000, // optional
|
||||
kprint_fgYellow = 0x8b000000, // optional
|
||||
kprint_fgBlue = 0x8c000000, // optional
|
||||
kprint_fgMagneta = 0x8d000000, // optional
|
||||
kprint_fgCyan = 0x8e000000, // optional
|
||||
kprint_fgWhite = 0x8f000000 // optional
|
||||
} kprint_fgColor;
|
||||
|
||||
typedef enum kprint_bgColor{
|
||||
// 01000000 0000000
|
||||
// ^ ^^^^
|
||||
// bgColorChanged flag color num
|
||||
kprint_bgBlack = 0x40000000, // optional
|
||||
kprint_bgDarkRed = 0x40100000, // optional
|
||||
kprint_bgDarkGreen = 0x40200000, // optional
|
||||
kprint_bgDarkYellow = 0x40300000, // optional
|
||||
kprint_bgDarkBlue = 0x40400000, // optional
|
||||
kprint_bgDarkMagneta= 0x40500000, // optional
|
||||
kprint_bgDarkCyan = 0x40600000, // optional
|
||||
kprint_bgGray = 0x40700000, // optional
|
||||
kprint_bgDarkGray = 0x40800000, // optional
|
||||
kprint_bgRed = 0x40900000, // optional
|
||||
kprint_bgGreen = 0x40a00000, // optional
|
||||
kprint_bgYellow = 0x40b00000, // optional
|
||||
kprint_bgBlue = 0x40c00000, // optional
|
||||
kprint_bgMagneta = 0x40d00000, // optional
|
||||
kprint_bgCyan = 0x40e00000, // optional
|
||||
kprint_bgWhite = 0x40f00000 // optional
|
||||
} kprint_bgColor;
|
||||
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
70
src/base/kprint/kprint_format.h
Normal file
70
src/base/kprint/kprint_format.h
Normal file
@ -0,0 +1,70 @@
|
||||
#pragma once
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "../unitype.h"
|
||||
|
||||
typedef enum kprint_dataFormat{
|
||||
// 00100000 00000000
|
||||
// ^ ^^
|
||||
// dataFmtSet flag type
|
||||
kprint_fmtInt = 0x20000000, // default
|
||||
|
||||
// 00100000 00000001
|
||||
kprint_fmtUInt = 0x20010000, // mandatory for uint
|
||||
|
||||
// 00100000 00000010
|
||||
kprint_fmtHex = 0x20020000, // optional
|
||||
|
||||
// 00100000 00000011
|
||||
kprint_fmtBin = 0x20030000, // optional
|
||||
|
||||
// 00110000 00000000
|
||||
// ^^ ^^
|
||||
// dataFmtSet flag┘| type
|
||||
// notInteger flag
|
||||
kprint_fmtFloat = 0x30000000, // mandatory for float
|
||||
|
||||
// 00110000 00000001
|
||||
kprint_fmtChar = 0x30010000, // optional for char
|
||||
|
||||
// 00110000 00000010
|
||||
kprint_fmtString = 0x30020000, // mandatory for char[], char* and string
|
||||
|
||||
// 00110000 00000011
|
||||
//kprint_fmt? = 0x30030000, // unused
|
||||
|
||||
// 00000000 00000100
|
||||
// ^
|
||||
// prefix/postfix flag
|
||||
kprint_fmtWithPrefix=0x00040000, // optional for hex or binary
|
||||
kprint_fmtWithPostfix=kprint_fmtWithPrefix, // optional for uint or float
|
||||
|
||||
// 00000000 00001000
|
||||
// ^
|
||||
// uppercase flag // optional for hex, uint or float
|
||||
kprint_fmtUppercase=0x00080000
|
||||
} kprint_dataFmt;
|
||||
|
||||
|
||||
uint16 kprint_isFmtSet = 0x2000;
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned char fgColorChanged : 1;
|
||||
unsigned char bgColorChanged : 1;
|
||||
unsigned char dataFmtSet : 1;
|
||||
unsigned char notInteger : 1;
|
||||
unsigned char fgColor : 4;
|
||||
unsigned char bgColor : 4;
|
||||
unsigned char uppercase : 1;
|
||||
unsigned char withPrefix : 1;
|
||||
unsigned char dataFmt : 2;
|
||||
kerepTypeId typeId;
|
||||
} kprint_format;
|
||||
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
@ -8,6 +8,7 @@ extern "C" {
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdarg.h>
|
||||
#include <locale.h>
|
||||
#include <time.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user