532
533
534
535
536
537
538
539
540
541
542
543
544
545
|
#define Scalpi_network_tcp_http_WebSocket_Header_Size_long_extended_payload_len_size 8
#define Scalpi_network_tcp_http_WebSocket_Header_Size_long_header (Scalpi_network_tcp_http_WebSocket_Header_Size_small_header + Scalpi_network_tcp_http_WebSocket_Header_Size_long_extended_payload_len_size)
// auto unwrap CText to text and len
// # __OsConsoleOutput_writeCText__
#define __OsConsoleOutput_writeCText__( ctx, text) \
__OsConsoleOutput_write__( ctx, text, __CText_len__(text))
// auto casting
// # __OsFile_readToAny__
#define __OsFile_readToAny__( file, buffer, buffer_len, offset ) \
__OsFile_readToBuffer__( file, (char*) (buffer), buffer_len, offset )
// # __OsMem_allocAny__
#define __OsMem_allocAny__( ret_data_addr, size) \
__OsMem_alloc__( (uintptr_t*) (ret_data_addr), size)
// # __OsMem_freeAny__
|
>
>
>
|
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
|
#define Scalpi_network_tcp_http_WebSocket_Header_Size_long_extended_payload_len_size 8
#define Scalpi_network_tcp_http_WebSocket_Header_Size_long_header (Scalpi_network_tcp_http_WebSocket_Header_Size_small_header + Scalpi_network_tcp_http_WebSocket_Header_Size_long_extended_payload_len_size)
// auto unwrap CText to text and len
// # __OsConsoleOutput_writeCText__
#define __OsConsoleOutput_writeCText__( ctx, text) \
__OsConsoleOutput_write__( ctx, text, __CText_len__(text))
// auto casting
// # __ScalpiMem_fillAny__
#define __ScalpiMem_fillAny__( dest, symbol, len) \
__ScalpiMem_fill__( (char*)dest, symbol, len)
// # __OsFile_readToAny__
#define __OsFile_readToAny__( file, buffer, buffer_len, offset ) \
__OsFile_readToBuffer__( file, (char*) (buffer), buffer_len, offset )
// # __OsMem_allocAny__
#define __OsMem_allocAny__( ret_data_addr, size) \
__OsMem_alloc__( (uintptr_t*) (ret_data_addr), size)
// # __OsMem_freeAny__
|
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
|
};
// math
struct __Scalpi_math_d2_U_Pos__ {
size_t x;
size_t y;
};
// text
struct Scalpi_Text_Splitter {
struct Finder finder;
bool stop;
size_t last_pos;
};
// # __ScalpiLogger__
struct __ScalpiLogger__ {
// write to terminal, console, file or to all together, but no real check "bytes is writen"
struct __ScalpiWriter__ writers[4]; // __ScalpiLoggerWriters__
};
// Console
// __Scalpi_Console_ansi_input_Key_SequenceParser__
|
>
>
>
>
>
>
>
|
|
|
|
|
|
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
|
};
// math
struct __Scalpi_math_d2_U_Pos__ {
size_t x;
size_t y;
};
// text
// # __ScalpiTextFormatU64__
struct __ScalpiTextFormatU64__ {
char buffer [__ScalpiTextCharsDecFromU64_lenMax__];
char *ptr;
size_t len;
};
// # Scalpi_Text_Splitter
struct Scalpi_Text_Splitter {
struct Finder finder;
bool stop;
size_t last_pos;
};
// # __ScalpiLogger__
struct __ScalpiLogger__ {
// write to terminal, console, file or to all together, but no real check "bytes is writen"
struct __ScalpiWriter__ writers[4]; // __ScalpiLoggerWriters__
};
// Console
// __Scalpi_Console_ansi_input_Key_SequenceParser__
|
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
|
uint64_t bits_rotl64(uint64_t value, unsigned int shift) {
shift %= 64;
return (value << shift) | (value >> (64 - shift));
}
// bytes operations
// # __ScalpiMem_fill__
void __ScalpiMem_fill__(char* dest, char symbol, size_t len) {
for (size_t pos = 0; pos < len; pos++) {
dest[pos] = symbol;
}
}
// # __ScalpiMem_copy__
void __ScalpiMem_copy__( // todo create macros __ScalpiMem_copyAny__
char *dest,
|
|
>
>
>
>
|
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
|
uint64_t bits_rotl64(uint64_t value, unsigned int shift) {
shift %= 64;
return (value << shift) | (value >> (64 - shift));
}
// bytes operations
// # __ScalpiMem_fill__
void __ScalpiMem_fill__(
char *dest,
char symbol,
size_t len
) {
for (size_t pos = 0; pos < len; pos++) {
dest[pos] = symbol;
}
}
// # __ScalpiMem_copy__
void __ScalpiMem_copy__( // todo create macros __ScalpiMem_copyAny__
char *dest,
|
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
|
}
return false;
}
// math
uint32_t ceilDiv32(uint32_t a, uint32_t b) {
return (a + b - 1) / b;
}
// Scalpi_Text_writeU64AsText
size_t Scalpi_Text_writeU64AsTextToBuffer(char buffer[], uint64_t number, size_t min_width) { // utoa utos
size_t writed = 0;
// write number to tmp
char buffer_tmp[__ScalpiTextCharsDecFromU64_lenMax__];
uintptr_t tmp_ptr = (uintptr_t) &buffer_tmp[0] + __ScalpiTextCharsDecFromU64_lenMax__;
for (uint64_t num = number; num > 0; num = num / 10) {
uint8_t remainder = num % 10;
tmp_ptr-=1;
*(char*)tmp_ptr = '0' + (char) remainder;
}
const uintptr_t writed_tmp = (uintptr_t) &buffer_tmp[0] + __ScalpiTextCharsDecFromU64_lenMax__ - (uintptr_t) tmp_ptr;
// fill zeroes to min_width
size_t extra_fill = 0;
if (min_width > writed_tmp) {
extra_fill = min_width - writed_tmp;
__ScalpiMem_fill__(&buffer[0], '0', extra_fill);
writed += extra_fill;
}
if (writed_tmp > 0) {
__ScalpiMem_copy__(&buffer[writed], (char*)tmp_ptr, writed_tmp);
writed += writed_tmp;
}
return writed;
}
size_t __ScalpiText_writeU64AsTextToWriteFnVoid__(__WriteFnPtrVoid__ fn_write, void* context, uint64_t number, size_t min_width) {
char buffer_tmp[__ScalpiTextCharsDecFromU64_lenMax__];
const size_t writed = Scalpi_Text_writeU64AsTextToBuffer(&buffer_tmp[0], number, min_width);
fn_write(context, buffer_tmp, writed);
return writed;
}
// ZText - zero ended text
// # __ZText_fromBytes__
void __ZText_fromBytes__(char* buffer, const char bytes[], size_t bytes_len) {
// expected buffer_len >= bytes_len + 1
__ScalpiMem_copy__(buffer, bytes, bytes_len);
buffer[bytes_len] = 0;
|
>
|
>
>
|
>
>
|
>
>
|
|
|
<
|
|
<
>
|
|
>
|
>
>
>
>
>
>
|
<
<
<
<
<
<
|
>
>
|
>
>
>
>
>
>
>
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
|
}
return false;
}
// math
uint32_t ceilDiv32(uint32_t a, uint32_t b) {
return (a + b - 1) / b;
}
// __ScalpiTextFormatU64__ (utoa utos)
// # __ScalpiTextFormatU64_do__
void __ScalpiTextFormatU64_do__(
struct __ScalpiTextFormatU64__ *t,
uint64_t number,
size_t min_width
) {
size_t len = 0;
uintptr_t buffer_start = (uintptr_t) &t->buffer[0];
uintptr_t buffer_end = buffer_start + __ScalpiTextCharsDecFromU64_lenMax__;
// write utoa
uintptr_t addr = buffer_end;
for (uint64_t num = number; num > 0; num = num / 10) {
uint8_t remainder = num % 10;
addr = addr - 1;
*(char*) addr = '0' + (char) remainder;
}
len = buffer_end - addr;
// fill zeroes to min_width
if (min_width > len) {
size_t fill_len = min_width - len;
addr = addr - fill_len;
__ScalpiMem_fillAny__(addr, '0', fill_len);
len = len + fill_len;
}
t->ptr = (char*) addr;
t->len = len;
}
// # __ScalpiText_formatU64ToBuffer__
size_t __ScalpiText_formatU64ToBuffer__(
char *buffer, // expected len >= __ScalpiTextCharsDecFromU64_lenMax__
uint64_t number,
size_t min_width
) {
struct __ScalpiTextFormatU64__ format;
__ScalpiTextFormatU64_do__(&format, number, min_width);
if (format.len > 0) {
__ScalpiMem_copy__(buffer, format.ptr, format.len);
}
return format.len;
}
// # __ScalpiText_formatU64__
size_t __ScalpiText_formatU64__(__WriteFnPtrVoid__ fn_write, void* context, uint64_t number, size_t min_width) {
struct __ScalpiTextFormatU64__ format;
__ScalpiTextFormatU64_do__(&format, number, min_width);
fn_write(context, format.ptr, format.len);
return format.len;
}
// ZText - zero ended text
// # __ZText_fromBytes__
void __ZText_fromBytes__(char* buffer, const char bytes[], size_t bytes_len) {
// expected buffer_len >= bytes_len + 1
__ScalpiMem_copy__(buffer, bytes, bytes_len);
buffer[bytes_len] = 0;
|