                                DVIPS & GNU C

Changes that had to be made in order to compile the DVIPS program with the GNU
CC (GCC) compiler on Vax/VMS. 

(1) DVIPS.C
(a) Problem with 'include' files. The person who did the original port to VMS
used the :
#include filename
notation rather than the more traditional
#include "filename.h"
notation.  With the VAX C compiler this means that the chosen header file is
extracted from the SYS$SHARE:VAXCDEF.TLB text library. Well, the GCC compiler
doesn't understand this notation. Now, I could've simply changed it so that if
the code was being compiled on a VMS machine then use the 
#include "filename.h"
notation regardless of the compiler. But some sites may not have extracted the
header files from the text library when the VAX C compiler was installed.
This problem also affects the VMSCLI.C file on the [.VMS] directory.

(b) The TFMPATH, PKPATH, etc.., definitions cannot be defined in the MAKEFILE
because the GCC.EXE program complains with the following error message...
% gcc-cpp command too long.  Unable to compile.

After removing some of the path definitions to shorten the command (just too
see roughly how big the buffer was) I eventually tricked the GCC.EXE program
into getting as far as executing the GNU_CC:[000000]GCC.COM command file but
it then complained, giving the following message...
%DCL-W-TKNOVF, command element is too long - shorten
So, I gave up and took the easy way out, i.e. put these PATH definitions back
in to a new GCC-specific PATHS.H, called VMS_GCC_PATHS.H

(2) DOSPECIAL.C
The "tolower" macro, defined in GNU_CC:[INCLUDE]CTYPE.H, is too simple. It
doesn't check to see if the character is in the range 'A' to 'Z' therefore
we may as well use the "Tolower" function supplied in the DOSPECIAL.C file.

(3) The MAKEFILE has been updated to handle the GCC compiler. It must be edited
by the user to select either the VAX11C or the GCC compiler. Search for the
strings VAXC or GNUC and comment out the appropriate lines.

(4) VMS.H
The "getchar" macro is undefined if it already exists. This is just to stop the
warning message from the GCC compiler informing us that it is being redefined.
GNUC defines it in GNU_CC:[INCLUDE]STDIO.H

(5) VAXVMS.C
Defined all the functions at the top of the file to keep the GCC compiler
quiet, since it reported the following problems...

vaxvms.c;1: In function vms_ftell:
vaxvms.c;1:223: warning: `vms_ftell' was previously implicitly declared to return `int'
vaxvms.c;1: In function vms_ungetc:
vaxvms.c;1:296: warning: `vms_ungetc' was previously implicitly declared to return `int'
vaxvms.c;1: In function vms_getenv:

Next, if using the GNU CC compiler then #include <stdlib.h> so that the
compiler knows all about the `strchr' and `getenv' functions, hence avoiding
the following warnings...

vaxvms.c;1:331: warning: assignment of pointer from integer lacks a cast
vaxvms.c;1:333: warning: assignment of pointer from integer lacks a cast
vaxvms.c;1:336: warning: assignment of pointer from integer lacks a cast
vaxvms.c;1:340: warning: assignment of pointer from integer lacks a cast

-------------------------------------------------------------------------------
These changes were tested with GCC 1.42 which is the  current official release
of VMS GCC, available from any of the many GNU archive sites. These changes
were also tested with GCC 2.3.3 which is avaliable from MANGO.RSMAS.MIAMI.EDU
(pub/VMS-gcc). The problem to be aware of is that GNUC doesn't have a
CLIMSGDEF.H header file (needed for DVIPS.C). One way out it to create one by
hand from the output from ...
$ LIBRARY/MACRO/EXTRACT=$CLIMSGDEF/OUTPUT=SYS$OUTPUT SYS$LIBRARY:STARLET.MLB
The other solution is to use the more complete package of C header files
provided by Pat Rankin, also available at MANGO.RSMAS.MIAMI.EDU
