diff options
Diffstat (limited to 'mac/tclMacPort.h')
-rw-r--r-- | mac/tclMacPort.h | 275 |
1 files changed, 155 insertions, 120 deletions
diff --git a/mac/tclMacPort.h b/mac/tclMacPort.h index 366b7a0..248e2a5 100644 --- a/mac/tclMacPort.h +++ b/mac/tclMacPort.h @@ -10,20 +10,27 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * SCCS: @(#) tclMacPort.h 1.75 97/08/11 10:18:07 + * SCCS: @(#) tclMacPort.h 1.78 98/02/18 15:48:22 */ + #ifndef _MACPORT #define _MACPORT -#ifndef _TCL -#include "tcl.h" +#ifndef _TCLINT +# include "tclInt.h" #endif +/* + *--------------------------------------------------------------------------- + * The following sets of #includes and #ifdefs are required to get Tcl to + * compile on the macintosh. + *--------------------------------------------------------------------------- + */ + #include "tclErrno.h" #include <float.h> -/* Includes */ #ifdef THINK_C /* * The Symantic C code has not been tested @@ -41,64 +48,84 @@ #elif defined(__MWERKS__) # include <time.h> # include <unistd.h> + /* * The following definitions are usually found if fcntl.h. * However, MetroWerks has screwed that file up a couple of times * and all we need are the defines. */ -#define O_RDWR 0x0 /* open the file in read/write mode */ -#define O_RDONLY 0x1 /* open the file in read only mode */ -#define O_WRONLY 0x2 /* open the file in write only mode */ -#define O_APPEND 0x0100 /* open the file in append mode */ -#define O_CREAT 0x0200 /* create the file if it doesn't exist */ -#define O_EXCL 0x0400 /* if the file exists don't create it again */ -#define O_TRUNC 0x0800 /* truncate the file after opening it */ + +# define O_RDWR 0x0 /* open the file in read/write mode */ +# define O_RDONLY 0x1 /* open the file in read only mode */ +# define O_WRONLY 0x2 /* open the file in write only mode */ +# define O_APPEND 0x0100 /* open the file in append mode */ +# define O_CREAT 0x0200 /* create the file if it doesn't exist */ +# define O_EXCL 0x0400 /* if the file exists don't create it again */ +# define O_TRUNC 0x0800 /* truncate the file after opening it */ /* * MetroWerks stat.h file is rather weak. The defines * after the include are needed to fill in the missing * defines. */ + # include <stat.h> # ifndef S_IFIFO -# define S_IFIFO 0x0100 +# define S_IFIFO 0x0100 # endif # ifndef S_IFBLK -# define S_IFBLK 0x0600 +# define S_IFBLK 0x0600 # endif # ifndef S_ISLNK -# define S_ISLNK(m) (((m)&(S_IFMT)) == (S_IFLNK)) +# define S_ISLNK(m) (((m)&(S_IFMT)) == (S_IFLNK)) # endif # ifndef S_ISSOCK -# define S_ISSOCK(m) (((m)&(S_IFMT)) == (S_IFSOCK)) +# define S_ISSOCK(m) (((m)&(S_IFMT)) == (S_IFSOCK)) # endif # ifndef S_IRWXU -# define S_IRWXU 00007 /* read, write, execute: owner */ -# define S_IRUSR 00004 /* read permission: owner */ -# define S_IWUSR 00002 /* write permission: owner */ -# define S_IXUSR 00001 /* execute permission: owner */ -# define S_IRWXG 00007 /* read, write, execute: group */ -# define S_IRGRP 00004 /* read permission: group */ -# define S_IWGRP 00002 /* write permission: group */ -# define S_IXGRP 00001 /* execute permission: group */ -# define S_IRWXO 00007 /* read, write, execute: other */ -# define S_IROTH 00004 /* read permission: other */ -# define S_IWOTH 00002 /* write permission: other */ -# define S_IXOTH 00001 /* execute permission: other */ +# define S_IRWXU 00007 /* read, write, execute: owner */ +# define S_IRUSR 00004 /* read permission: owner */ +# define S_IWUSR 00002 /* write permission: owner */ +# define S_IXUSR 00001 /* execute permission: owner */ +# define S_IRWXG 00007 /* read, write, execute: group */ +# define S_IRGRP 00004 /* read permission: group */ +# define S_IWGRP 00002 /* write permission: group */ +# define S_IXGRP 00001 /* execute permission: group */ +# define S_IRWXO 00007 /* read, write, execute: other */ +# define S_IROTH 00004 /* read permission: other */ +# define S_IWOTH 00002 /* write permission: other */ +# define S_IXOTH 00001 /* execute permission: other */ # endif -# define isatty(arg) 1 +# define isatty(arg) 1 -/* - * Defines used by access function. This function is provided - * by Mac Tcl as the function TclMacAccess. +/* + * Define access mode constants. */ -# define F_OK 0 /* test for existence of file */ -# define X_OK 0x01 /* test for execute or search permission */ -# define W_OK 0x02 /* test for write permission */ -# define R_OK 0x04 /* test for read permission */ +# define F_OK 0 /* test for existence of file */ +# define X_OK 0x01 /* test for execute or search permission */ +# define W_OK 0x02 /* test for write permission */ +# define R_OK 0x04 /* test for read permission */ + +#endif /* __MWERKS__ */ +/* + * Many signals are not supported on the Mac and are thus not defined in + * <signal.h>. They are defined here so that Tcl will compile with less + * modification. + */ + +#ifndef SIGQUIT +#define SIGQUIT 300 +#endif + +#ifndef SIGPIPE +#define SIGPIPE 13 +#endif + +#ifndef SIGHUP +#define SIGHUP 100 #endif /* @@ -107,16 +134,29 @@ * be defined in sys/wait.h on UNIX systems. */ -#define WNOHANG 1 -#define WIFSTOPPED(stat) (1) -#define WIFSIGNALED(stat) (1) -#define WIFEXITED(stat) (1) -#define WIFSTOPSIG(stat) (1) -#define WIFTERMSIG(stat) (1) -#define WIFEXITSTATUS(stat) (1) -#define WEXITSTATUS(stat) (1) -#define WTERMSIG(status) (1) -#define WSTOPSIG(status) (1) +#define WAIT_STATUS_TYPE int +#define WNOHANG 1 +#define WIFSTOPPED(stat) (1) +#define WIFSIGNALED(stat) (1) +#define WIFEXITED(stat) (1) +#define WIFSTOPSIG(stat) (1) +#define WIFTERMSIG(stat) (1) +#define WIFEXITSTATUS(stat) (1) +#define WEXITSTATUS(stat) (1) +#define WTERMSIG(status) (1) +#define WSTOPSIG(status) (1) + +/* + * Make sure that MAXPATHLEN is defined. + */ + +#ifndef MAXPATHLEN +# ifdef PATH_MAX +# define MAXPATHLEN PATH_MAX +# else +# define MAXPATHLEN 2048 +# endif +#endif /* * Define "NBBY" (number of bits per byte) if it's not already defined. @@ -136,95 +176,93 @@ # define getpid() -1 #endif -#define NO_SYS_ERRLIST -#define WAIT_STATUS_TYPE int - /* - * Make sure that MAXPATHLEN is defined. + * Variables provided by the C library. */ - -#ifndef MAXPATHLEN -# ifdef PATH_MAX -# define MAXPATHLEN PATH_MAX -# else -# define MAXPATHLEN 2048 -# endif -#endif + +extern char **environ; /* - * The following functions are declared in tclInt.h but don't do anything - * on Macintosh systems. + *--------------------------------------------------------------------------- + * The following macros and declarations represent the interface between + * generic and mac-specific parts of Tcl. Some of the macros may override + * functions declared in tclInt.h. + *--------------------------------------------------------------------------- */ -#define TclSetSystemEnv(a,b) - /* - * Many signals are not supported on the Mac and are thus not defined in - * <signal.h>. They are defined here so that Tcl will compile with less - * modification. - */ - -#ifndef SIGQUIT -#define SIGQUIT 300 -#endif - -#ifndef SIGPIPE -#define SIGPIPE 13 -#endif - -#ifndef SIGHUP -#define SIGHUP 100 -#endif + * The default platform eol translation on Mac is TCL_TRANSLATE_CR: + */ -extern char **environ; +#define TCL_PLATFORM_TRANSLATION TCL_TRANSLATE_CR /* - * Prototypes needed for compatability + * Declare dynamic loading extension macro. */ -EXTERN int TclMacCreateEnv _ANSI_ARGS_((void)); -EXTERN int strncasecmp _ANSI_ARGS_((CONST char *s1, - CONST char *s2, size_t n)); +#define TCL_SHLIB_EXT ".shlb" /* * The following declarations belong in tclInt.h, but depend on platform - * specific types (e.g. struct tm). + * specific types. */ EXTERN struct tm * TclpGetDate _ANSI_ARGS_((const time_t *tp, int useGMT)); -EXTERN size_t TclStrftime _ANSI_ARGS_((char *s, size_t maxsize, - const char *format, const struct tm *t)); +/* + * The following define is bogus and needs to be fixed. It claims that + * struct tm has the timezone string in it, which is not true. However, + * the code that works around this fact does not compile on the Mac, since + * it relies on the fact that time.h has a "timezone" variable, which the + * Metrowerks time.h does not have... + * + * The Mac timezone stuff never worked (clock format 0 -format %Z returns "Z") + * so this just keeps the status quo. The real answer is to not use the + * MSL strftime, and provide the needed compat functions... + * + */ + +#define HAVE_TM_ZONE + +/* + * The following macros have trivial definitions, allowing generic code to + * address platform-specific issues. + */ + #define tzset() -#define TclpGetPid(pid) ((unsigned long) (pid)) +#define TclpGetPid(pid) ((unsigned long) (pid)) +#define TclpGetUserHome(n, b) (NULL) +#define TclSetSystemEnv(a,b) /* - * The following prototypes and defines replace the Macintosh version - * of the POSIX functions "stat" and "access". The various compilier - * vendors don't implement this function well nor consistantly. + * The following macros and declaration wrap the C runtime library + * functions. */ -EXTERN int TclMacStat _ANSI_ARGS_((char *path, struct stat *buf)); -#define stat(path, bufPtr) TclMacStat(path, bufPtr) -#define lstat(path, bufPtr) TclMacStat(path, bufPtr) -EXTERN int TclMacAccess _ANSI_ARGS_((const char *filename, int mode)); -#define access(path, mode) TclMacAccess(path, mode) -EXTERN FILE * TclMacFOpenHack _ANSI_ARGS_((const char *path, - const char *mode)); -#define fopen(path, mode) TclMacFOpenHack(path, mode) -EXTERN int TclMacReadlink _ANSI_ARGS_((char *path, char *buf, int size)); -#define readlink(fileName, buffer, size) TclMacReadlink(fileName, buffer, size) + +#define fopen TclMacFOpenHack +#define lstat stat + +#define TclpLstat TclpStat +#define TclStrftime strftime + +EXTERN int TclpStat _ANSI_ARGS_((CONST char *path, + struct stat *buf)); +EXTERN FILE * TclMacFOpenHack _ANSI_ARGS_((const char *path, + const char *mode)); + #ifdef TCL_TEST #define chmod(path, mode) TclMacChmod(path, mode) EXTERN int TclMacChmod(char *path, int mode); #endif /* - * Defines for Tcl internal commands that aren't really needed on - * the Macintosh. They all act as no-ops. + * Prototypes needed for compatability */ -#define TclCreateCommandChannel(out, in, err, num, pidPtr) NULL -#define TclClosePipeFile(x) + +EXTERN int TclMacCreateEnv _ANSI_ARGS_((void)); +EXTERN int strncasecmp _ANSI_ARGS_((CONST char *s1, + CONST char *s2, size_t n)); /* * These definitions force putenv & company to use the version @@ -240,24 +278,21 @@ void TclUnsetEnv(CONST char *name); #endif /* - * The default platform eol translation on Mac is TCL_TRANSLATE_CR: - */ - -#define TCL_PLATFORM_TRANSLATION TCL_TRANSLATE_CR - -/* - * Declare dynamic loading extension macro. - */ - -#define TCL_SHLIB_EXT ".shlb" - -/* - * The following define should really be in tclInt.h, but tclInt.h does - * not include tclPort.h, which includes the "struct stat" definition. + * Platform specific mutex definition used by memory allocators. + * These are all no-ops on the Macintosh, since the threads are + * all cooperative. */ -EXTERN int TclpSameFile _ANSI_ARGS_((char *file1, char *file2, - struct stat *sourceStatBufPtr, - struct stat *destStatBufPtr)) ; +#ifdef TCL_THREADS +typedef int TclpMutex; +#define TclpMutexInit(a) +#define TclpMutexLock(a) +#define TclpMutexUnlock(a) +#else +typedef int TclpMutex; +#define TclpMutexInit(a) +#define TclpMutexLock(a) +#define TclpMutexUnlock(a) +#endif /* TCL_THREADS */ #endif /* _MACPORT */ |