diff options
Diffstat (limited to 'plugins/models-jspice3-2.5/Include.3f5/ifsim.h')
| -rw-r--r-- | plugins/models-jspice3-2.5/Include.3f5/ifsim.h | 531 |
1 files changed, 0 insertions, 531 deletions
diff --git a/plugins/models-jspice3-2.5/Include.3f5/ifsim.h b/plugins/models-jspice3-2.5/Include.3f5/ifsim.h deleted file mode 100644 index 1066f9cb..00000000 --- a/plugins/models-jspice3-2.5/Include.3f5/ifsim.h +++ /dev/null @@ -1,531 +0,0 @@ -/********** -Copyright 1990 Regents of the University of California. All rights reserved. -Author: 1986 Thomas L. Quarles -**********/ - -#ifndef IFSIMULATOR -#define IFSIMULATOR - -/* - * We don't always have access to an ANSI C compiler yet, so we - * make the following convenient definition - */ - -#ifdef __STDC__ - - /* using an ansi C compiler, so we have the void* construct */ - -typedef void GENERIC; - -#else - - /* not using an ansi C compiler, so we have to use char* as the */ - /* most generic pointer type */ - -typedef char GENERIC; - -#endif -/* - * structure: IFparm - * - * - * The structure used to describe all values passed - * between the front end and the simulator when there is any - * possibility one argument of the function could have more - * than one type. - * - * keyword is provided for the front end and is the token - * the user is expected to label the data with. - * - * id is an integer intended to uniquely identify the parameter - * to the simulator - * - * dataType is an integer which indicates the type of argument - * that must be passed for this parameter - * - * description is a longer description intended for help menus - * the description should all fit on one line, but should - * give a knowledgable user a good idea what the parameter is - * used for. - */ - -typedef struct sIFparm { - char *keyword; - int id; - int dataType; - char *description; -} IFparm; - -/* - * - * datatype: IFuid - * - * unique identifier for all name-type data in the simulator. - * this permits the front end to use something other than - * a unique, fully qualified character string to identify - * an object. - * - */ - -typedef GENERIC *IFuid; - -/* - * - * types for IFnewUid - * - */ - -#define UID_ANALYSIS 0x1 -#define UID_TASK 0x2 -#define UID_INSTANCE 0x4 -#define UID_MODEL 0x8 -#define UID_SIGNAL 0x10 -#define UID_OTHER 0x20 - - -/* - * dataType values: - * - * Note: These structures are put together by ORing together the - * appropriate bits from the fields below as is shown for the vector - * types. - * IF_REQUIRED indicates that the parameter must be specified. - * The front end does not NEED to check for this, but can to save time, - * since failure to do so will cause the simulator to fail. - * IF_SET indicates that the specified item is an input parameter. - * IF_ASK indicates that the specified item is something the simulator - * can provide information about. - * IF_SET and IF_ASK are NOT mutually exclusive. - * if IF_SET and IF_ASK are both zero, it indicates a parameter that - * the simulator recoginizes are being a reasonable paremeter, but - * which this simulator does not implement. - */ - -#define IF_FLAG 0x1 -#define IF_INTEGER 0x2 -#define IF_REAL 0x4 -#define IF_COMPLEX 0x8 -#define IF_NODE 0x10 -#define IF_STRING 0x20 -#define IF_INSTANCE 0x40 -#define IF_PARSETREE 0x80 - -/* indicates that for a query the integer field will have a selector - * in it to pick a sub-field */ -#define IF_SELECT 0x800 -#define IF_VSELECT 0x400 - -/* indicates a vector of the specified type */ -#define IF_VECTOR 0x8000 - -#define IF_FLAGVEC (IF_FLAG|IF_VECTOR) -#define IF_INTVEC (IF_INTEGER|IF_VECTOR) -#define IF_REALVEC (IF_REAL|IF_VECTOR) -#define IF_CPLXVEC (IF_COMPLEX|IF_VECTOR) -#define IF_NODEVEC (IF_NODE|IF_VECTOR) -#define IF_STRINGVEC (IF_STRING|IF_VECTOR) -#define IF_INSTVEC (IF_INSTANCE|IF_VECTOR) - -#define IF_REQUIRED 0x4000 - -#define IF_VARTYPES 0x80ff - -#define IF_SET 0x2000 -#define IF_ASK 0x1000 - -/* If you AND with IF_UNIMP_MASK and get 0, it is recognized, but not - * implemented - */ -#define IF_UNIMP_MASK (~0xfff) - -/* Used by sensetivity to check if a parameter is or is not useful */ -#define IF_REDUNDANT 0x0010000 -#define IF_PRINCIPAL 0x0020000 -#define IF_AC 0x0040000 -#define IF_AC_ONLY 0x0080000 -#define IF_NOISE 0x0100000 -#define IF_NONSENSE 0x0200000 - -#define IF_SETQUERY 0x0400000 -#define IF_ORQUERY 0x0800000 -#define IF_CHKQUERY 0x1000000 - -/* For "show" command: do not print value in a table by default */ -#define IF_UNINTERESTING 0x2000000 - -/* Structure: IFparseTree - * - * This structure is returned by the parser for a IF_PARSETREE valued - * parameter and describes the information that the simulator needs - * to know about the parse tree in order to use it. - * It is expected that the front end will have a more extensive - * structure which this structure will be a prefix of. - * - * Note that the function pointer is provided as a hook for - * versions which may want to compile code for the parse trees - * if they are used heavily. - * - */ - -typedef struct sIFparseTree { - int numVars; /* number of variables used */ - int *varTypes; /* array of types of variables */ - union uIFvalue * vars; /* array of structures describing values */ -#ifdef __STDC__ - int ((*IFeval)(struct sIFparseTree*,double,double*,double*,double*)); -#else - int ((*IFeval)()); /* function to call to get evaluated */ -#endif /* STDC */ -} IFparseTree; - - -/* - * Structure: IFvalue - * - * structure used to pass the values corresponding to the above - * dataType. All types are passed in one of these structures, with - * relatively simple rules concerning the handling of the structure. - * - * whoever makes the subroutine call allocates a single instance of the - * structure. The basic data structure belongs to you, and you - * should arrange to free it when appropriate. - * - * The responsibilities of the data supplier are: - * Any vectors referenced by the structure are to be malloc()'d - * and are assumed to have been turned over to the recipient and - * thus should not be re-used or free()'d. - * - * The responsibilities of the data recipient are: - * scalar valued data is to be copied by the recipient - * vector valued data is now the property of the recipient, - * and must be free()'d when no longer needed. - * - * Character strings are a special case: Since it is assumed - * that all character strings are directly descended from input - * tokens, it is assumed that they are static, thus nobody - * frees them until the circuit is deleted, when the front end - * may do so. - * - * EVERYBODY's responsibility is to be SURE that the right data - * is filled in and read out of the structure as per the IFparm - * structure describing the parameter being passed. Programs - * neglecting this rule are fated to die of data corruption - * - */ - -/* - * Some preliminary definitions: - * - * IFnode's are returned by the simulator, thus we don't really - * know what they look like, just that we get to carry pointers - * to them around all the time, and will need to save them occasionally - * - */ - - -typedef void * IFnode; - -/* - * and of course, the standard complex data type - */ -typedef struct sIFcomplex { - double real; - double imag; -} IFcomplex; - - -typedef union uIFvalue { - int iValue; /* integer or flag valued data */ - double rValue; /* real valued data */ - IFcomplex cValue; /* complex valued data */ - char *sValue; /* string valued data */ - IFuid uValue; /* UID valued data */ - IFnode nValue; /* node valued data */ - IFparseTree *tValue; /* parse tree */ - struct { - int numValue; /* length of vector */ - union { - int *iVec; /* pointer to integer vector */ - double *rVec; /* pointer to real vector */ - IFcomplex *cVec;/* pointer to complex vector */ - char **sVec; /* pointer to string vector */ - IFuid *uVec; /* pointer to UID vector */ - IFnode *nVec; /* pointer to node vector */ - }vec; - }v; -} IFvalue; - - -/* - * structure: IFdevice - * - * This structure contains all the information available to the - * front end about a particular device. The simulator will - * present the front end with an array of pointers to these structures - * which it will use to determine legal device types and parameters. - * - * Note to simulators: you are passing an array of pointers to - * these structures, so you may in fact make this the first component - * in a larger, more complex structure which includes other data - * which you need, but which is not needed in the common - * front end interface. - * - */ - -typedef struct sIFdevice { - const char *name; /* name of this type of device */ - const char *description; /* description of this type of device */ - - int *terms; /* number of terminals on this device */ - int *numNames; /* number of names in termNames */ - char **termNames; /* pointer to array of pointers to names */ - /* array contains 'terms' pointers */ - - int *numInstanceParms; /* number of instance parameter descriptors */ - IFparm *instanceParms; /* array of instance parameter descriptors */ - - int *numModelParms; /* number of model parameter descriptors */ - IFparm *modelParms; /* array of model parameter descriptors */ - -#ifndef SPICE_3e - int flags; /* DEV_ */ -#endif - -} IFdevice; - - -/* - * Structure: IFanalysis - * - * This structure contains all the information available to the - * front end about a particular analysis type. The simulator will - * present the front end with an array of pointers to these structures - * which it will use to determine legal analysis types and parameters. - * - * Note to simulators: As for IFdevice above, you pass an array of pointers - * to these, so you can make this structure a prefix to a larger structure - * which you use internally. - * - */ - -typedef struct sIFanalysis { - char *name; /* name of this analysis type */ - char *description; /* description of this type of analysis */ - - int numParms; /* number of analysis parameter descriptors */ - IFparm *analysisParms; /* array of analysis parameter descriptors */ - -} IFanalysis; - - -/* - * Structure: IFsimulator - * - * This is what we have been leading up to all along. - * This structure describes a simulator to the front end, and is - * returned from the SIMinit command to the front end. - * This is where all those neat structures we described in the first - * few hundred lines of this file come from. - * - */ - -typedef struct sIFsimulator { - char *simulator; /* the simulator's name */ - char *description; /* description of this simulator */ - char *version; /* version or revision level of simulator*/ - -#ifdef __STDC__ - int ((*newCircuit)(GENERIC **)); - /* create new circuit */ - int ((*deleteCircuit)(GENERIC *)); - /* destroy old circuit's data structures*/ - - int ((*newNode)(GENERIC *,GENERIC**,IFuid)); - /* create new node */ - int ((*groundNode)(GENERIC*,GENERIC**,IFuid)); - /* create ground node */ - int ((*bindNode)(GENERIC *,GENERIC*,int,GENERIC*)); - /* bind a node to a terminal */ - int ((*findNode)(GENERIC *,GENERIC**,IFuid)); - /* find a node by name */ - int ((*instToNode)(GENERIC *,GENERIC *,int,GENERIC **,IFuid *)); - /* find the node attached to a terminal */ - int ((*setNodeParm)(GENERIC*,GENERIC*,int,IFvalue*,IFvalue*)); - /* set a parameter on a node */ - int ((*askNodeQuest)(GENERIC*,GENERIC*,int,IFvalue*,IFvalue*)); - /* ask a question about a node */ - int ((*deleteNode)(GENERIC*,GENERIC*)); - /* delete a node from the circuit */ - - int ((*newInstance)(GENERIC*,GENERIC*,GENERIC**,IFuid)); - /* create new instance */ - int ((*setInstanceParm)(GENERIC*,GENERIC*,int,IFvalue*,IFvalue*)); - /* set a parameter on an instance */ - int ((*askInstanceQuest)(GENERIC*,GENERIC*,int,IFvalue*,IFvalue*)); - /* ask a question about an instance */ - int ((*findInstance)(GENERIC*,int*,GENERIC**,IFuid,GENERIC*,IFuid)); - /* find a specific instance */ - int ((*deleteInstance)(GENERIC*,GENERIC*)); - /* delete an instance from the circuit */ - - int ((*newModel)(GENERIC*,int,GENERIC**,IFuid)); - /* create new model */ - int ((*setModelParm)(GENERIC*,GENERIC*,int,IFvalue*,IFvalue*)); - /* set a parameter on a model */ - int ((*askModelQuest)(GENERIC*,GENERIC*,int,IFvalue*,IFvalue*)); - /* ask a questions about a model */ - int ((*findModel)(GENERIC*,int*,GENERIC**,IFuid)); - /* find a specific model */ - int ((*deleteModel)(GENERIC*,GENERIC*)); - /* delete a model from the circuit*/ - - int ((*newTask)(GENERIC*,GENERIC**,IFuid)); - /* create a new task */ - int ((*newAnalysis)(GENERIC*,int,IFuid,GENERIC**,GENERIC*)); - /* create new analysis within a task */ - int ((*setAnalysisParm)(GENERIC*,GENERIC*,int,IFvalue*,IFvalue*)); - /* set a parameter on an analysis */ - int ((*askAnalysisQuest)(GENERIC*,GENERIC*,int,IFvalue*,IFvalue*)); - /* ask a question about an analysis */ - int ((*findAnalysis)(GENERIC*,int*,GENERIC**,IFuid,GENERIC*,IFuid)); - /* find a specific analysis */ - int ((*findTask)(GENERIC*,GENERIC**,IFuid)); - /* find a specific task */ - int ((*deleteTask)(GENERIC*,GENERIC*)); - /* delete a task */ - - int ((*doAnalyses)(GENERIC*,int,GENERIC*)); - char *((*nonconvErr)(GENERIC*,char *)); /* return nonconvergence error */ -#else - int ((*newCircuit)()); /* create new circuit */ - int ((*deleteCircuit)()); /* destroy old circuit's data structures */ - - int ((*newNode)()); /* create new node */ - int ((*groundNode)()); /* create ground node */ - int ((*bindNode)()); /* bind a node to a terminal */ - int ((*findNode)()); /* find a node by name */ - int ((*instToNode)()); /* find the node attached to a terminal */ - int ((*setNodeParm)()); /* set a parameter on a node */ - int ((*askNodeQuest)()); /* ask a question about a node */ - int ((*deleteNode)()); /* delete a node from the circuit */ - - int ((*newInstance)()); /* create new instance */ - int ((*setInstanceParm)()); /* set a parameter on an instance */ - int ((*askInstanceQuest)()); /* ask a question about an instance */ - int ((*findInstance)()); /* find a specific instance */ - int ((*deleteInstance)()); /* delete an instance from the circuit */ - - int ((*newModel)()); /* create new model */ - int ((*setModelParm)()); /* set a parameter on a model */ - int ((*askModelQuest)()); /* ask a questions about a model */ - int ((*findModel)()); /* find a specific model */ - int ((*deleteModel)()); /* delete a model from the circuit*/ - - int ((*newTask)()); /* create a new task */ - int ((*newAnalysis)()); /* create new analysis within a task */ - int ((*setAnalysisParm)()); /* set a parameter on an analysis */ - int ((*askAnalysisQuest)()); /* ask a question about an analysis */ - int ((*findAnalysis)()); /* find a specific analysis */ - int ((*findTask)()); /* find a specific task */ - int ((*deleteTask)()); /* delete a task */ - - int ((*doAnalyses)()); /* run a specified task */ - char *((*nonconvErr)()); /* return nonconvergence error */ -#endif /* STDC */ - - int numDevices; /* number of device types supported */ - IFdevice **devices; /* array of device type descriptors */ - - int numAnalyses; /* number of analysis types supported */ - IFanalysis **analyses; /* array of analysis type descriptors */ - - int numNodeParms; /* number of node parameters supported */ - IFparm *nodeParms; /* array of node parameter descriptors */ - - int numSpecSigs; /* number of special signals legal in parse trees */ - char **specSigs; /* names of special signals legal in parse trees */ - -} IFsimulator; - -/* - * Structure: IFfrontEnd - * - * This structure provides the simulator with all the information - * it needs about the front end. This is the entire set of - * front end and back end related routines the simulator - * should know about. - * - */ - -typedef struct sIFfrontEnd { -#ifdef __STDC__ - int ((*IFnewUid)(GENERIC*,IFuid*,IFuid,char*,int,GENERIC**)); - /* create a new UID in the circuit */ - int ((*IFdelUid)(GENERIC*,IFuid,int)); - /* create a new UID in the circuit */ - int ((*IFpauseTest)(void)); - /* should we stop now? */ - double ((*IFseconds)(void)); - /* what time is it? */ - int ((*IFerror)(int,char*,IFuid*)); - /* output an error or warning message */ - int ((*OUTpBeginPlot)(GENERIC*,GENERIC*,IFuid,IFuid,int, - int,IFuid*,int,GENERIC**)); - /* start pointwise output plot */ - int ((*OUTpData)(GENERIC*,IFvalue*,IFvalue*)); - /* data for pointwise plot */ - int ((*OUTwBeginPlot)(GENERIC*,GENERIC*,IFuid,IFuid,int, - int,IFuid*,int,GENERIC**)); - /* start windowed output plot */ - int ((*OUTwReference)(GENERIC*,IFvalue*,GENERIC**)); - /* independent vector for windowed plot */ - int ((*OUTwData)(GENERIC*,int,IFvalue*,GENERIC*)); - /* data for windowed plot */ - int ((*OUTwEnd)(GENERIC*)); - /* signal end of windows */ - int ((*OUTendPlot)(GENERIC*)); - /* end of plot */ - int ((*OUTbeginDomain)(GENERIC*,IFuid,int,IFvalue*)); - /* start nested domain */ - int ((*OUTendDomain)(GENERIC*)); - /* end nested domain */ - int ((*OUTattributes)(GENERIC *,IFuid*,int,IFvalue*)); - /* specify output attributes of node */ -#else /* not STDC */ - int ((*IFnewUid)()); /* create a new UID in the circuit */ - int ((*IFdelUid)()); /* create a new UID in the circuit */ - int ((*IFpauseTest)()); /* should we stop now? */ - double ((*IFseconds)()); /* what time is it? */ - int ((*IFerror)()); /* output an error or warning message */ - int ((*OUTpBeginPlot)()); /* start pointwise output plot */ - int ((*OUTpData)()); /* data for pointwise plot */ - int ((*OUTwBeginPlot)()); /* start windowed output plot */ - int ((*OUTwReference)()); /* independent vector for windowed plot */ - int ((*OUTwData)()); /* data for windowed plot */ - int ((*OUTwEnd)()); /* signal end of windows */ - int ((*OUTendPlot)()); /* end of plot */ - int ((*OUTbeginDomain)()); /* start nested domain */ - int ((*OUTendDomain)()); /* end nested domain */ - int ((*OUTattributes)()); /* specify output attributes of node */ -#endif /* STDC */ -} IFfrontEnd; - -/* flags for the first argument to IFerror */ -#define ERR_WARNING 0x1 -#define ERR_FATAL 0x2 -#define ERR_PANIC 0x4 -#define ERR_INFO 0x8 - - /* valid values for the second argument to doAnalyses */ - - /* continue the analysis from where we left off */ -#define RESUME 0 - /* start everything over from the beginning of this task*/ -#define RESTART 1 - /* abandon the current analysis and go on the the next in the task*/ -#define SKIPTONEXT 2 - -#define OUT_SCALE_LIN 1 -#define OUT_SCALE_LOG 2 - -#endif /*IFSIMULATOR*/ |
