diff --git a/examples/cider/diode/diode.cir b/examples/cider/diode/diode.cir index 527de4af9..9a9c436a2 100644 --- a/examples/cider/diode/diode.cir +++ b/examples/cider/diode/diode.cir @@ -30,7 +30,7 @@ D1 1 2 M_PN AREA=100 .op .ac dec 10 100kHz 10gHz .print ac i(Vpp) -.dc Vpp -3.0v 2.0001v 50mv -.print dc i(Vpp) +* .dc Vpp -3.0v 2.0001v 50mv +* .print dc i(Vpp) .END diff --git a/src/ciderlib/oned/onedest.c b/src/ciderlib/oned/onedest.c index 9b1bba8b4..cc19c1acf 100644 --- a/src/ciderlib/oned/onedest.c +++ b/src/ciderlib/oned/onedest.c @@ -85,4 +85,8 @@ ONEdestroy(ONEdevice *pDevice) /* NOT IMPLEMENTED */ FREE(pDevice); + { + extern void CiderLoaded(int); + CiderLoaded(-1); + } } diff --git a/src/ciderlib/oned/onemesh.c b/src/ciderlib/oned/onemesh.c index 78ad614fd..62766e7f0 100644 --- a/src/ciderlib/oned/onemesh.c +++ b/src/ciderlib/oned/onemesh.c @@ -194,6 +194,11 @@ ONEbuildMesh(ONEdevice *pDevice, ONEcoord *pCoord, ONEdomain *pDomain, pDevice->dimBias = numEqn; FREE(nodeArray); + { + extern void CiderLoaded(int); + CiderLoaded(1); + } + /* * ONEprnMesh( pDevice ); */ diff --git a/src/ciderlib/support/globals.c b/src/ciderlib/support/globals.c index 8f98e5e75..2ab5a2acc 100644 --- a/src/ciderlib/support/globals.c +++ b/src/ciderlib/support/globals.c @@ -155,3 +155,14 @@ void GLOBprnGlobals(FILE *file, GLOBvalues *values) return; } + +static int cider_is_loaded = 0; +void CiderLoaded(int val) +{ + cider_is_loaded += val; +} + +int IsCiderLoaded(void) +{ + return cider_is_loaded; +} diff --git a/src/ciderlib/twod/twodest.c b/src/ciderlib/twod/twodest.c index 6294b852d..35c7ecf9a 100644 --- a/src/ciderlib/twod/twodest.c +++ b/src/ciderlib/twod/twodest.c @@ -107,4 +107,8 @@ TWOdestroy(TWOdevice *pDevice) /* NOT IMPLEMENTED */ FREE( pDevice ); + { + extern void CiderLoaded(int); + CiderLoaded(-1); + } } diff --git a/src/ciderlib/twod/twomesh.c b/src/ciderlib/twod/twomesh.c index 161bb0c3c..cbc058346 100644 --- a/src/ciderlib/twod/twomesh.c +++ b/src/ciderlib/twod/twomesh.c @@ -458,6 +458,10 @@ TWObuildMesh(TWOdevice *pDevice, TWOdomain *pDomain, FREE(edgeArrayV); FREE(edgeArrayH); + { + extern void CiderLoaded(int); + CiderLoaded(1); + } /* * TWOprnMesh( pDevice ); */ diff --git a/src/main.c b/src/main.c index 7957cc7f2..70906ca14 100644 --- a/src/main.c +++ b/src/main.c @@ -533,6 +533,19 @@ SIMinit(IFfrontEnd *frontEnd, IFsimulator **simulator) static ATTRIBUTE_NORETURN void sp_shutdown(int exitval) { +#ifdef CIDER + { + extern int IsCiderLoaded(void); + char *cider_quit = getenv("CIDER_COM_QUIT"); + bool cider_com_quit = TRUE; + if (cider_quit && eq(cider_quit, "OFF")) { + cider_com_quit = FALSE; + } + if (cider_com_quit && IsCiderLoaded() > 0) { + com_quit(NULL); + } + } +#endif destroy_ivars(); #ifdef HAS_WINGUI if (exitval == EXIT_BAD)