📄 subckt.c
字号:
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 + -