From 94a62e8a7b5fcebf94bb0ae7760b9720e8db2715 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Wed, 7 Mar 2018 22:43:54 -0500 Subject: [PATCH] functional graphing script --- initrd/init | 74 ++++++++++++++++++++++++++++++++++++--------------- libinterp.a | Bin 59924 -> 65386 bytes src/flash.c | 2 +- src/script.c | 29 ++++++++++++++++---- 4 files changed, 78 insertions(+), 27 deletions(-) diff --git a/initrd/init b/initrd/init index 56e5212..a250822 100644 --- a/initrd/init +++ b/initrd/init @@ -1,12 +1,10 @@ -func Fx - ret (arg0 * arg0) -end - # graph area -set plotx 0 -set ploty 0 -set plotw 479 -set ploth 319 +set plotx 50 +set ploty 50 +set plotw 380 +set ploth 220 +set cx (plotx + (plotw / 2)) +set cy (ploty + (ploth / 2)) # graph range set xmin (0 - 10) @@ -17,21 +15,55 @@ set ymax 10 set xinc (plotw / (xmax - xmin)) set yinc (ploth / (ymax - ymin)) +color 3 3 3 > mlines + # print axis -line 240 0 240 319 32767 -line 0 160 479 160 32767 -# do function -set x xmin -set cx (plotx + (plotw / 2)) -set cy (ploty + (ploth / 2)) +func makegrid + rect plotx ploty plotw ploth 0 + + 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 - Fx x > y - set y (0 - y) - if ((y > ymin) & (y < ymax)) - pixel (cx + (x * xinc)) (cy + (y * yinc)) 511 + 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) + if ((y > ymin) & (y < ymax)) + pixel (cx + x * xinc) (cy + y * yinc) 511 + end + set x (x + 1 / xinc) + while (x < xmax) end - set x (x + (1 / xinc)) -while (x < xmax) -print "Done." + ppos 0 0 +while (1) diff --git a/libinterp.a b/libinterp.a index a11013cf3c14896093240f36a613d8cb9782b74c..2d0400d5b353ae437de29b69131a42fadc24320f 100644 GIT binary patch delta 21053 zcmc(Hd3+RAy7sB+?xd^fBpnj6(M|Rc2!Vt(kcF^_EMXB)0|XLCAPIyJAyEXRqsGyz zjuOl3HmJDGxNkv4a6uf$WzYeaaUY}39d|G8C@SCcoO(ON`@7%$e)q30zhBq$KJR(o z_pEiQ>YS=v`Ks&FUtK#w;gX`_@e?yLiZb}u|Co_cQZ!y`GcxLYN~v z{m;Mf|I5HhU-5!c|J&c~mnrps`@Qh1Qu>z}5d`1)mr}p|*(FA)t7X$_dz~>iyuPEQ zT{UlLt8HjLQ{(y#4H{QAIJl`}mFAn8S_C(0Y-wLDsG(74qZ4iQ8Cu)w*sN@IVr|~w z_!3$hR=2j-_DnEyjB%?vnp@hNTQ`l|FiQ7N@wm}NW2GO9i;B>ReaG=*$AT4)Ego%m zyM~%M!|c{MY59X@C(YX2bo_^3j}MwXNTkGmQljYWS6%so)RW!`kI(3Q93w!b@PNOd zJ<**WU*r%~B3NcGalhs})|5KK32u+{jGUU$>k!urW6ZI-V@;~Sb=c7i>^;`h^VRXm z1BAO~9IK1iE`4xoQ`(tZn|^9qy3(%n1pC57435=pZL)t%DSG=sW6awRI_3;+9&#*H zri1g394~gHo-;kMhB4i~Aga_36u9mEQ8@*x(XTB0!jl%OR=-kiT@$x49)kbhJWAa! zRqJ%w(b0Lehg}%|rsoR{(VZrk+cV8j%6yuKDa|l6vcfDaknx*3r? z{+nUqw{}vF`2_la^;i1FQlDrYqCW0Y$SKwld#5)qKMk41z79jb`y_q*Pkm%oW)eLI zo<{K#`%~|fa26B^*W(ZsQ_4t?pm-1lQL!f!F0XqGQp^W&h>qS46LSMZ?}*bW4nT(9 zjT94~Mht7UaRFqH+xy4IKnFdJgZK7sig^_8pjO3C#o=HW;=oEATxeA9Enh&gK1T0) zZ(}CPI*p<4ydG+_WgHXkItXI+qJZA}+8`#m%`GtUC9!jpzk)u+S6Gk2S<|Q5Af|S+@)bA3H4&{C0LHUr&c;ud7C9v%?;PK_ zuc5L&Kw#elr^M;@4qtM30eaCli5kB(117#w$^q*rynJPp6Rp>nUpeIz>j&CYP!3v2 z^qovOL#1S}qK0qgXq4Kzlck+SQCavY-)zdAsVf+%O81?Sx(-HR-+VH+q2gV@sj$-J zPFE@O!FL$GWt|MDo2Z7OvUcO>Th46V))UOA_IJ>DEtbGn$9i6bwqU6Et8m~?V*1@X zLDG^99KF6x2iz!~HGppI2kd(Xq=eIu(B$j+8pVvMZBxG8Frm0n`5w|4#?+prd=FFf zS`Bo3WENz|xgTwn^ zUuhZiefh7Dr^VE^!1p!!PPewu<_+3cSq04a&8;ZP0&5Nn8h$4Lx5d^AEL|^$K(&>{ z0)4>oUSqvZ{fBgJP;msB2lRo}3LHl80QG49!AOc_(%`odA>ZvQF26x5UWvT@`S4lZl&2=Z8kj|lQet?l)9pb3ZQA|hiHd15~N%XS)LdJ7|A@8ANeqW{$M6U()iJ7fs z6+D~O%`updJ9r0Oat-#a7x}QBem7$d8Hn^)U%9cI0Y0Evg_cz~IGRl~S+l5M2T7%| z0Oo!bPgoBRT_jVbAM%}UwxZ30Pt$CPc>&T@a2Cl@-81gs?JUnSZRHJSVl4VL5mE6lS{f3+Yufp)cKKC-F~p3d&9GdcX5f@MrusYzS#RpjPdrOD>t z7tFQZ+>YXO2J4v8U|t4tQLut!wa#c)a3^zJqkV1--o%tfP3{g}!jz`4X1jx@FsWIS z$AX2d#9B@M9Q-HCvrdOQsN#9;WS+W7QXS50HIH`q4H2HK(vSGs%md)T$qche%PJT{ z(r&(Nq5hjyJm(e2PLPm_XS;H2>!2Z(am073KKC+tUi(^1_DN1<(_;<;fO@~1r(PD%gUI+S)9P>mAf97nAq4Gis_f&;=NFT6N%jqF=wD4tDF*g)osW4Q{N-Y722*jVpk^_<&R`>);Pi8btS##l3vs2bVI~xZp4ZA zV8%k$7v)nq)hLHCg-$c!#FNU{`JOn1jVX~jp&6!0MtLhYHY#HVXLz$4b*f@1#xgMq z(o`K`AZ~hfyN`_oXjR7eNW15}$4qnSvJ1a8+U1mpOKzXbC}j*4ANE^*q#uU;iFHVY zoAx($4zFezQhSOMn$3hxBu4%^pf}a`cKppV?R(my?Vkrd7@KO$St5UC&LDelQd-)Q zIhk|k%qeOtuc}&dW`&l^mvom`%vsv=ZqjnYUB98Vp=V-Bl-t+5rlYmKmiPBP6~Tpu zy{tUm-WBp^?m~`JV!aodml;!H15;w6*Ts6L#Kfo!DakJT#Za~xW!PVbvci#;?sG_i zL;Y_ZB3<|!o3+2SiHwc^$tE(+`fLJI>corI(gJ&RIbAhL#hldCs35-TMhX&K}@Qw-G z`Nb=bngRI-q_2>4PIuS#*A4bREk+Re*wTb_}zpb2Nn%31TII} zIVX^J+fy>fVA;X>qsJW)0wli=zkSH^W*|Lw10#P--*0zk*2vR)w(ZSY5{`w|hZ^%y zmY5|tLU6obrQmGA#e#J}Go5!*Ko2f2L5G zP)wb~e5LZx^{fepuWnj$1lUN-v-f5Xk4j`C1baTn-eQE8z|BM_uO?!WX%T*g;5NYv z1+NhNqu>LAuL-^{_@&^Ff>A6E@`)D=IT%)BMNuhOCAdZKcY;?4-XM6V;KPCk1YZ(- zOYmQU-v}zVQxLyK^kj-Cas{UeE)c8{Y!Yl2yg~3z!G{HTx6PVP5Uj$zf>=pb%@F&4&+}kj}L4w)5>87Gs6q5zt5&T&2J3-Uy1c(zH zCOBSjn&1M#vjn>Yy9I9$yvvLJX94zz;u*o01>Y0=T<}N1DBSANFF`OvuuyQ4;K_oE z1y>5*F8EMbgwF+!3NFIE88fIATqoE;#3^-y@LPqyDExKd$A!n@=7w=ni0~UHe6sMB z%S5qOuw4>%2)|MA4$=1t|5SK_-^n0ELh8`?Q@6k zGqD(0QIHjN6jy;ghCOmema*G@pdi`aRS?k9P|t3hu`}&=3$m^IF@F_d(n_$qd(u5W zL%-239Fgtmh5iluR7kC;W0jrxae}>LM8LBbS!LMgew1Jr&2rn1jqsa$hT1QT$n(5~ zgtP7MMr51M4Ykt>^E`_%7uMS+6=s_cr`fTeB-x#X0nf*{P;9pUy)fHzXechc_T!N1 zaB-QaL+-yK;Mobb!;Tr5?HPgcAJqDQ9q_c}EA^meZ6gO|Oc*74|UzI?mJrdXx)~&eNBTmyN;B(-hNOOq#fSc zk0l)5*R-rDZN^p{Q)dKba5>sF11q?P=O5X=(CD3iM488$me$4h+CLZNMFsRCwB1{r z*)zBJbtBBYN8y)?UjcrF_?4AmN~!?jo&ln&0D`J=U?zTfkXPWhO|6K*qb?*IjW^IK zeqPLO&8oAE47-KMg>Mb7S+tEp7300O&X9|hsnSs5(2J1`0+1K3b%z(v#!c#D(#06tc` z@MMQP!vHRBpxS>%S`1}Z84eyVS26u=o(i$+afoBE69*L-2YwEI@jS$_`n@Rcz^@U; zltf*3ubisC(p5xtRO!d)=)t~R#N z)gArEU*Md08+6gPzf3Wa;vLkg0P7qBt_#Ga-{@OLf?5|d+HK53SwB#|lWQ?(vEa@%pWvEfjpLHIb%io=~PNNU_Fb#RvG0)Ya@$LPC3Q8mNpfXgH{jqlOcyyhDsTP zs9wXGxrr9HGmBXivEa(XY|5Rfe6qKySZX}X@jlaOt#E%1>X04#}|g)AyM@kaMg* zu$0fe13BM%kxl;m_mD>PzRGH+{N`ggF0f9f?>nc!Yq9kp3)DLi$7;QNZGFJAqQ=@o zefUEkk`+Q;bws};u+JdS!aXbqBLm=rt*1OQ|L2A`vk(F(THzNHBZ7|OAO6J4%T#?R1{i9yOYcZkzFdjtbf9p&$8+O%0IFhX`CP(i~V@Nx_wwfHCRmKpm=vZO%EEv9H4k@5p zmzj^c_nJcjWEYs{Bkgl85OWObCT3;&HSvRCa%tnKaPqsagl6!w5IJo6nNk(8e1bOg z;&3`)1Md%@&=VoYiavErhX*4Zb1I)jtdL=$6~pPXjY+R6?%_kvL;cXR5n+oaT2WkDnPgw z4q+){#v$u;^FG|JhU#dy#N>ppLceD_F4aBb4)K}JTBfbMp(kioV{&;gC-ff8mg`=h z8G4bmTVb}qe?jO~n$?=k$f`QDf+=+-hksM(O{T02Yt|Mz0BdWNCYwVSGpXKu62<8Z z)i9;O{2Rzcp^;2ktuxvcx{kT7(LT3^E~ilVm7~+oJz7wJ*@w)=IJ0gU8ud0q_-PY4(}R_ z!4AniPIAT`o^>dXvGX{>({TpRmbk?hFYQ)GBMz zJ$(MJjyNV3gE72uJVNIXwSK?aO zFH@1Vr^xX9j-L6<(8;s_Pd=<@em_q~uISdTlF))HJ4bIeJjIo6+5Ox^)?V48?BADM zY+t`V+y3R%=>DN~Cq$kz*}{Aw!c@KeHb8Righ^BE%}L{pYNKl5M=5Aw}sqcXP6F zMKEm&lld}T?dpviTQ{isrj;8dMsut7A3M5}EZw@HVV*Y5DXo!xtTsok_S(9=@h zWY|0J@R|YB{_>7AD~Fwfzf0|RD~1}+@o2hT_CG4}%t{BgX)yNKFHXMJUXdQK=j{(9 zL@8YB`u&01$J0Z0#r}Z(W%^Vj+AhwR9LA}r|0;2e$748_cob#+$ay=p96z491C^oo zMK0;bM?iiQCux4_K|WJZ z-zmuEC*LJ_kKluXj|)C0_=@014u;j&qDVr!Gf#S-X4Mfjl%C1d{po+g0Ben3i7oT=8Ibq>_R}`YaGNxLB2CX zK2oq$aHimCf(?Qj1v>>pn7!yfOmMv5G{FUeYopQsG~`=w#4f>Z!99Y{2)-=%p5W(# zKMF?S>|&e*!3@Dd!AXKA3oZ_euu`y9aI4@&g8wdfv*0I!-wW#P4`e(M4-_oGm4dqj zcM~x`KSjhn#9u@oK1cy)fWrMb9ixcglZ00aZx_Br_`Sk+3;$U7m%_7fXTo^-M8vBR zzDoF24iBrHqBtZ5e;4kBUkg7fd<0@K-e@A?VW=q6 zLS~qkwc-mqe#W1c=y@zosarWM!A#Fv;0J{tA%b(sn&~O{kq3$RRSM^_6M2*H7CZjr zZ2RX2e6EeFTkPV?PqOd**Lk=JvhV$KR=7HgOA#10_#rM9bR9lSI3@=DSAv92kqNZp zUoL*=M^%X*|LPErff$dzk$9sZGoMJjJx&07-2QlbL66ryRN%#pz)drglPY1wl0^Qv zrMfD{9yub*QBfa%gjR7^hZ|mp0MD<^`eo}_%t)H8ba6oVU3?)KfJ#b6kJXYa*u3GJ3tS0pJxAu9 zXBcbjxKjq%7cCfQ)YyMmu*sMVKGYazPdMcbJAPrV@vuE%;W*~__{P3^QKs>M{pg~Hj0^1zi^qh_f&*`=UiGB&(SR!Oyo+t8?aQz!wg2mRJx?w! zHqzhhJ=S8BM!sEG-fLtZs~_KcY@JaW{gqcW*>R_B2=a@Ahy?;PN8}Ah48uO}v|eL` zU4MFM_%>{RZLXVGr?Q_tdT9|BH&&|bV_+8^y`(6n_i7yfprXIpVJ1vhS<{Yg8$pdR zhN+a|3ch$V`m2B|ZAQL1AI67I zGsduhPJ2w^V0axh*R?bTOlKXPOiEXt+FRQE?9t95ckk;sGTY9gEpyVECZZ0VMfPRY zN#RcpGp|mm(8z-K50y59XS|X|W5>-Y-JUg0!!R{<#-3J=!@aGJugXemi~h=wW_+~O z`2u9~8pooqXy||~tt{N6=3^**=}Mh~eIVU8i;iw9Qw0WEd)WI-U|BCMa(ZTt^vsEV zIni8;;c={SSnssi$2KfHnq3r0DP2?HXq4kMsWr84(=+byu?@zUG~H_9{>?V2xwMrf z^Yqf-SmUt`aRo2G*}n!Siurdm>2Hgf{y!9R^0zPD%YLPg>xkiUs=B*Zg|qiHUW4Jk zweiy4ts5dEmD!}t*oQ(~H}#yuTQ?Y`rHwd_Ikv{^E!C{_H@2$an?t_d$n+P%W3BW! z*4jTRExnnBog<0p)q^K)xo%_7_!v$b){1~%PwQ;&bU{yw(LzQ%p%obdPc_ib%{ zDYh4MS_nb(?v=GN5>!xY}$ z%xzGUafxs)GH!!gq5f|%eIJ(Q>2{43rQD)JF~u9 zE&;V_5x{rbzp-W(H*0)%mO_n>a`=&m?=HHS+@1B^7Yi}fZN}gR#Glj-`?Mj@r}zsE zSX%FR;N%}=*zc~Gm>UfZcUkX+OFXv=lcCT#!)pq>a{S|V*rl~+mmi|c<@~amA?mGL*x`{@q z{Zd`>EM^?E#-R@Wr$58pbB5)CzyFyy+@IuFdz{mJdh&hwMdsX+ofRKp$A(0H0a|x|98GzJnFZq#+AYo_x2z#QZGU?p>KY zZZAsUPG847CYvPQbUxh*@uzdi*gwT&oIv_$7Hg`x(;l%ZHJ>ANY&tu~f3i+5Nw1{w zEb|fESC^&p;niPd8ut2Csj(a{Gt*zD@qF`f`^r^$VcwlrXIw_r7Lz?X)5v(7K3h$8 zU6qk>DGKZln=ire9W#U5oc=D8Pa(Z#23Iot7npA$O>gzF=X5KuQ~I?6OBrc}uh4gK zImnQm74Bz5UBqY*(sUs9;t3lJorzGyPel{3*YtpruRu0MI0ii*aQz`;4eFD*f#vsS z8oQC6u7_*3mR0&Krn2|c$B)+yj?k=>-_1CgdSB09ZhS|lC2Y_NEvxjulS~G&kJl%~ zd#t`fWF7LKZbsR84Y{#=B=V*|%#3TyWP3?N-qigFRGrT8@dubNV?QbsRl!O@ExKMs0j|`XlUvCQWvyuV+fLCXc0a z57WOEUq{BRP7X7eZZ3R&@daG+A{?Jzkn76+5?>?8hD&7I&m9P9p;u*s&%*~yx9=r4<$Z10Y^q^LxWSl!p? z1?v574%kGFyvVqCRjZ%IF`oVODFmINsdBe6pI=O#U%A7W&9CNeK;A$U+gKYm_*!r! zCi>}!Y3#fg(ont_Y^*g((N3=Je{LVT4EEq0t*-9g?fF=2#TJ=CTUYnD+lM`ZER6LA zw?gp6#xT97(yFPe`^ffT2cb7M2>*Qhu;UE(vd-8Q?%o|9&KK=Q!03;7h|F(R#zy02 z9crB#elwExg7Besn2SX|TN2mOa*Jfzpoa5JuDfB$y`TJ+)%bkj5=pEZRzb(h482s= zJu@GlCUooU&F=7YHGDxV9`xW@PEQ2gC4Mypry*q?Qk-}<8JuX$?n=C9=Esw2C7Ox$ z4~czs!9Zw7P`g$ckBD}0K@qe+Gs;RB?-TWc{8eC&%@bOczflaJG-Eu5T+#K^FE{uSof#?0@H|XK2M~BKnsgLO@=uNtvwK0oBqY=zVH67c zuA^LxCs)R1Grb0THi(;DGzA_TR58@*bI}iwu4`4p7o!NXkra&H4w3NOH<+&94$DqHKJ}WU2CK(Svbame! zE?^p`4*HaePXjuX%PL)>KUMT~xS7(Ez*F|+&4UIE#2IoKTW#mJ_I=H%W1aJ1Pq^?P z{EV(|(akOn=X}_0hw5Y~My=rp*|tc=J|;8tMD3@;cWD>xvn6WQ|BaYd0n67hTm9j zfaSt^{&ho*vGyD5W(~e7K2nA`j!%PAhB>e* zYnf&|YIn9|4bH+H>KJ~yl`TfY&qR)!@%ygl@s@L3xn0OQ@^?Rm%xHA2jZ5rho6^ITvt0*N#**%=;v3JWUFKO!%SRPM za?Ro4a_w6kHLoMHqhiVVjpxsW!gQToE&3Pp_Kor;EG-9hM`cjS6qk2k)cK7a-Hqp$ zcURq5w5;R4^6uB~VL*Jt!NQb9O}}x}GS}?(lU+lfa}CUB99>cISb2G7=@s3j_7ZQ^ z`5oow^G6TY+VdPAlBfppcZFtmcer9_lV+OHJ-O}EqV1*S1Nk|U-L-XpCOfF_tDg*f zVf0_V9=gh2y)D}~WdGZ?Y>ys`_5<6pr$x^GKF?}+x}GzgFOQrPgsmHyyIjs^ zPrD47rkQr~IsXynCCK?RxP+-^l?ccAi+ehUVRY#9rhc61WteQ7KPR2}ML5%|aW+Ia z<2Uu=NO!5ufc`k?yzTcIe!DpQWHH-=n@2YTua;p>elIxx0mD>D=SETj&rLhCbD!rX z&W85;or9yMpaj$1J?6PT7~u@u=flhg%onT>Tt&>p!XzTZR2vZvokZB(F8W@<*{GXu zB))4Qj#BDOA_8wG!tWYl5k3SWV#4J|zO?@r5%x#i*d6fU_V_3ja9E5PhXzf=G5AD@ zI2Nmh#9Wk^2)iH(NxKn5*p(1rw~#mv7fs@L-0u+adgV6ZT}1eENSP%{y%dE@m=Ckm z=S)CJe0<3-!cO z2v@zA}7|LM(T_J@8=w@V?169E;Gz0t`1?1!y-!kc;l*PY@C4CBY8_gBW7e zbMTv})MezTkQXDG1Lt-UvA&FD) zs3GZ}OFGXgwnPmPO0Qc`6YDIg^--`$*BFPC6ZB(0Gzyl}7acB2iQet`=M?c$VOH!3zX!!D|F> z5xiHBXFm(}zTlUF+&!k=kJHi&L*N(sROActRekblg8U+qe7@kRf_${2zC-X_LB5Ab zJ->V;-X{2fpx&^B{(0~)4fKu&(2wRLPZreQuYv20Sm0XfF{(F6`c@)Fcc<`&1^Foe zc=L!RSC|5GRuMVa7C!Nr1gf}H7S&y^5jmteP`{%#F={oNXnGav1q7JOgu zOTnM?&Mpk1FtgEcpkSHcOhL|!Oy_szM9zdn-d+>;2>w}+|H*}VK0gyb7W`H)2Xg}T z;UW?A#w!$yg>wp}L5raNZVjAMDD`^_ewyF{!R3N$1^EuDKL5K!(JjdTb-)033GNYmMv(tQf$8rF>hIgY ze-y4abiwE1+CjT6!5xC13H|`o=f4XV4I1hX+HkIhgcl0V71TStuxk;%P4H48{Qe}k zTl9y8e<56N_`)uS7bReYpXWb>#iCd%_#_b-JumzX;U5WpFX+ZaigpQtS%O7^Rf3C% z$fsI(t?-5zIsey*qD>6W6249NCBknN+$Z>VBKA7J5bnj*j~NXjqF|$i&l6lDc%I;O z{Mwri2Z(SuDEw{Vp9=mc=;h@T_Su3n1?!3M-!A-G;k$*uDg2nAhgVg^2`5s3W0qi% z;2gnIi7;#szEMzLmf`mY;kSw1Zs7+64+(xI_#F}P+_-)t->@1&0g7>sLQNJvPk4>s zTG59EuNM9F!uJZ_FZ>cc;KNA<3+sl I*|k~!2a?Tg*#H0l delta 16946 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 Rc8z%PrFe%u^zOwO{}WCeXl(!h diff --git a/src/flash.c b/src/flash.c index 3027ec0..6b3ee00 100644 --- a/src/flash.c +++ b/src/flash.c @@ -35,7 +35,7 @@ void flash_init(void) SPI2->CR2 |= SPI_CR2_FRXTH; SPI2->CR1 |= SPI_CR1_SPE; - char buf[3]; + char buf[4]; buf[0] = READ; buf[1] = 0; buf[2] = 0; diff --git a/src/script.c b/src/script.c index c7b3614..495e409 100644 --- a/src/script.c +++ b/src/script.c @@ -10,6 +10,8 @@ #include #include +#include + int script_puts(interpreter *it); int script_gets(interpreter *it); int script_delay(interpreter *it); @@ -20,6 +22,7 @@ int script_color(interpreter *it); int script_rand(interpreter *it); int script_getkey(interpreter *it); int script_pixel(interpreter *it); +int script_solve(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, "getkey", script_getkey); inew_cfunc(it, "pixel", script_pixel); + inew_cfunc(it, "solve", script_solve); } int script_puts(interpreter *it) { const char *s = igetarg_string(it, 0); dsp_puts(s); - //dsp_puts("\n"); - //asm("mov r0, %0; svc 2" :: "r" (s)); return 0; } @@ -58,9 +60,10 @@ int script_gets(interpreter *it) } while (s[index] != '\r' && index++ < 23); s[index] = '\0'; - variable *v = igetarg(it, 0); - v->valtype = STRING; - v->value.p = (uint32_t)s; + variable *r = make_vars(0, s); + iret(it, r); + free(s); + free(r); return 0; } @@ -131,3 +134,19 @@ int script_pixel(interpreter *it) igetarg_integer(it, 2)); 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; +}