#endif
#ifdef CHECK_UNICODE_CALLS
-
-#define _UNICODE
-#define UNICODE
-
-#define __TCHAR_DEFINED
-typedef float *_TCHAR;
-
-#define _TCHAR_DEFINED
-typedef float *TCHAR;
-
-#endif
+# define _UNICODE
+# define UNICODE
+# define __TCHAR_DEFINED
+ typedef float *_TCHAR;
+# define _TCHAR_DEFINED
+ typedef float *TCHAR;
+#endif /* CHECK_UNICODE_CALLS */
/*
*---------------------------------------------------------------------------
#ifndef __MWERKS__
#include <sys/stat.h>
#include <sys/timeb.h>
-#include <sys/utime.h>
-#endif
+# ifdef __BORLANDC__
+# include <utime.h>
+# else
+# include <sys/utime.h>
+# endif /* __BORLANDC__ */
+#endif /* __MWERKS__ */
#include <time.h>
-#include <winsock2.h>
-
-
#define WIN32_LEAN_AND_MEAN
-#define __USE_W32_SOCKETS
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
+#include <winsock2.h>
+
#ifdef BUILD_tcl
-# undef TCL_STORAGE_CLASS
-# define TCL_STORAGE_CLASS DLLEXPORT
-#endif
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLEXPORT
+#endif /* BUILD_tcl */
/*
* Define EINPROGRESS in terms of WSAEINPROGRESS.
*/
#ifndef EINPROGRESS
-#define EINPROGRESS WSAEINPROGRESS
+# define EINPROGRESS WSAEINPROGRESS
#endif
/*
*/
#ifndef ENOTSUP
-#define ENOTSUP -1030507
+# define ENOTSUP -1030507
#endif
/*
*/
#ifndef EWOULDBLOCK
-#define EWOULDBLOCK EAGAIN
+# define EWOULDBLOCK EAGAIN
#endif
#ifndef EALREADY
-#define EALREADY 149 /* operation already in progress */
+# define EALREADY 149 /* operation already in progress */
#endif
#ifndef ENOTSOCK
-#define ENOTSOCK 95 /* Socket operation on non-socket */
+# define ENOTSOCK 95 /* Socket operation on non-socket */
#endif
#ifndef EDESTADDRREQ
-#define EDESTADDRREQ 96 /* Destination address required */
+# define EDESTADDRREQ 96 /* Destination address required */
#endif
#ifndef EMSGSIZE
-#define EMSGSIZE 97 /* Message too long */
+# define EMSGSIZE 97 /* Message too long */
#endif
#ifndef EPROTOTYPE
-#define EPROTOTYPE 98 /* Protocol wrong type for socket */
+# define EPROTOTYPE 98 /* Protocol wrong type for socket */
#endif
#ifndef ENOPROTOOPT
-#define ENOPROTOOPT 99 /* Protocol not available */
+# define ENOPROTOOPT 99 /* Protocol not available */
#endif
#ifndef EPROTONOSUPPORT
-#define EPROTONOSUPPORT 120 /* Protocol not supported */
+# define EPROTONOSUPPORT 120 /* Protocol not supported */
#endif
#ifndef ESOCKTNOSUPPORT
-#define ESOCKTNOSUPPORT 121 /* Socket type not supported */
+# define ESOCKTNOSUPPORT 121 /* Socket type not supported */
#endif
#ifndef EOPNOTSUPP
-#define EOPNOTSUPP 122 /* Operation not supported on socket */
+# define EOPNOTSUPP 122 /* Operation not supported on socket */
#endif
#ifndef EPFNOSUPPORT
-#define EPFNOSUPPORT 123 /* Protocol family not supported */
+# define EPFNOSUPPORT 123 /* Protocol family not supported */
#endif
#ifndef EAFNOSUPPORT
-#define EAFNOSUPPORT 124 /* Address family not supported */
+# define EAFNOSUPPORT 124 /* Address family not supported */
#endif
#ifndef EADDRINUSE
-#define EADDRINUSE 125 /* Address already in use */
+# define EADDRINUSE 125 /* Address already in use */
#endif
#ifndef EADDRNOTAVAIL
-#define EADDRNOTAVAIL 126 /* Can't assign requested address */
+# define EADDRNOTAVAIL 126 /* Can't assign requested address */
#endif
#ifndef ENETDOWN
-#define ENETDOWN 127 /* Network is down */
+# define ENETDOWN 127 /* Network is down */
#endif
#ifndef ENETUNREACH
-#define ENETUNREACH 128 /* Network is unreachable */
+# define ENETUNREACH 128 /* Network is unreachable */
#endif
#ifndef ENETRESET
-#define ENETRESET 129 /* Network dropped connection on reset */
+# define ENETRESET 129 /* Network dropped connection on reset */
#endif
#ifndef ECONNABORTED
-#define ECONNABORTED 130 /* Software caused connection abort */
+# define ECONNABORTED 130 /* Software caused connection abort */
#endif
#ifndef ECONNRESET
-#define ECONNRESET 131 /* Connection reset by peer */
+# define ECONNRESET 131 /* Connection reset by peer */
#endif
#ifndef ENOBUFS
-#define ENOBUFS 132 /* No buffer space available */
+# define ENOBUFS 132 /* No buffer space available */
#endif
#ifndef EISCONN
-#define EISCONN 133 /* Socket is already connected */
+# define EISCONN 133 /* Socket is already connected */
#endif
#ifndef ENOTCONN
-#define ENOTCONN 134 /* Socket is not connected */
+# define ENOTCONN 134 /* Socket is not connected */
#endif
#ifndef ESHUTDOWN
-#define ESHUTDOWN 143 /* Can't send after socket shutdown */
+# define ESHUTDOWN 143 /* Can't send after socket shutdown */
#endif
#ifndef ETOOMANYREFS
-#define ETOOMANYREFS 144 /* Too many references: can't splice */
+# define ETOOMANYREFS 144 /* Too many references: can't splice */
#endif
#ifndef ETIMEDOUT
-#define ETIMEDOUT 145 /* Connection timed out */
+# define ETIMEDOUT 145 /* Connection timed out */
#endif
#ifndef ECONNREFUSED
-#define ECONNREFUSED 146 /* Connection refused */
+# define ECONNREFUSED 146 /* Connection refused */
#endif
#ifndef ELOOP
-#define ELOOP 90 /* Symbolic link loop */
+# define ELOOP 90 /* Symbolic link loop */
#endif
#ifndef EHOSTDOWN
-#define EHOSTDOWN 147 /* Host is down */
+# define EHOSTDOWN 147 /* Host is down */
#endif
#ifndef EHOSTUNREACH
-#define EHOSTUNREACH 148 /* No route to host */
+# define EHOSTUNREACH 148 /* No route to host */
#endif
#ifndef ENOTEMPTY
-#define ENOTEMPTY 93 /* directory not empty */
+# define ENOTEMPTY 93 /* directory not empty */
#endif
#ifndef EUSERS
-#define EUSERS 94 /* Too many users (for UFS) */
+# define EUSERS 94 /* Too many users (for UFS) */
#endif
#ifndef EDQUOT
-#define EDQUOT 49 /* Disc quota exceeded */
+# define EDQUOT 69 /* Disc quota exceeded */
#endif
#ifndef ESTALE
-#define ESTALE 151 /* Stale NFS file handle */
+# define ESTALE 151 /* Stale NFS file handle */
#endif
#ifndef EREMOTE
-#define EREMOTE 66 /* The object is remote */
+# define EREMOTE 66 /* The object is remote */
#endif
-/* On cygwin, we just use the supplied malloc and free, rather than
- using tclAlloc.c. The cygwin32 malloc is derived from the same
- sources as tclAlloc.c, anyhow. */
-#if defined(__CYGWIN__) && !defined(__WIN32__)
-#define TclpAlloc(size) malloc(size)
-#define TclpFree(ptr) free(ptr)
-#define TclpRealloc(ptr, size) realloc(ptr, size)
-#else
-#define TclpSysAlloc(size, isBin) ((void*)HeapAlloc(GetProcessHeap(), \
- (DWORD)0, (DWORD)size))
-#define TclpSysFree(ptr) (HeapFree(GetProcessHeap(), \
- (DWORD)0, (HGLOBAL)ptr))
-#define TclpSysRealloc(ptr, size) ((void*)HeapReAlloc(GetProcessHeap(), \
- (DWORD)0, (LPVOID)ptr, (DWORD)size))
-#endif
+/*
+ * It is very hard to determine how Windows reacts to attempting to
+ * set a file pointer outside the input datatype's representable
+ * region. So we fake the error code ourselves.
+ */
+
+#ifndef EOVERFLOW
+# ifdef EFBIG
+# define EOVERFLOW EFBIG /* The object couldn't fit in the datatype */
+# else /* !EFBIG */
+# define EOVERFLOW EINVAL /* Better than nothing! */
+# endif /* EFBIG */
+#endif /* !EOVERFLOW */
/*
* Supply definitions for macros to query wait status, if not already
# define WAIT_STATUS_TYPE union wait
#else
# define WAIT_STATUS_TYPE int
-#endif
+#endif /* TCL_UNION_WAIT */
#ifndef WIFEXITED
# define WIFEXITED(stat) (((*((int *) &(stat))) & 0xff) == 0)
* defined.
*/
+#ifndef S_IFLNK
+#define S_IFLNK 0120000 /* Symbolic Link */
+#endif
+
#ifndef S_ISREG
# ifdef S_IFREG
# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
# else
# define S_ISREG(m) 0
# endif
-# endif
+#endif /* !S_ISREG */
#ifndef S_ISDIR
# ifdef S_IFDIR
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
# else
# define S_ISDIR(m) 0
# endif
-# endif
+#endif /* !S_ISDIR */
#ifndef S_ISCHR
# ifdef S_IFCHR
# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
# else
# define S_ISCHR(m) 0
# endif
-# endif
+#endif /* !S_ISCHR */
#ifndef S_ISBLK
# ifdef S_IFBLK
# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
# else
# define S_ISBLK(m) 0
# endif
-# endif
+#endif /* !S_ISBLK */
#ifndef S_ISFIFO
# ifdef S_IFIFO
# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
# else
# define S_ISFIFO(m) 0
# endif
-# endif
+#endif /* !S_ISFIFO */
+#ifndef S_ISLNK
+# ifdef S_IFLNK
+# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+# else
+# define S_ISLNK(m) 0
+# endif
+#endif /* !S_ISLNK */
+
/*
* Define MAXPATHLEN in terms of MAXPATH if available
#if ! TCL_PID_T
# define pid_t int
-#endif
+#endif /* !TCL_PID_T */
#if ! TCL_UID_T
# define uid_t int
-#endif
+#endif /* !TCL_UID_T */
/*
* Visual C++ has some odd names for common functions, so we need to
# endif
#endif /* _MSC_VER || __MINGW32__ */
+/*
+ * Borland's timezone and environ functions.
+ */
+
+#ifdef __BORLANDC__
+# define timezone _timezone
+# define environ _environ
+#endif /* __BORLANDC__ */
+
#ifdef __CYGWIN__
-/* On cygwin32, the environment is imported from the cygwin32 DLL. */
-__declspec(dllimport) extern char **__cygwin_environ;
+/* On Cygwin, the environment is imported from the Cygwin DLL. */
+ DLLIMPORT extern char **__cygwin_environ;
# define environ __cygwin_environ
# define putenv TclCygwinPutenv
# define timezone _timezone
-extern int chdir (const char*);
#endif /* __CYGWIN__ */
/*
+ * There is no platform-specific panic routine for Windows in the Tcl internals.
+ */
+
+#define TclpPanic ((Tcl_PanicProc *) NULL)
+
+/*
*---------------------------------------------------------------------------
* The following macros and declarations represent the interface between
* generic and windows-specific parts of Tcl. Some of the macros may
#define USE_PUTENV 1
/*
+ * Msvcrt's putenv() copies the string rather than takes ownership of it.
+ */
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+# define HAVE_PUTENV_THAT_COPIES 1
+#endif
+
+/*
* The following defines wrap the system memory allocation routines for
* use by tclAlloc.c.
*/
-#define TclpSysAlloc(size, isBin) ((void*)HeapAlloc(GetProcessHeap(), \
+#ifdef __CYGWIN__
+# define TclpSysAlloc(size, isBin) malloc((size))
+# define TclpSysFree(ptr) free((ptr))
+# define TclpSysRealloc(ptr, size) realloc((ptr), (size))
+#else
+# define TclpSysAlloc(size, isBin) ((void*)HeapAlloc(GetProcessHeap(), \
(DWORD)0, (DWORD)size))
-#define TclpSysFree(ptr) (HeapFree(GetProcessHeap(), \
+# define TclpSysFree(ptr) (HeapFree(GetProcessHeap(), \
(DWORD)0, (HGLOBAL)ptr))
-#define TclpSysRealloc(ptr, size) ((void*)HeapReAlloc(GetProcessHeap(), \
+# define TclpSysRealloc(ptr, size) ((void*)HeapReAlloc(GetProcessHeap(), \
(DWORD)0, (LPVOID)ptr, (DWORD)size))
+#endif
/*
* The following defines map from standard socket names to our internal
#define getsockopt TclWinGetSockOpt
#define ntohs TclWinNToHS
#define setsockopt TclWinSetSockOpt
+/* This type is not defined in the Windows headers */
+#define socklen_t int
+
/*
* The following macros have trivial definitions, allowing generic code to
*/
#define TclpExit exit
-#define TclpLstat TclpStat
/*
* Declarations for Windows-only functions.
*/
+EXTERN HANDLE TclWinSerialReopen _ANSI_ARGS_(( HANDLE handle,
+ CONST TCHAR *name, DWORD access));
+
EXTERN Tcl_Channel TclWinOpenSerialChannel _ANSI_ARGS_((HANDLE handle,
char *channelName, int permissions));
EXTERN void TclpMutexInit _ANSI_ARGS_((TclpMutex *mPtr));
EXTERN void TclpMutexLock _ANSI_ARGS_((TclpMutex *mPtr));
EXTERN void TclpMutexUnlock _ANSI_ARGS_((TclpMutex *mPtr));
-#else
+#else /* !TCL_THREADS */
typedef int TclpMutex;
#define TclpMutexInit(a)
#define TclpMutexLock(a)
#define TclpMutexUnlock(a)
#endif /* TCL_THREADS */
+#ifdef TCL_WIDE_INT_TYPE
+EXTERN Tcl_WideInt strtoll _ANSI_ARGS_((CONST char *string,
+ char **endPtr, int base));
+EXTERN Tcl_WideUInt strtoull _ANSI_ARGS_((CONST char *string,
+ char **endPtr, int base));
+#endif /* TCL_WIDE_INT_TYPE */
+
+#ifndef INVALID_SET_FILE_POINTER
+#define INVALID_SET_FILE_POINTER 0xFFFFFFFF
+#endif /* INVALID_SET_FILE_POINTER */
+
#include "tclPlatDecls.h"
#include "tclIntPlatDecls.h"
-# undef TCL_STORAGE_CLASS
-# define TCL_STORAGE_CLASS DLLIMPORT
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLIMPORT
#endif /* _TCLWINPORT */
-