115 lines
2.7 KiB
C
115 lines
2.7 KiB
C
/*
|
|
SlideScript - minimalistic top-down scripting language.
|
|
(C) Copyright 2014-2022 Chris Dorman - some rights reserved (GPLv2)
|
|
|
|
View README file supplied with this software for more details
|
|
*/
|
|
|
|
#define MY_GLOBAL
|
|
|
|
#define RES_UX3 1 /* resolve UX3 global variables */
|
|
|
|
#include "inc/deps.h"
|
|
#include "inc/eprintf.h"
|
|
#include "inc/util.h"
|
|
#include "inc/lexer.h"
|
|
#include "inc/pipe.h"
|
|
#include "inc/inset.h"
|
|
#include "inc/vars.h"
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
int is_interactive = 0;
|
|
FILE *script;
|
|
char script_line[MAX_STRING_BUFSIZE+1];
|
|
|
|
// set environment variables
|
|
setenv("PATH", PATH, 0);
|
|
|
|
if (argc == 1)
|
|
{
|
|
script = stdin;
|
|
if (isatty (fileno (stdin))) is_interactive = 1;
|
|
}
|
|
else
|
|
{
|
|
parse_args (argc, argv);
|
|
script = fopen (argv [1], "r");
|
|
}
|
|
|
|
/* check if config opens successfully */
|
|
if(script == NULL) {
|
|
printf("Error: failed to open %s.\n", argv[1]);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
/* Run while loop if file isnt empty. */
|
|
if (script != NULL)
|
|
{
|
|
while (1)
|
|
{
|
|
char *return_dat;
|
|
int pipechk;
|
|
int varc, ii;
|
|
|
|
if (is_interactive)
|
|
{
|
|
printf ("%s", ":ss:prompt: ");
|
|
fflush (stdout);
|
|
}
|
|
|
|
/* parse each line from the script in order. */
|
|
|
|
if (fgets (script_line,
|
|
sizeof(script_line), script) == NULL) break;
|
|
|
|
ss_piping(script_line);
|
|
|
|
pipechk = get_cmd_count();
|
|
|
|
return_dat = process_line(spipe[0].command);
|
|
|
|
// Blank line, getting up outta here.
|
|
if(return_dat == NULL) continue;
|
|
|
|
varc = get_var_count();
|
|
if(pipechk > 1)
|
|
{
|
|
for(ii = 1; ii < pipechk; ii++)
|
|
{
|
|
set_var(varc, "PIPE", return_dat);
|
|
// Process functions based on previous pipe return
|
|
return_dat = process_line(spipe[ii].command);
|
|
|
|
set_var(varc, "\0", "\0");
|
|
|
|
// Check to see if there's anything to even display
|
|
if(return_dat == NULL)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Print the pipe line
|
|
if(return_dat != NULL)
|
|
{
|
|
printf("%s\n", return_dat);
|
|
fflush(stdout);
|
|
}
|
|
|
|
// Free used mallocs within QM_SS & QM_BQ
|
|
qflush(QM_SS);
|
|
qflush(QM_BQ);
|
|
} /* end of while */
|
|
} /* file null */
|
|
|
|
/* Free variables after:
|
|
a) scripts parsed or
|
|
b) user session is over */
|
|
qflush(QM_VARIABLES);
|
|
|
|
if (argc != 1 ) fclose(script);
|
|
exit(EXIT_SUCCESS);
|
|
}
|