diff --git a/src/frontend/device.c b/src/frontend/device.c index b6af27493..d9b21dec5 100644 --- a/src/frontend/device.c +++ b/src/frontend/device.c @@ -854,7 +854,7 @@ listparam(wordlist *p, dgen *dg) else fprintf(cp_out, "%*.*s", LEFT_WIDTH, LEFT_WIDTH, " "); k = dgen_for_n(dg, count, printvals_old, (plist + i), j); - printf("\n"); + fprintf(cp_out,"\n"); j += 1; } while (k > 0); } else { diff --git a/src/frontend/inp.c b/src/frontend/inp.c index 3a1a22300..d59695a18 100644 --- a/src/frontend/inp.c +++ b/src/frontend/inp.c @@ -1447,17 +1447,20 @@ inp_dodeck( else if (dd->linenum_orig == 0) { fprintf(stderr, "Error on line:\n %s\n%s\n", dd->line, dd->error); + if (ft_stricterror) + controlled_exit(EXIT_BAD); have_err = TRUE; return 1; } else { fprintf(stderr, "Error on line %d or its substitute:\n %s\n%s\n", dd->linenum_orig, dd->line, dd->error); + if (ft_stricterror) + controlled_exit(EXIT_BAD); have_err = TRUE; return 1; } - if (ft_stricterror) - controlled_exit(EXIT_BAD); + } else { fprintf(stderr, "%s\n", p); } @@ -1941,6 +1944,8 @@ com_source(wordlist *wl) Infile_Path = ngdirname(firstfile); if (inp_spsource(fp, FALSE, tempfile ? NULL : wl->wl_word, FALSE) != 0) { fprintf(stderr, " Simulation interrupted due to error!\n\n"); + if (ft_stricterror) + controlled_exit(EXIT_FAILURE); } } diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 8f96eee84..f55771b7b 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -1115,6 +1115,8 @@ struct card *inp_readall(FILE *fp, const char *dir_name, if (inp_poly_2g6_compat(working)) { inp_rem_levels(root); line_free_x(cc, TRUE); + if (ft_stricterror) + controlled_exit(EXIT_BAD); return NULL; } #else @@ -1393,6 +1395,8 @@ struct inp_read_t inp_read( FILE *fp, int call_depth, const char *dir_name, if (!y_resolved) { fprintf(cp_err, "Error: Could not find include file %s\n", y); + if (ft_stricterror) + controlled_exit(EXIT_FAILURE); rv.line_number = line_number; rv.cc = NULL; return rv; @@ -5849,6 +5853,8 @@ static void inp_compat(struct card *card) (firstno && !secondno)) { fprintf(stderr, "Error: Missing token in %s\n", curr_line); + if (ft_stricterror) + controlled_exit(EXIT_FAILURE); break; } else if (!firstno && !secondno) @@ -6060,6 +6066,8 @@ static void inp_compat(struct card *card) if ((!firstno && secondno) || (firstno && !secondno)) { fprintf(stderr, "Error: Missing token in %s\n", curr_line); + if (ft_stricterror) + controlled_exit(EXIT_BAD); break; } else if (!firstno && !secondno) @@ -8080,6 +8088,8 @@ static int inp_vdmos_model(struct card *deck) " in VDMOS instance line with thermal model\n" " %s\n", card->line); fprintf(stderr, "No circuit loaded!\n"); + if (ft_stricterror) + controlled_exit(EXIT_BAD); return 1; } /* next token is the model name of instance */ @@ -8101,6 +8111,8 @@ static int inp_vdmos_model(struct card *deck) " %s\n", card->line); fprintf(stderr, "No circuit loaded!\n"); tfree(instmodname); + if (ft_stricterror) + controlled_exit(EXIT_BAD); return 1; } } @@ -9134,6 +9146,8 @@ static int inp_poly_2g6_compat(struct card* deck) { if (!curr_line) { fprintf(stderr, "Error: bad syntax of line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); + if (ft_stricterror) + controlled_exit(EXIT_BAD); return 1; } /* exclude all of the following fourth tokens */ @@ -9171,6 +9185,8 @@ static int inp_poly_2g6_compat(struct card* deck) { if (!curr_line) { fprintf(stderr, "Error: not enough parameters in line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); + if (ft_stricterror) + controlled_exit(EXIT_BAD); return 1; } /* The next token may be a simple text token or an expression @@ -9184,6 +9200,8 @@ static int inp_poly_2g6_compat(struct card* deck) { if (!curr_line) { fprintf(stderr, "Error: not enough parameters in line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); + if (ft_stricterror) + controlled_exit(EXIT_BAD); return 1; } if (*curr_line == '\0') @@ -9195,6 +9213,8 @@ static int inp_poly_2g6_compat(struct card* deck) { if (!curr_line) { fprintf(stderr, "Error: not enough parameters in line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); + if (ft_stricterror) + controlled_exit(EXIT_BAD); return 1; } /* The next token may be a simple text token or an expression @@ -9208,6 +9228,8 @@ static int inp_poly_2g6_compat(struct card* deck) { if (!curr_line) { fprintf(stderr, "Error: not enough parameters in line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); + if (ft_stricterror) + controlled_exit(EXIT_BAD); return 1; } if (*curr_line == '\0') diff --git a/src/main.c b/src/main.c index 0dc5db052..6b3f2cf36 100644 --- a/src/main.c +++ b/src/main.c @@ -1461,8 +1461,8 @@ int main(int argc, char **argv) /* Copy the input file name for becoming another file search path */ if (inp_spsource(tempfile, FALSE, dname, FALSE) != 0) { fprintf(stderr, " Simulation interrupted due to error!\n\n"); - if (oflag && !cp_getvar("interactive", CP_BOOL, NULL, 0)) - exit(EXIT_BAD); + if (ft_stricterror || (oflag && !cp_getvar("interactive", CP_BOOL, NULL, 0))) + sp_shutdown(EXIT_BAD); } tfree(dname); gotone = TRUE; @@ -1477,6 +1477,8 @@ int main(int argc, char **argv) if (!gotone && ft_batchmode) { if (inp_spsource(circuit_file, FALSE, NULL, FALSE) != 0) { fprintf(stderr, " Simulation interrupted due to error!\n\n"); + if (ft_stricterror) + sp_shutdown(EXIT_BAD); } } diff --git a/src/spicelib/devices/dio/dio.c b/src/spicelib/devices/dio/dio.c index 663af176c..947230e5a 100644 --- a/src/spicelib/devices/dio/dio.c +++ b/src/spicelib/devices/dio/dio.c @@ -104,6 +104,7 @@ IFparm DIOmPTable[] = { /* model parameters */ IOP( "fc", DIO_MOD_FC, IF_REAL, "Forward bias junction fit parameter"), IOP( "fcs", DIO_MOD_FCS, IF_REAL, "Forward bias sidewall junction fit parameter"), IOP( "bv", DIO_MOD_BV, IF_REAL, "Reverse breakdown voltage"), + IOPR( "vb", DIO_MOD_BV, IF_REAL, "Reverse breakdown voltage"), IOP( "ibv", DIO_MOD_IBV, IF_REAL, "Current at reverse breakdown voltage"), IOPR( "ib", DIO_MOD_IBV, IF_REAL, "Current at reverse breakdown voltage"), IOP( "tcv", DIO_MOD_TCV, IF_REAL, "Reverse breakdown voltage temperature coefficient"), diff --git a/src/spinit.in b/src/spinit.in index f1ca1c285..f9bfde40e 100644 --- a/src/spinit.in +++ b/src/spinit.in @@ -36,7 +36,7 @@ if $?osdi_enabled osdi @pkglibdir@/BSIMBULK107.osdi osdi @pkglibdir@/BSIMCMG.osdi osdi @pkglibdir@/HICUMl0-2.0.osdi - osdi @pkglibdir@/psp103.osdi + osdi @pkglibdir@/psp103_nqs.osdi osdi @pkglibdir@/r2_cmc.osdi osdi @pkglibdir@/vbic_4T_et_cf.osdi