NODE *lword(NODE *args) { NODE *val = NIL, *arg = NIL; int cnt = 0; NODETYPES str_type = STRING; if (args == NIL) return Null_Word; val = args; while (val != NIL && NOT_THROWING) { arg = string_arg(val); val = cdr(val); if (NOT_THROWING) { if (backslashed(arg)) str_type = VBAR_STRING; cnt += getstrlen(arg); } } if (NOT_THROWING) val = make_strnode((char *)args, (struct string_block *)NULL, cnt, str_type, word_strnzcpy); /* kludge */ else val = UNBOUND; return(val); }
NODE *cnv_node_to_numnode(NODE *ndi) { NODE *val; int dr; char s2[MAX_NUMBER], *s = s2; if (is_number(ndi)) return (ndi); ndi = cnv_node_to_strnode(ndi); if (ndi == UNBOUND) return (UNBOUND); if (((getstrlen(ndi)) < MAX_NUMBER) && (dr = numberp(ndi))) { if (backslashed(ndi)) noparity_strnzcpy(s, getstrptr(ndi), getstrlen(ndi)); else strnzcpy(s, getstrptr(ndi), getstrlen(ndi)); if (*s == '+') ++s; if (s2[getstrlen(ndi) - 1] == '.') s2[getstrlen(ndi) - 1] = 0; if (/*TRUE || */ dr - 1 || getstrlen(ndi) > 9) { val = newnode(FLOAT); setfloat(val, atof(s)); } else { val = newnode(INT); setint(val, atol(s)); } gcref(ndi); return (val); } else { gcref(ndi); return (UNBOUND); } }