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

📄 tclwin32dll.c

📁 这是leon3处理器的交叉编译链
💻 C
📖 第 1 页 / 共 2 页
字号:
/*  * tclWin32Dll.c -- * *	This file contains the DLL entry point. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. * Copyright (c) 1998-2000 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclWin32Dll.c,v 1.16 2002/06/13 09:40:01 vincentdarley Exp $ */#include "tclWinInt.h"/* * The following data structures are used when loading the thunking  * library for execing child processes under Win32s. */typedef DWORD (WINAPI UT32PROC)(LPVOID lpBuff, DWORD dwUserDefined,	LPVOID *lpTranslationList);typedef BOOL (WINAPI UTREGISTER)(HANDLE hModule, LPCSTR SixteenBitDLL,	LPCSTR InitName, LPCSTR ProcName, UT32PROC **ThirtyTwoBitThunk,	FARPROC UT32Callback, LPVOID Buff);typedef VOID (WINAPI UTUNREGISTER)(HANDLE hModule);/*  * The following variables keep track of information about this DLL * on a per-instance basis.  Each time this DLL is loaded, it gets its own  * new data segment with its own copy of all static and global information. */static HINSTANCE hInstance;	/* HINSTANCE of this DLL. */static int platformId;		/* Running under NT, or 95/98? */#ifdef HAVE_NO_SEHstatic void *ESP __attribute__ ((used));static void *EBP __attribute__ ((used));#endif /* HAVE_NO_SEH *//* * The following function tables are used to dispatch to either the * wide-character or multi-byte versions of the operating system calls, * depending on whether the Unicode calls are available. */static TclWinProcs asciiProcs = {    0,    (BOOL (WINAPI *)(CONST TCHAR *, LPDCB)) BuildCommDCBA,    (TCHAR *(WINAPI *)(TCHAR *)) CharLowerA,    (BOOL (WINAPI *)(CONST TCHAR *, CONST TCHAR *, BOOL)) CopyFileA,    (BOOL (WINAPI *)(CONST TCHAR *, LPSECURITY_ATTRIBUTES)) CreateDirectoryA,    (HANDLE (WINAPI *)(CONST TCHAR *, DWORD, DWORD, SECURITY_ATTRIBUTES *, 	    DWORD, DWORD, HANDLE)) CreateFileA,    (BOOL (WINAPI *)(CONST TCHAR *, TCHAR *, LPSECURITY_ATTRIBUTES, 	    LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, CONST TCHAR *, 	    LPSTARTUPINFOA, LPPROCESS_INFORMATION)) CreateProcessA,    (BOOL (WINAPI *)(CONST TCHAR *)) DeleteFileA,    (HANDLE (WINAPI *)(CONST TCHAR *, WIN32_FIND_DATAT *)) FindFirstFileA,    (BOOL (WINAPI *)(HANDLE, WIN32_FIND_DATAT *)) FindNextFileA,    (BOOL (WINAPI *)(WCHAR *, LPDWORD)) GetComputerNameA,    (DWORD (WINAPI *)(DWORD, WCHAR *)) GetCurrentDirectoryA,    (DWORD (WINAPI *)(CONST TCHAR *)) GetFileAttributesA,    (DWORD (WINAPI *)(CONST TCHAR *, DWORD nBufferLength, WCHAR *, 	    TCHAR **)) GetFullPathNameA,    (DWORD (WINAPI *)(HMODULE, WCHAR *, int)) GetModuleFileNameA,    (DWORD (WINAPI *)(CONST TCHAR *, WCHAR *, DWORD)) GetShortPathNameA,    (UINT (WINAPI *)(CONST TCHAR *, CONST TCHAR *, UINT uUnique, 	    WCHAR *)) GetTempFileNameA,    (DWORD (WINAPI *)(DWORD, WCHAR *)) GetTempPathA,    (BOOL (WINAPI *)(CONST TCHAR *, WCHAR *, DWORD, LPDWORD, LPDWORD, LPDWORD,	    WCHAR *, DWORD)) GetVolumeInformationA,    (HINSTANCE (WINAPI *)(CONST TCHAR *)) LoadLibraryA,    (TCHAR (WINAPI *)(WCHAR *, CONST TCHAR *)) lstrcpyA,    (BOOL (WINAPI *)(CONST TCHAR *, CONST TCHAR *)) MoveFileA,    (BOOL (WINAPI *)(CONST TCHAR *)) RemoveDirectoryA,    (DWORD (WINAPI *)(CONST TCHAR *, CONST TCHAR *, CONST TCHAR *, DWORD, 	    WCHAR *, TCHAR **)) SearchPathA,    (BOOL (WINAPI *)(CONST TCHAR *)) SetCurrentDirectoryA,    (BOOL (WINAPI *)(CONST TCHAR *, DWORD)) SetFileAttributesA,    NULL,    NULL,};static TclWinProcs unicodeProcs = {    1,    (BOOL (WINAPI *)(CONST TCHAR *, LPDCB)) BuildCommDCBW,    (TCHAR *(WINAPI *)(TCHAR *)) CharLowerW,    (BOOL (WINAPI *)(CONST TCHAR *, CONST TCHAR *, BOOL)) CopyFileW,    (BOOL (WINAPI *)(CONST TCHAR *, LPSECURITY_ATTRIBUTES)) CreateDirectoryW,    (HANDLE (WINAPI *)(CONST TCHAR *, DWORD, DWORD, SECURITY_ATTRIBUTES *, 	    DWORD, DWORD, HANDLE)) CreateFileW,    (BOOL (WINAPI *)(CONST TCHAR *, TCHAR *, LPSECURITY_ATTRIBUTES, 	    LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, CONST TCHAR *, 	    LPSTARTUPINFOA, LPPROCESS_INFORMATION)) CreateProcessW,    (BOOL (WINAPI *)(CONST TCHAR *)) DeleteFileW,    (HANDLE (WINAPI *)(CONST TCHAR *, WIN32_FIND_DATAT *)) FindFirstFileW,    (BOOL (WINAPI *)(HANDLE, WIN32_FIND_DATAT *)) FindNextFileW,    (BOOL (WINAPI *)(WCHAR *, LPDWORD)) GetComputerNameW,    (DWORD (WINAPI *)(DWORD, WCHAR *)) GetCurrentDirectoryW,    (DWORD (WINAPI *)(CONST TCHAR *)) GetFileAttributesW,    (DWORD (WINAPI *)(CONST TCHAR *, DWORD nBufferLength, WCHAR *, 	    TCHAR **)) GetFullPathNameW,    (DWORD (WINAPI *)(HMODULE, WCHAR *, int)) GetModuleFileNameW,    (DWORD (WINAPI *)(CONST TCHAR *, WCHAR *, DWORD)) GetShortPathNameW,    (UINT (WINAPI *)(CONST TCHAR *, CONST TCHAR *, UINT uUnique, 	    WCHAR *)) GetTempFileNameW,    (DWORD (WINAPI *)(DWORD, WCHAR *)) GetTempPathW,    (BOOL (WINAPI *)(CONST TCHAR *, WCHAR *, DWORD, LPDWORD, LPDWORD, LPDWORD, 	    WCHAR *, DWORD)) GetVolumeInformationW,    (HINSTANCE (WINAPI *)(CONST TCHAR *)) LoadLibraryW,    (TCHAR (WINAPI *)(WCHAR *, CONST TCHAR *)) lstrcpyW,    (BOOL (WINAPI *)(CONST TCHAR *, CONST TCHAR *)) MoveFileW,    (BOOL (WINAPI *)(CONST TCHAR *)) RemoveDirectoryW,    (DWORD (WINAPI *)(CONST TCHAR *, CONST TCHAR *, CONST TCHAR *, DWORD, 	    WCHAR *, TCHAR **)) SearchPathW,    (BOOL (WINAPI *)(CONST TCHAR *)) SetCurrentDirectoryW,    (BOOL (WINAPI *)(CONST TCHAR *, DWORD)) SetFileAttributesW,    NULL,    NULL,};TclWinProcs *tclWinProcs;static Tcl_Encoding tclWinTCharEncoding;/* * The following declaration is for the VC++ DLL entry point. */BOOL APIENTRY		DllMain(HINSTANCE hInst, DWORD reason, 				LPVOID reserved);#ifdef __WIN32__#ifndef STATIC_BUILD/* *---------------------------------------------------------------------- * * DllEntryPoint -- * *	This wrapper function is used by Borland to invoke the *	initialization code for Tcl.  It simply calls the DllMain *	routine. * * Results: *	See DllMain. * * Side effects: *	See DllMain. * *---------------------------------------------------------------------- */BOOL APIENTRYDllEntryPoint(hInst, reason, reserved)    HINSTANCE hInst;		/* Library instance handle. */    DWORD reason;		/* Reason this function is being called. */    LPVOID reserved;		/* Not used. */{    return DllMain(hInst, reason, reserved);}/* *---------------------------------------------------------------------- * * DllMain -- * *	This routine is called by the VC++ C run time library init *	code, or the DllEntryPoint routine.  It is responsible for *	initializing various dynamically loaded libraries. * * Results: *	TRUE on sucess, FALSE on failure. * * Side effects: *	Establishes 32-to-16 bit thunk and initializes sockets library. * *---------------------------------------------------------------------- */BOOL APIENTRYDllMain(hInst, reason, reserved)    HINSTANCE hInst;		/* Library instance handle. */    DWORD reason;		/* Reason this function is being called. */    LPVOID reserved;		/* Not used. */{    switch (reason) {    case DLL_PROCESS_ATTACH:	TclWinInit(hInst);	return TRUE;    case DLL_PROCESS_DETACH:	if (hInst == hInstance) {	    Tcl_Finalize();	}	break;    }    return TRUE; }#endif /* !STATIC_BUILD */#endif /* __WIN32__ *//* *---------------------------------------------------------------------- * * TclWinGetTclInstance -- * *	Retrieves the global library instance handle. * * Results: *	Returns the global library instance handle. * * Side effects: *	None. * *---------------------------------------------------------------------- */HINSTANCETclWinGetTclInstance(){    return hInstance;}/* *---------------------------------------------------------------------- * * TclWinInit -- * *	This function initializes the internal state of the tcl library. * * Results: *	None. * * Side effects: *	Initializes the tclPlatformId variable. * *---------------------------------------------------------------------- */voidTclWinInit(hInst)    HINSTANCE hInst;		/* Library instance handle. */{    OSVERSIONINFO os;    hInstance = hInst;    os.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);    GetVersionEx(&os);    platformId = os.dwPlatformId;    /*     * We no longer support Win32s, so just in case someone manages to     * get a runtime there, make sure they know that.     */    if (platformId == VER_PLATFORM_WIN32s) {	panic("Win32s is not a supported platform");	    }    tclWinProcs = &asciiProcs;}/* *---------------------------------------------------------------------- * * TclWinGetPlatformId -- * *	Determines whether running under NT, 95, or Win32s, to allow  *	runtime conditional code. * * Results: *	The return value is one of: *	    VER_PLATFORM_WIN32s		Win32s on Windows 3.1. (not supported) *	    VER_PLATFORM_WIN32_WINDOWS	Win32 on Windows 95. *	    VER_PLATFORM_WIN32_NT	Win32 on Windows NT * * Side effects: *	None.

⌨️ 快捷键说明

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