Jspice3
dctprse.c
Go to the documentation of this file.
1 /***************************************************************************
2 JSPICE3 adaptation of Spice3f2 - 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 "ftedefs.h"
10 #include "inpdefs.h"
11 #include "inpmacs.h"
12 #include "misc.h"
13 
14 /* ARGSUSED */
15 int
16 DCTparse(ckt,tab,which,currentp,line,task,gnode)
17 
18 /*
19  .dc SRC1NAME Vstart1 [Vstop1 [Vinc1]]
20  [SRC2NAME Vstart2 [Vstop2 [Vinc2]]]
21 */
22 GENERIC *ckt;
23 INPtables *tab;
24 int which;
25 GENERIC *currentp;
26 char **line;
27 GENERIC *task;
28 GENERIC *gnode;
29 {
30  GENERIC *foo; /* pointer to analysis */
31  int error; /* error code temporary */
32  card *current = (card *)currentp;
33 
34  IFC(newAnalysis,(ckt,which,"DCtransferCurve",&foo, task))
35 
36  GCA(ParseDC,(ckt,line,current,which,foo,tab,1))
37 
38  if (**line) {
39  GCA(ParseDC,(ckt,line,current,which,foo,tab,2))
40  }
41  return (0);
42 }
43 
44 
45 int
46 ParseDC(ckt,line,current,which,aptr,tab,index)
47 
48 GENERIC *ckt;
49 char **line;
50 card *current;
51 int which;
52 GENERIC *aptr;
53 INPtables *tab;
54 int index;
55 {
56  char *name; /* the device's name */
57  IFvalue ptemp; /* a value structure to package stuff into */
58  int error; /* error code temporary */
59  double vstart, vstop, vstep;
60  char buf[32];
61 
62  INPgetTok(line,&name,1);
63  strtolower(name);
64  INPinsert(&name,tab);
65  ptemp.uValue = name;
66  sprintf(buf,"name%d",index);
67  GCA(INPapName,(ckt,which,aptr,buf,&ptemp))
68 
69  vstart = INPevaluate(line,&error,1); /* vstart */
70  if (error == 0) {
71  ptemp.rValue = vstart;
72  sprintf(buf,"start%d",index);
73  GCA(INPapName,(ckt,which,aptr,buf,&ptemp))
74  }
75  else {
76  LITERR("Bad vstart parameter.")
77  }
78 
79  vstop = INPevaluate(line,&error,1); /* vstop? */
80  if (error == 0) {
81  ptemp.rValue = vstop;
82  sprintf(buf,"stop%d",index);
83  GCA(INPapName,(ckt,which,aptr,buf,&ptemp))
84  vstep = INPevaluate(line,&error,1); /* vstep? */
85  if (error == 0)
86  ptemp.rValue = vstep;
87  else
88  ptemp.rValue = vstop - vstart;
89  sprintf(buf,"step%d",index);
90  GCA(INPapName,(ckt,which,aptr,buf,&ptemp))
91  }
92  else {
93  ptemp.rValue = vstart;
94  sprintf(buf,"stop%d",index);
95  GCA(INPapName,(ckt,which,aptr,buf,&ptemp))
96  ptemp.rValue = 0.0;
97  sprintf(buf,"step%d",index);
98  GCA(INPapName,(ckt,which,aptr,buf,&ptemp))
99  }
100 
101  return (0);
102 }
static char buf[MAXPROMPT]
Definition: arg.c:18
int DCTparse(GENERIC *ckt, INPtables *tab, int which, GENERIC *currentp, char **line, GENERIC *task, GENERIC *gnode)
Definition: dctprse.c:16
int ParseDC(GENERIC *ckt, char **line, card *current, int which, GENERIC *aptr, INPtables *tab, int index)
Definition: dctprse.c:46
Definition: inpdefs.h:62
double INPevaluate()
Definition: subckt.c:51
double rValue
Definition: ifsim.h:233
#define LITERR(text)
Definition: inpmacs.h:35
int INPinsert()
Definition: fteinp.h:14
void strtolower()
#define GCA(func, args)
Definition: inpmacs.h:27
#define IFC(func, args)
Definition: inpmacs.h:19
int INPapName()
char * index(char *s, char c) const
Definition: string.c:294
char GENERIC
Definition: ifsim.h:27
IFuid uValue
Definition: ifsim.h:236
int INPgetTok()