summaryrefslogtreecommitdiff
path: root/tcl/mac/tclMacPort.h
diff options
context:
space:
mode:
Diffstat (limited to 'tcl/mac/tclMacPort.h')
-rw-r--r--tcl/mac/tclMacPort.h268
1 files changed, 268 insertions, 0 deletions
diff --git a/tcl/mac/tclMacPort.h b/tcl/mac/tclMacPort.h
new file mode 100644
index 00000000000..bad2646141b
--- /dev/null
+++ b/tcl/mac/tclMacPort.h
@@ -0,0 +1,268 @@
+/*
+ * 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$
+ */
+
+#ifndef _MACPORT
+#define _MACPORT
+
+#ifndef _TCL
+#include "tcl.h"
+#endif
+
+#include "tclErrno.h"
+#include <float.h>
+
+/* Includes */
+#ifdef THINK_C
+ /*
+ * The Symantic C code has not been tested
+ * and probably will not work.
+ */
+# include <pascal.h>
+# include <posix.h>
+# include <string.h>
+# include <fcntl.h>
+# include <pwd.h>
+# include <sys/param.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <unistd.h>
+#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 */
+
+/*
+ * 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
+# 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
+ * <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
+
+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 */