00001
00002
00003
00004
00005 #define DLMAIN
00006 #define MAJOR 2
00007 #define MINOR 0
00008
00009 #include <stdlib.h>
00010 #include "gridlabd.h"
00011
00012 EXPORT int do_kill(void*);
00013
00014 EXPORT int major=MAJOR, minor=MINOR;
00015
00016 #ifdef WIN32
00017
00018 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
00019 #include <windows.h>
00020 BOOL APIENTRY DllMain( HANDLE hModule,
00021 DWORD ul_reason_for_call,
00022 LPVOID
00023 )
00024 {
00025 switch (ul_reason_for_call)
00026 {
00027 case DLL_PROCESS_ATTACH:
00028 case DLL_THREAD_ATTACH:
00029 break;
00030 case DLL_THREAD_DETACH:
00031 case DLL_PROCESS_DETACH:
00032 do_kill(hModule);
00033 break;
00034 }
00035 return TRUE;
00036 }
00037
00038 #else // !WIN32
00039
00040 CDECL int dllinit() __attribute__((constructor));
00041 CDECL int dllkill() __attribute__((destructor));
00042
00043 CDECL int dllinit()
00044 {
00045 return 0;
00046 }
00047
00048 CDECL int dllkill() {
00049 do_kill(NULL);
00050 }
00051
00052 #endif // !WIN32
00053
00054 #include "tape.h"
00055
00056 extern "C" VARMAP varmap[];
00057
00058 CDECL EXPORT int setvar(char *varname, char *value)
00059 {
00060 VARMAP *p;
00061
00062 for (p=varmap; p->name!=NULL; p++)
00063 {
00064 if (strcmp(p->name,varname)==0)
00065 {
00066 if (p->type==VT_INTEGER)
00067 {
00068 int64 v = atoi64(value);
00069 if (v>=(int64)p->min && v<=(int64)p->max)
00070 { *(int64*)(p->addr) = v; return 1;}
00071 else return 0;
00072 }
00073 else if (p->type==VT_DOUBLE)
00074 {
00075 double v = atof(value);
00076 if (v>=p->min && v<=p->max)
00077 { *(double*)(p->addr) = v; return 1;}
00078 else return 0;
00079 }
00080 else if (p->type==VT_STRING)
00081 {
00082 strncpy((char*)(p->addr),value,(unsigned)p->min-1);
00083 return 1;
00084 }
00085 }
00086 }
00087 return 0;
00088 }
00089