105 lines
2.6 KiB
C
105 lines
2.6 KiB
C
/*
|
|
SlideScript - minimalistic top-down scripting language.
|
|
(C) Copyright 2014-2021 Chris Dorman - some rights reserved (GPLv2)
|
|
|
|
View README file supplied with this software for more details
|
|
*/
|
|
|
|
#include "deps.h"
|
|
#include "vars.h"
|
|
#include "util.h"
|
|
|
|
void set_var(int index, char *varname, char *vardata)
|
|
{
|
|
strcpy(svars[index].var_name, varname);
|
|
strcpy(svars[index].var_data, vardata);
|
|
}
|
|
|
|
char *get_var_data(char *varname)
|
|
{
|
|
int xx;
|
|
for(xx = 0; xx < MAXVARS; xx++)
|
|
{
|
|
char *varp = svars[xx].var_name;
|
|
if(*varp == '\0') continue;
|
|
if(strcmp(varp, varname) == 0)
|
|
{
|
|
return svars[xx].var_data;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
int get_var_count()
|
|
{
|
|
int yy;
|
|
for(yy = 0; yy < MAXVARS; yy++)
|
|
{
|
|
if(strlen(svars[yy].var_name) > 0)
|
|
{
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
return yy;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
char *parse_vars(char *string)
|
|
{
|
|
int str_char, buf_len, var_len;
|
|
static char finished [MAX_STRING_BUFSIZE];
|
|
char varbuffer [MAX_VAR_NAME_BUFSIZE];
|
|
|
|
/* String pointers */
|
|
char *input_pointer;
|
|
char *output_pointer;
|
|
char *variable_pointer;
|
|
|
|
*finished = NULLBYTE;
|
|
|
|
for (input_pointer = string, output_pointer = finished;
|
|
(str_char = *input_pointer) != NULLBYTE;
|
|
input_pointer++)
|
|
{
|
|
if (str_char != TOKEN)
|
|
{ *output_pointer++ = str_char; *output_pointer = NULLBYTE; continue; }
|
|
|
|
variable_pointer = varbuffer;
|
|
do { *variable_pointer++ = (str_char = *++input_pointer); }
|
|
while ((str_char != NULLBYTE) && (str_char != TOKEN));
|
|
|
|
str_char = *input_pointer;
|
|
if ((str_char != NULLBYTE) && (str_char != TOKEN))
|
|
syn_error("ss:error:buffer out of sync");
|
|
str_char = variable_pointer [-1];
|
|
if ((str_char != NULLBYTE) && (str_char != TOKEN))
|
|
syn_error("ss:error:buffer out of sync");
|
|
|
|
variable_pointer[-1] = NULLBYTE;
|
|
|
|
if(*varbuffer == NULLBYTE)
|
|
syn_error("ss:error:variable syntax error!");
|
|
|
|
variable_pointer = get_var_data(varbuffer);
|
|
if(variable_pointer == NULL)
|
|
syn_error("ss:error:variable syntax error!");
|
|
|
|
var_len = strlen(variable_pointer);
|
|
buf_len = strlen(finished) + var_len;
|
|
|
|
if(buf_len > MAX_STRING_LEN)
|
|
syn_error("ss:error:string buffer overflow!");
|
|
|
|
strcat (finished, variable_pointer);
|
|
output_pointer += var_len;
|
|
if(*input_pointer == NULLBYTE) break;
|
|
}
|
|
|
|
*output_pointer = NULLBYTE;
|
|
return finished;
|
|
}
|