From be183407cd365301147350b91e0090fdfd74057c Mon Sep 17 00:00:00 2001 From: rlar Date: Wed, 15 Aug 2012 19:00:31 +0200 Subject: [PATCH] cleanup (checked for code invariance) --- src/frontend/inp.c | 428 ++++++++++++++-------------- src/frontend/shyu.c | 463 ++++++++++++++++--------------- src/spicelib/analysis/cktntask.c | 187 +++++++------ 3 files changed, 552 insertions(+), 526 deletions(-) diff --git a/src/frontend/inp.c b/src/frontend/inp.c index 5b264aa1d..aa82db8a5 100644 --- a/src/frontend/inp.c +++ b/src/frontend/inp.c @@ -31,27 +31,27 @@ Author: 1985 Wayne A. Christopher #include "com_let.h" #ifdef XSPICE -/* include new stuff */ #include "ngspice/ipctiein.h" #include "ngspice/enh.h" -/* */ #endif #include "numparam/numpaif.h" -#define line_free(line,flag) { line_free_x(line,flag); line = NULL; } -/* static declarations */ -static char * upper(register char *string); +#define line_free(line, flag) { line_free_x(line, flag); line = NULL; } + +static char *upper(register char *string); static bool doedit(char *filename); static struct line *com_options = NULL; -void line_free_x(struct line * deck, bool recurse); +void line_free_x(struct line *deck, bool recurse); + #ifdef HAS_WINDOWS -void SetAnalyse( char * Analyse, int Percent); +void SetAnalyse(char *Analyse, int Percent); #endif + /* Do a listing. Use is listing [expanded] [logical] [physical] [deck] */ void com_listing(wordlist *wl) @@ -63,7 +63,7 @@ com_listing(wordlist *wl) if (ft_curckt) { /* if there is a current circuit . . . . */ while (wl) { s = wl->wl_word; - if ( strcmp( s, "param" ) == 0 ) { + if (strcmp(s, "param") == 0) { do_param_listing = TRUE; } else { switch (*s) { @@ -84,26 +84,28 @@ com_listing(wordlist *wl) expand = TRUE; break; default: - fprintf(cp_err, - "Error: bad listing type %s\n", s); + fprintf(cp_err, "Error: bad listing type %s\n", s); return; /* SJB - don't go on after an error */ } } wl = wl->wl_next; } - if ( do_param_listing ) { + + if (do_param_listing) { nupa_list_params(cp_out); } else { if (type != LS_DECK) fprintf(cp_out, "\t%s\n\n", ft_curckt->ci_name); - inp_list(cp_out, expand ? ft_curckt->ci_deck : - ft_curckt->ci_origdeck, ft_curckt->ci_options, - type); + inp_list(cp_out, + expand ? ft_curckt->ci_deck : ft_curckt->ci_origdeck, + ft_curckt->ci_options, type); } - } else + } else { fprintf(cp_err, "Error: no circuit loaded.\n"); + } } + /* returns inp_casefix() or NULL */ static char * upper(char *string) @@ -132,122 +134,113 @@ inp_list(FILE *file, struct line *deck, struct line *extras, int type) bool renumber; bool useout = (file == cp_out); int i = 1; + /* gtri - wbk - 03/07/91 - Don't use 'more' type output if ipc enabled */ #ifdef XSPICE - if(g_ipc.enabled) { + if (g_ipc.enabled) useout = FALSE; - } #endif /* gtri - end - 03/07/91 */ if (useout) out_init(); + renumber = cp_getvar("renumber", CP_BOOL, NULL); + if (type == LS_LOGICAL) { -top1: + top1: for (here = deck; here; here = here->li_next) { if (renumber) here->li_linenum = i; - if (ciprefix(".end", here->li_line) && - !isalpha(here->li_line[4])) + if (ciprefix(".end", here->li_line) && !isalpha(here->li_line[4])) continue; if (*here->li_line != '*') { if (useout) { sprintf(out_pbuf, "%6d : %s\n", - here->li_linenum, - upper(here->li_line)); + here->li_linenum, upper(here->li_line)); out_send(out_pbuf); - } else + } else { fprintf(file, "%6d : %s\n", - here->li_linenum, - upper(here->li_line)); + here->li_linenum, upper(here->li_line)); + } if (here->li_error) { - if (useout) { + if (useout) out_printf("%s\n", here->li_error); - } else + else fprintf(file, "%s\n", here->li_error); } } i++; } + if (extras) { deck = extras; extras = NULL; goto top1; } + if (useout) { sprintf(out_pbuf, "%6d : .end\n", i); out_send(out_pbuf); - } else + } else { fprintf(file, "%6d : .end\n", i); + } + } else if ((type == LS_PHYSICAL) || (type == LS_DECK)) { -top2: + + top2: for (here = deck; here; here = here->li_next) { if ((here->li_actual == NULL) || (here == deck)) { if (renumber) here->li_linenum = i; - if (ciprefix(".end", here->li_line) && - !isalpha(here->li_line[4])) + if (ciprefix(".end", here->li_line) && !isalpha(here->li_line[4])) continue; if (type == LS_PHYSICAL) { if (useout) { sprintf(out_pbuf, "%6d : %s\n", - here->li_linenum, - upper(here->li_line)); + here->li_linenum, upper(here->li_line)); out_send(out_pbuf); - } else + } else { fprintf(file, "%6d : %s\n", - here->li_linenum, - upper(here->li_line)); + here->li_linenum, upper(here->li_line)); + } } else { if (useout) - out_printf("%s\n", - upper(here->li_line)); + out_printf("%s\n", upper(here->li_line)); else - fprintf(file, "%s\n", - upper(here->li_line)); + fprintf(file, "%s\n", upper(here->li_line)); } if (here->li_error && (type == LS_PHYSICAL)) { if (useout) - out_printf("%s\n", - here->li_error); + out_printf("%s\n", here->li_error); else - fprintf(file, "%s\n", - here->li_error); + fprintf(file, "%s\n", here->li_error); } } else { - for (there = here->li_actual; there; - there = there->li_next) { + for (there = here->li_actual; there; there = there->li_next) { there->li_linenum = i++; - if (ciprefix(".end", here->li_line) && - isalpha(here->li_line[4])) + if (ciprefix(".end", here->li_line) && isalpha(here->li_line[4])) continue; if (type == LS_PHYSICAL) { if (useout) { sprintf(out_pbuf, "%6d : %s\n", - there->li_linenum, - upper(there->li_line)); + there->li_linenum, upper(there->li_line)); out_send(out_pbuf); - } else + } else { fprintf(file, "%6d : %s\n", - there->li_linenum, - upper(there->li_line)); + there->li_linenum, upper(there->li_line)); + } } else { if (useout) - out_printf("%s\n", - upper(there->li_line)); + out_printf("%s\n", upper(there->li_line)); else - fprintf(file, "%s\n", - upper(there->li_line)); + fprintf(file, "%s\n", upper(there->li_line)); } - if (there->li_error && - (type == LS_PHYSICAL)) { + if (there->li_error && (type == LS_PHYSICAL)) { if (useout) - out_printf("%s\n", - there->li_error); + out_printf("%s\n", there->li_error); else - fprintf(file, "%s\n", - there->li_error); + fprintf(file, "%s\n", there->li_error); } } here->li_linenum = i; @@ -263,19 +256,21 @@ top2: if (useout) { sprintf(out_pbuf, "%6d : .end\n", i); out_send(out_pbuf); - } else + } else { fprintf(file, "%6d : .end\n", i); + } } else { if (useout) out_printf(".end\n"); else fprintf(file, ".end\n"); } - } else - fprintf(cp_err, "inp_list: Internal Error: bad type %d\n", - type); + } else { + fprintf(cp_err, "inp_list: Internal Error: bad type %d\n", type); + } } + /* * Free memory used by a line. * If recurse is TRUE then recursively free all lines linked via the li_next field. @@ -284,15 +279,15 @@ top2: * SJB - 22nd May 2001 */ void -line_free_x(struct line * deck, bool recurse) +line_free_x(struct line *deck, bool recurse) { - if(!deck) + if (!deck) return; tfree(deck->li_line); tfree(deck->li_error); - if(recurse) - line_free(deck->li_next,TRUE); - line_free(deck->li_actual,TRUE); + if (recurse) + line_free(deck->li_next, TRUE); + line_free(deck->li_actual, TRUE); tfree(deck); } @@ -323,7 +318,7 @@ inp_spsource(FILE *fp, bool comfile, char *filename) double startTime, endTime; /* read in the deck from a file */ - char *filename_dup = ( filename == NULL ) ? strdup(".") : strdup(filename); + char *filename_dup = (filename == NULL) ? strdup(".") : strdup(filename); startTime = seconds(); inp_readall(fp, &deck, 0, ngdirname(filename_dup), comfile); @@ -331,7 +326,7 @@ inp_spsource(FILE *fp, bool comfile, char *filename) tfree(filename_dup); /* if nothing came back from inp_readall, just close fp and return to caller */ - if (!deck) { /* MW. We must close fp always when returning */ + if (!deck) { /* MW. We must close fp always when returning */ fclose(fp); return; } @@ -378,39 +373,40 @@ inp_spsource(FILE *fp, bool comfile, char *filename) if (dd->li_line[0] == '*') cp_evloop(dd->li_line + 2); /* option line stored but not processed */ - else if (ciprefix("option", dd->li_line)) { + else if (ciprefix("option", dd->li_line)) com_options = inp_getoptsc(dd->li_line, com_options); - } else + else cp_evloop(dd->li_line); } } /* free the control deck */ - line_free(deck,TRUE); + line_free(deck, TRUE); /* printf("Command deck freed\n"); */ - } /* end if(comfile) */ + } /* end if (comfile) */ else { /* must be regular deck . . . . */ /* loop through deck and handle control cards */ for (dd = deck->li_next; dd; dd = ld->li_next) { /* get temp from deck */ - if ( ciprefix(".temp", dd->li_line) ) { + if (ciprefix(".temp", dd->li_line)) { s = dd->li_line + 5; - while ( isspace(*s) ) s++; - if ( temperature != NULL ) { + while (isspace(*s)) + s++; + if (temperature) txfree(temperature); - } temperature = strdup(s); } /* Ignore comment lines, but not lines begining with '*#', but remove them, if they are in a .control ... .endc section */ s = dd->li_line; - while(isspace(*s)) s++; - if ( (*s == '*') && ( (s != dd->li_line) || (s[1] != '#'))) { + while(isspace(*s)) + s++; + if ((*s == '*') && ((s != dd->li_line) || (s[1] != '#'))) { if (commands) { /* Remove comment lines in control sections, so they don't - * get considered as circuits. */ + * get considered as circuits. */ ld->li_next = dd->li_next; - line_free(dd,FALSE); + line_free(dd, FALSE); continue; } ld = dd; @@ -427,14 +423,14 @@ inp_spsource(FILE *fp, bool comfile, char *filename) if (ciprefix(".control", dd->li_line)) { ld->li_next = dd->li_next; - line_free(dd,FALSE); /* SJB - free this line's memory */ + line_free(dd, FALSE); /* SJB - free this line's memory */ if (commands) fprintf(cp_err, "Warning: redundant .control card\n"); else commands = TRUE; } else if (ciprefix(".endc", dd->li_line)) { ld->li_next = dd->li_next; - line_free(dd,FALSE); /* SJB - free this line's memory */ + line_free(dd, FALSE); /* SJB - free this line's memory */ if (commands) commands = FALSE; else @@ -452,55 +448,58 @@ inp_spsource(FILE *fp, bool comfile, char *filename) /* Look for set or unset numparams. If either are found then we evaluate these lines immediately so they take effect before netlist parsing */ - while(isspace(*s)) s++; /* step past any white space */ - if(ciprefix("set", s)) { - s+=3; - } else if(ciprefix("unset", s)) { - s+=5; - } - if(s!=dd->li_line) { /* one of the above must have matched */ - while(isspace(*s)) s++; /* step past white space */ - if(ciprefix("numparams", s)) { + while(isspace(*s)) /* step past any white space */ + s++; + if (ciprefix("set", s)) + s += 3; + else if (ciprefix("unset", s)) + s += 5; + if (s != dd->li_line) { /* one of the above must have matched */ + while(isspace(*s)) /* step past white space */ + s++; + if (ciprefix("numparams", s)) cp_evloop(wl->wl_word); - } } ld->li_next = dd->li_next; - line_free(dd,FALSE); + line_free(dd, FALSE); } else if (!*dd->li_line) { /* So blank lines in com files don't get considered as * circuits. */ ld->li_next = dd->li_next; - line_free(dd,FALSE); + line_free(dd, FALSE); } else { /* lines .width, .four, .plot, .print,. save added to wl_first, removed from deck */ /* lines .op, .meas, .tf added to wl_first */ inp_casefix(s); /* s: first token from line */ inp_casefix(dd->li_line); - if (eq(s, ".width") - || ciprefix(".four", s) - || eq(s, ".plot") - || eq(s, ".print") - || eq(s, ".save") - || eq(s, ".op") - || ciprefix(".meas", s) - || eq(s, ".tf")) { + if (eq(s, ".width") || + ciprefix(".four", s) || + eq(s, ".plot") || + eq(s, ".print") || + eq(s, ".save") || + eq(s, ".op") || + ciprefix(".meas", s) || + eq(s, ".tf")) + { wl_append_word(&wl_first, &end, copy(dd->li_line)); if (!eq(s, ".op") && !eq(s, ".tf") && !ciprefix(".meas", s)) { ld->li_next = dd->li_next; - line_free(dd,FALSE); - } else + line_free(dd, FALSE); + } else { ld = dd; - } else + } + } else { ld = dd; + } } - } /* end for(dd=deck->li_next . . . . */ + } /* end for (dd = deck->li_next . . . . */ /* set temperature if defined to a preliminary variable which may be used in numparam evaluation */ - if ( temperature != NULL ) { + if (temperature) { temperature_value = atof(temperature); - cp_vset("pretemp", CP_REAL, &temperature_value ); + cp_vset("pretemp", CP_REAL, &temperature_value); } if (ft_ngdebug) { cp_getvar("pretemp", CP_REAL, &testemp); @@ -511,12 +510,12 @@ inp_spsource(FILE *fp, bool comfile, char *filename) if (deck->li_next) { fprintf(cp_out, "\nCircuit: %s\n\n", tt); #ifdef HAS_WINDOWS - SetAnalyse( "Prepare Deck", 0); + SetAnalyse("Prepare Deck", 0); #endif /* Now expand subcircuit macros and substitute numparams.*/ if (!cp_getvar("nosubckt", CP_BOOL, NULL)) - if( (deck->li_next = inp_subcktexpand(deck->li_next)) == NULL ) { - line_free(realdeck,TRUE); + if ((deck->li_next = inp_subcktexpand(deck->li_next)) == NULL) { + line_free(realdeck, TRUE); line_free(deck->li_actual, TRUE); return; } @@ -525,10 +524,9 @@ inp_spsource(FILE *fp, bool comfile, char *filename) #ifdef XSPICE /* Translate all SPICE 2G6 polynomial type sources */ deck->li_next = ENHtranslate_poly(deck->li_next); - #endif - line_free(deck->li_actual,FALSE); + line_free(deck->li_actual, FALSE); deck->li_actual = realdeck; /* print out the expanded deck into debug-out2.txt */ @@ -537,28 +535,27 @@ inp_spsource(FILE *fp, bool comfile, char *filename) struct line *tmp_ptr1 = NULL; /*debug: print into file*/ fdo = fopen("debug-out2.txt", "w"); - for(tmp_ptr1 = deck; tmp_ptr1 != NULL; tmp_ptr1 = tmp_ptr1->li_next) + for (tmp_ptr1 = deck; tmp_ptr1; tmp_ptr1 = tmp_ptr1->li_next) fprintf(fdo, "%s\n", tmp_ptr1->li_line); - ; (void) fclose(fdo); } - for(dd = deck; dd != NULL; dd = dd->li_next) { + for (dd = deck; dd; dd = dd->li_next) { /* get csparams and create vectors */ - if ( ciprefix(".csparam", dd->li_line) ) { + if (ciprefix(".csparam", dd->li_line)) { wordlist *wlist = NULL; wordlist *wl = NULL; char *cstoken[3]; int i; s = dd->li_line; - *s='*'; + *s = '*'; s = dd->li_line + 8; - while ( isspace(*s) ) s++; - cstoken[0]=gettok_char(&s, '=', FALSE, FALSE); - cstoken[1]=gettok_char(&s, '=', TRUE, FALSE); - cstoken[2]=gettok(&s); - for (i=0; i<3;i++) { + while (isspace(*s)) + s++; + cstoken[0] = gettok_char(&s, '=', FALSE, FALSE); + cstoken[1] = gettok_char(&s, '=', TRUE, FALSE); + cstoken[2] = gettok(&s); + for (i = 0; i < 3; i++) wl_append_word(&wlist, &wl, cstoken[i]); - } com_let(wlist); wl_free(wlist); } @@ -569,16 +566,17 @@ inp_spsource(FILE *fp, bool comfile, char *filename) options = com_options; else if (options && com_options) { /* move to end of options - struct line* tmp_options = options; - while (tmp_options) { - if (!tmp_options->li_next) break; - tmp_options = tmp_options->li_next; - } - tmp_options->li_next = com_options;*/ + struct line *tmp_options = options; + while (tmp_options) { + if (!tmp_options->li_next) break; + tmp_options = tmp_options->li_next; + } + tmp_options->li_next = com_options;*/ /* move to end of com_options */ - struct line* tmp_options = com_options; + struct line *tmp_options = com_options; while (tmp_options) { - if (!tmp_options->li_next) break; + if (!tmp_options->li_next) + break; tmp_options = tmp_options->li_next; } tmp_options->li_next = options; @@ -599,14 +597,15 @@ inp_spsource(FILE *fp, bool comfile, char *filename) for (dd = deck; dd; dd = dd->li_next) { /* all parameter lines should be sequentially ordered and placed at - beginning of deck */ - if ( ciprefix( ".param", dd->li_line ) ) { + beginning of deck */ + if (ciprefix(".param", dd->li_line)) { ft_curckt->ci_param = dd; /* find end of .param statements */ - while ( ciprefix( ".param", dd->li_line ) ) { + while (ciprefix(".param", dd->li_line)) { prev_param = dd; dd = dd->li_next; - if (dd == NULL) break; // no line after .param line + if (dd == NULL) + break; // no line after .param line } prev_card->li_next = dd; prev_param->li_next = NULL; @@ -616,17 +615,21 @@ inp_spsource(FILE *fp, bool comfile, char *filename) } } - if ( ciprefix( ".meas", dd->li_line ) ) { - if ( cp_getvar( "autostop", CP_BOOL, NULL) ) { - if ( strstr( dd->li_line, " max " ) || strstr( dd->li_line, " min " ) || strstr( dd->li_line, " avg " ) || - strstr( dd->li_line, " rms " ) || strstr( dd->li_line, " integ " ) ) { - printf( "Warning: .OPTION AUTOSTOP will not be effective because one of 'max|min|avg|rms|integ' is used in .meas\n" ); - printf( " AUTOSTOP being disabled...\n" ); - cp_remvar( "autostop" ); + if (ciprefix(".meas", dd->li_line)) { + if (cp_getvar("autostop", CP_BOOL, NULL)) { + if (strstr(dd->li_line, " max ") || + strstr(dd->li_line, " min ") || + strstr(dd->li_line, " avg ") || + strstr(dd->li_line, " rms ") || + strstr(dd->li_line, " integ ")) + { + printf("Warning: .OPTION AUTOSTOP will not be effective because one of 'max|min|avg|rms|integ' is used in .meas\n"); + printf(" AUTOSTOP being disabled...\n"); + cp_remvar("autostop"); } } - if ( curr_meas == NULL ) { + if (curr_meas == NULL) { curr_meas = ft_curckt->ci_meas = dd; } else { curr_meas->li_next = dd; @@ -642,9 +645,9 @@ inp_spsource(FILE *fp, bool comfile, char *filename) /* set temperature, if defined, to new value. cp_vset will set the variable "temp" and also set CKTtemp, so we can do it only here because the circuit has to be already there */ - if ( temperature != NULL ) { + if (temperature) { temperature_value = atof(temperature); - cp_vset("temp", CP_REAL, &temperature_value ); + cp_vset("temp", CP_REAL, &temperature_value); txfree(temperature); } @@ -659,9 +662,8 @@ inp_spsource(FILE *fp, bool comfile, char *filename) struct line *tmp_ptr1 = NULL; /*debug: print into file*/ fdo = fopen("debug-out3.txt", "w"); - for(tmp_ptr1 = deck; tmp_ptr1 != NULL; tmp_ptr1 = tmp_ptr1->li_next) + for (tmp_ptr1 = deck; tmp_ptr1; tmp_ptr1 = tmp_ptr1->li_next) fprintf(fdo, "%s\n", tmp_ptr1->li_line); - ; (void) fclose(fdo); } @@ -674,10 +676,11 @@ inp_spsource(FILE *fp, bool comfile, char *filename) /* linked list dbs is used to store the "save" or .save data (defined in breakp2.c), breakpoint and iplot data, will be renewed in ft_dotsaves(). */ - if(dbs) tfree(dbs); + if (dbs) + tfree(dbs); /*saj, to process save commands always, not just in batch mode - *(breaks encapsulation of frontend and parsing commands slightly)*/ + *(breaks encapsulation of frontend and parsing commands slightly)*/ ft_dotsaves(); /* Now reset everything. Pop the control stack, and fix up the IO @@ -704,10 +707,10 @@ inp_dodeck( char *tt, /*in: the title of the deck */ wordlist *end, /*in: all lines with .width, .plot, .print, .save, .op, .meas, .tf */ bool reuse, /*in: TRUE if called from runcoms2.c com_rset, - FALSE if called from inp_spsource() */ + FALSE if called from inp_spsource() */ struct line *options, /*in: all .option lines from deck */ char *filename /*in: input file of deck */ -) + ) { struct circ *ct; struct line *dd; @@ -723,20 +726,18 @@ inp_dodeck( /* First throw away any old error messages there might be and fix the case of the lines. */ - for (dd = deck; dd; dd = dd->li_next) { + for (dd = deck; dd; dd = dd->li_next) if (dd->li_error) { tfree(dd->li_error); dd->li_error = NULL; } - } + if (reuse) { ct = ft_curckt; } else { if (ft_curckt) { - ft_curckt->ci_devices = cp_kwswitch(CT_DEVNAMES, - NULL); - ft_curckt->ci_nodes = cp_kwswitch(CT_NODENAMES, - NULL); + ft_curckt->ci_devices = cp_kwswitch(CT_DEVNAMES, NULL); + ft_curckt->ci_nodes = cp_kwswitch(CT_NODENAMES, NULL); } ft_curckt = ct = alloc(struct circ); @@ -750,7 +751,7 @@ inp_dodeck( is needed because we need the scale info BEFORE building the circuit and seems there is no other way to do this. */ if (!noparse) { - struct line* opt_beg = options; + struct line *opt_beg = options; for (; options; options = options->li_next) { for (s = options->li_line; *s && !isspace(*s); s++) ; @@ -776,15 +777,15 @@ inp_dodeck( case CP_NUM: break; case CP_REAL: - if ( strcmp("scale",eev->va_name)==0 ) { - cp_vset("scale", CP_REAL, &eev->va_real ); + if (strcmp("scale", eev->va_name) == 0) { + cp_vset("scale", CP_REAL, &eev->va_real); printf("Scale set\n"); } break; case CP_STRING: break; default: { - fprintf(stderr, "ERROR: enumeration value `CP_LIST' not handled in inp_dodeck\nAborting...\n" ); + fprintf(stderr, "ERROR: enumeration value `CP_LIST' not handled in inp_dodeck\nAborting...\n"); controlled_exit(EXIT_FAILURE); } } /* switch . . . */ @@ -801,8 +802,9 @@ inp_dodeck( startTime = seconds(); ckt = if_inpdeck(deck, &tab); ft_curckt->FTEstats->FTESTATnetParseTime = seconds() - startTime; - } else + } else { ckt = NULL; + } out_init(); @@ -829,7 +831,7 @@ inp_dodeck( #endif p = dd->li_error; do { - q =strchr(p, '\n'); + q = strchr(p, '\n'); if (q) *q = '\0'; @@ -843,8 +845,9 @@ inp_dodeck( if (ft_stricterror) controlled_exit(EXIT_BAD); } - else + else { out_printf("%s\n", p); + } if (q) *q++ = '\n'; @@ -856,25 +859,27 @@ inp_dodeck( /* Only print out netlist if brief is FALSE */ - if(!cp_getvar( "brief", CP_BOOL, NULL )) { + if (!cp_getvar("brief", CP_BOOL, NULL)) { /* output deck */ - out_printf( "\nProcessed Netlist\n" ); - out_printf( "=================\n" ); + out_printf("\nProcessed Netlist\n"); + out_printf("=================\n"); print_listing = 1; for (dd = deck; dd; dd = dd->li_next) { - if ( ciprefix(".prot", dd->li_line) ) print_listing = 0; - if ( print_listing == 1 ) out_printf( "%s\n", dd->li_line ); - if ( ciprefix(".unprot", dd->li_line) ) print_listing = 1; + if (ciprefix(".prot", dd->li_line)) + print_listing = 0; + if (print_listing == 1) + out_printf("%s\n", dd->li_line); + if (ciprefix(".unprot", dd->li_line)) + print_listing = 1; } - out_printf( "\n" ); + out_printf("\n"); } /* Add this circuit to the circuit list. If reuse is TRUE then use * the ft_curckt structure. */ if (!reuse) { /* Be sure that ci_devices and ci_nodes are valid */ - ft_curckt->ci_devices = cp_kwswitch(CT_DEVNAMES, - NULL); + ft_curckt->ci_devices = cp_kwswitch(CT_DEVNAMES, NULL); cp_kwswitch(CT_DEVNAMES, ft_curckt->ci_devices); ft_curckt->ci_nodes = cp_kwswitch(CT_NODENAMES, NULL); cp_kwswitch(CT_NODENAMES, ft_curckt->ci_nodes); @@ -901,44 +906,40 @@ inp_dodeck( if (!noparse) { /* for (; options; options = options->li_next) { - for (s = options->li_line; *s && !isspace(*s); s++) - ; + for (s = options->li_line; *s && !isspace(*s); s++) + ; - ii = cp_interactive; - cp_interactive = FALSE; - wl = cp_lexer(s); - cp_interactive = ii; - if (!wl || !wl->wl_word || !*wl->wl_word) - continue; - if (eev) - eev->va_next = cp_setparse(wl); - else - ct->ci_vars = eev = cp_setparse(wl); - while (eev->va_next) - eev = eev->va_next; - } + ii = cp_interactive; + cp_interactive = FALSE; + wl = cp_lexer(s); + cp_interactive = ii; + if (!wl || !wl->wl_word || !*wl->wl_word) + continue; + if (eev) + eev->va_next = cp_setparse(wl); + else + ct->ci_vars = eev = cp_setparse(wl); + while (eev->va_next) + eev = eev->va_next; + } */ for (eev = ct->ci_vars; eev; eev = eev->va_next) { bool one = TRUE; /* FIXME, actually eev->va_bool should be TRUE anyway */ switch (eev->va_type) { case CP_BOOL: - if_option(ct->ci_ckt, eev->va_name, - eev->va_type, &one); + if_option(ct->ci_ckt, eev->va_name, eev->va_type, &one); break; case CP_NUM: - if_option(ct->ci_ckt, eev->va_name, - eev->va_type, &eev->va_num); + if_option(ct->ci_ckt, eev->va_name, eev->va_type, &eev->va_num); break; case CP_REAL: - if_option(ct->ci_ckt, eev->va_name, - eev->va_type, &eev->va_real); + if_option(ct->ci_ckt, eev->va_name, eev->va_type, &eev->va_real); break; case CP_STRING: - if_option(ct->ci_ckt, eev->va_name, - eev->va_type, eev->va_string); + if_option(ct->ci_ckt, eev->va_name, eev->va_type, eev->va_string); break; default: { - fprintf(stderr, "ERROR: enumeration value `CP_LIST' not handled in inp_dodeck\nAborting...\n" ); + fprintf(stderr, "ERROR: enumeration value `CP_LIST' not handled in inp_dodeck\nAborting...\n"); controlled_exit(EXIT_FAILURE); } } // switch . . . @@ -989,8 +990,7 @@ com_edit(wordlist *wl) cp_interactive = inter; return; } - inp_list(fp, ft_curckt->ci_deck, ft_curckt->ci_options, - LS_DECK); + inp_list(fp, ft_curckt->ci_deck, ft_curckt->ci_options, LS_DECK); fprintf(cp_err, "Warning: editing a temporary file -- " "circuit not saved\n"); @@ -1017,7 +1017,7 @@ com_edit(wordlist *wl) inp_spsource(fp, FALSE, permfile ? filename : NULL); /* fclose(fp); */ - /* MW. inp_spsource already closed fp */ + /* MW. inp_spsource already closed fp */ if (ft_curckt && !ft_curckt->ci_filename) unlink(filename); @@ -1036,6 +1036,7 @@ com_edit(wordlist *wl) } } + static bool doedit(char *filename) { @@ -1055,6 +1056,7 @@ doedit(char *filename) return (system(buf) ? FALSE : TRUE); } + void com_source(wordlist *wl) { @@ -1068,6 +1070,7 @@ com_source(wordlist *wl) inter = cp_interactive; cp_interactive = FALSE; + if (wl->wl_next) { /* There are several files -- put them into a temp file */ tempfile = smktemp("sp"); @@ -1090,8 +1093,10 @@ com_source(wordlist *wl) wl = wl->wl_next; } fseek(fp, 0L, SEEK_SET); - } else + } else { fp = inp_pathopen(wl->wl_word, "r"); + } + if (fp == NULL) { perror(wl->wl_word); cp_interactive = TRUE; @@ -1099,16 +1104,17 @@ com_source(wordlist *wl) } /* Don't print the title if this is a spice initialisation file. */ - if (ft_nutmeg || substring(INITSTR, owl->wl_word) || substring(ALT_INITSTR, owl->wl_word)) { + if (ft_nutmeg || substring(INITSTR, owl->wl_word) || substring(ALT_INITSTR, owl->wl_word)) inp_spsource(fp, TRUE, tempfile ? NULL : wl->wl_word); - } else { + else inp_spsource(fp, FALSE, tempfile ? NULL : wl->wl_word); - } + cp_interactive = inter; if (tempfile) unlink(tempfile); } + void inp_source(char *file) { diff --git a/src/frontend/shyu.c b/src/frontend/shyu.c index 3b5696808..fee14341a 100644 --- a/src/frontend/shyu.c +++ b/src/frontend/shyu.c @@ -48,238 +48,258 @@ if_sens_run(CKTcircuit *ckt, wordlist *args, INPtables *tab) (void) sprintf(buf, ".%s", wl_flatten(args)); - deck.nextcard = NULL; - deck.actualLine = NULL; - deck.error = NULL; - deck.linenum = 0; - deck.linenum_orig = 0; - deck.line = buf; + deck.nextcard = NULL; + deck.actualLine = NULL; + deck.error = NULL; + deck.linenum = 0; + deck.linenum_orig = 0; + deck.line = buf; current = (card *) &deck; line = current->line; - INPgetTok(&line,&token,1); + INPgetTok(&line, &token, 1); - if(ft_curckt->ci_specTask) { - err = ft_sim->deleteTask (ft_curckt->ci_ckt, - ft_curckt->ci_specTask); - if(err) { - ft_sperror(err,"deleteTask"); + if (ft_curckt->ci_specTask) { + err = ft_sim->deleteTask (ft_curckt->ci_ckt, ft_curckt->ci_specTask); + if (err) { + ft_sperror(err, "deleteTask"); return(0); /* temporary */ } } - err = ft_sim->newTask (ft_curckt->ci_ckt, - &(ft_curckt->ci_specTask), "special", - &(ft_curckt->ci_defTask)); - if(err) { - ft_sperror(err,"newTask"); + err = ft_sim->newTask (ft_curckt->ci_ckt, &(ft_curckt->ci_specTask), + "special", & (ft_curckt->ci_defTask)); + if (err) { + ft_sperror(err, "newTask"); return(0); /* temporary */ } - for(j=0;jnumAnalyses;j++) { - if(strcmp(ft_sim->analyses[j]->name,"options")==0) { + + for (j = 0; j < ft_sim->numAnalyses; j++) + if (strcmp(ft_sim->analyses[j]->name, "options") == 0) { which = j; break; } - } - if(which == -1) { - /* in DEEP trouble */ - ft_sperror(err,"in DEEP trouble"); - return(0);/* temporary */ + + if (which == -1) { + /* in DEEP trouble */ + ft_sperror(err, "in DEEP trouble"); + return(0); /* temporary */ } + err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "options", - &(ft_curckt->ci_specOpt), ft_curckt->ci_specTask); - if(err) { - ft_sperror(err,"createOptions"); - return(0);/* temporary */ + & (ft_curckt->ci_specOpt), ft_curckt->ci_specTask); + if (err) { + ft_sperror(err, "createOptions"); + return(0); /* temporary */ } + ft_curckt->ci_curOpt = ft_curckt->ci_specOpt; ft_curckt->ci_curTask = ft_curckt->ci_specTask; + which = -1; - for(j=0;jnumAnalyses;j++) { - if(strcmp(ft_sim->analyses[j]->name,"SEN")==0) { + for (j = 0; j < ft_sim->numAnalyses; j++) + if (strcmp(ft_sim->analyses[j]->name, "SEN") == 0) { which = j; break; } - } - if(which == -1) { - current->error = INPerrCat(current->error,INPmkTemp( - "sensetivity analysis unsupported\n")); + + if (which == -1) { + current->error = INPerrCat( + current->error, + INPmkTemp("sensetivity analysis unsupported\n")); return(0); } + err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "sense", & senseJob, ft_curckt->ci_specTask); - if(err) { - ft_sperror(err,"createSense"); - return(0);/* temporary */ + if (err) { + ft_sperror(err, "createSense"); + return(0); /* temporary */ } + save = which; - INPgetTok(&line,&token,1); - if(strcmp(token ,"ac")==0){ + + INPgetTok(&line, &token, 1); + + if (strcmp(token, "ac") == 0) { JOB *acJob; which = -1; - for(j=0;jnumAnalyses;j++) { - if(strcmp(ft_sim->analyses[j]->name,"AC")==0) { + for (j = 0; j < ft_sim->numAnalyses; j++) + if (strcmp(ft_sim->analyses[j]->name, "AC") == 0) { which = j; break; } - } - if(which == -1) { - current->error = INPerrCat(current->error,INPmkTemp( - "ac analysis unsupported\n")); - return(0);/* temporary */ + if (which == -1) { + current->error = INPerrCat + (current->error, + INPmkTemp("ac analysis unsupported\n")); + return(0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "acan", & acJob, ft_curckt->ci_specTask); - if(err) { - ft_sperror(err,"createAC"); /* or similar error message */ - return(0);/* temporary */ + if (err) { + ft_sperror(err, "createAC"); /* or similar error message */ + return(0); /* temporary */ } - INPgetTok(&line,&steptype,1); /* get DEC, OCT, or LIN */ - ptemp.iValue=1; - error = INPapName(ckt,which,acJob,steptype,&ptemp); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - parm=INPgetValue(ckt,&line,IF_INTEGER,tab);/* number of points*/ - error = INPapName(ckt,which,acJob,"numsteps",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* fstart */ - error = INPapName(ckt,which,acJob,"start",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* fstop */ - error = INPapName(ckt,which,acJob,"stop",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); + INPgetTok(&line, &steptype, 1); /* get DEC, OCT, or LIN */ + ptemp.iValue = 1; + error = INPapName(ckt, which, acJob, steptype, &ptemp); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_INTEGER, tab);/* number of points*/ + error = INPapName(ckt, which, acJob, "numsteps", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstart */ + error = INPapName(ckt, which, acJob, "start", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* fstop */ + error = INPapName(ckt, which, acJob, "stop", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); } - if(strcmp(token ,"op")==0){ + + if (strcmp(token, "op") == 0) { which = -1; - for(i=0;inumAnalyses;i++) { - if(strcmp(ft_sim->analyses[i]->name,"DCOP")==0) { - which=i; + for (i = 0; i < ft_sim->numAnalyses; i++) + if (strcmp(ft_sim->analyses[i]->name, "DCOP") == 0) { + which = i; break; } - } - if(which == -1) { - current->error = INPerrCat(current->error,INPmkTemp( - "DC operating point analysis unsupported\n")); - return(0);/* temporary */ + if (which == -1) { + current->error = INPerrCat + (current->error, + INPmkTemp("DC operating point analysis unsupported\n")); + return(0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "dcop", & opJob, ft_curckt->ci_specTask); - if(err) { - ft_sperror(err,"createOP"); /* or similar error message */ + if (err) { + ft_sperror(err, "createOP"); /* or similar error message */ return(0); } } - if(strcmp(token ,"dc")==0){ + + if (strcmp(token, "dc") == 0) { JOB *dcJob; /* .dc SRC1NAME Vstart1 Vstop1 Vinc1 [SRC2NAME Vstart2 */ /* Vstop2 Vinc2 */ which = -1; - for(i=0;inumAnalyses;i++) { - if(strcmp(ft_sim->analyses[i]->name,"DCTransfer")==0) { - which=i; + for (i = 0; i < ft_sim->numAnalyses; i++) + if (strcmp(ft_sim->analyses[i]->name, "DCTransfer") == 0) { + which = i; break; } - } - if(which==-1) { - current->error = INPerrCat(current->error,INPmkTemp( - "DC transfer curve analysis unsupported\n")); - return(0);/* temporary */ + if (which == -1) { + current->error = INPerrCat + (current->error, + INPmkTemp("DC transfer curve analysis unsupported\n")); + return(0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "DCtransfer", - &(dcJob),ft_curckt->ci_specTask); - if(err) { - ft_sperror(err,"createOP"); /* or similar error message */ + & dcJob, ft_curckt->ci_specTask); + if (err) { + ft_sperror(err, "createOP"); /* or similar error message */ return(0); } - INPgetTok(&line,&name,1); - INPinsert(&name,tab); - ptemp.uValue=name; - error = INPapName(ckt,which,dcJob,"name1",&ptemp); - if(error) current->error = INPerrCat(current->error,INPerror(error)); - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vstart1 */ - error = INPapName(ckt,which,dcJob,"start1",parm); - if(error) current->error = INPerrCat(current->error,INPerror(error)); - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vstop1 */ - error = INPapName(ckt,which,dcJob,"stop1",parm); - if(error) current->error = INPerrCat(current->error,INPerror(error)); - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vinc1 */ - error = INPapName(ckt,which,dcJob,"step1",parm); - if(error) current->error = INPerrCat(current->error,INPerror(error)); - if(*line) { - if(*line == 'd') goto next; - INPgetTok(&line,&name,1); - INPinsert(&name,tab); - ptemp.uValue=name; - error = INPapName(ckt,which,dcJob,"name2",&ptemp); - if(error) current->error= INPerrCat(current->error,INPerror(error)); - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vstart1 */ - error = INPapName(ckt,which,dcJob,"start2",parm); - if(error) current->error= INPerrCat(current->error,INPerror(error)); - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vstop1 */ - error = INPapName(ckt,which,dcJob,"stop2",parm); - if(error) current->error= INPerrCat(current->error,INPerror(error)); - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vinc1 */ - error = INPapName(ckt,which,dcJob,"step2",parm); - if(error) current->error= INPerrCat(current->error,INPerror(error)); + INPgetTok(&line, &name, 1); + INPinsert(&name, tab); + ptemp.uValue = name; + error = INPapName(ckt, which, dcJob, "name1", &ptemp); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstart1 */ + error = INPapName(ckt, which, dcJob, "start1", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstop1 */ + error = INPapName(ckt, which, dcJob, "stop1", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vinc1 */ + error = INPapName(ckt, which, dcJob, "step1", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + if (*line) { + if (*line == 'd') + goto next; + INPgetTok(&line, &name, 1); + INPinsert(&name, tab); + ptemp.uValue = name; + error = INPapName(ckt, which, dcJob, "name2", &ptemp); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstart1 */ + error = INPapName(ckt, which, dcJob, "start2", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstop1 */ + error = INPapName(ckt, which, dcJob, "stop2", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vinc1 */ + error = INPapName(ckt, which, dcJob, "step2", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); } } - if(strcmp(token ,"tran")==0){ + + if (strcmp(token, "tran") == 0) { JOB *tranJob; which = -1; - for(j=0;jnumAnalyses;j++) { - if(strcmp(ft_sim->analyses[j]->name,"TRAN")==0) { + for (j = 0; j < ft_sim->numAnalyses; j++) + if (strcmp(ft_sim->analyses[j]->name, "TRAN") == 0) { which = j; break; } - } - if(which == -1) { - current->error = INPerrCat(current->error,INPmkTemp( - "transient analysis unsupported\n")); - return(0);/* temporary */ + if (which == -1) { + current->error = INPerrCat + (current->error, + INPmkTemp("transient analysis unsupported\n")); + return(0); /* temporary */ } err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "tranan", & tranJob, ft_curckt->ci_specTask); - if(err) { - ft_sperror(err,"createTRAN"); + if (err) { + ft_sperror(err, "createTRAN"); return(0); } - parm=INPgetValue(ckt,&line,IF_REAL,tab);/* Tstep */ - error = INPapName(ckt,which,tranJob,"tstep",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* Tstop*/ - error = INPapName(ckt,which,tranJob,"tstop",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - if(*line){ - if(*line == 'd') goto next; - if(*line == 'u') goto uic; - parm=INPgetValue(ckt,&line,IF_REAL,tab);/* Tstart */ - error = INPapName(ckt,which,tranJob,"tstart",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - if(*line == 'u') goto uic; - parm=INPgetValue(ckt,&line,IF_REAL,tab);/* Tmax */ - error = INPapName(ckt,which,tranJob,"tmax",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); -uic: - if(*line == 'u') { - INPgetTok(&line,&name,1); - if(strcmp(name,"uic")==0) { + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tstep */ + error = INPapName(ckt, which, tranJob, "tstep", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tstop*/ + error = INPapName(ckt, which, tranJob, "tstop", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + if (*line) { + if (*line == 'd') + goto next; + if (*line == 'u') + goto uic; + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tstart */ + error = INPapName(ckt, which, tranJob, "tstart", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + if (*line == 'u') + goto uic; + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Tmax */ + error = INPapName(ckt, which, tranJob, "tmax", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + uic: + if (*line == 'u') { + INPgetTok(&line, &name, 1); + if (strcmp(name, "uic") == 0) { ptemp.iValue = 1; - error = INPapName(ckt,which,tranJob,"tstart",&ptemp); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - + error = INPapName(ckt, which, tranJob, "tstart", &ptemp); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); } } - } } @@ -287,99 +307,96 @@ uic: /* *********************** */ /* PSS - Spertica - 100910 */ /* *********************** */ - if(strcmp(token ,"pss")==0){ + if (strcmp(token, "pss") == 0) { JOB *pssJob; which = -1; - for(j=0;jnumAnalyses;j++) { - if(strcmp(ft_sim->analyses[j]->name,"PSS")==0) { + for (j = 0; j < ft_sim->numAnalyses; j++) + if (strcmp(ft_sim->analyses[j]->name, "PSS") == 0) { which = j; break; } - } - if(which == -1) { - current->error = INPerrCat(current->error,INPmkTemp( - "periodic steady state analysis unsupported\n")); - return(0);/* temporary */ + if (which == -1) { + current->error = INPerrCat + (current->error, + INPmkTemp("periodic steady state analysis unsupported\n")); + return(0); /* temporary */ } - err = ft_sim->newAnalysis (ft_curckt->ci_ckt,which, "pssan", + err = ft_sim->newAnalysis (ft_curckt->ci_ckt, which, "pssan", & pssJob, ft_curckt->ci_specTask); - if(err) { - ft_sperror(err,"createPSS"); + if (err) { + ft_sperror(err, "createPSS"); return(0); } - parm=INPgetValue(ckt,&line,IF_REAL,tab);/* Guessed Frequency */ - error = INPapName(ckt,which,pssJob,"fguess",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - - parm = INPgetValue(ckt,&line,IF_REAL,tab); /* Stabilization time */ - error = INPapName(ckt,which,pssJob,"stabtime",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - - parm = INPgetValue(ckt,&line,IF_INTEGER,tab); /* PSS points */ - error = INPapName(ckt,which,pssJob,"points",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); - - parm = INPgetValue(ckt,&line,IF_INTEGER,tab); /* PSS points */ - error = INPapName(ckt,which,pssJob,"harmonics",parm); - if(error) current->error = INPerrCat(current->error, - INPerror(error)); + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Guessed Frequency */ + error = INPapName(ckt, which, pssJob, "fguess", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + + parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Stabilization time */ + error = INPapName(ckt, which, pssJob, "stabtime", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + + parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* PSS points */ + error = INPapName(ckt, which, pssJob, "points", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + + parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* PSS points */ + error = INPapName(ckt, which, pssJob, "harmonics", parm); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); } #endif -next: - while(*line) { /* read the entire line */ - if(flag){ - INPgetTok(&line,&token,1); - } - else{ +next: + while (*line) { /* read the entire line */ + + if (flag) + INPgetTok(&line, &token, 1); + else flag = 1; - } - for(i=0;ianalyses[save]->numParms;i++) { + + for (i = 0; i < ft_sim->analyses[save]->numParms; i++) { /* find the parameter */ - if(0==strcmp(token , - ft_sim->analyses[save]->analysisParms[i]. - keyword) ){ + if (0 == strcmp(token, ft_sim->analyses[save]->analysisParms[i].keyword)) { /* found it, analysis which, parameter i */ - if(ft_sim->analyses[save]->analysisParms[i]. - dataType & IF_FLAG) { + if (ft_sim->analyses[save]->analysisParms[i].dataType & IF_FLAG) { /* one of the keywords! */ ptemp.iValue = 1; - error = ft_sim->setAnalysisParm (ckt, - senseJob, ft_sim->analyses[save]-> - analysisParms[i].id, &ptemp, NULL); - if(error) current->error = INPerrCat( - current->error, INPerror(error)); - } - else { - parm = INPgetValue(ckt,&line,ft_sim-> - analyses[save]->analysisParms[i]. - dataType,tab); - error = ft_sim->setAnalysisParm (ckt, - senseJob, ft_sim->analyses[save]-> - analysisParms[i].id, parm, NULL); - if(error) current->error = INPerrCat( - current->error, INPerror(error)); - + error = ft_sim->setAnalysisParm + (ckt, senseJob, + ft_sim->analyses[save]->analysisParms[i].id, &ptemp, NULL); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); + } else { + parm = INPgetValue + (ckt, &line, + ft_sim->analyses[save]->analysisParms[i].dataType, tab); + error = ft_sim->setAnalysisParm + (ckt, senseJob, + ft_sim->analyses[save]->analysisParms[i].id, parm, NULL); + if (error) + current->error = INPerrCat(current->error, INPerror(error)); } break; } } - if(i==ft_sim->analyses[save]->numParms) { + + if (i == ft_sim->analyses[save]->numParms) { /* didn't find it! */ - current->error = INPerrCat(current->error,INPmkTemp( - " Error: unknown parameter on .sens - ignored \n")); + current->error = INPerrCat + (current->error, + INPmkTemp(" Error: unknown parameter on .sens - ignored \n")); } } - - if((err = ft_sim->doAnalyses (ckt, 1, ft_curckt->ci_curTask)) != OK) { + if ((err = ft_sim->doAnalyses (ckt, 1, ft_curckt->ci_curTask)) != OK) { ft_sperror(err, "doAnalyses"); - return(0);/* temporary */ + return(0); /* temporary */ } + return(0); } diff --git a/src/spicelib/analysis/cktntask.c b/src/spicelib/analysis/cktntask.c index 01b8c9350..19f2b4aa3 100644 --- a/src/spicelib/analysis/cktntask.c +++ b/src/spicelib/analysis/cktntask.c @@ -3,8 +3,6 @@ Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles Modified: 2000 AlansFixes **********/ -/* - */ #include "ngspice/ngspice.h" #include "ngspice/tskdefs.h" @@ -13,110 +11,115 @@ Modified: 2000 AlansFixes #include "ngspice/iferrmsg.h" -/* ARGSUSED */ -/* -int -CKTnewTask(CKTcircuit *ckt, void **taskPtr, IFuid taskName) - */ +/* CDHW See notes in spiceif.c for an explanation of these fixes CDHW */ + int CKTnewTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName, TSKtask **defPtr) -/*CDHW See notes in spiceif.c for an explanation of these fixes CDHW*/ { - TSKtask *tsk, *def=NULL; + TSKtask *tsk, *def = NULL; NG_IGNORE(ckt); *taskPtr = TMALLOC(TSKtask, 1); - if(*taskPtr==NULL) return(E_NOMEM); + if (*taskPtr == NULL) + return(E_NOMEM); + tsk = *taskPtr; tsk->TSKname = taskName; + #if (1) /*CDHW*/ - if(defPtr) - def = *defPtr; - if ((strcmp(taskName,"special")==0) && def ) { - /* create options by copying the circuit's defaults */ - tsk->TSKtemp = def->TSKtemp; - tsk->TSKnomTemp = def->TSKnomTemp; - tsk->TSKmaxOrder = def->TSKmaxOrder; - tsk->TSKintegrateMethod = def->TSKintegrateMethod; - tsk->TSKbypass = def->TSKbypass; - tsk->TSKdcMaxIter = def->TSKdcMaxIter; - tsk->TSKdcTrcvMaxIter = def->TSKdcTrcvMaxIter; - tsk->TSKtranMaxIter = def->TSKtranMaxIter; - tsk->TSKnumSrcSteps = def->TSKnumSrcSteps; - tsk->TSKnumGminSteps = def->TSKnumGminSteps; - tsk->TSKgminFactor = def->TSKgminFactor; - /* minBreak */ - tsk->TSKabstol = def->TSKabstol; - tsk->TSKpivotAbsTol = def->TSKpivotAbsTol; - tsk->TSKpivotRelTol = def->TSKpivotRelTol; - tsk->TSKreltol = def->TSKreltol; - tsk->TSKchgtol = def->TSKchgtol; - tsk->TSKvoltTol = def->TSKvoltTol; - tsk->TSKgmin = def->TSKgmin; - tsk->TSKgshunt = def->TSKgshunt; + + if(defPtr) + def = *defPtr; + + if ((strcmp(taskName,"special") == 0) && def) { + /* create options by copying the circuit's defaults */ + tsk->TSKtemp = def->TSKtemp; + tsk->TSKnomTemp = def->TSKnomTemp; + tsk->TSKmaxOrder = def->TSKmaxOrder; + tsk->TSKintegrateMethod = def->TSKintegrateMethod; + tsk->TSKbypass = def->TSKbypass; + tsk->TSKdcMaxIter = def->TSKdcMaxIter; + tsk->TSKdcTrcvMaxIter = def->TSKdcTrcvMaxIter; + tsk->TSKtranMaxIter = def->TSKtranMaxIter; + tsk->TSKnumSrcSteps = def->TSKnumSrcSteps; + tsk->TSKnumGminSteps = def->TSKnumGminSteps; + tsk->TSKgminFactor = def->TSKgminFactor; + /* minBreak */ + tsk->TSKabstol = def->TSKabstol; + tsk->TSKpivotAbsTol = def->TSKpivotAbsTol; + tsk->TSKpivotRelTol = def->TSKpivotRelTol; + tsk->TSKreltol = def->TSKreltol; + tsk->TSKchgtol = def->TSKchgtol; + tsk->TSKvoltTol = def->TSKvoltTol; + tsk->TSKgmin = def->TSKgmin; + tsk->TSKgshunt = def->TSKgshunt; /* delmin */ - tsk->TSKtrtol = def->TSKtrtol; - tsk->TSKdefaultMosM = def->TSKdefaultMosM; - tsk->TSKdefaultMosL = def->TSKdefaultMosL; - tsk->TSKdefaultMosW = def->TSKdefaultMosW; - tsk->TSKdefaultMosAD = def->TSKdefaultMosAD; - tsk->TSKdefaultMosAS = def->TSKdefaultMosAS; - /* fixLimit */ - tsk->TSKnoOpIter= def->TSKnoOpIter; - tsk->TSKtryToCompact = def->TSKtryToCompact; - tsk->TSKbadMos3 = def->TSKbadMos3; - tsk->TSKkeepOpInfo = def->TSKkeepOpInfo; - tsk->TSKcopyNodesets = def->TSKcopyNodesets; - tsk->TSKnodeDamping = def->TSKnodeDamping; - tsk->TSKabsDv = def->TSKabsDv; - tsk->TSKrelDv = def->TSKrelDv; + tsk->TSKtrtol = def->TSKtrtol; + tsk->TSKdefaultMosM = def->TSKdefaultMosM; + tsk->TSKdefaultMosL = def->TSKdefaultMosL; + tsk->TSKdefaultMosW = def->TSKdefaultMosW; + tsk->TSKdefaultMosAD = def->TSKdefaultMosAD; + tsk->TSKdefaultMosAS = def->TSKdefaultMosAS; + /* fixLimit */ + tsk->TSKnoOpIter = def->TSKnoOpIter; + tsk->TSKtryToCompact = def->TSKtryToCompact; + tsk->TSKbadMos3 = def->TSKbadMos3; + tsk->TSKkeepOpInfo = def->TSKkeepOpInfo; + tsk->TSKcopyNodesets = def->TSKcopyNodesets; + tsk->TSKnodeDamping = def->TSKnodeDamping; + tsk->TSKabsDv = def->TSKabsDv; + tsk->TSKrelDv = def->TSKrelDv; #ifdef NEWTRUNC - tsk->TSKlteReltol = def->TSKlteReltol; - tsk->TSKlteAbstol = def->TSKlteAbstol; -#endif /* NEWTRUNC */ - } else { - /* use the application defaults */ -#endif /*CDHW*/ - tsk->TSKgmin = 1e-12; - tsk->TSKgshunt = 0; - tsk->TSKabstol = 1e-12; - tsk->TSKreltol = 1e-3; - tsk->TSKchgtol = 1e-14; - tsk->TSKvoltTol = 1e-6; + tsk->TSKlteReltol = def->TSKlteReltol; + tsk->TSKlteAbstol = def->TSKlteAbstol; +#endif + + } else { +#endif /*CDHW*/ + + /* use the application defaults */ + tsk->TSKgmin = 1e-12; + tsk->TSKgshunt = 0; + tsk->TSKabstol = 1e-12; + tsk->TSKreltol = 1e-3; + tsk->TSKchgtol = 1e-14; + tsk->TSKvoltTol = 1e-6; #ifdef NEWTRUNC - tsk->TSKlteReltol = 1e-3; - tsk->TSKlteAbstol = 1e-6; -#endif /* NEWTRUNC */ - tsk->TSKtrtol = 7; - tsk->TSKbypass = 0; - tsk->TSKtranMaxIter = 10; - tsk->TSKdcMaxIter = 100; - tsk->TSKdcTrcvMaxIter = 50; + tsk->TSKlteReltol = 1e-3; + tsk->TSKlteAbstol = 1e-6; +#endif + tsk->TSKtrtol = 7; + tsk->TSKbypass = 0; + tsk->TSKtranMaxIter = 10; + tsk->TSKdcMaxIter = 100; + tsk->TSKdcTrcvMaxIter = 50; tsk->TSKintegrateMethod = TRAPEZOIDAL; - tsk->TSKmaxOrder = 2; - tsk->TSKnumSrcSteps = 1; - tsk->TSKnumGminSteps = 1; - tsk->TSKgminFactor = 10; - tsk->TSKpivotAbsTol = 1e-13; - tsk->TSKpivotRelTol = 1e-3; - tsk->TSKtemp = 300.15; - tsk->TSKnomTemp = 300.15; - tsk->TSKdefaultMosM = 1; - tsk->TSKdefaultMosL = 1e-4; - tsk->TSKdefaultMosW = 1e-4; - tsk->TSKdefaultMosAD = 0; - tsk->TSKdefaultMosAS = 0; - tsk->TSKnoOpIter=0; - tsk->TSKtryToCompact=0; - tsk->TSKbadMos3=0; - tsk->TSKkeepOpInfo=0; - tsk->TSKcopyNodesets=0; - tsk->TSKnodeDamping=0; - tsk->TSKabsDv=0.5; - tsk->TSKrelDv=2.0; + tsk->TSKmaxOrder = 2; + tsk->TSKnumSrcSteps = 1; + tsk->TSKnumGminSteps = 1; + tsk->TSKgminFactor = 10; + tsk->TSKpivotAbsTol = 1e-13; + tsk->TSKpivotRelTol = 1e-3; + tsk->TSKtemp = 300.15; + tsk->TSKnomTemp = 300.15; + tsk->TSKdefaultMosM = 1; + tsk->TSKdefaultMosL = 1e-4; + tsk->TSKdefaultMosW = 1e-4; + tsk->TSKdefaultMosAD = 0; + tsk->TSKdefaultMosAS = 0; + tsk->TSKnoOpIter = 0; + tsk->TSKtryToCompact = 0; + tsk->TSKbadMos3 = 0; + tsk->TSKkeepOpInfo = 0; + tsk->TSKcopyNodesets = 0; + tsk->TSKnodeDamping = 0; + tsk->TSKabsDv = 0.5; + tsk->TSKrelDv = 2.0; + #if (1) /*CDHW*/ - } -#endif + } +#endif + return(OK); }