ScalpiEditor

Diff
Login

Diff

Differences From Artifact [f2df17e3c0]:

To Artifact [7a86cea033]:


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;