#include "console.h" #include typedef struct con_var_s con_var_t; struct con_var_s { char *name; char *value; con_var_t *next; }; con_var_t *con_vars[256]; size_t con_var_hash(char *text) { char *p; size_t rv; for (rv = 0, p = text; *p; p++) rv += 119 * ((*p) + 83); return rv & 0xFF; } con_var_t *con_var_find(char *name, size_t *ret_hash) { size_t hash; con_var_t *var; hash = con_var_hash(name); if (ret_hash) *ret_hash = hash; for (var = con_vars[hash]; var; var = var->next) if (!strcmp(var->name, name)) return var; return NULL; } con_var_t *con_var_add(char *name) { con_var_t *var; size_t hash; var = con_var_find(name, &hash); if (var) return var; var = malloc(sizeof(con_var_t)); assert(var); var->next = con_vars[hash]; con_vars[hash] = var; var->name = strdup(name); assert(var->name); var->value = NULL; return var; } void con_var_set(char *name, char *value) { con_var_t *var; var = con_var_add(name); free(var->value); if (value) { var->value = strdup(value); assert(var->value); } else var->value = NULL; } char *con_var_get(char *name) { con_var_t *var; var = con_var_find(name, NULL); if (!var) return NULL; return var->value; } float con_var_get_float(char *name) { char *str; str = con_var_get(name); if (!str) return 0.0f; return atof(str); } size_t con_var_get_size(char *name) { char *str; str = con_var_get(name); if (!str) return 0; return strtoul(name, NULL, 10); } int con_init(void) { con_var_set("kurwa", "chuj"); return 0; } void con_quit(void) { } int con_thread_f(phy_sim *sim) { printf("%f\n", con_var_get_float("kurwa")); while (1) { char *line; line = readline("(cem) "); printf("line=%s\n", line); } return 0; }