⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inp2dot.c

📁 支持数字元件仿真的SPICE插件
💻 C
📖 第 1 页 / 共 2 页
字号:
                                foo, ft_sim->analyses[which]->                                analysisParms[i].id,&ptemp,(IFvalue*)NULL);                        if(error) current->error = INPerrCat(                                current->error, INPerror(error));                    } else {                        parm = INPgetValue(ckt,&line,ft_sim->                                analyses[which]->analysisParms[i].                                dataType,tab);                        error = (*(ft_sim->setAnalysisParm))(ckt,                                foo, ft_sim->analyses[which]->                                analysisParms[i].id,parm,(IFvalue*)NULL);                        if(error) current->error = INPerrCat(                                current->error, INPerror(error));                                            }                    break;                }            }            if(i==ft_sim->analyses[which]->numParms) {                /* didn't find it! */                LITERR(" Error: unknown parameter on .sens-ignored \n")            }        }        return(0);    } else if ( (strcmp(token,".pz")==0)){        /* .pz nodeI nodeG nodeJ nodeK {V I} {POL ZER PZ} */        which = -1;        for(i=0;i<ft_sim->numAnalyses;i++) {            if(strcmp(ft_sim->analyses[i]->name,"PZ")==0) {                which=i;                break;            }        }        if(which == -1) {            LITERR("pole-zero analysis unsupported\n")            return(0);        }        IFC(newAnalysis,(ckt,which,"pole-zero analysis",&foo, task))        parm = INPgetValue(ckt,&line,IF_NODE,tab);         GCA(INPapName,(ckt,which,foo,"nodei",parm))        parm = INPgetValue(ckt,&line,IF_NODE,tab);         GCA(INPapName,(ckt,which,foo,"nodeg",parm))        parm = INPgetValue(ckt,&line,IF_NODE,tab);         GCA(INPapName,(ckt,which,foo,"nodej",parm))        parm = INPgetValue(ckt,&line,IF_NODE,tab);         GCA(INPapName,(ckt,which,foo,"nodek",parm))        INPgetTok(&line,&steptype,1); /* get V or I */        ptemp.iValue=1;        GCA(INPapName,(ckt,which,foo,steptype,&ptemp))        INPgetTok(&line,&steptype,1); /* get POL, ZER, or PZ */        ptemp.iValue=1;        GCA(INPapName,(ckt,which,foo,steptype,&ptemp))        return(0);    } else if ( (strcmp(token,".dc")==0)){        /* .dc SRC1NAME Vstart1 Vstop1 Vinc1 [SRC2NAME Vstart2 */        /*        Vstop2 Vinc2 */        which = -1;        for(i=0;i<ft_sim->numAnalyses;i++) {            if(strcmp(ft_sim->analyses[i]->name,"DCTransfer")==0) {                which=i;                break;            }        }        if(which==-1) {            LITERR("DC transfer curve analysis unsupported\n")            return(0);        }        IFC(newAnalysis,(ckt,which,"DCtransferCurve",&foo, task))        INPgetTok(&line,&name,1);        INPinsert(&name,tab);        ptemp.uValue=name;        GCA(INPapName,(ckt,which,foo,"name1",&ptemp))        parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vstart1 */        GCA(INPapName,(ckt,which,foo,"start1",parm))        parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vstop1 */        GCA(INPapName,(ckt,which,foo,"stop1",parm))        parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vinc1 */        GCA(INPapName,(ckt,which,foo,"step1",parm))        if(*line) {            INPgetTok(&line,&name,1);            INPinsert(&name,tab);            ptemp.uValue=name;            GCA(INPapName,(ckt,which,foo,"name2",&ptemp))            parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vstart1 */            GCA(INPapName,(ckt,which,foo,"start2",parm))            parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vstop1 */            GCA(INPapName,(ckt,which,foo,"stop2",parm))            parm = INPgetValue(ckt,&line,IF_REAL,tab); /* vinc1 */            GCA(INPapName,(ckt,which,foo,"step2",parm))        }        return(0);    } else if ( (strcmp(token,".tf")==0)){        /* .tf v( node1, node2 ) src */        /* .tf vsrc2             src */        which = -1;        for(i=0;i<ft_sim->numAnalyses;i++) {            if(strcmp(ft_sim->analyses[i]->name,"TF")==0) {                which=i;                break;            }        }        if(which==-1) {            LITERR("DC Transfer function analysis unsupported\n")            return(0);        }        IFC(newAnalysis,(ckt,which,"transferFunction",&foo,task))        INPgetTok(&line,&name,0);        /* name is now either V or I or a serious error */        if(*name == 'v' && strlen(name)==1) {            if(*line != '(' /* match) */ ) {                 /* error, bad input format */            }            INPgetTok(&line,&nname1,0);            INPtermInsert(ckt,&nname1,tab,&node1);            ptemp.nValue=node1;            GCA(INPapName,(ckt,which,foo,"outpos",&ptemp))            if(*line != /* match ( */ ')') {                INPgetTok(&line,&nname2,1);                INPtermInsert(ckt,&nname2,tab,&node2);                ptemp.nValue=node2;                GCA(INPapName,(ckt,which,foo,"outneg",&ptemp))                ptemp.sValue = (char *)                        MALLOC(sizeof(char)*(5+strlen(nname1)+strlen(nname2)));                (void)sprintf(ptemp.sValue,"V(%s,%s)",nname1,nname2);                GCA(INPapName,(ckt,which,foo,"outname",&ptemp))            } else {                ptemp.nValue=gnode;                GCA(INPapName,(ckt,which,foo,"outneg",&ptemp))                ptemp.sValue = (char *)MALLOC(sizeof(char)*(4+strlen(nname1)));                (void)sprintf(ptemp.sValue,"V(%s)",nname1);                GCA(INPapName,(ckt,which,foo,"outname",&ptemp))            }        } else {            INPgetTok(&line,&name,1);            INPinsert(&name,tab);            ptemp.uValue=name;            GCA(INPapName,(ckt,which,foo,"outsrc",&ptemp))        }        INPgetTok(&line,&name,1);        INPinsert(&name,tab);        ptemp.uValue=name;        GCA(INPapName,(ckt,which,foo,"insrc",&ptemp))        return(0);    } else if ( (strcmp(token,".tran")==0)){        /* .tran Tstep Tstop <Tstart <Tmax> > <UIC> */        which = -1;        for(i=0;i<ft_sim->numAnalyses;i++) {            if(strcmp(ft_sim->analyses[i]->name,"TRAN")==0) {                which=i;                break;            }        }        if(which == -1) {            LITERR("Transient analysis unsupported\n")            return(0);        }        IFC(newAnalysis,(ckt,which,"transient",&foo, task))        parm = INPgetValue(ckt,&line,IF_REAL,tab); /* Tstep */        GCA(INPapName,(ckt,which,foo,"tstep",parm))/* gtri - add - wbk - 5/17/91 - Modify tmax default */        /* Set tmax = tstep unless explicitly given on .tran card */        GCA(INPapName,(ckt,which,foo,"tmax",parm))/* gtri - end - wbk - 5/17/91 - Modify tmax default */        parm = INPgetValue(ckt,&line,IF_REAL,tab); /* Tstop */        GCA(INPapName,(ckt,which,foo,"tstop",parm))        if(*line) {            dtemp = INPevaluate(&line,&error,1);  /* tstart? */            if(error==0) {                ptemp.rValue=dtemp;                GCA(INPapName,(ckt,which,foo,"tstart",&ptemp))                dtemp = INPevaluate(&line,&error,1);  /* tmax? */                if(error==0) {                    ptemp.rValue=dtemp;                    GCA(INPapName,(ckt,which,foo,"tmax",&ptemp))                }            }        }        if(*line) {            INPgetTok(&line,&word,1); /* uic? */            if(strcmp(word,"uic")==0) {                ptemp.iValue=1;                GCA(INPapName,(ckt,which,foo,"uic",&ptemp))            } else {                LITERR(" Error: unknown parameter on .tran - ignored\n")            }        }        return(0);    } else if ( (strcmp(token,".subckt")==0) ||            (strcmp(token,".ends")==0)  ){        /* not yet implemented - warn & ignore */        LITERR(" Warning: Subcircuits not yet implemented - ignored \n")        return(0);    } else if ( (strcmp(token,".end")==0)){        /* .end - end of input */        /* not allowed to pay attention to additional input - return */        return(1);        /*NOTREACHED*/    } else if ( (strcmp(token,".options")==0) ||            (strcmp(token,".option")==0) ||            (strcmp(token,".opt")==0) ){        /* .option - specify program options - rather complicated */        /* use a subroutine to handle all of them to keep this */        /* subroutine managable */        INPdoOpts(ckt,ft_curckt->ci_curOpt,current,tab);        return(0);    }    LITERR(" unimplemented control card - error \n")    return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -