summaryrefslogtreecommitdiff
path: root/tnslc/copy.tnsl
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2023-07-07 15:50:30 -0400
committerKyle Gunger <kgunger12@gmail.com>2023-07-07 15:50:30 -0400
commitceaeb8df4d9bf9b518239ea623d813add5a71072 (patch)
tree7061a06dc67b2832248a36d842b051a408a5a5cd /tnslc/copy.tnsl
parent34066553843ee869d71f24646eea1bac319225d6 (diff)
Returns inside of complex operations
Diffstat (limited to 'tnslc/copy.tnsl')
-rw-r--r--tnslc/copy.tnsl41
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