28 static int namecmp(
char*,
char*);
39 "Constant values",
"Sat Aug 16 10:55:15 PDT 1986",
"constants",
55 out_printf(
"Loading raw data file (\"%s\") . . . ", file);
65 for (pp = pl, pl =
NULL; pp; pp = np) {
90 out_printf(
"Title: %s\nName: %s\nDate: %s\n\n", pl->pl_title,
91 pl->pl_name, pl->pl_date);
106 for (tp = plot_list; tp; tp = tp->
pl_next) {
113 (void) sprintf(buf,
"%s%d", s, plot_num);
114 pl->pl_typename =
copy(buf);
146 if (
eq(pl->pl_typename,
"constants")) {
147 fprintf(
cp_err,
"Error: can't destroy the constant plot\n");
152 for (v = pl->pl_dvecs; v; v = nv) {
159 for (wl = wl0; wl; wl = wl->
wl_next) {
165 txfree((
char*)pl->pl_hashtab);
168 if (pl == plot_list) {
170 if (pl == plot_cur) {
176 for (op = plot_list; op; op = op->
pl_next)
181 "Internal Error: kill plot -- not in list\n");
185 if (pl == plot_cur) {
213 if (
cieq(name,
"new")) {
222 for (pl = plot_list; pl; pl = pl->
pl_next)
226 fprintf(
cp_err,
"Error: no such plot named %s\n", name);
275 for (tp = plot_list; tp; tp = tp->
pl_next) {
277 n = atoi(tp->pl_typename + strlen(s));
282 (void) sprintf(buf,
"%s%d", s, plot_num);
300 while (*pre && *str) {
305 if (*pre || (*str && isdigit(pre[-1])))
319 fprintf(
cp_err,
"new temporary vector %s\n", d->v_name);
337 fprintf(
cp_err,
"new permanent vector %s\n", d->v_name);
381 txfree((
char*)v->v_realdata);
384 txfree((
char*)v->v_compdata);
397 for (; dl; dl = dn) {
419 if (!d && (sscanf(word,
"%c(%s", &cc, buf) == 2) &&
420 ((s = strrchr(buf,
')')) !=
NULL) &&
421 (*(s + 1) ==
'\0')) {
425 (void) sprintf(buf2,
"%s#branch", buf);
459 struct dvlist *dl0, *dl, *dll;
461 wd = word =
copy(word);
463 if (strchr(word,
'.')) {
465 for (i = 0, s = word; *s !=
'.'; i++, s++)
468 if (
cieq(buf,
"all")) {
495 for (pl = plot_list; pl; pl = pl->
pl_next) {
521 "Error: plot wildcard (name %s) matches nothing\n", word);
537 "Error: circuit parameters only available with spice\n");
542 for (param = name; *param && (*param !=
'['); param++)
546 for (s = param; *s && *s !=
']'; s++)
592 if (
cieq(word,
"all")) {
599 for (wl = wl0; wl; wl = wl->
wl_next) {
662 for (i = 0; i < v->v_numdims; i++)
663 nv->
v_dims[i] = v->v_dims[i];
667 (
double *)
tmalloc(
sizeof(
double) * v->v_length);
688 for (pl = plot_list; pl; pl = pl->
pl_next) {
693 fprintf(
cp_err,
"vec_gc: throwing away %s.%s\n",
711 struct
dvec *v1, *v2;
716 if (v1->v_plot != v2->v_plot)
741 if (strchr(v->v_name,
'.')) {
742 for (t = v->v_name, i = 0; *t && *t !=
'.'; t++)
745 if (
cieq(v->v_plot->pl_typename, buf))
746 (void)
strcpy(buf, t + 1);
748 (
void)
strcpy(buf, v->v_name);
751 (
void)
strcpy(buf, v->v_name);
753 for (t = buf; isspace(*t); t++)
758 while ((t > s) && isspace(t[-1]))
776 for (i = 0,dl = d->v_link2; dl; i++,dl = dl->
dl_next) ;
780 for (i = 0,dl = d->v_link2; dl; i++,dl = dl->
dl_next)
783 qsort((
char *) array, i,
sizeof (
struct dvec *),
785 (
int(*)(
const void*,
const void*))
veccmp);
791 for (i = 0,dl = d->v_link2; dl; i++,dl = dl->
dl_next)
801 struct
dvec **d1, **d2;
805 if ((i =
namecmp((*d1)->v_plot->pl_typename,
806 (*d2)->v_plot->pl_typename)) != 0)
808 return (
namecmp((*d1)->v_name, (*d2)->v_name));
823 while ((*s == *t) && !isdigit(*s) && *s)
827 if ((*s != *t) && (!isdigit(*s) || !isdigit(*t)))
833 for (i = 0; isdigit(*s); s++)
834 i = i * 10 + *s -
'0';
835 for (j = 0; isdigit(*t); t++)
836 j = j * 10 + *t -
'0';
854 struct dvec *vecs, *
d;
858 if (v->v_numdims < 2)
861 size = v->v_dims[v->v_numdims - 1];
862 numvecs = v->v_length/size;
864 for (i = 0, dl = dl0 =
NULL; i < numvecs; i++) {
876 for (dl = dl0, j = 0; j < numvecs; j++, dl = dl->
dl_next) {
878 (void)
strcpy(buf, v->v_name);
879 for (i = 0; i < v->v_numdims - 1; i++)
880 (
void) sprintf(buf + strlen(buf),
"[%d]", count[i]);
897 (
double *)
tmalloc(
sizeof(
double) * size);
906 for (i = v->v_numdims - 2; i >= 0; i--) {
907 if (count[i]++ < v->v_dims[i])
struct plot * plot_alloc(char *name)
static char buf[MAXPROMPT]
void ft_loadfile(char *file)
void vec_remove(char *name)
void vec_newtemp(struct dvec *d)
struct dvec * vec_fromplot(char *word, struct plot *plot)
void plot_setcur(char *name)
char * vec_basename(struct dvec *v)
struct dvec * vec_mkfamily(struct dvec *v)
bool vec_eq(struct dvec *v1, struct dvec *v2)
static struct dvec * findvec()
void plot_delete(struct plot *pl)
void vec_newperm(struct dvec *d)
void plot_docoms(wordlist *wl)
struct wordlist * wl_next
void plot_new(struct plot *pl)
void vec_sort(struct dvec *d)
static struct plot constantplot
struct dvec * vec_get(char *word)
struct dvec * vec_copy(struct dvec *v)
void vec_dlfree(struct dvlist *dl)
void plot_add(struct plot *pl)
bool plot_prefix(char *pre, char *str)