Fix to get Mini-Basic to build

This commit is contained in:
Gregory Nutt 2016-08-11 10:01:42 -06:00
parent a1c0580034
commit 47daad13fa
4 changed files with 40 additions and 20 deletions

View File

@ -133,6 +133,17 @@ micropython
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
minibasic
---------
The Mini Basic implementation at apps/interpreters derives from version 1.0
by Malcolm McLean, Leeds University, and was released under the Creative
Commons Attibution license. I am not legal expert, but this license
appears to be compatible with the NuttX BSD license see:
https://creativecommons.org/licenses/ . I, however, cannot take
responsibility for any actions that you might take based on my
understanding. Please use your own legal judgement.
pcode pcode
----- -----

11
interpreters/minibasic/.gitignore vendored Normal file
View File

@ -0,0 +1,11 @@
/Make.dep
/.depend
/.built
/*.asm
/*.obj
/*.rel
/*.lst
/*.sym
/*.adb
/*.lib
/*.src

View File

@ -33,10 +33,6 @@ config INTERPRETERS_MINIBASIC
if INTERPRETERS_MINIBASIC if INTERPRETERS_MINIBASIC
config INTERPRETER_MINIBASIC_VERSION
string "Version number"
default "1.0"
config INTERPRETER_MINIBASIC_PRIORITY config INTERPRETER_MINIBASIC_PRIORITY
int "Basic interpreter priority" int "Basic interpreter priority"
default 100 default 100

View File

@ -71,7 +71,7 @@
#define COMMA 17 #define COMMA 17
#define MOD 200 #define MOD 200
#define ERROR 20 #define SYNTAX_ERROR 20
#define EOL 21 #define EOL 21
#define EQUALS 22 #define EQUALS 22
#define STRID 23 #define STRID 23
@ -188,7 +188,7 @@ struct mb_dimvar_s
struct mb_lvalue_s struct mb_lvalue_s
{ {
int type; /* Type of variable (STRID or FLTID or ERROR) */ int type; /* Type of variable (STRID or FLTID or SYNTAX_ERROR) */
FAR char **sval; /* Pointer to string data */ FAR char **sval; /* Pointer to string data */
FAR double *dval; /* Pointer to real data */ FAR double *dval; /* Pointer to real data */
}; };
@ -293,7 +293,7 @@ static void getid(FAR const char *str, FAR char *out, FAR int *len);
static void mystrgrablit(FAR char *dest, FAR const char *src); static void mystrgrablit(FAR char *dest, FAR const char *src);
static FAR char *mystrend(FAR const char *str, char quote); static FAR char *mystrend(FAR const char *str, char quote);
static int mystrcount(FAR const char *str, char ch); static int mystrcount(FAR const char *str, char ch);
static FAR har *mystrdup(FAR const char *str); static FAR char *mystrdup(FAR const char *str);
static FAR char *mystrconcat(FAR const char *str, FAR const char *cat); static FAR char *mystrconcat(FAR const char *str, FAR const char *cat);
static double factorial(double x); static double factorial(double x);
@ -1043,10 +1043,11 @@ static int dofor(void)
return -1; return -1;
} }
if (stepval < 0 && initval < toval || stepval > 0 && initval > toval) if ((stepval < 0 && initval < toval) ||
(stepval > 0 && initval > toval))
{ {
savestring = g_string; savestring = g_string;
while (g_string = strchr(g_string, '\n')) while ((g_string = strchr(g_string, '\n')) != NULL)
{ {
g_errorflag = 0; g_errorflag = 0;
g_token = gettoken(g_string); g_token = gettoken(g_string);
@ -1231,7 +1232,7 @@ static void lvalue(FAR struct mb_lvalue_s *lv)
FAR void *valptr = 0; FAR void *valptr = 0;
int type; int type;
lv->type = ERROR; lv->type = SYNTAX_ERROR;
lv->dval = 0; lv->dval = 0;
lv->sval = 0; lv->sval = 0;
@ -1539,7 +1540,7 @@ static int boolfactor(void)
* *
* Description: * Description:
* Get a relational operator * Get a relational operator
* Returns operator parsed or ERROR * Returns operator parsed or SYNTAX_ERROR
* *
****************************************************************************/ ****************************************************************************/
@ -1578,7 +1579,7 @@ static int relop(void)
default: default:
seterror(ERR_SYNTAX); seterror(ERR_SYNTAX);
return ERROR; return SYNTAX_ERROR;
} }
} }
@ -2050,7 +2051,7 @@ static double dimvariable(void)
char id[32]; char id[32];
int len; int len;
int index[5]; int index[5];
FAR double *answer; FAR double *answer = NULL;
getid(g_string, id, &len); getid(g_string, id, &len);
match(DIMFLTID); match(DIMFLTID);
@ -2115,7 +2116,7 @@ static double dimvariable(void)
match(CPAREN); match(CPAREN);
} }
if (answer) if (answer != NULL)
{ {
return *answer; return *answer;
} }
@ -2372,7 +2373,7 @@ static FAR void *getdimvar(FAR struct mb_dimvar_s *dv, ...)
break; break;
} }
} }
else if (dv->type = STRID) else if (dv->type == STRID)
{ {
switch (dv->ndims) switch (dv->ndims)
{ {
@ -2915,7 +2916,7 @@ static FAR char *stringdimvar(void)
char id[32]; char id[32];
int len; int len;
FAR struct mb_dimvar_s *dimvar; FAR struct mb_dimvar_s *dimvar;
FAR char **answer; FAR char **answer = NULL;
int index[5]; int index[5];
getid(g_string, id, &len); getid(g_string, id, &len);
@ -2957,6 +2958,7 @@ static FAR char *stringdimvar(void)
index[3] = integer(expr()); index[3] = integer(expr());
answer = getdimvar(dimvar, index[0], index[1], index[2], index[3]); answer = getdimvar(dimvar, index[0], index[1], index[2], index[3]);
break; break;
case 5: case 5:
index[0] = integer(expr()); index[0] = integer(expr());
match(COMMA); match(COMMA);
@ -2981,7 +2983,7 @@ static FAR char *stringdimvar(void)
if (!g_errorflag) if (!g_errorflag)
{ {
if (*answer) if (answer != NULL && *answer != NULL)
{ {
return *answer; return *answer;
} }
@ -3138,7 +3140,7 @@ static void match(int tok)
g_string += tokenlen(g_string, g_token); g_string += tokenlen(g_string, g_token);
g_token = gettoken(g_string); g_token = gettoken(g_string);
if (g_token == ERROR) if (g_token == SYNTAX_ERROR)
{ {
seterror(ERR_SYNTAX); seterror(ERR_SYNTAX);
} }
@ -3493,7 +3495,7 @@ static int gettoken(FAR const char *str)
} }
} }
return ERROR; return SYNTAX_ERROR;
} }
} }
@ -3599,7 +3601,7 @@ static int tokenlen(FAR const char *str, int tokenid)
case SEMICOLON: case SEMICOLON:
return 1; return 1;
case ERROR: case SYNTAX_ERROR:
return 0; return 0;
case PRINT: case PRINT: