diff options
author | Kyle Gunger <kgunger12@gmail.com> | 2023-07-07 15:50:30 -0400 |
---|---|---|
committer | Kyle Gunger <kgunger12@gmail.com> | 2023-07-07 15:50:30 -0400 |
commit | ceaeb8df4d9bf9b518239ea623d813add5a71072 (patch) | |
tree | 7061a06dc67b2832248a36d842b051a408a5a5cd /tnslc/copy.tnsl | |
parent | 34066553843ee869d71f24646eea1bac319225d6 (diff) |
Returns inside of complex operations
Diffstat (limited to 'tnslc/copy.tnsl')
-rw-r--r-- | tnslc/copy.tnsl | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tnslc/copy.tnsl b/tnslc/copy.tnsl new file mode 100644 index 0000000..90e1126 --- /dev/null +++ b/tnslc/copy.tnsl @@ -0,0 +1,41 @@ +:include "c_wrap.tnsl" +:include "vector.tnsl" +:include "utils.tnsl" + + +{}uint8 wrong_args = "Usage: copy [from] [to]" +{}uint8 write_one = "\0\n\0" + +# Proof of concept copy program +/; main (int argc, ~~uint8 argv) [int] + asm "mov r8, rcx" + asm "mov r9, rdx" + + /; if (argc < 3) + _printf(~wrong_args{0}) + return 1 + ;/ + + ~void read_handle = _open_file(argv{1}) + ~void write_handle = _create_file(argv{2}) + + _print_num(~_dec{0}, read_handle) + _print_num(~_dec{0}, write_handle) + + uint8 buf = 0 + int read_count = 0 + int tries = 0 + _read_byte(read_handle, ~buf, ~read_count) + /; loop (_read_byte(read_handle, ~buf, ~read_count)) + /; if (read_count == 0) + break + ;/ + _write_byte(write_handle, ~buf) + read_count = 0 + ;/ + + _close_file(read_handle) + _close_file(write_handle) + + return 0 +;/
\ No newline at end of file |