int main(void) { // Fill up variables identified by strings #define MAX 20 char key[MAX] = { 0, }; num.val.s = 24; vars_set("$x", &num); num.val.s = 25; vars_set("$y", &num); num.val.s = 26; vars_set("$z", &num); num.val.s = 1; vars_set("$a", &num); num.val.s = 2; vars_set("$b", &num); num.val.s = 3; vars_set("$c", &num); num.val.s = 1; vars_set("$foo", &num); num.val.s = 2; vars_set("$bar", &num); num.val.s = 3; vars_set("$baz", &num); num.val.s = 4; vars_set("$spam", &num); num.val.s = 5; vars_set("$eggs", &num); num.val.s = 42; vars_set("$lue", &num); num.val.s = 1948; vars_set("$izrael", &num); num.val.s = 1967; vars_set("$hatnapos", &num); num.val.s = 1446; vars_set("$exodus", &num); num.val.s = 225; vars_set("$egypt", &num); num.val.s = 969; vars_set("$oldest", &num); num.val.s = 911; vars_set("$bestcar", &num); num.val.s = 1970; vars_set("$unix", &num); num.val.s = 1991; vars_set("$linux", &num); num.val.s = 2760; vars_set("$stelvio", &num); num.val.s = 2650; vars_set("$gavia", &num); num.val.s = 2291; vars_set("$foscagno", &num); num.val.s = 2150; vars_set("$fuorn", &num); num.val.s = 1852; vars_set("$mortirolo", &num); num.val.s = 900; vars_set("$prato", &num); num.val.s = 1130; vars_set("$cepina", &num); num.val.s = 1800; vars_set("$livigno", &num); num.val.s = 3798; vars_set("$glockner", &num); num.val.s = 3905; vars_set("$ortler", &num); num.val.s = 3860; vars_set("$zebru", &num); num.val.s = 4167; vars_set("$breithorn", &num); num.val.s = 4563; vars_set("$zumstoa", &num); num.val.s = 4478; vars_set("$matterhorn", &num); num.val.s = 4505; vars_set("$weisshorn", &num); num.val.s = 4545; vars_set("$dom", &num); num.val.s = 4810; vars_set("$montblanc", &num); num.val.s = 8850; vars_set("$everest", &num); num.val.s = 8611; vars_set("$ktwo", &num); num.val.s = 8554; vars_set("$kancsendzonga", &num); num.val.s = 8540; vars_set("$lhotse", &num); vars_dbg(); // Let user query variables by strings (chop off LF) while (fgets(key, MAX, stdin)) { char *lf = strchr(key, '\n'); if (lf) *lf = 0; if (!vars_get(key, &num)) tNumDisplay(&num, 1, 0); } return 0; }
int rc_source(const char *fname) { char buf[512]; FILE *f; int ret = 0; int haderr = 0; int lineno = 1; if(!fname) return 1; f = fopen(fname, "r"); if(!f){ fprintf(stderr, "open %s: %s\n", fname, strerror(errno)); haderr = 1; goto fin; } while(fgets(buf, sizeof buf - 1, f)){ #define MAKE_NUL(c) \ if((p = strchr(buf, c)) && (p > buf ? p[-1] != '\\' : 1)) \ *p = '\0' #define PRE "%s:%d: " #define ARGS fname, lineno enum vartype type; char *p; char *start = buf; int bool = 1; MAKE_NUL('\n'); p = buf; recheck: if((p = strchr(p, '#')) && (p > buf ? p[-1] != '\\' : 1)){ *p = '\0'; }else if(p){ /* * buf = "map \# yo yo" * p = "# yo yo" */ memmove(p - 1, p, strlen(p) + 1); goto recheck; } if(!*buf) continue; if(!strncmp("map ", start, 4)){ char c; if(sscanf(start + 4, "%c %*c", &c) == 1){ map_add(c, start + 6); }else{ fprintf(stderr, PRE "invalid map \"%s\"\n", ARGS, start); haderr = 1; } }else{ if(!strncmp("no", start, 2)){ start += 2; bool = 0; } MAKE_NUL(' '); if(p) p++; type = vars_gettype(start); if(type == VARS_UNKNOWN){ fprintf(stderr, PRE "unknown variable \"%s\"\n", ARGS, start); haderr = 1; }else if(vars_isbool(type)){ if(p){ fprintf(stderr, PRE "extraneous data (%s)\n", ARGS, p); haderr = 1; }else{ vars_set(type, buffers_current(), bool); } }else if(p){ vars_set(type, buffers_current(), atoi(p)); }else{ fprintf(stderr, PRE "need value for %s\n", ARGS, start); haderr = 1; } } lineno++; }