0
0
mirror of https://github.com/vim/vim.git synced 2025-10-23 08:44:20 -04:00

patch 9.1.1591: VMS support can be improved

Problem:  VMS support can be improved
Solution: Merge chagnes from Steven M. Schweda
          (Zoltan)

closes: #17810

Co-authored-by: Steven M. Schweda <sms@antinode.info>
Signed-off-by: Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Zoltan Arpadffy
2025-07-25 19:16:09 +02:00
committed by Christian Brabandt
parent af9a7a04f1
commit e9d1259111
10 changed files with 1199 additions and 613 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1694,6 +1694,7 @@ extern char_u *all_lflags;
# ifdef VMS # ifdef VMS
extern char_u *compiler_version; extern char_u *compiler_version;
extern char_u *compiled_arch; extern char_u *compiled_arch;
extern char_u *compiled_vers;
# endif # endif
extern char_u *compiled_user; extern char_u *compiled_user;
extern char_u *compiled_sys; extern char_u *compiled_sys;

View File

@@ -2096,7 +2096,19 @@ command_line_scan(mparm_T *parmp)
{ {
want_argument = FALSE; want_argument = FALSE;
c = argv[0][argv_idx++]; c = argv[0][argv_idx++];
#ifdef VMS #if defined( VMS)
/* 2025-05-13 SMS
* On sufficiently recent non-VAX systems, case preservation
* of the command line is possible/routine. And quotation
* always works, and is the expected method in such cases.
* However, leaving this slash-prefix scheme available is
* nearly harmless. But note that it doesn't help with the
* case of other command-line arguments, such as file names.
* For details, see os_vms.c:vms_init().
* On VAX and old non-VAX systems, or with SET PROC/PARSE=TRAD,
* DCL upcases the command line, and the C RTL downcases it.
* I would not say "only uses upper case command lines".
*/
/* /*
* VMS only uses upper case command lines. Interpret "-X" as "-x" * VMS only uses upper case command lines. Interpret "-X" as "-x"
* and "-/X" as "-X". * and "-/X" as "-X".
@@ -2106,9 +2118,12 @@ command_line_scan(mparm_T *parmp)
c = argv[0][argv_idx++]; c = argv[0][argv_idx++];
c = TOUPPER_ASC(c); c = TOUPPER_ASC(c);
} }
else /* Note that although DCL might upcase things, the C RTL
c = TOLOWER_ASC(c); * will only downcase them, so there should be no need for
#endif * the following (additional?) downcasing (which spoils the
* preserve-case results):
*/
#endif /* defined( VMS) */
switch (c) switch (c)
{ {
case NUL: // "vim -" read from stdin case NUL: // "vim -" read from stdin
@@ -3610,9 +3625,10 @@ usage(void)
break; break;
mch_msg(_("\n or:")); mch_msg(_("\n or:"));
} }
#ifdef VMS #if defined( VMS)
mch_msg(_("\nWhere case is ignored prepend / to make flag upper case")); mch_msg(_("\nWhere command is down-cased, prepend / (like: -/R) to treat flag as upper-case."));
#endif mch_msg(_("\nOr, where supported, SET PROC/PARSE=EXT, or else quote upper-case material."));
#endif /* defined( VMS) */
mch_msg(_("\n\nArguments:\n")); mch_msg(_("\n\nArguments:\n"));
main_msg(_("--\t\t\tOnly file names after this")); main_msg(_("--\t\t\tOnly file names after this"));

View File

@@ -725,28 +725,82 @@ vms_fixfilename(void *instring)
* Remove version number from file name * Remove version number from file name
* we need it in some special cases as: * we need it in some special cases as:
* creating swap file name and writing new file * creating swap file name and writing new file
*/
/*
* 2025-05-13 SMS.
* Using $PARSE would be simpler and more accurate, if all-VMS (not
* mixed UNIX+VMS) path were ensured. Meanwhile, to improve (imperfect)
* handling of extended name syntax:
* o All characters (up to five (32767)) after semi-colon (or last
* of multiple dots) must be numeric.
* o Caret-escaped semi-colon (^;) or dot (^.) does not delimit
* version.
* Whether it makes sense to detect syntax errors here is not entirely
* clear. Currently, many invalid version strings are not treated as
* version strings. (More could be.)
*/ */
void void
vms_remove_version(void * fname) vms_remove_version(void * fname)
{ {
char_u *cp; char_u *dp; // Dot pointer
char_u *fp; char_u *rp; // Right pointer
int done = 0;
int vdigits = 0;
if ((cp = vim_strchr( fname, ';')) != NULL) // remove version rp = (char_u *)fname+ strlen( (char *)fname)- 1; // Rightmost char
*cp = '\0'; while ((done == 0) && (rp > (char_u *)fname)) // Count digits
else if ((cp = vim_strrchr( fname, '.')) != NULL )
{ {
if ((fp = vim_strrchr( fname, ']')) != NULL ) if (isdigit( *rp))
{;} {
else if ((fp = vim_strrchr( fname, '>')) != NULL ) vdigits++;
{;} *rp--;
else
fp = fname;
while ( *fp != '\0' && fp < cp )
if ( *fp++ == '.' )
*cp = '\0';
} }
else
{
done = 1; // Quit at non-digit
}
} // while (Count digits)
if (vdigits <= 5) // If likely version digits, check delimiter
{ // (Could check for <= 32767, not just five digits or fewer.)
if (*rp == (char_u)';')
{
if ((rp >= (char_u *)fname) && (*(rp- 1) != (char_u)'^'))
{ // Unescaped ";"
*rp = '\0'; // Trim off ";nnn"
}
}
else if (*rp == (char_u)'.') // Last of multiple dots?
{
if ((rp >= (char_u *)fname) && (*(rp- 1) != '^'))
{ // Unescaped dot. Version requires previous one
dp = rp- 1; // Scan chars before "."
done = 0;
while ((done == 0) && (dp >= (char_u *)fname))
{
if ((*dp == ']') || (*dp == '>') || (*dp == ':') || (*dp == '/'))
{ // Possible VMS dev:[dir] delimiter (or UNIX "/")
if ((dp >= (char_u *)fname) && (*(dp- 1) != '^'))
{ // Unescaped dev:[dir] (or /) delimiter
done = 1; // No previous dot found in name
}
}
else if (*dp == '.')
{ // Possible dot delimiter
if ((dp >= (char_u *)fname) && (*(dp- 1) != '^'))
{ // Unescaped dot delimiter
done = 1; // Previous dot found in name
*rp = '\0'; // Trim off ".nnn"
}
}
dp--; // Next char to right
} // while
}
}
// Else no version found to remove
} // if (vdigits <= 5)
return ; return ;
} }
@@ -783,23 +837,29 @@ RealWaitForChar(
if (sec > 0) if (sec > 0)
{ {
// time-out specified; convert it to absolute time // time-out specified; convert it to absolute time
// sec>0 requirement of lib$cvtf_to_internal_time() // sec>0 requirement of lib$cvt[fs]_to_internal_time()
// get current time (number of 100ns ticks since the VMS Epoch) // get current time (number of 100ns ticks since the VMS Epoch)
status = sys$gettim(&time_curr); status = sys$gettim(&time_curr);
if (status != SS$_NORMAL) if (status != SS$_NORMAL)
return 0; // error return 0; // error
// construct the delta time // construct the delta time
#if __G_FLOAT==0
# ifndef VAX /* On all non-VAX hardware architectures, the "CC /FLOAT=option"
// IEEE is default on IA64, but can be used on Alpha too - but not on VAX * determines the floating-point format. The default format on Alpha
status = lib$cvts_to_internal_time( * is VAX; on IA64 and x86_64 it's IEEE. But, except on VAX, the user
* can specify either. What matters here is the actual floating-point
* format being used, not the hardware architecture. Choose the
* appropriate time conversion function accordingly.
*/
#if __IEEE_FLOAT
# define LIB_CVTX_TO_INTERNAL_TIME lib$cvts_to_internal_time // IEEE
#else
# define LIB_CVTX_TO_INTERNAL_TIME lib$cvtf_to_internal_time // VAX
#endif // __IEEE_FLOAT CVTS
status = LIB_CVTX_TO_INTERNAL_TIME(
&convert_operation, &sec, &time_diff); &convert_operation, &sec, &time_diff);
# endif
#else // default on Alpha and VAX
status = lib$cvtf_to_internal_time(
&convert_operation, &sec, &time_diff);
#endif
if (status != LIB$_NORMAL) if (status != LIB$_NORMAL)
return 0; // error return 0; // error
// add them up // add them up
@@ -851,3 +911,130 @@ RealWaitForChar(
} }
} }
} }
#if !defined( __VAX) && (__CRTL_VER >= 70301000)
#include <stdio.h>
#include <unixlib.h>
// Structure to hold a DECC$* feature name and its desired value
typedef struct
{
char *name;
int value;
} decc_feat_t;
int vms_init_done = -1;
decc_feat_t decc_feat_array[] = {
// Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED
{ "DECC$ARGV_PARSE_STYLE", 1 },
// Preserve case for file names on ODS5 disks
{ "DECC$EFS_CASE_PRESERVE", 1 },
// Enable multiple dots (and most characters) in ODS5 file names,
// while preserving VMS-ness of ";version"
{ "DECC$EFS_CHARSET", 1 },
// List terminator
{ (char *)NULL, 0 } };
/* LIB$INITIALIZE initialization.
*
* On sufficiently recent non-VAX systems, set a collection of C RTL
* features without using the DECC$* logical name method.
*
* Note: Old VAX VMS versions may suffer from a linker complaint like
* this:
*
* %LINK-W-MULPSC, conflicting attributes for psect LIB$INITIALIZE
* in module LIB$INITIALIZE file SYS$COMMON:[SYSLIB]STARLET.OLB;1
*
* Using a LINK options file which includes a line like this one should
* stop this complaint:
*
* PSECT_ATTR=LIB$INITIALIZE,NOPIC
*/
/* vms_init()
*
* Uses LIB$INITIALIZE to set a collection of C RTL features without
* requiring the user to define the corresponding logical names.
*
* LIB$INITIALIZE initialization function
*/
static void
vms_init(void)
{
// Set the global flag to indicate that LIB$INITIALIZE worked
vms_init_done = 1;
int feat_index;
int feat_value;
int feat_value_max;
int feat_value_min;
int i;
int sts;
// Loop through all items in the decc_feat_array[]
for (i = 0; decc_feat_array[i].name != NULL; i++)
{
// Get the feature index
feat_index = decc$feature_get_index(decc_feat_array[i].name);
if (feat_index >= 0)
{
// Valid item. Collect its properties
feat_value = decc$feature_get_value(feat_index, 1);
feat_value_min = decc$feature_get_value(feat_index, 2);
feat_value_max = decc$feature_get_value(feat_index, 3);
if ((decc_feat_array[i].value >= feat_value_min) && (decc_feat_array[i].value <= feat_value_max))
// Valid value. Set it if necessary
if (feat_value != decc_feat_array[i].value)
sts = decc$feature_set_value(feat_index, 1, decc_feat_array[i].value);
else
// Invalid DECC feature value
printf("INVALID DECC FEATURE VALUE, %d: %d <= %s <= %d.\n",
feat_value, feat_value_min, decc_feat_array[i].name, feat_value_max);
}
else
// Invalid DECC feature name
printf("UNKNOWN DECC FEATURE: %s.\n", decc_feat_array[i].name);
}
}
/* Get "vms_init()" into a valid, loaded LIB$INITIALIZE PSECT. */
#pragma nostandard
/* Establish the LIB$INITIALIZE PSECTs, with proper alignment and
* other attributes. Note that "nopic" is significant only on VAX.
*/
#pragma extern_model save
#pragma extern_model strict_refdef "LIB$INITIALIZE" 2, nopic, nowrt
void (*const x_vms_init)() = vms_init;
#pragma extern_model strict_refdef "LIB$INITIALIZ" 2, nopic, nowrt
const int spare[ 8] = { 0 };
#pragma extern_model restore
// Fake reference to ensure loading the LIB$INITIALIZE PSECT
#pragma extern_model save
int LIB$INITIALIZE(void);
#pragma extern_model strict_refdef
int dmy_lib$initialize = (int) LIB$INITIALIZE;
#pragma extern_model restore
#pragma standard
#endif // !defined( __VAX) && (__CRTL_VER >= 70301000)

View File

@@ -9,6 +9,8 @@
#endif #endif
#endif #endif
#include <decc$types.h> // Required early for large-file support
#define CASE_INSENSITIVE_FILENAME // Open VMS is case insensitive #define CASE_INSENSITIVE_FILENAME // Open VMS is case insensitive
#define SPACE_IN_FILENAME // There could be space between user and passwd #define SPACE_IN_FILENAME // There could be space between user and passwd
#define FNAME_ILLEGAL "|*#?%" // Illegal characters in a file name #define FNAME_ILLEGAL "|*#?%" // Illegal characters in a file name
@@ -146,6 +148,15 @@
#define FEAT_IPV6 #define FEAT_IPV6
#define FEAT_XTERM_SAVE #define FEAT_XTERM_SAVE
#define VIM_SIZEOF_INT 4
#define VIM_SIZEOF_LONG 4
#if __USE_OFF64_T
# define SIZEOF_OFF_T 8
#else
# define SIZEOF_OFF_T 4
#endif
// Hardware specific // Hardware specific
#if defined(__VAX) || defined(VAX) #if defined(__VAX) || defined(VAX)
#undef HAVE_GETTIMEOFDAY #undef HAVE_GETTIMEOFDAY
@@ -156,36 +167,31 @@
#undef HAVE_ISNAN #undef HAVE_ISNAN
#undef HAVE_XOS_R_H #undef HAVE_XOS_R_H
#define HAVE_NO_LONG_LONG #define HAVE_NO_LONG_LONG
#define VIM_SIZEOF_INT 4
#define VIM_SIZEOF_LONG 4
#define LONG_LONG_MIN (-2147483647-1) #define LONG_LONG_MIN (-2147483647-1)
#define LONG_LONG_MAX (2147483647) #define LONG_LONG_MAX (2147483647)
#define ULONG_LONG_MAX (4294967295U) #define ULONG_LONG_MAX (4294967295U)
#else // ALPHA, IA64, X86_64 #else // ALPHA, IA64, X86_64
#define HAVE_FSEEKO /* Use off_t. */
#define HAVE_GETTIMEOFDAY #define HAVE_GETTIMEOFDAY
#define HAVE_USLEEP #define HAVE_USLEEP
#define HAVE_STRCASECMP #define HAVE_STRCASECMP
#define HAVE_STRINGS_H #define HAVE_STRINGS_H
#define HAVE_SIGSETJMP #define HAVE_SIGSETJMP
#define HAVE_ISNAN
#undef HAVE_XOS_R_H #undef HAVE_XOS_R_H
#undef HAVE_NO_LONG_LONG #undef HAVE_NO_LONG_LONG
#define VIM_SIZEOF_INT 4
#define VIM_SIZEOF_LONG 8
#define LONG_LONG_MIN (-9223372036854775807-1) #define LONG_LONG_MIN (-9223372036854775807-1)
#define LONG_LONG_MAX (9223372036854775807) #define LONG_LONG_MAX (9223372036854775807)
#define ULONG_LONG_MAX (18446744073709551615U) #define ULONG_LONG_MAX (18446744073709551615U)
#if defined(__x86_64) || defined(__x86_64__) #if defined(__DECC) && (__CRTL_VER >= 80500000) && (__STDC_VERSION__ >= 199901L) /* C99 */
#if !defined(X86_64)
#define X86_64
#endif
#define HAVE_ISNAN
#define HAVE_ISINF #define HAVE_ISINF
#define HAVE_ISNAN
#endif
#define HAVE_XOS_R_H #define HAVE_XOS_R_H
#endif
#endif #endif /* VAX [else] */
// Compiler specific // Compiler specific
#if defined(VAXC) || defined(__VAXC) #if defined(VAXC) || defined(__VAXC)

12
src/po/vim.pot generated
View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-07-25 18:40+0200\n" "POT-Creation-Date: 2025-07-25 19:14+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1540,7 +1540,13 @@ msgstr ""
msgid "" msgid ""
"\n" "\n"
"Where case is ignored prepend / to make flag upper case" "Where command is down-cased, prepend / (like: -/R) to treat flag as upper-"
"case."
msgstr ""
msgid ""
"\n"
"Or, where supported, SET PROC/PARSE=EXT, or else quote upper-case material."
msgstr "" msgstr ""
msgid "" msgid ""
@@ -3386,7 +3392,7 @@ msgstr ""
msgid "" msgid ""
"\n" "\n"
"OpenVMS version" "OpenVMS (build) arch, version"
msgstr "" msgstr ""
msgid "" msgid ""

View File

@@ -719,6 +719,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1591,
/**/ /**/
1590, 1590,
/**/ /**/
@@ -4158,13 +4160,19 @@ list_version(void)
#endif #endif
#ifdef VMS #ifdef VMS
msg_puts(_("\nOpenVMS version")); msg_puts(_("\nOpenVMS (build) arch, version"));
# ifdef HAVE_PATHDEF # ifdef HAVE_PATHDEF
if (*compiled_arch != NUL) if (*compiled_arch != NUL)
{ {
msg_puts(" - "); msg_puts(": ");
msg_puts((char *)compiled_arch); msg_puts((char *)compiled_arch);
if (*compiled_vers != NUL)
{
msg_puts(", ");
msg_puts((char *)compiled_vers);
} }
}
# endif # endif
#endif #endif

View File

@@ -24,7 +24,11 @@
// ============ the header file puzzle: order matters ========= // ============ the header file puzzle: order matters =========
#ifdef HAVE_CONFIG_H // GNU autoconf (or something else) was here #ifdef HAVE_CONFIG_H // GNU autoconf (or something else) was here
# ifdef VMS
# include "config.h" /* Rely on /INCLUDE to find it. */
# else
# include "auto/config.h" # include "auto/config.h"
# endif /* def VMS [else] */
# define HAVE_PATHDEF # define HAVE_PATHDEF
/* /*

View File

@@ -25,7 +25,7 @@
// defines HAVE_ATTRIBUTE_UNUSED // defines HAVE_ATTRIBUTE_UNUSED
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
# ifdef VMS # ifdef VMS
# include "[.auto]config.h" # include "config.h"
# else # else
# include "../auto/config.h" # include "../auto/config.h"
# endif # endif

View File

@@ -1,7 +1,10 @@
# VMS MM[KS] makefile for XXD # VMS MM[KS] makefile for XXD
# tested with MMK and MMS as well. # tested with MMK and MMS as well.
# #
# Maintained by Zoltan Arpadffy <arpadffy@polarhome.com> # Maintained by Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
# 2025-05-24 Steven M. Schweda <sms@antinode.info>
#
######################################################################
# #
# Edit the lines in the Configuration section below to select. # Edit the lines in the Configuration section below to select.
# #
@@ -16,12 +19,6 @@
###################################################################### ######################################################################
# Configuration section. # Configuration section.
###################################################################### ######################################################################
# Compiler selection.
# Comment out if you use the VAXC compiler
######################################################################
# DECC = YES
#####################################################################
# Uncomment if want a debug version. Resulting executable is DVIM.EXE # Uncomment if want a debug version. Resulting executable is DVIM.EXE
###################################################################### ######################################################################
# DEBUG = YES # DEBUG = YES
@@ -32,41 +29,209 @@
# Please, do not change anything below without programming experience. # Please, do not change anything below without programming experience.
###################################################################### ######################################################################
CC = cc # Define old MMK architecture macros when using MMS.
#
######################################################################
# Architecture identification and product destination selection.
# Define old MMK architecture macros when using MMS.
#
.IFDEF MMS$ARCH_NAME # MMS$ARCH_NAME
ALPHA_X_ALPHA = 1
IA64_X_IA64 = 1
VAX_X_VAX = 1
X86_64_X_X86_64 = 1
.IFDEF ARCH # ARCH
ARCH_NAME = $(ARCH)
.ELSE # ARCH
ARCH_NAME = $(MMS$ARCH_NAME)
.ENDIF # ARCH
.IFDEF $(ARCH_NAME)_X_ALPHA # $(ARCH_NAME)_X_ALPHA
__ALPHA__ = 1
.ENDIF # $(ARCH_NAME)_X_ALPHA
.IFDEF $(ARCH_NAME)_X_IA64 # $(ARCH_NAME)_X_IA64
__IA64__ = 1
.ENDIF # $(ARCH_NAME)_X_IA64
.IFDEF $(ARCH_NAME)_X_VAX # $(ARCH_NAME)_X_VAX
__VAX__ = 1
.ENDIF # $(ARCH_NAME)_X_VAX
.IFDEF $(ARCH_NAME)_X_X86_64 # $(ARCH_NAME)_X_X86_64
__X86_64__ = 1
.ENDIF # $(ARCH_NAME)_X_X86_64
.ELSE # MMS$ARCH_NAME
.IFDEF __MMK__ # __MMK__
.IFDEF ARCH # ARCH
.IFDEF __$(ARCH)__ # __$(ARCH)__
.ELSE # __$(ARCH)__
__$(ARCH)__ = 1
.ENDIF # __$(ARCH)__
.ENDIF # ARCH
.ENDIF # __MMK__
.ENDIF # MMS$ARCH_NAME
#
# Combine command-line VAX C compiler macros.
#
.IFDEF VAXC # VAXC
VAXC_OR_FORCE_VAXC = 1
.ELSE # VAXC
.IFDEF FORCE_VAXC # FORCE_VAXC
VAXC_OR_FORCE_VAXC = 1
.ENDIF # FORCE_VAXC
.ENDIF # VAXC
#
# Analyze architecture-related and option macros.
# (Sense x86_64 before IA64 for old MMK and x86_64 cross tools.)
#
.IFDEF __X86_64__ # __X86_64__
DECC = 1
DESTM = X86_64
.ELSE # __X86_64__
.IFDEF __IA64__ # __IA64__
DECC = 1
DESTM = IA64
.ELSE # __IA64__
.IFDEF __ALPHA__ # __ALPHA__
DECC = 1
DESTM = ALPHA
.ELSE # __ALPHA__
.IFDEF __VAX__ # __VAX__
.IFDEF VAXC_OR_FORCE_VAXC # VAXC_OR_FORCE_VAXC
DESTM = VAXV
.ELSE # VAXC_OR_FORCE_VAXC
DECC = 1
DESTM = VAX
.ENDIF # VAXC_OR_FORCE_VAXC
.ELSE # __VAX__
DESTM = UNK
UNK_DEST = 1
.ENDIF # __VAX__
.ENDIF # __ALPHA__
.ENDIF # __IA64__
.ENDIF # __X86_64__
.IFDEF DECC .IFDEF PROD # PROD
CC_DEF = $(CC)/decc DEST = $(PROD)
.ELSE # PROD
DEST = $(DESTM)
.ENDIF # PROD
.FIRST
.IFDEF __MMK__ # __MMK__
@ write sys$output ""
.ENDIF # __MMK__
#
# Create destination directory.
@ write sys$output "Destination: [.$(DEST)]"
@ write sys$output ""
@ if (f$search( "$(DEST).DIR;1") .eqs. "") then -
create /directory [.$(DEST)]
#
# Compiler setup
# Optimization. The .c.obj rule will override this for specific modules
# where the VAX C compilers hang. See VAX_NOOPTIM_LIST, below.
OPTIMIZE= /optim
.IFDEF __VAX__ # __VAX__
# List of modules for which "Compaq C V6.4-005 on OpenVMS VAX V7.3"
# hangs. Add more as needed (plus-separated).
VAX_NOOPTIM_LIST = blowfish+regexp+sha256
# Compiler command.
# Default: CC /DECC. On non-VAX, or VAX with only DEC C installed,
# /DECC is harmless. If both DEC C and VAX C are installed, and VAX C
# was selected as the default, then /DECC must be specified explicitly.
# If both are installed, and DEC C is the default, but VAX C is desired,
# then define FORCE_VAXC to get VAX C (CC /VAXC). If only VAX C is
# installed, then define VAXC to get (plain) CC.
.IFDEF DECC # DECC
CC_DEF = cc /decc
PREFIX = /prefix=all PREFIX = /prefix=all
.ELSE # DECC
.IFDEF FORCE_VAXC # FORCE_VAXC
CC_DEF = cc /vaxc
.ELSE # FORCE_VAXC
CC_DEF = cc
.ENDIF # FORCE_VAXC
.ENDIF # DECC
.ELSE # __VAX__
# Not VAX, therefore DEC C (/PREFIX).
CC_DEF = cc /decc
PREFIX = /prefix=all
# These floating-point options are the defaults on IA64 and x86_64.
# This makes Alpha consistent.
FLOAT = /float = ieee_float /ieee_mode = denorm_results
# Large-file support. Unavailable on VAX and very old Alpha. To
# disable, define NOLARGE.
.IFDEF NOLARGE
.ELSE .ELSE
CC_DEF = $(CC) LARGE_DEF = , "_LARGEFILE"
PREFIX = .ENDIF # NOLARGE [ELSE]
.ENDIF .ENDIF # __VAX__ [ELSE]
.IFDEF VAXC_OR_FORCE_VAXC # VAXC_OR_FORCE_VAXC
.ELSE # VAXC_OR_FORCE_VAXC
CCVER = YES # Unreliable with VAX C.
.ENDIF # VAXC_OR_FORCE_VAXC [ELSE]
CDEFS = VMS $(LARGE_DEF)
DEFS = /define = ($(CDEFS))
.IFDEF LIST # LIST
LIST_OPT = /list=[.$(DEST)] /show=(all, nomessages)
.ENDIF # LIST
.IFDEF DEBUG # DEBUG
TARGET = [.$(DEST)]dxxd.exe
CFLAGS = /debug/noopt$(PREFIX) $(LIST_OPT) /cross_reference/include=[]
LDFLAGS = /debug
.ELSE # DEBUG
TARGET = [.$(DEST)]xxd.exe
CFLAGS = $(OPTIMIZE) $(PREFIX) $(LIST_OPT) /include=[]
LDFLAGS =
.ENDIF # DEBUG [ELSE]
CC = $(CC_DEF) $(CFLAGS)
LD_DEF = link LD_DEF = link
.IFDEF DEBUG
TARGET = dxxd.exe
CFLAGS = /debug/noopt$(PREFIX)/cross_reference/include=[]
LDFLAGS = /debug
.ELSE
TARGET = xxd.exe
CFLAGS = /opt$(PREFIX)/include=[]
LDFLAGS =
.ENDIF
.SUFFIXES : .obj .c .SUFFIXES : .obj .c
SOURCES = xxd.c SOURCES = xxd.c
OBJ = xxd.obj OBJ_BASE = xxd.obj
OBJ = [.$(DEST)]$(OBJ_BASE)
.c.obj : .c.obj :
$(CC_DEF) $(CFLAGS) $< $(CC) $(DEFS) $< /object = $@
$(TARGET) : $(OBJ) $(TARGET) : $(OBJ)
$(LD_DEF) $(LDFLAGS) /exe=$(TARGET) $+ -@ def_dev_dir_orig = f$environment( "default")
-@ target_name_type = -
f$parse( "$(TARGET)", , , "NAME", "SYNTAX_ONLY")+ -
f$parse( "$(TARGET)", , , "TYPE", "SYNTAX_ONLY")
-@ set default [.$(DEST)]
$(LD_DEF) $(LDFLAGS) /exe = 'target_name_type' $(OBJ_BASE)
-@ set default 'def_dev_dir_orig'
clean : clean :
-@ if "''F$SEARCH("*.obj")'" .NES. "" then delete/noconfirm/nolog *.obj;* -@ if (f$search( "[.$(DEST)]*.*") .nes. "") then -
-@ if "''F$SEARCH("*.exe")'" .NES. "" then delete/noconfirm/nolog *.exe;* delete /noconfirm [.$(DEST)]*.*;*
-@ if (f$search( "$(DEST).DIR") .nes. "") then -
set protection = w:d $(DEST).DIR;*
-@ if (f$search( "$(DEST).DIR") .nes. "") then -
delete /noconfirm $(DEST).DIR;*
xxd.obj : xxd.c help :
mcr sys$disk:$(TARGET) -h
version :
mcr sys$disk:$(TARGET) -v
[.$(DEST)]xxd.obj : xxd.c