diff --git a/src/sharedspice.c b/src/sharedspice.c index 28ec986a8..53aebbf48 100644 --- a/src/sharedspice.c +++ b/src/sharedspice.c @@ -218,6 +218,9 @@ static GetVSRCData* getvdat; static GetISRCData* getidat; static GetSyncData* getsync; static pvector_info myvec = NULL; +#ifdef XSPICE +static struct dvec *infovec = NULL; +#endif char **allvecs = NULL; char **allplots = NULL; static bool noprintfwanted = FALSE; @@ -779,6 +782,20 @@ bot: return 0; } + +/* to be called upon 'quit' */ +void +sh_delete_myvec(void) +{ + tfree(myvec); +#ifdef XSPICE + if (infovec) { + dvec_free(infovec->v_scale); + dvec_free(infovec); + } +#endif +} + /* retrieve a ngspice command from caller and run it immediately */ IMPEXP @@ -813,6 +830,15 @@ pvector_info ngGet_Vec_Info(char* vecname) return NULL; } +#ifdef XSPICE + /* If vector is derived from event data, free it */ + if (infovec) { + dvec_free(infovec->v_scale); + dvec_free(infovec); + infovec = NULL; + } +#endif + newvec = vec_get(vecname); if (newvec == NULL) { @@ -830,6 +856,13 @@ pvector_info ngGet_Vec_Info(char* vecname) myvec->v_realdata = newvec->v_realdata; myvec->v_compdata = newvec->v_compdata; myvec->v_length = newvec->v_length; + +#ifdef XSPICE + /* If we have a vector derived from event data, store its pointer */ + if (newvec->v_scale && newvec->v_scale->v_name && eq(newvec->v_scale->v_name, "step")) + infovec = newvec; +#endif + return myvec; };