1 /* $NetBSD: system.h,v 1.2 2016/01/14 00:34:53 christos Exp $ */ 2 3 /* system.h: system-dependent declarations; include this first. 4 Id: system.h,v 1.12 2004/04/26 13:56:57 karl Exp 5 6 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software 7 Foundation, Inc. 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 2, or (at your option) 12 any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software Foundation, 21 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 22 23 #ifndef TEXINFO_SYSTEM_H 24 #define TEXINFO_SYSTEM_H 25 26 #define _GNU_SOURCE 27 28 #include <config.h> 29 30 #ifdef MIKTEX 31 #include <gnu-miktex.h> 32 #define S_ISDIR(x) ((x)&_S_IFDIR) 33 #else 34 /* MiKTeX defines substring() in a separate DLL, where it has its 35 own __declspec declaration. We don't want to try to duplicate 36 this Microsoft-ism here. */ 37 extern char *substring (const char *, const char *); 38 #endif 39 40 /* We follow the order of header inclusion from Autoconf's 41 ac_includes_default, more or less. */ 42 #include <stdio.h> 43 #include <sys/types.h> 44 #include <ctype.h> 45 46 /* All systems nowadays probably have these functions, but ... */ 47 #ifdef HAVE_LOCALE_H 48 #include <locale.h> 49 #endif 50 #ifndef HAVE_SETLOCALE 51 #define setlocale(category,locale) /* empty */ 52 #endif 53 54 /* For gettext (NLS). */ 55 #define const 56 #include "gettext.h" 57 #undef const 58 59 #define _(String) gettext (String) 60 #define N_(String) (String) 61 62 #ifdef STDC_HEADERS 63 #define getopt system_getopt 64 #include <stdlib.h> 65 #undef getopt 66 #else 67 extern char *getenv (); 68 #endif 69 70 /* Don't use bcopy! Use memmove if source and destination may overlap, 71 memcpy otherwise. */ 72 #if HAVE_STRING_H 73 # if !STDC_HEADERS && HAVE_MEMORY_H 74 # include <memory.h> 75 # endif 76 # include <string.h> 77 #endif 78 79 #if HAVE_STRINGS_H 80 /* Always include <strings.h> if we have it. This is because that's 81 what Autoconf's AC_CHECK_DECL does. On IBM AIX 4.2, strncasecmp is 82 only declared in strings.h. */ 83 # include <strings.h> 84 #endif 85 86 #if !HAVE_STRNCASECMP || !HAVE_STRCASECMP 87 # include "strcase.h" 88 #endif 89 90 #if !HAVE_DECL_MEMCHR 91 char *memchr (); 92 #endif 93 94 /* <unistd.h> defines _POSIX_VERSION, but Paul Eggert points out that is 95 only supposed to be used in user code, not other system headers. */ 96 #ifdef HAVE_UNISTD_H 97 #include <unistd.h> 98 #endif /* HAVE_UNISTD_H */ 99 100 #include <errno.h> 101 #ifndef errno 102 extern int errno; 103 #endif 104 #ifdef VMS 105 #include <perror.h> 106 #endif 107 108 #ifndef HAVE_DECL_STRERROR 109 extern char *strerror (); 110 #endif 111 112 #ifdef HAVE_LIMITS_H 113 #include <limits.h> 114 #endif 115 #ifndef PATH_MAX 116 #ifndef _POSIX_PATH_MAX 117 # define _POSIX_PATH_MAX 255 118 #endif 119 #define PATH_MAX _POSIX_PATH_MAX 120 #endif 121 122 #ifndef HAVE_DECL_STRCASECMP 123 extern int strcasecmp (); 124 #endif 125 126 #ifndef HAVE_DECL_STRNCASECMP 127 extern int strncasecmp (); 128 #endif 129 130 #ifndef HAVE_DECL_STRCOLL 131 extern int strcoll (); 132 #endif 133 134 #include <sys/stat.h> 135 #if STAT_MACROS_BROKEN 136 # undef S_ISDIR 137 #endif 138 #if !defined(S_ISDIR) && defined(S_IFDIR) 139 # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) 140 #endif 141 142 #ifdef HAVE_SYS_FILE_H 143 #include <sys/file.h> 144 #endif /* HAVE_SYS_FILE_H */ 145 146 #ifndef O_RDONLY 147 /* Since <fcntl.h> is POSIX, prefer that to <sys/fcntl.h>. 148 This also avoids some useless warnings on (at least) Linux. */ 149 #ifdef HAVE_FCNTL_H 150 #include <fcntl.h> 151 #else /* not HAVE_FCNTL_H */ 152 #ifdef HAVE_SYS_FCNTL_H 153 #include <sys/fcntl.h> 154 #endif /* not HAVE_SYS_FCNTL_H */ 155 #endif /* not HAVE_FCNTL_H */ 156 #endif /* not O_RDONLY */ 157 158 /* MS-DOS and similar non-Posix systems have some peculiarities: 159 - they distinguish between binary and text files; 160 - they use both `/' and `\\' as directory separator in file names; 161 - they can have a drive letter X: prepended to a file name; 162 - they have a separate root directory on each drive; 163 - their filesystems are case-insensitive; 164 - directories in environment variables (like INFOPATH) are separated 165 by `;' rather than `:'; 166 - text files can have their lines ended either with \n or with \r\n pairs; 167 These are all parameterized here except the last, which is 168 handled by the source code as appropriate (mostly, in info/). */ 169 #ifndef O_BINARY 170 # ifdef _O_BINARY 171 # define O_BINARY _O_BINARY 172 # else 173 # define O_BINARY 0 174 # endif 175 #endif /* O_BINARY */ 176 177 /* We'd like to take advantage of _doprnt if it's around, a la error.c, 178 but then we'd have no VA_SPRINTF. */ 179 #if HAVE_VPRINTF 180 # if __STDC__ 181 # include <stdarg.h> 182 # define VA_START(args, lastarg) va_start(args, lastarg) 183 # else 184 # include <varargs.h> 185 # define VA_START(args, lastarg) va_start(args) 186 # endif 187 # define VA_FPRINTF(file, fmt, ap) vfprintf (file, fmt, ap) 188 # define VA_SPRINTF(str, fmt, ap) vsprintf (str, fmt, ap) 189 #else /* not HAVE_VPRINTF */ 190 # define VA_START(args, lastarg) 191 # define va_alist a1, a2, a3, a4, a5, a6, a7, a8 192 # define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8; 193 # define va_end(args) 194 #endif 195 196 #if O_BINARY 197 # ifdef HAVE_IO_H 198 # include <io.h> 199 # endif 200 # ifdef __MSDOS__ 201 # include <limits.h> 202 # ifdef __DJGPP__ 203 # define HAVE_LONG_FILENAMES(dir) (pathconf (dir, _PC_NAME_MAX) > 12) 204 # define NULL_DEVICE "/dev/null" 205 # define DEFAULT_INFOPATH "c:/djgpp/info;/usr/local/info;/usr/info;." 206 /* DJGPP supports /dev/null, which is okay for Unix aficionados, 207 shell scripts and Makefiles, but interactive DOS die-hards 208 would probably want to have NUL as well. */ 209 # define ALSO_NULL_DEVICE "NUL" 210 # else /* O_BINARY && !__DJGPP__ */ 211 # define HAVE_LONG_FILENAMES(dir) (0) 212 # define NULL_DEVICE "NUL" 213 # endif /* O_BINARY && !__DJGPP__ */ 214 # define SET_SCREEN_SIZE_HELPER terminal_prep_terminal() 215 # define DEFAULT_INFO_PRINT_COMMAND ">PRN" 216 # else /* O_BINARY && !__MSDOS__ */ 217 # define setmode(f,m) _setmode(f,m) 218 # define HAVE_LONG_FILENAMES(dir) (1) 219 # define NULL_DEVICE "NUL" 220 # endif /* O_BINARY && !__MSDOS__ */ 221 # ifdef __CYGWIN__ 222 # define DEFAULT_TMPDIR "/tmp/" 223 # define PATH_SEP ":" 224 # else /* O_BINARY && !__CYGWIN__ */ 225 # define DEFAULT_TMPDIR "c:/" 226 # define PATH_SEP ";" 227 # endif /* O_BINARY && !__CYGWIN__ */ 228 /* Back to any O_BINARY system. */ 229 # define FILENAME_CMP strcasecmp 230 # define FILENAME_CMPN strncasecmp 231 # define FOPEN_RBIN "rb" 232 # define FOPEN_WBIN "wb" 233 # define HAVE_DRIVE(n) ((n)[0] && (n)[1] == ':') 234 # define IS_SLASH(c) ((c) == '/' || (c) == '\\') 235 # define IS_ABSOLUTE(n) (IS_SLASH((n)[0]) || ((n)[0] && (n)[1] == ':')) 236 # define PIPE_USE_FORK 0 237 # define SET_BINARY(f) do {if (!isatty(f)) setmode(f,O_BINARY);} while(0) 238 # define STRIP_DOT_EXE 1 239 240 #else /* not O_BINARY, i.e., Unix */ 241 # define SET_BINARY(f) (void)0 242 # define FOPEN_RBIN "r" 243 # define FOPEN_WBIN "w" 244 # define IS_SLASH(c) ((c) == '/') 245 # define HAVE_DRIVE(n) (0) 246 # define IS_ABSOLUTE(n) ((n)[0] == '/') 247 # define FILENAME_CMP strcmp 248 # define FILENAME_CMPN strncmp 249 # define HAVE_LONG_FILENAMES(dir) (1) 250 # define PATH_SEP ":" 251 # define STRIP_DOT_EXE 0 252 # ifdef VMS 253 # define DEFAULT_TMPDIR "sys$scratch:" 254 # else 255 # define DEFAULT_TMPDIR "/tmp/" 256 # endif 257 # define NULL_DEVICE "/dev/null" 258 # define PIPE_USE_FORK 1 259 #endif /* not O_BINARY */ 260 261 /* Everything but DJGPP. */ 262 #ifndef ALSO_NULL_DEVICE 263 # define ALSO_NULL_DEVICE "" 264 #endif 265 266 #ifdef HAVE_PWD_H 267 #include <pwd.h> 268 #endif 269 /* Some systems don't declare this function in pwd.h. */ 270 struct passwd *getpwnam (const char *name); 271 272 #ifdef HAVE_STDINT_H 273 #include <stdint.h> 274 #endif 275 276 /* Our library routines not included in any system library. */ 277 extern void *xmalloc (size_t), *xrealloc (void *, size_t); 278 extern char *xstrdup (const char *); 279 extern void xexit (int); 280 281 /* For convenience. */ 282 #define STREQ(s1,s2) (strcmp (s1, s2) == 0) 283 #define STRCASEEQ(s1,s2) (strcasecmp (s1, s2) == 0) 284 #define STRNCASEEQ(s1,s2,n) (strncasecmp (s1, s2, n) == 0) 285 286 /* We don't need anything fancy. If we did need something fancy, gnulib 287 has it. */ 288 #ifdef MIN 289 #undef MIN 290 #endif 291 #define MIN(a,b) ((a) < (b) ? (a) : (b)) 292 #ifdef MAX 293 #undef MAX 294 #endif 295 #define MAX(a,b) ((a) > (b) ? (a) : (b)) 296 297 #endif /* TEXINFO_SYSTEM_H */ 298