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

📄 subckt.c

📁 支持数字元件仿真的SPICE插件
💻 C
📖 第 1 页 / 共 3 页
字号:
            gotone = true;            t = c->li_line;            name = gettok(&t);            buffer = tmalloc(strlen(name) + strlen(t) +                    strlen(subname) + 4);            (void) sprintf(buffer, "%s ",name);            name = gettok(&t);            wlsub = alloc(wordlist);            wlsub->wl_next = submod;            if (submod)                submod->wl_prev = wlsub;            submod = wlsub;            wlsub->wl_word = name;/* gtri - modify - wbk - 4/10/91 - change way pathnames are built *//* reverse order so that innermost name is now first *//*            (void) sprintf(buffer + strlen(buffer), "%s:%s ",                    subname, name);*/            (void) sprintf(buffer + strlen(buffer), "%s:%s ",                    name, subname);/* gtri - end - wbk - 4/10/91 - change way pathnames are built */            (void) strcat(buffer, t);            tfree(c->li_line);            c->li_line = buffer;            t = c->li_line;            (void) gettok(&t);            wl = alloc(wordlist);            wl->wl_next = modnames;            if (modnames)                 modnames->wl_prev = wl;            modnames = wl;            wl->wl_word = gettok(&t);        }    }    return(gotone);}static voiddevmodtranslate(deck, subname)    struct line *deck;    char *subname;{    struct line *s;    char *buffer, *name, *t, c;    wordlist *wlsub;    bool found;    for (s = deck; s; s = s->li_next) {        t = s->li_line;        c = isupper(*t) ? tolower(*t) : *t;        found = false;        buffer = tmalloc(strlen(t) + strlen(subname) + 4);            switch (c) {        case 'r':        case 'c':            name = gettok(&t);            (void) sprintf(buffer,"%s ",name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            if (*t) {                name = gettok(&t);            /* Now, is this a subcircuit model? */            for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {                    if (eq(name, wlsub->wl_word)) {/* gtri - modify - wbk - 4/10/91 - change way pathnames are built *//* reverse order so that innermost name is now first *//*                    (void) sprintf(buffer + strlen(buffer),                        "%s:%s ", subname, name);*/                    (void) sprintf(buffer + strlen(buffer),                        "%s:%s ", name, subname);/* gtri - end - wbk - 4/10/91 - change way pathnames are built */                    found = true;                    break;                    }                }                if (!found)                (void) sprintf(buffer + strlen(buffer), "%s ",                    name);            }            found = false;            if (*t) {                name = gettok(&t);                /* Now, is this a subcircuit model? */                for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {                if (eq(name, wlsub->wl_word)) {/* gtri - modify - wbk - 4/10/91 - change way pathnames are built *//* reverse order so that innermost name is now first *//*                (void) sprintf(buffer + strlen(buffer),                        "%s:%s ", subname, name);*/                (void) sprintf(buffer + strlen(buffer),                        "%s:%s ", name, subname);/* gtri - end - wbk - 4/10/91 - change way pathnames are built */                    found = true;                    break;                }                }                if (!found)                (void) sprintf(buffer + strlen(buffer), "%s ",                     name);            }            (void) strcat(buffer, t);            tfree(s->li_line);            s->li_line = buffer;            break;            case 'd':            name = gettok(&t);            (void) sprintf(buffer,"%s ",name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            /* Now, is this a subcircuit model? */            for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {                if (eq(name, wlsub->wl_word)) {/* gtri - modify - wbk - 4/10/91 - change way pathnames are built *//* reverse order so that innermost name is now first *//*                (void) sprintf(buffer + strlen(buffer), "%s:%s ",                     subname, name);*/                (void) sprintf(buffer + strlen(buffer), "%s:%s ",                    name, subname);/* gtri - end - wbk - 4/10/91 - change way pathnames are built */                found = true;                break;                }            }            if (!found)                (void) sprintf(buffer + strlen(buffer), "%s ", name);            (void) strcat(buffer, t);            tfree(s->li_line);            s->li_line = buffer;            break;            case 'u':            case 'j':            case 'z':            name = gettok(&t);            (void) sprintf(buffer,"%s ",name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            /* Now, is this a subcircuit model? */            for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {                if (eq(name, wlsub->wl_word)) {/* gtri - modify - wbk - 4/10/91 - change way pathnames are built *//* reverse order so that innermost name is now first *//*                (void) sprintf(buffer + strlen(buffer), "%s:%s ",                     subname, name);*/                (void) sprintf(buffer + strlen(buffer), "%s:%s ",                    name, subname);/* gtri - end - wbk - 4/10/91 - change way pathnames are built */                found = true;                break;                }            }            if (!found)                (void) sprintf(buffer + strlen(buffer), "%s ", name);            (void) strcat(buffer, t);            tfree(s->li_line);            s->li_line = buffer;            break;            case 'm':            name = gettok(&t);            (void) sprintf(buffer,"%s ",name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            /* Now, is this a subcircuit model? */            for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {                if (eq(name, wlsub->wl_word)) {/* gtri - modify - wbk - 4/10/91 - change way pathnames are built *//* reverse order so that innermost name is now first *//*                (void) sprintf(buffer + strlen(buffer), "%s:%s ",                     subname, name);*/                (void) sprintf(buffer + strlen(buffer), "%s:%s ",                    name, subname);/* gtri - end - wbk - 4/10/91 - change way pathnames are built */                found = true;                break;                }            }            if (!found)                (void) sprintf(buffer + strlen(buffer), "%s ", name);            (void) strcat(buffer, t);            tfree(s->li_line);            s->li_line = buffer;            break;            case 'q':            name = gettok(&t);            (void) sprintf(buffer,"%s ",name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            (void) sprintf(buffer + strlen(buffer), "%s ", name);            name = gettok(&t);            /* Now, is this a subcircuit model? */            for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {                if (eq(name, wlsub->wl_word)) {/* gtri - modify - wbk - 4/10/91 - change way pathnames are built *//* reverse order so that innermost name is now first *//*                (void) sprintf(buffer + strlen(buffer), "%s:%s ",                     subname, name);*/                (void) sprintf(buffer + strlen(buffer), "%s:%s ",                    name, subname);/* gtri - end - wbk - 4/10/91 - change way pathnames are built */                found = true;                break;                }            }            if (!found)                (void) sprintf(buffer + strlen(buffer), "%s ", name);            found = false;            if (*t) {                name = gettok(&t);                /* Now, is this a subcircuit model? */                for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {                    if (eq(name, wlsub->wl_word)) {/* gtri - modify - wbk - 4/10/91 - change way pathnames are built *//* reverse order so that innermost name is now first *//*                    (void) sprintf(buffer + strlen(buffer),                            "%s:%s ", subname, name);*/                    (void) sprintf(buffer + strlen(buffer),                            "%s:%s ", name, subname);/* gtri - end - wbk - 4/10/91 - change way pathnames are built */                    found = true;                    break;                }                }                if (!found)                (void) sprintf(buffer + strlen(buffer), "%s ",                    name);            }            (void) strcat(buffer, t);            tfree(s->li_line);            s->li_line = buffer;            break;/* gtri - modify - wbk - 10/22/90 - add a case for the new 'a' devices */        case 'a':            /* set name to the beginning of the last token on the line */            while(1) {                name = t;                MIFgettok(&t);                if(*t == '\0')                    break;            }            /* copy up to this token into the buffer */            strncpy(buffer, s->li_line, name - s->li_line);            buffer[name - s->li_line] = '\0';            /* eliminate the possibility of trailing white space */            t = name;            name = MIFgettok(&t);            /* map name if it matches any .model cards in this subckt */            for (wlsub = submod; wlsub; wlsub = wlsub->wl_next) {                if (eq(name, wlsub->wl_word)) {                sprintf(buffer + strlen(buffer), "%s:%s ", name, subname);                    found = true;                    break;                }            }            if (!found)                sprintf(buffer + strlen(buffer), "%s ", name);            tfree(s->li_line);            s->li_line = buffer;            break;/* gtri - end - wbk - 10/22/90 */            default:            tfree(buffer);            break;        }    }    return;}/* This is a spice-dependent thing.  It should probably go somewhere * else, but...  Note that we pretend that dependent sources and mutual * inductors have more nodes than they really do... */intinp_numnodes(c)    char c;{/* gtri - comment - wbk - 10/23/90 - Do not modify this routine for *//* 'A' type devices since the callers will not know how to find the *//* nodes even if they know how many there are.  Modify the callers  *//* instead.                                                         *//* gtri - end - wbk - 10/23/90 */    if (isupper(c))        c = tolower(c);    switch (c) {        case ' ':        case '\t':        case '.':        case 'x':        case '*':        return (0);        case 'b': return (2);        case 'c': return (2);        case 'd': return (2);        case 'e': return (4);        case 'f': return (2);        case 'g': return (4);        case 'h': return (2);        case 'i': return (2);        case 'j': return (3);        case 'k': return (0);        case 'l': return (2);        case 'm': return (4);        case 'q': return (4);        case 'r': return (2);        case 's': return (4);        case 't': return (4);        case 'u': return (3);        case 'v': return (2);        case 'w': return (3);        case 'z': return (3);        default:        fprintf(cp_err, "Warning: unknown device type: %c\n", c);            return (2);    }}

⌨️ 快捷键说明

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