]> git.lizzy.rs Git - uwu-nolambda.git/blob - io.c
dbfda7c1f9bf5e84570231d79ebf3a54f62f11a6
[uwu-nolambda.git] / io.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "linenoise/linenoise.h"
5 #include "common/err.h"
6 #include "api/vm.h"
7 #include "api/str.h"
8
9 UwUVMValue uwu_print(UwUVMArgs *args)
10 {
11         if (args->num != 1)
12                 error("error: nolambda:io:print requires exactly one argument\n");
13
14         UwUVMValue value = uwuvm_get_arg(args, 0);
15
16         char *str = uwustr_get(value);
17         printf("%s\n", str);
18         free(str);
19
20         return uwuvm_clone_value(value);
21 }
22
23 UwUVMValue uwu_scan(UwUVMArgs *args)
24 {
25         char *prompt = NULL;
26
27         if (args->num == 0)
28                 prompt = strdup("");
29         else if (args->num == 1)
30                 prompt = uwustr_get(uwuvm_get_arg(args, 0));
31         else
32                 error("error: nolambda:io:scan requires exactly one or zero arguments\n");
33
34         char *return_string = linenoise(prompt);
35         UwUVMValue return_value = uwustr_create(return_string);
36
37         linenoiseFree(return_string);
38         free(prompt);
39
40         return return_value;
41 }
42
43 #include "linenoise/linenoise.c"