Fix indentation to FreeBSD standard for interp files
This commit is contained in:
parent
b2387aa652
commit
44eebfff73
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=328999
@ -45,32 +45,32 @@ __FBSDID("$FreeBSD$");
|
||||
void
|
||||
interact(void)
|
||||
{
|
||||
static char input[256]; /* big enough? */
|
||||
static char input[256]; /* big enough? */
|
||||
|
||||
interp_init();
|
||||
interp_init();
|
||||
|
||||
printf("\n");
|
||||
printf("\n");
|
||||
|
||||
/*
|
||||
* Before interacting, we might want to autoboot.
|
||||
*/
|
||||
autoboot_maybe();
|
||||
/*
|
||||
* Before interacting, we might want to autoboot.
|
||||
*/
|
||||
autoboot_maybe();
|
||||
|
||||
/*
|
||||
* Not autobooting, go manual
|
||||
*/
|
||||
printf("\nType '?' for a list of commands, 'help' for more detailed help.\n");
|
||||
if (getenv("prompt") == NULL)
|
||||
setenv("prompt", "${interpret}", 1);
|
||||
if (getenv("interpret") == NULL)
|
||||
setenv("interpret", "OK", 1);
|
||||
/*
|
||||
* Not autobooting, go manual
|
||||
*/
|
||||
printf("\nType '?' for a list of commands, 'help' for more detailed help.\n");
|
||||
if (getenv("prompt") == NULL)
|
||||
setenv("prompt", "${interpret}", 1);
|
||||
if (getenv("interpret") == NULL)
|
||||
setenv("interpret", "OK", 1);
|
||||
|
||||
for (;;) {
|
||||
input[0] = '\0';
|
||||
interp_emit_prompt();
|
||||
ngets(input, sizeof(input));
|
||||
interp_run(input);
|
||||
}
|
||||
for (;;) {
|
||||
input[0] = '\0';
|
||||
interp_emit_prompt();
|
||||
ngets(input, sizeof(input));
|
||||
interp_run(input);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -87,26 +87,26 @@ COMMAND_SET(include, "include", "read commands from a file", command_include);
|
||||
static int
|
||||
command_include(int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
int res;
|
||||
char **argvbuf;
|
||||
int i;
|
||||
int res;
|
||||
char **argvbuf;
|
||||
|
||||
/*
|
||||
* Since argv is static, we need to save it here.
|
||||
*/
|
||||
argvbuf = (char**) calloc((u_int)argc, sizeof(char*));
|
||||
for (i = 0; i < argc; i++)
|
||||
argvbuf[i] = strdup(argv[i]);
|
||||
/*
|
||||
* Since argv is static, we need to save it here.
|
||||
*/
|
||||
argvbuf = (char**) calloc((u_int)argc, sizeof(char*));
|
||||
for (i = 0; i < argc; i++)
|
||||
argvbuf[i] = strdup(argv[i]);
|
||||
|
||||
res=CMD_OK;
|
||||
for (i = 1; (i < argc) && (res == CMD_OK); i++)
|
||||
res = interp_include(argvbuf[i]);
|
||||
res=CMD_OK;
|
||||
for (i = 1; (i < argc) && (res == CMD_OK); i++)
|
||||
res = interp_include(argvbuf[i]);
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
free(argvbuf[i]);
|
||||
free(argvbuf);
|
||||
for (i = 0; i < argc; i++)
|
||||
free(argvbuf[i]);
|
||||
free(argvbuf);
|
||||
|
||||
return(res);
|
||||
return(res);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -116,26 +116,26 @@ command_include(int argc, char *argv[])
|
||||
void
|
||||
interp_emit_prompt(void)
|
||||
{
|
||||
char *pr, *p, *cp, *ev;
|
||||
char *pr, *p, *cp, *ev;
|
||||
|
||||
if ((cp = getenv("prompt")) == NULL)
|
||||
cp = ">";
|
||||
pr = p = strdup(cp);
|
||||
if ((cp = getenv("prompt")) == NULL)
|
||||
cp = ">";
|
||||
pr = p = strdup(cp);
|
||||
|
||||
while (*p != 0) {
|
||||
if ((*p == '$') && (*(p+1) == '{')) {
|
||||
for (cp = p + 2; (*cp != 0) && (*cp != '}'); cp++)
|
||||
;
|
||||
*cp = 0;
|
||||
ev = getenv(p + 2);
|
||||
while (*p != 0) {
|
||||
if ((*p == '$') && (*(p+1) == '{')) {
|
||||
for (cp = p + 2; (*cp != 0) && (*cp != '}'); cp++)
|
||||
;
|
||||
*cp = 0;
|
||||
ev = getenv(p + 2);
|
||||
|
||||
if (ev != NULL)
|
||||
printf("%s", ev);
|
||||
p = cp + 1;
|
||||
continue;
|
||||
if (ev != NULL)
|
||||
printf("%s", ev);
|
||||
p = cp + 1;
|
||||
continue;
|
||||
}
|
||||
putchar(*p++);
|
||||
}
|
||||
putchar(*p++);
|
||||
}
|
||||
putchar(' ');
|
||||
free(pr);
|
||||
putchar(' ');
|
||||
free(pr);
|
||||
}
|
||||
|
@ -71,91 +71,91 @@ FICL_VM *bf_vm;
|
||||
static void
|
||||
bf_command(FICL_VM *vm)
|
||||
{
|
||||
char *name, *line, *tail, *cp;
|
||||
size_t len;
|
||||
struct bootblk_command **cmdp;
|
||||
bootblk_cmd_t *cmd;
|
||||
int nstrings, i;
|
||||
int argc, result;
|
||||
char **argv;
|
||||
char *name, *line, *tail, *cp;
|
||||
size_t len;
|
||||
struct bootblk_command **cmdp;
|
||||
bootblk_cmd_t *cmd;
|
||||
int nstrings, i;
|
||||
int argc, result;
|
||||
char **argv;
|
||||
|
||||
/* Get the name of the current word */
|
||||
name = vm->runningWord->name;
|
||||
/* Get the name of the current word */
|
||||
name = vm->runningWord->name;
|
||||
|
||||
/* Find our command structure */
|
||||
cmd = NULL;
|
||||
SET_FOREACH(cmdp, Xcommand_set) {
|
||||
if (((*cmdp)->c_name != NULL) && !strcmp(name, (*cmdp)->c_name))
|
||||
cmd = (*cmdp)->c_fn;
|
||||
}
|
||||
if (cmd == NULL)
|
||||
panic("callout for unknown command '%s'", name);
|
||||
|
||||
/* Check whether we have been compiled or are being interpreted */
|
||||
if (stackPopINT(vm->pStack)) {
|
||||
/*
|
||||
* Get parameters from stack, in the format:
|
||||
* an un ... a2 u2 a1 u1 n --
|
||||
* Where n is the number of strings, a/u are pairs of
|
||||
* address/size for strings, and they will be concatenated
|
||||
* in LIFO order.
|
||||
*/
|
||||
nstrings = stackPopINT(vm->pStack);
|
||||
for (i = 0, len = 0; i < nstrings; i++)
|
||||
len += stackFetch(vm->pStack, i * 2).i + 1;
|
||||
line = malloc(strlen(name) + len + 1);
|
||||
strcpy(line, name);
|
||||
|
||||
if (nstrings)
|
||||
for (i = 0; i < nstrings; i++) {
|
||||
len = stackPopINT(vm->pStack);
|
||||
cp = stackPopPtr(vm->pStack);
|
||||
strcat(line, " ");
|
||||
strncat(line, cp, len);
|
||||
}
|
||||
} else {
|
||||
/* Get remainder of invocation */
|
||||
tail = vmGetInBuf(vm);
|
||||
for (cp = tail, len = 0; cp != vm->tib.end && *cp != 0 && *cp != '\n'; cp++, len++)
|
||||
;
|
||||
|
||||
line = malloc(strlen(name) + len + 2);
|
||||
strcpy(line, name);
|
||||
if (len > 0) {
|
||||
strcat(line, " ");
|
||||
strncat(line, tail, len);
|
||||
vmUpdateTib(vm, tail + len);
|
||||
/* Find our command structure */
|
||||
cmd = NULL;
|
||||
SET_FOREACH(cmdp, Xcommand_set) {
|
||||
if (((*cmdp)->c_name != NULL) && !strcmp(name, (*cmdp)->c_name))
|
||||
cmd = (*cmdp)->c_fn;
|
||||
}
|
||||
}
|
||||
DEBUG("cmd '%s'", line);
|
||||
if (cmd == NULL)
|
||||
panic("callout for unknown command '%s'", name);
|
||||
|
||||
command_errmsg = command_errbuf;
|
||||
command_errbuf[0] = 0;
|
||||
if (!parse(&argc, &argv, line)) {
|
||||
result = (cmd)(argc, argv);
|
||||
free(argv);
|
||||
} else {
|
||||
result=BF_PARSE;
|
||||
}
|
||||
/* Check whether we have been compiled or are being interpreted */
|
||||
if (stackPopINT(vm->pStack)) {
|
||||
/*
|
||||
* Get parameters from stack, in the format:
|
||||
* an un ... a2 u2 a1 u1 n --
|
||||
* Where n is the number of strings, a/u are pairs of
|
||||
* address/size for strings, and they will be concatenated
|
||||
* in LIFO order.
|
||||
*/
|
||||
nstrings = stackPopINT(vm->pStack);
|
||||
for (i = 0, len = 0; i < nstrings; i++)
|
||||
len += stackFetch(vm->pStack, i * 2).i + 1;
|
||||
line = malloc(strlen(name) + len + 1);
|
||||
strcpy(line, name);
|
||||
|
||||
switch (result) {
|
||||
case CMD_CRIT:
|
||||
printf("%s\n", command_errmsg);
|
||||
break;
|
||||
case CMD_FATAL:
|
||||
panic("%s\n", command_errmsg);
|
||||
}
|
||||
if (nstrings)
|
||||
for (i = 0; i < nstrings; i++) {
|
||||
len = stackPopINT(vm->pStack);
|
||||
cp = stackPopPtr(vm->pStack);
|
||||
strcat(line, " ");
|
||||
strncat(line, cp, len);
|
||||
}
|
||||
} else {
|
||||
/* Get remainder of invocation */
|
||||
tail = vmGetInBuf(vm);
|
||||
for (cp = tail, len = 0; cp != vm->tib.end && *cp != 0 && *cp != '\n'; cp++, len++)
|
||||
;
|
||||
|
||||
free(line);
|
||||
/*
|
||||
* If there was error during nested ficlExec(), we may no longer have
|
||||
* valid environment to return. Throw all exceptions from here.
|
||||
*/
|
||||
if (result != CMD_OK)
|
||||
vmThrow(vm, result);
|
||||
line = malloc(strlen(name) + len + 2);
|
||||
strcpy(line, name);
|
||||
if (len > 0) {
|
||||
strcat(line, " ");
|
||||
strncat(line, tail, len);
|
||||
vmUpdateTib(vm, tail + len);
|
||||
}
|
||||
}
|
||||
DEBUG("cmd '%s'", line);
|
||||
|
||||
/* This is going to be thrown!!! */
|
||||
stackPushINT(vm->pStack,result);
|
||||
command_errmsg = command_errbuf;
|
||||
command_errbuf[0] = 0;
|
||||
if (!parse(&argc, &argv, line)) {
|
||||
result = (cmd)(argc, argv);
|
||||
free(argv);
|
||||
} else {
|
||||
result=BF_PARSE;
|
||||
}
|
||||
|
||||
switch (result) {
|
||||
case CMD_CRIT:
|
||||
printf("%s\n", command_errmsg);
|
||||
break;
|
||||
case CMD_FATAL:
|
||||
panic("%s\n", command_errmsg);
|
||||
}
|
||||
|
||||
free(line);
|
||||
/*
|
||||
* If there was error during nested ficlExec(), we may no longer have
|
||||
* valid environment to return. Throw all exceptions from here.
|
||||
*/
|
||||
if (result != CMD_OK)
|
||||
vmThrow(vm, result);
|
||||
|
||||
/* This is going to be thrown!!! */
|
||||
stackPushINT(vm->pStack,result);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -226,25 +226,25 @@ bf_command(FICL_VM *vm)
|
||||
* (if you edit this definition, pay attention to trailing spaces after
|
||||
* each word -- I warned you! :-) )
|
||||
*/
|
||||
#define BUILTIN_CONSTRUCTOR \
|
||||
": builtin: " \
|
||||
">in @ " /* save the tib index pointer */ \
|
||||
"' " /* get next word's xt */ \
|
||||
"swap >in ! " /* point again to next word */ \
|
||||
"create " /* create a new definition of the next word */ \
|
||||
", " /* save previous definition's xt */ \
|
||||
"immediate " /* make the new definition an immediate word */ \
|
||||
\
|
||||
"does> " /* Now, the *new* definition will: */ \
|
||||
"state @ if " /* if in compiling state: */ \
|
||||
"1 postpone literal " /* pass 1 flag to indicate compile */ \
|
||||
"@ compile, " /* compile in previous definition */ \
|
||||
"postpone throw " /* throw stack-returned result */ \
|
||||
"else " /* if in interpreting state: */ \
|
||||
"0 swap " /* pass 0 flag to indicate interpret */ \
|
||||
"@ execute " /* call previous definition */ \
|
||||
"throw " /* throw stack-returned result */ \
|
||||
"then ; "
|
||||
#define BUILTIN_CONSTRUCTOR \
|
||||
": builtin: " \
|
||||
">in @ " /* save the tib index pointer */ \
|
||||
"' " /* get next word's xt */ \
|
||||
"swap >in ! " /* point again to next word */ \
|
||||
"create " /* create a new definition of the next word */ \
|
||||
", " /* save previous definition's xt */ \
|
||||
"immediate " /* make the new definition an immediate word */ \
|
||||
\
|
||||
"does> " /* Now, the *new* definition will: */ \
|
||||
"state @ if " /* if in compiling state: */ \
|
||||
"1 postpone literal " /* pass 1 flag to indicate compile */ \
|
||||
"@ compile, " /* compile in previous definition */ \
|
||||
"postpone throw " /* throw stack-returned result */ \
|
||||
"else " /* if in interpreting state: */ \
|
||||
"0 swap " /* pass 0 flag to indicate interpret */ \
|
||||
"@ execute " /* call previous definition */ \
|
||||
"throw " /* throw stack-returned result */ \
|
||||
"then ; "
|
||||
|
||||
/*
|
||||
* Initialise the Forth interpreter, create all our commands as words.
|
||||
@ -252,38 +252,38 @@ bf_command(FICL_VM *vm)
|
||||
void
|
||||
bf_init(void)
|
||||
{
|
||||
struct bootblk_command **cmdp;
|
||||
char create_buf[41]; /* 31 characters-long builtins */
|
||||
int fd;
|
||||
struct bootblk_command **cmdp;
|
||||
char create_buf[41]; /* 31 characters-long builtins */
|
||||
int fd;
|
||||
|
||||
bf_sys = ficlInitSystem(BF_DICTSIZE);
|
||||
bf_vm = ficlNewVM(bf_sys);
|
||||
bf_sys = ficlInitSystem(BF_DICTSIZE);
|
||||
bf_vm = ficlNewVM(bf_sys);
|
||||
|
||||
/* Put all private definitions in a "builtins" vocabulary */
|
||||
ficlExec(bf_vm, "vocabulary builtins also builtins definitions");
|
||||
/* Put all private definitions in a "builtins" vocabulary */
|
||||
ficlExec(bf_vm, "vocabulary builtins also builtins definitions");
|
||||
|
||||
/* Builtin constructor word */
|
||||
ficlExec(bf_vm, BUILTIN_CONSTRUCTOR);
|
||||
/* Builtin constructor word */
|
||||
ficlExec(bf_vm, BUILTIN_CONSTRUCTOR);
|
||||
|
||||
/* make all commands appear as Forth words */
|
||||
SET_FOREACH(cmdp, Xcommand_set) {
|
||||
ficlBuild(bf_sys, (char *)(*cmdp)->c_name, bf_command, FW_DEFAULT);
|
||||
ficlExec(bf_vm, "forth definitions builtins");
|
||||
sprintf(create_buf, "builtin: %s", (*cmdp)->c_name);
|
||||
ficlExec(bf_vm, create_buf);
|
||||
ficlExec(bf_vm, "builtins definitions");
|
||||
}
|
||||
ficlExec(bf_vm, "only forth definitions");
|
||||
/* make all commands appear as Forth words */
|
||||
SET_FOREACH(cmdp, Xcommand_set) {
|
||||
ficlBuild(bf_sys, (char *)(*cmdp)->c_name, bf_command, FW_DEFAULT);
|
||||
ficlExec(bf_vm, "forth definitions builtins");
|
||||
sprintf(create_buf, "builtin: %s", (*cmdp)->c_name);
|
||||
ficlExec(bf_vm, create_buf);
|
||||
ficlExec(bf_vm, "builtins definitions");
|
||||
}
|
||||
ficlExec(bf_vm, "only forth definitions");
|
||||
|
||||
/* Export some version numbers so that code can detect the loader/host version */
|
||||
ficlSetEnv(bf_sys, "FreeBSD_version", __FreeBSD_version);
|
||||
ficlSetEnv(bf_sys, "loader_version", bootprog_rev);
|
||||
/* Export some version numbers so that code can detect the loader/host version */
|
||||
ficlSetEnv(bf_sys, "FreeBSD_version", __FreeBSD_version);
|
||||
ficlSetEnv(bf_sys, "loader_version", bootprog_rev);
|
||||
|
||||
/* try to load and run init file if present */
|
||||
if ((fd = open("/boot/boot.4th", O_RDONLY)) != -1) {
|
||||
(void)ficlExecFD(bf_vm, fd);
|
||||
close(fd);
|
||||
}
|
||||
/* try to load and run init file if present */
|
||||
if ((fd = open("/boot/boot.4th", O_RDONLY)) != -1) {
|
||||
(void)ficlExecFD(bf_vm, fd);
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -292,45 +292,45 @@ bf_init(void)
|
||||
static int
|
||||
bf_run(const char *line)
|
||||
{
|
||||
int result;
|
||||
int result;
|
||||
|
||||
/*
|
||||
* ficl would require extensive changes to accept a const char *
|
||||
* interface. Instead, cast it away here and hope for the best.
|
||||
* We know at the present time the caller for us in the boot
|
||||
* forth loader can tolerate the string being modified because
|
||||
* the string is passed in here and then not touched again.
|
||||
*/
|
||||
result = ficlExec(bf_vm, __DECONST(char *, line));
|
||||
/*
|
||||
* ficl would require extensive changes to accept a const char *
|
||||
* interface. Instead, cast it away here and hope for the best.
|
||||
* We know at the present time the caller for us in the boot
|
||||
* forth loader can tolerate the string being modified because
|
||||
* the string is passed in here and then not touched again.
|
||||
*/
|
||||
result = ficlExec(bf_vm, __DECONST(char *, line));
|
||||
|
||||
DEBUG("ficlExec '%s' = %d", line, result);
|
||||
switch (result) {
|
||||
case VM_OUTOFTEXT:
|
||||
case VM_ABORTQ:
|
||||
case VM_QUIT:
|
||||
case VM_ERREXIT:
|
||||
break;
|
||||
case VM_USEREXIT:
|
||||
printf("No where to leave to!\n");
|
||||
break;
|
||||
case VM_ABORT:
|
||||
printf("Aborted!\n");
|
||||
break;
|
||||
case BF_PARSE:
|
||||
printf("Parse error!\n");
|
||||
break;
|
||||
default:
|
||||
if (command_errmsg != NULL) {
|
||||
printf("%s\n", command_errmsg);
|
||||
command_errmsg = NULL;
|
||||
DEBUG("ficlExec '%s' = %d", line, result);
|
||||
switch (result) {
|
||||
case VM_OUTOFTEXT:
|
||||
case VM_ABORTQ:
|
||||
case VM_QUIT:
|
||||
case VM_ERREXIT:
|
||||
break;
|
||||
case VM_USEREXIT:
|
||||
printf("No where to leave to!\n");
|
||||
break;
|
||||
case VM_ABORT:
|
||||
printf("Aborted!\n");
|
||||
break;
|
||||
case BF_PARSE:
|
||||
printf("Parse error!\n");
|
||||
break;
|
||||
default:
|
||||
if (command_errmsg != NULL) {
|
||||
printf("%s\n", command_errmsg);
|
||||
command_errmsg = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (result == VM_USEREXIT)
|
||||
panic("interpreter exit");
|
||||
setenv("interpret", bf_vm->state ? "" : "OK", 1);
|
||||
if (result == VM_USEREXIT)
|
||||
panic("interpreter exit");
|
||||
setenv("interpret", bf_vm->state ? "" : "OK", 1);
|
||||
|
||||
return (result);
|
||||
return (result);
|
||||
}
|
||||
|
||||
void
|
||||
@ -357,87 +357,86 @@ interp_run(const char *input)
|
||||
*/
|
||||
struct includeline
|
||||
{
|
||||
struct includeline *next;
|
||||
char text[0];
|
||||
struct includeline *next;
|
||||
char text[0];
|
||||
};
|
||||
|
||||
int
|
||||
interp_include(const char *filename)
|
||||
{
|
||||
struct includeline *script, *se, *sp;
|
||||
char input[256]; /* big enough? */
|
||||
int res;
|
||||
char *cp;
|
||||
int prevsrcid, fd, line;
|
||||
struct includeline *script, *se, *sp;
|
||||
char input[256]; /* big enough? */
|
||||
int res;
|
||||
char *cp;
|
||||
int prevsrcid, fd, line;
|
||||
|
||||
if (((fd = open(filename, O_RDONLY)) == -1)) {
|
||||
snprintf(command_errbuf, sizeof(command_errbuf),
|
||||
"can't open '%s': %s", filename, strerror(errno));
|
||||
return(CMD_ERROR);
|
||||
}
|
||||
if (((fd = open(filename, O_RDONLY)) == -1)) {
|
||||
snprintf(command_errbuf, sizeof(command_errbuf),
|
||||
"can't open '%s': %s", filename, strerror(errno));
|
||||
return(CMD_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the script into memory.
|
||||
*/
|
||||
script = se = NULL;
|
||||
line = 0;
|
||||
|
||||
while (fgetstr(input, sizeof(input), fd) >= 0) {
|
||||
line++;
|
||||
cp = input;
|
||||
/* Allocate script line structure and copy line, flags */
|
||||
if (*cp == '\0')
|
||||
continue; /* ignore empty line, save memory */
|
||||
sp = malloc(sizeof(struct includeline) + strlen(cp) + 1);
|
||||
/* On malloc failure (it happens!), free as much as possible and exit */
|
||||
if (sp == NULL) {
|
||||
while (script != NULL) {
|
||||
se = script;
|
||||
script = script->next;
|
||||
free(se);
|
||||
/*
|
||||
* Read the script into memory.
|
||||
*/
|
||||
script = se = NULL;
|
||||
line = 0;
|
||||
|
||||
while (fgetstr(input, sizeof(input), fd) >= 0) {
|
||||
line++;
|
||||
cp = input;
|
||||
/* Allocate script line structure and copy line, flags */
|
||||
if (*cp == '\0')
|
||||
continue; /* ignore empty line, save memory */
|
||||
sp = malloc(sizeof(struct includeline) + strlen(cp) + 1);
|
||||
/* On malloc failure (it happens!), free as much as possible and exit */
|
||||
if (sp == NULL) {
|
||||
while (script != NULL) {
|
||||
se = script;
|
||||
script = script->next;
|
||||
free(se);
|
||||
}
|
||||
snprintf(command_errbuf, sizeof(command_errbuf),
|
||||
"file '%s' line %d: memory allocation failure - aborting",
|
||||
filename, line);
|
||||
close(fd);
|
||||
return (CMD_ERROR);
|
||||
}
|
||||
snprintf(command_errbuf, sizeof(command_errbuf),
|
||||
"file '%s' line %d: memory allocation failure - aborting",
|
||||
filename, line);
|
||||
close(fd);
|
||||
return (CMD_ERROR);
|
||||
strcpy(sp->text, cp);
|
||||
sp->next = NULL;
|
||||
|
||||
if (script == NULL) {
|
||||
script = sp;
|
||||
} else {
|
||||
se->next = sp;
|
||||
}
|
||||
se = sp;
|
||||
}
|
||||
strcpy(sp->text, cp);
|
||||
sp->next = NULL;
|
||||
close(fd);
|
||||
|
||||
if (script == NULL) {
|
||||
script = sp;
|
||||
} else {
|
||||
se->next = sp;
|
||||
/*
|
||||
* Execute the script
|
||||
*/
|
||||
prevsrcid = bf_vm->sourceID.i;
|
||||
bf_vm->sourceID.i = fd;
|
||||
res = CMD_OK;
|
||||
for (sp = script; sp != NULL; sp = sp->next) {
|
||||
res = bf_run(sp->text);
|
||||
if (res != VM_OUTOFTEXT) {
|
||||
snprintf(command_errbuf, sizeof(command_errbuf),
|
||||
"Error while including %s, in the line:\n%s",
|
||||
filename, sp->text);
|
||||
res = CMD_ERROR;
|
||||
break;
|
||||
} else
|
||||
res = CMD_OK;
|
||||
}
|
||||
se = sp;
|
||||
}
|
||||
close(fd);
|
||||
bf_vm->sourceID.i = prevsrcid;
|
||||
|
||||
/*
|
||||
* Execute the script
|
||||
*/
|
||||
prevsrcid = bf_vm->sourceID.i;
|
||||
bf_vm->sourceID.i = fd;
|
||||
res = CMD_OK;
|
||||
for (sp = script; sp != NULL; sp = sp->next) {
|
||||
|
||||
res = bf_run(sp->text);
|
||||
if (res != VM_OUTOFTEXT) {
|
||||
snprintf(command_errbuf, sizeof(command_errbuf),
|
||||
"Error while including %s, in the line:\n%s",
|
||||
filename, sp->text);
|
||||
res = CMD_ERROR;
|
||||
break;
|
||||
} else
|
||||
res = CMD_OK;
|
||||
}
|
||||
bf_vm->sourceID.i = prevsrcid;
|
||||
|
||||
while (script != NULL) {
|
||||
se = script;
|
||||
script = script->next;
|
||||
free(se);
|
||||
}
|
||||
return(res);
|
||||
while (script != NULL) {
|
||||
se = script;
|
||||
script = script->next;
|
||||
free(se);
|
||||
}
|
||||
return(res);
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ __FBSDID("$FreeBSD$");
|
||||
static int
|
||||
perform(int argc, char *argv[])
|
||||
{
|
||||
int result;
|
||||
int result;
|
||||
struct bootblk_command **cmdp;
|
||||
bootblk_cmd_t *cmd;
|
||||
|
||||
@ -78,8 +78,8 @@ interp_init(void)
|
||||
int
|
||||
interp_run(const char *input)
|
||||
{
|
||||
int argc;
|
||||
char **argv;
|
||||
int argc;
|
||||
char **argv;
|
||||
|
||||
if (parse(&argc, &argv, input)) {
|
||||
printf("parse error\n");
|
||||
|
Loading…
Reference in New Issue
Block a user