diff --git a/src/xspice/icm/analog/file_source/cfunc.mod b/src/xspice/icm/analog/file_source/cfunc.mod index dc52859bb..3085a9269 100644 --- a/src/xspice/icm/analog/file_source/cfunc.mod +++ b/src/xspice/icm/analog/file_source/cfunc.mod @@ -207,9 +207,6 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc. loc->indata->actpointer = 0; loc->indata->size = stepsize; - loc->timeinterval[0] = loc->timeinterval[1] = PARAM_NULL(timeoffset) ? 0.0 : PARAM(timeoffset); - for (i = 0; i < size; ++i) - loc->amplinterval[2 * i] = loc->amplinterval[2 * i + 1] = PARAM_NULL(amploffset) ? 0.0 : PARAM(amploffset[i]); /* open the file */ loc->state->fp = fopen_with_path(PARAM(file), "r"); loc->state->atend = 0; @@ -246,7 +243,7 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc. /* read the time channel; update the time difference */ while (*cp && isspace_c(*cp)) ++cp; - if (*cp == '#' || *cp == ';') { + if (*cp == '*' || *cp == '#' || *cp == ';') { free(cpdel); continue; } @@ -299,8 +296,9 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc. fclose(loc->state->fp); loc->state->fp = NULL; } - /* point to the next time */ - loc->indata->actpointer = stepsize; + /* set the start time data */ + loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer]; + loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize]; } loc = STATIC_VAR (locdata); @@ -309,13 +307,12 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc. * If TIME steps backward, for example due to a second invocation of a 'tran' analysis * step back in datavec[loc->indata->actpointer] . */ - if (TIME < loc->timeinterval[0]) { while (TIME < loc->indata->datavec[loc->indata->actpointer] && loc->indata->actpointer >= 0) loc->indata->actpointer -= stepsize; loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer]; + loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize]; } - loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize]; while (TIME > loc->timeinterval[1]) { loc->indata->actpointer += stepsize; @@ -323,13 +320,13 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc. /* we are done */ return; } - loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer]; + loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize]; + loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer]; } - loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer - stepsize]; for (j = 0; j < size; j++) { - loc->amplinterval[2 * j] = loc->indata->datavec[loc->indata->actpointer - stepsize + j + 1]; - loc->amplinterval[2 * j + 1] = loc->indata->datavec[loc->indata->actpointer + j + 1]; + loc->amplinterval[2 * j] = loc->indata->datavec[loc->indata->actpointer + j + 1]; + loc->amplinterval[2 * j + 1] = loc->indata->datavec[loc->indata->actpointer + stepsize + j + 1]; } if (loc->timeinterval[0] <= TIME && TIME <= loc->timeinterval[1]) {