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 "suffix.h"
9 #include <stdio.h>
10 #include "cktdefs.h"
11 #include "pzdefs.h"
12 #include "jobdefs.h"
13 #include "iferrmsg.h"
14 
15 
16 /* ARGSUSED */
17 int
PZsetParm(cktp,anal,which,value)18 PZsetParm(cktp,anal,which,value)
19 
20 GENERIC *cktp;
21 GENERIC *anal;
22 int which;
23 IFvalue *value;
24 {
25     switch (which) {
26 
27         case PZ_NODEI:
28             ((PZAN*)anal)->PZin_pos = ((CKTnode*)value->nValue)->number;
29             break;
30 
31         case PZ_NODEG:
32             ((PZAN*)anal)->PZin_neg = ((CKTnode*)value->nValue)->number;
33             break;
34 
35         case PZ_NODEJ:
36             ((PZAN*)anal)->PZout_pos = ((CKTnode*)value->nValue)->number;
37             break;
38 
39         case PZ_NODEK:
40             ((PZAN*)anal)->PZout_neg = ((CKTnode*)value->nValue)->number;
41             break;
42 
43         case PZ_V:
44             if(value->iValue) {
45                 ((PZAN*)anal)->PZinput_type = PZ_IN_VOL;
46             }
47             break;
48 
49         case PZ_I:
50             if(value->iValue) {
51                 ((PZAN*)anal)->PZinput_type = PZ_IN_CUR;
52             }
53             break;
54 
55         case PZ_POL:
56             if(value->iValue) {
57                 ((PZAN*)anal)->PZwhich = PZ_DO_POLES;
58             }
59             break;
60 
61         case PZ_ZER:
62             if(value->iValue) {
63                 ((PZAN*)anal)->PZwhich = PZ_DO_ZEROS;
64             }
65             break;
66 
67         case PZ_PZ:
68             if(value->iValue) {
69                 ((PZAN*)anal)->PZwhich = PZ_DO_POLES | PZ_DO_ZEROS;
70             }
71             break;
72 
73         default:
74             return (E_BADPARM);
75     }
76     return (OK);
77 }
78 
79 
80 static IFparm PZparms[] = {
81     { "nodei",  PZ_NODEI,   IF_SET|IF_ASK|IF_NODE,  "" },
82     { "nodeg",  PZ_NODEG,   IF_SET|IF_ASK|IF_NODE,  "" },
83     { "nodej",  PZ_NODEJ,   IF_SET|IF_ASK|IF_NODE,  "" },
84     { "nodek",  PZ_NODEK,   IF_SET|IF_ASK|IF_NODE,  "" },
85     { "v",      PZ_V,       IF_SET|IF_ASK|IF_FLAG,  "" },
86     { "i",      PZ_I,       IF_SET|IF_ASK|IF_FLAG,  "" },
87     { "pol",    PZ_POL,     IF_SET|IF_ASK|IF_FLAG,  "" },
88     { "zer",    PZ_ZER,     IF_SET|IF_ASK|IF_FLAG,  "" },
89     { "pz",     PZ_PZ,      IF_SET|IF_ASK|IF_FLAG,  "" }
90 };
91 
92 SPICEanalysis PZinfo  = {
93     {
94         "PZ",
95         "pole-zero analysis",
96 
97         sizeof(PZparms)/sizeof(IFparm),
98         PZparms
99     },
100     sizeof(PZAN),
101     NODOMAIN,
102     PZparse,
103     PZsetParm,
104     PZaskQuest,
105     PZan
106 };
107