functional graphing script

master
Clyne Sullivan 7 years ago
parent a774e33cef
commit 94a62e8a7b

@ -1,12 +1,10 @@
func Fx
ret (arg0 * arg0)
end
# graph area # graph area
set plotx 0 set plotx 50
set ploty 0 set ploty 50
set plotw 479 set plotw 380
set ploth 319 set ploth 220
set cx (plotx + (plotw / 2))
set cy (ploty + (ploth / 2))
# graph range # graph range
set xmin (0 - 10) set xmin (0 - 10)
@ -17,21 +15,55 @@ set ymax 10
set xinc (plotw / (xmax - xmin)) set xinc (plotw / (xmax - xmin))
set yinc (ploth / (ymax - ymin)) set yinc (ploth / (ymax - ymin))
color 3 3 3 > mlines
# print axis # print axis
line 240 0 240 319 32767
line 0 160 479 160 32767
# do function func makegrid
set x xmin rect plotx ploty plotw ploth 0
set cx (plotx + (plotw / 2))
set cy (ploty + (ploth / 2)) set x plotx
do
line x ploty x (ploty + ploth) mlines
set x (x + xinc)
while (x <= plotx + plotw)
set y ploty
do
line plotx y (plotx + plotw) y mlines
set y (y + yinc)
while (y <= ploty + ploth)
line cx ploty cx (ploty + ploth) 32767
line plotx cy (plotx + plotw) cy 32767
end
#
# BIG LOOP - ask for equ, graph it
#
makegrid
set clearcmd "clear"
do do
Fx x > y rect 0 0 480 40
print "f(x) = "
gets > Fx
if (Fx == clearcmd)
makegrid
else
# do function
set x xmin
do
solve Fx > y
set y (0 - y) set y (0 - y)
if ((y > ymin) & (y < ymax)) if ((y > ymin) & (y < ymax))
pixel (cx + (x * xinc)) (cy + (y * yinc)) 511 pixel (cx + x * xinc) (cy + y * yinc) 511
end
set x (x + 1 / xinc)
while (x < xmax)
end end
set x (x + (1 / xinc))
while (x < xmax)
print "Done." ppos 0 0
while (1)

Binary file not shown.

@ -35,7 +35,7 @@ void flash_init(void)
SPI2->CR2 |= SPI_CR2_FRXTH; SPI2->CR2 |= SPI_CR2_FRXTH;
SPI2->CR1 |= SPI_CR1_SPE; SPI2->CR1 |= SPI_CR1_SPE;
char buf[3]; char buf[4];
buf[0] = READ; buf[0] = READ;
buf[1] = 0; buf[1] = 0;
buf[2] = 0; buf[2] = 0;

@ -10,6 +10,8 @@
#include <stack.h> #include <stack.h>
#include <keypad.h> #include <keypad.h>
#include <string.h>
int script_puts(interpreter *it); int script_puts(interpreter *it);
int script_gets(interpreter *it); int script_gets(interpreter *it);
int script_delay(interpreter *it); int script_delay(interpreter *it);
@ -20,6 +22,7 @@ int script_color(interpreter *it);
int script_rand(interpreter *it); int script_rand(interpreter *it);
int script_getkey(interpreter *it); int script_getkey(interpreter *it);
int script_pixel(interpreter *it); int script_pixel(interpreter *it);
int script_solve(interpreter *it);
void script_loadlib(interpreter *it) void script_loadlib(interpreter *it)
{ {
@ -33,14 +36,13 @@ void script_loadlib(interpreter *it)
inew_cfunc(it, "rand", script_rand); inew_cfunc(it, "rand", script_rand);
inew_cfunc(it, "getkey", script_getkey); inew_cfunc(it, "getkey", script_getkey);
inew_cfunc(it, "pixel", script_pixel); inew_cfunc(it, "pixel", script_pixel);
inew_cfunc(it, "solve", script_solve);
} }
int script_puts(interpreter *it) int script_puts(interpreter *it)
{ {
const char *s = igetarg_string(it, 0); const char *s = igetarg_string(it, 0);
dsp_puts(s); dsp_puts(s);
//dsp_puts("\n");
//asm("mov r0, %0; svc 2" :: "r" (s));
return 0; return 0;
} }
@ -58,9 +60,10 @@ int script_gets(interpreter *it)
} while (s[index] != '\r' && index++ < 23); } while (s[index] != '\r' && index++ < 23);
s[index] = '\0'; s[index] = '\0';
variable *v = igetarg(it, 0); variable *r = make_vars(0, s);
v->valtype = STRING; iret(it, r);
v->value.p = (uint32_t)s; free(s);
free(r);
return 0; return 0;
} }
@ -131,3 +134,19 @@ int script_pixel(interpreter *it)
igetarg_integer(it, 2)); igetarg_integer(it, 2));
return 0; return 0;
} }
int script_solve(interpreter *it)
{
const char *expr = igetarg_string(it, 0);
int len = strlen(expr);
char *buf = (char *)malloc(len + 2);
strcpy(buf, expr);
buf[len] = ')';
buf[len + 1] = '\0';
variable *r = idoexpr(it, buf);
if (r == 0)
r = make_varn(0, 0.0f);
iret(it, r);
free(r);
return 0;
}

Loading…
Cancel
Save