sl@0
|
1 |
/*
|
sl@0
|
2 |
* tclWinInt.h --
|
sl@0
|
3 |
*
|
sl@0
|
4 |
* Declarations of Windows-specific shared variables and procedures.
|
sl@0
|
5 |
*
|
sl@0
|
6 |
* Copyright (c) 1994-1996 Sun Microsystems, Inc.
|
sl@0
|
7 |
*
|
sl@0
|
8 |
* See the file "license.terms" for information on usage and redistribution
|
sl@0
|
9 |
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
sl@0
|
10 |
*
|
sl@0
|
11 |
* RCS: @(#) $Id: tclWinInt.h,v 1.20.2.5 2006/03/10 10:35:25 vincentdarley Exp $
|
sl@0
|
12 |
*/
|
sl@0
|
13 |
|
sl@0
|
14 |
#ifndef _TCLWININT
|
sl@0
|
15 |
#define _TCLWININT
|
sl@0
|
16 |
|
sl@0
|
17 |
#ifndef _TCLINT
|
sl@0
|
18 |
#include "tclInt.h"
|
sl@0
|
19 |
#endif
|
sl@0
|
20 |
#ifndef _TCLPORT
|
sl@0
|
21 |
#include "tclPort.h"
|
sl@0
|
22 |
#endif
|
sl@0
|
23 |
|
sl@0
|
24 |
/*
|
sl@0
|
25 |
* The following specifies how much stack space TclpCheckStackSpace()
|
sl@0
|
26 |
* ensures is available. TclpCheckStackSpace() is called by Tcl_EvalObj()
|
sl@0
|
27 |
* to help avoid overflowing the stack in the case of infinite recursion.
|
sl@0
|
28 |
*/
|
sl@0
|
29 |
|
sl@0
|
30 |
#define TCL_WIN_STACK_THRESHOLD 0x8000
|
sl@0
|
31 |
|
sl@0
|
32 |
#ifdef BUILD_tcl
|
sl@0
|
33 |
# undef TCL_STORAGE_CLASS
|
sl@0
|
34 |
# define TCL_STORAGE_CLASS DLLEXPORT
|
sl@0
|
35 |
#endif
|
sl@0
|
36 |
|
sl@0
|
37 |
/*
|
sl@0
|
38 |
* Some versions of Borland C have a define for the OSVERSIONINFO for
|
sl@0
|
39 |
* Win32s and for NT, but not for Windows 95.
|
sl@0
|
40 |
* Define VER_PLATFORM_WIN32_CE for those without newer headers.
|
sl@0
|
41 |
*/
|
sl@0
|
42 |
|
sl@0
|
43 |
#ifndef VER_PLATFORM_WIN32_WINDOWS
|
sl@0
|
44 |
#define VER_PLATFORM_WIN32_WINDOWS 1
|
sl@0
|
45 |
#endif
|
sl@0
|
46 |
#ifndef VER_PLATFORM_WIN32_CE
|
sl@0
|
47 |
#define VER_PLATFORM_WIN32_CE 3
|
sl@0
|
48 |
#endif
|
sl@0
|
49 |
|
sl@0
|
50 |
/*
|
sl@0
|
51 |
* The following structure keeps track of whether we are using the
|
sl@0
|
52 |
* multi-byte or the wide-character interfaces to the operating system.
|
sl@0
|
53 |
* System calls should be made through the following function table.
|
sl@0
|
54 |
*/
|
sl@0
|
55 |
|
sl@0
|
56 |
typedef union {
|
sl@0
|
57 |
WIN32_FIND_DATAA a;
|
sl@0
|
58 |
WIN32_FIND_DATAW w;
|
sl@0
|
59 |
} WIN32_FIND_DATAT;
|
sl@0
|
60 |
|
sl@0
|
61 |
typedef struct TclWinProcs {
|
sl@0
|
62 |
int useWide;
|
sl@0
|
63 |
|
sl@0
|
64 |
BOOL (WINAPI *buildCommDCBProc)(CONST TCHAR *, LPDCB);
|
sl@0
|
65 |
TCHAR *(WINAPI *charLowerProc)(TCHAR *);
|
sl@0
|
66 |
BOOL (WINAPI *copyFileProc)(CONST TCHAR *, CONST TCHAR *, BOOL);
|
sl@0
|
67 |
BOOL (WINAPI *createDirectoryProc)(CONST TCHAR *, LPSECURITY_ATTRIBUTES);
|
sl@0
|
68 |
HANDLE (WINAPI *createFileProc)(CONST TCHAR *, DWORD, DWORD,
|
sl@0
|
69 |
LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);
|
sl@0
|
70 |
BOOL (WINAPI *createProcessProc)(CONST TCHAR *, TCHAR *,
|
sl@0
|
71 |
LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD,
|
sl@0
|
72 |
LPVOID, CONST TCHAR *, LPSTARTUPINFOA, LPPROCESS_INFORMATION);
|
sl@0
|
73 |
BOOL (WINAPI *deleteFileProc)(CONST TCHAR *);
|
sl@0
|
74 |
HANDLE (WINAPI *findFirstFileProc)(CONST TCHAR *, WIN32_FIND_DATAT *);
|
sl@0
|
75 |
BOOL (WINAPI *findNextFileProc)(HANDLE, WIN32_FIND_DATAT *);
|
sl@0
|
76 |
BOOL (WINAPI *getComputerNameProc)(WCHAR *, LPDWORD);
|
sl@0
|
77 |
DWORD (WINAPI *getCurrentDirectoryProc)(DWORD, WCHAR *);
|
sl@0
|
78 |
DWORD (WINAPI *getFileAttributesProc)(CONST TCHAR *);
|
sl@0
|
79 |
DWORD (WINAPI *getFullPathNameProc)(CONST TCHAR *, DWORD nBufferLength,
|
sl@0
|
80 |
WCHAR *, TCHAR **);
|
sl@0
|
81 |
DWORD (WINAPI *getModuleFileNameProc)(HMODULE, WCHAR *, int);
|
sl@0
|
82 |
DWORD (WINAPI *getShortPathNameProc)(CONST TCHAR *, WCHAR *, DWORD);
|
sl@0
|
83 |
UINT (WINAPI *getTempFileNameProc)(CONST TCHAR *, CONST TCHAR *, UINT,
|
sl@0
|
84 |
WCHAR *);
|
sl@0
|
85 |
DWORD (WINAPI *getTempPathProc)(DWORD, WCHAR *);
|
sl@0
|
86 |
BOOL (WINAPI *getVolumeInformationProc)(CONST TCHAR *, WCHAR *, DWORD,
|
sl@0
|
87 |
LPDWORD, LPDWORD, LPDWORD, WCHAR *, DWORD);
|
sl@0
|
88 |
HINSTANCE (WINAPI *loadLibraryProc)(CONST TCHAR *);
|
sl@0
|
89 |
TCHAR (WINAPI *lstrcpyProc)(WCHAR *, CONST TCHAR *);
|
sl@0
|
90 |
BOOL (WINAPI *moveFileProc)(CONST TCHAR *, CONST TCHAR *);
|
sl@0
|
91 |
BOOL (WINAPI *removeDirectoryProc)(CONST TCHAR *);
|
sl@0
|
92 |
DWORD (WINAPI *searchPathProc)(CONST TCHAR *, CONST TCHAR *,
|
sl@0
|
93 |
CONST TCHAR *, DWORD, WCHAR *, TCHAR **);
|
sl@0
|
94 |
BOOL (WINAPI *setCurrentDirectoryProc)(CONST TCHAR *);
|
sl@0
|
95 |
BOOL (WINAPI *setFileAttributesProc)(CONST TCHAR *, DWORD);
|
sl@0
|
96 |
/*
|
sl@0
|
97 |
* These two function pointers will only be set when
|
sl@0
|
98 |
* Tcl_FindExecutable is called. If you don't ever call that
|
sl@0
|
99 |
* function, the application will crash whenever WinTcl tries to call
|
sl@0
|
100 |
* functions through these null pointers. That is not a bug in Tcl
|
sl@0
|
101 |
* -- Tcl_FindExecutable is obligatory in recent Tcl releases.
|
sl@0
|
102 |
*/
|
sl@0
|
103 |
BOOL (WINAPI *getFileAttributesExProc)(CONST TCHAR *,
|
sl@0
|
104 |
GET_FILEEX_INFO_LEVELS, LPVOID);
|
sl@0
|
105 |
BOOL (WINAPI *createHardLinkProc)(CONST TCHAR*, CONST TCHAR*,
|
sl@0
|
106 |
LPSECURITY_ATTRIBUTES);
|
sl@0
|
107 |
|
sl@0
|
108 |
INT (__cdecl *utimeProc)(CONST TCHAR*, struct _utimbuf *);
|
sl@0
|
109 |
/* These two are also NULL at start; see comment above */
|
sl@0
|
110 |
HANDLE (WINAPI *findFirstFileExProc)(CONST TCHAR*, UINT,
|
sl@0
|
111 |
LPVOID, UINT,
|
sl@0
|
112 |
LPVOID, DWORD);
|
sl@0
|
113 |
BOOL (WINAPI *getVolumeNameForVMPProc)(CONST TCHAR*, TCHAR*, DWORD);
|
sl@0
|
114 |
|
sl@0
|
115 |
DWORD (WINAPI *getLongPathNameProc)(CONST TCHAR*, TCHAR*, DWORD);
|
sl@0
|
116 |
/*
|
sl@0
|
117 |
* These six are for the security sdk to get correct file
|
sl@0
|
118 |
* permissions on NT, 2000, XP, etc. On 95,98,ME they are
|
sl@0
|
119 |
* always null.
|
sl@0
|
120 |
*/
|
sl@0
|
121 |
BOOL (WINAPI *getFileSecurityProc)(LPCTSTR lpFileName,
|
sl@0
|
122 |
SECURITY_INFORMATION RequestedInformation,
|
sl@0
|
123 |
PSECURITY_DESCRIPTOR pSecurityDescriptor,
|
sl@0
|
124 |
DWORD nLength,
|
sl@0
|
125 |
LPDWORD lpnLengthNeeded);
|
sl@0
|
126 |
BOOL (WINAPI *impersonateSelfProc) (SECURITY_IMPERSONATION_LEVEL
|
sl@0
|
127 |
ImpersonationLevel);
|
sl@0
|
128 |
BOOL (WINAPI *openThreadTokenProc) (HANDLE ThreadHandle,
|
sl@0
|
129 |
DWORD DesiredAccess, BOOL OpenAsSelf,
|
sl@0
|
130 |
PHANDLE TokenHandle);
|
sl@0
|
131 |
BOOL (WINAPI *revertToSelfProc) (void);
|
sl@0
|
132 |
VOID (WINAPI *mapGenericMaskProc) (PDWORD AccessMask,
|
sl@0
|
133 |
PGENERIC_MAPPING GenericMapping);
|
sl@0
|
134 |
BOOL (WINAPI *accessCheckProc)(PSECURITY_DESCRIPTOR pSecurityDescriptor,
|
sl@0
|
135 |
HANDLE ClientToken, DWORD DesiredAccess,
|
sl@0
|
136 |
PGENERIC_MAPPING GenericMapping,
|
sl@0
|
137 |
PPRIVILEGE_SET PrivilegeSet,
|
sl@0
|
138 |
LPDWORD PrivilegeSetLength,
|
sl@0
|
139 |
LPDWORD GrantedAccess,
|
sl@0
|
140 |
LPBOOL AccessStatus);
|
sl@0
|
141 |
/*
|
sl@0
|
142 |
* Unicode console support. WriteConsole and ReadConsole
|
sl@0
|
143 |
*/
|
sl@0
|
144 |
BOOL (WINAPI *readConsoleProc)(HANDLE hConsoleInput,
|
sl@0
|
145 |
LPVOID lpBuffer,
|
sl@0
|
146 |
DWORD nNumberOfCharsToRead,
|
sl@0
|
147 |
LPDWORD lpNumberOfCharsRead,
|
sl@0
|
148 |
LPVOID lpReserved);
|
sl@0
|
149 |
BOOL (WINAPI *writeConsoleProc)(HANDLE hConsoleOutput,
|
sl@0
|
150 |
const VOID* lpBuffer,
|
sl@0
|
151 |
DWORD nNumberOfCharsToWrite,
|
sl@0
|
152 |
LPDWORD lpNumberOfCharsWritten,
|
sl@0
|
153 |
LPVOID lpReserved);
|
sl@0
|
154 |
} TclWinProcs;
|
sl@0
|
155 |
|
sl@0
|
156 |
EXTERN TclWinProcs *tclWinProcs;
|
sl@0
|
157 |
|
sl@0
|
158 |
/*
|
sl@0
|
159 |
* Declarations of functions that are not accessible by way of the
|
sl@0
|
160 |
* stubs table.
|
sl@0
|
161 |
*/
|
sl@0
|
162 |
|
sl@0
|
163 |
EXTERN void TclWinEncodingsCleanup();
|
sl@0
|
164 |
EXTERN void TclWinResetInterfaceEncodings();
|
sl@0
|
165 |
EXTERN void TclWinInit(HINSTANCE hInst);
|
sl@0
|
166 |
EXTERN int TclWinSymLinkCopyDirectory(CONST TCHAR* LinkOriginal,
|
sl@0
|
167 |
CONST TCHAR* LinkCopy);
|
sl@0
|
168 |
EXTERN int TclWinSymLinkDelete(CONST TCHAR* LinkOriginal,
|
sl@0
|
169 |
int linkOnly);
|
sl@0
|
170 |
EXTERN char TclWinDriveLetterForVolMountPoint(CONST WCHAR *mountPoint);
|
sl@0
|
171 |
#if defined(TCL_THREADS) && defined(USE_THREAD_ALLOC)
|
sl@0
|
172 |
EXTERN void TclWinFreeAllocCache(void);
|
sl@0
|
173 |
EXTERN void TclFreeAllocCache(void *);
|
sl@0
|
174 |
EXTERN Tcl_Mutex *TclpNewAllocMutex(void);
|
sl@0
|
175 |
EXTERN void *TclpGetAllocCache(void);
|
sl@0
|
176 |
EXTERN void TclpSetAllocCache(void *);
|
sl@0
|
177 |
#endif /* TCL_THREADS */
|
sl@0
|
178 |
|
sl@0
|
179 |
/* Needed by tclWinFile.c and tclWinFCmd.c */
|
sl@0
|
180 |
#ifndef FILE_ATTRIBUTE_REPARSE_POINT
|
sl@0
|
181 |
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
|
sl@0
|
182 |
#endif
|
sl@0
|
183 |
|
sl@0
|
184 |
#include "tclIntPlatDecls.h"
|
sl@0
|
185 |
|
sl@0
|
186 |
# undef TCL_STORAGE_CLASS
|
sl@0
|
187 |
# define TCL_STORAGE_CLASS DLLIMPORT
|
sl@0
|
188 |
|
sl@0
|
189 |
#endif /* _TCLWININT */
|