mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.2.2294: VMS: a few remaining problems
Problem: VMS: a few remaining problems. Solution: Add VMS specific changes. Add Lua support. (Zoltan Arpadffy)
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
# Makefile for Vim on OpenVMS
|
||||
#
|
||||
# Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com>
|
||||
# Last change: 2020 Dec 30
|
||||
# Last change: 2021 Jan 04
|
||||
#
|
||||
# This script has been tested on VMS 6.2 to 8.4 on DEC Alpha, VAX and IA64
|
||||
# with MMS and MMK
|
||||
@@ -38,7 +38,7 @@ MODEL = HUGE
|
||||
# GUI or terminal mode executable.
|
||||
# Comment out if you want just the character terminal mode only.
|
||||
# GUI with Motif
|
||||
GUI = YES
|
||||
# GUI = YES
|
||||
|
||||
# GUI with GTK
|
||||
# If you have GTK installed you might want to enable this option.
|
||||
@@ -49,7 +49,7 @@ GUI = YES
|
||||
|
||||
# GUI/Motif with XPM
|
||||
# If you have XPM installed you might want to build Motif version with toolbar
|
||||
XPM = YES
|
||||
# XPM = YES
|
||||
|
||||
# Comment out if you want the compiler version with :ver command.
|
||||
# NOTE: This part can make some complications if you're using some
|
||||
@@ -68,6 +68,7 @@ CCVER = YES
|
||||
# VIM_PERL = YES
|
||||
# VIM_PYTHON = YES
|
||||
# VIM_RUBY = YES
|
||||
# VIM_LUA = YES
|
||||
|
||||
# X Input Method. For entering special languages like chinese and
|
||||
# Japanese.
|
||||
@@ -237,6 +238,15 @@ RUBY_LIB = ,OS_VMS_RUBY.OPT/OPT
|
||||
RUBY_INC =
|
||||
.ENDIF
|
||||
|
||||
.IFDEF VIM_LUA
|
||||
# LUA related setup.
|
||||
LUA_DEF = ,"FEAT_LUA"
|
||||
LUA_SRC = if_lua.c
|
||||
LUA_OBJ = if_lua.obj
|
||||
LUA_LIB = ,OS_VMS_LUA.OPT/OPT
|
||||
LUA_INC = ,LUA$ROOT:[INCLUDE]
|
||||
.ENDIF
|
||||
|
||||
.IFDEF VIM_XIM
|
||||
# XIM related setup.
|
||||
.IFDEF GUI
|
||||
@@ -275,7 +285,7 @@ VIMHOST = "''F$TRNLNM("SYS$NODE")'''F$TRNLNM("UCX$INET_HOST")'.''F$TRNLNM("UCX$I
|
||||
.SUFFIXES : .obj .c
|
||||
|
||||
ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
|
||||
$(TCL_DEF)$(RUBY_DEF)$(XIM_DEF)$(TAG_DEF)$(MZSCH_DEF) -
|
||||
$(TCL_DEF)$(RUBY_DEF)$(LUA_DEF)$(XIM_DEF)$(TAG_DEF)$(MZSCH_DEF) -
|
||||
$(ICONV_DEF)) -
|
||||
$(CFLAGS)$(GUI_FLAG) -
|
||||
/include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC)$(PERL_INC)$(PYTHON_INC) -
|
||||
@@ -286,14 +296,14 @@ ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
|
||||
# as $(GUI_INC) - replaced with $(GUI_INC_VER)
|
||||
# Otherwise should not be any other difference.
|
||||
ALL_CFLAGS_VER = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
|
||||
$(TCL_DEF)$(RUBY_DEF)$(XIM_DEF)$(TAG_DEF)$(MZSCH_DEF) -
|
||||
$(TCL_DEF)$(RUBY_DEF)$(LUA_DEF)$(XIM_DEF)$(TAG_DEF)$(MZSCH_DEF) -
|
||||
$(ICONV_DEF)) -
|
||||
$(CFLAGS)$(GUI_FLAG) -
|
||||
/include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC_VER)$(PERL_INC)$(PYTHON_INC) -
|
||||
$(TCL_INC)$(XDIFF_INC)$(XPM_INC))
|
||||
|
||||
ALL_LIBS = $(LIBS) $(GUI_LIB_DIR) $(GUI_LIB) $(XPM_LIB)\
|
||||
$(PERL_LIB) $(PYTHON_LIB) $(TCL_LIB) $(RUBY_LIB)
|
||||
$(PERL_LIB) $(PYTHON_LIB) $(TCL_LIB) $(RUBY_LIB) $(LUA_LIB)
|
||||
|
||||
SRC = \
|
||||
arabic.c \
|
||||
@@ -408,6 +418,7 @@ SRC = \
|
||||
$(PYTHON_SRC) \
|
||||
$(TCL_SRC) \
|
||||
$(RUBY_SRC) \
|
||||
$(LUA_SRC) \
|
||||
$(MZSCH_SRC) \
|
||||
$(XDIFF_SRC)
|
||||
|
||||
@@ -525,11 +536,12 @@ OBJ = \
|
||||
$(PYTHON_OBJ) \
|
||||
$(TCL_OBJ) \
|
||||
$(RUBY_OBJ) \
|
||||
$(LUA_OBJ) \
|
||||
$(MZSCH_OBJ) \
|
||||
$(XDIFF_OBJ)
|
||||
|
||||
# Default target is making the executable
|
||||
all : [.auto]config.h mmk_compat motif_env gtk_env perl_env python_env tcl_env ruby_env $(TARGET)
|
||||
all : [.auto]config.h mmk_compat motif_env gtk_env perl_env python_env tcl_env ruby_env lua_env $(TARGET)
|
||||
! $@
|
||||
|
||||
[.auto]config.h : $(CONFIG_H)
|
||||
@@ -709,6 +721,19 @@ ruby_env :
|
||||
-@ !
|
||||
.ENDIF
|
||||
|
||||
.IFDEF VIM_LUA
|
||||
lua_env :
|
||||
-@ write sys$output "using LUA environment:"
|
||||
-@ write sys$output " include path: ""$(LUA_INC)"""
|
||||
-@ write sys$output "creating OS_VMS_LUA.OPT file."
|
||||
-@ open/write opt_file OS_VMS_LUA.OPT
|
||||
-@ write opt_file "LUA$ROOT:[LIB]LUA$SHR.EXE /share"
|
||||
-@ close opt_file
|
||||
.ELSE
|
||||
lua_env :
|
||||
-@ !
|
||||
.ENDIF
|
||||
|
||||
arabic.obj : arabic.c vim.h
|
||||
arglist.obj : arglist.c vim.h [.auto]config.h feature.h os_unix.h
|
||||
autocmd.obj : autocmd.c vim.h [.auto]config.h feature.h os_unix.h
|
||||
@@ -1167,6 +1192,8 @@ if_ruby.obj : if_ruby.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
errors.h globals.h version.h
|
||||
if_lua.obj : if_lua.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
errors.h globals.h version.h
|
||||
beval.obj : beval.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h option.h ex_cmds.h proto.h \
|
||||
|
@@ -16,10 +16,13 @@
|
||||
#if defined(__TANDEM)
|
||||
# include <limits.h> // for SSIZE_MAX
|
||||
#endif
|
||||
#if defined(UNIX) && defined(FEAT_EVAL)
|
||||
#if (defined(UNIX) || defined(VMS)) && defined(FEAT_EVAL)
|
||||
# include <pwd.h>
|
||||
# include <grp.h>
|
||||
#endif
|
||||
#if defined(VMS) && defined(HAVE_XOS_R_H)
|
||||
# include <x11/xos_r.h>
|
||||
#endif
|
||||
|
||||
// Is there any system that doesn't have access()?
|
||||
#define USE_MCH_ACCESS
|
||||
@@ -338,7 +341,7 @@ readfile(
|
||||
|
||||
if (!read_stdin && !read_buffer && !read_fifo)
|
||||
{
|
||||
#ifdef UNIX
|
||||
#if defined(UNIX) || defined(VMS)
|
||||
/*
|
||||
* On Unix it is possible to read a directory, so we have to
|
||||
* check for it before the mch_open().
|
||||
@@ -4623,11 +4626,13 @@ create_readdirex_item(char_u *path, char_u *name)
|
||||
q = (char_u*)pw->pw_name;
|
||||
if (dict_add_string(item, "user", q) == FAIL)
|
||||
goto theend;
|
||||
# if !defined(VMS) || (defined(VMS) && defined(HAVE_XOS_R_H))
|
||||
gr = getgrgid(st.st_gid);
|
||||
if (gr == NULL)
|
||||
q = (char_u*)"";
|
||||
else
|
||||
q = (char_u*)gr->gr_name;
|
||||
# endif
|
||||
if (dict_add_string(item, "group", q) == FAIL)
|
||||
goto theend;
|
||||
}
|
||||
|
@@ -69,6 +69,20 @@
|
||||
_XmDrawHighlight(a, b, c, d, e, f, g, h, LineSolid)
|
||||
#endif
|
||||
|
||||
// Older VMS systems do not have xos_r.h and cannot haldle XtProcessLocking
|
||||
#if defined(VMS)
|
||||
# if defined(HAVE_XOS_R_H)
|
||||
# define XTPROCESS_LOCK XtProcessLock()
|
||||
# define XTPROCESS_UNLOCK XtProcessUnlock()
|
||||
# else
|
||||
# define XTPROCESS_LOCK
|
||||
# define XTPROCESS_UNLOCK
|
||||
# endif
|
||||
#else
|
||||
# define XTPROCESS_LOCK XtProcessLock()
|
||||
# define XTPROCESS_UNLOCK XtProcessUnlock()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Motif internals we have to cheat around with.
|
||||
*/
|
||||
@@ -714,9 +728,9 @@ draw_label(XmEnhancedButtonWidget eb, XEvent *event, Region region)
|
||||
{
|
||||
XtExposeProc expose;
|
||||
|
||||
XtProcessLock();
|
||||
XTPROCESS_LOCK;
|
||||
expose = xmLabelClassRec.core_class.expose;
|
||||
XtProcessUnlock();
|
||||
XTPROCESS_UNLOCK;
|
||||
(*expose)((Widget) eb, event, region);
|
||||
}
|
||||
|
||||
@@ -809,9 +823,9 @@ Enter(Widget wid,
|
||||
_XmPrimitiveEnter((Widget) eb, event, NULL, NULL);
|
||||
if (eb->pushbutton.armed == TRUE)
|
||||
{
|
||||
XtProcessLock();
|
||||
XTPROCESS_LOCK;
|
||||
expose = XtClass(eb)->core_class.expose;
|
||||
XtProcessUnlock();
|
||||
XTPROCESS_UNLOCK;
|
||||
(*expose) (wid, event, (Region) NULL);
|
||||
}
|
||||
|
||||
@@ -887,9 +901,9 @@ Leave(Widget wid,
|
||||
{
|
||||
XtExposeProc expose;
|
||||
eb->pushbutton.armed = FALSE;
|
||||
XtProcessLock();
|
||||
XTPROCESS_LOCK;
|
||||
expose = XtClass(eb)->core_class.expose;
|
||||
XtProcessUnlock();
|
||||
XTPROCESS_UNLOCK;
|
||||
(*expose) (wid, event, (Region)NULL);
|
||||
draw_unhighlight(eb);
|
||||
draw_pixmap(eb, event, NULL);
|
||||
@@ -973,9 +987,9 @@ set_size(XmEnhancedButtonWidget newtb)
|
||||
// Invoke Label's Resize procedure.
|
||||
{
|
||||
XtWidgetProc resize;
|
||||
XtProcessLock();
|
||||
XTPROCESS_LOCK;
|
||||
resize = xmLabelClassRec.core_class.resize;
|
||||
XtProcessUnlock();
|
||||
XTPROCESS_UNLOCK;
|
||||
|
||||
(* resize) ((Widget) newtb);
|
||||
}
|
||||
@@ -988,9 +1002,9 @@ Initialize(Widget rq, Widget ebw, ArgList args UNUSED, Cardinal *n UNUSED)
|
||||
XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget)ebw;
|
||||
XtWidgetProc resize;
|
||||
|
||||
XtProcessLock();
|
||||
XTPROCESS_LOCK;
|
||||
resize = xmLabelClassRec.core_class.resize;
|
||||
XtProcessUnlock();
|
||||
XTPROCESS_UNLOCK;
|
||||
|
||||
// Create a bitmap for stippling (Drawable resources are cheap).
|
||||
if (STIPPLE_BITMAP == None)
|
||||
|
@@ -161,7 +161,6 @@
|
||||
# define mch_fstat(n, p) fstat((n), (p))
|
||||
# undef HAVE_LSTAT // VMS does not have lstat()
|
||||
# define mch_stat(n, p) stat(vms_fixfilename(n), (p))
|
||||
# define mch_rmdir(n) rmdir(vms_fixfilename(n))
|
||||
#else
|
||||
# ifndef MSWIN
|
||||
# define mch_access(n, p) access((n), (p))
|
||||
|
@@ -73,8 +73,9 @@
|
||||
// always use unlink() to remove files
|
||||
#ifndef PROTO
|
||||
# ifdef VMS
|
||||
# define mch_remove(x) delete((char *)(x))
|
||||
# define vim_mkdir(x, y) mkdir((char *)(x), y)
|
||||
# define vim_mkdir(x, y) mkdir((char *)vms_fixfilename(x), y)
|
||||
# define mch_rmdir(x) delete((char *)vms_fixfilename(x))
|
||||
# define mch_remove(x) delete((char *)vms_fixfilename(x))
|
||||
# else
|
||||
# define vim_mkdir(x, y) mkdir((char *)(x), y)
|
||||
# define mch_rmdir(x) rmdir((char *)(x))
|
||||
|
13
src/os_vms.c
13
src/os_vms.c
@@ -672,10 +672,19 @@ vms_fixfilename(void *instring)
|
||||
else if (strchr(instring,'"') == NULL) // password in the path?
|
||||
{
|
||||
// Seems it is a regular file, let guess that it is pure Unix fspec
|
||||
if (decc$to_vms(instring, vms_fspec_proc, 0, 0) <= 0)
|
||||
// No... it must be mixed
|
||||
if ( (strchr(instring,'[') == NULL) && (strchr(instring,'<') == NULL) &&
|
||||
(strchr(instring,']') == NULL) && (strchr(instring,'>') == NULL) &&
|
||||
(strchr(instring,':') == NULL) )
|
||||
{
|
||||
// It must be a truly unix fspec
|
||||
decc$to_vms(instring, vms_fspec_proc, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// It is a mixed fspec
|
||||
vms_unix_mixed_filespec(instring, buf);
|
||||
}
|
||||
}
|
||||
else
|
||||
// we have a password in the path
|
||||
// decc$ functions can not handle
|
||||
|
@@ -147,7 +147,6 @@
|
||||
#undef HAVE_FCHDIR
|
||||
#undef HAVE_LSTAT
|
||||
#undef HAVE_STDINT_H
|
||||
#undef HAVE_XOS_R_H
|
||||
|
||||
// Hardware specific
|
||||
#ifdef VAX
|
||||
@@ -157,12 +156,12 @@
|
||||
#undef HAVE_STRINGS_H
|
||||
#undef HAVE_SIGSETJMP
|
||||
#undef HAVE_ISNAN
|
||||
#undef HAVE_XOS_R_H
|
||||
#define HAVE_NO_LONG_LONG
|
||||
#define VIM_SIZEOF_LONG 4
|
||||
#define LONG_LONG_MIN (-2147483647-1)
|
||||
#define LONG_LONG_MAX (2147483647)
|
||||
#define ULONG_LONG_MAX (4294967295U)
|
||||
#undef XTHREADS
|
||||
#else // AXP and IA64
|
||||
#define HAVE_GETTIMEOFDAY
|
||||
#define HAVE_USLEEP
|
||||
@@ -170,12 +169,12 @@
|
||||
#define HAVE_STRINGS_H
|
||||
#define HAVE_SIGSETJMP
|
||||
#define HAVE_ISNAN
|
||||
#define HAVE_XOS_R_H
|
||||
#define HAVE_NO_LONG_LONG
|
||||
#define VIM_SIZEOF_LONG 8
|
||||
#define LONG_LONG_MIN (-9223372036854775807-1)
|
||||
#define LONG_LONG_MAX (9223372036854775807)
|
||||
#define ULONG_LONG_MAX (18446744073709551615U)
|
||||
#define XTHREADS
|
||||
#endif
|
||||
|
||||
// Compiler specific
|
||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2294,
|
||||
/**/
|
||||
2293,
|
||||
/**/
|
||||
|
@@ -3389,7 +3389,7 @@ ex_disassemble(exarg_T *eap)
|
||||
break;
|
||||
case ISN_EXECCONCAT:
|
||||
smsg("%4d EXECCONCAT %lld", current,
|
||||
(long long)iptr->isn_arg.number);
|
||||
(varnumber_T)iptr->isn_arg.number);
|
||||
break;
|
||||
case ISN_ECHO:
|
||||
{
|
||||
@@ -3402,15 +3402,15 @@ ex_disassemble(exarg_T *eap)
|
||||
break;
|
||||
case ISN_EXECUTE:
|
||||
smsg("%4d EXECUTE %lld", current,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
break;
|
||||
case ISN_ECHOMSG:
|
||||
smsg("%4d ECHOMSG %lld", current,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
break;
|
||||
case ISN_ECHOERR:
|
||||
smsg("%4d ECHOERR %lld", current,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
break;
|
||||
case ISN_LOAD:
|
||||
case ISN_LOADOUTER:
|
||||
@@ -3419,11 +3419,11 @@ ex_disassemble(exarg_T *eap)
|
||||
|
||||
if (iptr->isn_arg.number < 0)
|
||||
smsg("%4d LOAD%s arg[%lld]", current, add,
|
||||
(long long)(iptr->isn_arg.number
|
||||
(varnumber_T)(iptr->isn_arg.number
|
||||
+ STACK_FRAME_SIZE));
|
||||
else
|
||||
smsg("%4d LOAD%s $%lld", current, add,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
}
|
||||
break;
|
||||
case ISN_LOADV:
|
||||
@@ -3496,10 +3496,10 @@ ex_disassemble(exarg_T *eap)
|
||||
|
||||
if (iptr->isn_arg.number < 0)
|
||||
smsg("%4d STORE%s arg[%lld]", current, add,
|
||||
(long long)(iptr->isn_arg.number + STACK_FRAME_SIZE));
|
||||
(varnumber_T)(iptr->isn_arg.number + STACK_FRAME_SIZE));
|
||||
else
|
||||
smsg("%4d STORE%s $%lld", current, add,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
}
|
||||
break;
|
||||
case ISN_STOREV:
|
||||
@@ -3578,7 +3578,7 @@ ex_disassemble(exarg_T *eap)
|
||||
// constants
|
||||
case ISN_PUSHNR:
|
||||
smsg("%4d PUSHNR %lld", current,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
break;
|
||||
case ISN_PUSHBOOL:
|
||||
case ISN_PUSHSPEC:
|
||||
@@ -3653,11 +3653,11 @@ ex_disassemble(exarg_T *eap)
|
||||
break;
|
||||
case ISN_NEWLIST:
|
||||
smsg("%4d NEWLIST size %lld", current,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
break;
|
||||
case ISN_NEWDICT:
|
||||
smsg("%4d NEWDICT size %lld", current,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
break;
|
||||
|
||||
// function call
|
||||
@@ -3924,10 +3924,10 @@ ex_disassemble(exarg_T *eap)
|
||||
smsg("%4d 2BOOL (!!val)", current);
|
||||
break;
|
||||
case ISN_2STRING: smsg("%4d 2STRING stack[%lld]", current,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
break;
|
||||
case ISN_2STRING_ANY: smsg("%4d 2STRING_ANY stack[%lld]", current,
|
||||
(long long)(iptr->isn_arg.number));
|
||||
(varnumber_T)(iptr->isn_arg.number));
|
||||
break;
|
||||
case ISN_RANGE: smsg("%4d RANGE %s", current, iptr->isn_arg.string);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user