From c8e1e5c9394e55c04474ac78a2ff155e3acfce33 Mon Sep 17 00:00:00 2001 From: pnenzi Date: Tue, 12 Sep 2000 19:02:26 +0000 Subject: [PATCH] I have reverted to the old (non AlansFixes) version outif.c and changed again (as Alan suggested) the if(FLASE) to if(terse). The problems with vectors are now disappeared. --- src/frontend/dotcards.c | 2 +- src/frontend/outitf.c | 629 +++++++++------------------------------- 2 files changed, 142 insertions(+), 489 deletions(-) diff --git a/src/frontend/dotcards.c b/src/frontend/dotcards.c index 416174d0a..7ad0d4323 100644 --- a/src/frontend/dotcards.c +++ b/src/frontend/dotcards.c @@ -182,7 +182,7 @@ ft_cktcoms(bool terse) /* Listing */ if (ft_listprint) { - if (FALSE) + if (terse) fprintf(cp_err, ".options: no listing, rawfile was generated.\n"); else inp_list(cp_out, ft_curckt->ci_deck, ft_curckt->ci_options, diff --git a/src/frontend/outitf.c b/src/frontend/outitf.c index 93023c983..ed9fda45b 100644 --- a/src/frontend/outitf.c +++ b/src/frontend/outitf.c @@ -1,7 +1,6 @@ /********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1988 Wayne A. Christopher, U. C. Berkeley CAD Group -Modified: 2000 AlansFixes **********/ /* @@ -21,23 +20,19 @@ Modified: 2000 AlansFixes #include "ifsim.h" #include "jobdefs.h" #include "iferrmsg.h" + #include "circuits.h" #include "outitf.h" #include "variable.h" -#include -#include -#include "cktdefs.h" - extern void gr_end_iplot(void); extern char *spice_analysis_get_name(int index); extern char *spice_analysis_get_description(int index); - /* static declarations */ static int beginPlot(void *analysisPtr, void *circuitPtr, char *cktName, char *analName, - char *refName, int refType, int numNames, char **dataNames, int dataType, - bool windowed, runDesc **runp); + char *refName, int refType, int numNames, char **dataNames, int dataType, + bool windowed, runDesc **runp); static int addDataDesc(runDesc *run, char *name, int type, int ind); static int addSpecialDesc(runDesc *run, char *name, char *devname, char *param, int depind); static void fileInit(runDesc *run); @@ -61,13 +56,10 @@ static void freeRun(runDesc *run); #define DOUBLE_PRECISION 15 -static clock_t lastclock, currclock; -static float *rowbuf; -static int column, rowbuflen; + static bool shouldstop = FALSE; /* Tell simulator to stop next time it asks. */ -static bool printinfo = FALSE; /* Print informational "error messages". */ - +static bool printinfo = FALSE; /* Print informational "error messages". */ /* The two "begin plot" routines share all their internals... */ @@ -118,14 +110,12 @@ beginPlot(void *analysisPtr, void *circuitPtr, char *cktName, char *analName, ch int numsaves; int i, j, depind; char namebuf[BSIZE_SP], parambuf[BSIZE_SP], depbuf[BSIZE_SP]; - char *ch, tmpname[BSIZE_SP]; - bool saveall = TRUE; - bool savealli = FALSE; + bool saveall = TRUE; char *an_name; /* Check to see if we want to print informational data. */ if (cp_getvar("printinfo", VT_BOOL, (char *) &printinfo)) - fprintf(cp_err, "(debug printing enabled)\n"); + fprintf(cp_err, "(debug printing enabled)\n"); *runp = run = alloc(struct runDesc); @@ -150,23 +140,17 @@ beginPlot(void *analysisPtr, void *circuitPtr, char *cktName, char *analName, ch saveall = FALSE; for (i = 0; i < numsaves; i++) { if (saves[i].analysis && !cieq(saves[i].analysis, an_name)) { - /* ignore this one this time around */ - savesused[i] = TRUE; - continue; - } - if (cieq(saves[i].name, "all") || cieq(saves[i].name, "allv")) { + /* ignore this one this time around */ + savesused[i] = TRUE; + continue; + } + if (cieq(saves[i].name, "all")) { saveall = TRUE; savesused[i] = TRUE; - saves[i].used = 1; + saves[i].used = 1; continue; } - if (cieq(saves[i].name, "alli")) { - savealli = TRUE; - savesused[i] = TRUE; - saves[i].used = 1; - continue; - } - } + } } /* Pass 0. */ @@ -175,7 +159,7 @@ beginPlot(void *analysisPtr, void *circuitPtr, char *cktName, char *analName, ch for (i = 0; i < numsaves; i++) if (!savesused[i] && name_eq(saves[i].name, refName)) { savesused[i] = TRUE; - saves[i].used = 1; + saves[i].used = 1; } } else { run->refIndex = -1; @@ -185,95 +169,32 @@ beginPlot(void *analysisPtr, void *circuitPtr, char *cktName, char *analName, ch /* Pass 1. */ if (numsaves && !saveall) { for (i = 0; i < numsaves; i++) { - if (!savesused[i]) { - for (j = 0; j < numNames; j++) { - if (name_eq(saves[i].name, dataNames[j])) { - addDataDesc(run, dataNames[j], dataType, j); - savesused[i] = TRUE; - saves[i].used = 1; - break; - } - } - } + if (!savesused[i]) { + for (j = 0; j < numNames; j++) { + if (name_eq(saves[i].name, dataNames[j])) { + addDataDesc(run, dataNames[j], dataType, j); + savesused[i] = TRUE; + saves[i].used = 1; + break; + } + } + } } } else { for (i = 0; i < numNames; i++) if (!refName || !name_eq(dataNames[i], refName)) { - if (!strstr(dataNames[i], "#internal") && - !strstr(dataNames[i], "#source") && - !strstr(dataNames[i], "#drain") && - !strstr(dataNames[i], "#collector") && - !strstr(dataNames[i], "#emitter") && - !strstr(dataNames[i], "#base")) { - } + addDataDesc(run, dataNames[i], dataType, i); } } - /* Pass 1 and a bit. */ - if (savealli) { - depind=0; - for (i = 0; i < numNames; i++) { - if (strstr(dataNames[i], "#internal") || - strstr(dataNames[i], "#source") || - strstr(dataNames[i], "#drain") || - strstr(dataNames[i], "#collector") || - strstr(dataNames[i], "#emitter") || - strstr(dataNames[i], "#base")) { - tmpname[0]='@'; - tmpname[1]='\0'; - strncat(tmpname, dataNames[i], BSIZE_SP-1); - ch=strchr(tmpname, '#'); - - if (strstr(ch, "#collector")!=NULL) { - strcpy(ch, "[ic]"); - } else if (strstr(ch, "#base")!=NULL) { - strcpy(ch, "[ib]"); - } else if (strstr(ch, "#emitter")!=NULL) { - strcpy(ch, "[ie]"); - if (parseSpecial(tmpname, namebuf, parambuf, depbuf)) { - addSpecialDesc(run, tmpname, namebuf, parambuf, depind); - }; - strcpy(ch, "[is]"); - } else if (strstr(ch, "#drain")!=NULL) { - strcpy(ch, "[id]"); - if (parseSpecial(tmpname, namebuf, parambuf, depbuf)) { - addSpecialDesc(run, tmpname, namebuf, parambuf, depind); - }; - strcpy(ch, "[ig]"); - } else if (strstr(ch, "#source")!=NULL) { - strcpy(ch, "[is]"); - if (parseSpecial(tmpname, namebuf, parambuf, depbuf)) { - addSpecialDesc(run, tmpname, namebuf, parambuf, depind); - }; - strcpy(ch, "[ib]"); - } else - if ((strstr(ch, "#internal")!=NULL)&&(tmpname[1]=='d')) { - strcpy(ch, "[id]"); - } else { - fprintf(cp_err, - "Debug: could output current for %s\n", tmpname); - continue; - }; - if (parseSpecial(tmpname, namebuf, parambuf, depbuf)) { - if (*depbuf) { fprintf( stderr, - "Warning : unexpected dependant variable on %s\n", tmpname); - } else { - addSpecialDesc(run, tmpname, namebuf, parambuf, depind); - } - } - } - } - } - - /* Pass 2. */ for (i = 0; i < numsaves; i++) { if (savesused[i]) continue; if (!parseSpecial(saves[i].name, namebuf, parambuf, depbuf)) { - if (saves[i].analysis) - fprintf(cp_err, "Warning: can't parse '%s': ignored\n", - saves[i].name); + if (saves[i].analysis) + fprintf(cp_err, "Warning: can't parse '%s': ignored\n", + saves[i].name); continue; } /* Now, if there's a dep variable, do we already have it? */ @@ -294,7 +215,7 @@ beginPlot(void *analysisPtr, void *circuitPtr, char *cktName, char *analName, ch } addDataDesc(run, dataNames[j], dataType, j); savesused[i] = TRUE; - saves[i].used = 1; + saves[i].used = 1; depind = j; } else depind = run->data[j].outIndex; @@ -303,22 +224,22 @@ beginPlot(void *analysisPtr, void *circuitPtr, char *cktName, char *analName, ch } if (numsaves) { - for (i = 0; i < numsaves; i++) { - tfree(saves[i].analysis); - tfree(saves[i].name); - } + for (i = 0; i < numsaves; i++) { + tfree(saves[i].analysis); + tfree(saves[i].name); + } tfree(savesused); } if (numNames - && (run->numData == 1 - && (run->refIndex != -1 - || run->numData == 0) - && run->refIndex == -1)) + && (run->numData == 1 + && (run->refIndex != -1 + || run->numData == 0) + && run->refIndex == -1)) { - fprintf(cp_err, "Error: no data saved for %s; analysis not run\n", - spice_analysis_get_description(((JOB *) analysisPtr)->JOBtype)); - return E_NOTFOUND; + fprintf(cp_err, "Error: no data saved for %s; analysis not run\n", + spice_analysis_get_description(((JOB *) analysisPtr)->JOBtype)); + return E_NOTFOUND; } /* Now that we have our own data structures built up, let's see what @@ -331,8 +252,8 @@ beginPlot(void *analysisPtr, void *circuitPtr, char *cktName, char *analName, ch fileInit(run); else { plotInit(run); - if (refName) - run->runPlot->pl_ndims = 1; + if (refName) + run->runPlot->pl_ndims = 1; } return (OK); @@ -344,9 +265,7 @@ addDataDesc(runDesc *run, char *name, int type, int ind) dataDesc *data; if (!run->numData) - {run->data = (dataDesc *) tmalloc(32768); - run->data = (dataDesc *) trealloc(run->data, sizeof (dataDesc)); - } + run->data = (dataDesc *) tmalloc(sizeof (dataDesc)); else run->data = (dataDesc *) trealloc((char *) run->data, sizeof (dataDesc) * (run->numData + 1)); @@ -377,8 +296,7 @@ addSpecialDesc(runDesc *run, char *name, char *devname, char *param, int depind) char *unique; /* unique char * from back-end */ if (!run->numData) - {run->data = (dataDesc *) tmalloc(32768); - run->data = (dataDesc *) trealloc(run->data, sizeof (dataDesc));} + run->data = (dataDesc *) tmalloc(sizeof (dataDesc)); else run->data = (dataDesc *) trealloc((char *) run->data, sizeof (dataDesc) * (run->numData + 1)); @@ -406,7 +324,7 @@ addSpecialDesc(runDesc *run, char *name, char *devname, char *param, int depind) return (OK); } - + int OUTpData(void *plotPtr, IFvalue *refValue, IFvalue *valuePtr) @@ -421,28 +339,17 @@ OUTpData(void *plotPtr, IFvalue *refValue, IFvalue *valuePtr) run->pointCount++; if (run->writeOut) { - if (run->pointCount == 1) - fileInit_pass2(plotPtr); + if (run->pointCount == 1) + fileInit_pass2(plotPtr); fileStartPoint(run->fp, run->binary, run->pointCount); if (run->refIndex != -1) { - if (run->isComplex){ + if (run->isComplex) fileAddComplexValue(run->fp, run->binary, refValue->cValue); - currclock = clock(); - if ((currclock-lastclock)>(0.25*CLOCKS_PER_SEC)) { - fprintf(stderr, " Reference value : % 12.5e\r", - refValue->cValue.real); - lastclock = currclock; - } - } else { + else fileAddRealValue(run->fp, run->binary, refValue->rValue); - currclock = clock(); - if ((currclock-lastclock)>(0.25*CLOCKS_PER_SEC)) { - fprintf(stderr, " Reference value : % 12.5e\r", refValue->rValue); - lastclock = currclock; - } } - } + for (i = 0; i < run->numData; i++) { /* we've already printed reference vec first */ if (run->data[i].outIndex == -1) continue; @@ -461,22 +368,7 @@ OUTpData(void *plotPtr, IFvalue *refValue, IFvalue *valuePtr) } else { /* should pre-check instance */ if (!getSpecial(&run->data[i], run, &val)) - { - if (run->pointCount==1) - fprintf(stderr, "Warning: unrecognized variable - %s\n", - run->data[i].name); - if (run->isComplex) { - val.cValue.real=0; - val.cValue.imag=0; - fileAddComplexValue(run->fp, run->binary, - val.cValue); - } else { - val.rValue=0; - fileAddRealValue(run->fp, run->binary, - val.rValue); - }; continue; - }; if (run->data[i].type == IF_REAL) fileAddRealValue(run->fp, run->binary, val.rValue); @@ -488,10 +380,6 @@ OUTpData(void *plotPtr, IFvalue *refValue, IFvalue *valuePtr) } } fileEndPoint(run->fp, run->binary); - if (ferror(run->fp)) { - fprintf(stderr, "Warning: rawfile write error !!\n"); - shouldstop = TRUE; - }; } else { for (i = 0; i < run->numData; i++) { if (run->data[i].outIndex == -1) { @@ -533,7 +421,7 @@ OUTpData(void *plotPtr, IFvalue *refValue, IFvalue *valuePtr) return (OK); } - + /* ARGSUSED */ /* until some code gets written */ int @@ -555,7 +443,7 @@ OUTwEnd(void *plotPtr) return (OK); } - + int OUTendPlot(void *plotPtr) @@ -578,7 +466,7 @@ OUTendPlot(void *plotPtr) return (OK); } - + /* ARGSUSED */ /* until some code gets written */ int @@ -594,7 +482,7 @@ OUTendDomain(void *plotPtr) return (OK); } - + /* ARGSUSED */ /* until some code gets written */ int @@ -606,34 +494,34 @@ OUTattributes(void *plotPtr, char *varName, int param, IFvalue *value) int i; if (param == OUT_SCALE_LIN) - type = GRID_LIN; + type = GRID_LIN; else if (param == OUT_SCALE_LOG) - type = GRID_XLOG; + type = GRID_XLOG; else - return E_UNSUPP; + return E_UNSUPP; if (run->writeOut) { - if (varName) { - for (i = 0; i < run->numData; i++) - if (!strcmp(varName, run->data[i].name)) - run->data[i].gtype = type; - } else { - run->data[run->refIndex].gtype = type; - } + if (varName) { + for (i = 0; i < run->numData; i++) + if (!strcmp(varName, run->data[i].name)) + run->data[i].gtype = type; + } else { + run->data[run->refIndex].gtype = type; + } } else { - if (varName) { - for (d = run->runPlot->pl_dvecs; d; d = d->v_next) - if (!strcmp(varName, d->v_name)) - d->v_gridtype = type; - } else { - run->runPlot->pl_scale->v_gridtype = type; - } + if (varName) { + for (d = run->runPlot->pl_dvecs; d; d = d->v_next) + if (!strcmp(varName, d->v_name)) + d->v_gridtype = type; + } else { + run->runPlot->pl_scale->v_gridtype = type; + } } return (OK); } - + /* The file writing routines. */ @@ -641,12 +529,7 @@ static void fileInit(runDesc *run) { char buf[513]; - int i, tmp, sweep; - float ftmp; - time_t time_of_day; - CKTcircuit *ckt; - - lastclock = clock(); + int i; /* This is a hack. */ run->isComplex = FALSE; @@ -655,163 +538,34 @@ fileInit(runDesc *run) run->isComplex = TRUE; i = 0; - - /* Write PROBE version marker */ - - tmp=0xFFFFFFFF; - fwrite((char *)&tmp,sizeof(tmp),1,run->fp); - i += sizeof(tmp); - tmp=0xF3FFFFFF; - fwrite((char *)&tmp,sizeof(tmp),1,run->fp); - i += sizeof(tmp); - - /* Write Title String */ - sprintf(buf, "Title: %s\n", run->name); i += strlen(buf); fputs(buf, run->fp); - - /* Write \0 for Title string and \0 for empty SubTitle string */ - - tmp=0; - fwrite((char *)&tmp,2,1,run->fp); - i += 2; - - /* get the time and date */ - - time_of_day = time( NULL ); - -/* Write Time String */ - - strftime( buf, 9, "%H:%M:%S", - localtime( &time_of_day ) ); - + sprintf(buf, "Date: %s\n", datestring()); i += strlen(buf); fputs(buf, run->fp); - tmp=0; - fwrite((char *)&tmp,1,1,run->fp); - i += 1; - - /* Write Date String */ - - strftime( buf, 9, "%d/%m/%y", - localtime( &time_of_day ) ); - + sprintf(buf, "Plotname: %s\n", run->type); i += strlen(buf); fputs(buf, run->fp); - tmp=0; - fwrite((char *)&tmp,1,1,run->fp); - i += 1; - - /* Write Temperature */ - - ckt=run->circuit; - ftmp=ckt->CKTtemp-273.15; - fwrite((char *)&ftmp,sizeof(ftmp),1,run->fp); - i += sizeof(ftmp); - - - /* Write Analysis Type */ - - if (strncasecmp(run->type,"AC",2)==0) { - sprintf(buf, "AC Sweep"); - sweep=2; - } else if (strncasecmp(run->type,"DC",2)==0) { - sprintf(buf, "DC Sweep"); - sweep=1; - } else if (strncasecmp(run->type,"Tran",4)==0) { - sprintf(buf, "Transient Analysis"); - sweep=4; - }; + sprintf(buf, "Flags: %s\n", run->isComplex ? "complex" : "real"); + i += strlen(buf); + fputs(buf, run->fp); + sprintf(buf, "No. Variables: %d\n", run->numData); + i += strlen(buf); + fputs(buf, run->fp); + sprintf(buf, "No. Points: "); i += strlen(buf); fputs(buf, run->fp); - -/* Write \0 for Analysis Type string and \0 for empty Comment string */ - - tmp=0; - fwrite((char *)&tmp,2,1,run->fp); - i += 2; - -/* Write Program ID */ - - tmp=0x00011A22; - fwrite((char *)&tmp,sizeof(tmp),1,run->fp); - i += sizeof(tmp); - -/* Write All-Columns Flag */ - - tmp=0; - fwrite((char *)&tmp,2,1,run->fp); - i += 2; - -/* Write Complex-Data Flag */ - - tmp = run->isComplex ? 2 : 1; - fwrite((char *)&tmp,2,1,run->fp); - i += 2; - -/* Write Datatype Flag (PROBE_ANALOG) */ - - tmp = 0; - fwrite((char *)&tmp,2,1,run->fp); - i += 2; - -/* Write Digital Data Length (meaningless if analogue data) */ - - tmp=0; - fwrite((char *)&tmp,sizeof(tmp),1,run->fp); - i += sizeof(tmp); - -/* Write space for no. of rows */ fflush(run->fp); /* Gotta do this for LATTICE. */ if (run->fp == stdout || (run->pointPos = ftell(run->fp)) <= 0) - run->pointPos = i; - tmp=0; - fwrite((char *)&tmp,sizeof(tmp),1,run->fp); - i += sizeof(tmp); + run->pointPos = i; + fprintf(run->fp, "0 \n"); /* Save 8 spaces here. */ -/* Write no. of cols */ - - fwrite(&(run->numData),2,1,run->fp); - i += 2; -#ifdef AlansFixes - fprintf(stderr, "No. of Data Columns : %d \n", run->numData); -#endif - -/* Write Sweep Mode Flag */ - - fwrite((char *)&sweep,2,1,run->fp); - i += 2; - -/* Write sweep variable start value */ - - ftmp=0; - fwrite((char *)&ftmp,sizeof(ftmp),1,run->fp); - i += sizeof(ftmp); - -/* Write sweep variable end value */ - - ftmp=0; - fwrite((char *)&ftmp,sizeof(ftmp),1,run->fp); - i += sizeof(ftmp); - -/* Write Secondary Sweep Variable name (null string) */ - - tmp=0; - fwrite((char *)&tmp,1,1,run->fp); - i += 1; - -/* Write Digital Section Flag */ - - tmp = 0; - fwrite((char *)&tmp,2,1,run->fp); - i += 2; - - fflush(run->fp); /* Make sure this gets to disk */ + fprintf(run->fp, "Command: version %s\n", ft_sim->version); + fprintf(run->fp, "Variables:\n"); return; - } static void @@ -819,90 +573,34 @@ fileInit_pass2(runDesc *run) { int i, type; char *name, buf[BSIZE_SP]; - char *ch, *end; - int tmp; for (i = 0; i < run->numData; i++) { - - if ((run->data[i].regular == FALSE) || - cieq(run->data[i].name, "time") || - cieq(run->data[i].name, "sweep") || - cieq(run->data[i].name, "frequency")) - (void) sprintf(name, "%s", run->data[i].name); - else - (void) sprintf(name, "V(%s)", run->data[i].name); - - if (ch=strstr(name, "#branch")) { - name[0]='I'; - *ch++=')'; - *ch='\0'; + if (isdigit(*run->data[i].name)) { + (void) sprintf(buf, "V(%s)", run->data[i].name); + name = buf; + } else { + name = run->data[i].name; + } + if (substring("#branch", name)) type = SV_CURRENT; - } else if (cieq(name, "time")) type = SV_TIME; else if (cieq(name, "frequency")) type = SV_FREQUENCY; else type = SV_VOLTAGE; - if (*name=='@') { - type = SV_CURRENT; - memmove(name, &name[1], strlen(name)-1); - if ((ch=strchr(name, '['))!=NULL) { - ch++; - strncpy(buf, ch, BSIZE_SP); - ch--; - *ch='\0'; - if ((ch=strchr(buf, ']'))!=NULL) *ch='\0'; - strcat(buf, "("); - if ((ch=strchr(name, ':'))!=NULL) { - ch++; - strncat(buf, ch, BSIZE_SP-strlen(buf)); - ch--; - *ch='\0'; - if ((ch=strrchr(buf, ':'))!=NULL) { - ch++; - memmove(&ch[strlen(name)], ch, strlen(ch)+1); - memmove(ch, name, strlen(name)); - }; - } else { - strncat(buf, name, BSIZE_SP-strlen(buf)); - }; - strcat(buf, ")"); - }; - strncpy(name, buf, BSIZE_SP); - }; - while ((ch=strchr(name, ':'))!=NULL) - *ch='.'; - - if ((ch=strchr(name, '('))!=NULL) { - ch++; - end=(char *)memchr(name, '\0', BSIZE_SP); - while (strchr(ch, '.')!=NULL) { - memmove(ch+1, ch, end-ch+1); - end++; - *ch='x'; - ch=strchr(ch, '.'); - ch++; - }; - }; - - fprintf(run->fp, "%s", name); - tmp=0; - fwrite((void *)&tmp,1,1,run->fp); + fprintf(run->fp, "\t%d\t%s\t%s", i, name, + ft_typenames(type)); + if (run->data[i].gtype == GRID_XLOG) + fprintf(run->fp, "\tgrid=3"); + fprintf(run->fp, "\n"); } - fflush(run->fp); /* Make all sure this gets to disk */ - - /* Allocate Row buffer */ - - rowbuflen=(run->numData)*sizeof(float); - if (run->isComplex) rowbuflen *=2; - rowbuf=(float *)tmalloc(rowbuflen); + fprintf(run->fp, "%s:\n", run->binary ? "Binary" : "Values"); return; - } static void @@ -910,11 +608,6 @@ fileStartPoint(FILE *fp, bool bin, int num) { if (!bin) fprintf(fp, "%d\t", num - 1); - - /* reset set buffer pointer to zero */ - - column = 0; - return; } @@ -922,53 +615,23 @@ fileStartPoint(FILE *fp, bool bin, int num) static void fileAddRealValue(FILE *fp, bool bin, double value) { - if (bin) { - if (value<(-FLT_MAX)) { - fprintf(stderr, - "Warning, double to float conversion overflow !\n"); - rowbuf[column++]=(-FLT_MAX); - } else if (value>(FLT_MAX)) { - fprintf(stderr, - "Warning, double to float conversion overflow !\n"); - rowbuf[column++]=FLT_MAX; - } else { - rowbuf[column++]=value; - }; - } else - fprintf(fp, "\t%.*e\n", DOUBLE_PRECISION, value); - - return; + if (bin) + fwrite((char *) &value, sizeof (double), 1, fp); + else + fprintf(fp, "\t%.*e\n", DOUBLE_PRECISION, value); + + return; } static void fileAddComplexValue(FILE *fp, bool bin, IFcomplex value) { - if (bin) { - if (value.real<(-FLT_MAX)) { - fprintf(stderr, - "Warning, double to float conversion overflow !\n"); - rowbuf[column++]=(-FLT_MAX); - } else if (value.real>(FLT_MAX)) { - fprintf(stderr, - "Warning, double to float conversion overflow !\n"); - rowbuf[column++]=FLT_MAX; - } else { - rowbuf[column++]=value.real; - }; - if (value.imag<(-FLT_MAX)) { - fprintf(stderr, - "Warning, double to float conversion overflow !\n"); - rowbuf[column++]=(-FLT_MAX); - } else if (value.imag>(FLT_MAX)) { - fprintf(stderr, - "Warning, double to float conversion overflow !\n"); - rowbuf[column++]=FLT_MAX; - } else { - rowbuf[column++]=value.imag; - }; - } else { - fprintf(fp, "\t%.*e,%.*e\n", DOUBLE_PRECISION, value.real, + if (bin) { + fwrite((char *) &value.real, sizeof (double), 1, fp); + fwrite((char *) &value.imag, sizeof (double), 1, fp); + } else { + fprintf(fp, "\t%.*e,%.*e\n", DOUBLE_PRECISION, value.real, DOUBLE_PRECISION, value.imag); } @@ -978,8 +641,6 @@ fileAddComplexValue(FILE *fp, bool bin, IFcomplex value) static void fileEndPoint(FILE *fp, bool bin) { - /* write row buffer to file */ - fwrite((char *)rowbuf, rowbuflen, 1, fp); return; } @@ -989,30 +650,22 @@ static void fileEnd(runDesc *run) { long place; - int nrows; - if (run->fp != stdout) { - place = ftell(run->fp); - fseek(run->fp, run->pointPos, 0); - nrows=run->pointCount; - fprintf(stderr, "\nNo. of Data Rows : %d\n", nrows); - fwrite(&nrows,sizeof(nrows),1,run->fp); - fseek(run->fp, place, 0); + place = ftell(run->fp); + fseek(run->fp, run->pointPos, 0); + fprintf(run->fp, "%d", run->pointCount); + fseek(run->fp, place, 0); } else { - /* Yet another hack-around */ - fprintf(stderr, "@@@ %ld %d\n", run->pointPos, run->pointCount); + /* Yet another hack-around */ + fprintf(stderr, "@@@ %ld %d\n", run->pointPos, run->pointCount); } fflush(run->fp); -/* deallocate row buffer */ - - tfree(rowbuf); - return; } - + /* The plot maintenance routines. */ @@ -1116,7 +769,7 @@ plotEnd(runDesc *run) return; } - + /* ParseSpecial takes something of the form "@name[param,index]" and rips * out name, param, andstrchr. @@ -1130,7 +783,7 @@ parseSpecial(char *name, char *dev, char *param, char *ind) *dev = *param = *ind = '\0'; if (*name != '@') - return FALSE; + return (FALSE); name++; s = dev; @@ -1138,7 +791,7 @@ parseSpecial(char *name, char *dev, char *param, char *ind) *s++ = *name++; *s = '\0'; if (!*name) - return TRUE; + return (TRUE); name++; s = param; @@ -1148,7 +801,7 @@ parseSpecial(char *name, char *dev, char *param, char *ind) if (*name == ']') return (!name[1] ? TRUE : FALSE); else if (!*name) - return FALSE; + return (FALSE); name++; s = ind; @@ -1156,9 +809,9 @@ parseSpecial(char *name, char *dev, char *param, char *ind) *s++ = *name++; *s = '\0'; if (*name && !name[1]) - return TRUE; + return (TRUE); else - return FALSE; + return (FALSE); } /* This routine must match two names with or without a V() around them. */ @@ -1171,14 +824,14 @@ name_eq(char *n1, char *n2) if ((s =strchr(n1, '('))) { strcpy(buf1, s); if (!(s =strchr(buf1, ')'))) - return FALSE; + return (FALSE); *s = '\0'; n1 = buf1; } if ((s =strchr(n2, '('))) { strcpy(buf2, s); if (!(s =strchr(buf2, ')'))) - return FALSE; + return (FALSE); *s = '\0'; n2 = buf2; } @@ -1197,24 +850,24 @@ getSpecial(dataDesc *desc, runDesc *run, IFvalue *val) desc->specName, &desc->specFast, ft_sim, &desc->type, &selector) == OK) { desc->type &= (IF_REAL | IF_COMPLEX); /* mask out other bits */ - return TRUE; + return(TRUE); } else if ((vv = if_getstat(run->circuit, &desc->name[1]))) { - /* skip @ sign */ + /* skip @ sign */ desc->type = IF_REAL; if (vv->va_type == VT_REAL) - val->rValue = vv->va_real; + val->rValue = vv->va_real; else if (vv->va_type == VT_NUM) - val->rValue = vv->va_num; + val->rValue = vv->va_num; else if (vv->va_type == VT_BOOL) - val->rValue = (vv->va_bool ? 1.0 : 0.0); + val->rValue = (vv->va_bool ? 1.0 : 0.0); else { - return FALSE; /* not a real */ + return (FALSE); /* not a real */ } tfree(vv); - return TRUE; + return(TRUE); } - return FALSE; + return (FALSE); } static void @@ -1272,8 +925,8 @@ OUTerror(int flags, char *format, IFuid *names) int nindex = 0; if ((flags == ERR_INFO) && cp_getvar("printinfo", VT_BOOL, - (char *) &printinfo)) - return; + (char *) &printinfo)) + return; for (m = msgs; m->flag; m++) if (flags & m->flag) @@ -1281,10 +934,10 @@ OUTerror(int flags, char *format, IFuid *names) for (s = format, bptr = buf; *s; s++) { if (*s == '%' && (s == format || *(s-1) != '%') && *(s+1) == 's') { - if (names[nindex]) - strcpy(bptr, names[nindex]); - else - strcpy(bptr, "(null)"); + if (names[nindex]) + strcpy(bptr, names[nindex]); + else + strcpy(bptr, "(null)"); bptr += strlen(bptr); s++; nindex++; @@ -1296,4 +949,4 @@ OUTerror(int flags, char *format, IFuid *names) fprintf(cp_err, "%s\n", buf); fflush(cp_err); -} +} \ No newline at end of file