OSDN Git Service

Updated to tcl 8.4.1
[pf3gnuchains/sourceware.git] / tcl / win / tclWinPort.h
index eae022b..57b5bac 100644 (file)
 #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 */
 
 /*
  *---------------------------------------------------------------------------
@@ -60,30 +56,32 @@ typedef float *TCHAR;
 #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
 
 /*
@@ -91,7 +89,7 @@ typedef float *TCHAR;
  */
 
 #ifndef ENOTSUP
-#define        ENOTSUP         -1030507
+#   define ENOTSUP     -1030507
 #endif
 
 /*
@@ -100,123 +98,121 @@ typedef float *TCHAR;
  */
 
 #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
@@ -227,7 +223,7 @@ typedef float *TCHAR;
 #   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)
@@ -287,41 +283,53 @@ typedef float *TCHAR;
  * 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
@@ -341,10 +349,10 @@ typedef float *TCHAR;
 
 #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
@@ -362,16 +370,30 @@ typedef float *TCHAR;
 #    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 
@@ -400,16 +422,30 @@ extern int chdir (const char*);
 #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
@@ -421,6 +457,9 @@ extern int chdir (const char*);
 #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 
@@ -435,12 +474,14 @@ extern int chdir (const char*);
  */
 
 #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));
                                         
@@ -464,18 +505,28 @@ typedef CRITICAL_SECTION TclpMutex;
 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 */
-