void plot_add(struct plot *pl) { struct dvec *v; struct plot *tp; char *s, buf[BSIZE_SP]; fprintf(cp_out, "Title: %s\nName: %s\nDate: %s\n\n", pl->pl_title, pl->pl_name, pl->pl_date); if (plot_cur) plot_cur->pl_ccom = cp_kwswitch(CT_VECTOR, pl->pl_ccom); for (v = pl->pl_dvecs; v; v = v->v_next) cp_addkword(CT_VECTOR, v->v_name); cp_addkword(CT_VECTOR, "all"); if ((s = ft_plotabbrev(pl->pl_name)) == NULL) s = "unknown"; do { (void) sprintf(buf, "%s%d", s, plot_num); for (tp = plot_list; tp; tp = tp->pl_next) if (cieq(tp->pl_typename, buf)) { plot_num++; break; } } while (tp); pl->pl_typename = copy(buf); plot_new(pl); cp_addkword(CT_PLOT, buf); pl->pl_ccom = cp_kwswitch(CT_VECTOR, NULL); plot_setcur(pl->pl_typename); }
int cp_usrset(struct variable *var, bool isset) { void *vv; struct variable *tv; int iv; double dv; bool bv; if (eq(var->va_name, "debug")) { if (var->va_type == CP_BOOL) { cp_debug = ft_simdb = ft_parsedb = ft_evdb = ft_vecdb = ft_grdb = ft_gidb = ft_controldb = isset; } else if (var->va_type == CP_LIST) { for (tv = var->va_vlist; tv; tv = tv->va_next) if (var->va_type == CP_STRING) setdb(tv->va_string); else fprintf(cp_err, "Error: bad type for debug var\n"); } else if (var->va_type == CP_STRING) { setdb(var->va_string); } else { fprintf(cp_err, "Error: bad type for debug var\n"); } #ifndef FTEDEBUG fprintf(cp_err, "Warning: %s compiled without debug messages\n", cp_program); #endif } else if (eq(var->va_name, "program")) { cp_program = var->va_string; } else if (eq(var->va_name, "rawfile")) { ft_rawfile = copy(var->va_string); } else if (eq(var->va_name, "acct")) { ft_acctprint = isset; } else if (eq(var->va_name, "noacct")) { ft_noacctprint = isset; } else if (eq(var->va_name, "ngdebug")) { ft_ngdebug = isset; } else if (eq(var->va_name, "noinit")) { ft_noinitprint = isset; } else if (eq(var->va_name, "list")) { ft_listprint = isset; } else if (eq(var->va_name, "nopage")) { ft_nopage = isset; } else if (eq(var->va_name, "nomod")) { ft_nomod = isset; } else if (eq(var->va_name, "node")) { ft_nodesprint = isset; } else if (eq(var->va_name, "opts")) { ft_optsprint = isset; } else if (eq(var->va_name, "strictnumparse")) { ft_strictnumparse = isset; } else if (eq(var->va_name, "strict_errorhandling")) { ft_stricterror = isset; } else if (eq(var->va_name, "rawfileprec")) { if ((var->va_type == CP_BOOL) && (isset == FALSE)) raw_prec = -1; else if (var->va_type == CP_REAL) raw_prec = (int)floor(var->va_real + 0.5); else if (var->va_type == CP_NUM) raw_prec = var->va_num; else fprintf(cp_err, "Bad 'rawfileprec' \"%s\"\n", var->va_name); } else if (eq(var->va_name, "numdgt")) { if ((var->va_type == CP_BOOL) && (isset == FALSE)) cp_numdgt = -1; else if (var->va_type == CP_REAL) cp_numdgt = (int)floor(var->va_real + 0.5); else if (var->va_type == CP_NUM) cp_numdgt = var->va_num; else fprintf(cp_err, "Excuse me??\n"); } else if (eq(var->va_name, "unixcom")) { cp_dounixcom = isset; if (isset) { char *s = getenv("PATH"); if (s) cp_rehash(s, TRUE); else fprintf(cp_err, "Warning: no PATH in environment.\n"); } } else if (eq(var->va_name, "units") && (var->va_type == CP_STRING)) { if (isset && ((*var->va_string == 'd') || (*var->va_string == 'D'))) cx_degrees = TRUE; else cx_degrees = FALSE; } else if (eq(var->va_name, "curplot")) { if (var->va_type == CP_STRING) plot_setcur(var->va_string); else fprintf(cp_err, "Error: plot name not a string\n"); return (US_DONTRECORD); } else if (eq(var->va_name, "curplotname")) { if (plot_cur && (var->va_type == CP_STRING)) plot_cur->pl_name = copy(var->va_string); else fprintf(cp_err, "Error: can't set plot name\n"); return (US_DONTRECORD); } else if (eq(var->va_name, "curplottitle")) { if (plot_cur && (var->va_type == CP_STRING)) plot_cur->pl_title = copy(var->va_string); else fprintf(cp_err, "Error: can't set plot title\n"); return (US_DONTRECORD); } else if (eq(var->va_name, "curplotdate")) { if (plot_cur && (var->va_type == CP_STRING)) plot_cur->pl_date = copy(var->va_string); else fprintf(cp_err, "Error: can't set plot date\n"); return (US_DONTRECORD); } else if (eq(var->va_name, "plots")) { return (US_READONLY); } if (plot_cur) for (tv = plot_cur->pl_env; tv; tv = tv->va_next) if (eq(tv->va_name, var->va_name)) return (US_READONLY); /* if (ft_curckt) for (tv = ft_curckt->ci_vars; tv; tv = tv->va_next) if (eq(tv->va_name, var->va_name)) return (US_READONLY); */ if (ft_nutmeg) return (US_OK); /* Now call the interface option routine. */ switch (var->va_type) { case CP_BOOL: bv = (var->va_bool) ? TRUE : FALSE; vv = &bv; break; case CP_STRING: vv = var->va_string; break; case CP_NUM: iv = var->va_num; vv = &iv; break; case CP_REAL: dv = var->va_real; vv = &dv; break; case CP_LIST: /* if_option can't handle lists anyway. */ vv = NULL; break; default: fprintf(cp_err, "cp_usrset: Internal Error: Bad var type %d\n", var->va_type); return (0); } if (ft_curckt) { if (if_option(ft_curckt->ci_ckt, var->va_name, var->va_type, vv)) return US_SIMVAR; } else { if (if_option(NULL, var->va_name, var->va_type, vv)) return US_NOSIMVAR; } return (US_OK); }