nonposix.h revision 104862
1/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
2     Written by Eli Zaretskii (eliz@is.elta.co.il)
3
4This file is part of groff.
5
6groff is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 2, or (at your option) any later
9version.
10
11groff is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License along
17with groff; see the file COPYING.  If not, write to the Free Software
18Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
19
20/* This header file compartmentalize all idiosyncrasies of non-Posix
21   systems, such as MS-DOS, MS-Windows, etc.  */
22
23#if defined _MSC_VER
24# ifndef _WIN32
25#  define _WIN32
26# endif
27#endif
28
29#if defined(__MSDOS__) \
30    || (defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN__))
31
32/* Binary I/O nuisances.  Note: "setmode" is right for DJGPP and
33   Borland; Windows compilers might need _setmode or some such.  */
34# include <fcntl.h>
35# include <io.h>
36# ifdef HAVE_UNISTD_H
37#  include <unistd.h>
38# endif
39# ifdef _MSC_VER
40#  define POPEN_RT     "rt"
41#  define POPEN_WT     "wt"
42#  define popen(c,m)   _popen(c,m)
43#  define pclose(p)    _pclose(p)
44#  define getpid()     (1)
45#  define mkdir(p,m)   _mkdir(p)
46#  define setmode(f,m) _setmode(f,m)
47#  define WAIT(s,p,m)  _cwait(s,p,m)
48#  define creat(p,m)   _creat(p,m)
49# endif
50# define SET_BINARY(f) do {if (!isatty(f)) setmode(f,O_BINARY);} while(0)
51# define FOPEN_RB      "rb"
52# define FOPEN_WB      "wb"
53# define FOPEN_RWB     "wb+"
54# ifndef O_BINARY
55#  ifdef _O_BINARY
56#   define O_BINARY    (_O_BINARY)
57#  endif
58# endif
59
60/* The system shell.  Groff assumes a Unixy shell, but non-Posix
61   systems don't have standard places where it lives, and might not
62   have it installed to begin with.  We want to give them some leeway.  */
63# define BSHELL        (system_shell_name())
64# define BSHELL_DASH_C (system_shell_dash_c())
65# define IS_BSHELL(s)  (is_system_shell(s))
66
67/* The separator for directories in PATH and other environment
68   variables.  */
69# define PATH_SEP      ";"
70
71/* Characters that separate directories in a path name.  */
72# define DIR_SEPS      "/\\:"
73
74/* How to tell if the argument is an absolute file name.  */
75# define IS_ABSOLUTE(f) \
76 ((f)[0] == '/' || (f)[0] == '\\' || (f)[0] && (f)[1] == ':')
77
78/* The executable extension.  */
79# define EXE_EXT       ".exe"
80
81/* The system null device.  */
82# define NULL_DEV      "NUL"
83
84/* Prototypes.  */
85# ifdef __cplusplus
86  extern "C" {
87# endif
88    const char * system_shell_name(void);
89    const char * system_shell_dash_c(void);
90    int          is_system_shell(const char *);
91# ifdef __cplusplus
92  }
93# endif
94
95#endif
96
97/* Defaults, for Posix systems.  */
98
99#ifndef FOPEN_RB
100# define FOPEN_RB      "r"
101#endif
102#ifndef FOPEN_WB
103# define FOPEN_WB      "w"
104#endif
105#ifndef FOPEN_RWB
106# define FOPEN_RWB     "w+"
107#endif
108#ifndef POPEN_RT
109# define POPEN_RT      "r"
110#endif
111#ifndef POPEN_WT
112# define POPEN_WT      "w"
113#endif
114#ifndef O_BINARY
115# define O_BINARY      0
116#endif
117#ifndef BSHELL
118# define BSHELL	       "/bin/sh"
119#endif
120#ifndef BSHELL_DASH_C
121# define BSHELL_DASH_C "-c"
122#endif
123#ifndef IS_BSHELL
124# define IS_BSHELL(s)  ((s) && strcmp(s,BSHELL) == 0)
125#endif
126#ifndef PATH_SEP
127# define PATH_SEP      ":"
128#endif
129#ifndef DIR_SEPS
130# define DIR_SEPS      "/"
131#endif
132#ifndef IS_ABSOLUTE
133# define IS_ABSOLUTE(f) ((f)[0] == '/')
134#endif
135#ifndef EXE_EXT
136# define EXE_EXT       ""
137#endif
138#ifndef NULL_DEV
139# define NULL_DEV      "/dev/null"
140#endif
141#ifndef GS_NAME
142# define GS_NAME       "gs"
143#endif
144#ifndef WAIT
145# define WAIT(s,p,m)   wait(s)
146#endif
147#ifndef _WAIT_CHILD
148# define _WAIT_CHILD   0
149#endif
150