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: 1985 Thomas L. Quarles
5          1993 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 #include "spice.h"
9 #include <stdio.h>
10 #include "cktdefs.h"
11 #include "tfdefs.h"
12 #include "jobdefs.h"
13 #include "iferrmsg.h"
14 #include "util.h"
15 #include "cktext.h"
16 
17 
18 /* ARGSUSED */
19 int
TFsetParm(cktp,anal,which,value)20 TFsetParm(cktp,anal,which,value)
21 
22 GENERIC *cktp;
23 GENERIC *anal;
24 int which;
25 IFvalue *value;
26 {
27     TFAN *job = (TFAN *) anal;
28 
29     switch (which) {
30 
31         case TF_OUTPOS:
32             job->TFoutPos = (CKTnode *)value->nValue;
33             job->TFoutIsV = TRUE;
34             job->TFoutIsI = FALSE;
35             break;
36 
37         case TF_OUTNEG:
38             job->TFoutNeg = (CKTnode *)value->nValue;
39             job->TFoutIsV = TRUE;
40             job->TFoutIsI = FALSE;
41             break;
42 
43         case TF_OUTNAME:
44             job->TFoutName = value->sValue;
45             break;
46 
47         case TF_OUTSRC:
48             job->TFoutSrc = value->uValue;
49             job->TFoutIsV = FALSE;
50             job->TFoutIsI = TRUE;
51             break;
52 
53         case TF_INSRC:
54             job->TFinSrc = value->uValue;
55             break;
56 
57         default:
58             if (ACsetp(&job->AC,which,value) == OK)
59                 return (OK);
60             if (DCTsetp(&job->DC,which,value) == OK)
61                 return (OK);
62             return (E_BADPARM);
63     }
64     return (OK);
65 }
66 
67 
68 static IFparm TFparms[] = {
69     { "outpos",   TF_OUTPOS,  IFP|IF_NODE,     "Positive output node" },
70     { "outneg",   TF_OUTNEG,  IFP|IF_NODE,     "Negative output node" },
71     { "outname",  TF_OUTNAME, IFP|IF_STRING,   "Name of output variable"},
72     { "outsrc",   TF_OUTSRC,  IFP|IF_INSTANCE, "Output source" },
73     { "insrc",    TF_INSRC,   IFP|IF_INSTANCE, "Input source" },
74     { "start",    AC_START,   IFP|IF_REAL,     "starting frequency" },
75     { "stop",     AC_STOP,    IFP|IF_REAL,     "ending frequency" },
76     { "numsteps", AC_STEPS,   IFP|IF_INTEGER,  "number of frequencies"},
77     { "dec",      AC_DEC,     IFP|IF_FLAG,     "step by decades" },
78     { "oct",      AC_OCT,     IFP|IF_FLAG,     "step by octaves" },
79     { "lin",      AC_LIN,     IFP|IF_FLAG,     "step linearly" },
80     { "name1",    DC_NAME1,   IFP|IF_INSTANCE, "name of source to step" },
81     { "start1",   DC_START1,  IFP|IF_REAL,     "starting voltage/current"},
82     { "stop1",    DC_STOP1,   IFP|IF_REAL,     "ending voltage/current" },
83     { "step1",    DC_STEP1,   IFP|IF_REAL,     "voltage/current step" },
84     { "name2",    DC_NAME2,   IFP|IF_INSTANCE, "name of source to step" },
85     { "start2",   DC_START2,  IFP|IF_REAL,     "starting voltage/current"},
86     { "stop2",    DC_STOP2,   IFP|IF_REAL,     "ending voltage/current" },
87     { "step2",    DC_STEP2,   IFP|IF_REAL,     "voltage/current step" }
88 };
89 
90 SPICEanalysis TFinfo  = {
91     {
92         "TF",
93         "transfer function analysis",
94 
95         sizeof(TFparms)/sizeof(IFparm),
96         TFparms
97     },
98     sizeof(TFAN),
99     NODOMAIN,
100     TFparse,
101     TFsetParm,
102     TFaskQuest,
103     TFan
104 };
105