diff options
Diffstat (limited to 'src/script.c')
-rw-r--r-- | src/script.c | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/src/script.c b/src/script.c index 51a3bb7..5ba0c08 100644 --- a/src/script.c +++ b/src/script.c @@ -39,9 +39,11 @@ int script_puts(instance *it); int script_putchar(instance *it); int script_gets(instance *it); +int script_getf(instance *it); int script_delay(instance *it); int script_rect(instance *it); int script_ppos(instance *it); +int script_rpos(instance *it); int script_line(instance *it); int script_color(instance *it); int script_rand(instance *it); @@ -53,6 +55,8 @@ int script_program(instance *it); int script_free(instance *it); int math_sin(instance *it); +int math_cos(instance *it); +int math_tan(instance *it); void script_loadlib(instance *it) { @@ -61,8 +65,10 @@ void script_loadlib(instance *it) inew_cfunc(it, "print", script_puts); inew_cfunc(it, "putchar", script_putchar); inew_cfunc(it, "gets", script_gets); + inew_cfunc(it, "getf", script_getf); inew_cfunc(it, "getkey", script_getkey); inew_cfunc(it, "ppos", script_ppos); + inew_cfunc(it, "rpos", script_rpos); inew_cfunc(it, "pixel", script_pixel); inew_cfunc(it, "line", script_line); @@ -78,6 +84,8 @@ void script_loadlib(instance *it) inew_cfunc(it, "freemem", script_free); inew_cfunc(it, "sin", math_sin); + inew_cfunc(it, "cos", math_cos); + inew_cfunc(it, "tan", math_tan); } int math_sin(instance *it) @@ -88,6 +96,22 @@ int math_sin(instance *it) return 0; } +int math_cos(instance *it) +{ + variable *n = igetarg(it, 0); + variable *v = make_varf(0, cosf(n->value.f)); + ipush(it, (uint32_t)v); + return 0; +} + +int math_tan(instance *it) +{ + variable *n = igetarg(it, 0); + variable *v = make_varf(0, tanf(n->value.f)); + ipush(it, (uint32_t)v); + return 0; +} + int script_menu(instance *it) { char listbuf[4]; @@ -113,13 +137,15 @@ int script_menu(instance *it) return 0; } +#include <fat32.h> + int script_filemenu(instance *it) { char listbuf[4]; char *fname; strncpy(listbuf, " : \0", 4); dsp_puts("Choose a file: \n"); - for (unsigned int i = 0; (fname = initrd_getname(i)) != 0; i++) { + for (unsigned int i = 0; (fname = /*initrd*/fat_getname(i)) != 0; i++) { listbuf[0] = i + '0'; dsp_puts(listbuf); dsp_puts(fname); @@ -163,6 +189,18 @@ int script_putchar(instance *it) return 0; } +int script_getf(instance *it) +{ + if (script_gets(it) != 0) + return -1; + + variable *s = (variable *)ipop(it); + s->value.f = strtof((char *)s->value.p, 0); + s->type = NUMBER; + ipush(it, (uint32_t)s); + return 0; +} + int script_gets(instance *it) { char *s = malloc(64); @@ -261,8 +299,14 @@ int script_line(instance *it) int script_ppos(instance *it) { - dsp_cpos(0, 0); - dsp_coff(igetarg_integer(it, 0), igetarg_integer(it, 1)); + dsp_coff(0, 0); + dsp_cpos(igetarg_integer(it, 0), igetarg_integer(it, 1)); + return 0; +} + +int script_rpos(instance *it) +{ + dsp_spos(igetarg_integer(it, 0), igetarg_integer(it, 1)); return 0; } @@ -305,7 +349,7 @@ extern instance *load_program(const char *name); int script_program(instance *it) { int initrdOffset = (int)igetarg(it, 0)->value.f; - char *name = initrd_getname(initrdOffset); + char *name = fat_getname(initrdOffset); dsp_rect(0, 0, 480, 300, 0); dsp_cpos(0, 0); |