summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--generic/tclDecls.h22
-rw-r--r--generic/tclInt.decls132
-rw-r--r--generic/tclIntPlatDecls.h409
-rw-r--r--generic/tclPlatDecls.h24
-rw-r--r--generic/tclStubInit.c172
-rw-r--r--tools/genStubs.tcl176
-rw-r--r--win/Makefile.in14
-rw-r--r--win/tclWinSock.c29
9 files changed, 444 insertions, 543 deletions
diff --git a/ChangeLog b/ChangeLog
index 1769bd9..ff1d562 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-05-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/genStubs.tcl: Let cygwin share stub table with win32
+ * win/Makefile.in: Don't hardcode dde and reg dll version numbers
+ * win/tclWinSock.c: implement TclpInetNtoa for win32
+ * generic/tclInt.decls: Revert most of [ae92de6078], since when
+ we let cygwin share the win32 stub table this is no longer necessary
+ * generic/tcl*Decls.h: re-generated
+
2012-05-21 Don Porter <dgp@users.sourceforge.net>
* generic/tclFileName.c: When using Tcl_SetObjLength() calls to grow
diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index 9261a1a..b5d376e 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -1627,7 +1627,7 @@ typedef struct TclStubs {
int (*tcl_PkgProvideEx) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, CONST char *version, ClientData clientData)); /* 0 */
CONST84_RETURN char * (*tcl_PkgRequireEx) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, CONST char *version, int exact, ClientData *clientDataPtr)); /* 1 */
- void (*tcl_Panic) _ANSI_ARGS_(TCL_VARARGS(CONST char *,format)); /* 2 */
+ void (*tcl_Panic) _ANSI_ARGS_((CONST char *format, ...)); /* 2 */
char * (*tcl_Alloc) _ANSI_ARGS_((unsigned int size)); /* 3 */
void (*tcl_Free) _ANSI_ARGS_((char *ptr)); /* 4 */
char * (*tcl_Realloc) _ANSI_ARGS_((char *ptr, unsigned int size)); /* 5 */
@@ -1637,18 +1637,18 @@ typedef struct TclStubs {
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
void (*tcl_CreateFileHandler) _ANSI_ARGS_((int fd, int mask, Tcl_FileProc *proc, ClientData clientData)); /* 9 */
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) /* WIN */
VOID *reserved9;
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
VOID *reserved9;
#endif /* MAC_TCL */
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
void (*tcl_DeleteFileHandler) _ANSI_ARGS_((int fd)); /* 10 */
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) /* WIN */
VOID *reserved10;
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
VOID *reserved10;
#endif /* MAC_TCL */
@@ -1656,7 +1656,7 @@ typedef struct TclStubs {
void (*tcl_Sleep) _ANSI_ARGS_((int ms)); /* 12 */
int (*tcl_WaitForEvent) _ANSI_ARGS_((Tcl_Time *timePtr)); /* 13 */
int (*tcl_AppendAllObjTypes) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Obj *objPtr)); /* 14 */
- void (*tcl_AppendStringsToObj) _ANSI_ARGS_(TCL_VARARGS(Tcl_Obj *,objPtr)); /* 15 */
+ void (*tcl_AppendStringsToObj) _ANSI_ARGS_((Tcl_Obj *objPtr, ...)); /* 15 */
void (*tcl_AppendToObj) _ANSI_ARGS_((Tcl_Obj *objPtr, CONST char *bytes, int length)); /* 16 */
Tcl_Obj * (*tcl_ConcatObj) _ANSI_ARGS_((int objc, Tcl_Obj *CONST objv[])); /* 17 */
int (*tcl_ConvertToType) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Obj *objPtr, Tcl_ObjType *typePtr)); /* 18 */
@@ -1711,7 +1711,7 @@ typedef struct TclStubs {
void (*tcl_AddObjErrorInfo) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *message, int length)); /* 67 */
void (*tcl_AllowExceptions) _ANSI_ARGS_((Tcl_Interp *interp)); /* 68 */
void (*tcl_AppendElement) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *element)); /* 69 */
- void (*tcl_AppendResult) _ANSI_ARGS_(TCL_VARARGS(Tcl_Interp *,interp)); /* 70 */
+ void (*tcl_AppendResult) _ANSI_ARGS_((Tcl_Interp *interp, ...)); /* 70 */
Tcl_AsyncHandler (*tcl_AsyncCreate) _ANSI_ARGS_((Tcl_AsyncProc *proc, ClientData clientData)); /* 71 */
void (*tcl_AsyncDelete) _ANSI_ARGS_((Tcl_AsyncHandler async)); /* 72 */
int (*tcl_AsyncInvoke) _ANSI_ARGS_((Tcl_Interp *interp, int code)); /* 73 */
@@ -1811,9 +1811,9 @@ typedef struct TclStubs {
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
int (*tcl_GetOpenFile) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *chanID, int forWriting, int checkUsage, ClientData *filePtr)); /* 167 */
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) /* WIN */
VOID *reserved167;
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
VOID *reserved167;
#endif /* MAC_TCL */
@@ -1877,7 +1877,7 @@ typedef struct TclStubs {
int (*tcl_SetChannelOption) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Channel chan, CONST char *optionName, CONST char *newValue)); /* 225 */
int (*tcl_SetCommandInfo) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *cmdName, CONST Tcl_CmdInfo *infoPtr)); /* 226 */
void (*tcl_SetErrno) _ANSI_ARGS_((int err)); /* 227 */
- void (*tcl_SetErrorCode) _ANSI_ARGS_(TCL_VARARGS(Tcl_Interp *,interp)); /* 228 */
+ void (*tcl_SetErrorCode) _ANSI_ARGS_((Tcl_Interp *interp, ...)); /* 228 */
void (*tcl_SetMaxBlockTime) _ANSI_ARGS_((Tcl_Time *timePtr)); /* 229 */
void (*tcl_SetPanicProc) _ANSI_ARGS_((Tcl_PanicProc *panicProc)); /* 230 */
int (*tcl_SetRecursionLimit) _ANSI_ARGS_((Tcl_Interp *interp, int depth)); /* 231 */
@@ -1909,7 +1909,7 @@ typedef struct TclStubs {
void (*tcl_UpdateLinkedVar) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *varName)); /* 257 */
int (*tcl_UpVar) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *frameName, CONST char *varName, CONST char *localName, int flags)); /* 258 */
int (*tcl_UpVar2) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *frameName, CONST char *part1, CONST char *part2, CONST char *localName, int flags)); /* 259 */
- int (*tcl_VarEval) _ANSI_ARGS_(TCL_VARARGS(Tcl_Interp *,interp)); /* 260 */
+ int (*tcl_VarEval) _ANSI_ARGS_((Tcl_Interp *interp, ...)); /* 260 */
ClientData (*tcl_VarTraceInfo) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *varName, int flags, Tcl_VarTraceProc *procPtr, ClientData prevClientData)); /* 261 */
ClientData (*tcl_VarTraceInfo2) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *part1, CONST char *part2, int flags, Tcl_VarTraceProc *procPtr, ClientData prevClientData)); /* 262 */
int (*tcl_Write) _ANSI_ARGS_((Tcl_Channel chan, CONST char *s, int slen)); /* 263 */
diff --git a/generic/tclInt.decls b/generic/tclInt.decls
index 9944ab6..67f3db6 100644
--- a/generic/tclInt.decls
+++ b/generic/tclInt.decls
@@ -410,9 +410,6 @@ declare 103 {
declare 104 {
int TclSockMinimumBuffersOld(int sock, int size)
}
-declare 110 {
- int TclSockMinimumBuffers(void *sock, int size)
-}
# Replaced by Tcl_FSStat in 8.4:
#declare 105 {
# int TclStat(const char *path, Tcl_StatBuf *buf)
@@ -429,6 +426,9 @@ declare 108 {
declare 109 {
int TclUpdateReturnInfo(Interp *iPtr)
}
+declare 110 {
+ int TclSockMinimumBuffers(void *sock, int size)
+}
# Removed in 8.1:
# declare 110 {
# char *TclWordEnd(char *start, char *lastChar, int nested, int *semiPtr)
@@ -844,12 +844,16 @@ declare 3 win {
declare 4 win {
HINSTANCE TclWinGetTclInstance(void)
}
+# new for 8.4.20+/8.5.12+ Cygwin only
+declare 5 win {
+ int TclUnixWaitForFile(int fd, int mask, int timeout)
+}
# Removed in 8.1:
# declare 5 win {
# HINSTANCE TclWinLoadLibrary(char *name)
# }
declare 6 win {
- u_short TclWinNToHS(u_short ns)
+ unsigned short TclWinNToHS(unsigned short ns)
}
declare 7 win {
int TclWinSetSockOpt(SOCKET s, int level, int optname,
@@ -861,6 +865,10 @@ declare 8 win {
declare 9 win {
int TclWinGetPlatformId(void)
}
+# new for 8.4.20+/8.5.12+ Cygwin only
+declare 10 win {
+ Tcl_DirEntry *TclpReaddir(DIR *dir)
+}
# Removed in 8.3.1 (for Win32s only)
#declare 10 win {
# int TclWinSynchSpawn(void *args, int type, void **trans, Tcl_Pid *pidPtr)
@@ -882,9 +890,9 @@ declare 14 win {
int TclpCreatePipe(TclFile *readPipe, TclFile *writePipe)
}
declare 15 win {
- int TclpCreateProcess(Tcl_Interp *interp, int argc, const char **argv,
- TclFile inputFile, TclFile outputFile, TclFile errorFile,
- Tcl_Pid *pidPtr)
+ int TclpCreateProcess(Tcl_Interp *interp, int argc,
+ const char **argv, TclFile inputFile, TclFile outputFile,
+ TclFile errorFile, Tcl_Pid *pidPtr)
}
# Signature changed in 8.1:
# declare 16 win {
@@ -902,7 +910,10 @@ declare 19 win {
declare 20 win {
void TclWinAddProcess(HANDLE hProcess, DWORD id)
}
-
+# new for 8.4.20+/8.5.12+
+declare 21 win {
+ char *TclpInetNtoa(struct in_addr addr)
+}
# removed permanently for 8.4
#declare 21 win {
# void TclpAsyncMark(Tcl_AsyncHandler async)
@@ -945,51 +956,42 @@ declare 29 win {
# Pipe channel functions
-# On non-cygwin, this is actually a reference to TclGetAndDetachPids
declare 0 unix {
- void TclWinConvertError(unsigned int errCode)
+ void TclGetAndDetachPids(Tcl_Interp *interp, Tcl_Channel chan)
}
-# On non-cygwin, this is actually a reference to TclpCloseFile
declare 1 unix {
- void TclWinConvertWSAError(unsigned int errCode)
+ int TclpCloseFile(TclFile file)
}
-# On non-cygwin, this is actually a reference to TclpCreateCommandChannel
declare 2 unix {
- struct servent *TclWinGetServByName(const char *nm, const char *proto)
+ Tcl_Channel TclpCreateCommandChannel(TclFile readFile,
+ TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr)
}
-# On non-cygwin, this is actually a reference to TclpCreatePipe
declare 3 unix {
- int TclWinGetSockOpt(void *s, int level, int optname,
- char *optval, int *optlen)
+ int TclpCreatePipe(TclFile *readPipe, TclFile *writePipe)
}
-# On non-cygwin, this is actually a reference to TclpCreateProcess
declare 4 unix {
- void *TclWinGetTclInstance(void)
+ int TclpCreateProcess(Tcl_Interp *interp, int argc,
+ const char **argv, TclFile inputFile, TclFile outputFile,
+ TclFile errorFile, Tcl_Pid *pidPtr)
}
# Signature changed in 8.1:
# declare 5 unix {
# TclFile TclpCreateTempFile(char *contents, Tcl_DString *namePtr)
# }
-
-# On non-cygwin, this is actually a reference to TclpMakeFile
declare 6 unix {
- unsigned short TclWinNToHS(unsigned short ns)
+ TclFile TclpMakeFile(Tcl_Channel channel, int direction)
}
-# On non-cygwin, this is actually a reference to TclpOpenFile
declare 7 unix {
- int TclWinSetSockOpt(void *s, int level, int optname,
- const char *optval, int optlen)
+ TclFile TclpOpenFile(const char *fname, int mode)
}
-# On non-cygwin, this is actually a reference to TclUnixWaitForFile
declare 8 unix {
- int TclpGetPid(Tcl_Pid pid)
+ int TclUnixWaitForFile(int fd, int mask, int timeout)
}
# Added in 8.1:
-# On non-cygwin, this is actually a reference to TclpCreateTempFile
declare 9 unix {
- int TclWinGetPlatformId(void)
+ TclFile TclpCreateTempFile(const char *contents)
}
# Added in 8.4:
@@ -999,88 +1001,18 @@ declare 10 unix {
}
# Slots 11 and 12 are forwarders for functions that were promoted to
# generic Stubs
-# On cygwin, this is actually a reference to TclGetAndDetachPids
declare 11 unix {
struct tm *TclpLocaltime_unix(TclpTime_t_CONST clock)
}
-# On cygwin, this is actually a reference to TclpCloseFile
declare 12 unix {
struct tm *TclpGmtime_unix(TclpTime_t_CONST clock)
}
-# On cygwin, this is a reference to TclpCreateCommandChannel
-# Otherwise, this is a reference to TclpInetNtoa
declare 13 unix {
- void TclIntPlatReserved13(void)
-}
-#On cygwin, TclpCreateProcess is here
-declare 15 unix {
- int TclMacOSXGetFileAttribute(Tcl_Interp *interp, int objIndex,
- Tcl_Obj *fileName, Tcl_Obj **attributePtrPtr)
-}
-#On cygwin, TclpMakeFile is here
-declare 18 unix {
- int TclMacOSXMatchType(Tcl_Interp *interp, const char *pathName,
- const char *fileName, Tcl_StatBuf *statBufPtr,
- Tcl_GlobTypeData *types)
-}
-#On cygwin, TclpOpenFile is here
-declare 19 unix {
- void TclMacOSXNotifierAddRunLoopMode(const void *runLoopMode)
-}
-declare 20 unix {
- void TclWinAddProcess(void *hProcess, unsigned int id)
-}
-declare 22 unix {
- TclFile TclpCreateTempFile(const char *contents)
-}
-declare 24 unix {
- char *TclWinNoBackslash(char *path)
-}
-declare 25 unix {
- TclPlatformType *TclWinGetPlatform(void)
-}
-declare 26 unix {
- void TclWinSetInterfaces(int wide)
-}
-declare 27 unix {
- void TclWinFlushDirtyChannels(void)
-}
-declare 28 unix {
- void TclWinResetInterfaces(void)
+ char *TclpInetNtoa(struct in_addr addr)
}
declare 29 unix {
int TclWinCPUID(unsigned int index, unsigned int *regs)
}
-declare 30 unix {
- void TclGetAndDetachPids(Tcl_Interp *interp, Tcl_Channel chan)
-}
-declare 31 unix {
- int TclpCloseFile(TclFile file)
-}
-declare 32 unix {
- Tcl_Channel TclpCreateCommandChannel(TclFile readFile,
- TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr)
-}
-declare 33 unix {
- int TclpCreatePipe(TclFile *readPipe, TclFile *writePipe)
-}
-declare 34 unix {
- int TclpCreateProcess(Tcl_Interp *interp,
- int argc, const char **argv, TclFile inputFile,
- TclFile outputFile, TclFile errorFile, Tcl_Pid *pidPtr)
-}
-declare 35 unix {
- char *TclpInetNtoa(struct in_addr addr)
-}
-declare 36 unix {
- TclFile TclpMakeFile(Tcl_Channel channel, int direction)
-}
-declare 37 unix {
- TclFile TclpOpenFile(const char *fname, int mode)
-}
-declare 38 unix {
- int TclUnixWaitForFile(int fd, int mask, int timeout)
-}
# Local Variables:
# mode: tcl
diff --git a/generic/tclIntPlatDecls.h b/generic/tclIntPlatDecls.h
index d109506..201c597 100644
--- a/generic/tclIntPlatDecls.h
+++ b/generic/tclIntPlatDecls.h
@@ -13,6 +13,11 @@
#ifndef _TCLINTPLATDECLS
#define _TCLINTPLATDECLS
+#ifdef __WIN32__
+# define Tcl_DirEntry void
+# define DIR void
+#endif
+
/*
* WARNING: This file is automatically generated by the tools/genStubs.tcl
* script. Any modifications to the function declarations below should be made
@@ -25,30 +30,37 @@
* Exported function declarations:
*/
-#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
+#if !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(MAC_TCL) /* UNIX */
/* 0 */
-EXTERN void TclWinConvertError _ANSI_ARGS_((unsigned int errCode));
+EXTERN void TclGetAndDetachPids _ANSI_ARGS_((Tcl_Interp *interp,
+ Tcl_Channel chan));
/* 1 */
-EXTERN void TclWinConvertWSAError _ANSI_ARGS_((
- unsigned int errCode));
+EXTERN int TclpCloseFile _ANSI_ARGS_((TclFile file));
/* 2 */
-EXTERN struct servent * TclWinGetServByName _ANSI_ARGS_((CONST char *nm,
- CONST char *proto));
+EXTERN Tcl_Channel TclpCreateCommandChannel _ANSI_ARGS_((
+ TclFile readFile, TclFile writeFile,
+ TclFile errorFile, int numPids,
+ Tcl_Pid *pidPtr));
/* 3 */
-EXTERN int TclWinGetSockOpt _ANSI_ARGS_((VOID *s, int level,
- int optname, char *optval, int *optlen));
+EXTERN int TclpCreatePipe _ANSI_ARGS_((TclFile *readPipe,
+ TclFile *writePipe));
/* 4 */
-EXTERN VOID * TclWinGetTclInstance _ANSI_ARGS_((void));
+EXTERN int TclpCreateProcess _ANSI_ARGS_((Tcl_Interp *interp,
+ int argc, CONST char **argv,
+ TclFile inputFile, TclFile outputFile,
+ TclFile errorFile, Tcl_Pid *pidPtr));
/* Slot 5 is reserved */
/* 6 */
-EXTERN unsigned short TclWinNToHS _ANSI_ARGS_((unsigned short ns));
+EXTERN TclFile TclpMakeFile _ANSI_ARGS_((Tcl_Channel channel,
+ int direction));
/* 7 */
-EXTERN int TclWinSetSockOpt _ANSI_ARGS_((VOID *s, int level,
- int optname, CONST char *optval, int optlen));
+EXTERN TclFile TclpOpenFile _ANSI_ARGS_((CONST char *fname,
+ int mode));
/* 8 */
-EXTERN int TclpGetPid _ANSI_ARGS_((Tcl_Pid pid));
+EXTERN int TclUnixWaitForFile _ANSI_ARGS_((int fd, int mask,
+ int timeout));
/* 9 */
-EXTERN int TclWinGetPlatformId _ANSI_ARGS_((void));
+EXTERN TclFile TclpCreateTempFile _ANSI_ARGS_((CONST char *contents));
/* 10 */
EXTERN Tcl_DirEntry * TclpReaddir _ANSI_ARGS_((DIR *dir));
/* 11 */
@@ -57,73 +69,27 @@ EXTERN struct tm * TclpLocaltime_unix _ANSI_ARGS_((
/* 12 */
EXTERN struct tm * TclpGmtime_unix _ANSI_ARGS_((TclpTime_t_CONST clock));
/* 13 */
-EXTERN void TclIntPlatReserved13 _ANSI_ARGS_((void));
+EXTERN char * TclpInetNtoa _ANSI_ARGS_((struct in_addr addr));
/* Slot 14 is reserved */
-/* 15 */
-EXTERN int TclMacOSXGetFileAttribute _ANSI_ARGS_((
- Tcl_Interp *interp, int objIndex,
- Tcl_Obj *fileName, Tcl_Obj **attributePtrPtr));
+/* Slot 15 is reserved */
/* Slot 16 is reserved */
/* Slot 17 is reserved */
-/* 18 */
-EXTERN int TclMacOSXMatchType _ANSI_ARGS_((Tcl_Interp *interp,
- CONST char *pathName, CONST char *fileName,
- Tcl_StatBuf *statBufPtr,
- Tcl_GlobTypeData *types));
-/* 19 */
-EXTERN void TclMacOSXNotifierAddRunLoopMode _ANSI_ARGS_((
- CONST VOID *runLoopMode));
-/* 20 */
-EXTERN void TclWinAddProcess _ANSI_ARGS_((VOID *hProcess,
- unsigned int id));
+/* Slot 18 is reserved */
+/* Slot 19 is reserved */
+/* Slot 20 is reserved */
/* Slot 21 is reserved */
-/* 22 */
-EXTERN TclFile TclpCreateTempFile _ANSI_ARGS_((CONST char *contents));
+/* Slot 22 is reserved */
/* Slot 23 is reserved */
-/* 24 */
-EXTERN char * TclWinNoBackslash _ANSI_ARGS_((char *path));
-/* 25 */
-EXTERN TclPlatformType * TclWinGetPlatform _ANSI_ARGS_((void));
-/* 26 */
-EXTERN void TclWinSetInterfaces _ANSI_ARGS_((int wide));
-/* 27 */
-EXTERN void TclWinFlushDirtyChannels _ANSI_ARGS_((void));
-/* 28 */
-EXTERN void TclWinResetInterfaces _ANSI_ARGS_((void));
+/* Slot 24 is reserved */
+/* Slot 25 is reserved */
+/* Slot 26 is reserved */
+/* Slot 27 is reserved */
+/* Slot 28 is reserved */
/* 29 */
EXTERN int TclWinCPUID _ANSI_ARGS_((unsigned int index,
unsigned int *regs));
-/* 30 */
-EXTERN void TclGetAndDetachPids _ANSI_ARGS_((Tcl_Interp *interp,
- Tcl_Channel chan));
-/* 31 */
-EXTERN int TclpCloseFile _ANSI_ARGS_((TclFile file));
-/* 32 */
-EXTERN Tcl_Channel TclpCreateCommandChannel _ANSI_ARGS_((
- TclFile readFile, TclFile writeFile,
- TclFile errorFile, int numPids,
- Tcl_Pid *pidPtr));
-/* 33 */
-EXTERN int TclpCreatePipe _ANSI_ARGS_((TclFile *readPipe,
- TclFile *writePipe));
-/* 34 */
-EXTERN int TclpCreateProcess _ANSI_ARGS_((Tcl_Interp *interp,
- int argc, CONST char **argv,
- TclFile inputFile, TclFile outputFile,
- TclFile errorFile, Tcl_Pid *pidPtr));
-/* 35 */
-EXTERN char * TclpInetNtoa _ANSI_ARGS_((struct in_addr addr));
-/* 36 */
-EXTERN TclFile TclpMakeFile _ANSI_ARGS_((Tcl_Channel channel,
- int direction));
-/* 37 */
-EXTERN TclFile TclpOpenFile _ANSI_ARGS_((CONST char *fname,
- int mode));
-/* 38 */
-EXTERN int TclUnixWaitForFile _ANSI_ARGS_((int fd, int mask,
- int timeout));
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */
/* 0 */
EXTERN void TclWinConvertError _ANSI_ARGS_((DWORD errCode));
/* 1 */
@@ -136,9 +102,11 @@ EXTERN int TclWinGetSockOpt _ANSI_ARGS_((SOCKET s, int level,
int optname, char *optval, int *optlen));
/* 4 */
EXTERN HINSTANCE TclWinGetTclInstance _ANSI_ARGS_((void));
-/* Slot 5 is reserved */
+/* 5 */
+EXTERN int TclUnixWaitForFile _ANSI_ARGS_((int fd, int mask,
+ int timeout));
/* 6 */
-EXTERN u_short TclWinNToHS _ANSI_ARGS_((u_short ns));
+EXTERN unsigned short TclWinNToHS _ANSI_ARGS_((unsigned short ns));
/* 7 */
EXTERN int TclWinSetSockOpt _ANSI_ARGS_((SOCKET s, int level,
int optname, CONST char *optval, int optlen));
@@ -146,7 +114,8 @@ EXTERN int TclWinSetSockOpt _ANSI_ARGS_((SOCKET s, int level,
EXTERN int TclpGetPid _ANSI_ARGS_((Tcl_Pid pid));
/* 9 */
EXTERN int TclWinGetPlatformId _ANSI_ARGS_((void));
-/* Slot 10 is reserved */
+/* 10 */
+EXTERN Tcl_DirEntry * TclpReaddir _ANSI_ARGS_((DIR *dir));
/* 11 */
EXTERN void TclGetAndDetachPids _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_Channel chan));
@@ -176,7 +145,8 @@ EXTERN TclFile TclpOpenFile _ANSI_ARGS_((CONST char *fname,
/* 20 */
EXTERN void TclWinAddProcess _ANSI_ARGS_((HANDLE hProcess,
DWORD id));
-/* Slot 21 is reserved */
+/* 21 */
+EXTERN char * TclpInetNtoa _ANSI_ARGS_((struct in_addr addr));
/* 22 */
EXTERN TclFile TclpCreateTempFile _ANSI_ARGS_((CONST char *contents));
/* 23 */
@@ -194,7 +164,7 @@ EXTERN void TclWinResetInterfaces _ANSI_ARGS_((void));
/* 29 */
EXTERN int TclWinCPUID _ANSI_ARGS_((unsigned int index,
unsigned int *regs));
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
/* 0 */
EXTERN VOID * TclpSysAlloc _ANSI_ARGS_((long size, int isBin));
@@ -270,59 +240,50 @@ typedef struct TclIntPlatStubs {
int magic;
struct TclIntPlatStubHooks *hooks;
-#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
- void (*tclWinConvertError) _ANSI_ARGS_((unsigned int errCode)); /* 0 */
- void (*tclWinConvertWSAError) _ANSI_ARGS_((unsigned int errCode)); /* 1 */
- struct servent * (*tclWinGetServByName) _ANSI_ARGS_((CONST char *nm, CONST char *proto)); /* 2 */
- int (*tclWinGetSockOpt) _ANSI_ARGS_((VOID *s, int level, int optname, char *optval, int *optlen)); /* 3 */
- VOID * (*tclWinGetTclInstance) _ANSI_ARGS_((void)); /* 4 */
+#if !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(MAC_TCL) /* UNIX */
+ void (*tclGetAndDetachPids) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Channel chan)); /* 0 */
+ int (*tclpCloseFile) _ANSI_ARGS_((TclFile file)); /* 1 */
+ Tcl_Channel (*tclpCreateCommandChannel) _ANSI_ARGS_((TclFile readFile, TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr)); /* 2 */
+ int (*tclpCreatePipe) _ANSI_ARGS_((TclFile *readPipe, TclFile *writePipe)); /* 3 */
+ int (*tclpCreateProcess) _ANSI_ARGS_((Tcl_Interp *interp, int argc, CONST char **argv, TclFile inputFile, TclFile outputFile, TclFile errorFile, Tcl_Pid *pidPtr)); /* 4 */
VOID *reserved5;
- unsigned short (*tclWinNToHS) _ANSI_ARGS_((unsigned short ns)); /* 6 */
- int (*tclWinSetSockOpt) _ANSI_ARGS_((VOID *s, int level, int optname, CONST char *optval, int optlen)); /* 7 */
- int (*tclpGetPid) _ANSI_ARGS_((Tcl_Pid pid)); /* 8 */
- int (*tclWinGetPlatformId) _ANSI_ARGS_((void)); /* 9 */
+ TclFile (*tclpMakeFile) _ANSI_ARGS_((Tcl_Channel channel, int direction)); /* 6 */
+ TclFile (*tclpOpenFile) _ANSI_ARGS_((CONST char *fname, int mode)); /* 7 */
+ int (*tclUnixWaitForFile) _ANSI_ARGS_((int fd, int mask, int timeout)); /* 8 */
+ TclFile (*tclpCreateTempFile) _ANSI_ARGS_((CONST char *contents)); /* 9 */
Tcl_DirEntry * (*tclpReaddir) _ANSI_ARGS_((DIR *dir)); /* 10 */
struct tm * (*tclpLocaltime_unix) _ANSI_ARGS_((TclpTime_t_CONST clock)); /* 11 */
struct tm * (*tclpGmtime_unix) _ANSI_ARGS_((TclpTime_t_CONST clock)); /* 12 */
- void (*tclIntPlatReserved13) _ANSI_ARGS_((void)); /* 13 */
+ char * (*tclpInetNtoa) _ANSI_ARGS_((struct in_addr addr)); /* 13 */
VOID *reserved14;
- int (*tclMacOSXGetFileAttribute) _ANSI_ARGS_((Tcl_Interp *interp, int objIndex, Tcl_Obj *fileName, Tcl_Obj **attributePtrPtr)); /* 15 */
+ VOID *reserved15;
VOID *reserved16;
VOID *reserved17;
- int (*tclMacOSXMatchType) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *pathName, CONST char *fileName, Tcl_StatBuf *statBufPtr, Tcl_GlobTypeData *types)); /* 18 */
- void (*tclMacOSXNotifierAddRunLoopMode) _ANSI_ARGS_((CONST VOID *runLoopMode)); /* 19 */
- void (*tclWinAddProcess) _ANSI_ARGS_((VOID *hProcess, unsigned int id)); /* 20 */
+ VOID *reserved18;
+ VOID *reserved19;
+ VOID *reserved20;
VOID *reserved21;
- TclFile (*tclpCreateTempFile) _ANSI_ARGS_((CONST char *contents)); /* 22 */
+ VOID *reserved22;
VOID *reserved23;
- char * (*tclWinNoBackslash) _ANSI_ARGS_((char *path)); /* 24 */
- TclPlatformType * (*tclWinGetPlatform) _ANSI_ARGS_((void)); /* 25 */
- void (*tclWinSetInterfaces) _ANSI_ARGS_((int wide)); /* 26 */
- void (*tclWinFlushDirtyChannels) _ANSI_ARGS_((void)); /* 27 */
- void (*tclWinResetInterfaces) _ANSI_ARGS_((void)); /* 28 */
+ VOID *reserved24;
+ VOID *reserved25;
+ VOID *reserved26;
+ VOID *reserved27;
+ VOID *reserved28;
int (*tclWinCPUID) _ANSI_ARGS_((unsigned int index, unsigned int *regs)); /* 29 */
- void (*tclGetAndDetachPids) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Channel chan)); /* 30 */
- int (*tclpCloseFile) _ANSI_ARGS_((TclFile file)); /* 31 */
- Tcl_Channel (*tclpCreateCommandChannel) _ANSI_ARGS_((TclFile readFile, TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr)); /* 32 */
- int (*tclpCreatePipe) _ANSI_ARGS_((TclFile *readPipe, TclFile *writePipe)); /* 33 */
- int (*tclpCreateProcess) _ANSI_ARGS_((Tcl_Interp *interp, int argc, CONST char **argv, TclFile inputFile, TclFile outputFile, TclFile errorFile, Tcl_Pid *pidPtr)); /* 34 */
- char * (*tclpInetNtoa) _ANSI_ARGS_((struct in_addr addr)); /* 35 */
- TclFile (*tclpMakeFile) _ANSI_ARGS_((Tcl_Channel channel, int direction)); /* 36 */
- TclFile (*tclpOpenFile) _ANSI_ARGS_((CONST char *fname, int mode)); /* 37 */
- int (*tclUnixWaitForFile) _ANSI_ARGS_((int fd, int mask, int timeout)); /* 38 */
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */
void (*tclWinConvertError) _ANSI_ARGS_((DWORD errCode)); /* 0 */
void (*tclWinConvertWSAError) _ANSI_ARGS_((DWORD errCode)); /* 1 */
struct servent * (*tclWinGetServByName) _ANSI_ARGS_((CONST char *nm, CONST char *proto)); /* 2 */
int (*tclWinGetSockOpt) _ANSI_ARGS_((SOCKET s, int level, int optname, char *optval, int *optlen)); /* 3 */
HINSTANCE (*tclWinGetTclInstance) _ANSI_ARGS_((void)); /* 4 */
- VOID *reserved5;
- u_short (*tclWinNToHS) _ANSI_ARGS_((u_short ns)); /* 6 */
+ int (*tclUnixWaitForFile) _ANSI_ARGS_((int fd, int mask, int timeout)); /* 5 */
+ unsigned short (*tclWinNToHS) _ANSI_ARGS_((unsigned short ns)); /* 6 */
int (*tclWinSetSockOpt) _ANSI_ARGS_((SOCKET s, int level, int optname, CONST char *optval, int optlen)); /* 7 */
int (*tclpGetPid) _ANSI_ARGS_((Tcl_Pid pid)); /* 8 */
int (*tclWinGetPlatformId) _ANSI_ARGS_((void)); /* 9 */
- VOID *reserved10;
+ Tcl_DirEntry * (*tclpReaddir) _ANSI_ARGS_((DIR *dir)); /* 10 */
void (*tclGetAndDetachPids) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Channel chan)); /* 11 */
int (*tclpCloseFile) _ANSI_ARGS_((TclFile file)); /* 12 */
Tcl_Channel (*tclpCreateCommandChannel) _ANSI_ARGS_((TclFile readFile, TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr)); /* 13 */
@@ -333,7 +294,7 @@ typedef struct TclIntPlatStubs {
TclFile (*tclpMakeFile) _ANSI_ARGS_((Tcl_Channel channel, int direction)); /* 18 */
TclFile (*tclpOpenFile) _ANSI_ARGS_((CONST char *fname, int mode)); /* 19 */
void (*tclWinAddProcess) _ANSI_ARGS_((HANDLE hProcess, DWORD id)); /* 20 */
- VOID *reserved21;
+ char * (*tclpInetNtoa) _ANSI_ARGS_((struct in_addr addr)); /* 21 */
TclFile (*tclpCreateTempFile) _ANSI_ARGS_((CONST char *contents)); /* 22 */
char * (*tclpGetTZName) _ANSI_ARGS_((int isdst)); /* 23 */
char * (*tclWinNoBackslash) _ANSI_ARGS_((char *path)); /* 24 */
@@ -342,7 +303,7 @@ typedef struct TclIntPlatStubs {
void (*tclWinFlushDirtyChannels) _ANSI_ARGS_((void)); /* 27 */
void (*tclWinResetInterfaces) _ANSI_ARGS_((void)); /* 28 */
int (*tclWinCPUID) _ANSI_ARGS_((unsigned int index, unsigned int *regs)); /* 29 */
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
VOID * (*tclpSysAlloc) _ANSI_ARGS_((long size, int isBin)); /* 0 */
void (*tclpSysFree) _ANSI_ARGS_((VOID *ptr)); /* 1 */
@@ -388,43 +349,43 @@ extern TclIntPlatStubs *tclIntPlatStubsPtr;
* Inline function declarations:
*/
-#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
-#ifndef TclWinConvertError
-#define TclWinConvertError \
- (tclIntPlatStubsPtr->tclWinConvertError) /* 0 */
+#if !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(MAC_TCL) /* UNIX */
+#ifndef TclGetAndDetachPids
+#define TclGetAndDetachPids \
+ (tclIntPlatStubsPtr->tclGetAndDetachPids) /* 0 */
#endif
-#ifndef TclWinConvertWSAError
-#define TclWinConvertWSAError \
- (tclIntPlatStubsPtr->tclWinConvertWSAError) /* 1 */
+#ifndef TclpCloseFile
+#define TclpCloseFile \
+ (tclIntPlatStubsPtr->tclpCloseFile) /* 1 */
#endif
-#ifndef TclWinGetServByName
-#define TclWinGetServByName \
- (tclIntPlatStubsPtr->tclWinGetServByName) /* 2 */
+#ifndef TclpCreateCommandChannel
+#define TclpCreateCommandChannel \
+ (tclIntPlatStubsPtr->tclpCreateCommandChannel) /* 2 */
#endif
-#ifndef TclWinGetSockOpt
-#define TclWinGetSockOpt \
- (tclIntPlatStubsPtr->tclWinGetSockOpt) /* 3 */
+#ifndef TclpCreatePipe
+#define TclpCreatePipe \
+ (tclIntPlatStubsPtr->tclpCreatePipe) /* 3 */
#endif
-#ifndef TclWinGetTclInstance
-#define TclWinGetTclInstance \
- (tclIntPlatStubsPtr->tclWinGetTclInstance) /* 4 */
+#ifndef TclpCreateProcess
+#define TclpCreateProcess \
+ (tclIntPlatStubsPtr->tclpCreateProcess) /* 4 */
#endif
/* Slot 5 is reserved */
-#ifndef TclWinNToHS
-#define TclWinNToHS \
- (tclIntPlatStubsPtr->tclWinNToHS) /* 6 */
+#ifndef TclpMakeFile
+#define TclpMakeFile \
+ (tclIntPlatStubsPtr->tclpMakeFile) /* 6 */
#endif
-#ifndef TclWinSetSockOpt
-#define TclWinSetSockOpt \
- (tclIntPlatStubsPtr->tclWinSetSockOpt) /* 7 */
+#ifndef TclpOpenFile
+#define TclpOpenFile \
+ (tclIntPlatStubsPtr->tclpOpenFile) /* 7 */
#endif
-#ifndef TclpGetPid
-#define TclpGetPid \
- (tclIntPlatStubsPtr->tclpGetPid) /* 8 */
+#ifndef TclUnixWaitForFile
+#define TclUnixWaitForFile \
+ (tclIntPlatStubsPtr->tclUnixWaitForFile) /* 8 */
#endif
-#ifndef TclWinGetPlatformId
-#define TclWinGetPlatformId \
- (tclIntPlatStubsPtr->tclWinGetPlatformId) /* 9 */
+#ifndef TclpCreateTempFile
+#define TclpCreateTempFile \
+ (tclIntPlatStubsPtr->tclpCreateTempFile) /* 9 */
#endif
#ifndef TclpReaddir
#define TclpReaddir \
@@ -438,97 +399,31 @@ extern TclIntPlatStubs *tclIntPlatStubsPtr;
#define TclpGmtime_unix \
(tclIntPlatStubsPtr->tclpGmtime_unix) /* 12 */
#endif
-#ifndef TclIntPlatReserved13
-#define TclIntPlatReserved13 \
- (tclIntPlatStubsPtr->tclIntPlatReserved13) /* 13 */
+#ifndef TclpInetNtoa
+#define TclpInetNtoa \
+ (tclIntPlatStubsPtr->tclpInetNtoa) /* 13 */
#endif
/* Slot 14 is reserved */
-#ifndef TclMacOSXGetFileAttribute
-#define TclMacOSXGetFileAttribute \
- (tclIntPlatStubsPtr->tclMacOSXGetFileAttribute) /* 15 */
-#endif
+/* Slot 15 is reserved */
/* Slot 16 is reserved */
/* Slot 17 is reserved */
-#ifndef TclMacOSXMatchType
-#define TclMacOSXMatchType \
- (tclIntPlatStubsPtr->tclMacOSXMatchType) /* 18 */
-#endif
-#ifndef TclMacOSXNotifierAddRunLoopMode
-#define TclMacOSXNotifierAddRunLoopMode \
- (tclIntPlatStubsPtr->tclMacOSXNotifierAddRunLoopMode) /* 19 */
-#endif
-#ifndef TclWinAddProcess
-#define TclWinAddProcess \
- (tclIntPlatStubsPtr->tclWinAddProcess) /* 20 */
-#endif
+/* Slot 18 is reserved */
+/* Slot 19 is reserved */
+/* Slot 20 is reserved */
/* Slot 21 is reserved */
-#ifndef TclpCreateTempFile
-#define TclpCreateTempFile \
- (tclIntPlatStubsPtr->tclpCreateTempFile) /* 22 */
-#endif
+/* Slot 22 is reserved */
/* Slot 23 is reserved */
-#ifndef TclWinNoBackslash
-#define TclWinNoBackslash \
- (tclIntPlatStubsPtr->tclWinNoBackslash) /* 24 */
-#endif
-#ifndef TclWinGetPlatform
-#define TclWinGetPlatform \
- (tclIntPlatStubsPtr->tclWinGetPlatform) /* 25 */
-#endif
-#ifndef TclWinSetInterfaces
-#define TclWinSetInterfaces \
- (tclIntPlatStubsPtr->tclWinSetInterfaces) /* 26 */
-#endif
-#ifndef TclWinFlushDirtyChannels
-#define TclWinFlushDirtyChannels \
- (tclIntPlatStubsPtr->tclWinFlushDirtyChannels) /* 27 */
-#endif
-#ifndef TclWinResetInterfaces
-#define TclWinResetInterfaces \
- (tclIntPlatStubsPtr->tclWinResetInterfaces) /* 28 */
-#endif
+/* Slot 24 is reserved */
+/* Slot 25 is reserved */
+/* Slot 26 is reserved */
+/* Slot 27 is reserved */
+/* Slot 28 is reserved */
#ifndef TclWinCPUID
#define TclWinCPUID \
(tclIntPlatStubsPtr->tclWinCPUID) /* 29 */
#endif
-#ifndef TclGetAndDetachPids
-#define TclGetAndDetachPids \
- (tclIntPlatStubsPtr->tclGetAndDetachPids) /* 30 */
-#endif
-#ifndef TclpCloseFile
-#define TclpCloseFile \
- (tclIntPlatStubsPtr->tclpCloseFile) /* 31 */
-#endif
-#ifndef TclpCreateCommandChannel
-#define TclpCreateCommandChannel \
- (tclIntPlatStubsPtr->tclpCreateCommandChannel) /* 32 */
-#endif
-#ifndef TclpCreatePipe
-#define TclpCreatePipe \
- (tclIntPlatStubsPtr->tclpCreatePipe) /* 33 */
-#endif
-#ifndef TclpCreateProcess
-#define TclpCreateProcess \
- (tclIntPlatStubsPtr->tclpCreateProcess) /* 34 */
-#endif
-#ifndef TclpInetNtoa
-#define TclpInetNtoa \
- (tclIntPlatStubsPtr->tclpInetNtoa) /* 35 */
-#endif
-#ifndef TclpMakeFile
-#define TclpMakeFile \
- (tclIntPlatStubsPtr->tclpMakeFile) /* 36 */
-#endif
-#ifndef TclpOpenFile
-#define TclpOpenFile \
- (tclIntPlatStubsPtr->tclpOpenFile) /* 37 */
-#endif
-#ifndef TclUnixWaitForFile
-#define TclUnixWaitForFile \
- (tclIntPlatStubsPtr->tclUnixWaitForFile) /* 38 */
-#endif
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */
#ifndef TclWinConvertError
#define TclWinConvertError \
(tclIntPlatStubsPtr->tclWinConvertError) /* 0 */
@@ -549,7 +444,10 @@ extern TclIntPlatStubs *tclIntPlatStubsPtr;
#define TclWinGetTclInstance \
(tclIntPlatStubsPtr->tclWinGetTclInstance) /* 4 */
#endif
-/* Slot 5 is reserved */
+#ifndef TclUnixWaitForFile
+#define TclUnixWaitForFile \
+ (tclIntPlatStubsPtr->tclUnixWaitForFile) /* 5 */
+#endif
#ifndef TclWinNToHS
#define TclWinNToHS \
(tclIntPlatStubsPtr->tclWinNToHS) /* 6 */
@@ -566,7 +464,10 @@ extern TclIntPlatStubs *tclIntPlatStubsPtr;
#define TclWinGetPlatformId \
(tclIntPlatStubsPtr->tclWinGetPlatformId) /* 9 */
#endif
-/* Slot 10 is reserved */
+#ifndef TclpReaddir
+#define TclpReaddir \
+ (tclIntPlatStubsPtr->tclpReaddir) /* 10 */
+#endif
#ifndef TclGetAndDetachPids
#define TclGetAndDetachPids \
(tclIntPlatStubsPtr->tclGetAndDetachPids) /* 11 */
@@ -601,7 +502,10 @@ extern TclIntPlatStubs *tclIntPlatStubsPtr;
#define TclWinAddProcess \
(tclIntPlatStubsPtr->tclWinAddProcess) /* 20 */
#endif
-/* Slot 21 is reserved */
+#ifndef TclpInetNtoa
+#define TclpInetNtoa \
+ (tclIntPlatStubsPtr->tclpInetNtoa) /* 21 */
+#endif
#ifndef TclpCreateTempFile
#define TclpCreateTempFile \
(tclIntPlatStubsPtr->tclpCreateTempFile) /* 22 */
@@ -634,7 +538,7 @@ extern TclIntPlatStubs *tclIntPlatStubsPtr;
#define TclWinCPUID \
(tclIntPlatStubsPtr->tclWinCPUID) /* 29 */
#endif
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
#ifndef TclpSysAlloc
#define TclpSysAlloc \
@@ -752,59 +656,10 @@ extern TclIntPlatStubs *tclIntPlatStubsPtr;
#undef TclpLocaltime_unix
#undef TclpGmtime_unix
-#undef TclIntPlatReserved13
-
-#if !defined(__WIN32__) && !defined(MAC_TCL)
-# undef TclpGetPid
-# define TclpGetPid(pid) ((unsigned long) (pid))
-
-# if defined(USE_TCL_STUBS)
-# undef TclpCreateProcess
-# undef TclpMakeFile
-# undef TclpOpenFile
-# undef TclpCreateCommandChannel
-# ifdef __CYGWIN__
-# define TclpCreateProcess ((int (*) _ANSI_ARGS_((Tcl_Interp *, int, \
- CONST char **, TclFile, TclFile, TclFile, Tcl_Pid *))) \
- tclIntPlatStubsPtr->tclMacOSXGetFileAttribute)
-# define TclpMakeFile ((TclFile (*) _ANSI_ARGS_((Tcl_Channel channel, \
- int direction))) tclIntPlatStubsPtr->tclMacOSXMatchType)
-# define TclpOpenFile ((TclFile (*) _ANSI_ARGS_((CONST char *, int))) \
- tclIntPlatStubsPtr->tclMacOSXNotifierAddRunLoopMode)
-# define TclpCreateCommandChannel ((Tcl_Channel (*) _ANSI_ARGS_((TclFile, TclFile, \
- TclFile, int, Tcl_Pid *))) tclIntPlatStubsPtr->tclIntPlatReserved13)
-# else
-# define TclpCreateProcess ((int (*) _ANSI_ARGS_((Tcl_Interp *, int, \
- CONST char **, TclFile, TclFile, TclFile, Tcl_Pid *))) \
- tclIntPlatStubsPtr->tclWinGetTclInstance)
-# define TclpMakeFile ((TclFile (*) _ANSI_ARGS_((Tcl_Channel channel, \
- int direction))) tclIntPlatStubsPtr->tclWinNToHS)
-# define TclpOpenFile ((TclFile (*) _ANSI_ARGS_((CONST char *, int))) \
- tclIntPlatStubsPtr->tclWinSetSockOpt)
-# define TclpCreateCommandChannel ((Tcl_Channel (*) _ANSI_ARGS_((TclFile, TclFile, \
- TclFile, int, Tcl_Pid *))) tclIntPlatStubsPtr->tclWinGetServByName)
-
-# undef TclpCreateTempFile
-# undef TclGetAndDetachPids
-# undef TclpCloseFile
-# undef TclpCreatePipe
-# undef TclpInetNtoa
-# undef TclUnixWaitForFile
-# define TclpCreateTempFile ((TclFile (*) _ANSI_ARGS_((CONST char *))) \
- tclIntPlatStubsPtr->tclWinGetPlatformId)
-# define TclGetAndDetachPids ((void (*) _ANSI_ARGS_((Tcl_Interp *, Tcl_Channel))) \
- tclIntPlatStubsPtr->tclWinConvertError)
-# define TclpCloseFile ((int (*) _ANSI_ARGS_((TclFile))) \
- tclIntPlatStubsPtr->tclWinConvertWSAError)
-# define TclpCreatePipe ((int (*)_ANSI_ARGS_((TclFile *, TclFile *))) \
- tclIntPlatStubsPtr->tclWinGetSockOpt)
-# define TclpInetNtoa ((char *(*) _ANSI_ARGS_((struct in_addr addr))) \
- tclIntPlatStubsPtr->tclIntPlatReserved13)
-# define TclUnixWaitForFile (int (*) _ANSI_ARGS_((int, int, int))) \
- tclIntPlatStubsPtr->tclpGetPid)
-# endif
-# endif
+#if !defined(__WIN32__) && !defined(__CYGWIN__)
+# undef TclpGetPid
+# define TclpGetPid(pid) ((unsigned long) (pid))
#endif
#endif /* _TCLINTPLATDECLS */
diff --git a/generic/tclPlatDecls.h b/generic/tclPlatDecls.h
index b288296..f63b9c0 100644
--- a/generic/tclPlatDecls.h
+++ b/generic/tclPlatDecls.h
@@ -29,14 +29,14 @@
* Exported function declarations:
*/
-#if defined(__WIN32__) || defined(__CYGWIN__)
+#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */
/* 0 */
EXTERN TCHAR * Tcl_WinUtfToTChar _ANSI_ARGS_((CONST char *str,
int len, Tcl_DString *dsPtr));
/* 1 */
EXTERN char * Tcl_WinTCharToUtf _ANSI_ARGS_((CONST TCHAR *str,
int len, Tcl_DString *dsPtr));
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
/* 0 */
EXTERN void Tcl_MacSetEventProc _ANSI_ARGS_((
@@ -68,7 +68,7 @@ EXTERN int strncasecmp _ANSI_ARGS_((CONST char *s1,
EXTERN int strcasecmp _ANSI_ARGS_((CONST char *s1,
CONST char *s2));
#endif /* MAC_TCL */
-#ifdef MAC_OSX_TCL
+#ifdef MAC_OSX_TCL /* MACOSX */
/* 0 */
EXTERN int Tcl_MacOSXOpenBundleResources _ANSI_ARGS_((
Tcl_Interp *interp, CONST char *bundleName,
@@ -80,16 +80,16 @@ EXTERN int Tcl_MacOSXOpenVersionedBundleResources _ANSI_ARGS_((
CONST char *bundleVersion,
int hasResourceFile, int maxPathLen,
char *libraryPath));
-#endif /* MAC_OSX_TCL */
+#endif /* MACOSX */
typedef struct TclPlatStubs {
int magic;
struct TclPlatStubHooks *hooks;
-#if defined(__WIN32__) || defined(__CYGWIN__)
+#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */
TCHAR * (*tcl_WinUtfToTChar) _ANSI_ARGS_((CONST char *str, int len, Tcl_DString *dsPtr)); /* 0 */
char * (*tcl_WinTCharToUtf) _ANSI_ARGS_((CONST TCHAR *str, int len, Tcl_DString *dsPtr)); /* 1 */
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
void (*tcl_MacSetEventProc) _ANSI_ARGS_((Tcl_MacConvertEventPtr procPtr)); /* 0 */
char * (*tcl_MacConvertTextResource) _ANSI_ARGS_((Handle resource)); /* 1 */
@@ -101,10 +101,10 @@ typedef struct TclPlatStubs {
int (*strncasecmp) _ANSI_ARGS_((CONST char *s1, CONST char *s2, size_t n)); /* 7 */
int (*strcasecmp) _ANSI_ARGS_((CONST char *s1, CONST char *s2)); /* 8 */
#endif /* MAC_TCL */
-#ifdef MAC_OSX_TCL
+#ifdef MAC_OSX_TCL /* MACOSX */
int (*tcl_MacOSXOpenBundleResources) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *bundleName, int hasResourceFile, int maxPathLen, char *libraryPath)); /* 0 */
int (*tcl_MacOSXOpenVersionedBundleResources) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *bundleName, CONST char *bundleVersion, int hasResourceFile, int maxPathLen, char *libraryPath)); /* 1 */
-#endif /* MAC_OSX_TCL */
+#endif /* MACOSX */
} TclPlatStubs;
#ifdef __cplusplus
@@ -121,7 +121,7 @@ extern TclPlatStubs *tclPlatStubsPtr;
* Inline function declarations:
*/
-#if defined(__WIN32__) || defined(__CYGWIN__)
+#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */
#ifndef Tcl_WinUtfToTChar
#define Tcl_WinUtfToTChar \
(tclPlatStubsPtr->tcl_WinUtfToTChar) /* 0 */
@@ -130,7 +130,7 @@ extern TclPlatStubs *tclPlatStubsPtr;
#define Tcl_WinTCharToUtf \
(tclPlatStubsPtr->tcl_WinTCharToUtf) /* 1 */
#endif
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
#ifndef Tcl_MacSetEventProc
#define Tcl_MacSetEventProc \
@@ -169,7 +169,7 @@ extern TclPlatStubs *tclPlatStubsPtr;
(tclPlatStubsPtr->strcasecmp) /* 8 */
#endif
#endif /* MAC_TCL */
-#ifdef MAC_OSX_TCL
+#ifdef MAC_OSX_TCL /* MACOSX */
#ifndef Tcl_MacOSXOpenBundleResources
#define Tcl_MacOSXOpenBundleResources \
(tclPlatStubsPtr->tcl_MacOSXOpenBundleResources) /* 0 */
@@ -178,7 +178,7 @@ extern TclPlatStubs *tclPlatStubsPtr;
#define Tcl_MacOSXOpenVersionedBundleResources \
(tclPlatStubsPtr->tcl_MacOSXOpenVersionedBundleResources) /* 1 */
#endif
-#endif /* MAC_OSX_TCL */
+#endif /* MACOSX */
#endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c
index 87c5039..e623fa6 100644
--- a/generic/tclStubInit.c
+++ b/generic/tclStubInit.c
@@ -69,26 +69,19 @@ int TclSockMinimumBuffersOld(sock, size)
}
#endif
-#ifdef __CYGWIN__
-#define TclWinGetPlatformId winGetPlatformId
-#define Tcl_WinUtfToTChar winUtfToTChar
-#define Tcl_WinTCharToUtf winTCharToUtf
-#define TclWinGetTclInstance winGetTclInstance
-#define TclWinNToHS winNToHS
-#define TclWinSetSockOpt winSetSockOpt
-#define TclWinGetSockOpt winGetSockOpt
-#define TclWinGetServByName winGetServByName
-#define TclWinNoBackslash winNoBackslash
-#define TclWinSetInterfaces (void (*) (int)) doNothing
-#define TclWinAddProcess (void (*) (void *, unsigned int)) doNothing
-#define TclIntPlatReserved13 (void (*) ()) TclpCreateCommandChannel
-#define TclWinFlushDirtyChannels doNothing
-#define TclWinResetInterfaces doNothing
-#define TclpGetPid getPid
+#ifdef __WIN32__
+# define TclUnixWaitForFile 0
+# define TclpReaddir 0
+#elif defined(__CYGWIN__)
+# define TclWinSetInterfaces (void (*) (int)) doNothing
+# define TclWinAddProcess (void (*) (void *, unsigned int)) doNothing
+# define TclWinFlushDirtyChannels doNothing
+# define TclWinResetInterfaces doNothing
+# define TclpGetTZName 0
static Tcl_Encoding winTCharEncoding;
-static int
+int
TclWinGetPlatformId()
{
/* Don't bother to determine the real platform on cygwin,
@@ -96,13 +89,13 @@ TclWinGetPlatformId()
return 2; /* VER_PLATFORM_WIN32_NT */;
}
-EXTERN TclPlatformType *
+TclPlatformType *
TclWinGetPlatform()
{
return &tclPlatform;
}
-static void *TclWinGetTclInstance()
+void *TclWinGetTclInstance()
{
void *hInstance = NULL;
GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
@@ -110,21 +103,21 @@ static void *TclWinGetTclInstance()
return hInstance;
}
-static unsigned short
+unsigned short
TclWinNToHS(unsigned short ns)
{
return ntohs(ns);
}
-static int
-TclWinSetSockOpt(void *s, int level, int optname,
+int
+TclWinSetSockOpt(SOCKET s, int level, int optname,
const char *optval, int optlen)
{
return setsockopt((int) s, level, optname, optval, optlen);
}
-static int
-TclWinGetSockOpt(void *s, int level, int optname,
+int
+TclWinGetSockOpt(SOCKET s, int level, int optname,
char *optval, int *optlen)
{
return getsockopt((int) s, level, optname, optval, optlen);
@@ -136,7 +129,7 @@ TclWinGetServByName(const char *name, const char *proto)
return getservbyname(name, proto);
}
-static char *
+char *
TclWinNoBackslash(char *path)
{
char *p;
@@ -149,7 +142,7 @@ TclWinNoBackslash(char *path)
return path;
}
-static int
+int
TclpGetPid(Tcl_Pid pid)
{
return (int) (size_t) pid;
@@ -161,11 +154,11 @@ doNothing(void)
/* dummy implementation, no need to do anything */
}
-static char *
-Tcl_WinUtfToTChar(string, len, dsPtr)
- CONST char *string;
- int len;
- Tcl_DString *dsPtr;
+char *
+Tcl_WinUtfToTChar(
+ const char *string,
+ int len,
+ Tcl_DString *dsPtr)
{
if (!winTCharEncoding) {
winTCharEncoding = Tcl_GetEncoding(0, "unicode");
@@ -174,9 +167,9 @@ Tcl_WinUtfToTChar(string, len, dsPtr)
string, len, dsPtr);
}
-static char *
+char *
Tcl_WinTCharToUtf(
- CONST char *string,
+ const char *string,
int len,
Tcl_DString *dsPtr)
{
@@ -187,38 +180,8 @@ Tcl_WinTCharToUtf(
string, len, dsPtr);
}
-#define TclMacOSXGetFileAttribute (int (*) _ANSI_ARGS_((Tcl_Interp *, \
- int, Tcl_Obj *, Tcl_Obj **))) TclpCreateProcess
-#define TclMacOSXMatchType (int (*) _ANSI_ARGS_((Tcl_Interp *, CONST char *, \
- CONST char *, Tcl_StatBuf *, Tcl_GlobTypeData *))) TclpMakeFile
-#define TclMacOSXNotifierAddRunLoopMode (void (*) _ANSI_ARGS_((CONST void *))) TclpOpenFile
-#define TclpLocaltime_unix (struct tm *(*) _ANSI_ARGS_((TclpTime_t_CONST))) TclGetAndDetachPids
-#define TclpGmtime_unix (struct tm *(*) _ANSI_ARGS_((TclpTime_t_CONST))) TclpCloseFile
-
-#elif !defined(__WIN32__) /* UNIX and MAC */
-# define TclWinConvertError (void (*) _ANSI_ARGS_((unsigned int))) TclGetAndDetachPids
-# define TclWinConvertWSAError (void (*) _ANSI_ARGS_((unsigned int))) TclpCloseFile
-# define TclWinGetPlatform 0
-# define TclWinGetPlatformId (int (*)()) TclpCreateTempFile
-# define TclWinGetTclInstance (void *(*)()) TclpCreateProcess
-# define TclWinNToHS (unsigned short (*) _ANSI_ARGS_((unsigned short ns))) TclpMakeFile
-# define TclWinSetSockOpt (int (*) _ANSI_ARGS_((void *, int, int, CONST char *, int))) TclpOpenFile
-# define TclWinGetSockOpt (int (*) _ANSI_ARGS_((void *, int, int, char *, int *))) TclpCreatePipe
-# define TclWinGetServByName (struct servent *(*) _ANSI_ARGS_((const char *nm, const char *proto))) TclpCreateCommandChannel
-# define TclIntPlatReserved13 (void (*) ()) TclpInetNtoa
-# define TclWinAddProcess 0
-# define TclWinNoBackslash 0
-# define TclWinSetInterfaces 0
-# define TclWinFlushDirtyChannels 0
-# define TclWinResetInterfaces 0
+#else /* UNIX and MAC */
# define TclpGetPid 0
-# define TclMacOSXGetFileAttribute 0 /* Only implemented in Tcl >= 8.5 */
-# define TclMacOSXMatchType 0 /* Only implemented in Tcl >= 8.5 */
-# define TclMacOSXNotifierAddRunLoopMode 0 /* Only implemented in Tcl >= 8.5 */
-# ifndef MAC_OSX_TCL
-# define Tcl_MacOSXOpenBundleResources 0
-# define Tcl_MacOSXOpenVersionedBundleResources 0
-# endif
# define TclpLocaltime_unix TclpLocaltime
# define TclpGmtime_unix TclpGmtime
#endif
@@ -449,59 +412,50 @@ TclIntStubs tclIntStubs = {
TclIntPlatStubs tclIntPlatStubs = {
TCL_STUB_MAGIC,
NULL,
-#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
- TclWinConvertError, /* 0 */
- TclWinConvertWSAError, /* 1 */
- TclWinGetServByName, /* 2 */
- TclWinGetSockOpt, /* 3 */
- TclWinGetTclInstance, /* 4 */
+#if !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(MAC_TCL) /* UNIX */
+ TclGetAndDetachPids, /* 0 */
+ TclpCloseFile, /* 1 */
+ TclpCreateCommandChannel, /* 2 */
+ TclpCreatePipe, /* 3 */
+ TclpCreateProcess, /* 4 */
NULL, /* 5 */
- TclWinNToHS, /* 6 */
- TclWinSetSockOpt, /* 7 */
- TclpGetPid, /* 8 */
- TclWinGetPlatformId, /* 9 */
+ TclpMakeFile, /* 6 */
+ TclpOpenFile, /* 7 */
+ TclUnixWaitForFile, /* 8 */
+ TclpCreateTempFile, /* 9 */
TclpReaddir, /* 10 */
TclpLocaltime_unix, /* 11 */
TclpGmtime_unix, /* 12 */
- TclIntPlatReserved13, /* 13 */
+ TclpInetNtoa, /* 13 */
NULL, /* 14 */
- TclMacOSXGetFileAttribute, /* 15 */
+ NULL, /* 15 */
NULL, /* 16 */
NULL, /* 17 */
- TclMacOSXMatchType, /* 18 */
- TclMacOSXNotifierAddRunLoopMode, /* 19 */
- TclWinAddProcess, /* 20 */
+ NULL, /* 18 */
+ NULL, /* 19 */
+ NULL, /* 20 */
NULL, /* 21 */
- TclpCreateTempFile, /* 22 */
+ NULL, /* 22 */
NULL, /* 23 */
- TclWinNoBackslash, /* 24 */
- TclWinGetPlatform, /* 25 */
- TclWinSetInterfaces, /* 26 */
- TclWinFlushDirtyChannels, /* 27 */
- TclWinResetInterfaces, /* 28 */
+ NULL, /* 24 */
+ NULL, /* 25 */
+ NULL, /* 26 */
+ NULL, /* 27 */
+ NULL, /* 28 */
TclWinCPUID, /* 29 */
- TclGetAndDetachPids, /* 30 */
- TclpCloseFile, /* 31 */
- TclpCreateCommandChannel, /* 32 */
- TclpCreatePipe, /* 33 */
- TclpCreateProcess, /* 34 */
- TclpInetNtoa, /* 35 */
- TclpMakeFile, /* 36 */
- TclpOpenFile, /* 37 */
- TclUnixWaitForFile, /* 38 */
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */
TclWinConvertError, /* 0 */
TclWinConvertWSAError, /* 1 */
TclWinGetServByName, /* 2 */
TclWinGetSockOpt, /* 3 */
TclWinGetTclInstance, /* 4 */
- NULL, /* 5 */
+ TclUnixWaitForFile, /* 5 */
TclWinNToHS, /* 6 */
TclWinSetSockOpt, /* 7 */
TclpGetPid, /* 8 */
TclWinGetPlatformId, /* 9 */
- NULL, /* 10 */
+ TclpReaddir, /* 10 */
TclGetAndDetachPids, /* 11 */
TclpCloseFile, /* 12 */
TclpCreateCommandChannel, /* 13 */
@@ -512,7 +466,7 @@ TclIntPlatStubs tclIntPlatStubs = {
TclpMakeFile, /* 18 */
TclpOpenFile, /* 19 */
TclWinAddProcess, /* 20 */
- NULL, /* 21 */
+ TclpInetNtoa, /* 21 */
TclpCreateTempFile, /* 22 */
TclpGetTZName, /* 23 */
TclWinNoBackslash, /* 24 */
@@ -521,7 +475,7 @@ TclIntPlatStubs tclIntPlatStubs = {
TclWinFlushDirtyChannels, /* 27 */
TclWinResetInterfaces, /* 28 */
TclWinCPUID, /* 29 */
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
TclpSysAlloc, /* 0 */
TclpSysFree, /* 1 */
@@ -556,10 +510,10 @@ TclIntPlatStubs tclIntPlatStubs = {
TclPlatStubs tclPlatStubs = {
TCL_STUB_MAGIC,
NULL,
-#if defined(__WIN32__) || defined(__CYGWIN__)
+#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */
Tcl_WinUtfToTChar, /* 0 */
Tcl_WinTCharToUtf, /* 1 */
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
Tcl_MacSetEventProc, /* 0 */
Tcl_MacConvertTextResource, /* 1 */
@@ -571,10 +525,10 @@ TclPlatStubs tclPlatStubs = {
strncasecmp, /* 7 */
strcasecmp, /* 8 */
#endif /* MAC_TCL */
-#ifdef MAC_OSX_TCL
+#ifdef MAC_OSX_TCL /* MACOSX */
Tcl_MacOSXOpenBundleResources, /* 0 */
Tcl_MacOSXOpenVersionedBundleResources, /* 1 */
-#endif /* MAC_OSX_TCL */
+#endif /* MACOSX */
};
static TclStubHooks tclStubHooks = {
@@ -598,18 +552,18 @@ TclStubs tclStubs = {
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
Tcl_CreateFileHandler, /* 9 */
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) /* WIN */
NULL, /* 9 */
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
NULL, /* 9 */
#endif /* MAC_TCL */
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
Tcl_DeleteFileHandler, /* 10 */
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) /* WIN */
NULL, /* 10 */
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
NULL, /* 10 */
#endif /* MAC_TCL */
@@ -772,9 +726,9 @@ TclStubs tclStubs = {
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
Tcl_GetOpenFile, /* 167 */
#endif /* UNIX */
-#ifdef __WIN32__
+#if defined(__WIN32__) /* WIN */
NULL, /* 167 */
-#endif /* __WIN32__ */
+#endif /* WIN */
#ifdef MAC_TCL
NULL, /* 167 */
#endif /* MAC_TCL */
diff --git a/tools/genStubs.tcl b/tools/genStubs.tcl
index 009db07..00888c9 100644
--- a/tools/genStubs.tcl
+++ b/tools/genStubs.tcl
@@ -31,6 +31,22 @@ namespace eval genStubs {
variable curName "UNKNOWN"
+ # scspec --
+ #
+ # Storage class specifier for external function declarations.
+ # Normally "EXTERN", may be set to something like XYZAPI
+ #
+ variable scspec "EXTERN"
+
+ # epoch, revision --
+ #
+ # The epoch and revision numbers of the interface currently being defined.
+ # (@@@TODO: should be an array mapping interface names -> numbers)
+ #
+
+ variable epoch {}
+ variable revision 0
+
# hooks --
#
# An array indexed by interface name that contains the set of
@@ -92,6 +108,27 @@ proc genStubs::interface {name} {
return
}
+# genStubs::scspec --
+#
+# Define the storage class macro used for external function declarations.
+# Typically, this will be a macro like XYZAPI or EXTERN that
+# expands to either DLLIMPORT or DLLEXPORT, depending on whether
+# -DBUILD_XYZ has been set.
+#
+proc genStubs::scspec {value} {
+ variable scspec $value
+}
+
+# genStubs::epoch --
+#
+# Define the epoch number for this library. The epoch
+# should be incrememented when a release is made that
+# contains incompatible changes to the public API.
+#
+proc genStubs::epoch {value} {
+ variable epoch $value
+}
+
# genStubs::hooks --
#
# This function defines the subinterface hooks for the current
@@ -130,7 +167,9 @@ proc genStubs::hooks {names} {
proc genStubs::declare {args} {
variable stubs
variable curName
+ variable revision
+ incr revision
if {[llength $args] == 2} {
lassign $args index decl
set platformList generic
@@ -166,6 +205,25 @@ proc genStubs::declare {args} {
return
}
+# genStubs::export --
+#
+# This function is used in the declarations file to declare a symbol
+# that is exported from the library but is not in the stubs table.
+#
+# Arguments:
+# decl The C function declaration, or {} for an undefined
+# entry.
+#
+# Results:
+# None.
+
+proc genStubs::export {args} {
+ if {[llength $args] != 1} {
+ puts stderr "wrong # args: export $args"
+ }
+ return
+}
+
# genStubs::rewriteFile --
#
# This function replaces the machine generated portion of the
@@ -221,25 +279,55 @@ proc genStubs::rewriteFile {file text} {
# Results:
# Returns the original text inside an appropriate #ifdef.
-proc genStubs::addPlatformGuard {plat text} {
+proc genStubs::addPlatformGuard {plat iftxt {eltxt {}}} {
+ set text ""
switch $plat {
win {
- return "#ifdef __WIN32__\n${text}#endif /* __WIN32__ */\n"
+ append text "#if defined(__WIN32__) || defined(__CYGWIN__) /* WIN */\n${iftxt}"
+ if {$eltxt != ""} {
+ append text "#else /* WIN */\n${eltxt}"
+ }
+ append text "#endif /* WIN */\n"
}
unix {
- return "#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */\n${text}#endif /* UNIX */\n"
+ append text "#if !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(MAC_TCL)\
+ /* UNIX */\n${iftxt}"
+ if {$eltxt != ""} {
+ append text "#else /* UNIX */\n${eltxt}"
+ }
+ append text "#endif /* UNIX */\n"
}
mac {
- return "#ifdef MAC_TCL\n${text}#endif /* MAC_TCL */\n"
+ append text "#ifdef MAC_TCL\n${iftxt}"
+ if {$eltxt != ""} {
+ append text "#else /* MAC_TCL */\n${eltxt}"
+ }
+ append text "#endif /* MAC_TCL */\n"
}
macosx {
- return "#ifdef MAC_OSX_TCL\n${text}#endif /* MAC_OSX_TCL */\n"
+ append text "#ifdef MAC_OSX_TCL /* MACOSX */\n${iftxt}"
+ if {$eltxt != ""} {
+ append text "#else /* MACOSX */\n${eltxt}"
+ }
+ append text "#endif /* MACOSX */\n"
}
aqua {
- return "#ifdef MAC_OSX_TK\n${text}#endif /* MAC_OSX_TK */\n"
+ append text "#ifdef MAC_OSX_TK /* AQUA */\n${iftxt}"
+ if {$eltxt != ""} {
+ append text "#else /* AQUA */\n${eltxt}"
+ }
+ append text "#endif /* AQUA */\n"
}
x11 {
- return "#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK)) /* X11 */\n${text}#endif /* X11 */\n"
+ append text "#if !(defined(__WIN32__) || defined(__CYGWIN__) || defined(MAC_TCL) || defined(MAC_OSX_TK))\
+ /* X11 */\n${iftxt}"
+ if {$eltxt != ""} {
+ append text "#else /* X11 */\n${eltxt}"
+ }
+ append text "#endif /* X11 */\n"
+ }
+ default {
+ append text "${iftxt}${eltxt}"
}
}
return $text
@@ -280,8 +368,8 @@ proc genStubs::emitSlots {name textVar} {
proc genStubs::parseDecl {decl} {
if {![regexp {^(.*)\((.*)\)$} $decl all prefix args]} {
- puts stderr "Malformed declaration: $decl"
- return
+ set prefix $decl
+ set args {}
}
set prefix [string trim $prefix]
if {![regexp {^(.+[ ][*]*)([^ *]+)$} $prefix all rtype fname]} {
@@ -289,19 +377,23 @@ proc genStubs::parseDecl {decl} {
return
}
set rtype [string trim $rtype]
+ if {$args == ""} {
+ return [list $rtype $fname {}]
+ }
foreach arg [split $args ,] {
lappend argList [string trim $arg]
}
if {![string compare [lindex $argList end] "..."]} {
- if {[llength $argList] != 2} {
- puts stderr "Only one argument is allowed in varargs form: $decl"
- }
- set arg [parseArg [lindex $argList 0]]
- if {$arg == "" || ([llength $arg] != 2)} {
- puts stderr "Bad argument: '[lindex $argList 0]' in '$decl'"
- return
+ set args TCL_VARARGS
+ foreach arg [lrange $argList 0 end-1] {
+ set argInfo [parseArg $arg]
+ if {[llength $argInfo] == 2 || [llength $argInfo] == 3} {
+ lappend args $argInfo
+ } else {
+ puts stderr "Bad argument: '$arg' in '$decl'"
+ return
+ }
}
- set args [list TCL_VARARGS $arg]
} else {
set args {}
foreach arg $argList {
@@ -359,13 +451,14 @@ proc genStubs::parseArg {arg} {
# Returns the formatted declaration string.
proc genStubs::makeDecl {name decl index} {
+ variable scspec
lassign $decl rtype fname args
append text "/* $index */\n"
if {($rtype != "void") && ($rtype != "pascal void")} {
regsub -all void $rtype VOID rtype
}
- set line "EXTERN $rtype"
+ set line "$scspec $rtype"
set count [expr {2 - ([string length $line] / 8)}]
append line [string range "\t\t\t" 0 $count]
set pad [expr {24 - [string length $line]}]
@@ -373,6 +466,12 @@ proc genStubs::makeDecl {name decl index} {
append line " "
set pad 0
}
+ if {$args eq ""} {
+ append line $fname
+ append text $line
+ append text ";\n"
+ return $text
+ }
append line "$fname _ANSI_ARGS_("
regsub -all void $args VOID args
@@ -470,6 +569,10 @@ proc genStubs::makeSlot {name decl index} {
append lfname [string range $fname 1 end]
set text " "
+ if {$args == ""} {
+ append text $rtype " *" $lfname "; /* $index */\n"
+ return $text
+ }
if {($rtype != "void") && ($rtype != "pascal void")} {
regsub -all void $rtype VOID rtype
}
@@ -485,8 +588,16 @@ proc genStubs::makeSlot {name decl index} {
append text "(void)"
}
TCL_VARARGS {
- set arg [lindex $args 1]
- append text "TCL_VARARGS([lindex $arg 0],[lindex $arg 1])"
+ set sep "("
+ foreach arg [lrange $args 1 end] {
+ append text $sep [lindex $arg 0]
+ if {[string index $text end] != "*"} {
+ append text " "
+ }
+ append text [lindex $arg 1] [lindex $arg 2]
+ set sep ", "
+ }
+ append text ", ...)"
}
default {
set sep "("
@@ -519,7 +630,11 @@ proc genStubs::makeSlot {name decl index} {
# Returns the formatted declaration string.
proc genStubs::makeInit {name decl index} {
- append text " " [lindex $decl 1] ", /* " $index " */\n"
+ if {[lindex $decl 2] eq ""} {
+ append text " &" [lindex $decl 1] ", /* " $index " */\n"
+ } else {
+ append text " " [lindex $decl 1] ", /* " $index " */\n"
+ }
return $text
}
@@ -728,10 +843,19 @@ proc genStubs::emitMacros {name textVar} {
proc genStubs::emitHeader {name} {
variable outDir
variable hooks
+ variable epoch
+ variable revision
set capName [string toupper [string index $name 0]]
append capName [string range $name 1 end]
+ if {$epoch != ""} {
+ set CAPName [string toupper $name]
+ append text "\n"
+ append text "#define ${CAPName}_STUBS_EPOCH $epoch\n"
+ append text "#define ${CAPName}_STUBS_REVISION $revision\n"
+ }
+
emitDeclarations $name text
if {[info exists hooks($name)]} {
@@ -745,6 +869,10 @@ proc genStubs::emitHeader {name} {
}
append text "\ntypedef struct ${capName}Stubs {\n"
append text " int magic;\n"
+ if {$epoch != ""} {
+ append text " int epoch;\n"
+ append text " int revision;\n"
+ }
append text " struct ${capName}StubHooks *hooks;\n\n"
emitSlots $name text
@@ -774,6 +902,7 @@ proc genStubs::emitHeader {name} {
proc genStubs::emitInit {name textVar} {
variable hooks
+ variable epoch
upvar $textVar text
set capName [string toupper [string index $name 0]]
@@ -790,6 +919,11 @@ proc genStubs::emitInit {name textVar} {
}
append text "\n${capName}Stubs ${name}Stubs = \{\n"
append text " TCL_STUB_MAGIC,\n"
+ if {$epoch != ""} {
+ set CAPName [string toupper $name]
+ append text " ${CAPName}_STUBS_EPOCH,\n"
+ append text " ${CAPName}_STUBS_REVISION,\n"
+ }
if {[info exists hooks($name)]} {
append text " &${name}StubHooks,\n"
} else {
diff --git a/win/Makefile.in b/win/Makefile.in
index f11ef53..58811e5 100644
--- a/win/Makefile.in
+++ b/win/Makefile.in
@@ -438,7 +438,7 @@ install-binaries: binaries
else true; \
fi; \
done;
- @for i in dde1.2 reg1.1; \
+ @for i in dde$(DDEDOTVER) reg$(REGDOTVER); \
do \
if [ ! -d $(LIB_INSTALL_DIR)/$$i ] ; then \
echo "Making directory $(LIB_INSTALL_DIR)/$$i"; \
@@ -462,23 +462,23 @@ install-binaries: binaries
done
@if [ -f $(DDE_DLL_FILE) ]; then \
echo installing $(DDE_DLL_FILE); \
- $(COPY) $(DDE_DLL_FILE) $(LIB_INSTALL_DIR)/dde1.2; \
+ $(COPY) $(DDE_DLL_FILE) $(LIB_INSTALL_DIR)/dde$(DDEDOTVER); \
$(COPY) $(ROOT_DIR)/library/dde/pkgIndex.tcl \
- $(LIB_INSTALL_DIR)/dde1.2; \
+ $(LIB_INSTALL_DIR)/dde$(DDEDOTVER); \
fi
@if [ -f $(DDE_LIB_FILE) ]; then \
echo installing $(DDE_LIB_FILE); \
- $(COPY) $(DDE_LIB_FILE) $(LIB_INSTALL_DIR)/dde1.2; \
+ $(COPY) $(DDE_LIB_FILE) $(LIB_INSTALL_DIR)/dde$(DDEDOTVER); \
fi
@if [ -f $(REG_DLL_FILE) ]; then \
echo installing $(REG_DLL_FILE); \
- $(COPY) $(REG_DLL_FILE) $(LIB_INSTALL_DIR)/reg1.1; \
+ $(COPY) $(REG_DLL_FILE) $(LIB_INSTALL_DIR)/reg$(REGDOTVER); \
$(COPY) $(ROOT_DIR)/library/reg/pkgIndex.tcl \
- $(LIB_INSTALL_DIR)/reg1.1; \
+ $(LIB_INSTALL_DIR)/reg$(REGDOTVER); \
fi
@if [ -f $(REG_LIB_FILE) ]; then \
echo installing $(REG_LIB_FILE); \
- $(COPY) $(REG_LIB_FILE) $(LIB_INSTALL_DIR)/reg1.1; \
+ $(COPY) $(REG_LIB_FILE) $(LIB_INSTALL_DIR)/reg$(REGDOTVER); \
fi
install-libraries: libraries
diff --git a/win/tclWinSock.c b/win/tclWinSock.c
index 06d0590..328198b 100644
--- a/win/tclWinSock.c
+++ b/win/tclWinSock.c
@@ -96,7 +96,7 @@ TCL_DECLARE_MUTEX(socketMutex)
struct sockaddr FAR *name, int FAR *namelen);
typedef int (PASCAL FAR *LPFN_GETSOCKOPT)(SOCKET s, int level,
int optname, char FAR * optval, int FAR *optlen);
- typedef u_short (PASCAL FAR *LPFN_HTONS)(u_short hostshort);
+ typedef unsigned short (PASCAL FAR *LPFN_HTONS)(unsigned short hostshort);
typedef unsigned long (PASCAL FAR *LPFN_INET_ADDR)
(const char FAR * cp);
typedef char FAR * (PASCAL FAR *LPFN_INET_NTOA)
@@ -104,7 +104,7 @@ TCL_DECLARE_MUTEX(socketMutex)
typedef int (PASCAL FAR *LPFN_IOCTLSOCKET)(SOCKET s,
long cmd, u_long FAR *argp);
typedef int (PASCAL FAR *LPFN_LISTEN)(SOCKET s, int backlog);
- typedef u_short (PASCAL FAR *LPFN_NTOHS)(u_short netshort);
+ typedef unsigned short (PASCAL FAR *LPFN_NTOHS)(unsigned short netshort);
typedef int (PASCAL FAR *LPFN_RECV)(SOCKET s, char FAR * buf,
int len, int flags);
typedef int (PASCAL FAR *LPFN_SELECT)(int nfds,
@@ -1320,7 +1320,7 @@ CreateSocketAddress(sockaddrPtr, host, port)
ZeroMemory(sockaddrPtr, sizeof(SOCKADDR_IN));
sockaddrPtr->sin_family = AF_INET;
- sockaddrPtr->sin_port = winSock.htons((u_short) (port & 0xFFFF));
+ sockaddrPtr->sin_port = winSock.htons((unsigned short) (port & 0xFFFF));
if (host == NULL) {
addr.s_addr = INADDR_ANY;
} else {
@@ -2678,8 +2678,8 @@ TclWinSetSockOpt(SOCKET s, int level, int optname, const char * optval,
return winSock.setsockopt(s, level, optname, optval, optlen);
}
-u_short
-TclWinNToHS(u_short netshort)
+unsigned short
+TclWinNToHS(unsigned short netshort)
{
/*
* Check that WinSock is initialized; do not call it if not, to
@@ -2689,12 +2689,29 @@ TclWinNToHS(u_short netshort)
*/
if (!SocketsEnabled()) {
- return (u_short) -1;
+ return (unsigned short) -1;
}
return winSock.ntohs(netshort);
}
+char *
+TclpInetNtoa(struct in_addr addr)
+{
+ /*
+ * Check that WinSock is initialized; do not call it if not, to
+ * prevent system crashes. This can happen at exit time if the exit
+ * handler for WinSock ran before other exit handlers that want to
+ * use sockets.
+ */
+
+ if (!SocketsEnabled()) {
+ return NULL;
+ }
+
+ return winSock.inet_ntoa(addr);
+}
+
struct servent *
TclWinGetServByName(const char * name, const char * proto)
{