/* vms.cfg: Configuration file for sgmls on VAX/VMS.
/* For VAX/VMS V5.3-1 and VAX C V3.2-044.
Contributed by John Lavagnino <LAV@BINAH.CC.BRANDEIS.EDU>. */

/*   FILE_SEP variables set to comma rather than colon: colon can appear
   in a filename, and comma is the usual thing on VMS to separate
   directories in a pathlist. */

/* A list of filename templates to use for searching for external
   entities. */
#define DEFAULT_PATH "sgml_public:[%O.%C]%T,%N.%X,%N.%D"
/* The character that separates the filename templates. */
#define PATH_FILE_SEP ','
/* The character that separates filenames in a system identifier.
Usually the same as PATH_FILE_SEP. */
#define SYSID_FILE_SEP ','
/* The environment variable that contains the list of filename templates. */
#define PATH_ENV_VAR "SGML_PATH"
/* A macro that returns non-zero if the filename is relative to the
   current directory. */
#define FILE_IS_RELATIVE(p) \
  (strchr((p), ':') == 0 && ((p)[0] == '[' ? (p)[1] == '.' : 1))
/* A string containing the characters that can separate the directory
   part of a filename from the basename. */
#define DIR_BASE_SEP "]:"
/* The environment variable that contains the list of catalog entry files.
   Filenames are separated by PATH_FILE_SEP. */
#define CATALOG_FILES_ENV_VAR "SGML_CATALOG_FILES"
/* Default list of catalog entry files. */
#define DEFAULT_CATALOG_FILES "CATALOG,sgml_public:CATALOG"

/* MIN_DAT_SUBS_FROM and MIN_DATS_SUBS_TO tell sgmls how to transform a name
or system identifier into a legal filename.  A character in
MIN_DAT_SUBS_FROM will be transformed into the character in the
corresponding position in MIN_DAT_SUBS_TO.  If there is no such
position, then the character is removed. */
/*  In MIN_DAT_SUBS for VMS we map slashes to dashes, since % is not a legal
   VMS filename character.  We also add all the other "special minimum
   data characters" that pose a problem for VMS in file-names; this
   covers all the characters that are part of the abstract syntax.
   (See Goldfarb, SGML Handbook, 345.)  Unfortunately there's not much
   of anything to map these to. */
#define MIN_DAT_SUBS_FROM " '()+,./:=?"
#define MIN_DAT_SUBS_TO   "_----__-_--"

/* Define this to allow tracing. */
/* #define TRACE 1 */

/* Define this if you want support for subdocuments.  This is implemented
using features that are not part of Standard C. */
/* Turned off on VMS: the unixproc.c and portproc.c approaches both
  sort of work, but there are problems getting the output of the
  subprocess to go the same place as the main process output. */
/* #define SUPPORT_SUBDOC 1 */

/* Define HAVE_EXTENDED_PRINTF if your *printf functions supports
X/Open extensions; if they do, then, for example,

  printf("%2$s%1$s", "bar", "foo")

should print `foobar'.  */

/* #define HAVE_EXTENDED_PRINTF 1 */

/* Define HAVE_CAT if your system provides the X/Open message
catalogue functions catopen() and catgets(), and you want to use them.
An implementations of these functions is included and will be used if
you don't define this.  On SunOS 4.1.1, if you do define this you
should set CC=/usr/xpg2bin/cc in the makefile. */

/* #define HAVE_CAT 1 */

/*  For the purposes to which it's put in the code, it's reasonable
   to define the symbol that claims this is standard C, though
   this version of VMS C isn't in fact conformant.  (It's actually
   forbidden to manipulate this symbol in true ANSI C.) */
#ifndef __STDC__
#define __STDC__ 1
#endif

#ifdef __STDC__
/* Define this if your compiler supports prototypes. */
#define USE_PROTOTYPES 1
#endif

/* Can't use <stdarg.h> without prototypes. */
#ifndef USE_PROTOTYPES
#define VARARGS 1
#endif

/* If your compiler defines __STDC__ but doesn't provide <stdarg.h>,
you must define VARARGS yourself here. */
/* #define VARARGS 1 */

/* Define this if you do not have strerror(). */
/* VMS C V3.2-044 does have strerror(), but it doesn't stick to the
   standard: for some inputs it can return a NULL pointer, which
   is not supposed to happen and is therefore not something the
   code protects itself against. So the replacement strerror() is
   used instead. */
/* ??? Except that doesn't work because of course it's in libraries... */
/* #define STRERROR_MISSING 1 */

/* Define this unless the character testing functions in ctype.h
are defined for all values representable as an unsigned char.  You do
not need to define this if your system is ANSI C conformant.  You
should define for old Unix systems. */
/*  This has been defined for VMS because its iscntrl says that
  128 through 159 are controls; SHUNCHAR CONTROLS believes that, and you
  can get messages like
    "Non-significant shunned character number 158 not declared UNUSED"
  as a result: that's what happens with the grplvl.sgm test.  (See
  sgmldecl.c for the use of iscntrl that leads to this, and Goldfarb
  page 455 for the rule that's being followed.)  With this
  symbol defined, the VMS version of isascii is used together with
  iscntrl, and isascii is false for eight-bit characters.
    The setting here also affects the form of the output: without the
  isascii test the program is led to believe that some codes with the
  eighth bit set are OK to put in the output without translation,
  because with the eighth bit masked off they look like ordinary letters.
  That happened with output from the test02.sgm test file.  See
  lineout.c, uses of isprint, for the code that's involved here. */
#define USE_ISASCII 1

/* Define this if your system provides the BSD style string operations
rather than ANSI C ones (eg bcopy() rather than memcpy(), and index()
rather than strchr()). */
/* #define BSD_STRINGS 1 */

/* Define this if you have getopt(). */
/* #define HAVE_GETOPT 1 */

/* Define this if you have access(). */
/*  VMS has access(), but it's one of those half-implemented functions
   in the run-time library: it checks only UIC protection and not
   ACLs, in VAX C V3.2-044.  So it's better to use the replacement
   code provided in entgen.c that just tries to open the file. */
/* #define HAVE_ACCESS 1 */

/* Define this if you have <unistd.h>. */
/* #define HAVE_UNISTD_H 1 */

/* Define this if you have waitpid(). */
/* #define HAVE_WAITPID 1 */

/* Define this if your system is POSIX.1 (ISO 9945-1:1990) compliant. */
/* #define POSIX 1 */

/* Define this if you have the vfork() system call. */
#define HAVE_VFORK 1

/* Define this if you have <vfork.h>. */
/* #define HAVE_VFORK_H 1 */

/* Define this if you don't have <stdlib.h> */
/* #define STDLIB_H_MISSING 1 */

/* Define this if you don't have <stddef.h> */
/* #define STDDEF_H_MISSING 1 */

/* Define this if you don't have remove(); unlink() will be used instead. */
/* #define REMOVE_MISSING 1 */

/* Define this if you don't have raise(); kill() will be used instead. */
#define RAISE_MISSING 1

/* Define this if you don't have fsetpos() and fgetpos(). */
/* #define FPOS_MISSING 1 */

/* Universal pointer type. */
/* If your compiler doesn't fully support void *, change `void' to `char'. */
typedef void *UNIV;

/* If your compiler doesn't support void as a function return type,
change `void' to `int'. */
/* typedef int VOID; */
/*  VAX C V3.2-04 has problems with typedef void VOID.
   But the #define seems to work. */
#define VOID void

/* If you don't have an ANSI C conformant <limits.h>, define
CHAR_SIGNED as 1 or 0 according to whether the `char' type is signed.
The <limits.h> on some versions of System Release V 3.2 is not ANSI C
conformant: the value of CHAR_MIN is 0 even though the `char' type is
signed. */

/* #define CHAR_SIGNED 1 */
/* #define CHAR_SIGNED 0 */
#ifndef CHAR_SIGNED
#include <limits.h>
#if CHAR_MIN < 0
#define CHAR_SIGNED 1
#else
#define CHAR_SIGNED 0
#endif
#endif /* not CHAR_SIGNED */

/* Assume the system character set is ISO Latin-1. */
#include "latin1.h"

/*  Stuff for use in main.c to remove VMS device, directory, extension,
   and version number from error messages.
    We don't need PROG_FOLD, which does upper-to-lower-case folding,
   because VMS does it already. */

#define PROG_PREFIX "]:"
#define PROG_STRIP_EXTENSION 1

/* Define VMS exit codes.
     stdlib.h is here because it defines its own EXIT_SUCCESS and
   EXIT_FAILURE, which are just 0 and 2; we want nice values that
   don't trigger VMS messages like
	%NONAME-E-NOMSG, Message number 00000002
     So we run stdlib.h here and then redefine these exit codes
   afterwards. */

#ifdef VMS
#  pragma nostandard
#  include stdlib
#  include ssdef
#  include stsdef
#  pragma standard
#  define EXIT_SUCCESS		SS$_NORMAL
#  define EXIT_FAILURE		(STS$K_SEVERE | STS$M_INHIB_MSG)
#endif

/* Odd VMS include file for process functions (system, execvp). */

#ifdef VMS
# ifdef SUPPORT_SUBDOC
#  pragma nostandard
#  include processes
#  pragma standard
# endif
#endif
