ngspice/src/frontend/com_display.c

83 lines
2.0 KiB
C

#include "ngspice/ngspice.h"
#include "ngspice/bool.h"
#include "ngspice/wordlist.h"
#include "ngspice/fteext.h"
#include "ngspice/cpextern.h"
#include "com_display.h"
#include "quote.h"
#include "variable.h"
#include "plotting/plotting.h"
#include "plotting/pvec.h"
/* For the sort in display. */
static int
dcomp(const void *d1, const void *d2)
{
struct dvec **v1 = (struct dvec **) d1;
struct dvec **v2 = (struct dvec **) d2;
return (strcmp((*v1)->v_name, (*v2)->v_name));
}
/* Display vector status, etc. Note that this only displays stuff
* from the current plot, and you must do a setplot to see the rest of
* it. */
void
com_display(wordlist *wl)
{
struct dvec *d;
struct dvec **dvs;
int len = 0, i = 0;
char *s;
/* Maybe he wants to know about just a few vectors. */
out_init();
while (wl) {
s = cp_unquote(wl->wl_word);
d = vec_get(s);
tfree(s); /*DG to avoid the cp_unquote memory leak */
if (d == NULL)
fprintf(cp_err, "Error: no such vector as %s.\n", wl->wl_word);
else
while (d) {
pvec(d);
d = d->v_link2;
}
if (wl->wl_next == NULL)
return;
wl = wl->wl_next;
}
if (plot_cur)
for (d = plot_cur->pl_dvecs; d; d = d->v_next)
len++;
if (len == 0) {
fprintf(cp_out, "There are no vectors currently active.\n");
return;
}
out_printf("Here are the vectors currently active:\n\n");
dvs = TMALLOC(struct dvec *, len);
for (d = plot_cur->pl_dvecs, i = 0; d; d = d->v_next, i++)
dvs[i] = d;
if (!cp_getvar("nosort", CP_BOOL, NULL))
qsort(dvs, (size_t) len, sizeof(struct dvec *), dcomp);
out_printf("Title: %s\n", plot_cur->pl_title);
out_printf("Name: %s (%s)\nDate: %s\n\n",
plot_cur->pl_typename, plot_cur->pl_name,
plot_cur->pl_date);
for (i = 0; i < len; i++) {
d = dvs[i];
pvec(d);
}
tfree(dvs);
}