#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include "db.h" #include "externs.h" #include "softcode.h" static int ok_var_name(char *varname) { char *p; if(!string_compare(varname, "player")) return(0); for(p = varname;*p;p++) if(isspace(*p) || is_sign(*p) || *p == '(' || *p == ')' || *p == '~') { return(0); } return(1); } SCVAR *find_var(char *varname, bool type) { SCVAR *c; for(c = code_ptr->vars;c;c = c->next) if(c->type == type) if(!string_compare(c->name, varname)) break; return(c); } SCVAR *new_scvar(CODE *cptr, char *varname, bool type) { SCVAR *newvar; newvar = (SCVAR *)stack_alloc(sizeof(SCVAR), 1, 0); newvar->type = type; newvar->name = stack_string_alloc(varname, 1); newvar->cvalue = stack_string_alloc("\"\"", 1); newvar->nvalue = 0; newvar->can_modify = 1; newvar->next = cptr->vars; cptr->vars = newvar; return(newvar); } char *cvar_val(char *varname) { SCVAR *c; if(!(c = find_var(varname, VAR_STR))) { if(!ok_var_name(varname)) { syntax_error(); return(""); } c = new_scvar(code_ptr, varname, VAR_STR); } return(c->cvalue); } int ivar_val(char *varname) { SCVAR *i; if(!(i = find_var(varname, VAR_NUM))) { if(!ok_var_name(varname)) { syntax_error(); return(0); } i = new_scvar(code_ptr, varname, VAR_NUM); } return(i->nvalue); } bool get_varname(char *str, char *retbuf) { char *p; for(p = retbuf;*str;str++, p++) { if(isspace(*str) || is_sign(*str) || *str == '(' || *str == ')' || *str == '~') { break; } *p = *str; } *p = '\0'; return((*str)?0:1); }