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:
committed by
Christian Brabandt
parent
af9a7a04f1
commit
e9d1259111
947
src/Make_vms.mms
947
src/Make_vms.mms
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||||
|
30
src/main.c
30
src/main.c
@@ -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"));
|
||||||
|
237
src/os_vms.c
237
src/os_vms.c
@@ -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)
|
||||||
|
@@ -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
12
src/po/vim.pot
generated
@@ -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 ""
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user