From e2e71a7e4da456d9a9fe00b218e390330445b0d4 Mon Sep 17 00:00:00 2001 From: pnenzi Date: Tue, 27 Nov 2001 10:26:25 +0000 Subject: [PATCH] Applied patches from Charles Williams. The patched code makes error reporting more verbose. In inperror.c makes use of errMsg. --- src/spicelib/analysis/acsetp.c | 4 ++-- src/spicelib/analysis/noisean.c | 6 +++--- src/spicelib/analysis/transetp.c | 15 +++++++++++++++ src/spicelib/parser/inperror.c | 5 +++++ 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/spicelib/analysis/acsetp.c b/src/spicelib/analysis/acsetp.c index bc977e1a8..23e12de43 100644 --- a/src/spicelib/analysis/acsetp.c +++ b/src/spicelib/analysis/acsetp.c @@ -21,7 +21,7 @@ ACsetParm(CKTcircuit *ckt, void *anal, int which, IFvalue *value) case AC_START: if (value->rValue <= 0.0) { - errMsg = copy("Frequency of 0 is invalid"); + errMsg = copy("Frequency of 0 is invalid for AC start"); ((ACAN*)anal)->ACstartFreq = 1.0; return(E_PARMVAL); } @@ -31,7 +31,7 @@ ACsetParm(CKTcircuit *ckt, void *anal, int which, IFvalue *value) case AC_STOP: if (value->rValue <= 0.0) { - errMsg = copy("Frequency of 0 is invalid"); + errMsg = copy("Frequency of 0 is invalid for AC stop"); ((ACAN*)anal)->ACstartFreq = 1.0; return(E_PARMVAL); } diff --git a/src/spicelib/analysis/noisean.c b/src/spicelib/analysis/noisean.c index 5d544235e..1b0726143 100644 --- a/src/spicelib/analysis/noisean.c +++ b/src/spicelib/analysis/noisean.c @@ -34,7 +34,7 @@ NOISEan (CKTcircuit *ckt, int restart) int code; int step; IFuid freqUid; - void *inst; /* PN fixes incompatible pointer type warning */ + char *inst; double freqTol; /* tolerence parameter for finding final frequency; hack */ NOISEAN *job = (NOISEAN*) (ckt->CKTcurJob); @@ -47,7 +47,7 @@ NOISEan (CKTcircuit *ckt, int restart) inst = NULL; code = CKTtypelook("Vsource"); if (code != -1) { - error = CKTfndDev((void *)ckt,&code,&inst, + error = CKTfndDev((void *)ckt,&code,(void **)&inst, job->input, (void *)NULL, (IFuid)NULL); if (!error && !((VSRCinstance *)inst)->VSRCacGiven) { errMsg = MALLOC(strlen(noacinput)+1); @@ -58,7 +58,7 @@ NOISEan (CKTcircuit *ckt, int restart) code = CKTtypelook("Isource"); if (code != -1 && inst==NULL) { - error = CKTfndDev((void *)ckt,&code,&inst, + error = CKTfndDev((void *)ckt,&code, (void **)&inst, job->input, (void *)NULL,(IFuid)NULL); if (error) { /* XXX ??? */ diff --git a/src/spicelib/analysis/transetp.c b/src/spicelib/analysis/transetp.c index 0594e87a0..a911bb268 100644 --- a/src/spicelib/analysis/transetp.c +++ b/src/spicelib/analysis/transetp.c @@ -19,12 +19,27 @@ TRANsetParm(CKTcircuit *ckt, void *anal, int which, IFvalue *value) switch(which) { case TRAN_TSTOP: + if (value->rValue <= 0.0) { + errMsg = copy("TST0P is invalid, must be greater than zero."); + ((TRANan *)anal)->TRANfinalTime = 1.0; + return(E_PARMVAL); + } ((TRANan *)anal)->TRANfinalTime = value->rValue; break; case TRAN_TSTEP: + if (value->rValue <= 0.0) { + errMsg = copy( "TSTEP is invalid, must be greater than zero." ); + ((TRANan *)anal)->TRANstep = 1.0; + return(E_PARMVAL); + } ((TRANan *)anal)->TRANstep = value->rValue; break; case TRAN_TSTART: + if (value->rValue >= ((TRANan *)anal)->TRANfinalTime ) { + errMsg = copy("TSTART is invalid, must be less than TSTOP."); + ((TRANan *)anal)->TRANinitTime = 0.0; + return(E_PARMVAL); + } ((TRANan *)anal)->TRANinitTime = value->rValue; break; case TRAN_TMAX: diff --git a/src/spicelib/parser/inperror.c b/src/spicelib/parser/inperror.c index 9d77710eb..fd5286e55 100644 --- a/src/spicelib/parser/inperror.c +++ b/src/spicelib/parser/inperror.c @@ -23,6 +23,11 @@ char *INPerror(int type) char *val; char *ebuf; +/*CDHW Lots of things set errMsg but it is never used so let's hack it in CDHW*/ + if ( errMsg ) { + val = errMsg; errMsg=NULL; } + else +/*CDHW end of hack CDHW*/ val = SPerror(type); if (!val)