From 424f394432d1ece255f8b80cac47a9ae25824520 Mon Sep 17 00:00:00 2001 From: tony Date: Mon, 15 Jun 2015 22:34:54 +0800 Subject: [PATCH] *fixed a wrong token position marking issue with interactive mode --- HISTORY | 383 ++++++++++++++++++++++--------------------- core/my_basic.c | 26 +-- output/my_basic.exe | Bin 67072 -> 67072 bytes output/my_basic_mac | Bin 87216 -> 87152 bytes resource/my_basic.rc | 154 ++++++++--------- shell/main.c | 19 ++- 6 files changed, 298 insertions(+), 284 deletions(-) diff --git a/HISTORY b/HISTORY index 9ff9415..ac0e723 100755 --- a/HISTORY +++ b/HISTORY @@ -1,190 +1,193 @@ -May. 6 2015 -Removed redundant EOS tokens -Polished data precision related macros - -May. 5 2015 -Added string type support for non-simple array -Fixed a memory leak when storing strings to a non-string array -Polished data precision related macros - -Apr. 27 2015 -Added code line inserting/removing to interpreter shell -Changed mb_dispose_value as public - -Apr. 23 2015 Version 1.1 -Added debug APIs -Added (nestable) multi line IF statement support - -Apr. 15 2015 -Added mb_pop_usertype, mb_push_usertype to support user defined type -Polished code -Polished document - -Apr. 13 2015 -Added mixed integer/float array support -Added warning prompt when passing strings to maths functions -Fixed a memory leak when storing strings in an array -Polished the interpreter commands - -Apr. 11 2015 -Moved struct mb_interpreter_t from my_basic.h to my_basic.c -Added an mb_has_arg interface to tell whether there is any more argument -Added an MB_ENABLE_SOURCE_TRACE macro to enable or disable source tracing -Disposed parsing context at runtime to reduce memory occupation - -Apr. 10 2015 -Improved compatibility with PellesC -Fixed a double precision float parsing bug on all 32bit systems, thanks to Pito for pointing it out -Fixed an exponential number parsing bug, thanks to Pito for pointing it out -Fixed a crash bug when a script begins with a meaningless negtive number - -Mar. 25 2015 -Changed _strupr macro to mb_strupr function -Added an mb_memdup function -Fixed an intermediate value disposing more than once bug - -Dec. 17 2014 -Fixed a calculation crash bug -Fixed a memory leak with intermediate value - -Dec. 16 2014 -Fixed a negative calculation bug in a function argument - -Dec. 9 2014 -Improved compatibility with BCB - -May. 25 2014 -Added an mb_set_inputer function which allows the user to specify an INPUT reader, thanks to Michael P. Welch for suggestion -Added an mb_remove_reserved_func function which allows the user to disable/remove a reserved statement - -May. 22 2014 -Fixed a crash bug when missing colon in a combined line, thanks to Michael P. Welch for pointing it out -Fixed a missing lexical cursor stepping bug in INPUT function - -Mar. 17 2014 -Added an XCode project -Added a safe stdin reader function mb_gets -Fixed a crash bug in INPUT function - -Feb. 17 2014 -Added mod by zero processing - -Feb. 16 2014 -Fixed a crash bug in _core_for, thanks to mummylauncher for pointing it out - -Jul. 19 2013 -Fixed a crash bug in _execute_statement, thanks to Jon Mayo for pointing it out - -Feb. 25 2013 -Fixed a cross routine multi-statement execution bug, thanks to Bruce Kendall for pointing it out -Fixed a memory corruption bug when loading a script file - -Jan. 9 2013 -Fixed a crash bug when using EDIT command - -Dec. 14 2012 -Added an invalid expression error handling -Added an out of memory error handling - -Dec. 5 2012 -Fixed a minus calculation bug, thanks to Bill Walker for pointing it out - -Nov. 14 2012 -Fixed a cross routine RETURN bug, thanks to Bruce Kendall for pointing it out - -Sep. 12 2012 -Fixed a bug in ASC -Fixed a label parsing, jumping bug, thanks to Ahmad Hawwash for pointing above two issues out -Fixed a crash bug in IF statement -Added divide by zero processing -Added calculation error raising - -Sep. 1 2012 -Fixed a redisposing bug when retrieving a string argument, thanks to Ahmad Hawwash for pointing it out -Fixed a memory leak after retrieving a composited string argument - -Aug. 29 2012 -Modified an odd string comparison behavior, thanks to Matthias Nott for testing it out -Added a warning system, disabled warning as default -Improved compatibility with GCC - -Aug. 3 2012 -Implemented memory occupation statistics -Improved compatibility on 64bit systems -Fixed some warnings under a stricter mode - -Jul. 21 2012 -Added a compatibility macro for PRINT a newline -Added an mb_attempt_func_end C API -Fixed a unary minus symbol parsing bug - -Jul. 19 2012 -Fixed a crash bug caused by a mistake in calculation priority table, thanks to Bruce Kendall for pointing it out - -Jul. 10 2012 -Implemented KILL command -Fixed a negative calculation bug -Added an invalid identifier usage error handling -Avoided some warnings on gcc - -Jul. 5 2012 -Implemented LIST, EDIT, LOAD, SAVE commands - -Jul. 4 2012 -Fixed some crash bugs -Fixed some memory leaks - -Jul. 3 2012 -Modified/added math functions: FLOOR, CEIL, FIX -Fixed an INPUT type issue -Changed float number formatting from using "%f" to "%g" in PRINT, thanks to Bruce Kendall for pointing above three issues out -Refactored the way to load a script file -Done several small improvements - -Jun. 29 2012 -Fixed a newline mistake in PRINT - -Jun. 29 2012 -Implemented customizable print functor -Improved PRINT statement -Fixed an infinity loop bug in RND function -Fixed some crash bugs - -Jun. 28 2012 -Fixed a cross routine RETURN bug, thanks to Bruce Kendall for pointing it out -Fixed some memory leaks -Refactored error position informing - -Jun. 18 2012 -Implemented user extended abort, thanks to Bruce Kendall for giving suggestion - -Apr. 30 2012 -Compress number to integer if necessary - -Apr. 27 2012 -Fixed a string connecting crash bug, thanks to Ahmad Hawwash for pointing it out -Improved portability on gcc - -Aug. 3 2011 -Fixed hashtable removing bug - -Jun. 18 2011 -Fixed some mistakes -Allowed underline character appear in an identifier - -Apr. 15 2011 -Fixed garbage collection and _label_t disposing bugs - -Apr. 14 2011 -Fixed some list / comparison operator bugs - -Feb. 15 2011 -Improved portability on Cocoa -Improved portability on VC++ 6.0 -Fixed a suspend / resume bug - -Feb. 9 2011 -Fixed struct mb_interpreter_t declaration warnings on gcc - -Feb. 1 2011 Version 1.0 -First release. +Jun. 15 2015 +Fixed a wrong token position marking issue with interactive mode, thanks to Daniel Haensse for pointing it out + +May. 6 2015 +Removed redundant EOS tokens +Polished data precision related macros + +May. 5 2015 +Added string type support for non-simple array +Fixed a memory leak when storing strings to a non-string array +Polished data precision related macros + +Apr. 27 2015 +Added code line inserting/removing to interpreter shell +Changed mb_dispose_value as public + +Apr. 23 2015 Version 1.1 +Added debug APIs +Added (nestable) multi line IF statement support + +Apr. 15 2015 +Added mb_pop_usertype, mb_push_usertype to support user defined type +Polished code +Polished document + +Apr. 13 2015 +Added mixed integer/float array support +Added warning prompt when passing strings to maths functions +Fixed a memory leak when storing strings in an array +Polished the interpreter commands + +Apr. 11 2015 +Moved struct mb_interpreter_t from my_basic.h to my_basic.c +Added an mb_has_arg interface to tell whether there is any more argument +Added an MB_ENABLE_SOURCE_TRACE macro to enable or disable source tracing +Disposed parsing context at runtime to reduce memory occupation + +Apr. 10 2015 +Improved compatibility with PellesC +Fixed a double precision float parsing bug on all 32bit systems, thanks to Pito for pointing it out +Fixed an exponential number parsing bug, thanks to Pito for pointing it out +Fixed a crash bug when a script begins with a meaningless negtive number + +Mar. 25 2015 +Changed _strupr macro to mb_strupr function +Added an mb_memdup function +Fixed an intermediate value disposing more than once bug + +Dec. 17 2014 +Fixed a calculation crash bug +Fixed a memory leak with intermediate value + +Dec. 16 2014 +Fixed a negative calculation bug in a function argument + +Dec. 9 2014 +Improved compatibility with BCB + +May. 25 2014 +Added an mb_set_inputer function which allows the user to specify an INPUT reader, thanks to Michael P. Welch for suggestion +Added an mb_remove_reserved_func function which allows the user to disable/remove a reserved statement + +May. 22 2014 +Fixed a crash bug when missing colon in a combined line, thanks to Michael P. Welch for pointing it out +Fixed a missing lexical cursor stepping bug in INPUT function + +Mar. 17 2014 +Added an XCode project +Added a safe stdin reader function mb_gets +Fixed a crash bug in INPUT function + +Feb. 17 2014 +Added mod by zero processing + +Feb. 16 2014 +Fixed a crash bug in _core_for, thanks to mummylauncher for pointing it out + +Jul. 19 2013 +Fixed a crash bug in _execute_statement, thanks to Jon Mayo for pointing it out + +Feb. 25 2013 +Fixed a cross routine multi-statement execution bug, thanks to Bruce Kendall for pointing it out +Fixed a memory corruption bug when loading a script file + +Jan. 9 2013 +Fixed a crash bug when using EDIT command + +Dec. 14 2012 +Added an invalid expression error handling +Added an out of memory error handling + +Dec. 5 2012 +Fixed a minus calculation bug, thanks to Bill Walker for pointing it out + +Nov. 14 2012 +Fixed a cross routine RETURN bug, thanks to Bruce Kendall for pointing it out + +Sep. 12 2012 +Fixed a bug in ASC +Fixed a label parsing, jumping bug, thanks to Ahmad Hawwash for pointing above two issues out +Fixed a crash bug in IF statement +Added divide by zero processing +Added calculation error raising + +Sep. 1 2012 +Fixed a redisposing bug when retrieving a string argument, thanks to Ahmad Hawwash for pointing it out +Fixed a memory leak after retrieving a composited string argument + +Aug. 29 2012 +Modified an odd string comparison behavior, thanks to Matthias Nott for testing it out +Added a warning system, disabled warning as default +Improved compatibility with GCC + +Aug. 3 2012 +Implemented memory occupation statistics +Improved compatibility on 64bit systems +Fixed some warnings under a stricter mode + +Jul. 21 2012 +Added a compatibility macro for PRINT a newline +Added an mb_attempt_func_end C API +Fixed a unary minus symbol parsing bug + +Jul. 19 2012 +Fixed a crash bug caused by a mistake in calculation priority table, thanks to Bruce Kendall for pointing it out + +Jul. 10 2012 +Implemented KILL command +Fixed a negative calculation bug +Added an invalid identifier usage error handling +Avoided some warnings on gcc + +Jul. 5 2012 +Implemented LIST, EDIT, LOAD, SAVE commands + +Jul. 4 2012 +Fixed some crash bugs +Fixed some memory leaks + +Jul. 3 2012 +Modified/added math functions: FLOOR, CEIL, FIX +Fixed an INPUT type issue +Changed float number formatting from using "%f" to "%g" in PRINT, thanks to Bruce Kendall for pointing above three issues out +Refactored the way to load a script file +Done several small improvements + +Jun. 29 2012 +Fixed a newline mistake in PRINT + +Jun. 29 2012 +Implemented customizable print functor +Improved PRINT statement +Fixed an infinity loop bug in RND function +Fixed some crash bugs + +Jun. 28 2012 +Fixed a cross routine RETURN bug, thanks to Bruce Kendall for pointing it out +Fixed some memory leaks +Refactored error position informing + +Jun. 18 2012 +Implemented user extended abort, thanks to Bruce Kendall for giving suggestion + +Apr. 30 2012 +Compress number to integer if necessary + +Apr. 27 2012 +Fixed a string connecting crash bug, thanks to Ahmad Hawwash for pointing it out +Improved portability on gcc + +Aug. 3 2011 +Fixed hashtable removing bug + +Jun. 18 2011 +Fixed some mistakes +Allowed underline character appear in an identifier + +Apr. 15 2011 +Fixed garbage collection and _label_t disposing bugs + +Apr. 14 2011 +Fixed some list / comparison operator bugs + +Feb. 15 2011 +Improved portability on Cocoa +Improved portability on VC++ 6.0 +Fixed a suspend / resume bug + +Feb. 9 2011 +Fixed struct mb_interpreter_t declaration warnings on gcc + +Feb. 1 2011 Version 1.0 +First release. diff --git a/core/my_basic.c b/core/my_basic.c index 1c92653..bae9dd3 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -78,7 +78,7 @@ extern "C" { /** Macros */ #define _VER_MAJOR 1 #define _VER_MINOR 1 -#define _VER_REVISION 54 +#define _VER_REVISION 55 #define _MB_VERSION ((_VER_MAJOR * 0x01000000) + (_VER_MINOR * 0x00010000) + (_VER_REVISION)) /* Uncomment this line to treat warnings as error */ @@ -307,6 +307,9 @@ typedef struct _parsing_context_t { _object_t* last_symbol; _parsing_state_e parsing_state; _symbol_state_e symbol_state; + int parsing_pos; + unsigned short parsing_row; + unsigned short parsing_col; } _parsing_context_t; /* Running context */ @@ -3314,6 +3317,7 @@ int mb_open(struct mb_interpreter_t** s) { context = (_parsing_context_t*)mb_malloc(sizeof(_parsing_context_t)); memset(context, 0, sizeof(_parsing_context_t)); + context->parsing_row = 1; (*s)->parsing_context = context; running = (_running_context_t*)mb_malloc(sizeof(_running_context_t)); @@ -3413,6 +3417,7 @@ int mb_reset(struct mb_interpreter_t** s, bool_t clrf/* = false*/) { (*s)->parsing_context = context; } memset(context, 0, sizeof(_parsing_context_t)); + context->parsing_row = 1; ast = (*s)->ast; _ls_foreach(ast, _destroy_object); @@ -3799,8 +3804,6 @@ int mb_load_string(struct mb_interpreter_t* s, const char* l) { char ch = 0; int status = 0; int i = 0; - unsigned short row = 1; - unsigned short col = 0; unsigned short _row = 0; unsigned short _col = 0; char wrapped = '\0'; @@ -3814,16 +3817,16 @@ int mb_load_string(struct mb_interpreter_t* s, const char* l) { ch = l[i]; if((ch == '\n' || ch == '\r') && (!wrapped || wrapped == ch)) { wrapped = ch; - ++row; - col = 0; + ++context->parsing_row; + context->parsing_col = 0; } else { wrapped = '\0'; - ++col; + ++context->parsing_col; } - status = _parse_char(s, ch, i, _row, _col); + status = _parse_char(s, ch, context->parsing_pos, _row, _col); result = status; if(status) { - _set_error_pos(s, i, _row, _col); + _set_error_pos(s, context->parsing_pos, _row, _col); if(s->error_handler) { (s->error_handler)(s, s->last_error, (char*)mb_get_error_desc(s->last_error), s->last_error_pos, @@ -3834,11 +3837,12 @@ int mb_load_string(struct mb_interpreter_t* s, const char* l) { goto _exit; } - _row = row; - _col = col; + _row = context->parsing_row; + _col = context->parsing_col; ++i; + ++context->parsing_pos; }; - status = _parse_char(s, MB_EOS, i, row, col); + status = _parse_char(s, MB_EOS, context->parsing_pos, context->parsing_row, context->parsing_col); _exit: context->parsing_state = _PS_NORMAL; diff --git a/output/my_basic.exe b/output/my_basic.exe index f78645e1a0044cc5d1905c8a264a98cd6aec4f52..120e0224670e3bbae4bdf9a12b7fcf4222da10a0 100755 GIT binary patch delta 7308 zcmd^Ddt6k-+dp$ykPzKfxuvL>s0gUL=j{FLI{r($Fl;)Yh~lLj|MueP$2XtMteF|GRu1zVpmH^POj&xt*E( zMY8-wvJw+rPc5|!aIi`FALK;;R^2S(gC5n{px<5CyV?#YKIqUUP^Q34T?ss zQEQ4i3OR$N+@uQ3pgAZO??yU03N7u{aT)DTrys!qbWfCuRdfzY7q`=C2;ZO;`(zhe zIckUVl)SJ2syiDLBX}x1*V#}u8gQnw;l>!icbyFp>3|a;e>~twXG7IQz&D)@wQmC^ zLA?yXIA=rpBtQ=ACIhliZyI2Xv!UcY!0yfl$`07c*^o6Gu!FOqJePM+*{z)owt0}@ z!)hot*xZNSP)GvX=Fe^Q%G8Eo>yx}w4?3ezq5f> zW{8n(C(*QGgjlS2AE8>YRr~gIN8+ixsLfv5_zYiR-$A(RA@z@leD@A27uuA``(|yeaaDzjsJ$%vs{b9y4XA76(Vq zCS*&ZchIO*H1-Kc=sr&C`wqQev3R2IbYC=5WYnkWU@`}@gJ9y5xfUqACUd?os}<$C z!-&o;6wl~eBYIkac-f#qwC)434c7|MeVt;6NrTW6aj+SY@VsGp>O)hx__YD=S=U2c zT>S%`zREhDS`CWl+e`w*S+dDgYGq<0QQVW}P?UEbWw_?AfQ*glU_Cj?m4zP+$PB3D z8_Dp<)5`Idf-#I9SVG3| z*uV}n9q=x$ezgnw1=qeB=BS=bQNr!fCsTy`1@{$irV7W?ge(PnMtI76=Spa-OsIoS zQm)r)U9Z>c<=HbAhUPyF$o9>D+Q#l*_+7T#cs08<^Ie8#{zqVTFBlRlAig3=kG+0~=ioA;o_0_84ti1r9d@PE6z3By|uj{PTRjBo;%bqU77Nh?tV z-ktO*vfyR6T-ovI`8?9J~7w3*bW%yohf0U2=%uSB+uKs9&E~xjluM`HzoU>(wB0E&dDwMLI z;+DDHQ7}F|H?ywANEdNp_Yu@1^36IeqJU*fp}wHFQ7k@*N?un1V7E|iAr%d z$IECF<{W&`xP4Hm9@#^MgbE?$oG?h{egiLY1ao?Cf#-i0^pLXTgUrr9NNqN2Y zd-Luce$jZ^Gvjs7jGv0)EoVnW{~#6B`SnlII98w`&V3WJQm& zH{KhONh~tS$t)RtCN{Tk^-_|G14;j2?LWR3^P>48ytkl3r!dJtc>S7?aLa{YO^p>! zjbXnU>HZ8~FTicQ=X*cWz*%=+>?qWPk{tUWVW7V&;Z||N4d^H-Ymd(sM$vc6@T0=P zk;EjEd?83>_xCnC*1pNHv+mjW?V|DMB0gPo4!tFQIDai7^LfFrn8YunCE!A2I6A)gi>86+QBE+0|uHmL9s!5nk>sKoS##H5#)B91*{ zy4uWS!rd0_q5CLt^`eBBgGZ!l_n)gqfm=-ueBE3v9QQAN6uSZz0qOX8$sYCr()%00 z(qw<2*}m~G9>4gT*cFGQ3Z(geLU_Zwmb@W6{;a|wJbuX!u%P;vWW@G3C{=qtFw=qT z#lQ#$v5&AZcveh{$V`aAXRtK}CO7f;d8TCGf060k170RebPJ}KXnc3MH3sH%OQwF_ z#pCVDv%yN*?`0a$y9HCf-uR^z))<)REt%xr_4zzgjOb;0*sBH8^zhzxt6irtIICE_j#A^Gx^3yiA9Cv|#$U2X-yB#J>IMzfpY( z4ZIlgv!8mYwnVm|S{eyd)|fs2##?B0SY2WPH|3+c9-Fxe+d=NBxr z3+#99DfsxRzGy10T{S$YV3*fmHcZl{Wmvr%k6z8tU+uz6SC65;--&-;9f~6HOKZ&Z zon3g)8kYWXC!V*aqx`^hk0;HO9jOp%Q{7{_;jL@pI{dW5OPAJ6ch;@Kjca-%9qzd{ zIW)~%Dlej7rw5BLn{XNSt&MomS|iH9m23OA`vxq$eY8*Wmc`?j*Tn?+PlGQiZ$kpq z@~O0?x_9EY)}_IDShg+2Zw>w6*xE?l1wtID>(*bPJzMdG4Z&y-zP+I@dKCwi{u#!X!8d7Sks1K}4zd*w zgI=F^9~66S?1RF{`6@3Q2AyiU5WGr~aGp-tG_~pCK-zA)I8=}%Ie+DaM@Uk-IP4)w z>Ef`NBujC-%~v{n3SY|J?b)ho@HIzc$B_-D1nouqzpG7!8!cVOhz`pb~Y2 z1lGL?@7&V4H6I356O~2fM@n$lk3;bHJJ3G4%ee&<_3MuueLjBM*chBHw{(7ANhlMv}f*O*kFCoX!!I-I;s&@#(C9{0MBJRa$uLsjyTiUYiK z>&d*apNEX72*{9bIY+5$QYKo)>32Pp;F0df%J9LODzzd^#l!B`L*$as)0 zKpF(%2h#WxGz4-V<~|4P-J%;m;0=S`UfCAQwUIgZQ~ADgwj^G5};S zNb_&a3BEZ=-8{}y_se-|^r?UHnhTrX+~6I8BBk4Y1R)y{{F=)GA*~SS{db9aFsdB)Q%{)~BShj_yPG5!xwW^PK>KrlH3S@waPk5?^ z;5MGR23P`k1F&j4EFi$z9ng1zJ3&bPE}p6fw81W2dI|F2g>VZXdE?p!NL~kb0g~6j zGC=aEwV&jV2gfcsfM6m|9fJ(=hE)zo-h{|c30MI-dA~YMDoh4P0m%ba6(D(@`Ua3Z zTGarO2dZm;#AbFI!1xTKw+<+y})_uVA4Lc0 zb-Q(+^>gcK>v`*C>yOsE*yqpwj;AVLrXSOvNn}Pd6PS0ISxg?&n?1_TQTu7yXa;K9 z>xSzl=(2S4b<1_4?sMHG-4D7t-Cw#_^+WX2^tJka28&^`VTECfq0Dg5P;NMD_}%c> z&}hgr6`Ck>fSF2%-4$H>UGrGesA;DS(S~bZ(RDSXnoe1%EZBA74xgg>7w<=^cVCu^3x*N~dbRsvQ%;gflDH4Q#MFT%D(0tBEpNO(mwi zCNM6gC>y{P?M-ce?lmrtE8>oD<=jNm64O=FT~o3-)x6NW+`P;DrTMz~j`@i>#1diQ zEn^*)<(3VW9TvC6*ZQ(G(%R2zv?f?>R;rAmM!}E>W)EVljYNvXMdbj$h`ncMoHfaWEQZ!RFc1@wCShGyCQnOyO zMYCOVL30TPB1rp+c9_<#brfosX;*3YYENiSYaeJIX?=99b?tP~I-M>_H&r)NSE?)1 zJW@X*^^6+IYqI&`5EAV7ObboewBB^c zbj$RIsln9IoM0Yq&NSQ2Mdp3x@6CRe0hSq-_bvM@*DMNH1RJb3$PkxH(G5~M`YAaj zuS`_hlqnG6amq~PbY-RTE9G_NZ%U6cKqXfNsbW-Gl}VMXny8wtDpGAwZCCxGdaPE1^}p%s^iTDa!OswAXm1EJbTLF4q76!e)?hLWFbp!h YVSw;f!J3E38>`Yo+<0-NXPn>v072_pB>(^b delta 7186 zcmd^Dd0Z67w(e>MK?OlYA#Op%4P0jFnd#Zv1zb^7mMAV56%i9fWfTz|2;g;WiD*TQ zA_k2MDk9phT#cwi$aTYwXz&?gFwTuci4q0mIrr2wnCtS#`~MBUkFQQGr%s)!Q&nBb zYbD8RC7F8K6|FZ8u^hPaY5LPVxAJBL%q=Oe26>^|B?kx0Jy-q*$N_WDmp3~2f5^$C(NB0L;9fJ{;ij`^bZN7s4>Wy`uXO_ zu;$WAibkzbYl#93XnprixCXh>MJI6s>WyaM?(|ahsj!8P zKu07uTr35XILad}722lMmq9vyc}jiURN%!a^*Pgk=cUwFP6wU|`JVzurqpN70-l&s zUoabZG_)f;G^O5m4zLdD#R4m!-RHmoDfJ->fqSOZ7sUg2PN|nB0Jl%6PhQShsQA_? z^`0vr!%0ze;Uoe>E?oZm2g=ilf$JOw###S1HWSjs*aE^}Y#CuNwuUem%Y6w9#zqka zW0MJku|>w&@A8p2>LwE>t|i-FsNHwc5VQP|17yTfnh7AIYa zz0ejsXC?y>od*Sufru^yi59C7M}p)eO2nNYNkoY_6(na-BCZ9gg(wjRgXAJg#LX5E z-9?dj8Kjn?M0^iYD^VgI2dT9vk$C{gO_azifYe5mU@nN{AxdOIK=Kr&f|U-bEs+Y_ z!T*$cx@NZE*Jch)mrW8fJeMIe1Xt( zVOXbYH0mvQb=4y@0gvxC8o3GC-F#^Jk1XMY?+z!ZiYNO8fwg$2-%D4=l-@B&g&n;X zOHcvs;GaO0t@GbcBTCQ?=z`D~95HY%ZOahO4_x4kIty~9lKK0{{83u7%W(9A(QZw%hH>(55U`lC=f0Qi~Zy(e!Em z9b`ho&|_!<=`&^%F{Z<0^<_g6|$qy%5G%r&f2F=m^Jf#S3eojUVh8A+J!_ zt${VxuqtbCV@Y5&vCnF*vzlu&f)Lv&K6H&&$K-}q@y^K&?q=7tiujh=pW>b66~iC9 za%+A9B?`OUTx&Pih1=#;5YybOfz|0nW{wB_VO1U{ETz`qI*$|Af~>){$@-2IAKYlp ziwFrn(#ob28}NZO)2EdruOVH-j}NSlB=+)Qjr`O)epFw6MXhyFmuTx`-)L)M4{LB$ z`Va9w{3xH0h>78LCd0ReqsC9LhgGE(cX=%E!9-a~v$9Cu2~^>cqrXK__>a+tP$teE zlZ%E6LBX_y&Y35S8b8O?rTt8bdgd`1pIM~9k0;IdSzK+mrx$soKO*LYxn%^_g}^i! zo(KykZ}9Q@;U+0HFC`_z{9H-VChWcV0eX%b7B5AScu{;mbPjKe{}}DSr{ncVg6re` z&;s1e+!GxThL~y8rZkzOP6G&+CgTZ9FihcZOSB|Pdo1mb#^P~HXQIhiSgJ*5g(pkh zX|xhIE?b12;01{snu-e&yTVwmCd$y%4a?Xl%V$_VLJ#nA3+J`t z2sElgW^X>Qm=C+mkC52D#MdkxbP0|E`+pbA7PCCkuE4g*yQH$tW;dQAMmmnJ=!~#3 z{*uk(sPJ*}DuhnpJt;jS3*_Q5k0DiJY8=LrS{26}#=?aCE4EdL*mBNMN8aO;?^e!# zQ#t!hW$jVH?~6`|?zR?lsRP^{hh>k9uqqh2fD=>ujw|FLd}~sRCFw8XcRZdPLu$m3 zvsJA0N@zB~k2g z{lz}OGwqrTyJS0wcc*`f7Gc*_m(kb4?N!?lS6xZ{HfR6tZH9Z$Kv7)9Z(BGu#r)Et_ zc*fd%`pO{OHX|_L#VN5F*#cpNP0ct^*3|4~bF(QpCF8ID|MuP zI*y0(J34d>c+WFV0oeMrDF9YCvG{FG>p=gznhqRuXu99;Jx!PT;UCr;`}cwfdSBH7 zNBB6F!<*USk2+L6==+|kYkfhLDFDLbeNE#W5&E{Kd4faJhCc6Uvh>0K-e3wi{2@() z9O3u2rqM?nnm+6Oo~B8?am%kv0R1SEc4+#f*L#`*d*OZ?O#z2Kr0FT> zf7j)$3mlq;!42V^Wi9i=BR81>@;{{M8t8vl)8l-i$;-dzdz!p)?v|k)XB;G&%(3G6 z1%Y-=QDMu&XzM_95KFgC^16`csE`1Qv?&bR=Hu+Ga@zeMzP@!D-8B!(vb^B~YGjsy z?tKui&Qj3b^YEFhP9A?Pu-hZ-@qV6sO}Oo~Fa9lSX#1WA9O@#P)m^eJ#QJUh&{7<| zZJhV!{o=SN*y^E%PY7QQ`_?b`@-{8ngI%%*xAlVdjxn0&JId1Vr0f8%5%b}0+A?P8*8$C&@S9^y8%Vx;oDirN#5R>mVJ)1xA#ULs2j4zKY4hi1IR9q^A0&YrG{-mK z%DtU^BJ3Ti%Q%V;m+)<1Hms8M_8=*vUGG4{rn@iiVrL5MH-kWhZmA@xh7W8k8SXHYugRF@N3H3W{K`GPW%8?5@shL( z^Z1J`D9A9kN?wUt!Hv{oSPdE7I9E=0&g`8r*wZ@P^;{)OhuGEj4x!KuoT^qAyScH+ z+6W2n(PZs#3A6|Mf(aPidKOxm;^Kh5P;H@>plZH6s&yW?ITOO0Bf)oZl9io# zPq91R>xfNHY$Ihsx;RPFLtB?DyFEs72b`W>2OpO9n>?_v@$h)MMI*?z>$qCzi+pj1 zqdlBdAtBhFZ^Fxt>RY|sfp(!P}4TYBAzEToPD3;>5rf z3`zDEl1}uZ(ImX{)Es2MtqMcwr0;Q5;c_%dxL4>;W4ALw&h}n@*EwNE`8Z^G0T+Qv zz(v4*z$U;dz!HEbxlqH8siG)7U>IO5ARI6a5Dka}Bmj~DYXDyXwgYkjMSxPk4L~K} z37`((4`}z0qI@4x7D@_6jcNG4IqIw_kg7^AT3}RU>YFdk%gi*Kq3!t5l{(e0C?FbY9L?)AOtWO z(ENLKj%!X*Lm)k-h@;MY|92iKY<}vZAx%nhe*usU1b)qBZjkmAR-9ee!V>ot+~vzT zDrX}{B>)#~;;1Cx%FP^=225??sI|bpTRAF|a27{>4J_TpQQLqsfpdThvN>uOaM^Z_ z$_1|Z2J(PCcW~56VChcK4IJ_Cd?Sjvla(K$h+|5y!NrgSo7`P1h4&l8Vbq_cs z7mNYU+y_wvT(F;`stF%}PDp+pN7Vs)!X}$@8}i{*X%{egUCIR}?{ay-#P zCHbF%VYe-yU>1B}K?Zp}Dgq|2G2~YRTnsXKIVvR$V!=>g@^n-NOdf`A0h8yVJHX^= z=pHb66siO!&p}nd4VY~0UcfcL zKEPyu?*beJ><63-+#k3Im;okV6MA5BZ|8u?C4L0S2Mz%y4>_Lzlef7jVDdKCHU<*D zum(N@jsixw`}6if|I%a^PieuBHG@;CN2DbnLmWM-4L*Hs7(_QJ8-%)JSy^XgeiiedJD?&Mj3Gf5S=u>5{43bRRpt8f_E1FeagOO{Wam5S(-S_5>2v(*BsUy*PPZE z^~3Z<`hV%EDA+2&w8P5d%G1j0%5vpBLBcgri~uapv1hU$*0oqDbMcXblGj@`+2(~Qte&@65>+I=`+d*WA;*)Rby{b)mXRx@g@J-8Z`Hx($ZShO>rZ!(d~Oag1?>G1_SP%vfR^ zU|M8aYT9AiWBSwd!qjL23o*7@nj>9^|l={*b`4WkU9hR+OZ4Br^`7)}_< z4V4DU_^~n6INf55HRc+>H{LZ?8J`*(jLs%c(`A^PT2q~9NC8F7f~oB!y&>%;8!uZe zGs#EGV_=fb$$yr&R`gQviY|~BHSD4#O74rx4jCskt zW+cj%%0Wt{a*8ru`GxYR^0u-{`Ali4SGHC4Q1w-fQ-!H!s^+N{s@AABs}88HsBWq# zwWoTVI!v9Y{)akCeO_Iv{#k8TYuLr?GIk@on?24}vcIt{H13)qnlMeIX0B#|W`!nI zlcm|Exv06KxuN-0^H}p-Q?GH-cGULN_R}h~8tnvalygSK4p2 zx!Ob8j8kVsA?yftEE~#BW~10>_A_=7o4~GQ)7Uj^CcBB<2BDbC b=Cf28#5#CUD$~n2*)ZW7`-~RrrLO-0UN&MW diff --git a/output/my_basic_mac b/output/my_basic_mac index 48f7a5fd68dd6b93c2a86ed460f170bd47d530fd..61fec144253c049b6fe624f65e3fa9d44b7a77e1 100755 GIT binary patch delta 27182 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 G^8W!mQ0I04 delta 27012 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 Cl6S5E diff --git a/resource/my_basic.rc b/resource/my_basic.rc index ae81208..591692b 100755 --- a/resource/my_basic.rc +++ b/resource/my_basic.rc @@ -1,77 +1,77 @@ -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS - -#include "windows.h" - -#undef APSTUDIO_READONLY_SYMBOLS - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) -# ifdef _WIN32 - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -# pragma code_page(936) -# endif //_WIN32 - -# ifdef APSTUDIO_INVOKED - - 1 TEXTINCLUDE - BEGIN - "resource.h\0" - END - - 2 TEXTINCLUDE - BEGIN - "#include ""windows.h""\r\n" - "\0" - END - - 3 TEXTINCLUDE - BEGIN - "\r\n" - "\0" - END - -# endif - - IDI_ICON_MAIN ICON "icon.ico" - - VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,1,54,0 - PRODUCTVERSION 1,1,54,0 - FILEFLAGSMASK 0x17L -# ifdef _DEBUG - FILEFLAGS 0x1L -# else - FILEFLAGS 0x0L -# endif - FILEOS 0x4L - FILETYPE 0x1L - FILESUBTYPE 0x0L - BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "080404b0" - BEGIN - VALUE "Comments", "MY-BASIC" - VALUE "CompanyName", "W. Renxin" - VALUE "FileDescription", "MY-BASIC interpreter" - VALUE "FileVersion", "1, 1, 54, 0" - VALUE "InternalName", "my_basic" - VALUE "LegalCopyright", "Copyright (C) 2011 - 2015 W. Renxin" - VALUE "LegalTrademarks", "MY-BASIC" - VALUE "OriginalFilename", "my_basic.exe" - VALUE "ProductName", "MY-BASIC" - VALUE "ProductVersion", "1, 1, 54, 0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x804, 1200 - END - END - -#endif - -#ifndef APSTUDIO_INVOKED - -#endif +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS + +#include "windows.h" + +#undef APSTUDIO_READONLY_SYMBOLS + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +# ifdef _WIN32 + LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +# pragma code_page(936) +# endif //_WIN32 + +# ifdef APSTUDIO_INVOKED + + 1 TEXTINCLUDE + BEGIN + "resource.h\0" + END + + 2 TEXTINCLUDE + BEGIN + "#include ""windows.h""\r\n" + "\0" + END + + 3 TEXTINCLUDE + BEGIN + "\r\n" + "\0" + END + +# endif + + IDI_ICON_MAIN ICON "icon.ico" + + VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,1,55,0 + PRODUCTVERSION 1,1,55,0 + FILEFLAGSMASK 0x17L +# ifdef _DEBUG + FILEFLAGS 0x1L +# else + FILEFLAGS 0x0L +# endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080404b0" + BEGIN + VALUE "Comments", "MY-BASIC" + VALUE "CompanyName", "W. Renxin" + VALUE "FileDescription", "MY-BASIC interpreter" + VALUE "FileVersion", "1, 1, 55, 0" + VALUE "InternalName", "my_basic" + VALUE "LegalCopyright", "Copyright (C) 2011 - 2015 W. Renxin" + VALUE "LegalTrademarks", "MY-BASIC" + VALUE "OriginalFilename", "my_basic.exe" + VALUE "ProductName", "MY-BASIC" + VALUE "ProductVersion", "1, 1, 55, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x804, 1200 + END + END + +#endif + +#ifndef APSTUDIO_INVOKED + +#endif diff --git a/shell/main.c b/shell/main.c index a990d26..78e5da8 100755 --- a/shell/main.c +++ b/shell/main.c @@ -103,12 +103,19 @@ static void _clear_code(_code_line_t* code) { } static void _append_line(_code_line_t* code, char* txt) { + int l = 0; + char* buf = 0; mb_assert(code && txt); if(code->count + 1 == code->size) { code->size += _LINE_INC_STEP; code->lines = (char**)realloc(code->lines, sizeof(char*) * code->size); } - code->lines[code->count++] = strdup(txt); + l = strlen(txt); + buf = (char*)malloc(l + 2); + memcpy(buf, txt, l); + buf[l] = '\n'; + buf[l + 1] = '\0'; + code->lines[code->count++] = buf; } static char* _get_code(_code_line_t* code) { @@ -435,11 +442,11 @@ static int _do_line(void) { } else if(_str_eq(line, "NEW")) { result = _new_program(); } else if(_str_eq(line, "RUN")) { - int i = 0; - mb_assert(c); - result = mb_reset(&bas, false); - for(i = 0; i < c->count; ++i) - mb_load_string(bas, c->lines[i]); + int i = 0; + mb_assert(c); + result = mb_reset(&bas, false); + for(i = 0; i < c->count; ++i) + mb_load_string(bas, c->lines[i]); result = mb_run(bas); printf("\n"); } else if(_str_eq(line, "BYE")) {