Jspice3
urcparse.c File Reference
#include "spice.h"
#include <stdio.h>
#include "inpdefs.h"
#include "inpmacs.h"
Include dependency graph for urcparse.c:

Go to the source code of this file.

Functions

void URCparse (int type, GENERIC *ckt, GENERIC *tabp, GENERIC *currentp)
 

Function Documentation

void URCparse ( int  type,
GENERIC ckt,
GENERIC tabp,
GENERIC currentp 
)

Definition at line 15 of file urcparse.c.

21 {
22  /* lossy line (lumped approx) parser */
23 
24  /* Uname <node> <node> <model> [l=<val>] [n=<val>] */
25 
26  INPtables *tab = (INPtables*)tabp;
27  card *current = (card*)currentp;
28 
29  char *line; /* the part of the current line left to parse */
30  char *name; /* the device's name */
31  char *nname1; /* the first node's name */
32  char *nname2; /* the second node's name */
33  char *nname3; /* the third node's name */
34  GENERIC *node1; /* the first node's node pointer */
35  GENERIC *node2; /* the second node's node pointer */
36  GENERIC *node3; /* the third node's node pointer */
37  int error; /* error code temporary */
38  GENERIC *fast; /* pointer to the actual instance */
39  int waslead; /* flag to indicate that unlabeled number was found */
40  double leadval; /* actual value of unlabeled number */
41  char *model; /* name of the model */
42  INPmodel *thismodel; /* pointer to our model descriptor */
43  GENERIC *mdfast; /* pointer to the actual model */
44  IFuid uid; /* uid for default model */
45 
46  line = current->line;
47  INPgetTok(&line,&name,1);
48  INPinsert(&name,tab);
49 
50  INPgetTok(&line,&nname1,1);
51  INPtermInsert(ckt,&nname1,tab,&node1);
52 
53  INPgetTok(&line,&nname2,1);
54  INPtermInsert(ckt,&nname2,tab,&node2);
55 
56  INPgetTok(&line,&nname3,1);
57  INPtermInsert(ckt,&nname3,tab,&node3);
58 
59  INPgetTok(&line,&model,1);
60  INPinsert(&model,tab);
61 
62  current->error = INPgetMod(ckt,model,&thismodel,tab);
63  if (thismodel != NULL) {
64  if (type != thismodel->INPmodType) {
66  return;
67  }
68  mdfast = (thismodel->INPmodfast);
69  }
70  else {
71  if (!tab->defUmod) {
72  /* create deafult U model */
73  IFnewUid(ckt,&uid,(IFuid)NULL,"U",UID_MODEL,(GENERIC**)NULL);
74  IFC(newModel,(ckt,type,&(tab->defUmod),uid))
75  }
76  mdfast = tab->defUmod;
77  }
78  IFC(newInstance,(ckt,mdfast,&fast,name))
79  IFC(bindNode,(ckt,fast,1,node1))
80  IFC(bindNode,(ckt,fast,2,node2))
81  IFC(bindNode,(ckt,fast,3,node3))
82  PARSECALL((&line,ckt,type,fast,&leadval,&waslead,tab))
83 }
char * line
Definition: inpdefs.h:64
int INPtermInsert()
int IFnewUid()
Definition: inpdefs.h:62
#define UID_MODEL
Definition: ifsim.h:83
Definition: subckt.c:51
#define LITERR(text)
Definition: inpmacs.h:35
int INPmodType
Definition: inpdefs.h:73
int INPinsert()
Definition: fteinp.h:14
GENERIC * IFuid
Definition: ifsim.h:72
#define NULL
Definition: spdefs.h:121
Definition: types.c:18
#define IFC(func, args)
Definition: inpmacs.h:19
char * error
Definition: inpdefs.h:65
#define PARSECALL(args)
Definition: inpmacs.h:42
static char model[32]
Definition: subckt.c:76
return(True)
GENERIC * defUmod
Definition: inpdefs.h:55
char * INPdevErr()
char GENERIC
Definition: ifsim.h:27
char * INPgetMod()
int INPgetTok()