slidescript/src/vars.c

117 lines
2.9 KiB
C
Raw Normal View History

/*
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
*/
2021-04-11 14:43:56 -07:00
#include "inc/deps.h"
#include "inc/vars.h"
#include "inc/util.h"
void set_var(int index, char *varname, char *vardata)
{
strcpy(svars[index].var_name, varname);
/* Set pointer in struct to a block of memory
THEN write to the memory buffer. */
svars[index].var_data = qmalloc(QM_VARIABLES, (strlen(vardata) + 1));
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, var_len;
char *varbuffer, *finished;
varbuffer = qmalloc(QM_VARIABLES, (strlen(string) + 1));
/* String pointers */
char *input_pointer;
char *output_pointer;
char *variable_pointer;
finished = qmalloc(QM_VARIABLES, (strlen(string) + 1));
//finished = qmalloc(QM_VARIABLES, 16280);
*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))
x_error("ss:error:buffer out of sync");
str_char = variable_pointer [-1];
if ((str_char != NULLBYTE) && (str_char != TOKEN))
x_error("ss:error:buffer out of sync");
variable_pointer[-1] = NULLBYTE;
if(*varbuffer == NULLBYTE)
2021-04-08 20:55:59 -07:00
{
x_warn("ss:warning:variable syntax error!");
2021-04-08 20:55:59 -07:00
return NULL;
}
variable_pointer = get_var_data(varbuffer);
if(variable_pointer == NULL)
2021-04-08 20:55:59 -07:00
{
x_error("ss:error:variable data not found, abort!");
2021-04-08 20:55:59 -07:00
}
var_len = strlen(variable_pointer);
int moo = output_pointer - finished;
finished = qrealloc(finished, (strlen(finished) + var_len + 1));
output_pointer = moo + finished;
strcat (finished, variable_pointer);
output_pointer += var_len;
if(*input_pointer == NULLBYTE) break;
}
*output_pointer = NULLBYTE;
return finished;
}