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: 1985 Thomas L. Quarles 5 1987 Kanwar Jit Singh 6 1992 Stephen R. Whiteley 7 ****************************************************************************/ 8 9 #include "spice.h" 10 #include <stdio.h> 11 #include "srcdefs.h" 12 #include "sperror.h" 13 #include "util.h" 14 15 16 /* ARGSUSED */ 17 int SRCparam(ckt,param,value,inst,select)18SRCparam(ckt,param,value,inst,select) 19 20 CKTcircuit *ckt; 21 int param; 22 IFvalue *value; 23 GENinstance *inst; 24 IFvalue *select; 25 { 26 SRCinstance *here = (SRCinstance *)inst; 27 28 switch (param) { 29 case SRC_I: 30 if (here->SRCtype) 31 return (E_BADPARM); 32 here->SRCtype = SRC_I; 33 here->SRCtree = value->tValue; 34 break; 35 case SRC_V: 36 if (here->SRCtype) 37 return (E_BADPARM); 38 here->SRCtype = SRC_V; 39 here->SRCtree = value->tValue; 40 break; 41 case SRC_DEP: 42 if (here->SRCdep) 43 return (E_BADPARM); 44 switch (value->iValue) { 45 case 'A': 46 break; 47 case 'I': 48 if (here->SRCtype) 49 return (E_BADPARM); 50 here->SRCtype = SRC_I; 51 break; 52 case 'V': 53 if (here->SRCtype) 54 return (E_BADPARM); 55 here->SRCtype = SRC_V; 56 break; 57 case 'E': 58 if (here->SRCtype) 59 return (E_BADPARM); 60 here->SRCtype = SRC_V; 61 here->SRCdep = SRC_VC; 62 break; 63 case 'F': 64 if (here->SRCtype) 65 return (E_BADPARM); 66 here->SRCtype = SRC_I; 67 here->SRCdep = SRC_CC; 68 break; 69 case 'G': 70 if (here->SRCtype) 71 return (E_BADPARM); 72 here->SRCtype = SRC_I; 73 here->SRCdep = SRC_VC; 74 break; 75 case 'H': 76 if (here->SRCtype) 77 return (E_BADPARM); 78 here->SRCtype = SRC_V; 79 here->SRCdep = SRC_CC; 80 break; 81 default: 82 return (E_BADPARM); 83 } 84 break; 85 case SRC_DC: 86 here->SRCdcValue = value->rValue; 87 here->SRCdcGiven = TRUE; 88 break; 89 case SRC_AC: 90 switch(value->v.numValue) { 91 case 2: 92 here->SRCacPhase = *(value->v.vec.rVec+1); 93 here->SRCacPGiven = TRUE; 94 case 1: 95 here->SRCacMag = *(value->v.vec.rVec); 96 here->SRCacMGiven = TRUE; 97 case 0: 98 here->SRCacGiven = TRUE; 99 break; 100 default: 101 return(E_BADPARM); 102 } 103 break; 104 case SRC_AC_MAG: 105 here->SRCacMag = value->rValue; 106 here->SRCacMGiven = TRUE; 107 here->SRCacGiven = TRUE; 108 break; 109 case SRC_AC_PHASE: 110 here->SRCacPhase = value->rValue; 111 here->SRCacPGiven = TRUE; 112 here->SRCacGiven = TRUE; 113 break; 114 case SRC_FUNC: 115 if (here->SRCtree) return E_BADPARM; 116 here->SRCtree = value->tValue; 117 break; 118 case SRC_D_F1: 119 here->SRCdF1given = TRUE; 120 here->SRCdGiven = TRUE; 121 switch (value->v.numValue) { 122 case 2: 123 here->SRCdF1phase = *(value->v.vec.rVec+1); 124 here->SRCdF1mag = *(value->v.vec.rVec); 125 break; 126 case 1: 127 here->SRCdF1mag = *(value->v.vec.rVec); 128 here->SRCdF1phase = 0.0; 129 break; 130 case 0: 131 here->SRCdF1mag = 1.0; 132 here->SRCdF1phase = 0.0; 133 break; 134 default: 135 return(E_BADPARM); 136 } 137 break; 138 case SRC_D_F2: 139 here->SRCdF2given = TRUE; 140 here->SRCdGiven = TRUE; 141 switch (value->v.numValue) { 142 case 2: 143 here->SRCdF2phase = *(value->v.vec.rVec+1); 144 here->SRCdF2mag = *(value->v.vec.rVec); 145 break; 146 case 1: 147 here->SRCdF2mag = *(value->v.vec.rVec); 148 here->SRCdF2phase = 0.0; 149 break; 150 case 0: 151 here->SRCdF2mag = 1.0; 152 here->SRCdF2phase = 0.0; 153 break; 154 default: 155 return(E_BADPARM); 156 } 157 break; 158 case SRC_GAIN: 159 if (here->SRCccCoeffGiven || here->SRCvcCoeffGiven) 160 return (E_BADPARM); 161 here->SRCcoeff = value->rValue; 162 if (here->SRCdep == SRC_CC) 163 here->SRCccCoeffGiven = TRUE; 164 else if (here->SRCdep == SRC_VC) 165 here->SRCvcCoeffGiven = TRUE; 166 else 167 return (E_BADPARM); 168 break; 169 case SRC_CONTROL: 170 here->SRCcontName = value->uValue; 171 break; 172 default: 173 return(E_BADPARM); 174 } 175 return (OK); 176 } 177