⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlmain.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
字号:
//////////////////////////////////////////////////////////////////////////////// Build cmextrn.h, cminfo.h, udnextrn.h and udninfo.h from udnpath.lst and// modpath.lst using 'cmpp -lst'. Then compile this file and link it with// cm and udn object files to produce a dll that can be loaded by the// spice opus simulator at run-time.//// Author: Arpad Buermen////////////////////////////////////////////////////////////////////////////// #include <inpdefs.h>#include <devdefs.h>#include <evtudn.h>#include <dllitf.h>#include "cmextrn.h"#include "udnextrn.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Do not modify anything below this line//////////////////////////////////////////////////////////////////////////////SPICEdev *cmDEVices[] = {#include "cminfo.h"	NULL};int cmDEVicesCNT = sizeof(cmDEVices)/sizeof(SPICEdev *)-1;Evt_Udn_Info_t  *cmEVTudns[] = {#include "udninfo.h"	NULL};int cmEVTudnCNT = sizeof(cmEVTudns)/sizeof(Evt_Udn_Info_t *)-1;// Pointer to core info structure containing pointers to core functions.struct coreInfo_t *coreitf;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Functions that return pointers to structures.//////////////////////////////////////////////////////////////////////////////#ifdef CM_WINDOWS#undef CM_EXPORT#define CM_EXPORT __declspec(dllexport)#endif#ifdef CM_LINUX#undef CM_EXPORT#define CM_EXPORT extern#endif// This one returns the device tableCM_EXPORT void *CMdevs() {	return (void *)cmDEVices;}// This one returns the device countCM_EXPORT void *CMdevNum() {	return (void *)&cmDEVicesCNT;}// This one returns the UDN tableCM_EXPORT void *CMudns() {	return (void *)cmEVTudns;}// This one returns the UDN countCM_EXPORT void *CMudnNum() {	return (void *)&cmEVTudnCNT;}// This one returns the pointer to the pointer to the core interface structureCM_EXPORT void *CMgetCoreItfPtr() {	return (void *)(&coreitf);}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// These functions call the real core functions of SPICE OPUS using the// pointers in coreitf structure.//////////////////////////////////////////////////////////////////////////////void MIF_INP2A(    void      *ckt,      /* circuit structure to put mod/inst structs in */    INPtables    *tab,      /* symbol table for node names, etc.            */    card         *current   /* the card we are to parse                     */	) {	(coreitf->dllitf_MIF_INP2A)(ckt,tab,current);}char * MIFgetMod(    void   *ckt,    char      *name,    INPmodel  **model,    INPtables *tab 	) {	return (coreitf->dllitf_MIFgetMod)(ckt,name,model,tab);}IFvalue * MIFgetValue(    void   *ckt,    char      **line,    int       type,    INPtables *tab,    char      **err 	) {	return (coreitf->dllitf_MIFgetValue)(ckt,line,type,tab,err);}int MIFsetup(    SMPmatrix     *matrix,    GENmodel      *inModel,    CKTcircuit    *ckt,    int           *state 	) {	return (coreitf->dllitf_MIFsetup)(matrix,inModel,ckt,state);}int MIFunsetup(    GENmodel      *inModel,    CKTcircuit    *ckt) {        return (coreitf->dllitf_MIFunsetup)(inModel,ckt);}int MIFload(    GENmodel      *inModel,    CKTcircuit    *ckt 	) {	return (coreitf->dllitf_MIFload)(inModel,ckt);}int MIFmParam(    int param_index,    IFvalue *value,    GENmodel *inModel 	) {	return (coreitf->dllitf_MIFmParam)(param_index,value,inModel);}int MIFask(    CKTcircuit *ckt,    GENinstance *inst,    int param_index,    IFvalue *value,    IFvalue *select	) {	return (coreitf->dllitf_MIFask)(ckt,inst,param_index,value,select);}int MIFmAsk(    CKTcircuit *ckt,    GENmodel *inModel,    int param_index,    IFvalue *value	) {	return (coreitf->dllitf_MIFmAsk)(ckt,inModel,param_index,value);}int MIFtrunc(    GENmodel   *inModel,    CKTcircuit *ckt,    double     *timeStep	) {	return (coreitf->dllitf_MIFtrunc)(inModel,ckt,timeStep);}int MIFconvTest(    GENmodel   *inModel,    CKTcircuit *ckt	) {	return (coreitf->dllitf_MIFconvTest)(inModel,ckt);}int MIFdelete(    GENmodel *inModel,    IFuid    name,    GENinstance  **inst	) {	return (coreitf->dllitf_MIFdelete)(inModel,name,inst);}int MIFmDelete(    GENmodel **inModel,    IFuid    modname,    GENmodel *model	) {	return (coreitf->dllitf_MIFmDelete)(inModel,modname,model);}void MIFdestroy(    GENmodel **inModel	) {	(coreitf->dllitf_MIFdestroy)(inModel);}char  *MIFgettok(    char **s	) {	return (coreitf->dllitf_MIFgettok)(s);}char  *MIFget_token(    char **s,    Mif_Token_Type_t *type	) {	return (coreitf->dllitf_MIFget_token)(s,type);}Mif_Cntl_Src_Type_t MIFget_cntl_src_type(    Mif_Port_Type_t in_port_type,    Mif_Port_Type_t out_port_type	) {	return (coreitf->dllitf_MIFget_cntl_src_type)(in_port_type,out_port_type);}char *MIFcopy(char *c) {	return (coreitf->dllitf_MIFcopy)(c);}void cm_climit_fcn(double in, double in_offset, double cntl_upper,                    double cntl_lower, double lower_delta,                    double upper_delta, double limit_range,                    double gain, int percent, double *out_final,                   double *pout_pin_final, double *pout_pcntl_lower_final,                   double *pout_pcntl_upper_final) {	(coreitf->dllitf_cm_climit_fcn)(in,in_offset,cntl_upper,cntl_lower,lower_delta,		                            upper_delta,limit_range,gain,percent,out_final,									pout_pin_final,pout_pcntl_lower_final,									pout_pcntl_upper_final);}void cm_smooth_corner(double x_input, double x_center, double y_center,                 double domain, double lower_slope, double upper_slope,                 double *y_output, double *dy_dx) {	(coreitf->dllitf_cm_smooth_corner)(x_input,x_center,y_center,domain,lower_slope,		                               upper_slope,y_output,dy_dx);}void cm_smooth_discontinuity(double x_input, double x_lower, double y_lower,                 double x_upper, double y_upper,                  double *y_output, double *dy_dx) {	(coreitf->dllitf_cm_smooth_discontinuity)(x_input,x_lower,y_lower,x_upper,y_upper,		                                      y_output,dy_dx);}double cm_smooth_pwl(double x_input, double *x, double *y, int size,					 double input_domain, double *dout_din) {	return (coreitf->dllitf_cm_smooth_pwl)(x_input,x,y,size,input_domain,dout_din);}double cm_analog_ramp_factor(void) {	return (coreitf->dllitf_cm_analog_ramp_factor)();}void *cm_analog_alloc(int tag, int bytes) {	return (coreitf->dllitf_cm_analog_alloc)(tag,bytes);}void *cm_analog_get_ptr(int tag, int timepoint) {	return (coreitf->dllitf_cm_analog_get_ptr)(tag,timepoint);}int  cm_analog_integrate(double integrand, double *integral, double *partial) {	return (coreitf->dllitf_cm_analog_integrate)(integrand,integral,partial);}int  cm_analog_converge(double *state) {	return (coreitf->dllitf_cm_analog_converge)(state);}int  cm_analog_set_temp_bkpt(double time) {	return (coreitf->dllitf_cm_analog_set_temp_bkpt)(time);}int  cm_analog_set_perm_bkpt(double time) {	return (coreitf->dllitf_cm_analog_set_perm_bkpt)(time);}void cm_analog_not_converged(void) {	(coreitf->dllitf_cm_analog_not_converged)();}void cm_analog_auto_partial(void) {	(coreitf->dllitf_cm_analog_auto_partial)();}void *cm_event_alloc(int tag, int bytes){	return (coreitf->dllitf_cm_event_alloc)(tag,bytes);}void *cm_event_get_ptr(int tag, int timepoint) {	return (coreitf->dllitf_cm_event_get_ptr)(tag,timepoint);}int  cm_event_queue(double time) {	return (coreitf->dllitf_cm_event_queue)(time);}char *cm_message_get_errmsg(void) {	return (coreitf->dllitf_cm_message_get_errmsg)();}int  cm_message_send(char *msg) {	return (coreitf->dllitf_cm_message_send)(msg);}double cm_netlist_get_c(void) {	return (coreitf->dllitf_cm_netlist_get_c)();}double cm_netlist_get_l(void) {	return (coreitf->dllitf_cm_netlist_get_l)();}Complex_t cm_complex_set(double real, double imag) {	return (coreitf->dllitf_cm_complex_set)(real,imag);}Complex_t cm_complex_add(Complex_t x, Complex_t y) {	return (coreitf->dllitf_cm_complex_add)(x,y);}Complex_t cm_complex_subtract(Complex_t x, Complex_t y) {	return (coreitf->dllitf_cm_complex_subtract)(x,y);}Complex_t cm_complex_multiply(Complex_t x, Complex_t y) {	return (coreitf->dllitf_cm_complex_multiply)(x,y);}Complex_t cm_complex_divide(Complex_t x, Complex_t y) {	return (coreitf->dllitf_cm_complex_divide)(x,y);}FILE * cm_stream_out(void) {	return (coreitf->dllitf_cm_stream_out)();}FILE * cm_stream_in(void) {	return (coreitf->dllitf_cm_stream_in)();}FILE * cm_stream_err(void) {	return (coreitf->dllitf_cm_stream_err)();}void * malloc_pj(size_t s) {	return (coreitf->dllitf_malloc_pj)(s);}void * calloc_pj(size_t s1, size_t s2) {	return (coreitf->dllitf_calloc_pj)(s1,s2);}void * realloc_pj(void *ptr, size_t s) {	return (coreitf->dllitf_realloc_pj)(ptr,s);}void free_pj(void *ptr) {	(coreitf->dllitf_free_pj)(ptr);}char * tmalloc(int s) {	return (coreitf->dllitf_tmalloc)(s);}char * trealloc(char *ptr, int s) {	return (coreitf->dllitf_trealloc)(ptr,s);}void txfree(char *ptr) {	(coreitf->dllitf_txfree)(ptr);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -