Annotation of micropolis/src/tcl/tclunix.h, revision 1.1.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.