summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Make_vms.mms61
-rw-r--r--src/fileio.c9
-rw-r--r--src/gui_xmebw.c34
-rw-r--r--src/macros.h1
-rw-r--r--src/os_unix.h5
-rw-r--r--src/os_vms.c13
-rw-r--r--src/os_vms_conf.h13
-rw-r--r--src/version.c2
-rw-r--r--src/vim9execute.c26
9 files changed, 110 insertions, 54 deletions
diff --git a/src/Make_vms.mms b/src/Make_vms.mms
index 70a87cfe2b..3631236360 100644
--- a/src/Make_vms.mms
+++ b/src/Make_vms.mms
@@ -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,18 +38,18 @@ 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.
# NOTE: you will need to properly define GTK_DIR below
-# NOTE: since Vim 7.3 GTK 2+ is used that is not ported to VMS,
-# therefore this option should not be used
+# NOTE: since Vim 7.3 GTK 2+ is used that is not ported to VMS,
+# therefore this option should not be used
# GTK = 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
@@ -59,7 +59,7 @@ CCVER = YES
# Uncomment if want a debug version. Resulting executable is DVIM.EXE
# Development purpose only! Normally, it should not be defined. !!!
-# DEBUG = YES
+# DEBUG = YES
# Languages support for Perl, Python, TCL etc.
# If you don't need it really, leave them behind the comment.
@@ -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.
@@ -180,7 +181,7 @@ XPM_INC = ,[.xpm.include]
XPM_LIB = ,OS_VMS_XPM.OPT/OPT
.ELSE
DEFS = "HAVE_CONFIG_H","FEAT_GUI_MOTIF"
-XPM_INC =
+XPM_INC =
.ENDIF
LIBS = ,OS_VMS_MOTIF.OPT/OPT
GUI_FLAG =
@@ -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
@@ -247,7 +257,7 @@ XIM_DEF = ,"FEAT_XIM"
.IFDEF VIM_MZSCHEME
# MZSCHEME related setup
MZSCH_DEF = ,"FEAT_MZSCHEME"
-MZSCH_SRC = if_mzsch.c
+MZSCH_SRC = if_mzsch.c
MZSCH_OBJ = if_mzsch.obj
.ENDIF
@@ -258,7 +268,7 @@ ICONV_DEF = ,"USE_ICONV"
# XDIFF related setup.
XDIFF_SRC = xdiffi.c,xemit.c,xprepare.c,xutils.c,xhistogram.c,xpatience.c
-XDIFF_OBJ = xdiffi.obj,xemit.obj,xprepare.obj,xutils.obj,xhistogram.obj,xpatience.obj
+XDIFF_OBJ = xdiffi.obj,xemit.obj,xprepare.obj,xutils.obj,xhistogram.obj,xpatience.obj
XDIFF_INC = ,[.xdiff]
######################################################################
@@ -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)
@@ -611,7 +623,7 @@ motif_env :
.ENDIF
.IFDEF MMSIA64
-@ write opt_file "[.xpm.vms.ia64]libxpm.olb/lib"
-.ENDIF
+.ENDIF
-@ close opt_file
.ELSE
-@ write sys$output "using DECW/Motif environment."
@@ -709,11 +721,24 @@ 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
blowfish.obj : blowfish.c vim.h [.auto]config.h feature.h os_unix.h
-blob.obj : blob.c vim.h [.auto]config.h feature.h os_unix.h
+blob.obj : blob.c vim.h [.auto]config.h feature.h os_unix.h
buffer.obj : buffer.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 \
@@ -873,7 +898,7 @@ if_xcmdsrv.obj : if_xcmdsrv.c vim.h [.auto]config.h feature.h os_unix.h \
if_mzsch.obj : if_mzsch.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h option.h structs.h \
regexp.h gui.h beval.h [.proto]gui_beval.pro ex_cmds.h proto.h \
- errors.h globals.h if_mzsch.h
+ errors.h globals.h if_mzsch.h
indent.obj : indent.c vim.h [.auto]config.h feature.h os_unix.h
insexpand.obj : insexpand.c vim.h [.auto]config.h feature.h os_unix.h
json.obj : json.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 \
@@ -1186,4 +1213,4 @@ xemit.obj : [.xdiff]xemit.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h o
xprepare.obj : [.xdiff]xprepare.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h
xutils.obj : [.xdiff]xutils.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h
xhistogram.obj : [.xdiff]xhistogram.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h
-xpatience.obj : [.xdiff]xpatience.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h
+xpatience.obj : [.xdiff]xpatience.c [.xdiff]xinclude.h [.auto]config.h vim.h feature.h os_unix.h
diff --git a/src/fileio.c b/src/fileio.c
index b3b7100d64..1af0b4c59f 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -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;
}
diff --git a/src/gui_xmebw.c b/src/gui_xmebw.c
index 6a01a71324..2c66db121b 100644
--- a/src/gui_xmebw.c
+++ b/src/gui_xmebw.c
@@ -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)
diff --git a/src/macros.h b/src/macros.h
index 366413a917..3db2456f3c 100644
--- a/src/macros.h
+++ b/src/macros.h
@@ -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))
diff --git a/src/os_unix.h b/src/os_unix.h
index 46f4bba012..83fe66d37f 100644
--- a/src/os_unix.h
+++ b/src/os_unix.h
@@ -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))
diff --git a/src/os_vms.c b/src/os_vms.c
index b8ad788987..6dc6ad4116 100644
--- a/src/os_vms.c
+++ b/src/os_vms.c
@@ -672,9 +672,18 @@ 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
diff --git a/src/os_vms_conf.h b/src/os_vms_conf.h
index deb7080607..df03b15047 100644
--- a/src/os_vms_conf.h
+++ b/src/os_vms_conf.h
@@ -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 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 LONG_LONG_MIN (-9223372036854775807-1)
+#define LONG_LONG_MAX (9223372036854775807)
#define ULONG_LONG_MAX (18446744073709551615U)
-#define XTHREADS
#endif
// Compiler specific
diff --git a/src/version.c b/src/version.c
index 258c7d9067..db20152a31 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2294,
+/**/
2293,
/**/
2292,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 5cfc327e8e..d0c2ebc706 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -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;