#tarpack-dll-1.0/ 777 0 0 0 10323361556 6572 5#tarpack-dll-1.0/#tarpack-loadscript-dll-1.0.tcl 777 0 0 4151 10323361577 14264 0 #START-tarpack-loadscript-header---------------------------------------------------------------------------- # #If there is data above this header, then this is a tarpack. Do not edit the code whilst in 'packed' form. # #If there is no data above the header, it is an unpacked fragment of a tarpack and may be edited. #Make sure however that your editor preserves the trailing ctrl-z as the final character. # # A tarpack is a valid tar archive in which the first archived file consists of tcl script # containing a leading newline and a final ctrl-z to tell Tcl when it has reached the end of this initialisation # section (and thus to stop interpreting). # The tarball should have its contents within a single directory named #tarpack-- # This first file in the tarball must be named with the prefix #tarpack-loadscript # # This header and the call to tarpack::disconnect are needed to: # a) redirect to unwrapped version of the tarpack # b) enable sourcing & loading of other files contained in the tarpack set TEMP_auto_path $::auto_path; set ::auto_path [list] if {![catch {package require tarpack}]} { #Do not wrap 'tarpack::connect' in its own 'catch'! #for unwrapped execution, tarpack::connect may need to abort the 'source' operation using returneval. set ::auto_path $TEMP_auto_path; unset TEMP_auto_path tarpack::connect [info script] } else { set ::auto_path $TEMP_auto_path; unset TEMP_auto_path } # #END-tarpack-loadscript-header------------------------------------------------------------------------------ #Basic auto-generated tarpack-script. # - sources all .tcl files # - loads all files with known loadable extensions tarpack::load #tarpack-dll-1.0/dll.dll tarpack::source #tarpack-dll-1.0/dll_tcl.tcl #START-tarpack-loadscript-tidy------------------------------------------------------------------------------ # tarpack::disconnect # #END-tarpack-loadscript-tidy-------------------------------------------------------------------------------- #tarpack-footer--------------------------------------------------------------------- #do not remove the trailing comment character from this file. ##tarpack-dll-1.0/#z 777 0 0 76 10323361274 7054 0#Do not remove the trailing ctrl-z character from this file #tarpack-dll-1.0/dll.c 777 0 0 36545 10112745374 7631 0/* * dll.c Copyright Jo'zsef Ne'meth 2003, joe.nemeth@cpluscsystems.axelero.net */ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN #include #ifndef DECLSPEC_EXPORT #define DECLSPEC_EXPORT __declspec(dllexport) #endif /* DECLSPEC_EXPORT */ BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { return TRUE; } int dllLoadObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int dllCreateCmdObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int dllCallObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int dllBufferObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int dllRefObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int dllDeRefObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int dllMemRdObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int dllMemWrObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); #define DLL "::dll" #define VOIDPAR 0x00000000 #define CHAR 0x00000001 #define SHORT 0x00000002 #define INT 0x00000004 #define INT64 0x00000008 #define FLOAT 0x00000010 #define DOUBLE 0x00000020 #define LONGDOUBLE 0x00000020 #define UNSIGNED 0x00000040 #define NUMERIC 0x00000080 #define STRING 0x00000100 #define BUFRET 0x10000000 #define STRUCT 0x20000000 #define PTR 0x40000000 #define PTRPTR 0x80000000 /* * Dll_Init -- */ EXTERN_C int DECLSPEC_EXPORT Dll_Init(Tcl_Interp* interp) { /* Initialize the stub table interface */ if (Tcl_InitStubs(interp, "8.4", 0) == NULL) { return TCL_ERROR; } Tcl_CreateObjCommand(interp, DLL "::load_module", dllLoadObjCmd, (ClientData) NULL, NULL); Tcl_CreateObjCommand(interp, DLL "::create_cmd", dllCreateCmdObjCmd, (ClientData) NULL, NULL); Tcl_CreateObjCommand(interp, DLL "::buffer", dllBufferObjCmd, (ClientData) NULL, NULL); Tcl_CreateObjCommand(interp, DLL "::ref", dllRefObjCmd, (ClientData) NULL, NULL); Tcl_CreateObjCommand(interp, DLL "::deref", dllDeRefObjCmd, (ClientData) NULL, NULL); Tcl_CreateObjCommand(interp, DLL "::memrd", dllMemRdObjCmd, (ClientData) NULL, NULL); Tcl_CreateObjCommand(interp, DLL "::memwr", dllMemWrObjCmd, (ClientData) NULL, NULL); Tcl_SetVar(interp, "::DLL", DLL, 0); Tcl_PkgProvide(interp, "dll", "1.0"); interp->result = "dll 1.0, namespace: " DLL; return TCL_OK; } /* *---------------------------------------------------------------------- */ int dllLoadObjCmd(clientData, interp, objc, objv) ClientData clientData; Tcl_Interp *interp; int objc; Tcl_Obj *CONST objv[]; { if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "dllFileName ? -> namespace?"); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj((int) LoadLibrary(Tcl_GetStringFromObj(objv[1], NULL)))); return TCL_OK; } /* *---------------------------------------------------------------------- */ int dllCreateCmdObjCmd(clientData, interp, objc, objv) ClientData clientData; Tcl_Interp *interp; int objc; Tcl_Obj *CONST objv[]; { int ord, handle; void *address; if (objc != 4) { Tcl_WrongNumArgs(interp, 1, objv, "cmd handle name"); return TCL_ERROR; } Tcl_GetIntFromObj(interp, objv[2], &handle); if (Tcl_GetIntFromObj(interp, objv[3], &ord) == TCL_ERROR) { address = GetProcAddress((struct HINSTANCE__ *) handle, Tcl_GetStringFromObj(objv[3], NULL)); } else { address = GetProcAddress((struct HINSTANCE__ *) handle, (char *) ord); } Tcl_CreateObjCommand(interp, Tcl_GetStringFromObj(objv[1], NULL), dllCallObjCmd, (ClientData) NULL, NULL); Tcl_SetObjResult(interp, Tcl_NewIntObj((int) address)); return TCL_OK; } /* *---------------------------------------------------------------------- */ void dll_call (char * values, unsigned bytes, unsigned flags, unsigned * r_value, void (*fn)(), void *(copy)(void *, const void *, unsigned int)) { __asm { // Make room for all of the new args. mov ecx, bytes sub esp, ecx mov esi, esp // Place all of the memcpy args in position push ecx push values push esi call copy // Return stack to previous state and call the function add esp, 12 call fn // If necessary remove the space we pushed for the args cmp esi, esp jne cont mov ecx, bytes add esp, ecx // Load %ecx with the return type code cont: mov ecx, flags // If the return value pointer is NULL, assume no return value. cmp r_value, 0 jne retint // Even if there is no space for the return value, we are // obliged to handle floating-point values. cmp ecx, FLOAT jne noretval fstp st(0) jmp epilogue retint: cmp ecx, INT jne retfloat // Load %ecx with the pointer to storage for the return value mov ecx, r_value mov [ecx], eax jmp epilogue retfloat: cmp ecx, FLOAT jne retdouble // Load ecx with the pointer to storage for the return value mov ecx, r_value fstp dword ptr [ecx] ; ?? jmp epilogue retdouble: cmp ecx, DOUBLE jne retlongdouble // Load ecx with the pointer to storage for the return value mov ecx, r_value fstp qword ptr [ecx] ; ?? jmp epilogue retlongdouble: cmp ecx, LONGDOUBLE jne retint64 // Load ecx with the pointer to storage for the return value mov ecx, r_value fstp tbyte ptr [ecx] ; ?? jmp epilogue retint64: cmp ecx, INT64 jne retstruct // Load ecx with the pointer to storage for the return value mov ecx, r_value mov [ecx], eax mov 4[ecx], eax retstruct: // Nothing to do! noretval: epilogue: } } /* *---------------------------------------------------------------------- */ int dllCallObjCmd(clientData, interp, objc, objv) ClientData clientData; Tcl_Interp *interp; int objc; Tcl_Obj *CONST objv[]; { int *params, *values, *valptr, *valstrt; int cnt, i, error_code; unsigned int type, ret_type; Tcl_Obj* tmp; char *vptr; params = (int *) Tcl_GetByteArrayFromObj(Tcl_GetVar2Ex(interp, DLL "::entry", Tcl_GetStringFromObj(objv[0], NULL), 0), NULL); cnt = params[2]; values = params + cnt + 3; if (cnt != objc) { Tcl_WrongNumArgs(interp, 1, objv, "............."); return TCL_ERROR; } valstrt = values + 2; for (i = 1, valptr = valstrt; i < objc; i++) { type = params[i + 3]; if (type < PTR) { if (type & NUMERIC) { if (type & (FLOAT || DOUBLE)) { if (Tcl_GetDoubleFromObj(interp, objv[i], ((double *) valptr)++) == TCL_ERROR) { Tcl_SetResult(interp, "floating parameter error", NULL); return TCL_ERROR; } } else { if (Tcl_GetIntFromObj(interp, objv[i], valptr++) == TCL_ERROR) { Tcl_SetResult(interp, "integer parameter error", NULL); return TCL_ERROR; } } } else if (type & STRING) { *valptr++ = (int) Tcl_GetString(objv[i]); } else { Tcl_SetResult(interp, "void may not be an input parameter", NULL); return TCL_ERROR; } } else { if ((tmp = Tcl_ObjGetVar2(interp, objv[i], NULL, 0)) == NULL) { if (Tcl_GetIntFromObj(interp, objv[i], valptr) == TCL_OK) { if (*valptr++ == 0) { continue; } Tcl_SetResult(interp, "variable name or NULL is required for pointer", NULL); return TCL_ERROR; } tmp = Tcl_ObjSetVar2(interp, objv[i], NULL, Tcl_NewIntObj(0), 0); } if (type & NUMERIC) { if (type & (FLOAT || DOUBLE)) { if (Tcl_GetDoubleFromObj(interp, tmp, (double *) valptr) == TCL_ERROR) { Tcl_SetResult(interp, "floating parameter error", NULL); return TCL_ERROR; } *valptr++ = (int) &tmp->internalRep.doubleValue; Tcl_Free(tmp->bytes); tmp->bytes = NULL; } else { if (Tcl_GetIntFromObj(interp, tmp, valptr) == TCL_ERROR) { Tcl_SetResult(interp, "integer parameter error", NULL); return TCL_ERROR; } *valptr++ = (int) &tmp->internalRep.longValue; Tcl_Free(tmp->bytes); tmp->bytes = NULL; } } else if (type & STRING) { Tcl_GetString(tmp); *valptr++ = (int) &tmp->bytes; } else { if ((vptr = Tcl_GetByteArrayFromObj(tmp, 0)) == NULL) { Tcl_SetResult(interp, "binary string is required for \"void *\"", NULL); return TCL_ERROR; } *valptr++ = (int) vptr; } } } ret_type = params[3]; dll_call((char *) valstrt, (char *)valptr - (char *)valstrt, (ret_type & PTR || ret_type & STRING) ? INT : ret_type & 0x0000003F, values, (void *) params[1], memcpy); error_code = GetLastError(); Tcl_SetVar2Ex(interp, DLL "::error", NULL, Tcl_NewIntObj(error_code), 0); if (ret_type < PTR) { if (ret_type & NUMERIC) { if (ret_type & (FLOAT || DOUBLE)) { Tcl_SetObjResult(interp, Tcl_NewDoubleObj(*((double *) values))); } else { Tcl_SetObjResult(interp, Tcl_NewIntObj(*values)); } } else if (ret_type & STRING) { Tcl_SetObjResult(interp, Tcl_NewStringObj((char *) values, -1)); } else { Tcl_ResetResult(interp); } } else { Tcl_SetObjResult(interp, Tcl_NewIntObj(*values)); } return TCL_OK; } /* *---------------------------------------------------------------------- */ int dllBufferObjCmd(clientData, interp, objc, objv) ClientData clientData; /* */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { int size; char *memory; Tcl_Obj* tmp; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "name size"); return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[1], &size) == TCL_ERROR) { Tcl_SetResult(interp, "size should be an integer value", NULL); return TCL_ERROR; } memory = Tcl_Alloc(size); memset(memory, 0, size); tmp = Tcl_NewByteArrayObj(memory, size); Tcl_SetObjResult(interp, tmp); Tcl_Free(memory); return TCL_OK; } /* *---------------------------------------------------------------------- */ int dllRefObjCmd(clientData, interp, objc, objv) ClientData clientData; /* */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { Tcl_Obj* tmp; if (objc !=2) { Tcl_WrongNumArgs(interp, 1, objv, "varname"); return TCL_ERROR; } if ((tmp = Tcl_ObjGetVar2(interp, objv[1], NULL, 0)) == NULL) { tmp = Tcl_ObjSetVar2(interp, objv[1], NULL, Tcl_NewByteArrayObj(NULL, 0), 0); } if (strcmp(tmp->typePtr->name, "bytearray") != 0) { Tcl_SetResult(interp, "bytearray variable required", NULL); return TCL_ERROR; } Tcl_IncrRefCount(tmp); Tcl_Free(tmp->bytes); tmp->bytes = NULL; tmp = Tcl_NewIntObj((int) tmp->internalRep.twoPtrValue.ptr1); Tcl_SetObjResult(interp, tmp); return TCL_OK; } /* *---------------------------------------------------------------------- */ int dllDeRefObjCmd(clientData, interp, objc, objv) ClientData clientData; /* */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { Tcl_Obj* tmp; if (objc !=2) { Tcl_WrongNumArgs(interp, 1, objv, "varname"); return TCL_ERROR; } if ((tmp = Tcl_ObjGetVar2(interp, objv[1], NULL, 0)) == NULL) { Tcl_SetResult(interp, "parameter is not a variable", NULL); return TCL_ERROR; } if (strcmp(tmp->typePtr->name, "bytearray") != 0) { Tcl_SetResult(interp, "bytearray variable required", NULL); return TCL_ERROR; } Tcl_DecrRefCount(tmp); Tcl_ResetResult(interp); return TCL_OK; } /* *---------------------------------------------------------------------- */ int dllMemRdObjCmd(clientData, interp, objc, objv) ClientData clientData; /* */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { int addr, lgt; if (objc !=2 && objc !=3) { Tcl_WrongNumArgs(interp, 1, objv, "memaddr ?length?"); return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[1], &addr) == TCL_ERROR) { Tcl_SetResult(interp, "integer value for memory address is required", NULL); return TCL_ERROR; } if (objc == 3) { if (Tcl_GetIntFromObj(interp, objv[2], &lgt) == TCL_ERROR) { Tcl_SetResult(interp, "integer value for memory address is required", NULL); return TCL_ERROR; } if (lgt < 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj((char *) addr, -1)); } else { Tcl_SetObjResult(interp, Tcl_NewByteArrayObj((char *) addr, lgt)); } } else { memcpy((char *) &lgt, (char *) addr, 4); addr += 4; Tcl_SetObjResult(interp, Tcl_NewByteArrayObj((char *) addr, lgt)); } return TCL_OK; } /* *---------------------------------------------------------------------- */ int dllMemWrObjCmd(clientData, interp, objc, objv) ClientData clientData; /* */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { int addr, lgt; char *str; if (objc !=3) { Tcl_WrongNumArgs(interp, 1, objv, "bytearray memaddr"); return TCL_ERROR; } if (strcmp(objv[1]->typePtr->name, "bytearray") != 0) { Tcl_SetResult(interp, "bytearray variable required", NULL); return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[2], &addr) == TCL_ERROR) { Tcl_SetResult(interp, "integer value for memory address is required", NULL); return TCL_ERROR; } str = Tcl_GetByteArrayFromObj(objv[1], &lgt); memcpy((char *) addr, str, lgt); return TCL_OK; } #tarpack-dll-1.0/dll.dll 777 0 0 160000 10112631722 10151 0MZ@ !L!This program cannot be run in DOS mode. $L/"|"|"|)|"|,|"||"|#|"|(|"|{&|"|Rich"|PEL+A! p`"C|(.textdp `.rdataC @@.data7@@.reloc @B Vt$jhؐV u^ájjh0hĐV jjhhVjjh`hVjjh0hV PjjhPhVjjh`htVjjhhdV jh\hTVLhPhLVL 03^Ð|$ t&D$L$hܐPjQ(ËL$VWQjRP|PPD$P 3_^Ð|$ t&D$L$hPjQ(SUVt$W|$ D$ POQVO D$$PQVuG jPT$(PR D$L$ PQWjjhjRPVUPV 3_^][ÐUVM +QuVU U;uM M}u uA=uM1uM% uM uM9 uMA^]Ð S\$ UVW jjjQl$4PhؑUPT$0ȃL$A;| |$t%hȑSjU(_^][ ÃwD$$L$,D$,=@D$sstPt% PQU l PPU GRX# jjQUuP VPU u}jjPjPUD$tyVWUt9  4WG PQGs GOQRG:tWX> jWD$$|$,L$(@;D$$|$,1L$|$Y @Ã?jhjhU _^][ Ë jhpU _^][ jh@NjhU _^][ Ë jhU _^][ jhU _^][ øIhQWPG+VP  jPPjhU@s{Àt3tWRQPU3_^][ ËRQt%jWPU3_^][ áUl3_^][ áQPU 3_^][ ÐD$ St'D$L$ hPjQ([ËL$\$ D$QPRS u jhS [ËT$VWRPL$ 3ʃD$ PVPSVP3_^[ÐD$ UWt(D$L$h<PjQ(_]Ël$ S\$VjCjPUu%WWWSPWRUG 0:utP^:uu3^[tjhU _]ËAOQRGG PPU3_]ÐD$ UWt(D$L$h<PjQ(_]ËD$l$jHjQUuPhDU _]ËO SV0 :utA^:uu3Ƀ^[t jhU _]ËIWUl3_]ÐS\$VWt.t)D$L$hPjQ(_^[Ë|$t$D$OPQV ujh`V _^[ÃWL$QRV u jh`V _^[ËL$ɍ}T$jRPV3_^[QL$ QPV3_^[ËD$QPL$D$$PV3_^[ÐD$ VWt(D$L$hPjQ(_^Ë|$S0GH :utP^:uu3#D$ jhP _^ËGt$ T$RPV ujh`V _^ËOD$PQL$|$ ȃ3_^UEEP=u3MQURE PhMQR E}u3`xt4 Q QB  QB$ $E]UQEEMy tUB 8ϺuMA UE@3]UWVu M};v;xur)$Ǻr $ $$0\#ъFGFGr$I#ъFGr$#ъFGr$IDDDDDDDDDDDDDD$ ,@E^_ÐE^_ÐFGE^_ÍIFGFGE^_Ðt1|9u$r $ $P IǺr +$$  F#шGNOr$ IF#шGFGr$ F#шGFGFGZ$ IT \ d l t |   DDDDDDDDD D DDDD$     E^_ÐFGE^_ÍIFGFGE^_ÐFGFGFGE^_?,ø'# '$$g#($,ËD$jHYt3;u,9 0~ 09 u G uQYjX US]Vu W}u =0&tu"t WVSЅt WVSu3NWVSE u u7WPStu&WVSu!E } ttWVSЉE E _^[] <t u=@u"t$RhYYhhYYU]؀]EuMm]EЀvjX3hthPtjVt$PeYt,F=~jP[YY AuԊ FFu^ËD$t :tH@u@t*t etEt@H80t8uH@A҈uËD$rjX3UQQ}utEPE YYMMHÍEPE YYMU(EVPEPEQQ$zuEPU FP3}-3ɅQEjPuVu E 0^US38]VuW}t39] P3>-PvYY>-u-G9] ~PH 38]hM Q9]YYtEF A80t<^Ky-Ad|jd^ÙA |j ^ÙY_^[]U(EVPEPEQQ$WuEPEP3}-E PEjPVu E ,^USVu]WFH}t;E u3Ƀ>-ˋ0`>-u-{FjW?Y0YG} ~DjW'YvGY}+}t9u |u u Wu j0W_^[]U(SVEWPEPEQQ$YE]p3}-E EPSWEH;|&;}"t Gu GEjPSu EjPuSu _^[U}et2}Et,}fuuu uN ]uuu u4uuu u]W|$ tVt$ V$@PVV^_áthhhhjjt$  jjj Wj_9=ut$ P|$ S\$=|u<t" Vq;rtЃ;5s^hhCYYh h2YY[t_t$=_j 3Yj YVt$;t$ s tЃ^Vs,0t:jtjeYYt)V50(tV4Y$NjX^3^I0tP0 0ËD$@P@VW508u?jtjYYt&V50(tVY$Nj1YW4_^á0Vt$u P8tlF$tPYF(tPYF0tPYF8tPzYF@tPlYFDtP^YFP=tPMYVFYj50(^UHSVWh YujcY5 ;sffF $ލEPHf}E8X;E;|9=}VhwYt< ;s``@ $9=|=3~LEt8t2u QDt#΋ M  HEFC;|3ۋ ۃ<4uMFujX HP@tWDt %>uN@u NNC|5<_^[SVWt7;s!_ {tSL$$;r68&Y|_^[S39VWu543:t<=tGV.YtPY;5duj !Y=48t9UWYE?=t"U;Yuj YW6>YY8u]54Y4_^[UQQS39VWuPhVSP5t8tEPEPSSWMEMP;ujPYEPEPEPVWEH5\_^X[UMESV!uW} Et7} 8"uDP@"t)t%t tF@tՊFt&F8"uF@CtF@t tF@ t t ūuHtfe8 t u@8t7} UE3ۀ8\u@C8"u,u%39}t x"Pu}} 39U‰UKtCt\FKutJ}u t? t:}t.ttF@Ft@@Xt&Ft'E_^[]QQSU-dVW333;u3Ջ;t (`;;u Ջ;f9t@@f9u@@f9u+Ƌ=\SS@SSPVSSD$4׋;t2Ug;YD$t#SSUPt$$VSSׅut$[Y\$\$VXSuL;u `;t<8t @8u@8u+@UY;u3 UWVX WT3_^][YYVt$j&f8MZuHj,PY;Yt0@8t9;uA8uj SP tttEP}Y[3j9D$hPtt6u h2Y uv$u5p3jXáVWufS39U-~@=xp h@h6hj6vj5ՃC;|5j5]['u"FthjPx6;u5p_^á<t u*=@u!hYthYUU3ɸ`;t A=rV;`<u =@\hPjPu\h(PV YY\WP\ @Y1uBW@PWVk_^[]U(VEWPEPGYEYuPjj f;,u}FEډE؉FEPW ~ _^UQU SVWfB%#ωE Bپ%ۉut;t<(!3;u;uEXfXK<] ȋE M Huɋ ٍ XߋM fH_^[W|$j$L$WtAt;u~Ѓ3ƒtAt#ttt͍y yyyL$ tAtdGu~Ѓ3‹tt4t'ttljD$_fD$G_fD$_ÈD$_ËT$ L$tG3D$Wr-كt+шGIuʃttGJuD$_ËD$UWVu M};v;xur)$?Ǻr $>$?$> ?#ъFGFGr$?I#ъFGr$?#ъFGr$?I???|?t?l?d?\?DDDDDDDDDDDDDD$?????E^_ÐE^_ÐFGE^_ÍIFGFGE^_Ðt1|9u$r $@A$@IǺr +$H@$@AX@x@@F#шGNOr$@AIF#шGFGr$@AF#шGFGFGZ$@AI@@A AAA$A7ADDDDDDDDD D DDDD$@APAXAhA|AE^_ÐFGE^_ÍIFGFGE^_ÐFGFGFGE^_̋L$tAt@u~Ѓ3ƒtAt2t$tt͍AL$+ÍAL$+ÍAL$+ÍAL$+jYV555t5d5D^VW=L@t+t#ttdtDt P6Y|5d5t55D_^UEV<@4@u>Wj|YujYj>YWu >gYj Y_6^]UE4@]Ujh@hldPd%SVWuu u uw3;uj^u 3ۉ]uA};=w|j Y]WOYEM9]t^uH3ۋu j KYÃuA;5w9j YEPYEML9]tVSu 9]u>Vj5E9]u'9XtV&Y03ۋu j YËEMd _^[UjhXhldPd%SVWuu;j YeV YEt VP YYM}Qj =YÃuSj YEEPEPV  E܅tPuuL M }uu j YVj5Md _^[5Xt$YYÃ|$w"t$Yu9D$tt$p%Yu3UjhphldPd% SVWuCu;5j YeV YEM Etmj YÃuZEtpj^u;5w.j YEPiYEM Eu-Vuj YËEujX$Pj5Md _^[USVWjuY;Y]u3pV3Ҹ9tt0B=rEPSj^;!j@%Y39u󫪉}MA;@ej@Y34R;t,Qt%;wU@;vAA9uE}rEPYRAAyGƀ@=rSY5%3=tjY_^[ËD$%u%u%uHËD$-t"t t Ht3øøøøWj@Y33_UEVP53@;rEƅ t7SWU ;w+ȍA ˃BBBu_[j55PVPjj5VPVPV5j5VPVPh5\3ftt 〠@AA;rI3ArZwȀ arzw Ȁ @;r^Ã=ujYjt$t$t$U SeVW}wu=~jP%YY ÊAtFЀ-uuM+uFuE$wjYu$0t E 2t }w u,9uv' E"tME$ƉEtEEtE؉EE E t83_^[̍B[Í$d$3D$ST$t B8tфtQu WV ؋ ~333ƃu%t%uu^_[3ËB8t6t8t't8tt8tt^_B[ÍB^_[ÍB^_[ÍB^_[̋L$WSV|$tiqtOL$F8tt F8t u^[_3ÊF8u~at(8uĊAtf8t3^[_G^[_Ë^[_UWVSM&ً}3ˋu F3:GwtIIы[^_Q=L$r-=s+ȋą@Ph@j5uËL$%%j Xá  ;sT$+P r3UMSVu AW+y iDMIM11UVUU] u~J?vj?ZK;KuL sL!\D u(M!!JL! uM!YM] MS[MZU MZRSJ?vj?Z]]+u]j?u K^;vMщMJ;v;tcM q;qu@ s!tDLu&M!1K!LuM!qM qINM qINu ]}u;M\ щ^NqNqN;Nu`L MLs%}uM DD )}uJM YJꍄ ED0E 5xH h@SQ֋  P @@HCHyCu `xuiSjp ֡pj5ȡ+ȍLQHQPE ;vmE=_^[USVWu;uM; u%MB_^[á VW3;u0DPP5W5;ta hAj54;ljFt*jh hW;ljF uvW53N>~F_^UQMSVWqA3ۅ|Cj?iZ0DE@@Jujy hhWup;wtƍ4;sCu0jX^;uCF;sN;Euq )u 9U }ƍ4;urq;s~;Esvu@j^X;u%C@;]s +q aq16;s)E 9U r4맍;]s +‰A aAFk+3_^[S39VWuBh|;tg5hWօtPhWhW֣tЋ؅ttSЋt$t$t$S_^[3̋L$ WtzVSًt$|$uuo!FGIt%t)uuQt FGt/KuD$[^_tGIuulGKu[^D$_ÉIt~Ѓ3‹tބt,tt uƉ3҉3It 3IuuD$[^_UjhЄhldPd%SVWe 3;u>EPj^VhȄVtEPVhĄVSjX u$E;u8uuu uP9]uHESSuu E @PuE;tc]<ǃ$euWSV jXËe33M;t)uVuu ju;tuPVu3e̋Md _^[UjhhldPd%SVWe39=PuFWWj[ShȄVWtP"WWShĄVW"P9}~uuYYEPuuuuuu u9} uHE WWuuE$@Pu ؉];}$eĉE܃MjXËe3}܃M]9}tfSuuuju tMWWSuu uu;t2E t@9};uuuSuu u3eȋMd _^[E6$e܉]MjXËe33ۃMu;tVSuuu ut9}WWuWWuuVSh u \;qlT$D$VJt 8t@Iu8^u+D$ËËT$Vt$ 3 2;r;sjXT$^ Vt$W|$V76 tFPj0 tFFPw0 tFFPw0 _^ËD$VW0x04? H׉p _H^ËD$VWPH ΉH _P^UE S]3;VEN@SSvQWE}SpSjEPSSZEeeEEPSEMu3_9Su(KC EsӾsuSEYfE^fC [U\SVW}EjE3ZE؉UEEE܉EEԉEЉEEE} t t t uGj^G w$8h1| 9j:ujFÃ+tHHtjEX맃ejX란1U|9~:+t1-t,0tRCE~c{erjOj 1| 9V:Y0U9~VPYYjZ ÊA#ƅt}sEE0EEG:ug}UUu 0uMG9~VPYYjZ ÊA#ƅt}sEE0EMG빀+ -9U~VP3YYjZ ÊA#ƅWO1M|9~DÃ+ttHHtdjeU0uG19 1|9 j XO0uD} t*ÍO+MtHHMjXjXj OX o}E3=~jPGYY ÊAtˍtAЁPG뾾Qu=~jPYY ÊAtGOE }8jX9Ev}|EEEHEE}H8uMEEPEuPjE3Ƀ 9M}E9MuE9Mu+E=P~0E]uEU}t`3۸3E^=} EuPEP~ U]‹uƋEʃ 33333333E}t3333EM E_qYfA E^f[dPddd,eee#fffqf=fUES]VȾ#fWEEEEEEEEEEEE?EtC-C } fuu9}uf#C CC0f;uzf;u}t@uhFftu }u.h;u#}uhCPYCYenhCPYCY‹ϋiMfej NfUkM} EEPEP f}?rEFPEPhYYEf3t}}~j_u?feEEP]MYu}ށ~ EPnNYuOCɉE~PMu}EPEPEPEPEPEMe0EMuEHHH5K|0;r89u0H;s@f*,CdE_^[;r 80uH;sf#C C0cjXӡTtt$ЅYtjX3USVWUjjh0ku ]_^[]ËL$AtD$T$SVWD$Pjh8kd5d%D$ Xp t.;t$$t(4v L$H |uhD@Td _^[3d y8kuQ R 9QuSQ SQMKCk Y[VC20XC00USVWU] E@EEEECs {ta v|tEVUkT]^] t3x<{SkVS vjDaC T{ v4롸UkjS]]_^[]UL$)APAPy]CS398uD$a|YzT [VWV9=tVjYj[t$YD$t jYV׋D$_^[UQ=8SuEaz ]}(=~ jSDYY XukDJte E] j e ]jXMjjjQPEPh58 tuE EM [̋T$L$u<:u. t&:au% t:Au t:au uҋ3Ð@ËtB:uA ttf:u t:au tUV3PPPPPPPPU I tB$uA tF$s ^UV3PPPPPPPPU I tB$u t F$sF ^U$S] VufK 3WEE܉EEfF 3##ʁf=Ufff?w3:fuEVu39Fu 9uo3f;uESu9Cu9u FFkEEEE E} ~IƍKEE MEEM MQP1 tEfEmMuȃEEM } Ef}~%EuEPEYf}f}9Ef}}+EEEtEEPKYu}tMf}wE%=u5}u,e}uef}u EfEfEEEދEf=sfM fMNMNfF ff&~_^[U S@3Ƀ`9M tc}E ؉E `9MuEf9M tAVWE T} ;t'@f<4r }MuVurYY39M u_^[UWVSu }0xu; t.F'G8t,A<ɀ A,A<ɀ A8tx=j jd$3ې t'FG8tPSV؃L8tX u  jt[^_UWVSM u} 0xuNAZ I& t! tFG8r8w8r8w8u Iu38=j jt$33ۋ t# tFGQPSe؃[Y;u Iu3;t rX u juˋ[^_SVD$ uL$D$3؋D$ Aȋ\$T$D$ ud$ȋD$r;T$wr;D$ vN3ҋ^[SD$ uL$D$ 3D$3Pȋ\$T$ D$ ud$d$r;T$ wr;D$v+D$T$+D$T$ ؃[̋D$L$ ȋL$ u D$S؋D$d$؋D$[%‡Ї0>JTdr̈,D^xpʉ.FR^ht̊܊?~PAGAIsProcessorFeaturePresentKERNEL32e+000__GLOBAL_HEAP_SELECTED__MSVCRT_HEAP_SELECTruntime error TLOSS error SING error DOMAIN error R6028 - unable to initialize heap R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data abnormal program termination R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point not loaded Microsoft Visual C++ Runtime Library Runtime Error! Program: ...CLDD.EEVFGetLastActivePopupGetActiveWindowMessageBoxAuser32.dllW_[_``kaoa1#QNAN1#INF1#IND1#SNANH:mm:ssdddd, MMMM dd, yyyyM/d/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSunSunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec‡Ї0>JTdr̈,D^xpʉ.FR^ht̊܊HLoadLibraryAGetProcAddressiGetLastErrorKERNEL32.dllGetCommandLineAGetVersionwGetModuleHandleAExitProcessQTerminateProcess:GetCurrentProcess>GetCurrentThreadIdYTlsSetValueVTlsAllocWTlsFreeSetLastErrorXTlsGetValueSetHandleCountGetStdHandle^GetFileTypeGetStartupInfoAzDeleteCriticalSectionuGetModuleFileNameAFreeEnvironmentStringsAFreeEnvironmentStringsWWideCharToMultiByteMGetEnvironmentStringsOGetEnvironmentStringsWPGetEnvironmentVariableAGetVersionExA HeapDestroyHeapCreatexVirtualFree HeapFreeWriteFileInterlockedDecrement"InterlockedIncrementInitializeCriticalSectionEnterCriticalSectionGLeaveCriticalSectionHeapAllocGetCPInfoGetACPGetOEMCPuVirtualAllocHeapReAllockMultiByteToWideCharGetStringTypeAGetStringTypeW:LCMapStringA;LCMapStringWRtlUnwind+A2(,0:dll.dllDll_InitgJdll 1.0, namespace: ::dlldll1.0::DLL::dll::dll::memwr::dll::memrd::dll::deref::dll::ref::dll::buffer::dll::create_cmd::dll::load_module8.4dllFileName ? -> namespace?cmd handle name::dll::errorbinary string is required for "void *"variable name or NULL is required for pointervoid may not be an input parameterinteger parameter errorfloating parameter error.............::dll::entrysize should be an integer valuename sizebytearray variable requiredbytearrayvarnameparameter is not a variableinteger value for memory address is requiredmemaddr ?length?bytearray memaddrTclThis interpreter does not support stubs-enabled extensions.us  ! !'BBBBBB  \ 8 ܂T,xytzd`P. ((((( H 5 @  x `y!@~ڣ @ڣ AϢ[@~QQ^ _j21~CCC         ! 5A CPR S WY l m pr   )    H840,($ ܅؅ԅЅ̅ȅąȅxpd\PD@<4 .@@@@ @P@$@@ @4@N@ p+ŝi@]%O@qוC)@D@<զIx@oGAkU'9p|Bݎ~QCv)/&D(DJzEeǑF e uuvHMXB䧓9;5SM]=];Z] T7aZ%]g']݀nLɛ R`%u?q= ףp= ף?Zd;On?,eX?#GGŧ?@il7?3=BzՔ?aw̫?/L[Mľ?S;uD?g9Eϔ?$#⼺;1az?aUY~S|_?/D?$?9'*?}d|FU>c{#Tw=:zc%C1=D=O=W=a=k===>>>$>(>,>U>{>>>>>>>>>>?? ???z????????? ,-04080<0@0D0H0L0P00000011111#1'1-11171;1@1T1[1j1r1}1111111111132E2222233,3?3E3N3U3~3333455B677777777888888@8E8Q8V8s8y888888999$949:9B9`9f9w9999:+:1:[:a::::::;!;B;W;{;;;;;;<=??P?X?r?~???0000n00001;1b1222@2F2R2b2i2p2v2222222222 33A3N3\3g3z33334$404L4a4w4~456e666666 7727n7;;>>>>>>>>?5?n>u>>>>>>>>P111.131B1H1X1c1u111111111111122L224445 5!5(5.585>5C5I5Y5b5|55556666667$7,727:7C7L777778 88858;8C8R88889999h:u::::;;<<<<<= ====$=5=Q=d>i>>>>>>>>>?%?{?????????`|0030P0h0000)11134_44445G5`555666688<8@8D8H8L8P8T8X8\8`8d8909A9^9:$;e;;;;<===%=f====>p$b1v1162<2J222$3*38334 H4T4`4l4x44444444X 03 33333 3$3(3,3d3l3t3|33333333333333334D6d6t668888|8@;H;L;P;T;X;\;`;d;h;l;p;t;x;|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<< <<<<< <$<0"} { error "Syntax error" } set alias [lindex $def 2] if {[namespace tail $alias] eq $alias} { set alias ${nsp}::$alias } elseif {[namespace qualifiers $alias] eq ""} { set alias [namespace tail $alias] } else { error "Invalid alias specification" } } else { set alias ${nsp}::$name } set address [${::DLL}::create_cmd $alias $handle $name] if {!$address} { error "Dynamic library function not found" } set ${::DLL}::entry($alias) \ [binary format i $handle][binary format i $address][binary format i $cnt]$params[${::DLL}::buffer [expr 8 * $cnt]] set ${::DLL}::alias($alias) ${nsp}::$name } #Load a dynamic library and register its handle proc ${::DLL}::load {args} { global alias set length [llength $args] if {$length != 1 && $length != 3} { error "Wrong number of arguments" } set name [file rootname [file tail [lindex $args 0]]] if {$length == 3} { if {[lindex $args 1] ne "->"} { error "Syntax error" } set alias [lindex $args 2] } else { set alias $name } set handle [${::DLL}::load_module [lindex $args 0]] if {!$handle} { error "Dynamic library not found" } namespace eval ::$alias { variable nsp ${::alias} proc cmd {args} { variable nsp return [${::DLL}::cmd ::$nsp $args] } } set ::${alias}::handle $handle set ::${alias}::alias $name }