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