-/* $OpenBSD: interpreter.c,v 1.31 2021/05/08 12:57:41 lum Exp $ */
+/* $OpenBSD: interpreter.c,v 1.32 2021/05/12 11:13:23 lum Exp $ */
/*
* This file is in the public domain.
*
static int foundfun(char *, int);
static int doregex(char *, char *);
static void clearexp(void);
-static int parse(char *, const char *, const char *, int, int, int);
+static int parse(char *, const char *, const char *, int, int, int, int);
static int parsdef(char *, const char *, const char *, int, int, int);
static int parsval(char *, const char *, const char *, int, int, int);
static int parsexp(char *, const char *, const char *, int, int, int);
char *p, *begp = NULL, *endp = NULL, *prechr;
char *lastchr = NULL;
int i, ret, pctr, expctr, blkid, inquote, esc;
- int elen, spc;
+ int elen, spc, ns;
- pctr = expctr = inquote = esc = elen = spc = 0;
+ pctr = expctr = inquote = esc = elen = spc = ns = 0;
blkid = 1;
lnm = lnum;
"left parantheses line", lnm));
if (inquote == 0) {
if (begp != NULL) {
+ if (*prechr == ' ')
+ ns--;
if (endp == NULL)
*p = '\0';
else
*endp = '\0';
ret = parse(begp, lrp, &lp, blkid,
- ++expctr, elen - spc);
+ ++expctr, elen - spc, ns);
if (!ret) {
cleanup();
return(ret);
"not supported line", lnm));
if (inquote == 0) {
if (begp != NULL) {
+ if (*prechr == ' ')
+ ns--;
if (endp == NULL)
*p = '\0';
else
*endp = '\0';
ret = parse(begp, lrp, &rp, blkid,
- ++expctr, elen - spc);
+ ++expctr, elen - spc, ns);
if (!ret) {
cleanup();
return(ret);
*p = ' ';
endp = p;
spc++;
+ if (begp != NULL)
+ ns++;
}
esc = 0;
} else if (*p == '\t' || *p == ' ') {
static int
parse(char *begp, const char *par1, const char *par2, int blkid, int expctr,
- int elen)
+ int elen, int ns)
{
char *regs;
int ret = FALSE;