void com_load(wordlist *wl) { char *copypath; if (!wl) ft_loadfile(ft_rawfile); else while (wl) { /*ft_loadfile(cp_unquote(wl->wl_word)); DG: bad memory leak*/ copypath = cp_unquote(wl->wl_word);/*DG*/ ft_loadfile(copypath); tfree(copypath); wl = wl->wl_next; } /* note: default is to display the vectors in the last (current) plot */ com_display(NULL); }
void com_meas(wordlist *wl) { /* wl: in, input line of meas command */ char *line_in, *outvar; wordlist *wl_count, *wl_let; char *vec_found, *token, *equal_ptr; wordlist *wl_index; struct dvec *d; int err = 0; int fail; double result = 0; if (!wl) { com_display(NULL); return; } wl_count = wl; /* check each wl entry, if it contain '=' and if the following token is a single valued vector. If yes, replace this vector by its value. Vectors may stem from other meas commands, or be generated elsewhere within the .control .endc script. All other right hand side vectors are treated in com_measure2.c. */ wl_index = wl; while (wl_index) { token = wl_index->wl_word; /* find the vector vec_found, next token after each '=' sign. May be in the next wl_word */ if (token[strlen(token) - 1] == '=') { wl_index = wl_index->wl_next; vec_found = wl_index->wl_word; /* token may be already a value, maybe 'LAST', which we have to keep, or maybe a vector */ if (!cieq(vec_found, "LAST")) { INPevaluate(&vec_found, &err, 1); /* if not a valid number */ if (err) { /* check if vec_found is a valid vector */ d = vec_get(vec_found); /* Only if we have a single valued vector, replacing of the rigt hand side does make sense */ if (d && (d->v_length == 1) && (d->v_numdims == 1)) { /* get its value */ wl_index->wl_word = tprintf("%e", d->v_realdata[0]); tfree(vec_found); } } } } /* may be inside the same wl_word */ else if ((equal_ptr = strstr(token, "=")) != NULL) { vec_found = equal_ptr + 1; if (!cieq(vec_found, "LAST")) { INPevaluate(&vec_found, &err, 1); if (err) { d = vec_get(vec_found); /* Only if we have a single valued vector, replacing of the rigt hand side does make sense */ if (d && (d->v_length == 1) && (d->v_numdims == 1)) { int lhs_len = (int)(equal_ptr - token); wl_index->wl_word = tprintf("%.*s=%e", lhs_len, token, d->v_realdata[0]); tfree(token); } } } } else { ; // nothing } wl_index = wl_index->wl_next; } line_in = wl_flatten(wl); /* get output var name */ wl_count = wl_count->wl_next; if (!wl_count) { fprintf(stdout, " meas %s failed!\n" " unspecified output var name\n\n", line_in); return; } outvar = wl_count->wl_word; fail = get_measure2(wl, &result, NULL, FALSE); if (fail) { fprintf(stdout, " meas %s failed!\n\n", line_in); return; } wl_let = wl_cons(tprintf("%s = %e", outvar, result), NULL); com_let(wl_let); wl_free(wl_let); tfree(line_in); }