summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-11-01 19:27:54 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-11-01 19:27:54 -0600
commit57d83918c7d2e1c099c12755858b5ddae98b0d5e (patch)
tree3af20de0196ab7d06d5b45906315d82ad8e350d8 /apps
parent7c30b35c00b68c2b5a422da7e480ef5d15355c1e (diff)
downloadnuttx-57d83918c7d2e1c099c12755858b5ddae98b0d5e.tar.gz
nuttx-57d83918c7d2e1c099c12755858b5ddae98b0d5e.tar.bz2
nuttx-57d83918c7d2e1c099c12755858b5ddae98b0d5e.zip
BAS: Another file is closer to the NuttX coding standard
Diffstat (limited to 'apps')
-rw-r--r--apps/interpreters/bas/fs.c2295
-rw-r--r--apps/interpreters/bas/value.c2
2 files changed, 1322 insertions, 975 deletions
diff --git a/apps/interpreters/bas/fs.c b/apps/interpreters/bas/fs.c
index 4a762a0d1..f40a0883d 100644
--- a/apps/interpreters/bas/fs.c
+++ b/apps/interpreters/bas/fs.c
@@ -1,5 +1,10 @@
+
/* BASIC file system interface. */
-/* #includes */ /*{{{C}}}*//*{{{*/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
#include <nuttx/config.h>
#include "config.h"
@@ -10,10 +15,10 @@
#include <errno.h>
#include <fcntl.h>
#ifdef HAVE_GETTEXT
-#include <libintl.h>
-#define _(String) gettext(String)
+# include <libintl.h>
+# define _(String) gettext(String)
#else
-#define _(String) String
+# define _(String) String
#endif
#include <math.h>
#include <signal.h>
@@ -23,29 +28,36 @@
#include <termios.h>
#include <time.h>
#ifdef HAVE_TERMCAP_H
-#include <termcap.h>
+# include <termcap.h>
#endif
#ifdef HAVE_CURSES_H
-#include <curses.h>
+# include <curses.h>
#endif
#include <unistd.h>
#include "fs.h"
#ifdef USE_DMALLOC
-#include "dmalloc.h"
+# include "dmalloc.h"
#endif
-/*}}}*/
-/* #defines */ /*{{{*/
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
#define LINEWIDTH 80
#define COLWIDTH 14
-/*}}}*/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
static struct FileStream **file;
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 termios origMode, rawMode;
+static const int open_mode[4] = { 0, O_RDONLY, O_WRONLY, O_RDWR };
+
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGINT
static struct sigaction old_sigint;
#endif
@@ -58,1084 +70,1353 @@ const char *FS_errmsg;
static char FS_errmsgbuf[80];
volatile int FS_intr;
-static int size(int dev) /*{{{*/
-{
- if (dev>=capacity)
- {
- int i;
- struct FileStream **n;
+#ifdef HAVE_TGETENT
+static char *term, entrybuf[2048], *cap;
+static char *cl, *cm, *ce, *cr, *md, *me, *AF, *AB;
+static int Co, NC;
+#endif
- if ((n=(struct FileStream**)realloc(file,(dev+1)*sizeof(struct FileStream*)))==(struct FileStream**)0)
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+static int size(int dev)
+{
+ if (dev >= capacity)
{
- FS_errmsg=strerror(errno);
- return -1;
+ int i;
+ struct FileStream **n;
+
+ n = (struct FileStream **)realloc(file, (dev + 1) * sizeof(struct FileStream *));
+ if (n == (struct FileStream **)0)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
+ file = n;
+ for (i = capacity; i <= dev; ++i)
+ file[i] = (struct FileStream *)0;
+
+ capacity = dev + 1;
}
- file=n;
- for (i=capacity; i<=dev; ++i) file[i]=(struct FileStream*)0;
- capacity=dev+1;
- }
+
return 0;
}
-/*}}}*/
-static int opened(int dev, int mode) /*{{{*/
+
+static int opened(int dev, int mode)
{
- int fd=-1;
+ int fd = -1;
- if (dev<0 || dev>=capacity || file[dev]==(struct FileStream*)0)
- {
- snprintf(FS_errmsgbuf,sizeof(FS_errmsgbuf),_("channel #%d not open"),dev);
- FS_errmsg=FS_errmsgbuf;
- return -1;
- }
- if (mode==-1) return 0;
- switch (mode)
- {
- case 0:
+ if (dev < 0 || dev >= capacity || file[dev] == (struct FileStream *)0)
{
- fd=file[dev]->outfd;
- if (fd==-1) snprintf(FS_errmsgbuf,sizeof(FS_errmsgbuf),_("channel #%d not opened for writing"),dev);
- break;
+ snprintf(FS_errmsgbuf, sizeof(FS_errmsgbuf), _("channel #%d not open"),
+ dev);
+ FS_errmsg = FS_errmsgbuf;
+ return -1;
}
- case 1:
+
+ if (mode == -1)
+ return 0;
+
+ switch (mode)
{
- fd=file[dev]->infd;
- if (fd==-1) snprintf(FS_errmsgbuf,sizeof(FS_errmsgbuf),_("channel #%d not opened for reading"),dev);
- break;
- }
+ case 0:
+ {
+ fd = file[dev]->outfd;
+ if (fd == -1)
+ snprintf(FS_errmsgbuf, sizeof(FS_errmsgbuf),
+ _("channel #%d not opened for writing"), dev);
+ break;
+ }
+ case 1:
+ {
+ fd = file[dev]->infd;
+ if (fd == -1)
+ snprintf(FS_errmsgbuf, sizeof(FS_errmsgbuf),
+ _("channel #%d not opened for reading"), dev);
+ break;
+ }
case 2:
- {
- fd=file[dev]->randomfd;
- if (fd==-1) snprintf(FS_errmsgbuf,sizeof(FS_errmsgbuf),_("channel #%d not opened for random access"),dev);
- break;
- }
+ {
+ fd = file[dev]->randomfd;
+ if (fd == -1)
+ snprintf(FS_errmsgbuf, sizeof(FS_errmsgbuf),
+ _("channel #%d not opened for random access"), dev);
+ break;
+ }
case 3:
- {
- fd=file[dev]->binaryfd;
- if (fd==-1) snprintf(FS_errmsgbuf,sizeof(FS_errmsgbuf),_("channel #%d not opened for binary access"),dev);
- break;
- }
+ {
+ fd = file[dev]->binaryfd;
+ if (fd == -1)
+ snprintf(FS_errmsgbuf, sizeof(FS_errmsgbuf),
+ _("channel #%d not opened for binary access"), dev);
+ break;
+ }
case 4:
+ {
+ fd =
+ (file[dev]->randomfd !=
+ -1 ? file[dev]->randomfd : file[dev]->binaryfd);
+ if (fd == -1)
+ snprintf(FS_errmsgbuf, sizeof(FS_errmsgbuf),
+ _("channel #%d not opened for random or binary access"),
+ dev);
+ break;
+ }
+ default:
+ assert(0);
+ }
+
+ if (fd == -1)
{
- fd=(file[dev]->randomfd!=-1?file[dev]->randomfd:file[dev]->binaryfd);
- if (fd==-1) snprintf(FS_errmsgbuf,sizeof(FS_errmsgbuf),_("channel #%d not opened for random or binary access"),dev);
- break;
+ FS_errmsg = FS_errmsgbuf;
+ return -1;
}
- default: assert(0);
- }
- if (fd==-1)
- {
- FS_errmsg=FS_errmsgbuf;
- return -1;
- }
- else return 0;
+ else
+ return 0;
}
-/*}}}*/
-static int refill(int dev) /*{{{*/
+
+static int refill(int dev)
{
struct FileStream *f;
ssize_t len;
- f=file[dev];
- f->inSize=0;
- len=read(f->infd,f->inBuf,sizeof(f->inBuf));
- if (len<=0)
- {
- f->inCapacity=0;
- FS_errmsg=(len==-1?strerror(errno):(const char*)0);
- return -1;
- }
+ f = file[dev];
+ f->inSize = 0;
+ len = read(f->infd, f->inBuf, sizeof(f->inBuf));
+ if (len <= 0)
+ {
+ f->inCapacity = 0;
+ FS_errmsg = (len == -1 ? strerror(errno) : (const char *)0);
+ return -1;
+ }
else
- {
- f->inCapacity=len;
- return 0;
- }
+ {
+ f->inCapacity = len;
+ return 0;
+ }
}
-/*}}}*/
-static int edit(int chn, int onl) /*{{{*/
+
+static int edit(int chn, int onl)
{
- struct FileStream *f=file[chn];
- char *buf=f->inBuf;
+ struct FileStream *f = file[chn];
+ char *buf = f->inBuf;
char ch;
int r;
- for (buf=f->inBuf; buf<(f->inBuf+f->inCapacity); ++buf)
- {
- if (*buf>='\0' && *buf<' ')
+ for (buf = f->inBuf; buf < (f->inBuf + f->inCapacity); ++buf)
{
- FS_putChar(chn,'^');
- FS_putChar(chn,*buf?(*buf+'a'-1):'@');
+ if (*buf >= '\0' && *buf < ' ')
+ {
+ FS_putChar(chn, '^');
+ FS_putChar(chn, *buf ? (*buf + 'a' - 1) : '@');
+ }
+ else
+ FS_putChar(chn, *buf);
}
- else FS_putChar(chn,*buf);
- }
do
- {
- FS_flush(chn);
- if ((r=read(f->infd,&ch,1))==-1)
- {
- f->inCapacity=0;
- FS_errmsg=strerror(errno);
- return -1;
- }
- else if (r==0 || (f->inCapacity==0 && ch==4))
- {
- FS_errmsg=(char*)0;
- return -1;
- }
- if (ch==rawMode.c_cc[VERASE])
- {
- if (f->inCapacity)
- {
- if (f->inBuf[f->inCapacity-1]>='\0' && f->inBuf[f->inCapacity-1]<' ') FS_putChars(chn,"\b\b \b\b");
- else FS_putChars(chn,"\b \b");
- --f->inCapacity;
- }
- }
- else if ((f->inCapacity+1)<sizeof(f->inBuf))
{
- if (ch!='\n')
- {
- if (ch>='\0' && ch<' ')
+ FS_flush(chn);
+ if ((r = read(f->infd, &ch, 1)) == -1)
{
- FS_putChar(chn,'^');
- FS_putChar(chn,ch?(ch+'a'-1):'@');
+ f->inCapacity = 0;
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+ else if (r == 0 || (f->inCapacity == 0 && ch == 4))
+ {
+ FS_errmsg = (char *)0;
+ return -1;
+ }
+
+ if (ch == rawMode.c_cc[VERASE])
+ {
+ if (f->inCapacity)
+ {
+ if (f->inBuf[f->inCapacity - 1] >= '\0' &&
+ f->inBuf[f->inCapacity - 1] < ' ')
+ FS_putChars(chn, "\b\b \b\b");
+ else
+ FS_putChars(chn, "\b \b");
+ --f->inCapacity;
+ }
+ }
+ else if ((f->inCapacity + 1) < sizeof(f->inBuf))
+ {
+ if (ch != '\n')
+ {
+ if (ch >= '\0' && ch < ' ')
+ {
+ FS_putChar(chn, '^');
+ FS_putChar(chn, ch ? (ch + 'a' - 1) : '@');
+ }
+ else
+ FS_putChar(chn, ch);
+ }
+ else if (onl)
+ FS_putChar(chn, '\n');
+ f->inBuf[f->inCapacity++] = ch;
}
- else FS_putChar(chn,ch);
- }
- else if (onl) FS_putChar(chn,'\n');
- f->inBuf[f->inCapacity++]=ch;
}
- } while (ch!='\n');
+ while (ch != '\n');
+
return 0;
}
-/*}}}*/
-static int outc(int ch) /*{{{*/
+
+static int outc(int ch)
{
struct FileStream *f;
- if (opened(termchannel,0)==-1) return -1;
- f=file[termchannel];
- if (f->outSize+1>=f->outCapacity && FS_flush(termchannel)==-1) return -1;
- f->outBuf[f->outSize++]=ch;
- FS_errmsg=(const char*)0;
+ if (opened(termchannel, 0) == -1)
+ return -1;
+
+ f = file[termchannel];
+ if (f->outSize + 1 >= f->outCapacity && FS_flush(termchannel) == -1)
+ return -1;
+
+ f->outBuf[f->outSize++] = ch;
+ FS_errmsg = (const char *)0;
return ch;
}
-/*}}}*/
-#ifdef HAVE_TGETENT
-static char *term,entrybuf[2048],*cap;
-static char *cl,*cm,*ce,*cr,*md,*me,*AF,*AB;
-static int Co,NC;
-static int mytputs(const char *str, int affcnt, int (*out)(int)) /*{{{*/
+#ifdef HAVE_TGETENT
+static int mytputs(const char *str, int affcnt, int (*out) (int))
{
-#ifdef TPUTS_RETURNS_VOID
- tputs(str,affcnt,out);
+# ifdef TPUTS_RETURNS_VOID
+ tputs(str, affcnt, out);
return 0;
-#else
- return tputs(str,affcnt,out);
-#endif
+# else
+ return tputs(str, affcnt, out);
+# endif
}
-/*}}}*/
-static int initTerminal(int chn) /*{{{*/
+
+static int initTerminal(int chn)
{
- static int init=0;
+ static int init = 0;
if (!init)
- {
- termchannel=chn;
- if ((term=getenv("TERM"))==(char*)0)
- {
- FS_errmsg=_("environment variable TERM is not set");
- return -1;
- }
- switch (tgetent(entrybuf,term))
{
- case -1:
- {
- FS_errmsg=_("reading terminal description failed");
- return -1;
- }
- case 0:
- {
- sprintf(FS_errmsgbuf,_("unknown terminal type %s"),term);
- FS_errmsg=FS_errmsgbuf;
- return -1;
- }
- case 1:
- {
- cl=tgetstr("cl",&cap);
- cm=tgetstr("cm",&cap);
- ce=tgetstr("ce",&cap);
- cr=tgetstr("cr",&cap);
- md=tgetstr("md",&cap);
- me=tgetstr("me",&cap);
- AF=tgetstr("AF",&cap);
- AB=tgetstr("AB",&cap);
- Co=tgetnum("Co");
- if ((NC=tgetnum("NC"))==-1) NC=0;
- return 0;
- }
+ termchannel = chn;
+ if ((term = getenv("TERM")) == (char *)0)
+ {
+ FS_errmsg = _("environment variable TERM is not set");
+ return -1;
+ }
+
+ switch (tgetent(entrybuf, term))
+ {
+ case -1:
+ {
+ FS_errmsg = _("reading terminal description failed");
+ return -1;
+ }
+ case 0:
+ {
+ sprintf(FS_errmsgbuf, _("unknown terminal type %s"), term);
+ FS_errmsg = FS_errmsgbuf;
+ return -1;
+ }
+ case 1:
+ {
+ cl = tgetstr("cl", &cap);
+ cm = tgetstr("cm", &cap);
+ ce = tgetstr("ce", &cap);
+ cr = tgetstr("cr", &cap);
+ md = tgetstr("md", &cap);
+ me = tgetstr("me", &cap);
+ AF = tgetstr("AF", &cap);
+ AB = tgetstr("AB", &cap);
+ Co = tgetnum("Co");
+ if ((NC = tgetnum("NC")) == -1)
+ NC = 0;
+
+ return 0;
+ }
+ }
+
+ init = 1;
}
- init=1;
- }
return 0;
}
-/*}}}*/
-static int cls(int chn) /*{{{*/
+
+static int cls(int chn)
{
- if (cl==(char*)0)
- {
- sprintf(FS_errmsgbuf,_("terminal type %s can not clear the screen"),term);
- FS_errmsg=FS_errmsgbuf;
+ if (cl == (char *)0)
+ {
+ sprintf(FS_errmsgbuf, _("terminal type %s can not clear the screen"),
+ term);
+ FS_errmsg = FS_errmsgbuf;
+ return -1;
+ }
+
+ if (mytputs(cl, 0, outc) == -1)
return -1;
- }
- if (mytputs(cl,0,outc)==-1) return -1;
+
return 0;
}
-/*}}}*/
-static int locate(int chn, int line, int column) /*{{{*/
+
+static int locate(int chn, int line, int column)
{
- termchannel=chn;
- if (cm==(char*)0)
- {
- sprintf(FS_errmsgbuf,_("terminal type %s can not position the cursor"),term);
- FS_errmsg=FS_errmsgbuf;
+ termchannel = chn;
+ if (cm == (char *)0)
+ {
+ sprintf(FS_errmsgbuf, _("terminal type %s can not position the cursor"),
+ term);
+ FS_errmsg = FS_errmsgbuf;
+ return -1;
+ }
+
+ if (mytputs(tgoto(cm, column - 1, line - 1), 0, outc) == -1)
return -1;
- }
- if (mytputs(tgoto(cm,column-1,line-1),0,outc)==-1) return -1;
+
return 0;
}
-/*}}}*/
-static int colour(int chn, int foreground, int background) /*{{{*/
-{
- if (AF && AB && Co>=8)
- {
- static int map[8]={ 0,4,2,6,1,5,3,7 };
- if (foreground!=-1)
+static int colour(int chn, int foreground, int background)
+{
+ if (AF && AB && Co >= 8)
{
- if (md && me && !(NC&32))
- {
- if (foreground>7 && file[chn]->outforeground<=7)
+ static int map[8] = { 0, 4, 2, 6, 1, 5, 3, 7 };
+
+ if (foreground != -1)
{
- if (mytputs(md,0,outc)==-1) return -1;
- /* all attributes are gone now, need to set background again */
- if (background==-1) background=file[chn]->outbackground;
+ if (md && me && !(NC & 32))
+ {
+ if (foreground > 7 && file[chn]->outforeground <= 7)
+ {
+ if (mytputs(md, 0, outc) == -1)
+ return -1;
+ /* all attributes are gone now, need to set background again */
+ if (background == -1)
+ background = file[chn]->outbackground;
+ }
+ else if (foreground <= 7 && file[chn]->outforeground > 7)
+ {
+ if (mytputs(me, 0, outc) == -1)
+ return -1;
+ }
+ }
+
+ if (mytputs(tgoto(AF, 0, map[foreground & 7]), 0, outc) == -1)
+ return -1;
}
- else if (foreground<=7 && file[chn]->outforeground>7)
+
+ if (background != -1)
{
- if (mytputs(me,0,outc)==-1) return -1;
+ if (mytputs(tgoto(AB, 0, map[background & 7]), 0, outc) == -1)
+ return -1;
}
- }
- if (mytputs(tgoto(AF,0,map[foreground&7]),0,outc)==-1) return -1;
- }
- if (background!=-1)
- {
- if (mytputs(tgoto(AB,0,map[background&7]),0,outc)==-1) return -1;
}
- }
+
return 0;
}
-/*}}}*/
-static int resetcolour(int chn) /*{{{*/
+
+static int resetcolour(int chn)
{
- if (me) mytputs(me,0,outc);
- if (ce) mytputs(ce,0,outc);
+ if (me)
+ mytputs(me, 0, outc);
+ if (ce)
+ mytputs(ce, 0, outc);
+
return 0;
}
-/*}}}*/
-static void carriage_return(int chn) /*{{{*/
+
+static void carriage_return(int chn)
{
- if (cr) mytputs(cr,0,outc);
- else outc('\r');
+ if (cr)
+ mytputs(cr, 0, outc);
+ else
+ outc('\r');
+
outc('\n');
}
-/*}}}*/
+
#else
-static int initTerminal(int chn) /*{{{*/
+static int initTerminal(int chn)
{
- termchannel=chn;
+ termchannel = chn;
return 0;
}
-/*}}}*/
-static int cls(int chn) /*{{{*/
+
+static int cls(int chn)
{
- FS_errmsg=_("This installation does not support terminal handling");
+ FS_errmsg = _("This installation does not support terminal handling");
return -1;
}
-/*}}}*/
-static int locate(int chn, int line, int column) /*{{{*/
+
+static int locate(int chn, int line, int column)
{
- FS_errmsg=_("This installation does not support terminal handling");
+ FS_errmsg = _("This installation does not support terminal handling");
return -1;
}
-/*}}}*/
-static int colour(int chn, int foreground, int background) /*{{{*/
+
+static int colour(int chn, int foreground, int background)
{
- FS_errmsg=_("This installation does not support terminal handling");
+ FS_errmsg = _("This installation does not support terminal handling");
return -1;
}
-/*}}}*/
-static int resetcolour(int chn) /*{{{*/
+
+static int resetcolour(int chn)
{
return 0;
}
-/*}}}*/
-static void carriage_return(int chn) /*{{{*/
+
+static void carriage_return(int chn)
{
outc('\r');
outc('\n');
}
-/*}}}*/
+
#endif
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGINT
-static void sigintr(int sig) /*{{{*/
+static void sigintr(int sig)
{
- FS_intr=1;
+ FS_intr = 1;
FS_allowIntr(0);
}
-/*}}}*/
+
#endif
-int FS_opendev(int chn, int infd, int outfd) /*{{{*/
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+int FS_opendev(int chn, int infd, int outfd)
{
- if (size(chn)==-1) return -1;
- if (file[chn]!=(struct FileStream*)0)
- {
- FS_errmsg=_("channel already open");
+ if (size(chn) == -1)
return -1;
- }
- file[chn]=malloc(sizeof(struct FileStream));
- file[chn]->dev=1;
- if ((file[chn]->tty=(infd==0 ? isatty(infd) && isatty(outfd) : 0)))
- {
- if (tcgetattr(infd,&origMode)==-1)
- {
- FS_errmsg=strerror(errno);
- free(file[chn]);
- file[chn]=(struct FileStream*)0;
+
+ if (file[chn] != (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel already open");
return -1;
}
- rawMode=origMode;
- rawMode.c_lflag&=~(ICANON|ECHO); /* IEXTEN would disable IUCLC, breaking UC only terminals */
- rawMode.c_cc[VMIN]=1;
- rawMode.c_cc[VTIME]=0;
- rawMode.c_oflag&=~ONLCR;
- if (tcsetattr(infd,TCSADRAIN,&rawMode)==-1)
+
+ file[chn] = malloc(sizeof(struct FileStream));
+ file[chn]->dev = 1;
+ if ((file[chn]->tty = (infd == 0 ? isatty(infd) && isatty(outfd) : 0)))
{
- FS_errmsg=strerror(errno);
- free(file[chn]);
- file[chn]=(struct FileStream*)0;
- return -1;
+ if (tcgetattr(infd, &origMode) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ free(file[chn]);
+ file[chn] = (struct FileStream *)0;
+ return -1;
+ }
+
+ rawMode = origMode;
+ rawMode.c_lflag &= ~(ICANON | ECHO); /* IEXTEN would disable IUCLC,
+ * breaking UC only terminals */
+ rawMode.c_cc[VMIN] = 1;
+ rawMode.c_cc[VTIME] = 0;
+ rawMode.c_oflag &= ~ONLCR;
+ if (tcsetattr(infd, TCSADRAIN, &rawMode) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ free(file[chn]);
+ file[chn] = (struct FileStream *)0;
+ return -1;
+ }
+
+ initTerminal(chn);
}
- initTerminal(chn);
- }
- file[chn]->recLength=1;
- file[chn]->infd=infd;
- file[chn]->inSize=0;
- file[chn]->inCapacity=0;
- file[chn]->outfd=outfd;
- file[chn]->outPos=0;
- file[chn]->outLineWidth=LINEWIDTH;
- file[chn]->outColWidth=COLWIDTH;
- file[chn]->outCapacity=sizeof(file[chn]->outBuf);
- file[chn]->outSize=0;
- file[chn]->outforeground=-1;
- file[chn]->outbackground=-1;
- file[chn]->randomfd=-1;
- file[chn]->binaryfd=-1;
- FS_errmsg=(const char*)0;
+
+ file[chn]->recLength = 1;
+ file[chn]->infd = infd;
+ file[chn]->inSize = 0;
+ file[chn]->inCapacity = 0;
+ file[chn]->outfd = outfd;
+ file[chn]->outPos = 0;
+ file[chn]->outLineWidth = LINEWIDTH;
+ file[chn]->outColWidth = COLWIDTH;
+ file[chn]->outCapacity = sizeof(file[chn]->outBuf);
+ file[chn]->outSize = 0;
+ file[chn]->outforeground = -1;
+ file[chn]->outbackground = -1;
+ file[chn]->randomfd = -1;
+ file[chn]->binaryfd = -1;
+ FS_errmsg = (const char *)0;
++used;
return 0;
}
-/*}}}*/
-int FS_openin(const char *name) /*{{{*/
+
+int FS_openin(const char *name)
{
- int chn,fd;
+ int chn, fd;
- if ((fd=open(name,O_RDONLY))==-1)
- {
- FS_errmsg=strerror(errno);
+ if ((fd = open(name, O_RDONLY)) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
+ for (chn = 0; chn < capacity; ++chn)
+ if (file[chn] == (struct FileStream *)0)
+ break;
+
+ if (size(chn) == -1)
return -1;
- }
- for (chn=0; chn<capacity; ++chn) if (file[chn]==(struct FileStream*)0) break;
- if (size(chn)==-1) return -1;
- file[chn]=malloc(sizeof(struct FileStream));
- file[chn]->recLength=1;
- file[chn]->dev=0;
- file[chn]->tty=0;
- file[chn]->infd=fd;
- file[chn]->inSize=0;
- file[chn]->inCapacity=0;
- file[chn]->outfd=-1;
- file[chn]->randomfd=-1;
- file[chn]->binaryfd=-1;
- FS_errmsg=(const char*)0;
+
+ file[chn] = malloc(sizeof(struct FileStream));
+ file[chn]->recLength = 1;
+ file[chn]->dev = 0;
+ file[chn]->tty = 0;
+ file[chn]->infd = fd;
+ file[chn]->inSize = 0;
+ file[chn]->inCapacity = 0;
+ file[chn]->outfd = -1;
+ file[chn]->randomfd = -1;
+ file[chn]->binaryfd = -1;
+ FS_errmsg = (const char *)0;
++used;
return chn;
}
-/*}}}*/
-int FS_openinChn(int chn, const char *name, int mode) /*{{{*/
+
+int FS_openinChn(int chn, const char *name, int mode)
{
int fd;
mode_t fl;
- if (size(chn)==-1) return -1;
- if (file[chn]!=(struct FileStream*)0)
- {
- FS_errmsg=_("channel already open");
+ if (size(chn) == -1)
return -1;
- }
- fl=open_mode[mode];
- /* Serial devices on Linux should be opened non-blocking, otherwise the */
+
+ if (file[chn] != (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel already open");
+ return -1;
+ }
+
+ fl = open_mode[mode];
+
+ /* Serial devices on Linux should be opened non-blocking, otherwise the */
/* open() may block already. Named pipes can not be opened non-blocking */
- /* in write-only mode, so first try non-blocking, then blocking. */
- if ((fd=open(name,fl|O_NONBLOCK))==-1)
- {
- if (errno!=ENXIO || (fd=open(name,fl))==-1)
+ /* in write-only mode, so first try non-blocking, then blocking. */
+
+ if ((fd = open(name, fl | O_NONBLOCK)) == -1)
+ {
+ if (errno != ENXIO || (fd = open(name, fl)) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+ }
+ else if (fcntl(fd, F_SETFL, (long)fl) == -1)
{
- FS_errmsg=strerror(errno);
+ FS_errmsg = strerror(errno);
+ close(fd);
return -1;
}
- }
- else if (fcntl(fd,F_SETFL,(long)fl)==-1)
- {
- FS_errmsg=strerror(errno);
- close(fd);
- return -1;
- }
- file[chn]=malloc(sizeof(struct FileStream));
- file[chn]->recLength=1;
- file[chn]->dev=0;
- file[chn]->tty=0;
- file[chn]->infd=fd;
- file[chn]->inSize=0;
- file[chn]->inCapacity=0;
- file[chn]->outfd=-1;
- file[chn]->randomfd=-1;
- file[chn]->binaryfd=-1;
- FS_errmsg=(const char*)0;
+
+ file[chn] = malloc(sizeof(struct FileStream));
+ file[chn]->recLength = 1;
+ file[chn]->dev = 0;
+ file[chn]->tty = 0;
+ file[chn]->infd = fd;
+ file[chn]->inSize = 0;
+ file[chn]->inCapacity = 0;
+ file[chn]->outfd = -1;
+ file[chn]->randomfd = -1;
+ file[chn]->binaryfd = -1;
+ FS_errmsg = (const char *)0;
++used;
return chn;
}
-/*}}}*/
-int FS_openout(const char *name) /*{{{*/
+
+int FS_openout(const char *name)
{
- int chn,fd;
+ int chn, fd;
+
+ if ((fd = open(name, O_WRONLY | O_TRUNC | O_CREAT, 0666)) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
- if ((fd=open(name,O_WRONLY|O_TRUNC|O_CREAT,0666))==-1)
- {
- FS_errmsg=strerror(errno);
+ for (chn = 0; chn < capacity; ++chn)
+ if (file[chn] == (struct FileStream *)0)
+ break;
+
+ if (size(chn) == -1)
return -1;
- }
- for (chn=0; chn<capacity; ++chn) if (file[chn]==(struct FileStream*)0) break;
- if (size(chn)==-1) return -1;
- file[chn]=malloc(sizeof(struct FileStream));
- file[chn]->recLength=1;
- file[chn]->dev=0;
- file[chn]->tty=0;
- file[chn]->infd=-1;
- file[chn]->outfd=fd;
- file[chn]->outPos=0;
- file[chn]->outLineWidth=LINEWIDTH;
- file[chn]->outColWidth=COLWIDTH;
- file[chn]->outSize=0;
- file[chn]->outCapacity=sizeof(file[chn]->outBuf);
- file[chn]->randomfd=-1;
- file[chn]->binaryfd=-1;
- FS_errmsg=(const char*)0;
+
+ file[chn] = malloc(sizeof(struct FileStream));
+ file[chn]->recLength = 1;
+ file[chn]->dev = 0;
+ file[chn]->tty = 0;
+ file[chn]->infd = -1;
+ file[chn]->outfd = fd;
+ file[chn]->outPos = 0;
+ file[chn]->outLineWidth = LINEWIDTH;
+ file[chn]->outColWidth = COLWIDTH;
+ file[chn]->outSize = 0;
+ file[chn]->outCapacity = sizeof(file[chn]->outBuf);
+ file[chn]->randomfd = -1;
+ file[chn]->binaryfd = -1;
+ FS_errmsg = (const char *)0;
++used;
return chn;
}
-/*}}}*/
-int FS_openoutChn(int chn, const char *name, int mode, int append) /*{{{*/
+
+int FS_openoutChn(int chn, const char *name, int mode, int append)
{
int fd;
mode_t fl;
- if (size(chn)==-1) return -1;
- if (file[chn]!=(struct FileStream*)0)
- {
- FS_errmsg=_("channel already open");
+ if (size(chn) == -1)
return -1;
- }
- fl=open_mode[mode]|(append?O_APPEND:0);
- /* Serial devices on Linux should be opened non-blocking, otherwise the */
+
+ if (file[chn] != (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel already open");
+ return -1;
+ }
+
+ fl = open_mode[mode] | (append ? O_APPEND : 0);
+
+ /* Serial devices on Linux should be opened non-blocking, otherwise the */
/* open() may block already. Named pipes can not be opened non-blocking */
- /* in write-only mode, so first try non-blocking, then blocking. */
- if ((fd=open(name,fl|O_CREAT|(append?0:O_TRUNC)|O_NONBLOCK,0666))==-1)
- {
- if (errno!=ENXIO || (fd=open(name,fl|O_CREAT|(append?0:O_TRUNC),0666))==-1)
+ /* in write-only mode, so first try non-blocking, then blocking. */
+
+ fd = open(name, fl | O_CREAT | (append ? 0 : O_TRUNC) | O_NONBLOCK, 0666);
+ if (fd == -1)
{
- FS_errmsg=strerror(errno);
+ if (errno != ENXIO ||
+ (fd = open(name, fl | O_CREAT | (append ? 0 : O_TRUNC), 0666)) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+ }
+ else if (fcntl(fd, F_SETFL, (long)fl) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ close(fd);
return -1;
}
- }
- else if (fcntl(fd,F_SETFL,(long)fl)==-1)
- {
- FS_errmsg=strerror(errno);
- close(fd);
- return -1;
- }
- file[chn]=malloc(sizeof(struct FileStream));
- file[chn]->recLength=1;
- file[chn]->dev=0;
- file[chn]->tty=0;
- file[chn]->infd=-1;
- file[chn]->outfd=fd;
- file[chn]->outPos=0;
- file[chn]->outLineWidth=LINEWIDTH;
- file[chn]->outColWidth=COLWIDTH;
- file[chn]->outSize=0;
- file[chn]->outCapacity=sizeof(file[chn]->outBuf);
- file[chn]->randomfd=-1;
- file[chn]->binaryfd=-1;
- FS_errmsg=(const char*)0;
+
+ file[chn] = malloc(sizeof(struct FileStream));
+ file[chn]->recLength = 1;
+ file[chn]->dev = 0;
+ file[chn]->tty = 0;
+ file[chn]->infd = -1;
+ file[chn]->outfd = fd;
+ file[chn]->outPos = 0;
+ file[chn]->outLineWidth = LINEWIDTH;
+ file[chn]->outColWidth = COLWIDTH;
+ file[chn]->outSize = 0;
+ file[chn]->outCapacity = sizeof(file[chn]->outBuf);
+ file[chn]->randomfd = -1;
+ file[chn]->binaryfd = -1;
+ FS_errmsg = (const char *)0;
++used;
return chn;
}
-/*}}}*/
-int FS_openrandomChn(int chn, const char *name, int mode, int recLength) /*{{{*/
+
+int FS_openrandomChn(int chn, const char *name, int mode, int recLength)
{
int fd;
- assert(chn>=0);
- assert(name!=(const char*)0);
- assert(recLength>0);
- if (size(chn)==-1) return -1;
- if (file[chn]!=(struct FileStream*)0)
- {
- FS_errmsg=_("channel already open");
- return -1;
- }
- if ((fd=open(name,open_mode[mode]|O_CREAT,0666))==-1)
- {
- FS_errmsg=strerror(errno);
+ assert(chn >= 0);
+ assert(name != (const char *)0);
+ assert(recLength > 0);
+ if (size(chn) == -1)
return -1;
- }
- file[chn]=malloc(sizeof(struct FileStream));
- file[chn]->recLength=recLength;
- file[chn]->dev=0;
- file[chn]->tty=0;
- file[chn]->infd=-1;
- file[chn]->outfd=-1;
- file[chn]->randomfd=fd;
- file[chn]->recBuf=malloc(recLength);
- memset(file[chn]->recBuf,0,recLength);
+
+ if (file[chn] != (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel already open");
+ return -1;
+ }
+
+ if ((fd = open(name, open_mode[mode] | O_CREAT, 0666)) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
+ file[chn] = malloc(sizeof(struct FileStream));
+ file[chn]->recLength = recLength;
+ file[chn]->dev = 0;
+ file[chn]->tty = 0;
+ file[chn]->infd = -1;
+ file[chn]->outfd = -1;
+ file[chn]->randomfd = fd;
+ file[chn]->recBuf = malloc(recLength);
+ memset(file[chn]->recBuf, 0, recLength);
StringField_new(&file[chn]->field);
- file[chn]->binaryfd=-1;
- FS_errmsg=(const char*)0;
+ file[chn]->binaryfd = -1;
+ FS_errmsg = (const char *)0;
++used;
return chn;
}
-/*}}}*/
-int FS_openbinaryChn(int chn, const char *name, int mode) /*{{{*/
+
+int FS_openbinaryChn(int chn, const char *name, int mode)
{
int fd;
- assert(chn>=0);
- assert(name!=(const char*)0);
- if (size(chn)==-1) return -1;
- if (file[chn]!=(struct FileStream*)0)
- {
- FS_errmsg=_("channel already open");
- return -1;
- }
- if ((fd=open(name,open_mode[mode]|O_CREAT,0666))==-1)
- {
- FS_errmsg=strerror(errno);
+ assert(chn >= 0);
+ assert(name != (const char *)0);
+ if (size(chn) == -1)
return -1;
- }
- file[chn]=malloc(sizeof(struct FileStream));
- file[chn]->recLength=1;
- file[chn]->dev=0;
- file[chn]->tty=0;
- file[chn]->infd=-1;
- file[chn]->outfd=-1;
- file[chn]->randomfd=-1;
- file[chn]->binaryfd=fd;
- FS_errmsg=(const char*)0;
+
+ if (file[chn] != (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel already open");
+ return -1;
+ }
+
+ if ((fd = open(name, open_mode[mode] | O_CREAT, 0666)) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+ file[chn] = malloc(sizeof(struct FileStream));
+ file[chn]->recLength = 1;
+ file[chn]->dev = 0;
+ file[chn]->tty = 0;
+ file[chn]->infd = -1;
+ file[chn]->outfd = -1;
+ file[chn]->randomfd = -1;
+ file[chn]->binaryfd = fd;
+ FS_errmsg = (const char *)0;
++used;
return chn;
}
-/*}}}*/
-int FS_freechn(void) /*{{{*/
+
+int FS_freechn(void)
{
int i;
- for (i=0; i<capacity && file[i]; ++i);
- if (size(i)==-1) return -1;
+ for (i = 0; i < capacity && file[i]; ++i);
+ if (size(i) == -1)
+ return -1;
+
return i;
}
-/*}}}*/
-int FS_flush(int dev) /*{{{*/
+
+int FS_flush(int dev)
{
ssize_t written;
size_t offset;
- if (file[dev]==(struct FileStream*)0)
- {
- FS_errmsg=_("channel not open");
- return -1;
- }
- offset=0;
- while (offset<file[dev]->outSize)
- {
- written=write(file[dev]->outfd,file[dev]->outBuf+offset,file[dev]->outSize-offset);
- if (written==-1)
- {
- FS_errmsg=strerror(errno);
+ if (file[dev] == (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel not open");
return -1;
}
- else offset+=written;
- }
- file[dev]->outSize=0;
- FS_errmsg=(const char*)0;
+
+ offset = 0;
+ while (offset < file[dev]->outSize)
+ {
+ written =
+ write(file[dev]->outfd, file[dev]->outBuf + offset,
+ file[dev]->outSize - offset);
+ if (written == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+ else
+ offset += written;
+ }
+
+ file[dev]->outSize = 0;
+ FS_errmsg = (const char *)0;
return 0;
}
-/*}}}*/
-int FS_close(int dev) /*{{{*/
+
+int FS_close(int dev)
{
- if (file[dev]==(struct FileStream*)0)
- {
- FS_errmsg=_("channel not open");
- return -1;
- }
- if (file[dev]->outfd>=0)
- {
- if (file[dev]->tty && (file[dev]->outforeground!=-1 || file[dev]->outbackground!=-1)) resetcolour(dev);
- FS_flush(dev);
- close(file[dev]->outfd);
- }
- if (file[dev]->randomfd>=0)
- {
- StringField_destroy(&file[dev]->field);
- free(file[dev]->recBuf);
- close(file[dev]->randomfd);
- }
- if (file[dev]->binaryfd>=0)
- {
- close(file[dev]->binaryfd);
- }
- if (file[dev]->tty) tcsetattr(file[dev]->infd,TCSADRAIN,&origMode);
- if (file[dev]->infd>=0) close(file[dev]->infd);
+ if (file[dev] == (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel not open");
+ return -1;
+ }
+
+ if (file[dev]->outfd >= 0)
+ {
+ if (file[dev]->tty &&
+ (file[dev]->outforeground != -1 || file[dev]->outbackground != -1))
+ resetcolour(dev);
+ FS_flush(dev);
+ close(file[dev]->outfd);
+ }
+
+ if (file[dev]->randomfd >= 0)
+ {
+ StringField_destroy(&file[dev]->field);
+ free(file[dev]->recBuf);
+ close(file[dev]->randomfd);
+ }
+
+ if (file[dev]->binaryfd >= 0)
+ {
+ close(file[dev]->binaryfd);
+ }
+
+ if (file[dev]->tty)
+ tcsetattr(file[dev]->infd, TCSADRAIN, &origMode);
+
+ if (file[dev]->infd >= 0)
+ close(file[dev]->infd);
+
free(file[dev]);
- file[dev]=(struct FileStream*)0;
- FS_errmsg=(const char*)0;
- if (--used==0)
- {
- free(file);
- capacity=0;
- }
+ file[dev] = (struct FileStream *)0;
+ FS_errmsg = (const char *)0;
+ if (--used == 0)
+ {
+ free(file);
+ capacity = 0;
+ }
+
return 0;
}
-/*}}}*/
-int FS_istty(int chn) /*{{{*/
+
+int FS_istty(int chn)
{
return (file[chn] && file[chn]->tty);
}
-/*}}}*/
-int FS_lock(int chn, off_t offset, off_t length, int mode, int w) /*{{{*/
+
+int FS_lock(int chn, off_t offset, off_t length, int mode, int w)
{
int fd;
struct flock recordLock;
- if (file[chn]==(struct FileStream*)0)
- {
- FS_errmsg=_("channel not open");
- return -1;
- }
- if ((fd=file[chn]->infd)==-1)
- if ((fd=file[chn]->outfd)==-1)
- if ((fd=file[chn]->randomfd)==-1)
- if ((fd=file[chn]->binaryfd)==-1) assert(0);
- recordLock.l_whence=SEEK_SET;
- recordLock.l_start=offset;
- recordLock.l_len=length;
+ if (file[chn] == (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel not open");
+ return -1;
+ }
+
+ if ((fd = file[chn]->infd) == -1)
+ if ((fd = file[chn]->outfd) == -1)
+ if ((fd = file[chn]->randomfd) == -1)
+ if ((fd = file[chn]->binaryfd) == -1)
+ assert(0);
+
+ recordLock.l_whence = SEEK_SET;
+ recordLock.l_start = offset;
+ recordLock.l_len = length;
switch (mode)
- {
- case FS_LOCK_SHARED: recordLock.l_type=F_RDLCK; break;
- case FS_LOCK_EXCLUSIVE: recordLock.l_type=F_WRLCK; break;
- case FS_LOCK_NONE: recordLock.l_type=F_UNLCK; break;
- default: assert(0);
- }
- if (fcntl(fd,w ? F_SETLKW : F_SETLK,&recordLock)==-1)
- {
- FS_errmsg=strerror(errno);
- return -1;
- }
+ {
+ case FS_LOCK_SHARED:
+ recordLock.l_type = F_RDLCK;
+ break;
+ case FS_LOCK_EXCLUSIVE:
+ recordLock.l_type = F_WRLCK;
+ break;
+ case FS_LOCK_NONE:
+ recordLock.l_type = F_UNLCK;
+ break;
+ default:
+ assert(0);
+ }
+
+ if (fcntl(fd, w ? F_SETLKW : F_SETLK, &recordLock) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
return 0;
}
-/*}}}*/
-int FS_truncate(int chn) /*{{{*/
+
+int FS_truncate(int chn)
{
int fd;
off_t o;
- if (file[chn]==(struct FileStream*)0)
- {
- FS_errmsg=_("channel not open");
- return -1;
- }
- if ((fd=file[chn]->infd)==-1)
- if ((fd=file[chn]->outfd)==-1)
- if ((fd=file[chn]->randomfd)==-1)
- if ((fd=file[chn]->binaryfd)==-1) assert(0);
- if ((o=lseek(fd,SEEK_CUR,0))==(off_t)-1 || ftruncate(fd,o+1)==-1)
- {
- FS_errmsg=strerror(errno);
- return -1;
- }
+ if (file[chn] == (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel not open");
+ return -1;
+ }
+
+ if ((fd = file[chn]->infd) == -1)
+ if ((fd = file[chn]->outfd) == -1)
+ if ((fd = file[chn]->randomfd) == -1)
+ if ((fd = file[chn]->binaryfd) == -1)
+ assert(0);
+
+ if ((o = lseek(fd, 0, SEEK_CUR)) == (off_t) - 1 || ftruncate(fd, o + 1) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
return 0;
}
-/*}}}*/
-void FS_shellmode(int dev) /*{{{*/
+
+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 (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;
+ 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
+ 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) /*{{{*/
+
+void FS_fsmode(int chn)
{
- if (file[chn]->tty) tcsetattr(file[chn]->infd,TCSADRAIN,&rawMode);
+ if (file[chn]->tty)
+ tcsetattr(file[chn]->infd, TCSADRAIN, &rawMode);
+
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGINT
- sigaction(SIGINT,&old_sigint,(struct sigaction *)0);
+ sigaction(SIGINT, &old_sigint, (struct sigaction *)0);
#endif
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGQUIT
- sigaction(SIGQUIT,&old_sigquit,(struct sigaction *)0);
+ sigaction(SIGQUIT, &old_sigquit, (struct sigaction *)0);
#endif
}
-/*}}}*/
-void FS_xonxoff(int chn, int on) /*{{{*/
+
+void FS_xonxoff(int chn, int on)
{
if (file[chn]->tty)
- {
- if (on) rawMode.c_iflag|=(IXON|IXOFF);
- else rawMode.c_iflag&=~(IXON|IXOFF);
- tcsetattr(file[chn]->infd,TCSADRAIN,&rawMode);
- }
+ {
+ if (on)
+ rawMode.c_iflag |= (IXON | IXOFF);
+ else
+ rawMode.c_iflag &= ~(IXON | IXOFF);
+
+ tcsetattr(file[chn]->infd, TCSADRAIN, &rawMode);
+ }
}
-/*}}}*/
-int FS_put(int chn) /*{{{*/
+
+int FS_put(int chn)
{
- ssize_t offset,written;
+ ssize_t offset, written;
- if (opened(chn,2)==-1) return -1;
- offset=0;
- while (offset<file[chn]->recLength)
- {
- written=write(file[chn]->randomfd,file[chn]->recBuf+offset,file[chn]->recLength-offset);
- if (written==-1)
+ if (opened(chn, 2) == -1)
+ return -1;
+
+ offset = 0;
+ while (offset < file[chn]->recLength)
{
- FS_errmsg=strerror(errno);
- return -1;
+ written =
+ write(file[chn]->randomfd, file[chn]->recBuf + offset,
+ file[chn]->recLength - offset);
+ if (written == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+ else
+ offset += written;
}
- else offset+=written;
- }
- FS_errmsg=(const char*)0;
+
+ FS_errmsg = (const char *)0;
return 0;
}
-/*}}}*/
-int FS_putChar(int dev, char ch) /*{{{*/
+
+int FS_putChar(int dev, char ch)
{
struct FileStream *f;
- if (opened(dev,0)==-1) return -1;
- f=file[dev];
- if (ch=='\n') f->outPos=0;
- if (ch=='\b' && f->outPos) --f->outPos;
- if (f->outSize+2>=f->outCapacity && FS_flush(dev)==-1) return -1;
- if (f->outLineWidth && f->outPos==f->outLineWidth)
- {
- if (FS_istty(dev)) carriage_return(dev);
- else f->outBuf[f->outSize++]='\n';
- f->outPos=0;
- }
- if (FS_istty(dev) && ch=='\n') carriage_return(dev);
- else f->outBuf[f->outSize++]=ch;
- if (ch!='\n' && ch!='\b') ++f->outPos;
- FS_errmsg=(const char*)0;
+ if (opened(dev, 0) == -1)
+ return -1;
+
+ f = file[dev];
+ if (ch == '\n')
+ f->outPos = 0;
+
+ if (ch == '\b' && f->outPos)
+ --f->outPos;
+
+ if (f->outSize + 2 >= f->outCapacity && FS_flush(dev) == -1)
+ return -1;
+
+ if (f->outLineWidth && f->outPos == f->outLineWidth)
+ {
+ if (FS_istty(dev))
+ carriage_return(dev);
+ else
+ f->outBuf[f->outSize++] = '\n';
+
+ f->outPos = 0;
+ }
+
+ if (FS_istty(dev) && ch == '\n')
+ carriage_return(dev);
+ else
+ f->outBuf[f->outSize++] = ch;
+
+ if (ch != '\n' && ch != '\b')
+ ++f->outPos;
+
+ FS_errmsg = (const char *)0;
return 0;
}
-/*}}}*/
-int FS_putChars(int dev, const char *chars) /*{{{*/
+
+int FS_putChars(int dev, const char *chars)
{
- while (*chars) if (FS_putChar(dev,*chars++)==-1) return -1;
+ while (*chars)
+ if (FS_putChar(dev, *chars++) == -1)
+ return -1;
+
return 0;
}
-/*}}}*/
-int FS_putString(int dev, const struct String *s) /*{{{*/
+
+int FS_putString(int dev, const struct String *s)
{
- size_t len=s->length;
- const char *c=s->character;
+ size_t len = s->length;
+ const char *c = s->character;
+
+ while (len)
+ if (FS_putChar(dev, *c++) == -1)
+ return -1;
+ else
+ --len;
- while (len) if (FS_putChar(dev,*c++)==-1) return -1; else --len;
return 0;
}
-/*}}}*/
-int FS_putItem(int dev, const struct String *s) /*{{{*/
+
+int FS_putItem(int dev, const struct String *s)
{
struct FileStream *f;
- if (opened(dev,0)==-1) return -1;
- f=file[dev];
- if (f->outPos && f->outPos+s->length>f->outLineWidth) FS_nextline(dev);
+ if (opened(dev, 0) == -1)
+ return -1;
+
+ f = file[dev];
+ if (f->outPos && f->outPos + s->length > f->outLineWidth)
+ FS_nextline(dev);
+
return FS_putString(dev, s);
}
-/*}}}*/
-int FS_putbinaryString(int chn, const struct String *s) /*{{{*/
+
+int FS_putbinaryString(int chn, const struct String *s)
{
- if (opened(chn,3)==-1) return -1;
- if (s->length && write(file[chn]->binaryfd,s->character,s->length)!=s->length)
- {
- FS_errmsg=strerror(errno);
+ if (opened(chn, 3) == -1)
return -1;
- }
+
+ if (s->length &&
+ write(file[chn]->binaryfd, s->character, s->length) != s->length)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
return 0;
}
-/*}}}*/
-int FS_putbinaryInteger(int chn, long int x) /*{{{*/
+
+int FS_putbinaryInteger(int chn, long int x)
{
char s[sizeof(long int)];
int i;
- if (opened(chn,3)==-1) return -1;
- for (i=0; i<sizeof(x); ++i,x>>=8) s[i]=(x&0xff);
- if (write(file[chn]->binaryfd,s,sizeof(s))!=sizeof(s))
- {
- FS_errmsg=strerror(errno);
+ if (opened(chn, 3) == -1)
return -1;
- }
+
+ for (i = 0; i < sizeof(x); ++i, x >>= 8)
+ s[i] = (x & 0xff);
+
+ if (write(file[chn]->binaryfd, s, sizeof(s)) != sizeof(s))
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
return 0;
}
-/*}}}*/
-int FS_putbinaryReal(int chn, double x) /*{{{*/
+
+int FS_putbinaryReal(int chn, double x)
{
- if (opened(chn,3)==-1) return -1;
- if (write(file[chn]->binaryfd,&x,sizeof(x))!=sizeof(x))
- {
- FS_errmsg=strerror(errno);
+ if (opened(chn, 3) == -1)
return -1;
- }
+
+ if (write(file[chn]->binaryfd, &x, sizeof(x)) != sizeof(x))
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
return 0;
}
-/*}}}*/
-int FS_getbinaryString(int chn, struct String *s) /*{{{*/
+
+int FS_getbinaryString(int chn, struct String *s)
{
ssize_t len;
- if (opened(chn,3)==-1) return -1;
- if (s->length && (len=read(file[chn]->binaryfd,s->character,s->length))!=s->length)
- {
- if (len==-1) FS_errmsg=strerror(errno);
- else FS_errmsg=_("End of file");
+ if (opened(chn, 3) == -1)
return -1;
- }
+
+ if (s->length &&
+ (len = read(file[chn]->binaryfd, s->character, s->length)) != s->length)
+ {
+ if (len == -1)
+ FS_errmsg = strerror(errno);
+ else
+ FS_errmsg = _("End of file");
+
+ return -1;
+ }
+
return 0;
}
-/*}}}*/
-int FS_getbinaryInteger(int chn, long int *x) /*{{{*/
+
+int FS_getbinaryInteger(int chn, long int *x)
{
char s[sizeof(long int)];
int i;
ssize_t len;
- if (opened(chn,3)==-1) return -1;
- if ((len=read(file[chn]->binaryfd,s,sizeof(s)))!=sizeof(s))
- {
- if (len==-1) FS_errmsg=strerror(errno);
- else FS_errmsg=_("End of file");
+ if (opened(chn, 3) == -1)
return -1;
- }
- *x=(s[sizeof(x)-1]<0) ? -1 : 0;
- for (i=sizeof(s)-1; i>=0; --i) *x=(*x<<8)|(s[i]&0xff);
+
+ if ((len = read(file[chn]->binaryfd, s, sizeof(s))) != sizeof(s))
+ {
+ if (len == -1)
+ FS_errmsg = strerror(errno);
+ else
+ FS_errmsg = _("End of file");
+
+ return -1;
+ }
+
+ *x = (s[sizeof(x) - 1] < 0) ? -1 : 0;
+ for (i = sizeof(s) - 1; i >= 0; --i)
+ *x = (*x << 8) | (s[i] & 0xff);
+
return 0;
}
-/*}}}*/
-int FS_getbinaryReal(int chn, double *x) /*{{{*/
+
+int FS_getbinaryReal(int chn, double *x)
{
ssize_t len;
- if (opened(chn,3)==-1) return -1;
- if ((len=read(file[chn]->binaryfd,x,sizeof(*x)))!=sizeof(*x))
- {
- if (len==-1) FS_errmsg=strerror(errno);
- else FS_errmsg=_("End of file");
+ if (opened(chn, 3) == -1)
return -1;
- }
+
+ if ((len = read(file[chn]->binaryfd, x, sizeof(*x))) != sizeof(*x))
+ {
+ if (len == -1)
+ FS_errmsg = strerror(errno);
+ else
+ FS_errmsg = _("End of file");
+
+ return -1;
+ }
+
return 0;
}
-/*}}}*/
-int FS_nextcol(int dev) /*{{{*/
+
+int FS_nextcol(int dev)
{
struct FileStream *f;
- if (opened(dev,0)==-1) return -1;
- f=file[dev];
- if
- (
- f->outPos%f->outColWidth
- && f->outLineWidth
- && ((f->outPos/f->outColWidth+2)*f->outColWidth)>f->outLineWidth
- )
- {
- return FS_putChar(dev,'\n');
- }
- if (!(f->outPos%f->outColWidth) && FS_putChar(dev,' ')==-1) return -1;
- while (f->outPos%f->outColWidth) if (FS_putChar(dev,' ')==-1) return -1;
+ if (opened(dev, 0) == -1)
+ return -1;
+
+ f = file[dev];
+ if (f->outPos % f->outColWidth
+ && f->outLineWidth
+ && ((f->outPos / f->outColWidth + 2) * f->outColWidth) > f->outLineWidth)
+ {
+ return FS_putChar(dev, '\n');
+ }
+
+ if (!(f->outPos % f->outColWidth) && FS_putChar(dev, ' ') == -1)
+ return -1;
+
+ while (f->outPos % f->outColWidth)
+ if (FS_putChar(dev, ' ') == -1)
+ return -1;
+
return 0;
}
-/*}}}*/
-int FS_nextline(int dev) /*{{{*/
+
+int FS_nextline(int dev)
{
struct FileStream *f;
- if (opened(dev,0)==-1) return -1;
- f=file[dev];
- if
- (
- f->outPos
- && FS_putChar(dev,'\n')==-1
- ) return -1;
+ if (opened(dev, 0) == -1)
+ return -1;
+
+ f = file[dev];
+ if (f->outPos && FS_putChar(dev, '\n') == -1)
+ return -1;
+
return 0;
}
-/*}}}*/
-int FS_tab(int dev, int position) /*{{{*/
+
+int FS_tab(int dev, int position)
{
- struct FileStream *f=file[dev];
+ struct FileStream *f = file[dev];
+
+ if (f->outLineWidth && position >= f->outLineWidth)
+ position = f->outLineWidth - 1;
+
+ while (f->outPos < (position - 1))
+ if (FS_putChar(dev, ' ') == -1)
+ return -1;
- if (f->outLineWidth && position>=f->outLineWidth) position=f->outLineWidth-1;
- while (f->outPos<(position-1)) if (FS_putChar(dev,' ')==-1) return -1;
return 0;
}
-/*}}}*/
-int FS_width(int dev, int width) /*{{{*/
+
+int FS_width(int dev, int width)
{
- if (opened(dev,0)==-1) return -1;
- if (width<0)
- {
- FS_errmsg=_("negative width");
+ if (opened(dev, 0) == -1)
return -1;
- }
- file[dev]->outLineWidth=width;
+
+ if (width < 0)
+ {
+ FS_errmsg = _("negative width");
+ return -1;
+ }
+
+ file[dev]->outLineWidth = width;
return 0;
}
-/*}}}*/
-int FS_zone(int dev, int zone) /*{{{*/
+
+int FS_zone(int dev, int zone)
{
- if (opened(dev,0)==-1) return -1;
- if (zone<=0)
- {
- FS_errmsg=_("non-positive zone width");
+ if (opened(dev, 0) == -1)
return -1;
- }
- file[dev]->outColWidth=zone;
+
+ if (zone <= 0)
+ {
+ FS_errmsg = _("non-positive zone width");
+ return -1;
+ }
+
+ file[dev]->outColWidth = zone;
return 0;
}
-/*}}}*/
-int FS_cls(int chn) /*{{{*/
+
+int FS_cls(int chn)
{
struct FileStream *f;
- if (opened(chn,0)==-1) return -1;
- f=file[chn];
+ if (opened(chn, 0) == -1)
+ return -1;
+
+ f = file[chn];
if (!f->tty)
- {
- FS_errmsg=_("not a terminal");
+ {
+ FS_errmsg = _("not a terminal");
+ return -1;
+ }
+
+ if (cls(chn) == -1)
+ return -1;
+
+ if (FS_flush(chn) == -1)
return -1;
- }
- if (cls(chn)==-1) return -1;
- if (FS_flush(chn)==-1) return -1;
- f->outPos=0;
+
+ f->outPos = 0;
return 0;
}
-/*}}}*/
-int FS_locate(int chn, int line, int column) /*{{{*/
+
+int FS_locate(int chn, int line, int column)
{
struct FileStream *f;
- if (opened(chn,0)==-1) return -1;
- f=file[chn];
+ if (opened(chn, 0) == -1)
+ return -1;
+
+ f = file[chn];
if (!f->tty)
- {
- FS_errmsg=_("not a terminal");
+ {
+ FS_errmsg = _("not a terminal");
+ return -1;
+ }
+
+ if (locate(chn, line, column) == -1)
return -1;
- }
- if (locate(chn,line,column)==-1) return -1;
- if (FS_flush(chn)==-1) return -1;
- f->outPos=column-1;
+
+ if (FS_flush(chn) == -1)
+ return -1;
+
+ f->outPos = column - 1;
return 0;
}
-/*}}}*/
-int FS_colour(int chn, int foreground, int background) /*{{{*/
+
+int FS_colour(int chn, int foreground, int background)
{
struct FileStream *f;
- if (opened(chn,0)==-1) return -1;
- f=file[chn];
+ if (opened(chn, 0) == -1)
+ return -1;
+
+ f = file[chn];
if (!f->tty)
- {
- FS_errmsg=_("not a terminal");
+ {
+ FS_errmsg = _("not a terminal");
+ return -1;
+ }
+
+ if (colour(chn, foreground, background) == -1)
return -1;
- }
- if (colour(chn,foreground,background)==-1) return -1;
- f->outforeground=foreground;
- f->outbackground=background;
+
+ f->outforeground = foreground;
+ f->outbackground = background;
return 0;
}
-/*}}}*/
-int FS_getChar(int dev) /*{{{*/
+
+int FS_getChar(int dev)
{
struct FileStream *f;
- if (opened(dev,1)==-1) return -1;
- f=file[dev];
- if (f->inSize==f->inCapacity && refill(dev)==-1) return -1;
- FS_errmsg=(const char*)0;
- if (f->inSize+1==f->inCapacity)
- {
- char ch=f->inBuf[f->inSize];
+ if (opened(dev, 1) == -1)
+ return -1;
+
+ f = file[dev];
+ if (f->inSize == f->inCapacity && refill(dev) == -1)
+ return -1;
+
+ FS_errmsg = (const char *)0;
+ if (f->inSize + 1 == f->inCapacity)
+ {
+ char ch = f->inBuf[f->inSize];
- f->inSize=f->inCapacity=0;
- return ch;
- }
- else return f->inBuf[f->inSize++];
+ f->inSize = f->inCapacity = 0;
+ return ch;
+ }
+ else
+ return f->inBuf[f->inSize++];
}
-/*}}}*/
-int FS_get(int chn) /*{{{*/
+
+int FS_get(int chn)
{
- ssize_t offset,rd;
+ ssize_t offset, rd;
+
+ if (opened(chn, 2) == -1)
+ return -1;
- if (opened(chn,2)==-1) return -1;
- offset=0;
- while (offset<file[chn]->recLength)
- {
- rd=read(file[chn]->randomfd,file[chn]->recBuf+offset,file[chn]->recLength-offset);
- if (rd==-1)
+ offset = 0;
+ while (offset < file[chn]->recLength)
{
- FS_errmsg=strerror(errno);
- return -1;
+ rd =
+ read(file[chn]->randomfd, file[chn]->recBuf + offset,
+ file[chn]->recLength - offset);
+ if (rd == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+ else
+ offset += rd;
}
- else offset+=rd;
- }
- FS_errmsg=(const char*)0;
+
+ FS_errmsg = (const char *)0;
return 0;
}
-/*}}}*/
-int FS_inkeyChar(int dev, int ms) /*{{{*/
+
+int FS_inkeyChar(int dev, int ms)
{
struct FileStream *f;
char c;
@@ -1147,308 +1428,374 @@ int FS_inkeyChar(int dev, int ms) /*{{{*/
struct termios timedread;
#endif
- if (opened(dev,1)==-1) return -1;
- f=file[dev];
- if (f->inSize<f->inCapacity) return f->inBuf[f->inSize++];
+ if (opened(dev, 1) == -1)
+ return -1;
+
+ f = file[dev];
+ if (f->inSize < f->inCapacity)
+ return f->inBuf[f->inSize++];
#ifdef USE_SELECT
FD_ZERO(&just_infd);
- FD_SET(f->infd,&just_infd);
- timeout.tv_sec=ms/1000;
- timeout.tv_usec=(ms%1000)*1000;
- switch (select(f->infd+1,&just_infd,(fd_set*)0,(fd_set*)0,&timeout))
- {
- case 1:
+ FD_SET(f->infd, &just_infd);
+ timeout.tv_sec = ms / 1000;
+ timeout.tv_usec = (ms % 1000) * 1000;
+ switch (select(f->infd + 1, &just_infd, (fd_set *) 0, (fd_set *) 0, &timeout))
{
- FS_errmsg=(const char*)0;
- len=read(f->infd,&c,1);
- return (len==1?c:-1);
- }
+ case 1:
+ {
+ FS_errmsg = (const char *)0;
+ len = read(f->infd, &c, 1);
+ return (len == 1 ? c : -1);
+ }
case 0:
+ {
+ FS_errmsg = (const char *)0;
+ return -1;
+ }
+ case -1:
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+ default:
+ assert(0);
+ }
+
+ return 0;
+
+#else
+ timedread = rawMode;
+ timedread.c_cc[VMIN] = 0;
+ timedread.c_cc[VTIME] = (ms ? ms : 100) / 100;
+ if (tcsetattr(f->infd, TCSADRAIN, &timedread) == -1)
{
- FS_errmsg=(const char*)0;
+ FS_errmsg = strerror(errno);
return -1;
}
- case -1:
+
+ FS_errmsg = (const char *)0;
+ len = read(f->infd, &c, 1);
+ tcsetattr(f->infd, TCSADRAIN, &rawMode);
+ if (len == -1)
{
- FS_errmsg=strerror(errno);
+ FS_errmsg = strerror(errno);
return -1;
}
- default: assert(0);
- }
- return 0;
-#else
- timedread=rawMode;
- timedread.c_cc[VMIN]=0;
- timedread.c_cc[VTIME]=(ms?ms:100)/100;
- if (tcsetattr(f->infd,TCSADRAIN,&timedread)==-1)
- {
- FS_errmsg=strerror(errno);
- return -1;
- }
- FS_errmsg=(const char*)0;
- len=read(f->infd,&c,1);
- tcsetattr(f->infd,TCSADRAIN,&rawMode);
- if (len==-1)
- {
- FS_errmsg=strerror(errno);
- return -1;
- }
- return (len==1?c:-1);
+
+ return (len == 1 ? c : -1);
#endif
}
-/*}}}*/
-void FS_sleep(double s) /*{{{*/
+
+void FS_sleep(double s)
{
#ifdef HAVE_NANOSLEEP
struct timespec p;
- p.tv_sec=floor(s);
- p.tv_nsec=1000000000*(s-floor(s));
+ p.tv_sec = floor(s);
+ p.tv_nsec = 1000000000 * (s - floor(s));
- nanosleep(&p,(struct timespec*)0);
+ nanosleep(&p, (struct timespec *)0);
#else
sleep((int)s);
#endif
}
-/*}}}*/
-int FS_eof(int chn) /*{{{*/
+
+int FS_eof(int chn)
{
struct FileStream *f;
- if (opened(chn,1)==-1) return -1;
- f=file[chn];
- if (f->inSize==f->inCapacity && refill(chn)==-1) return 1;
+ if (opened(chn, 1) == -1)
+ return -1;
+
+ f = file[chn];
+ if (f->inSize == f->inCapacity && refill(chn) == -1)
+ return 1;
+
return 0;
}
-/*}}}*/
-long int FS_loc(int chn) /*{{{*/
+
+long int FS_loc(int chn)
{
int fd;
- off_t cur,offset=0;
-
- if (opened(chn,-1)==-1) return -1;
- if (file[chn]->infd!=-1) { fd=file[chn]->infd; offset=-file[chn]->inCapacity+file[chn]->inSize; }
- else if (file[chn]->outfd!=-1) { fd=file[chn]->outfd; offset=file[chn]->outSize; }
- else if (file[chn]->randomfd!=-1) fd=file[chn]->randomfd;
- else fd=file[chn]->binaryfd;
- assert(fd!=-1);
- if ((cur=lseek(fd,0,SEEK_CUR))==-1)
- {
- FS_errmsg=strerror(errno);
+ off_t cur, offset = 0;
+
+ if (opened(chn, -1) == -1)
return -1;
- }
- return (cur+offset)/file[chn]->recLength;
+
+ if (file[chn]->infd != -1)
+ {
+ fd = file[chn]->infd;
+ offset = -file[chn]->inCapacity + file[chn]->inSize;
+ }
+ else if (file[chn]->outfd != -1)
+ {
+ fd = file[chn]->outfd;
+ offset = file[chn]->outSize;
+ }
+ else if (file[chn]->randomfd != -1)
+ fd = file[chn]->randomfd;
+ else
+ fd = file[chn]->binaryfd;
+
+ assert(fd != -1);
+ if ((cur = lseek(fd, 0, SEEK_CUR)) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
+ return (cur + offset) / file[chn]->recLength;
}
-/*}}}*/
-long int FS_lof(int chn) /*{{{*/
+
+long int FS_lof(int chn)
{
struct stat buf;
int fd;
- if (opened(chn,-1)==-1) return -1;
- if (file[chn]->infd!=-1) fd=file[chn]->infd;
- else if (file[chn]->outfd!=-1) fd=file[chn]->outfd;
- else if (file[chn]->randomfd!=-1) fd=file[chn]->randomfd;
- else fd=file[chn]->binaryfd;
- assert(fd!=-1);
- if (fstat(fd,&buf)==-1)
- {
- FS_errmsg=strerror(errno);
+ if (opened(chn, -1) == -1)
return -1;
- }
- return buf.st_size/file[chn]->recLength;
+ if (file[chn]->infd != -1)
+ fd = file[chn]->infd;
+ else if (file[chn]->outfd != -1)
+ fd = file[chn]->outfd;
+ else if (file[chn]->randomfd != -1)
+ fd = file[chn]->randomfd;
+ else
+ fd = file[chn]->binaryfd;
+
+ assert(fd != -1);
+ if (fstat(fd, &buf) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
+ return buf.st_size / file[chn]->recLength;
}
-/*}}}*/
-long int FS_recLength(int chn) /*{{{*/
+
+long int FS_recLength(int chn)
{
- if (opened(chn,2)==-1) return -1;
+ if (opened(chn, 2) == -1)
+ return -1;
+
return file[chn]->recLength;
}
-/*}}}*/
-void FS_field(int chn, struct String *s, long int position, long int length) /*{{{*/
+
+void FS_field(int chn, struct String *s, long int position, long int length)
{
assert(file[chn]);
- String_joinField(s,&file[chn]->field,file[chn]->recBuf+position,length);
-}
-/*}}}*/
-int FS_seek(int chn, long int record) /*{{{*/
-{
- if (opened(chn,2)!=-1)
- {
- if (lseek(file[chn]->randomfd,(off_t)record*file[chn]->recLength,SEEK_SET)!=-1) return 0;
- FS_errmsg=strerror(errno);
- }
- else if (opened(chn,4)!=-1)
- {
- if (lseek(file[chn]->binaryfd,(off_t)record,SEEK_SET)!=-1) return 0;
- FS_errmsg=strerror(errno);
- }
+ String_joinField(s, &file[chn]->field, file[chn]->recBuf + position, length);
+}
+
+int FS_seek(int chn, long int record)
+{
+ if (opened(chn, 2) != -1)
+ {
+ if (lseek
+ (file[chn]->randomfd, (off_t) record * file[chn]->recLength,
+ SEEK_SET) != -1)
+ return 0;
+
+ FS_errmsg = strerror(errno);
+ }
+ else if (opened(chn, 4) != -1)
+ {
+ if (lseek(file[chn]->binaryfd, (off_t) record, SEEK_SET) != -1)
+ return 0;
+
+ FS_errmsg = strerror(errno);
+ }
+
return -1;
}
-/*}}}*/
-int FS_appendToString(int chn, struct String *s, int onl) /*{{{*/
+
+int FS_appendToString(int chn, struct String *s, int onl)
{
size_t new;
char *n;
- struct FileStream *f=file[chn];
+ struct FileStream *f = file[chn];
int c;
- if (f->tty && f->inSize==f->inCapacity)
- {
- if (edit(chn,onl)==-1) return (FS_errmsg ? -1 : 0);
- }
- do
- {
- n=f->inBuf+f->inSize;
- while (1)
+ if (f->tty && f->inSize == f->inCapacity)
{
- if (n==f->inBuf+f->inCapacity) break;
- c=*n++;
- if (c=='\n') break;
+ if (edit(chn, onl) == -1)
+ return (FS_errmsg ? -1 : 0);
}
- new=n-(f->inBuf+f->inSize);
- if (new)
+
+ do
{
- size_t offset=s->length;
+ n = f->inBuf + f->inSize;
+ while (1)
+ {
+ if (n == f->inBuf + f->inCapacity)
+ break;
+ c = *n++;
+ if (c == '\n')
+ break;
+ }
- if (String_size(s,offset+new)==-1)
- {
- FS_errmsg=strerror(errno);
- return -1;
- }
- memcpy(s->character+offset,f->inBuf+f->inSize,new);
- f->inSize+=new;
- if (*(n-1)=='\n')
- {
- if (f->inSize==f->inCapacity) f->inSize=f->inCapacity=0;
- if (s->length>=2 && s->character[s->length-2]=='\r')
+ new = n - (f->inBuf + f->inSize);
+ if (new)
{
- s->character[s->length-2]='\n';
- --s->length;
+ size_t offset = s->length;
+
+ if (String_size(s, offset + new) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
+ memcpy(s->character + offset, f->inBuf + f->inSize, new);
+ f->inSize += new;
+ if (*(n - 1) == '\n')
+ {
+ if (f->inSize == f->inCapacity)
+ f->inSize = f->inCapacity = 0;
+
+ if (s->length >= 2 && s->character[s->length - 2] == '\r')
+ {
+ s->character[s->length - 2] = '\n';
+ --s->length;
+ }
+
+ return 0;
+ }
+ }
+
+ if ((c = FS_getChar(chn)) >= 0)
+ String_appendChar(s, c);
+
+ if (c == '\n')
+ {
+ if (s->length >= 2 && s->character[s->length - 2] == '\r')
+ {
+ s->character[s->length - 2] = '\n';
+ --s->length;
+ }
+
+ return 0;
}
- return 0;
- }
- }
- if ((c=FS_getChar(chn))>=0) String_appendChar(s,c);
- if (c=='\n')
- {
- if (s->length>=2 && s->character[s->length-2]=='\r')
- {
- s->character[s->length-2]='\n';
- --s->length;
- }
- return 0;
}
- } while (c!=-1);
+ while (c != -1);
+
return (FS_errmsg ? -1 : 0);
}
-/*}}}*/
-void FS_closefiles(void) /*{{{*/
+
+void FS_closefiles(void)
{
int i;
- for (i=0; i<capacity; ++i) if (file[i] && !file[i]->dev) FS_close(i);
+ for (i = 0; i < capacity; ++i)
+ if (file[i] && !file[i]->dev)
+ FS_close(i);
}
-/*}}}*/
-int FS_charpos(int chn) /*{{{*/
+
+int FS_charpos(int chn)
{
- if (file[chn]==(struct FileStream*)0)
- {
- FS_errmsg=_("channel not open");
- return -1;
- }
+ if (file[chn] == (struct FileStream *)0)
+ {
+ FS_errmsg = _("channel not open");
+ return -1;
+ }
+
return (file[chn]->outPos);
}
-/*}}}*/
-int FS_copy(const char *from, const char *to) /*{{{*/
+
+int FS_copy(const char *from, const char *to)
{
- int infd,outfd;
+ int infd, outfd;
char buf[4096];
- ssize_t inlen,outlen=-1;
+ ssize_t inlen, outlen = -1;
- if ((infd=open(from,O_RDONLY))==-1)
- {
- FS_errmsg=strerror(errno);
- return -1;
- }
- if ((outfd=open(to,O_WRONLY|O_CREAT|O_TRUNC,0666))==-1)
- {
- FS_errmsg=strerror(errno);
- return -1;
- }
- while ((inlen=read(infd,&buf,sizeof(buf)))>0)
- {
- ssize_t off=0;
+ if ((infd = open(from, O_RDONLY)) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
+ if ((outfd = open(to, O_WRONLY | O_CREAT | O_TRUNC, 0666)) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
- while (inlen && (outlen=write(outfd,&buf+off,inlen))>0)
+ while ((inlen = read(infd, &buf, sizeof(buf))) > 0)
{
- off+=outlen;
- inlen-=outlen;
+ ssize_t off = 0;
+
+ while (inlen && (outlen = write(outfd, &buf + off, inlen)) > 0)
+ {
+ off += outlen;
+ inlen -= outlen;
+ }
+
+ if (outlen == -1)
+ {
+ FS_errmsg = strerror(errno);
+ close(infd);
+ close(outfd);
+ return -1;
+ }
}
- if (outlen==-1)
+
+ if (inlen == -1)
{
- FS_errmsg=strerror(errno);
+ FS_errmsg = strerror(errno);
close(infd);
close(outfd);
return -1;
}
- }
- if (inlen==-1)
- {
- FS_errmsg=strerror(errno);
- close(infd);
- close(outfd);
- return -1;
- }
- if (close(infd)==-1)
- {
- FS_errmsg=strerror(errno);
- close(outfd);
- return -1;
- }
- if (close(outfd)==-1)
- {
- FS_errmsg=strerror(errno);
- return -1;
- }
+
+ if (close(infd) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ close(outfd);
+ return -1;
+ }
+
+ if (close(outfd) == -1)
+ {
+ FS_errmsg = strerror(errno);
+ return -1;
+ }
+
return 0;
}
-/*}}}*/
-int FS_portInput(int address) /*{{{*/
+
+int FS_portInput(int address)
{
- FS_errmsg=_("Direct port access not available");
+ FS_errmsg = _("Direct port access not available");
return -1;
}
-/*}}}*/
-int FS_memInput(int address) /*{{{*/
+
+int FS_memInput(int address)
{
- FS_errmsg=_("Direct memory access not available");
+ FS_errmsg = _("Direct memory access not available");
return -1;
}
-/*}}}*/
-int FS_portOutput(int address, int value) /*{{{*/
+
+int FS_portOutput(int address, int value)
{
- FS_errmsg=_("Direct port access not available");
+ FS_errmsg = _("Direct port access not available");
return -1;
}
-/*}}}*/
-int FS_memOutput(int address, int value) /*{{{*/
+
+int FS_memOutput(int address, int value)
{
- FS_errmsg=_("Direct memory access not available");
+ FS_errmsg = _("Direct memory access not available");
return -1;
}
-/*}}}*/
-void FS_allowIntr(int on) /*{{{*/
+
+void FS_allowIntr(int on)
{
#ifdef CONFIG_INTERPRETER_BAS_HAVE_SIGINT
struct sigaction breakact;
- breakact.sa_handler=on ? sigintr : SIG_IGN;
+ breakact.sa_handler = on ? sigintr : SIG_IGN;
sigemptyset(&breakact.sa_mask);
- sigaddset(&breakact.sa_mask,SIGINT);
- breakact.sa_flags=0;
- sigaction(SIGINT,&breakact,(struct sigaction *)0);
+ sigaddset(&breakact.sa_mask, SIGINT);
+ breakact.sa_flags = 0;
+ sigaction(SIGINT, &breakact, (struct sigaction *)0);
#endif
}
-/*}}}*/
diff --git a/apps/interpreters/bas/value.c b/apps/interpreters/bas/value.c
index dafa93abe..2f5b9b95b 100644
--- a/apps/interpreters/bas/value.c
+++ b/apps/interpreters/bas/value.c
@@ -1343,7 +1343,7 @@ struct String *Value_toString(struct Value *this, struct String *s, char pad,
case -1:
{
++totalwidth;
- String_appendChar(&buf, sign = = -1 ? '-' : ' ');
+ String_appendChar(&buf, sign == -1 ? '-' : ' ');
break;
}
case 0: