diff --git a/src/analysis/ChangeLog b/src/analysis/ChangeLog index dc7647af0..b21e35847 100644 --- a/src/analysis/ChangeLog +++ b/src/analysis/ChangeLog @@ -1,17 +1,21 @@ -2000-04-04 Paolo Nenzi + + * cktpzstr.c, cktsens.c: Applied Widlok patches. + +2000-04-04 Paolo Nenzi * noisean.c: Merged the previous code with the new one included in bsim4 distribution. This code originated from Weidong Lu (bsim group). 1999-12-20 Paolo Nenzi - - * noisean.c: - Bug: he ac noise analysis in Spice3f4 has a serious bug. In interactive mode, - it fails to reproduce frequency dependence known to exist. In batch (Spice2) - mode, it works only if a corresponding ac analysis has been run first. - Fix: This bug is fixed by providing a call to CKTload() in noisean.c as shown - by the source code patch which is attached below. + * noisean.c: + Bug: The ac noise analysis in Spice3f4 has a serious bug. In + interactive mode it fails to reproduce frequency dependence known + to exist. In batch (Spice2) mode, it works only if a corresponding + ac analysis has been run first. + Fix: This bug is fixed by providing a call to CKTload() in + noisean.c as shown by the source code patch which is attached below. 1999-09-08 Emmanuel Rouat diff --git a/src/analysis/cktpzstr.c b/src/analysis/cktpzstr.c index 607271df8..7f70fa7d6 100644 --- a/src/analysis/cktpzstr.c +++ b/src/analysis/cktpzstr.c @@ -636,6 +636,14 @@ CKTpzRunTrial(CKTcircuit *ckt, PZtrial **new_trialp, PZtrial **set) #endif if (!(p->flags & ISAROOT) && CKTpzTrapped == 3 && NIpzK != 0.0 && NIpzK_mag > -10) { +#ifdef notdef + if (p->flags & ISAROOT) { + /* Ugh! muller doesn't work right */ + new_trial->flags = ISAMINIMA; + new_trial->s.imag = scalb(NIpzK, (int) (NIpzK_mag / 2)); + pretest = 0; + } else { +#endif p->flags |= ISAMINIMA; free(new_trial); *new_trialp = p; diff --git a/src/analysis/cktsens.c b/src/analysis/cktsens.c index d658a74aa..7ebc8e824 100644 --- a/src/analysis/cktsens.c +++ b/src/analysis/cktsens.c @@ -77,6 +77,22 @@ int sens_sens(CKTcircuit *ckt, int restart) int type; #ifndef notdef +#ifdef notdef + for (sg = sgen_init(ckt, 0); sg; sgen_next(&sg)) { + if (sg->is_instparam) + printf("%s:%s:%s -> param %s\n", + DEVices[sg->dev]->DEVpublic.name, + sg->model->GENmodName, + sg->instance->GENname, + sg->ptable[sg->param].keyword); + else + printf("%s:%s:%s -> mparam %s\n", + DEVices[sg->dev]->DEVpublic.name, + sg->model->GENmodName, + sg->instance->GENname, + sg->ptable[sg->param].keyword); + } +#endif #ifdef ASDEBUG DEBUG(1) printf(">>> restart : %d\n", restart); @@ -101,6 +117,10 @@ int sens_sens(CKTcircuit *ckt, int restart) (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, ckt->CKTdcMaxIter); +#ifdef notdef + ckt->CKTmode = (ckt->CKTmode & MODEUIC) + | MODEDCOP | MODEINITSMSIG; +#endif if (error) return error; @@ -210,6 +230,13 @@ int sens_sens(CKTcircuit *ckt, int restart) } #endif +#ifdef notdef + for (j = 0; j <= ckt->CKTmaxOrder + 1; j++) { + save_states[j] = ckt->CKTstates[j]; + ckt->CKTstates[j] = NULL; + } +#endif + for (i = 0; i < nfreqs; i++) { /* XXX handle restart */ @@ -248,6 +275,12 @@ int sens_sens(CKTcircuit *ckt, int restart) E = ckt->CKTrhs; iE = ckt->CKTirhs; Y = ckt->CKTmatrix; +#ifdef notdef + for (j = 0; j <= ckt->CKTmaxOrder + 1; j++) { + /* XXX Free new states */ + ckt->CKTstates[j] = save_states[j]; + } +#endif error = CKTtemp(ckt); if (error) return error; @@ -258,6 +291,13 @@ int sens_sens(CKTcircuit *ckt, int restart) if (error) return error; +#ifdef notdef + /* XXX Why? */ + for (j = 0; j <= ckt->CKTmaxOrder + 1; j++) { + ckt->CKTstates[j] = NULL; + } +#endif + } /* Use a different vector & matrix */ @@ -330,7 +370,9 @@ int sens_sens(CKTcircuit *ckt, int restart) #ifdef ASDEBUG DEBUG(1) printf("Original value: %g\n", sg->value); +#endif +#ifdef ASDEBUG DEBUG(2) { printf("Effect of device:\n"); spPrint(delta_Y, 0, 1, 1); @@ -529,6 +571,13 @@ int sens_sens(CKTcircuit *ckt, int restart) ckt->CKTmatrix = Y; ckt->CKTbypass = bypass; +#ifdef notdef + for (j = 0; j <= ckt->CKTmaxOrder + 1; j++) { + if (ckt->CKTstates[j]) + FREE(ckt->CKTstates[j]); + ckt->CKTstates[j] = save_states[j]; + } +#endif #endif return OK; diff --git a/src/frontend/plotting/ChangeLog b/src/frontend/plotting/ChangeLog new file mode 100644 index 000000000..9d0a8dcba --- /dev/null +++ b/src/frontend/plotting/ChangeLog @@ -0,0 +1,4 @@ +2000-05-22 Paolo Nenzi + + * x11.c: Applied Widlok patch and reintrodced some #ifdef notdef + code. diff --git a/src/frontend/plotting/x11.c b/src/frontend/plotting/x11.c index 7423e7b78..3ba608d29 100644 --- a/src/frontend/plotting/x11.c +++ b/src/frontend/plotting/x11.c @@ -88,6 +88,8 @@ static int numdispplanes; extern void internalerror (char *message); extern void externalerror (char *message); +static void initlinestyles (void); +static void initcolors (GRAPH *graph); extern void PushGraphContext (GRAPH *graph); extern void SetColor (int colorid); extern void Text (char *text, int x, int y); @@ -95,6 +97,7 @@ extern void SaveText (GRAPH *graph, char *text, int x, int y); extern void PopGraphContext (void); void slopelocation (GRAPH *graph, int x0, int y0); void zoomin (GRAPH *graph); +static void X_ScreentoData (GRAPH *graph, int x, int y, double *fx, double *fy); extern int DestroyGraph (int id); extern void gr_redraw (GRAPH *graph); extern void gr_resize (GRAPH *graph); @@ -287,6 +290,21 @@ handlekeypressed(Widget w, caddr_t clientdata, caddr_t calldata) } +# ifdef notdef +void +keyhandler(clientdata, source, id) +caddr_t clientdata; +int *source; +XtInputId id; +{ + +# ifdef notdef + KEYwaiting = TRUE; +# endif + +} +# endif + void handlebuttonev(Widget w, caddr_t clientdata, caddr_t calldata) { @@ -304,6 +322,17 @@ handlebuttonev(Widget w, caddr_t clientdata, caddr_t calldata) } +# ifdef notdef +handlemotionev(w, clientdata, calldata) +Widget w; +caddr_t clientdata, calldata; +{ + + XMotionEvent *motionev = (XMotionEvent *) calldata; + + switch +} +# endif /* Recover from bad NewViewPort call. */ #define RECOVERNEWVIEWPORT() free((char *) graph);\ @@ -496,6 +525,15 @@ X11_Arc(int x0, int y0, int radius, double theta1, double theta2) x0 - radius, currentgraph->absolute.height - radius - y0, 2 * radius, 2 * radius, t1, t2); +# ifdef notdef + printf("at %d, %d, %g %g x %d :: (%d, %d)\n", + x0, y0, theta1, theta2, radius, t1, t2); + printf("skip\n"); + XSync(display, 0); + printf("XDrawArc(%d, %d, %d, %d, %d, %d)\n", x0 - radius, + currentgraph->absolute.height - radius - y0, + 2 * radius, 2 * radius, t1, t2); +# endif } } @@ -540,6 +578,19 @@ X11_SetLinestyle(int linestyleid) if (currentgraph->linestyle != linestyleid) { +# ifdef notdef + switch (linestyleid %3) { + case 0: + values.line_style = LineSolid; + break; + case 1: + values.line_style = LineOnOffDash; + break; + case 2: + values.line_style = LineDoubleDash; + break; + } +# endif if ((linestyleid == 0 || numdispplanes > 1) && linestyleid != 1) { /* solid if linestyle 0 or if has color, allow only one * dashed linestyle */ @@ -808,8 +859,10 @@ killwin(Widget w, caddr_t client_data, caddr_t call_data) /* Iplots are done asynchronously */ DEVDEP(graph).isopen = 0; - DestroyGraph(graph->graphid); +/* MW. Not sure but DestroyGraph might free() to much - try Xt...() first */ XtDestroyWidget(DEVDEP(graph).shell); + DestroyGraph(graph->graphid); + } @@ -825,6 +878,15 @@ redraw(Widget w, caddr_t client_data, caddr_t call_data) int n = 1; DEVDEP(graph).isopen = 1; +# ifdef notdef + /* if there is a resize, let the resize routine handle the exposures */ + if (XCheckWindowEvent(display, DEVDEP(graph).window, + (long) StructureNotifyMask, &ev)) { + resize(w, client_data, &ev); + return; + } +# endif + rects[0].x = pev->x; rects[0].y = pev->y; rects[0].width = pev->width; @@ -873,6 +935,38 @@ resize(Widget w, caddr_t client_data, caddr_t call_data) } +# ifdef notdef +/* stolen from CP/lexical.c */ + +/* A special 'getc' so that we can deal with ^D properly. There is no way for + * stdio to know if we have typed a ^D after some other characters, so + * don't use buffering at all... + */ +static int inchar(fp) + FILE *fp; +{ + + char c; + int i; + extern int errno; + +# ifdef HAS_TERMREAD + if (cp_interactive && !cp_nocc) { + i = read((int) fileno(fp), &c, 1); + if (i == 0) + return (EOF); + else if (i == -1) { + perror("read"); + return (EOF); + } else + return ((int) c); + } +# endif + c = getc(fp); + return ((int) c); +} +# endif + void X11_Input(REQUEST *request, RESPONSE *response) {