/* * tclMacPort.h -- * * This header file handles porting issues that occur because of * differences between the Mac and Unix. It should be the only * file that contains #ifdefs to handle different flavors of OS. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tclMacPort.h,v 1.5 1998/09/14 18:40:06 stanton Exp $ */ #ifndef _MACPORT #define _MACPORT #ifndef _TCL #include "tcl.h" #endif #include "tclErrno.h" #include /* Includes */ #ifdef THINK_C /* * The Symantic C code has not been tested * and probably will not work. */ # include # include # include # include # include # include # include # include # include #elif defined(__MWERKS__) # include # include /* * 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 */ /* * MetroWerks stat.h file is rather weak. The defines * after the include are needed to fill in the missing * defines. */ # include # ifndef S_IFIFO # define S_IFIFO 0x0100 # endif # ifndef S_IFBLK # define S_IFBLK 0x0600 # endif # ifndef S_ISLNK # define S_ISLNK(m) (((m)&(S_IFMT)) == (S_IFLNK)) # endif # ifndef S_ISSOCK # 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 */ # endif # define isatty(arg) 1 /* * Defines used by access function. This function is provided * by Mac Tcl as the function TclpAccess. */ # 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 /* * waitpid doesn't work on a Mac - the following makes * Tcl compile without errors. These would normally * 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 "NBBY" (number of bits per byte) if it's not already defined. */ #ifndef NBBY # define NBBY 8 #endif /* * These functions always return dummy values on Mac. */ #ifndef geteuid # define geteuid() 1 #endif #ifndef getpid # define getpid() -1 #endif #define NO_SYS_ERRLIST #define WAIT_STATUS_TYPE int /* * Make sure that MAXPATHLEN is defined. */ #ifndef MAXPATHLEN # ifdef PATH_MAX # define MAXPATHLEN PATH_MAX # else # define MAXPATHLEN 2048 # endif #endif /* * The following functions are declared in tclInt.h but don't do anything * on Macintosh systems. */ #define TclSetSystemEnv(a,b) /* * Many signals are not supported on the Mac and are thus not defined in * . 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 extern char **environ; /* * Prototypes needed for compatability */ EXTERN int TclMacCreateEnv _ANSI_ARGS_((void)); EXTERN int strncasecmp _ANSI_ARGS_((CONST char *s1, CONST char *s2, size_t n)); /* * The following declarations belong in tclInt.h, but depend on platform * specific types (e.g. struct tm). */ 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)); #define tzset() #define TclpGetPid(pid) ((unsigned long) (pid)) /* * The following defines replace the Macintosh version of the POSIX * functions "stat" and "access". The various compilier vendors * don't implement this function well nor consistantly. */ #define lstat(path, bufPtr) TclStat(path, bufPtr) 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) #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. */ #define TclCreateCommandChannel(out, in, err, num, pidPtr) NULL #define TclClosePipeFile(x) /* * These definitions force putenv & company to use the version * supplied with Tcl. */ #ifndef putenv # define unsetenv TclUnsetEnv # define putenv Tcl_PutEnv # define setenv TclSetEnv void TclSetEnv(CONST char *name, CONST char *value); int Tcl_PutEnv(CONST char *string); 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" /* * TclpFinalize is a noop on the Mac. */ #define TclpFinalize() /* * The following define should really be in tclInt.h, but tclInt.h does * not include tclPort.h, which includes the "struct stat" definition. */ EXTERN int TclpSameFile _ANSI_ARGS_((char *file1, char *file2, struct stat *sourceStatBufPtr, struct stat *destStatBufPtr)) ; EXTERN int TclpStat _ANSI_ARGS_ ((CONST char *path, struct stat *buf)); EXTERN int TclpAccess _ANSI_ARGS_ ((CONST char *path, int mode)); #endif /* _MACPORT */