From 2ff04a09bcfdb61418e704884c7d5effe484020b Mon Sep 17 00:00:00 2001 From: tony Date: Mon, 13 Apr 2015 22:32:41 +0800 Subject: [PATCH] +mixed array support; *some bugfix --- HISTORY | 6 ++ core/my_basic.c | 159 +++++++++++++++++++++++++++++++++++-------- core/my_basic.h | 7 +- output/my_basic.exe | Bin 60416 -> 62464 bytes output/my_basic_mac | Bin 81832 -> 81840 bytes resource/my_basic.rc | 8 +-- shell/main.c | 14 ++-- 7 files changed, 156 insertions(+), 38 deletions(-) diff --git a/HISTORY b/HISTORY index d2e8234..6f5a658 100755 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,9 @@ +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 +Polisned the interpreter commands + Apr. 11 2015 Moved struct mb_interpreter_t from my_basic.h to my_basic.c Added an mb_has_argument interface to tell whether there is any more argument diff --git a/core/my_basic.c b/core/my_basic.c index 8a9682a..43fc7a7 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 0 -#define _VER_REVISION 48 +#define _VER_REVISION 49 #define _MB_VERSION ((_VER_MAJOR * 0x01000000) + (_VER_MINOR * 0x00010000) + (_VER_REVISION)) /* Uncomment this line to treat warnings as error */ @@ -190,9 +190,10 @@ static const char* _ERR_DESC[] = { "Array subscript expected", "Structure not completed", "Function expected", - "String expected", "Variable or array identifier expected", "Assign operator expected", + "String expected", + "Number expected", "Integer expected", "ELSE statement expected", "TO statement expected", @@ -249,8 +250,11 @@ typedef struct _var_t { typedef struct _array_t { char* name; _data_e type; - unsigned int count; +#ifndef MB_SIMPLE_ARRAY + _data_e* types; +#endif /* MB_SIMPLE_ARRAY */ void* raw; + unsigned int count; int dimension_count; int dimensions[_MAX_DIMENSION_COUNT]; } _array_t; @@ -260,7 +264,9 @@ typedef struct _label_t { _ls_node_t* node; } _label_t; -typedef unsigned char _raw_t[sizeof(union { int_t i; real_t r; void* p; })]; +typedef union _raw_u { int_t i; real_t r; void* p; } _raw_u; + +typedef unsigned char _raw_t[sizeof(_raw_u)]; typedef struct _object_t { _data_e type; @@ -1894,7 +1900,10 @@ int _calc_expression(mb_interpreter_t* s, _ls_node_t** l, _object_t** val) { memset(arr_elem, 0, sizeof(_object_t)); _ls_pushback(garbage, arr_elem); arr_elem->type = arr_type; - if(arr_type == _DT_REAL) { + arr_elem->ref = true; + if(arr_type == _DT_INT) { + arr_elem->data.integer = arr_val.integer; + } else if(arr_type == _DT_REAL) { arr_elem->data.float_point = arr_val.float_point; } else if(arr_type == _DT_STRING) { arr_elem->data.string = arr_val.string; @@ -2608,6 +2617,7 @@ int_t _get_size_of(_data_e type) { /* Get the size of a data type */ int_t result = 0; +#ifdef MB_SIMPLE_ARRAY if(type == _DT_INT) { result = sizeof(int_t); } else if(type == _DT_REAL) { @@ -2617,6 +2627,9 @@ int_t _get_size_of(_data_e type) { } else { mb_assert(0 && "Unsupported"); } +#else /* MB_SIMPLE_ARRAY */ + result = sizeof(_raw_u); +#endif /* MB_SIMPLE_ARRAY */ return result; } @@ -2726,8 +2739,18 @@ bool_t _get_array_elem(mb_interpreter_t* s, _array_t* arr, unsigned int index, m pos = (unsigned int)(elemsize * index); rawptr = (void*)((intptr_t)arr->raw + pos); if(arr->type == _DT_REAL) { +#ifdef MB_SIMPLE_ARRAY val->float_point = *((real_t*)rawptr); *type = _DT_REAL; +#else /* MB_SIMPLE_ARRAY */ + if(arr->types[index] == _DT_REAL) { + val->float_point = *((real_t*)rawptr); + *type = _DT_REAL; + } else { + val->integer = *((int_t*)rawptr); + *type = _DT_INT; + } +#endif /* MB_SIMPLE_ARRAY */ } else if(arr->type == _DT_STRING) { val->string = *((char**)rawptr); *type = _DT_STRING; @@ -2752,9 +2775,17 @@ bool_t _set_array_elem(mb_interpreter_t* s, _array_t* arr, unsigned int index, m pos = (unsigned int)(elemsize * index); rawptr = (void*)((intptr_t)arr->raw + pos); if(*type == _DT_INT) { +#ifdef MB_SIMPLE_ARRAY *((real_t*)rawptr) = (real_t)val->integer; +#else /* MB_SIMPLE_ARRAY */ + *((int_t*)rawptr) = val->integer; + arr->types[index] = _DT_INT; +#endif /* MB_SIMPLE_ARRAY */ } else if(*type == _DT_REAL) { *((real_t*)rawptr) = val->float_point; +#ifndef MB_SIMPLE_ARRAY + arr->types[index] = _DT_REAL; +#endif /* MB_SIMPLE_ARRAY */ } else if(*type == _DT_STRING) { size_t _sl = strlen(val->string); *((char**)rawptr) = (char*)mb_malloc(_sl + 1); @@ -2769,47 +2800,56 @@ bool_t _set_array_elem(mb_interpreter_t* s, _array_t* arr, unsigned int index, m void _init_array(_array_t* arr) { /* Initialize an array */ int elemsize = 0; +#ifndef MB_SIMPLE_ARRAY + unsigned int ul = 0; +#endif mb_assert(arr); +#ifdef MB_SIMPLE_ARRAY elemsize = (int)_get_size_of(arr->type); +#else /* MB_SIMPLE_ARRAY */ + elemsize = (int)_get_size_of(_DT_ANY); +#endif /* MB_SIMPLE_ARRAY */ mb_assert(arr->count > 0); mb_assert(!arr->raw); arr->raw = (void*)mb_malloc(elemsize * arr->count); if(arr->raw) { memset(arr->raw, 0, elemsize * arr->count); } +#ifndef MB_SIMPLE_ARRAY + arr->types = (_data_e*)mb_malloc(sizeof(_data_e) * arr->count); + if(arr->types) { + for(ul = 0; ul < arr->count; ++ul) { + arr->types[ul] = _DT_INT; + } + } +#endif /* MB_SIMPLE_ARRAY */ } void _clear_array(_array_t* arr) { /* Clear an array */ - char** strs = 0; + char* str = 0; + int_t elemsize = 0; + unsigned int pos = 0; + void* rawptr = 0; unsigned int ul = 0; mb_assert(arr); if(arr->raw) { - switch(arr->type) { - case _DT_INT: /* Fall through */ - case _DT_REAL: - safe_free(arr->raw); - - break; - case _DT_STRING: - strs = (char**)arr->raw; + if(arr->type == _DT_STRING) { for(ul = 0; ul < arr->count; ++ul) { - if(strs[ul]) { - safe_free(strs[ul]); + elemsize = _get_size_of(arr->type); + pos = (unsigned int)(elemsize * ul); + rawptr = (void*)((intptr_t)arr->raw + pos); + str = *((char**)rawptr); + if(str) { + safe_free(str); } } - safe_free(arr->raw); - - break; - default: - mb_assert(0 && "Unsupported"); - - break; } + safe_free(arr->raw); arr->raw = 0; } } @@ -2820,6 +2860,11 @@ void _destroy_array(_array_t* arr) { _clear_array(arr); safe_free(arr->name); +#ifndef MB_SIMPLE_ARRAY + if(arr->types) { + safe_free(arr->types); + } +#endif /* MB_SIMPLE_ARRAY */ safe_free(arr); } @@ -4352,10 +4397,13 @@ int _core_neg(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -4646,16 +4694,28 @@ int _core_let(mb_interpreter_t* s, void** l) { } } else if(arr) { mb_value_u _val; - if(val->type == _DT_INT) { + switch(val->type) { + case _DT_INT: _val.integer = val->data.integer; - } else if(val->type == _DT_REAL) { + + break; + case _DT_REAL: _val.float_point = val->data.float_point; - } else if(val->type == _DT_STRING) { + + break; + case _DT_STRING: _val.string = val->data.string; - } else { + + break; + default: mb_assert(0 && "Unsupported"); + + break; } _set_array_elem(s, arr, arr_idx, &_val, &val->type); + if(val->type == _DT_STRING && !val->ref) { + safe_free(val->data.string); + } } safe_free(val); @@ -5323,10 +5383,13 @@ int _std_abs(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -5354,10 +5417,13 @@ int _std_sgn(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_int(s, l, arg.value.integer)); +_exit: return result; } @@ -5385,10 +5451,13 @@ int _std_sqr(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -5416,10 +5485,13 @@ int _std_floor(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_int(s, l, arg.value.integer)); +_exit: return result; } @@ -5447,10 +5519,13 @@ int _std_ceil(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_int(s, l, arg.value.integer)); +_exit: return result; } @@ -5478,10 +5553,13 @@ int _std_fix(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_int(s, l, arg.value.integer)); +_exit: return result; } @@ -5509,10 +5587,13 @@ int _std_round(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_int(s, l, arg.value.integer)); +_exit: return result; } @@ -5556,10 +5637,13 @@ int _std_sin(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -5587,10 +5671,13 @@ int _std_cos(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -5618,10 +5705,13 @@ int _std_tan(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -5649,10 +5739,13 @@ int _std_asin(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -5680,10 +5773,13 @@ int _std_acos(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -5711,10 +5807,13 @@ int _std_atan(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -5742,10 +5841,13 @@ int _std_exp(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } @@ -5773,10 +5875,13 @@ int _std_log(mb_interpreter_t* s, void** l) { break; default: + _handle_error_on_obj(s, SE_RN_NUMBER_EXPECTED, (l && *l) ? ((_object_t*)(((_tuple3_t*)(*l))->e1)) : 0, MB_FUNC_WARNING, _exit, result); + break; } mb_check(mb_push_value(s, l, arg)); +_exit: return result; } diff --git a/core/my_basic.h b/core/my_basic.h index 4b85848..89d8517 100755 --- a/core/my_basic.h +++ b/core/my_basic.h @@ -38,6 +38,10 @@ extern "C" { # define MB_ENABLE_SOURCE_TRACE #endif /* MB_ENABLE_SOURCE_TRACE */ +#ifndef MB_SIMPLE_ARRAY +# define MB_SIMPLE_ARRAY +#endif /* MB_SIMPLE_ARRAY */ + #ifndef MB_COMPACT_MODE # define MB_COMPACT_MODE #endif /* MB_COMPACT_MODE */ @@ -155,9 +159,10 @@ typedef enum mb_error_e { SE_RN_ARRAY_SUBSCRIPT_EXPECTED, SE_RN_STRUCTURE_NOT_COMPLETED, SE_RN_FUNCTION_EXPECTED, - SE_RN_STRING_EXPECTED, SE_RN_VAR_OR_ARRAY_EXPECTED, SE_RN_ASSIGN_OPERATOR_EXPECTED, + SE_RN_STRING_EXPECTED, + SE_RN_NUMBER_EXPECTED, SE_RN_INTEGER_EXPECTED, SE_RN_ELSE_EXPECTED, SE_RN_TO_EXPECTED, diff --git a/output/my_basic.exe b/output/my_basic.exe index b53ac57280c6964a948f0b754ca4282d01c322cd..67fdc0dc67360aa067dc15155d48b19b5481778b 100755 GIT binary patch delta 13832 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 diff --git a/output/my_basic_mac b/output/my_basic_mac index 32191aa84deda7158c9b59bf7627941859b7fc8f..433d40fd33e7b7b26f7768b1ae0e8b45c979ab99 100755 GIT binary patch delta 30130 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 k*vJthho`HI4FAGvyK^8f$< delta 29293 zcma)F3w%sR`#xur5MgaZ5KAJ7gt&!Z5d8gmJA=I^sQnXb)p{lJG)mHw`J2OW$-}n8$Fa61!=Xu_F=bg)$Gc#wi-COLwz1V&E zMW1uNilQot61^M0@N>?0#W!s#l+PEeCrS7z&mz>e75q*J_OxXE*aEP3PYSke6=8e# zz$JB(K^@GZ-8&h6y3aD*2ddjyk$X*xCk#A)Qk22MkpCVHyx5>9KmDR8fnac{_|d;# z6{U-tqD*Gd9&J6IhpEcI72PVbw>`qVyIt&7yY8Ttri{CWpIY5L7sW1mgc;8HvKJm* zLcO2B6|&dCKX3d~;D&zc;h&EE4yfN3dmflyYOn`eYxK9(JgX>HhhnwIUbJRK)h?qb zS{t;+F|yZI;>v12Va*{g#8~YeJde%Cg*KB*ZdSYhnM;6+%R$VFIz-nyE0W8o9k{k; zSxS`!)ulbBRtt*lBc)PZC^oH>KiWU7*pONWd8WZ2&N0nXv$R%}j674uFQs|Lf#9`- zC`Bpy8U)N$Q^u#b(w?JPt!YtF&=phqBTxxhTQB}qT%3@#`{JL)#nH#q5ae3o4%xUt)e|mOULLLOCe)|{l}tRlyMj`cF7tas3zDSBjCGxz+Hoj zIQyrG8Ba~=;V`1;Zh}KkMLc!U7$W8b6@>ISw>}kd836HUI|*maRW%o7>5JaYxM@ni zT1ruJX=J0;3HApG_Mf%s(m`*e?LT#|M}7MB1(bgWZ65IyRXj^*cvY0+Xi$Lb#EeI# z^bg<(!D=5flXrscH}uHEql6#gD*a~aKC9#CX>^Qs?E@6%@USAEW3p%3OY~?R#Lk1@ z4cOvCbX*NkC^wi&@`48%jp&yzC^OP*q($vvlW6}j!T!DWBj-;b$4}>x3;Rw_vjV_lSE9Tx3rjXW{uI=fY2qAeNzF+Q|GJ5VZ3U)HR37hj6;daey+@>ud2 zB}x}ZiuRnEX);W$S(7n{o@wpq+F=~SP0GaEV~U<5M_-X6-Z6)A+}0Yys%Rk}O5bY{ z0P$J<1L>~OY*wI*yc8SnBpOW*=km*b7^;ZtVP}r$cF~S*huV(gwKUoshj`a-Bf31N zKLV|-2BuaYh&0ju+rvs+nnoUGlO%3s+~&K^DM}S3)vu@@hCMebM{W^s(snke;#}L! z_hp;VV2Hzf;i3kD?*#jOZ5KrF=yzYVv-a~VSejriAbKl3pcs<}xB3|s)!vu%1JM@9 ze23`el3v2ylh1RYZQ4x9zx9g$n9PStI_nj^jp)vj{^1qPh;9lRAy726U!Y^NEDMPC z=hm_{pqtXuggTnk;%z8j=6X-?y@=Pqlc(Z8^m@e*eM!>WX{K{T-7lmff7HgJVT=4} zG-XAFQwOYooqnAmuGj~m|>@J#3hX^o_gr4F$o37);^%rygS32 zX{Bh?(8Tr286XE9Q}z=N6HxmHgfF8L_!J6*OGJzn&#_aurXe;joYFg5EEVdA`jAZ4 zTFA#SFANTC*j9!0uIyj&uN?p}Fw$y~N8FA1Y*FPv+pPD1vZ9)x7tx~@o)~*0aZQ4q z7ANFQ81RrQ3z?7$)ljs$LLMdLXS@-N!${5`xvY?H3+LB`Om~9|&ss(MVT)o@dRpz@ zMfd7~81hboYfv7)%%#!q4$DU%@H|Or6LB*-ZJwtxuTq?&6rYkp$#L284e77hT^Id^DPLK+&}=Osf)V%Lex;#`Mj3og!`~WLb8jj5vqM>S%hy zT9A*s7f$ccZol+``WIRWlFgSuDl8FN_!uifb(8 zthkxI^b58PfrD2~8C}rP6WXhG6GPv!P2}~VQioDr*Cx?yJ-XV@#@Vk#+kc78xSSH= zi1m&(eRL83&e+{U&~)j@5s_!V9c#ash^JL3l||JWa6)!_99vnnawk8mcr)@+t6?Bh zL;NCOxnmdxiuN7KipbM@vJyO^9o$4j$EGs58d zMiH_#qd2A1fTC8gr@nP@YkGR1Sx*4Df=a>q18JSp2rFq3tu^fj@A**+PocEbh6U~+ zP{_lZAds~wJmi95tIR&;ama1W@`xuX?WDJ!KPveYJ8rIQh(5(ORj(dW6LNv#flOju z`a{#<^SVcqn^Z;HVvJl#vBWO}d{y(WxwB zJ~^^mJ@IVX4OTH_bO3XV*6`YNu6e9J$wQa{xj;dMWeBurK?p<0mk6QPNeZDlMX6O3 zYGYoK9!khb_Oe=KL%EZza`nIp4^HS|VsYT`xOsvN_75=}I>9DXH=8#?L@FbVy-6NIay=nG;JoDnA(tZg zO_Iw&rV*_%vco#Wz;D_g50g{NY+?QYsF~|857>XTRt`oy&oHCFCRy6xHg`?%hKWlz zad;d*&iVw@^j&)#mJU?>RfRK;v*iI*BBqc~KutjgQ9}u46r0j7pn0{ic*0^vi~}ij zkND&4dO%2}5HjQL+VOiH4Orngt5C!2`&*u_=vltaV{L0xi6|uD?}CmHq=Jr6K}YEE zUf{7AB>lkMmOQqoMo6W(dAhq-1&z&Pc_^sMD}{1UmezUf#~M{^HA(opAYX!1(EC(S zIZ@Cb$0!fY4ZN+dZh=jfC5b1-%Sc=f>YBrAh>tofWQ&lGk-UUtr;wdOt}JBRM$)rL zpCR-aLVvcIoEaC8yp-fVLhd8v>#xZxNNy?QmO}nm$n?x{F_NnZxtfsI2swnFimsKU z|M?D&{ZB4fW((bevacffD& z4Lqjbk+`0hgV$zGBBH*=fCa0l98cHlxheqpQ{a2llWj zO|6dE*iu(2e}reajtrV@GOh*Pq}avzYvhPO8HFDe0HJpv{YMIQK4Xh(PZ$;R0WaM7E|0A} zkZT>a)$iG&iC?uQyrsm$Mu7{0-Zd zvAgxdSYUlGbtq z>-!sWm%>kU?Y5AySWK|Lj4tlwZO@Byl#g@t3dAZqABSO$CXxD5>&mPRnnkvFkC#*) zb;lrUg2Z)-N}8NSL{u#yKVHSCTI!!KK#R|GD3dF zho-U1a>#Fz+{f|iiR%=Bd@f8zQZ-I{!=#ymU2gbMR0HnW;wI$2%OEc%4}nIM`5T_iGD*lTAlJ_%UwVr*ZyHr* zFs{>a3YyI3HVq5Et^hi)nR70vH0_KBs2?_>!dXAu1* zjp%0Vv89C!xM^j!syGVy>mt;tWr|glJ9eFnt*9kZF@N z0at0yeN2lwfKU6QqA9HLpXIyJy<-Hm3Ag1LcS^Wo&d4 z;RZIsvj1AMCKav@7BQf?v3(6K-p;Bu?`-(q$woI1RzGEq=Do_TM<iLhDQ1an`h>)JKXb{Txt&{Yi9MTMtvlZ2*3B`G*@D897|Fva^x#wYs4(Fbukq zd&f~Kg?4hGhzO7d2f@m$Rm&t5i`JH1BCD4oDJvOL#u-yaP0H_BM+Lshe_uX(9>QROc@Q>*jDkS*Ope4SbH0GqSaJex2n{j zsovDzUCg47e9;jY9=u_Tn*B~=P!yjq8XNNa&+s)4KAFvL+bA6GdKWs|T&t*d$02A$xLgZ{C$p51LdRjtdCqJq^( zHa#j-{hFk+o>ku|DOE zvwubN{;!YWx-14Scm1$j$qb*f585QzTHGuyj$ny7?BPIe2-QwhoKR&qy-ThgC z)b(s`+wvVIBWgM=+43c27h`I{$?K>}zv%wa1H_pK4_{X8_>ZVsMLrn#(9^=%`L@mK zzlarm?FWSdY|&Bpy*QgvoD0pSQ}@9rSG&R*wX4&jGlZh@P9vwI>`2UZ){f1yt*CkYvn=E zJk|=QfryV9{219hrC>+hN1cM8KL zkC1l=*`MSE^wvQuEA(4J&lI`=&u`aNOhVcZGkEsRAkYNkguIpHpRkaozCSCggjNqe<5*Q zqpDpMvRTBIB;=VS*P_@CL#F-ztEFr$+A>s4f=@?hJa^7mO)+dvhbrc52ajGA4(cv~ zg9n%S=eVH~B za&E8;<_?=^onv?$!+x-8VIDC&LhhTNzv}Z%(ZJ5ggQ0-wv{+ln{)}sAtB_7@VHv~k zDPuS_=mk9Rw6l|W8~u{T<#-{NhOx_^2ForXUlDRWAzuP=l_fa~GL5CQ;_#^^`*XDZ zU(4Xg;eMR&JikIQDD>AEc=ZkK4wcHAzSm^timz|WrVgT)s-J3UR1klanlg`C$^jf_ zKPg|w5;K)s+|j0Rr6A%mNO~#Nk8qYv)y`k0$HB?OjC-bZR6u|Ih`H(oy?(4M^Or{2 z;Zyh4N&*|v+1va0`QqY-KDqA5Ko5xDSw`pDkym&{EgHX*jJttcJ84A4PofG%9Tf5z zAs-<5Fv;~MvF|#Et2LQ#!q!R+C#u6?$i?vLwZ90hOi57-magNp@T01s5v68JUpEfL}X_VLa4ieW@Dt5{Q9@P&# z9LrCsT>cKob&KTgLUxJVmxTNYkm!phLY^VIc)yUZAraGsFJ$WC=-%wRWN+r%#Zsmo zugznvKI`7)LZguwXjVth(|9^$WKgvnbMv&mn5P7pnnFhlRrxcBo(v6Gw>SLUeeV<( zvl_!Iv$QuR)LH{$++q)xqiJokD0<7=Qz5?2+HCybT*Asnb|>;T z8DYOu*k45AYC`r#Vc+#TEZcbj2{MDmry$F0kzpfcXhRvk8uR)j?C`jQ+12Xs)@r~J zEtHzlh+jRHC3lMmUB)#}G|pUj%SD$eE)~DDpWx&ezxrSd`>>mT#pdT|r9$ubv3|j@ z*G`XNx4U)lI*XMQzb*1vz3%PRMr>mDK@rQ*(wZk+&|`fW{N?)N7d_5bW08a<#6@gJ z9=6HFEWz3N>}B`RGSwyO&g%DgLtVt?^k@*g@-99mf+XIUj=7$iR}0$fU^{Rt(J{fB96GRnaZ4$e z_S}%#{E5jscGtsb46q!n|0q5`#1)^Uh=-pkE{?am*RwiObFdmquz#aH8A;_2$YZyY zYT0_9LX8Sy^H7dbG+ex#9W3sLO%q|4Wqgi?cl}-gP2xrwv!bGfyimyHXdpKBfqZWS zmxF~oOvr&iu5gl1{X>osvL%G{PrRUS6S|wo9xC*2=w3ZT@*>D|w_$GBz^?Ti>HWzK zL>_s;wDPzoUif)z+LGAIpr)`c$qfxLU$9NH{FpP@7#YsTm!;`AUY9yF%%;#?vwA2G z)+FRgLLQH%b4?_9`cU>&a#Gn!XdQG@f_=nkwt$(-TeDK}QKp`!Y4Ka*CL7)-)++!F zN6`B!JJ6?hnHm!AVHNv!RiCoqecPyO*_OUz42_?#^8KQ0Bd1WomaNe{pnJnnVkR}u z<3T*2PC}k2c zeQ^*|i8UA!Z}7UpW)88cb6Nh7V09h)Zb(}H$+*3dYw{2tTEPJ1+D*AGCle9XO~~DZ z`~dCfI!f{Z$TISp!h}vbQMo)s=XyXU%aeJzH-@HTH#l%uE%h&!F|2-h@3R=LnD0l> zyYRv6ZeDeEbJ#qaKZYFQupw-C`Jx}Z{7zoJ?#1JH$!|H!U?Kkw4GmMQ0E?o{Y49-*8L}yiYb%eM3t<&-WRy@LNE-f4#L;Iq7 zmC>oLWO5YLlQkLHC_M73;$r)CelGm#9r-%k5@?YjB1=vmWSK=-P9(7vBipFIu!|#W zn%#uacm28F)?~DVj5;MT<0!NF6dx;=eM0smc{j-wlUVeq_Vu3aM_H#^t2dg!DjRB`Z`J=Ihk_?8qXfS7FyuW*I)~$aY(FV3+PDR#cR@kf3dK~=M(t;17 zG-hbmmo=N+*Kn^7m19muN1~h;op?FjVo**eDyM&2-e#sbvka@+GRK_gSFRuJ`&ZYW z?Bf+#&nxm}Z?<-BU&FlKynwIKwJ2a^EHB_80(On00-m8Sd|4P`>Kr0`x25KiZD__l<)8_sD;Z76&Y8lW|{I zx!wc?V-#ezf}TtIs%Gq1`Vqs6H`ttvCWcdQuzeXb&0EoraP}d*z}TZDjL(pvA7M2-c-pKpWk{!vtRHqi| zL3RAK5gVN8j|ca>OmnT{>xzr<%uel&*}J{S&{Sl|MdFI3467Tl+|0V(*~{=KEGUIq z@;z-Dd!AXn#z>G>M~A;Z@G;w+zrtvafV8+}tcjzoEu}rL&d3%#kQG3#apd=OLn5Mj z3b~VzhtaT(BzcFBn+Z8g$orAFx|5tKZq`FS)xserb8(3}_kg1pmf z6fHsMej@u>Ay)-*sU$ZL^6#)m?p;D|M&8{?E-&PFg`6eiDkKji`EfX}*&HtWS|$qp zITF_((l3Uy^d+&jQJ9h(?hE)s+FiJE6Q+6XVA_KEd<0z4S}3|VK7rUZ&i<0WR9TEp zNOa8e#*2`YlxUoI({8C&@#(bZ>a--ZX(i$9P%~cZH_6*G@>T`jU|tSSwXg`=P5Vt8 zGu)x&Qw1$Fi@MkS4m@)ce8TUhK>)Y^_~_rZcD$WBit<(hxxS_H zwm0Anu}H|Zg}e`m>xq}*u4wiKY+Y6zGX;odzGtDtIF+)ur|caYu)A4<)$1&Jsh?p; z1J-Y8lwtldHireVBTH)!%D2U4% z^b&_f#rSaj;AK?}(e>HvWet4Z%cRq4cgj5*Z(g2irO#ST4pv>Sjx&Q?{7Ge zh2midQv0x4*`R~NKR`+9#n7iS87;DC2)b(sO z8>cpA-?MnUiEO;GzUjvdoY^l>#NO^$EjD3gkebPst!!@SZs*l~xH2et9iIm*>-ktV zoWR85wW!WfnL@S+*+H|#GLpXzn~4;JzUlDn3HoFB@DuL^E%dT2<6Q4c4d z^M_-1y;o94))W`};W^Mv;&U*GO~04o9$lQMFmGq2S{~1?+hY$pVsq@Vr}-I+JvNV` zaU`C$TM<)Y9zH-B$aXpX`d+KaYrBC@9+nu4d5n~I!%*9=Y1Ot($X|;t2^DgeCXo3H z`9+Xvis5etjs>Dt+UU11;xKaSu;}1G*5>VU=3&D3DGYr0USAuT54yp!c1c?Hfg+j4Nxv@+kb5XSDnp60kV@bxH zh)`0=Y7*{v%@xEhy%S@8&Ziv93oNQ3*MOC)QaQ-|gIL2gW}5>qB+(4~lRo|D|H~(R zGDPn8Meb}M*ElQUMjysVOd)(tCrXzr!$wU6f2Lnc*Lq9pg9r z1rs~H##pcLinORk7HD&_IPLF}N{mau4&Lr)cC2`*xvzZ=-;{0q*f2JwfZw`gZ0Ml?(+Q#(6o zXiTa>MAXl??eX~d5rY!)3z`HDlH9ch+xMPdllkyW=MuB=T%f;4xVM7ejl*y^-j&oE zGzD(Pt`hEKZ>>!V8ztOYgxe*!OI%lJiRlcGz3Z^~4JhhagBjK>4_lv20b8+L{E;fc z&qCkF6<;#aS!FCr#oK&Vye^P^xh}w34cH zrD+fTDk=7DZR0$IXYYVF;&~}JU`>77v}bBLdV&28HfwQ?M0X6vw3(D^3XVw&qWzFp zDTuBv66#JgVR1^exU{xPN~K&(A$Y)jubo^&@;<)bhP@?^LFwVYE)5=LNc3yWCH zw2s)5X}_zfUZI$MZ1&ib56fqqN%dlHY^uwK?D7pVi?G&-IxoV6g*xBHFmbtj5mixD z8i(z7=uvF^JBl?}QqdcfbWpF2$9f`?DKe5lBG#d7%4SQIs*c2a5qTH~#*b;b$e|h0 z^u}?Pvo_egUo_0tARfV={)pf@MNqmbwM&=BnEqaGm-mpLKl0xFJEHANc&(?s)-F+^ zA%@9lrtp|klh~Op{+_;1Om*{~n7XmHyBqMf=!~I*4*n#95=%}XkHkcgJfld=erSuz z9aARL9XU>Vyn=-bS{i?0^XiV2-P2B5tQAp3q|LpnruxwvfqPm2{*rim5IeWFyt$kx zt)eJxEQYPCawU|OTIJuA7XGiLoe)*hOM50P{!v=bDz8c#(1_P%0%hok)4;)>$OrAiYDtIEe?w~n(|Vr@fLhyO7{4p;j3zShyv@10vBLR zyQWfsODeH?I|3_*VTp>0#7Tb!l&E=CWW5Xk-^Mul zZy`DtQ9Jxgh+(3A^$`1u))FD+RQ%5&uC1tt7!(3CgxC%9C~lnnn8+(4Lp+2P<9`bAo$`8! zL6u;J5PkR>&9V?-A;cRPqptoG;yoj8#&a00|1HLh1^+h2%A(!$7~^?OWQ;#z&HSHY zyli|GqYumwW2st{SZo-Ai17=IQP*sW@#}JUYWT7)AC+ZMhm0ZF*k)jwZI9VclhfS< z(M}B|?6-hTJk;1cgm1Jh-|~6Q*pmFMA%C&tuOj>GkYD3xHtwqveElFZ*ANwGDq)@| zE%cZH6Rvh^BCB$^jyWfUN7_MnUW1Y9IzXPcmgSL7JY2hZC*gVeYf%P^mZDAWJ?Xta zZ`0In68>dl=MMY%8Yj|P6yG(Fs#%BiyoU|2ww66V9A-Yx*K?L(d>S;mF#24DRPHG+ z*+PCzrePh6)@k)xx!uID36q7i6_HiN#|1R4Beo_icWw2mjfCs-eD*SilI!oubt88E zqfXTd=HgA=32gZ@a>R4zI-JqVp|uNHqns-BFT$tL-x4|Gz=ID;w+I9BH$Mvc{2;_agmQPQ{C*=@Kb=>&c%WPLe!|vHE z!d0nu8(xMfV;iE8nJ3Bs8K`4$p=fW7WfNRYJN$t~QZ6w5RxZC7KYRIiDReK5lb^c$ zna7TP;%|$>7a1|Sl!;k`TD}r2Th5#--{k`&8LbVK~#u%n2`CO8sIG@ zEtKdxNwl>>t|jDZBKKD6kM)#$E?aOcP#wrN9}BPgFol0WC>C|i_!@f^d=8AxJ&&fc zqGO#6KR8*lye4Wo8=Kcu?Z7tV)$_uPMn>A26!v-EK>sI$Xm=SCg1?Nw8JqlD%VYG# z6xw^k*c-=#y|a-a&Jmk{Z7u4sX*FALJj_RYdq6+$*a(dI0IS14mK`}BoX{AysMiMm zsI_eHYZN)eIP&E*^+4lWFH|Fa!%_k@2mY03k+-YadX-TO z*Kp%j^-|n$24h%UR&oEdtYWB-d$fkH;!&@%;{JsKbxe0fDb+(!mnA96{v<`6-%C-h^-|QJWW~*vtQh`C zR+NT)6!*1#6t_3}Daw-mirQk3qKqG6Q#>|~Pz)cARNQK&D$1o9ikdZBF}ycVQNEg| zxP5F>6ytn2T%;&B7AbDC7b5_>;$AINQLbbv>SBkY+;=GMkxTH*&Qc6JmnzD~OBHo? zw&K=@DTY=n6}PZeiXrZ8#cjw&#o)6=@rZvRsB{E$tQ~L9BD((ZB9+YXWNNvh#NnDocEt%ez=}$6!AyfC0 z!eM!t`pGm{ruAjoOs4H*8ZXl%nGWPB+IX}i-jwManZ6~{}(I6$V2WZG7yon=bj2}XX#%e2QA0!Lu_C4Te`ktR7%P6 zbx%S2lfhVNKp&&!jwEg|P2hx=_mlzbXf7}){?lolzym%P z=`7o9aWPFgcsN(!84@SVmxdDWUnuZgiTyGJo-gqnOcoSCn#7N>z9PIx;+dE<2xm%c zqd!z9VyPq^V7ek)B%3H>i@@1ZcMcMGmBej^3cN<*ArfzpI9=i`5?e+I`)vZ-lw?Wl zlm@dU-YfBCi4RNMZ;WtoMB;f8=SrL~PUt5ko+R-ZiML36o@4a?qwylc=hC3_1c7f# zTp+RkmxAx~zDR>44&5$rsKljr2wX?vUnOoR@jD*~y(wXS|L+t;3u*AB#BC&AxJ&5m zC9bqv;EodeeJF6e#MSl)+(qJmy#n`;IB1{1$-w;n57{q>0n(uM0fC1|T=$^BBP4Ec zNZ>INpOJWi#A6N%{Y{DEJ`#AE#J44$^`(LbDF$2RkA=Z}Y2fV=I9=j~M+9Chajj1T zUMlg5W5E2|4B7lrzS%#yyN{0^Jnn$^Po8eZb9KJ(S)jJxpib}8W+V%JVllrP(4%d~ z=yvb8edO7Er@`sI-#xl%qehKpw^_$hp2SApQj?yP@3UFWGYqz?4G*cNH+p>R_OV(% zzw~YO8}*U875}YOx2sG|GyLN}_REttHd^ov$3Ok2J}ySOsmd3hhV>+lsvC}9v>Kx8 zd-xaf8YV6T|FAaVKZLvB*Xx+_(;AMn2lz+%C1!hmt>d#rYQIWtO8|TDYq-yMk}j6? zcLA*KZ{a@aHH0TGcp*>eHP~3tw9TOc{3QKH4fX-(q(DK3N;)Z!6+R93$(D2@NoNPL zx=(A_ngP}-hp(c%FLJe#__@S@%5eH6f7;;s_0}6)0*?cx*1T4tHJ=9x|FsRG4id8q zPwV(J3ldtS)S3k`uV>*t!zE4MzC+a>9>n57Pm*-Jq$dTjOwgZ5x{stk31Wqy4e|jq zRMLh}=Jh<>M}O{2kaR>SiwB(~trti-DU@Y`eu&d31fXO|`e7I=1pTb8pjS)!SzYG! zd$`Y(dV=08=_&PCJm}ey-Y@Cd^;jn8LP^s%ZBZ=?>#;)6DuyK$c}3FLIeNVa_Zceb zZzVmnK8pvvG+bCelJwGWmI=C2LqWfgbft#8sfJ3rteYruXhY`pN4U>sN&889b3+yn zT9b6Bq%}AJy|j_=-B{8~8?i#rdm;qgTGD$WnAe}-K1S?>s5+e_ZEVcqK~I%*cS%oe z%rZgSBt2Zxw#KXw^q3~XNs6S$G~w2%l1`U&Y7-X!SGdp7rouW~(np)JOwi{fy;IWX znzBOBb1lL;U($0e%FA?ZVcek5u7TW0FCM;4Yz)^c&-?k?y<&G@LgE@?kW zUvI{|io<>MrAK2)?`ZDyDy=rGAXg-vBz>+q%Y-$37>!!6hor+=utLzQBt1ydt6Hq` zQp0`5wiMPABt5p}s(8>hB|S^hH(RdCRKvSRwG!5LN$Z%(3&Fo?Cj7z=VVde*$28R? z#|!OUnLjz+>7}B$os!=n`JM63c;X*O{;=d9#PgBXsIzc$O45xwI}6>=AdN|KmLutklFsSo^m2pwx7~$# zkmSGZ?u;k?MUvp_Nd85VGn4rGy#*g7`TD(`g;duGl8=-8gx*dsckr7e-(T{ZdOPEZ zza;rLC4Wiss$BLhl)RcO>?0(fE%}IKrT#Q-b*y*wI*e%g z(YyL}OkKUGztHx{{EPZK3#qu}0|b9e^2-M}y-I=494PoRlFuCIj3-`SrCyP|bC5HW zczv}>U-UwER-2*x7Sb23MUoyOXnpPao21i+I^#>ji@t`X?{Fh8mQmb`zLNElbh4oJ z1#M+X&mQIU@`M+CVH+&@%cGp}#On*(hLZ0$hI`l7xveBUZ;Z2$%=PtdtmG5MadUmy z+g;L=#)*NUFMkJ0e#5A9OR zCr@!^67QZO>@Q2+J;hl_yuP3NO7bD8POoy{^?jWt`4-ch@x<%WywFB>x?H}-_8X~K4HEylX!hw7a{rm3k9!l z?>b1{FT?3o9`^b+FIn<)7CGaI*SC9PB>&j%%p_jl_N7REro&lC{L3Yx-R4RDwkkmZagex2msmHfIaXD0D|mJ9pclJB$JSxEe3Ciq;*Pi9UpZ#)uqNdBDU zb&M|MkAz!%mJoUAk?=aEc_L$_(7u%UGgdk?;n(Me#!6=)@d;~%{WHlYtmTW@ zt&%o*itgLG))`*`;pyA-V9D!P53e0v;D-_l?{&B=e+=!W`eu%I|`tjePAfOwvmvJq$F~diy24 zQ_}l4ipQtNCgG((@*bOwdBE;y;vh!LQdb`PC01 zM#=m-CVT4f*X{pJew(77TuhM;bo@U$Q1p|I*)qS5|F`@$ye-%#TKp~PK*#@^1JrWA z$iG77*YW?9pUz_RqnEYPfsX$t2Qbo)YPQMzI{shsSE4@D&vy1o2MwHdKP-~4wfYqV+Q&H!o3UEvKDmel&!!XOi>^=NYqF+g1&*7M67}c(PF2 z)Rnlu#E}xumpG1aS-emCTG%H^tb8l*V2QhaC-6AJIQUS$7kHk;fdbnUha|$J!MhSS zl9+-TPQT>OF6aTk`nl15;PSxwInXB(>t{a&66=RPmn9abJs9eDC83}5Jd#*H;CU`_ zcA%)iOJE8>KWgztYfu3C@k&)-()DwdAc-dhiTsTu<|ipAU!gyVA_w{zN{qz%;YqU0 zpr4uymsme8nIP@;bCQ`7>jxxuiS?6_H4@X22tW4xKoa_4hzpo%pr3-Al)8TWaY@3nL$6E*ewn8bBTP3^#h5U(q2D_cr11O2%?Np zR7gL22mq!UpKC74t1EGsO`a>zmxPmne$Eghv3|hNO=A6IVK6YYn0|yn-vdopKO&ef z?e(Jp`Zi(muOA7}m*^6<>4yOyNMcH75ur;-eeWjKP~V`>1*Qt< zJ8}9}&GPixLEmbxmInG3d!xkq*7^g9^)2;5iS?~?p2Yed`kci2=J}e$`lk77!gT-X z+vP{nK;I|-F0sBpE`{SEs)4>Q_K{fM5LcI2-w4-{Sl)Xnn66@Q^ArkA`$Tua{w~y&IN$C5=RTAs_#Vr!+`@($^>-)ar66^cD^AhX(y!#UC z8@%5o);DrC_X?uMi{y^1lEnHBEnH%KXBI25z9s7^aneT7q{AfE_h1Vp);C}4C6=2m zn{q%B`fiKjm@lbOzA{=8`Wktv#QKtVuEhEh zc9F#T3U!6V`qK1WiS;$BeNkCYVtrBBTw;Au*`6>Sx%%6*P7>>H)8Zx8 z7o7tnmWxh>{x3F^KkR$7KgOCeOA`8`lm0(ACKdMzen{T{jFc|<4}Im%>-ca9e5wS# zRsz!(?(qE7|Mc^lP6((Jm%v8fe->D=1g=^F<5Oe*2$23n;`M+VNUWEyG%aBeSpv5$ zfn!SGgc7(%3EZy)9x5;&f4t6PN*GKkfv1(gb4%ci5;(I2&Mtx1a4g0j4`4$HgZE3| zy(RGB68Mu6_*4m8SOR}RSdKp)!0i$S_ey^@XHdoRHc9RdHE8U{*221^+8ds zgh9=ZehyRLQ=O~ps-3Hk7(05_lnE0@%^EUn$oMyhj!7LgV%m_gGiD8)K5B&Xue$10 V=aqVDm;cx7qp14oRQlhz{2x+)6&nBm diff --git a/resource/my_basic.rc b/resource/my_basic.rc index 86ebc3e..9192357 100755 --- a/resource/my_basic.rc +++ b/resource/my_basic.rc @@ -62,8 +62,8 @@ IDI_ICON_MAIN ICON "icon.ico" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,45 - PRODUCTVERSION 1,0,0,45 + FILEVERSION 1,0,0,49 + PRODUCTVERSION 1,0,0,49 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -81,13 +81,13 @@ BEGIN VALUE "Comments", "MY-BASIC" VALUE "CompanyName", "W. Renxin" VALUE "FileDescription", "MY-BASIC interpreter" - VALUE "FileVersion", "1, 0, 0, 48" + VALUE "FileVersion", "1, 0, 0, 49" 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, 0, 0, 48" + VALUE "ProductVersion", "1, 0, 0, 49" END END BLOCK "VarFileInfo" diff --git a/shell/main.c b/shell/main.c index fddb9b5..74ee768 100755 --- a/shell/main.c +++ b/shell/main.c @@ -120,7 +120,7 @@ static char* _get_code(_code_line_t* code) { for(i = 0; i < code->count; ++i) { result = strcat(result, code->lines[i]); if(i != code->count - 1) { - result = strcat(result, "\r\n"); + result = strcat(result, "\n"); } } @@ -201,8 +201,9 @@ static int beep(struct mb_interpreter_t* s, void** l) { static void _on_error(struct mb_interpreter_t* s, mb_error_e e, char* m, int p, unsigned short row, unsigned short col, int abort_code) { mb_unrefvar(s); + mb_unrefvar(p); if(SE_NO_ERR != e) { - printf("Error:\n [POS] %d, [ROW] %d, [COL] %d,\n [CODE] %d, [MESSAGE] %s, [ABORT CODE] %d\n", p, row, col, e, m, abort_code); + printf("Error:\n [LINE] %d, [COL] %d,\n [CODE] %d, [MESSAGE] %s, [ABORT CODE] %d\n", row, col, e, m, abort_code); } } @@ -251,9 +252,10 @@ static void _list_program(const char* sn, const char* cn) { lsn = atoi(sn); lcn = atoi(cn); if(lsn == 0 && lcn == 0) { - char* txt = _get_code(c); - printf("%s\n", txt); - free(txt); + long i = 0; + for(i = 0; i < c->count; ++i) { + printf("%d]%s\n", i + 1, c->lines[i]); + } } else { long i = 0; long e = 0; @@ -273,7 +275,7 @@ static void _list_program(const char* sn, const char* cn) { if(i >= c->count) { break; } - printf("%s\n", c->lines[i]); + printf("%d]%s\n", i + 1, c->lines[i]); } } }