More BAS 2.4 fixes

This commit is contained in:
Gregory Nutt 2014-10-27 15:37:19 -06:00
parent 845d074f05
commit 10d93102c3
4 changed files with 66 additions and 3 deletions

View File

@ -31,4 +31,33 @@ config INTERPRETERS_BAS
- Set CONFIG_LIBM=y in your .config file
if INTERPRETERS_BAS
config INTERPRETER_BAS_HAVE_ENVIRON
bool
default n
depends on EXPERIMENTAL
---help---
NuttX does not support the environ variable
config INTERPRETER_BAS_HAVE_SYSCFG
bool
default n
depends on EXPERIMENTAL
---help---
NuttX does not support the syscfg() function
config INTERPRETER_BAS_HAVE_SIGINT
bool
default n
depends on EXPERIMENTAL
---help---
NuttX does not support the SIGINT signal
config INTERPRETER_BAS_HAVE_SIGQUIT
bool
default n
depends on EXPERIMENTAL
---help---
NuttX does not support the SIGQUIT signal
endif

View File

@ -1,5 +1,6 @@
/* BASIC file system interface. */
/* #includes */ /*{{{C}}}*//*{{{*/
#include <nuttx/config.h>
#include "config.h"
#include <sys/time.h>
@ -45,7 +46,12 @@ static int capacity;
static int used;
static struct termios origMode,rawMode;
static const int open_mode[4]={ 0, O_RDONLY, O_WRONLY, O_RDWR };
static struct sigaction old_sigint, old_sigquit;
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGINT
static struct sigaction old_sigint;
#endif
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGQUIT
static struct sigaction old_sigquit;
#endif
static int termchannel;
const char *FS_errmsg;
@ -381,12 +387,14 @@ static void carriage_return(int chn) /*{{{*/
}
/*}}}*/
#endif
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGINT
static void sigintr(int sig) /*{{{*/
{
FS_intr=1;
FS_allowIntr(0);
}
/*}}}*/
#endif
int FS_opendev(int chn, int infd, int outfd) /*{{{*/
{
@ -782,21 +790,33 @@ int FS_truncate(int chn) /*{{{*/
/*}}}*/
void FS_shellmode(int dev) /*{{{*/
{
#if defined(CONFIG_INTERPRETER_BAS_HAVE_SIGINT) || defined(CONFIG_INTERPRETER_BAS_HAVE_SIGQUIT)
struct sigaction interrupt;
#endif
if (file[dev]->tty) tcsetattr(file[dev]->infd,TCSADRAIN,&origMode);
#if defined(CONFIG_INTERPRETER_BAS_HAVE_SIGINT) || defined(CONFIG_INTERPRETER_BAS_HAVE_SIGQUIT)
interrupt.sa_flags=0;
sigemptyset(&interrupt.sa_mask);
interrupt.sa_handler=SIG_IGN;
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGINT
sigaction(SIGINT,&interrupt,&old_sigint);
#endif
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGQUIT
sigaction(SIGQUIT,&interrupt,&old_sigquit);
#endif
#endif
}
/*}}}*/
void FS_fsmode(int chn) /*{{{*/
{
if (file[chn]->tty) tcsetattr(file[chn]->infd,TCSADRAIN,&rawMode);
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGINT
sigaction(SIGINT,&old_sigint,(struct sigaction *)0);
#endif
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGQUIT
sigaction(SIGQUIT,&old_sigquit,(struct sigaction *)0);
#endif
}
/*}}}*/
void FS_xonxoff(int chn, int on) /*{{{*/
@ -1421,6 +1441,7 @@ int FS_memOutput(int address, int value) /*{{{*/
/*}}}*/
void FS_allowIntr(int on) /*{{{*/
{
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGINT
struct sigaction breakact;
breakact.sa_handler=on ? sigintr : SIG_IGN;
@ -1428,5 +1449,6 @@ void FS_allowIntr(int on) /*{{{*/
sigaddset(&breakact.sa_mask,SIGINT);
breakact.sa_flags=0;
sigaction(SIGINT,&breakact,(struct sigaction *)0);
#endif
}
/*}}}*/

View File

@ -1,5 +1,6 @@
/* Global variables and functions. */
/* #includes */ /*{{{C}}}*//*{{{*/
#include <nuttx/config.h>
#include "config.h"
#include <sys/times.h>
@ -38,7 +39,13 @@
#endif
/*}}}*/
#ifndef CONFIG_INTERPRETER_BAS_HAVE_ENVIRON
extern char **environ;
#endif
#ifndef RAND_MAX
# define RAND_MAX 32767
#endif
static int wildcardmatch(const char *a, const char *pattern) /*{{{*/
{
@ -1337,7 +1344,11 @@ static struct Value *fn_tan(struct Value *v, struct Auto *stack) /*{{{*/
/*}}}*/
static struct Value *fn_timei(struct Value *v, struct Auto *stack) /*{{{*/
{
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SYSCFG
return Value_new_INTEGER(v,(unsigned long)(times((struct tms*)0)/(sysconf(_SC_CLK_TCK)/100.0)));
#else
return Value_new_INTEGER(v,(unsigned long)(times((struct tms*)0)/(CLK_TCK/100.0)));
#endif
}
/*}}}*/
static struct Value *fn_times(struct Value *v, struct Auto *stack) /*{{{*/

View File

@ -1,4 +1,5 @@
/* #includes */ /*{{{C}}}*//*{{{*/
#include <unistd.h>
#include "config.h"
#include <unistd.h>
@ -571,7 +572,7 @@ struct Value *stmt_DISPLAY(struct Value *value) /*{{{*/
if (eval(value,_("file name"))->type==V_ERROR || (pass!=DECLARE && Value_retype(value,V_STRING)->type==V_ERROR)) return value;
if (pass==INTERPRET && cat(value->u.string.character)==-1)
{
char *msg=strerror(errno);
const char *msg=strerror(errno);
Value_destroy(value);
pc=statementpc;
@ -1356,7 +1357,7 @@ struct Value *stmt_KILL(struct Value *value) /*{{{*/
if (eval(value,_("file name"))->type==V_ERROR || (pass!=DECLARE && Value_retype(value,V_STRING)->type==V_ERROR)) return value;
if (pass==INTERPRET && unlink(value->u.string.character)==-1)
{
char *msg=strerror(errno);
const char *msg=strerror(errno);
Value_destroy(value);
pc=statementpc;