diff options
Diffstat (limited to 'tnslc/c_wrap.tnsl')
-rw-r--r-- | tnslc/c_wrap.tnsl | 283 |
1 files changed, 0 insertions, 283 deletions
diff --git a/tnslc/c_wrap.tnsl b/tnslc/c_wrap.tnsl deleted file mode 100644 index ac516da..0000000 --- a/tnslc/c_wrap.tnsl +++ /dev/null @@ -1,283 +0,0 @@ -# Must be included at the top of the file -asm "extern malloc" -asm "extern realloc" -asm "extern free" - -asm "extern printf" - -asm "extern CreateFileA" -asm "extern ReadFile" -asm "extern WriteFile" -asm "extern CloseHandle" - -{}uint8 _alert = "Alert!\n\0" -{}uint8 _dec = "%d\n\0" -{}uint8 _ptr = "%p\n\0" - -/; _alloc (uint size) [~void] - ~void out - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - asm "sub rsp, 32" - - # Mov size into proper register, and set all extras to zero - asm "mov rcx, r8" - asm "mov rdx, 0" - asm "mov r8, 0" - asm "mov r9, 0" - - asm "call malloc" - # Set out to the returned value - # (The compiler assignes spaces sequentially, and we have a uint in r8) - asm "mov r9, rax" - return out -;/ - -/; _realloc (~void ptr, uint new_size) [~void] - ~void out - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - asm "sub rsp, 32" - - # Mov ptr and new size into proper registers, and set all extras to zero - asm "mov rcx, r8" - asm "mov rdx, r9" - asm "mov r8, 0" - asm "mov r9, 0" - # Do call - asm "call realloc" - # Set out to the returned value - # (The compiler assignes spaces sequentially. We have a ptr in r8, and a uint in r9) - asm "mov r10, rax" - return out -;/ - -/; _delete (~void ptr) - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - asm "sub rsp, 32" - - # setup call by clearing most values - asm "mov rcx, r8" - asm "mov rdx, 0" - asm "mov r8, 0" - asm "mov r9, 0" - # do call - asm "call free" - # there's no more to do 'cause free returns nothing -;/ - -/; _printf (~void str) - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - asm "push qword 0" - asm "push qword 0" - asm "push qword 0" - asm "push qword 0" - - # setup call by clearing most values - asm "mov rcx, r8" - asm "mov rdx, 0" - asm "mov r8, 0" - asm "mov r9, 0" - # do call - asm "call printf" - # there's no more to do 'cause printf returns nothing -;/ - -/; _print_num (~void str, int num) - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - asm "push qword 0" - asm "push qword 0" - asm "push qword 0" - asm "push qword 0" - - # setup call by clearing most values - asm "mov rcx, r8" - asm "mov rdx, r9" - asm "mov rdi, 0" - asm "mov rsi, 0" - asm "mov r8, 0" - asm "mov r9, 0" - # do call - asm "call printf" - # there's no more to do 'cause printf returns nothing -;/ - - -# Create file for writing (overwrite) -/; _create_file (~void name) [~void] - ~void out - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - - asm "mov rcx, r8" # lpFileName - asm "mov rdx, 1" # dwDesiredAccess - asm "shl rdx, 28" # (GENERIC_READ 1 << 31 | GENERIC_WRITE 1 << 30) - asm "mov r8, 3" # dwShareMode - asm "mov r9, 0" # lpSecurityAttributes - - asm "push qword 0" # hTemplateFile - asm "push qword 128" # dwFlagsAndAttributes (NORMAL_FILE = 128) - asm "push qword 2" # dwCreationDisposition (CREATE_ALWAYS = 2) - - # Shadow space - asm "push r9" - asm "push r8" - asm "push rdx" - asm "push rcx" - - # Do call - asm "call CreateFileA" - - # Set out to the returned value - # (The compiler assignes spaces sequentially. We have a ptr in r8) - asm "mov r9, rax" - - return out -;/ - -# Open file for reading or writing (no overwrite) -/; _open_file (~void name) [~void] - ~void out - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - - asm "mov rcx, r8" # lpFileName - asm "mov rdx, 1" # dwDesiredAccess - asm "shl rdx, 28" # (GENERIC_READ 1 << 31 | GENERIC_WRITE 1 << 30) - asm "mov r8, 3" # dwShareMode - asm "mov r9, 0" # lpSecurityAttributes - - asm "push qword 0" # hTemplateFile - asm "push qword 128" # dwFlagsAndAttributes (NORMAL_FILE = 128) - asm "push qword 3" # dwCreationDisposition (OPEN_EXISTING = 3) - - # Shadow space - asm "push r9" - asm "push r8" - asm "push rdx" - asm "push rcx" - - # Do call - asm "call CreateFileA" - - # Set out to the returned value - # (The compiler assignes spaces sequentially. We have a ptr in r8, and a uint in r9) - asm "mov r9, rax" - - return out -;/ - -/; _close_file (~void handle) - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - - asm "mov rcx, r8" # handle - asm "mov rdx, 0" - asm "mov r8, 0" - asm "mov r9, 0" - - # Shadow space - asm "push r9" - asm "push r8" - asm "push rdx" - asm "push rcx" - - asm "call CloseHandle" - - asm "add rsp, 32" -;/ - -/; _read_byte (~void handle, ~uint8 byte, ~int read) [bool] - int out - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - - asm "mov rcx, r8" # handle - asm "mov rdx, r9" # buffer - asm "mov r8, 1" # one byte - asm "mov r9, r10" # read bytes buffer - asm "push qword 0" - - # Shadow space - asm "push r9" - asm "push r8" - asm "push rdx" - asm "push rcx" - - asm "call ReadFile" - - asm "mov r11, rax" - - return out -;/ - -/; _write_byte (~void handle, ~uint8 byte) [int] - int out - - asm "mov rax, rsp" - asm "xor rdx, rdx" - asm "mov rcx, 32" - asm "div rcx" - asm "sub rsp, rdx" - - asm "mov rcx, r8" # handle - asm "mov rdx, r9" # buffer - asm "mov r8, 1" # one byte - asm "mov r9, 0" - asm "push qword 0" - - # Shadow space - asm "push r9" - asm "push r8" - asm "push rdx" - asm "push rcx" - - asm "call WriteFile" - - asm "mov r10, rax" - - return out -;/ - -/; print_alert - _printf(~_alert{0}) -;/ |