From d2f05a0aade7c265d3c88fa8db62699c01f5e8d4 Mon Sep 17 00:00:00 2001 From: Klaus Kaempf Date: Sun, 1 Feb 1998 12:01:18 +0000 Subject: [PATCH] * cccp.c (main): Predefine __VMS_VER on VMS. From-SVN: r17578 --- gcc/ChangeLog | 4 ++++ gcc/cccp.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a9fa0c8d228..bdc6709da2c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Sun Feb 1 13:01:15 1998 Klaus Kaempf + + * cccp.c (main): Predefine __VMS_VER on VMS. + Sun Feb 1 12:39:53 1998 J"orn Rennecke * expr.c (get_inner_reference): Use sbitsizetype for type sizes. diff --git a/gcc/cccp.c b/gcc/cccp.c index 5df4901a00f..c394ea2ecc2 100644 --- a/gcc/cccp.c +++ b/gcc/cccp.c @@ -130,6 +130,8 @@ extern char *getenv (); /* VMS-specific definitions */ #ifdef VMS #include +#include +#include #define open(fname,mode,prot) VMS_open (fname,mode,prot) #define fopen(fname,mode) VMS_fopen (fname,mode) #define freopen(fname,mode,ofile) VMS_freopen (fname,mode,ofile) @@ -1732,6 +1734,63 @@ main (argc, argv) if (!inhibit_predefs) { char *p = (char *) alloca (strlen (predefs) + 1); + +#ifdef VMS + struct dsc$descriptor_s lcl_name; + struct item_list { + unsigned short length; /* input length */ + unsigned short code; /* item code */ + unsigned long dptr; /* data ptr */ + unsigned long lptr; /* output length ptr */ + }; + + unsigned long syi_length; + char syi_data[16]; + + struct item_list items[] = { + { 16, SYI$_VERSION, 0, 0 }, + { 0, 0, 0, 0 } + }; + + items[0].dptr = (unsigned long)syi_data; + items[0].lptr = (unsigned long)(&syi_length); + + if (SYS$GETSYIW (0, 0, 0, items, NULL, NULL, NULL, NULL) == SS$_NORMAL) + { + unsigned long vms_version_value; + char *vers; + + vers = syi_data; + vms_version_value = 0; + + if (*vers == 'V') + vers++; + if (isdigit (*vers)) + { + vms_version_value = (*vers - '0') * 10000000; + } + vers++; + if (*vers == '.') + { + vers++; + if (isdigit (*vers)) + { + vms_version_value += (*vers - '0') * 100000; + } + } + + if (vms_version_value > 0) + { + char versbuf[32]; + + sprintf (versbuf, "__VMS_VER=%08ld", vms_version_value); + if (debug_output) + output_line_directive (fp, &outbuf, 0, same_file); + make_definition (versbuf, &outbuf); + } + } +#endif + strcpy (p, predefs); while (*p) { char *q; -- 2.30.2