aboutsummaryrefslogtreecommitdiff
path: root/crates/sloth_vm/src/sloth_std/term.rs
diff options
context:
space:
mode:
authorCody <cody@codyq.dev>2023-04-27 18:42:28 -0500
committerGitHub <noreply@github.com>2023-04-27 18:42:28 -0500
commit86eab2dc7dc2f88e0f56d09ae3b5f36cf8d9706e (patch)
treed312fd5c0981df90aef29a4131703ae89f328268 /crates/sloth_vm/src/sloth_std/term.rs
parent448babe8090c2bcf177c23efd2257a926a1d07f7 (diff)
parentd6b12291db70ea19d37d84226161f964400ae0b2 (diff)
downloadsloth-86eab2dc7dc2f88e0f56d09ae3b5f36cf8d9706e.tar.gz
Merge pull request #5 from slothlang/standard-library
Standard Library
Diffstat (limited to 'crates/sloth_vm/src/sloth_std/term.rs')
-rw-r--r--crates/sloth_vm/src/sloth_std/term.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/crates/sloth_vm/src/sloth_std/term.rs b/crates/sloth_vm/src/sloth_std/term.rs
new file mode 100644
index 0000000..f61321c
--- /dev/null
+++ b/crates/sloth_vm/src/sloth_std/term.rs
@@ -0,0 +1,41 @@
+use crate::native::{self, NativeFunction, NativeFunctionResult};
+use crate::value::Primitive;
+use crate::value::Primitive::Integer;
+use crate::VM;
+
+pub const TERM_CLEAR: NativeFunction = NativeFunction {
+ name: "term$clear",
+ function: |_vm, _args| {
+ print!("\x1b[2J\x1b[H");
+ Ok(Primitive::Empty)
+ },
+ arity: 0,
+ returns_value: false,
+ doc: Some(
+ "NativeFunction term$clear: \n\tdesc: Clears the terminal\n\tExample: `term$clear(); # \
+ Clears the terminal`",
+ ),
+};
+
+fn term_setpos(_vm: &mut VM, args: &[Primitive]) -> NativeFunctionResult {
+ let x = args.get(0).cloned();
+ let y = args.get(1).cloned();
+
+ let (Some(Integer(x)), Some(Integer(y))) = (x, y) else {
+ return Err(native::Error::InvalidArgument);
+ };
+ print!("\x1b[{x};{y}H");
+ Ok(Primitive::Empty)
+}
+
+pub const TERM_SETPOS: NativeFunction = NativeFunction {
+ name: "term$setpos",
+ function: term_setpos,
+ arity: 2,
+ returns_value: false,
+ doc: Some(
+ "NativeFunction term$setpos: \n\targs: x (int), y (int)\n\tdesc: Sets the cursors \
+ position to (<x>, <y>)\n\tExample: `term$setpos(5, 17); # Sets the position of the \
+ cursor to (5, 17)`",
+ ),
+};