tclMacPort.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * tclMacPort.h --
  3.  *
  4.  * This header file handles porting issues that occur because of
  5.  * differences between the Mac and Unix. It should be the only
  6.  * file that contains #ifdefs to handle different flavors of OS.
  7.  *
  8.  * Copyright (c) 1995-1997 Sun Microsystems, Inc.
  9.  *
  10.  * See the file "license.terms" for information on usage and redistribution
  11.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12.  *
  13.  * RCS: @(#) $Id: tclMacPort.h,v 1.17 2003/03/03 20:22:44 das Exp $
  14.  */
  15. #ifndef _MACPORT
  16. #define _MACPORT
  17. #ifndef _TCLINT
  18. #   include "tclInt.h"
  19. #endif
  20. /*
  21.  *---------------------------------------------------------------------------
  22.  * The following sets of #includes and #ifdefs are required to get Tcl to
  23.  * compile on the macintosh.
  24.  *---------------------------------------------------------------------------
  25.  */
  26. #include "tclErrno.h"
  27. #ifndef EOVERFLOW
  28. #   ifdef EFBIG
  29. #      define EOVERFLOW EFBIG /* The object couldn't fit in the datatype */
  30. #   else /* !EFBIG */
  31. #      define EOVERFLOW EINVAL /* Better than nothing! */
  32. #   endif /* EFBIG */
  33. #endif /* !EOVERFLOW */
  34. #include <float.h>
  35. #ifdef THINK_C
  36. /*
  37.  * The Symantic C code has not been tested
  38.  * and probably will not work.
  39.  */
  40. #   include <pascal.h>
  41. #   include <posix.h>
  42. #   include <string.h>
  43. #   include <fcntl.h>
  44. #   include <pwd.h>
  45. #   include <sys/param.h>
  46. #   include <sys/types.h>
  47. #   include <sys/stat.h>
  48. #   include <unistd.h>
  49. #elif defined(__MWERKS__)
  50. #   include <time.h>
  51. #   include <unistd.h>
  52. #   include <utime.h>
  53. #   include <fcntl.h>
  54. #   include <stat.h>
  55. #if __MSL__ < 0x6000
  56. #   define isatty(arg)  1
  57. /* 
  58.  * Defines used by access function.  This function is provided
  59.  * by Mac Tcl as the function TclpAccess.
  60.  */
  61.  
  62. #   define F_OK 0 /* test for existence of file */
  63. #   define X_OK 0x01 /* test for execute or search permission */
  64. #   define W_OK 0x02 /* test for write permission */
  65. #   define R_OK 0x04 /* test for read permission */
  66. #endif
  67. #endif /* __MWERKS__ */
  68. #if defined(S_IFBLK) && !defined(S_ISLNK)
  69. #define S_ISLNK(m) (((m)&(S_IFMT)) == (S_IFLNK))
  70. #endif
  71. /*
  72.  * Many signals are not supported on the Mac and are thus not defined in
  73.  * <signal.h>.  They are defined here so that Tcl will compile with less
  74.  * modification.
  75.   */
  76. #ifndef SIGQUIT
  77. #define SIGQUIT 300
  78. #endif
  79. #ifndef SIGPIPE
  80. #define SIGPIPE 13
  81. #endif
  82. #ifndef SIGHUP
  83. #define SIGHUP  100
  84. #endif
  85. /*
  86.  * waitpid doesn't work on a Mac - the following makes
  87.  * Tcl compile without errors.  These would normally
  88.  * be defined in sys/wait.h on UNIX systems.
  89.  */
  90. #define WAIT_STATUS_TYPE  int
  91. #define WNOHANG  1
  92. #define WIFSTOPPED(stat)  (1)
  93. #define WIFSIGNALED(stat)  (1)
  94. #define WIFEXITED(stat)  (1)
  95. #define WIFSTOPSIG(stat)  (1)
  96. #define WIFTERMSIG(stat)  (1)
  97. #define WIFEXITSTATUS(stat)  (1)
  98. #define WEXITSTATUS(stat)  (1)
  99. #define WTERMSIG(status)  (1)
  100. #define WSTOPSIG(status)  (1)
  101. #ifdef BUILD_tcl
  102. # undef TCL_STORAGE_CLASS
  103. # define TCL_STORAGE_CLASS DLLEXPORT
  104. #endif
  105. /*
  106.  * Make sure that MAXPATHLEN is defined.
  107.  */
  108. #ifndef MAXPATHLEN
  109. #   ifdef PATH_MAX
  110. #       define MAXPATHLEN PATH_MAX
  111. #   else
  112. #       define MAXPATHLEN 2048
  113. #   endif
  114. #endif
  115. /*
  116.  * Define "NBBY" (number of bits per byte) if it's not already defined.
  117.  */
  118. #ifndef NBBY
  119. #   define NBBY 8
  120. #endif
  121. /*
  122.  * These functions always return dummy values on Mac.
  123.  */
  124. #ifndef geteuid
  125. #   define geteuid() 1
  126. #endif
  127. #ifndef getpid
  128. #   define getpid() -1
  129. #endif
  130. /*
  131.  * Variables provided by the C library.
  132.  */
  133.  
  134. extern char **environ;
  135. /*
  136.  *---------------------------------------------------------------------------
  137.  * The following macros and declarations represent the interface between 
  138.  * generic and mac-specific parts of Tcl.  Some of the macros may override 
  139.  * functions declared in tclInt.h.
  140.  *---------------------------------------------------------------------------
  141.  */
  142. /*
  143.  * The default platform eol translation on Mac is TCL_TRANSLATE_CR:
  144.  */
  145. #define TCL_PLATFORM_TRANSLATION TCL_TRANSLATE_CR
  146. /*
  147.  * Declare dynamic loading extension macro.
  148.  */
  149. #define TCL_SHLIB_EXT ".shlb"
  150. /*
  151.  * The following define is defined as a workaround on the mac.  It claims that
  152.  * struct tm has the timezone string in it, which is not true.  However,
  153.  * the code that works around this fact does not compile on the Mac, since
  154.  * it relies on the fact that time.h has a "timezone" variable, which the
  155.  * Metrowerks time.h does not have...
  156.  * 
  157.  * The Mac timezone stuff is implemented via the TclpGetTZName() routine in
  158.  * tclMacTime.c
  159.  * 
  160.  */
  161.  
  162. #define HAVE_TM_ZONE 
  163.  
  164.  
  165. /*
  166.  * If we're using the Metrowerks MSL, we need to convert time_t values from
  167.  * the mac epoch to the msl epoch (== unix epoch) by adding the offset from
  168.  * <time.mac.h> to mac time_t values, as MSL is using its epoch for file
  169.  * access routines such as stat or utime
  170.  */
  171. #ifdef __MSL__
  172. #include <time.mac.h>
  173. #ifdef _mac_msl_epoch_offset_
  174. #define tcl_mac_epoch_offset  _mac_msl_epoch_offset_
  175. #define TCL_MAC_USE_MSL_EPOCH  /* flag for TclDate.c */
  176. #else
  177. #define tcl_mac_epoch_offset 0L
  178. #endif
  179. #else
  180. #define tcl_mac_epoch_offset 0L
  181. #endif
  182.  
  183. /*
  184.  * The following macros have trivial definitions, allowing generic code to 
  185.  * address platform-specific issues.
  186.  */
  187.  
  188. #define TclpGetPid(pid)      ((unsigned long) (pid))
  189. #define TclSetSystemEnv(a,b)
  190. #define tzset()
  191. char *TclpFindExecutable(const char *argv0);
  192. int TclpFindVariable(CONST char *name, int *lengthPtr);
  193. #define fopen(path, mode) TclMacFOpenHack(path, mode)
  194. #define readlink(fileName, buffer, size) TclMacReadlink(fileName, buffer, size)
  195. #ifdef TCL_TEST
  196. #define chmod(path, mode) TclMacChmod(path, mode)
  197. #endif
  198. /*
  199.  * Prototypes needed for compatability
  200.  */
  201. /* EXTERN int strncasecmp _ANSI_ARGS_((CONST char *s1,
  202.     CONST char *s2, size_t n)); */
  203. /*
  204.  * These definitions force putenv & company to use the version
  205.  * supplied with Tcl.
  206.  */
  207. #ifndef putenv
  208. #   define unsetenv TclUnsetEnv
  209. #   define putenv Tcl_PutEnv
  210. #   define setenv TclSetEnv
  211. void TclSetEnv(CONST char *name, CONST char *value);
  212. /* int Tcl_PutEnv(CONST char *string); */
  213. void TclUnsetEnv(CONST char *name);
  214. #endif
  215. /*
  216.  * Platform specific mutex definition used by memory allocators.
  217.  * These are all no-ops on the Macintosh, since the threads are
  218.  * all cooperative.
  219.  */
  220. #ifdef TCL_THREADS
  221. typedef int TclpMutex;
  222. #define TclpMutexInit(a)
  223. #define TclpMutexLock(a)
  224. #define TclpMutexUnlock(a)
  225. #else
  226. typedef int TclpMutex;
  227. #define TclpMutexInit(a)
  228. #define TclpMutexLock(a)
  229. #define TclpMutexUnlock(a)
  230. #endif /* TCL_THREADS */
  231. typedef pascal void (*ExitToShellProcPtr)(void);
  232. #include "tclMac.h" // contains #include "tclPlatDecls.h"
  233. #include "tclIntPlatDecls.h"
  234. # undef TCL_STORAGE_CLASS
  235. # define TCL_STORAGE_CLASS DLLIMPORT
  236. #endif /* _MACPORT */