1/* system description header for VMS 2 Copyright (C) 1986, 2001, 2002, 2003, 2004, 2005, 3 2006, 2007 Free Software Foundation, Inc. 4 5This file is part of GNU Emacs. 6 7GNU Emacs is free software; you can redistribute it and/or modify 8it under the terms of the GNU General Public License as published by 9the Free Software Foundation; either version 2, or (at your option) 10any later version. 11 12GNU Emacs is distributed in the hope that it will be useful, 13but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15GNU General Public License for more details. 16 17You should have received a copy of the GNU General Public License 18along with GNU Emacs; see the file COPYING. If not, write to 19the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20Boston, MA 02110-1301, USA. */ 21 22/* 23 * Define symbols to identify the version of Unix this is. 24 * Define all the symbols that apply correctly. 25 */ 26 27#ifndef VMS /* Decus cpp doesn't define this but VAX C does */ 28#define VMS 29#endif /* VMS */ 30/* Note that this file is used indirectly via vms4-0.h, or some other 31 such file. These other files define a symbol VMS4_0, VMS4_2, etc. */ 32 33/* SYSTEM_TYPE should indicate the kind of system you are using. 34 It sets the Lisp variable system-type. */ 35 36#define SYSTEM_TYPE "vax-vms" 37 38/* NOMULTIPLEJOBS should be defined if your system's shell 39 does not have "job control" (the ability to stop a program, 40 run some other program, then continue the first one). */ 41 42/* #define NOMULTIPLEJOBS */ 43 44/* INTERRUPT_INPUT controls a default for Unix systems. 45 VMS uses a separate mechanism. */ 46 47/* #define INTERRUPT_INPUT */ 48 49/* Letter to use in finding device name of first pty, 50 if system supports pty's. 'a' means it is /dev/ptya0 */ 51 52#define FIRST_PTY_LETTER 'a' 53 54/* 55 * Define HAVE_PTYS if the system supports pty devices. 56 */ 57 58/* #define HAVE_PTYS */ 59 60/* Define HAVE_SOCKETS if system supports 4.2-compatible sockets. */ 61 62/* #define HAVE_SOCKETS */ 63 64/* 65 * Define NONSYSTEM_DIR_LIBRARY to make Emacs emulate 66 * The 4.2 opendir, etc., library functions. 67 */ 68 69#define NONSYSTEM_DIR_LIBRARY 70 71/* Define this symbol if your system has the functions bcopy, etc. */ 72 73/* #define BSTRING */ 74 75/* subprocesses should be defined if you want to 76 have code for asynchronous subprocesses 77 (as used in M-x compile and M-x shell). 78 This is generally OS dependent, and not supported 79 under most USG systems. */ 80 81#define subprocesses 82 83/* If your system uses COFF (Common Object File Format) then define the 84 preprocessor symbol "COFF". */ 85 86/* #define COFF */ 87 88/* define MAIL_USE_FLOCK if the mailer uses flock 89 to interlock access to /usr/spool/mail/$USER. 90 The alternative is that a lock file named 91 /usr/spool/mail/$USER.lock. */ 92 93/* #define MAIL_USE_FLOCK */ 94 95/* Define CLASH_DETECTION if you want lock files to be written 96 so that Emacs can tell instantly when you try to modify 97 a file that someone else has modified in his Emacs. */ 98 99/* #define CLASH_DETECTION */ 100 101/* Define the maximum record length for print strings, if needed. */ 102 103#define MAX_PRINT_CHARS 300 104 105 106/* Here, on a separate page, add any special hacks needed 107 to make Emacs work on this system. For example, 108 you might define certain system call names that don't 109 exist on your system, or that do different things on 110 your system and must be used only through an encapsulation 111 (Which you should place, by convention, in sysdep.c). */ 112 113/* In olden days, VMS filenames did not support hyphen (i.e., the "-" 114 character). You can #undef this in vmsX-Y.h for newer versions. */ 115 116#define NO_HYPHENS_IN_FILENAMES 117 118/* Do you have the sharable library bug? If you link with a sharable 119 library that contains psects with the NOSHR attribute and also refer to 120 those psects in your program, the linker give you a private version of 121 the psect which is not related to the version used by the sharable 122 library. The end result is that your references to variables in that 123 psect have absolutely nothing to do with library references to what is 124 supposed to be the same variable. If you intend to link with the standard 125 C library (NOT the sharable one) you don't need to define this. (This 126 is NOT fixed in V4.4...) */ 127 128#define SHARABLE_LIB_BUG 129 130/* Partially due to the above mentioned bug and also so that we don't need 131 to require that people have a sharable C library, the default for Emacs 132 is to link with the non-shared library. If you want to link with the 133 shared library, define this and remake xmakefile and fileio.c. This allows 134 us to ship a guaranteed executable image. */ 135 136#define LINK_CRTL_SHARE 137 138/* Define this if you want to read the file SYS$SYSTEM:SYSUAF.DAT for user 139 information. If you do use this, you must either make SYSUAF.DAT world 140 readable or install Emacs with SYSPRV. */ 141 142/* #define READ_SYSUAF */ 143 144/* Traditionally, filenames on VMS are always upper case. */ 145 146#define FILE_SYSTEM_CASE Fupcase 147 148/* On VMS these have a different name */ 149 150#define index strchr 151#define rindex strrchr 152#define unlink delete 153 154#ifndef _GNUC_ 155extern double mth$dmod(double, double); 156#define drem mth$dmod 157#endif 158 159/* Some time routines are missing in the VAX C RTL, or needs some 160 extra bit of code */ 161#define tzset sys_tzset 162#define localtime sys_localtime 163#define gmtime sys_gmtime 164 165/* On later versions of VMS these exist in the C run time library, but 166 we are using our own implementations. Hide their names to avoid 167 linker errors */ 168#define rename sys_rename 169#define execvp sys_execvp 170#define system sys_system 171 172#ifndef GNU_MALLOC 173/* Hide these names so that we don't get linker errors */ 174#define malloc sys_malloc 175#define free sys_free 176#define realloc sys_realloc 177#define calloc sys_calloc 178 179/* Don't use the standard brk and sbrk */ 180#define sbrk sys_sbrk 181#define brk sys_brk 182#endif 183 184/* On VMS we want to avoid reading and writing very large amounts of 185 data at once, so we redefine read and write here. */ 186 187#define read sys_read 188#define write sys_write 189 190/* sys_creat just calls the real creat with additional args of 191 "rfm=var", "rat=cr" to get "normal" VMS files... */ 192#define creat sys_creat 193 194/* fwrite forces an RMS PUT on every call. This is abysmally slow, so 195 we emulate fwrite with fputc, which forces buffering and is much 196 faster! */ 197#define fwrite sys_fwrite 198 199/* getuid only returns the member number, which is not unique on most VMS 200 systems. We emulate it with (getgid()<<16 | getuid()). */ 201#define getuid sys_getuid 202 203/* If user asks for TERM, check first for EMACS_TERM. */ 204#define getenv sys_getenv 205 206/* Standard C abort is less useful than it should be. */ 207#define abort sys_abort 208 209/* Case conflicts with C library fread. */ 210#define Fread F_read 211 212/* Case conflicts with C library srandom. */ 213#define Srandom S_random 214 215/* variable length too long... maybe */ 216#if 0 217#define do_line_insertion_deletion_costs do_line_insertion_deletion_cost 218#endif 219 220/* Cause initialization of vmsfns.c to be run. */ 221#define SYMS_SYSTEM syms_of_vmsfns () 222 223/* VAXCRTL access doesn't deal with SYSPRV very well (among other oddities...) 224 Here, we use $CHKPRO to really determine access. */ 225#define access sys_access 226 227#define PAGESIZE 512 228 229#define _longjmp longjmp 230#define _setjmp setjmp 231 232globalref char sdata[]; 233#define DATA_START (((int) sdata + 511) & ~511) 234#define TEXT_START 512 235 236/* Baud-rate values from tty status are not standard. */ 237 238#define BAUD_CONVERT \ 239{ 0, 50, 75, 110, 134, 150, 300, 600, 1200, 1800, \ 240 2000, 2400, 3600, 4800, 7200, 9600, 19200 } 241 242#define PURESIZE 330000 243 244/* Stdio FILE type has extra indirect on VMS, so must alter this macro. */ 245 246#define PENDING_OUTPUT_COUNT(FILE) ((*(FILE))->_ptr - (*(FILE))->_base) 247 248#define NULL_DEVICE "NLA0:" 249 250#define TERMCAP_NAME "emacs_library:[etc]termcap.dat" 251 252#define EXEC_SUFFIXES ".exe:.com" 253 254/* Case conflict with Xlib XFree () */ 255#define xfree emacs_xfree 256 257/* What separator do we use in paths? */ 258#define SEPCHAR ',' 259 260/* arch-tag: 76bc2b70-46d1-4334-8f12-955c0d0ca6d4 261 (do not change this comment) */ 262