Mac hack to make select() work again...

This commit is contained in:
Guido van Rossum 1997-06-02 22:16:43 +00:00
parent 4f074044be
commit 290283bb39
1 changed files with 61 additions and 0 deletions

View File

@ -49,6 +49,7 @@ PERFORMANCE OF THIS SOFTWARE.
#ifdef macintosh
#define MAC_TCL
#include "myselect.h"
#endif
#include <tcl.h>
@ -1590,6 +1591,66 @@ PyMacConvertEvent(eventPtr)
return TkMacConvertEvent(eventPtr);
}
#ifdef USE_GUSI
/*
* For Python we have to override this routine (from TclMacNotify),
* since we use GUSI for our sockets, not Tcl streams. Hence, we have
* to use GUSI select to see whether our socket is ready. Note that
* createfilehandler (above) sets the type to TCL_UNIX_FD for our
* files and sockets.
*
* NOTE: this code was lifted from Tcl 7.6, it may need to be modified
* for other versions. */
int
Tcl_FileReady(file, mask)
Tcl_File file; /* File handle for a stream. */
int mask; /* OR'ed combination of TCL_READABLE,
* TCL_WRITABLE, and TCL_EXCEPTION:
* indicates conditions caller cares about. */
{
int type;
int fd;
fd = (int) Tcl_GetFileInfo(file, &type);
if (type == TCL_MAC_SOCKET) {
return TclMacSocketReady(file, mask);
} else if (type == TCL_MAC_FILE) {
/*
* Under the Macintosh, files are always ready, so we just
* return the mask that was passed in.
*/
return mask;
} else if (type == TCL_UNIX_FD) {
fd_set readset, writeset, excset;
struct timeval tv;
FD_ZERO(&readset);
FD_ZERO(&writeset);
FD_ZERO(&excset);
if ( mask & TCL_READABLE ) FD_SET(fd, &readset);
if ( mask & TCL_WRITABLE ) FD_SET(fd, &writeset);
if ( mask & TCL_EXCEPTION ) FD_SET(fd, &excset);
tv.tv_sec = tv.tv_usec = 0;
if ( select(fd+1, &readset, &writeset, &excset, &tv) <= 0 )
return 0;
mask = 0;
if ( FD_ISSET(fd, &readset) ) mask |= TCL_READABLE;
if ( FD_ISSET(fd, &writeset) ) mask |= TCL_WRITABLE;
if ( FD_ISSET(fd, &excset) ) mask |= TCL_EXCEPTION;
return mask;
}
return 0;
}
#endif /* USE_GUSI */
#if GENERATINGCFM
/*