/* 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_warn("ss:warning:variable syntax error!"); return NULL; } variable_pointer = get_var_data(varbuffer); if(variable_pointer == NULL) { syn_error("ss:error:variable data not found, abort!"); } var_len = strlen(variable_pointer); buf_len = strlen(finished) + var_len; if(buf_len > MAX_STRING_LEN) { syn_warn("ss:error:variable data too long, abort!"); } strcat (finished, variable_pointer); output_pointer += var_len; if(*input_pointer == NULLBYTE) break; } *output_pointer = NULLBYTE; return finished; }