slidescript/src/vars.c
2021-04-06 17:16:16 -07:00

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;
}