1 /***************************************************************************
2 JSPICE3 adaptation of Spice3e2 - Copyright (c) Stephen R. Whiteley 1992
3 Copyright 1990 Regents of the University of California. All rights reserved.
4 Authors: 1987 Thomas L. Quarles
5 1993 Stephen R. Whiteley
6 ****************************************************************************/
7
8 #include "spice.h"
9 #include "inpdefs.h"
10 #include "iferrmsg.h"
11 #include "misc.h"
12
13
14 /*ARGSUSED*/
15 char *
INPdomodel(ckt,image,tab)16 INPdomodel(ckt,image,tab)
17
18 GENERIC *ckt;
19 card *image;
20 INPtables *tab;
21 {
22
23 char *modname, *token;
24 char typename[8];
25 char *err = (char *)NULL;
26 char *line, **s;
27 int i, lev;
28
29 line = image->line;
30 INPgetTok(&line,&token,1); /* throw away '.model' */
31 txfree(token);
32
33 INPgetTok(&line,&modname,1);
34 INPinsert(&modname,tab);
35
36 INPgetTok(&line,&token,1);
37 if (!token) {
38 err = (char *)tmalloc(35 + strlen(typename));
39 (void)sprintf(err,".model syntax error - ignored\n");
40 return (err);
41 }
42
43 for (i = 0; i < 4 && token[i]; i++) {
44 typename[i] = (isupper(token[i]) ? tolower(token[i]) : token[i]);
45 }
46 typename[i] = '\0';
47 txfree(token);
48
49 for (i = 0; i < ft_sim->numDevices; i++) {
50 s = ft_sim->devices[i]->modelKeys;
51 if (s == NULL)
52 continue;
53 for (; *s; s++) {
54 if (!strcmp(*s,typename)) {
55 (void)INPfindLev(line,&lev);
56 lev--;
57 if (ft_sim->devices[i]->levelMask & (1 << lev)) {
58 INPmakeMod(modname,i,image);
59 return (NULL);
60 }
61 break;
62 }
63 }
64 }
65 err = (char *)tmalloc(35 + strlen(typename));
66 (void)sprintf(err,"unknown model type %s - ignored\n",typename);
67 return (err);
68 }
69