Annotation of micropolis/src/tcl/tclunix.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * tclUnix.h --
        !             3:  *
        !             4:  *     This file reads in UNIX-related header files and sets up
        !             5:  *     UNIX-related macros for Tcl's UNIX core.  It should be the
        !             6:  *     only file that contains #ifdefs to handle different flavors
        !             7:  *     of UNIX.  This file sets up the union of all UNIX-related
        !             8:  *     things needed by any of the Tcl core files.  This file
        !             9:  *     depends on configuration #defines in tclConfig.h
        !            10:  *
        !            11:  *     The material in this file was originally contributed by
        !            12:  *     Karl Lehenbauer, Mark Diekhans and Peter da Silva.
        !            13:  *
        !            14:  * Copyright 1991 Regents of the University of California
        !            15:  * Permission to use, copy, modify, and distribute this
        !            16:  * software and its documentation for any purpose and without
        !            17:  * fee is hereby granted, provided that this copyright
        !            18:  * notice appears in all copies.  The University of California
        !            19:  * makes no representations about the suitability of this
        !            20:  * software for any purpose.  It is provided "as is" without
        !            21:  * express or implied warranty.
        !            22:  *
        !            23:  * $Header: /user6/ouster/tcl/RCS/tclUnix.h,v 1.26 92/08/03 08:27:43 ouster Exp $ SPRITE (Berkeley)
        !            24:  */
        !            25: 
        !            26: #ifndef _TCLUNIX
        !            27: #define _TCLUNIX
        !            28: 
        !            29: /*
        !            30:  * The following #defines are used to distinguish between different
        !            31:  * UNIX systems.  These #defines are normally set by the "config" script
        !            32:  * based on information it gets by looking in the include and library
        !            33:  * areas.  The defaults below are for BSD-based systems like SunOS
        !            34:  * or Ultrix.
        !            35:  *
        !            36:  * TCL_GETTOD -                        1 means there exists a library procedure
        !            37:  *                             "gettimeofday" (e.g. BSD systems).  0 means
        !            38:  *                             have to use "times" instead.
        !            39:  * TCL_GETWD -                 1 means there exists a library procedure
        !            40:  *                             "getwd" (e.g. BSD systems).  0 means
        !            41:  *                             have to use "getcwd" instead.
        !            42:  * TCL_SYS_ERRLIST -           1 means that the array sys_errlist is
        !            43:  *                             defined as part of the C library.
        !            44:  * TCL_SYS_TIME_H -            1 means there exists an include file
        !            45:  *                             <sys/time.h> (e.g. BSD derivatives).
        !            46:  * TCL_SYS_WAIT_H -            1 means there exists an include file
        !            47:  *                             <sys/wait.h> that defines constants related
        !            48:  *                             to the results of "wait".
        !            49:  * TCL_UNION_WAIT -            1 means that the "wait" system call returns
        !            50:  *                             a structure of type "union wait" (e.g. BSD
        !            51:  *                             systems).  0 means "wait" returns an int
        !            52:  *                             (e.g. System V and POSIX).
        !            53:  * TCL_PID_T -                 1 means that <sys/types> defines the type
        !            54:  *                             pid_t.  0 means that it doesn't.
        !            55:  * TCL_UID_T -                 1 means that <sys/types> defines the type
        !            56:  *                             uid_t.  0 means that it doesn't.
        !            57:  */
        !            58: 
        !            59: #define TCL_GETTOD 1
        !            60: #define TCL_GETWD 0
        !            61: #define TCL_SYS_ERRLIST 1
        !            62: #define TCL_SYS_TIME_H 1
        !            63: #define TCL_SYS_WAIT_H 1
        !            64: #define TCL_UNION_WAIT 0
        !            65: 
        !            66: #ifdef IS_LINUX
        !            67: 
        !            68: #define TCL_PID_T 1
        !            69: #define TCL_UID_T 1
        !            70: 
        !            71: #else
        !            72: 
        !            73: #define TCL_PID_T 0
        !            74: #define TCL_UID_T 0
        !            75: 
        !            76: #endif
        !            77: 
        !            78: #include <errno.h>
        !            79: #include <fcntl.h>
        !            80: #include <limits.h>
        !            81: #include <pwd.h>
        !            82: #include <signal.h>
        !            83: #include <sys/param.h>
        !            84: #include <sys/types.h>
        !            85: #include <dirent.h>
        !            86: #include <sys/file.h>
        !            87: #include <sys/stat.h>
        !            88: #if TCL_SYS_TIME_H
        !            89: #   include <sys/time.h>
        !            90: #else
        !            91: #   include <time.h>
        !            92: #endif
        !            93: #if TCL_SYS_WAIT_H
        !            94: #   include <sys/wait.h>
        !            95: #endif
        !            96: 
        !            97: /*
        !            98:  * Not all systems declare the errno variable in errno.h. so this
        !            99:  * file does it explicitly.  The list of system error messages also
        !           100:  * isn't generally declared in a header file anywhere.
        !           101:  */
        !           102: 
        !           103: extern int errno;
        !           104: extern int sys_nerr;
        !           105: //#ifndef IS_LINUX
        !           106: //extern char *sys_errlist[];
        !           107: //#endif
        !           108: 
        !           109: /*
        !           110:  * The type of the status returned by wait varies from UNIX system
        !           111:  * to UNIX system.  The macro below defines it:
        !           112:  */
        !           113: 
        !           114: #if TCL_UNION_WAIT
        !           115: #   define WAIT_STATUS_TYPE union wait
        !           116: #else
        !           117: #   define WAIT_STATUS_TYPE int
        !           118: #endif
        !           119: 
        !           120: /*
        !           121:  * Supply definitions for macros to query wait status, if not already
        !           122:  * defined in header files above.
        !           123:  */
        !           124: 
        !           125: #ifndef WIFEXITED
        !           126: #   define WIFEXITED(stat)  (((*((int *) &(stat))) & 0xff) == 0)
        !           127: #endif
        !           128: 
        !           129: #ifndef WEXITSTATUS
        !           130: #   define WEXITSTATUS(stat) (((*((int *) &(stat))) >> 8) & 0xff)
        !           131: #endif
        !           132: 
        !           133: #ifndef WIFSIGNALED
        !           134: #   define WIFSIGNALED(stat) (((*((int *) &(stat)))) && ((*((int *) &(stat))) == ((*((int *) &(stat))) & 0x00ff)))
        !           135: #endif
        !           136: 
        !           137: #ifndef WTERMSIG
        !           138: #   define WTERMSIG(stat)    ((*((int *) &(stat))) & 0x7f)
        !           139: #endif
        !           140: 
        !           141: #ifndef WIFSTOPPED
        !           142: #   define WIFSTOPPED(stat)  (((*((int *) &(stat))) & 0xff) == 0177)
        !           143: #endif
        !           144: 
        !           145: #ifndef WSTOPSIG
        !           146: #   define WSTOPSIG(stat)    (((*((int *) &(stat))) >> 8) & 0xff)
        !           147: #endif
        !           148: 
        !           149: /*
        !           150:  * Supply macros for seek offsets, if they're not already provided by
        !           151:  * an include file.
        !           152:  */
        !           153: 
        !           154: #ifndef SEEK_SET
        !           155: #   define SEEK_SET 0
        !           156: #endif
        !           157: 
        !           158: #ifndef SEEK_CUR
        !           159: #   define SEEK_CUR 1
        !           160: #endif
        !           161: 
        !           162: #ifndef SEEK_END
        !           163: #   define SEEK_END 2
        !           164: #endif
        !           165: 
        !           166: /*
        !           167:  * The stuff below is needed by the "time" command.  If this
        !           168:  * system has no gettimeofday call, then must use times and the
        !           169:  * CLK_TCK #define (from sys/param.h) to compute elapsed time.
        !           170:  * Unfortunately, some systems only have HZ and no CLK_TCK, and
        !           171:  * some might not even have HZ.
        !           172:  */
        !           173: 
        !           174: #if ! TCL_GETTOD
        !           175: #   include <sys/times.h>
        !           176: #   include <sys/param.h>
        !           177: #   ifndef CLK_TCK
        !           178: #       ifdef HZ
        !           179: #           define CLK_TCK HZ
        !           180: #       else
        !           181: #           define CLK_TCK 60
        !           182: #       endif
        !           183: #   endif
        !           184: #endif
        !           185: 
        !           186: /*
        !           187:  * Define access mode constants if they aren't already defined.
        !           188:  */
        !           189: 
        !           190: #ifndef F_OK
        !           191: #    define F_OK 00
        !           192: #endif
        !           193: #ifndef X_OK
        !           194: #    define X_OK 01
        !           195: #endif
        !           196: #ifndef W_OK
        !           197: #    define W_OK 02
        !           198: #endif
        !           199: #ifndef R_OK
        !           200: #    define R_OK 04
        !           201: #endif
        !           202: 
        !           203: /*
        !           204:  * On systems without symbolic links (i.e. S_IFLNK isn't defined)
        !           205:  * define "lstat" to use "stat" instead.
        !           206:  */
        !           207: 
        !           208: #ifndef S_IFLNK
        !           209: #   define lstat stat
        !           210: #endif
        !           211: 
        !           212: /*
        !           213:  * Define macros to query file type bits, if they're not already
        !           214:  * defined.
        !           215:  */
        !           216: 
        !           217: #ifndef S_ISREG
        !           218: #   ifdef S_IFREG
        !           219: #       define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
        !           220: #   else
        !           221: #       define S_ISREG(m) 0
        !           222: #   endif
        !           223: # endif
        !           224: #ifndef S_ISDIR
        !           225: #   ifdef S_IFDIR
        !           226: #       define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
        !           227: #   else
        !           228: #       define S_ISDIR(m) 0
        !           229: #   endif
        !           230: # endif
        !           231: #ifndef S_ISCHR
        !           232: #   ifdef S_IFCHR
        !           233: #       define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
        !           234: #   else
        !           235: #       define S_ISCHR(m) 0
        !           236: #   endif
        !           237: # endif
        !           238: #ifndef S_ISBLK
        !           239: #   ifdef S_IFBLK
        !           240: #       define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
        !           241: #   else
        !           242: #       define S_ISBLK(m) 0
        !           243: #   endif
        !           244: # endif
        !           245: #ifndef S_ISFIFO
        !           246: #   ifdef S_IFIFO
        !           247: #       define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
        !           248: #   else
        !           249: #       define S_ISFIFO(m) 0
        !           250: #   endif
        !           251: # endif
        !           252: #ifndef S_ISLNK
        !           253: #   ifdef S_IFLNK
        !           254: #       define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
        !           255: #   else
        !           256: #       define S_ISLNK(m) 0
        !           257: #   endif
        !           258: # endif
        !           259: #ifndef S_ISSOCK
        !           260: #   ifdef S_IFSOCK
        !           261: #       define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
        !           262: #   else
        !           263: #       define S_ISSOCK(m) 0
        !           264: #   endif
        !           265: # endif
        !           266: 
        !           267: /*
        !           268:  * Make sure that MAXPATHLEN is defined.
        !           269:  */
        !           270: 
        !           271: #ifndef MAXPATHLEN
        !           272: #   ifdef PATH_MAX
        !           273: #       define MAXPATHLEN PATH_MAX
        !           274: #   else
        !           275: #       define MAXPATHLEN 2048
        !           276: #   endif
        !           277: #endif
        !           278: 
        !           279: /*
        !           280:  * Define pid_t and uid_t if they're not already defined.
        !           281:  */
        !           282: 
        !           283: #if ! TCL_PID_T
        !           284: #   define pid_t int
        !           285: #endif
        !           286: #if ! TCL_UID_T
        !           287: #   define uid_t int
        !           288: #endif
        !           289: 
        !           290: /*
        !           291:  * Variables provided by the C library:
        !           292:  */
        !           293: 
        !           294: extern char **environ;
        !           295: 
        !           296: /*
        !           297:  * Library procedures used by Tcl but not declared in a header file:
        !           298:  */
        !           299: 
        !           300: #if 0
        !           301: #ifndef _CRAY
        !           302: extern int     access     _ANSI_ARGS_((CONST char *path, int mode));
        !           303: extern int     chdir      _ANSI_ARGS_((CONST char *path));
        !           304: extern int     close      _ANSI_ARGS_((int fd));
        !           305: extern int     dup2       _ANSI_ARGS_((int src, int dst));
        !           306: extern int     execvp     _ANSI_ARGS_((CONST char *name, char **argv));
        !           307: extern void    _exit      _ANSI_ARGS_((int status));
        !           308: extern pid_t   fork       _ANSI_ARGS_((void));
        !           309: extern uid_t   geteuid    _ANSI_ARGS_((void));
        !           310: extern pid_t   getpid     _ANSI_ARGS_((void));
        !           311: extern char *  getcwd     _ANSI_ARGS_((char *buffer, int size));
        !           312: extern char *  getwd      _ANSI_ARGS_((char *buffer));
        !           313: extern int     kill       _ANSI_ARGS_((pid_t pid, int sig));
        !           314: extern long    lseek      _ANSI_ARGS_((int fd, int offset, int whence));
        !           315: extern char *  mktemp     _ANSI_ARGS_((char *template));
        !           316: extern int     open       _ANSI_ARGS_((CONST char *path, int flags, ...));
        !           317: extern int     pipe       _ANSI_ARGS_((int *fdPtr));
        !           318: extern int     read       _ANSI_ARGS_((int fd, char *buf, int numBytes));
        !           319: extern int     readlink   _ANSI_ARGS_((CONST char *path, char *buf, int size));
        !           320: extern int     unlink     _ANSI_ARGS_((CONST char *path));
        !           321: extern int     write      _ANSI_ARGS_((int fd, char *buf, int numBytes));
        !           322: #endif /* _CRAY */
        !           323: #endif
        !           324: 
        !           325: #endif /* _TCLUNIX */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.