aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--CMakeLists.txt38
-rw-r--r--catalog/dump.c12
-rw-r--r--cl/cl.h3
-rw-r--r--cl/cl_read.c4
-rw-r--r--cl/extern.h31
-rw-r--r--common/common.h6
-rw-r--r--common/conv.h2
-rw-r--r--common/exf.c27
-rw-r--r--common/extern.h131
-rw-r--r--common/key.h6
-rw-r--r--common/options.h4
-rw-r--r--common/options_def.h84
-rw-r--r--common/recover.c12
-rw-r--r--ex/ex.c3
-rw-r--r--ex/ex_cscope.c14
-rw-r--r--ex/ex_def.h76
-rw-r--r--ex/extern.h131
-rw-r--r--ex/version.h1
-rw-r--r--man/vi.150
-rw-r--r--vi/extern.h145
-rw-r--r--vi/v_increment.c4
-rw-r--r--vi/vs_line.c2
23 files changed, 155 insertions, 636 deletions
diff --git a/.gitignore b/.gitignore
index aac7860d7299..2b79229e57e0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,8 @@ extern.h
version.h
tags
build/
+
+# Ignore files by the GNU Global source code tagging system.
+/GPATH
+/GRTAGS
+/GTAGS
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 996e0e72de99..66d3ca2aafb0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,20 +13,28 @@ project(nvi2 C)
include(CheckIncludeFiles)
include(CheckFunctionExists)
+include(CheckSymbolExists)
include(CheckStructHasMember)
include(CheckCSourceCompiles)
+include(CheckCCompilerFlag)
mark_as_advanced(CMAKE_INSTALL_PREFIX)
option(USE_WIDECHAR "Enable wide character support" ON)
option(USE_ICONV "Enable iconv support" ON)
-add_compile_options(-fcolor-diagnostics)
+check_c_compiler_flag(-fcolor-diagnostics USE_FCOLOR_DIAGNOSTICS)
+if(USE_FCOLOR_DIAGNOSTICS)
+ add_compile_options(-fcolor-diagnostics)
+endif()
+
add_compile_options($<$<CONFIG:Debug>:-Wall>)
add_compile_options($<$<CONFIG:Debug>:-Wno-parentheses>)
add_compile_options($<$<CONFIG:Debug>:-Wno-uninitialized>)
add_compile_options($<$<CONFIG:Debug>:-Wmissing-prototypes>)
-add_compile_options($<$<CONFIG:Debug>:-Wsystem-headers>)
+if (NOT APPLE)
+ add_compile_options($<$<CONFIG:Debug>:-Wsystem-headers>)
+endif()
add_compile_options($<$<CONFIG:Release>:-Wuninitialized>)
add_compile_options($<$<CONFIG:Release>:-Wno-dangling-else>)
add_compile_options(-Wstack-protector -fstack-protector)
@@ -126,6 +134,11 @@ if(NOT RESOLV_IN_LIBC)
target_link_libraries(nvi PRIVATE ${RESOLV_LIBRARY})
endif()
+check_symbol_exists(asprintf "stdio.h" ASPRINTF_IN_STDIO_H)
+if(NOT ASPRINTF_IN_STDIO_H)
+ target_compile_definitions(nvi PRIVATE _GNU_SOURCE)
+endif()
+
if(USE_WIDECHAR)
find_library(CURSES_LIBRARY NAMES ncursesw cursesw curses HINTS /usr/lib)
find_library(TERMINFO_LIBRARY NAMES tinfow terminfo HINTS /usr/lib)
@@ -142,7 +155,10 @@ else()
target_compile_options(nvi PRIVATE -Wno-pointer-sign)
endif()
-target_link_libraries(nvi PRIVATE ${CURSES_LIBRARY} ${TERMINFO_LIBRARY})
+target_link_libraries(nvi PRIVATE ${CURSES_LIBRARY})
+if(TERMINFO_LIBRARY)
+ target_link_libraries(nvi PRIVATE ${TERMINFO_LIBRARY})
+endif()
if(USE_ICONV)
check_function_exists(iconv ICONV_IN_LIBC)
@@ -189,6 +205,18 @@ check_function_exists(dbopen DBOPEN_IN_LIBC)
if(NOT DBOPEN_IN_LIBC)
target_link_libraries(nvi PRIVATE db1)
endif()
+if (APPLE)
+ # Avoid using an incompatible db.h installed to /usr/local (since this is
+ # part of the default search path on macOS)
+ set(DB_H_GUESS "${CMAKE_OSX_SYSROOT}/usr/include/db.h")
+ if (NOT EXISTS ${DB_H_GUESS})
+ message(FATAL_ERROR "Could not find db.h at the expected path (${DB_H_GUESS}).")
+ endif()
+ add_definitions("-DDB_H_ABS_PATH=<${DB_H_GUESS}>")
+else()
+ find_path(DB_INCLUDE_DIR db.h PATH_SUFFIXES db1)
+ target_include_directories(nvi PRIVATE ${DB_INCLUDE_DIR})
+endif()
check_include_files(libutil.h HAVE_LIBUTIL_H)
check_include_files(ncurses.h HAVE_NCURSES_H)
@@ -196,6 +224,10 @@ check_include_files(ncursesw/ncurses.h HAVE_NCURSESW_NCURSES_H)
check_include_files(pty.h HAVE_PTY_H)
check_include_files(term.h HAVE_TERM_H)
check_struct_has_member("struct dirent" d_namlen dirent.h HAVE_DIRENT_D_NAMLEN LANGUAGE C)
+check_struct_has_member("struct stat" st_mtimespec
+ "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIMESPEC LANGUAGE C)
+check_struct_has_member("struct stat" st_mtim
+ "sys/types.h;sys/stat.h" HAVE_STRUCT_STAT_ST_MTIM LANGUAGE C)
configure_file(files/config.h.in config.h)
diff --git a/catalog/dump.c b/catalog/dump.c
index 248f718d719b..ef893d647edf 100644
--- a/catalog/dump.c
+++ b/catalog/dump.c
@@ -35,24 +35,24 @@ parse(FILE *fp)
{
int ch, s1, s2, s3;
-#define TESTD(s) do { \
+#define TESTD(s) { \
if ((s = getc(fp)) == EOF) \
return; \
if (!isdigit(s)) \
continue; \
-} while (0)
-#define TESTP do { \
+}
+#define TESTP { \
if ((ch = getc(fp)) == EOF) \
return; \
if (ch != '|') \
continue; \
-} while (0)
-#define MOVEC(t) do { \
+}
+#define MOVEC(t) { \
do { \
if ((ch = getc(fp)) == EOF) \
return; \
} while (ch != (t)); \
-} while (0)
+}
for (;;) {
MOVEC('"');
TESTD(s1);
diff --git a/cl/cl.h b/cl/cl.h
index d230a55a56d7..a04c9e9f1b0d 100644
--- a/cl/cl.h
+++ b/cl/cl.h
@@ -7,9 +7,6 @@
* See the LICENSE file for redistribution information.
*/
-#ifdef USE_WIDECHAR
-#define _XOPEN_SOURCE_EXTENDED
-#endif
#ifdef HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif defined HAVE_NCURSES_H
diff --git a/cl/cl_read.c b/cl/cl_read.c
index ddf3acc1918c..8dc1d3cbebc9 100644
--- a/cl/cl_read.c
+++ b/cl/cl_read.c
@@ -317,10 +317,10 @@ cl_resize(SCR *sp, size_t lines, size_t columns)
argv[0] = &a;
argv[1] = &b;
- a.len = SPRINTF(b1, sizeof(b1), L("lines=%lu"), (u_long)lines);
+ a.len = SPRINTF(b1, SIZE(b1), L("lines=%lu"), (u_long)lines);
if (opts_set(sp, argv, NULL))
return (1);
- a.len = SPRINTF(b1, sizeof(b1), L("columns=%lu"), (u_long)columns);
+ a.len = SPRINTF(b1, SIZE(b1), L("columns=%lu"), (u_long)columns);
if (opts_set(sp, argv, NULL))
return (1);
return (0);
diff --git a/cl/extern.h b/cl/extern.h
deleted file mode 100644
index 7b01ccd3f8cf..000000000000
--- a/cl/extern.h
+++ /dev/null
@@ -1,31 +0,0 @@
-int cl_waddstr(SCR *, const CHAR_T *, size_t);
-int cl_addstr(SCR *, const char *, size_t);
-int cl_attr(SCR *, scr_attr_t, int);
-int cl_baud(SCR *, u_long *);
-int cl_bell(SCR *);
-int cl_clrtoeol(SCR *);
-int cl_cursor(SCR *, size_t *, size_t *);
-int cl_deleteln(SCR *);
-int cl_discard(SCR *, SCR **);
-int cl_ex_adjust(SCR *, exadj_t);
-int cl_insertln(SCR *);
-int cl_keyval(SCR *, scr_keyval_t, CHAR_T *, int *);
-int cl_move(SCR *, size_t, size_t);
-int cl_refresh(SCR *, int);
-int cl_rename(SCR *, char *, int);
-void cl_setname(GS *, char *);
-int cl_split(SCR *, SCR *);
-int cl_suspend(SCR *, int *);
-void cl_usage(void);
-int sig_init(GS *, SCR *);
-int cl_event(SCR *, EVENT *, u_int32_t, int);
-int cl_screen(SCR *, u_int32_t);
-int cl_quit(GS *);
-int cl_getcap(SCR *, char *, char **);
-int cl_term_init(SCR *);
-int cl_term_end(GS *);
-int cl_fmap(SCR *, seq_t, CHAR_T *, size_t, CHAR_T *, size_t);
-int cl_optchange(SCR *, int, char *, u_long *);
-int cl_omesg(SCR *, CL_PRIVATE *, int);
-int cl_ssize(SCR *, int, size_t *, size_t *, int *);
-int cl_putchar(int);
diff --git a/common/common.h b/common/common.h
index dc4155610225..45f22fb49d1b 100644
--- a/common/common.h
+++ b/common/common.h
@@ -11,10 +11,10 @@
#define TCSASOFT 0
#endif
-#ifdef __linux__
-#include "/usr/include/db1/db.h" /* Only include db1. */
+#ifdef DB_H_ABS_PATH
+#include DB_H_ABS_PATH
#else
-#include "/usr/include/db.h" /* Only include db1. */
+#include <db.h>
#endif
#include <regex.h> /* May refer to the bundled regex. */
diff --git a/common/conv.h b/common/conv.h
index ee3efb5a8308..4daa8221ff8f 100644
--- a/common/conv.h
+++ b/common/conv.h
@@ -28,7 +28,7 @@ typedef int iconv_t;
#define KEY_NEEDSWIDE(sp, ch) \
(INTISWIDE(ch) && KEY_LEN(sp, ch) <= 4)
#define KEY_COL(sp, ch) \
- (KEY_NEEDSWIDE(sp, ch) ? CHAR_WIDTH(sp, ch) : KEY_LEN(sp, ch))
+ (KEY_NEEDSWIDE(sp, ch) ? XCHAR_WIDTH(sp, ch) : KEY_LEN(sp, ch))
enum { IC_FE_CHAR2INT, IC_FE_INT2CHAR, IC_IE_CHAR2INT, IC_IE_TO_UTF16 };
diff --git a/common/exf.c b/common/exf.c
index f9eb2150276d..49e39c242648 100644
--- a/common/exf.c
+++ b/common/exf.c
@@ -199,7 +199,14 @@ file_init(SCR *sp, FREF *frp, char *rcv_name, int flags)
if (!LF_ISSET(FS_OPENERR))
F_SET(frp, FR_NEWFILE);
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+ ep->mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
ep->mtim = sb.st_mtim;
+#else
+ ep->mtim.tv_sec = sb.st_mtime;
+ ep->mtim.tv_nsec = 0;
+#endif
} else {
/*
* XXX
@@ -218,7 +225,14 @@ file_init(SCR *sp, FREF *frp, char *rcv_name, int flags)
ep->mdev = sb.st_dev;
ep->minode = sb.st_ino;
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+ ep->mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
ep->mtim = sb.st_mtim;
+#else
+ ep->mtim.tv_sec = sb.st_mtime;
+ ep->mtim.tv_nsec = 0;
+#endif
if (!S_ISREG(sb.st_mode))
msgq_str(sp, M_ERR, oname,
@@ -796,7 +810,13 @@ file_write(SCR *sp, MARK *fm, MARK *tm, char *name, int flags)
if (noname && !LF_ISSET(FS_FORCE | FS_APPEND) &&
((F_ISSET(ep, F_DEVSET) &&
(sb.st_dev != ep->mdev || sb.st_ino != ep->minode)) ||
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+ timespeccmp(&sb.st_mtimespec, &ep->mtim, !=))) {
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
timespeccmp(&sb.st_mtim, &ep->mtim, !=))) {
+#else
+ sb.st_mtime != ep->mtim.tv_sec)) {
+#endif
msgq_str(sp, M_ERR, name, LF_ISSET(FS_POSSIBLE) ?
"250|%s: file modified more recently than this copy; use ! to override" :
"251|%s: file modified more recently than this copy");
@@ -895,7 +915,14 @@ success_open:
ep->mdev = sb.st_dev;
ep->minode = sb.st_ino;
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+ ep->mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
ep->mtim = sb.st_mtim;
+#else
+ ep->mtim.tv_sec = sb.st_mtime;
+ ep->mtim.tv_nsec = 0;
+#endif
}
}
diff --git a/common/extern.h b/common/extern.h
deleted file mode 100644
index c887696080de..000000000000
--- a/common/extern.h
+++ /dev/null
@@ -1,131 +0,0 @@
-char * codeset(void);
-void conv_init(SCR *, SCR *);
-int conv_enc(SCR *, int, char *);
-void conv_end(SCR *);
-int cut(SCR *, CHAR_T *, MARK *, MARK *, int);
-int cut_line(SCR *, recno_t, size_t, size_t, CB *);
-void cut_close(GS *);
-TEXT *text_init(SCR *, const CHAR_T *, size_t, size_t);
-void text_lfree(TEXTH *);
-void text_free(TEXT *);
-int del(SCR *, MARK *, MARK *, int);
-int looks_utf8(const char *, size_t);
-int looks_utf16(const char *, size_t);
-int decode_utf8(const char *);
-int decode_utf16(const char *, int);
-FREF *file_add(SCR *, char *);
-int file_init(SCR *, FREF *, char *, int);
-int file_end(SCR *, EXF *, int);
-int file_write(SCR *, MARK *, MARK *, char *, int);
-int file_m1(SCR *, int, int);
-int file_m2(SCR *, int);
-int file_m3(SCR *, int);
-int file_aw(SCR *, int);
-void set_alt_name(SCR *, char *);
-lockr_t file_lock(SCR *, char *, int, int);
-int v_key_init(SCR *);
-void v_key_ilookup(SCR *);
-size_t v_key_len(SCR *, ARG_CHAR_T);
-char *v_key_name(SCR *, ARG_CHAR_T);
-e_key_t v_key_val(SCR *, ARG_CHAR_T);
-int v_event_push(SCR *, EVENT *, CHAR_T *, size_t, u_int);
-int v_event_get(SCR *, EVENT *, int, u_int32_t);
-void v_event_err(SCR *, EVENT *);
-int v_event_flush(SCR *, u_int);
-int db_eget(SCR *, recno_t, CHAR_T **, size_t *, int *);
-int db_get(SCR *, recno_t, u_int32_t, CHAR_T **, size_t *);
-int db_delete(SCR *, recno_t);
-int db_append(SCR *, int, recno_t, CHAR_T *, size_t);
-int db_insert(SCR *, recno_t, CHAR_T *, size_t);
-int db_set(SCR *, recno_t, CHAR_T *, size_t);
-int db_exist(SCR *, recno_t);
-int db_last(SCR *, recno_t *);
-int db_rget(SCR *, recno_t, char **, size_t *);
-int db_rset(SCR *, recno_t, char *, size_t);
-void db_err(SCR *, recno_t);
-int log_init(SCR *, EXF *);
-int log_end(SCR *, EXF *);
-int log_cursor(SCR *);
-int log_line(SCR *, recno_t, u_int);
-int log_mark(SCR *, LMARK *);
-int log_backward(SCR *, MARK *);
-int log_setline(SCR *);
-int log_forward(SCR *, MARK *);
-int editor(GS *, int, char *[]);
-void v_end(GS *);
-int mark_init(SCR *, EXF *);
-int mark_end(SCR *, EXF *);
-int mark_get(SCR *, ARG_CHAR_T, MARK *, mtype_t);
-int mark_set(SCR *, ARG_CHAR_T, MARK *, int);
-int mark_insdel(SCR *, lnop_t, recno_t);
-void msgq(SCR *, mtype_t, const char *, ...);
-void msgq_wstr(SCR *, mtype_t, const CHAR_T *, const char *);
-void msgq_str(SCR *, mtype_t, const char *, const char *);
-void mod_rpt(SCR *);
-void msgq_status(SCR *, recno_t, u_int);
-int msg_open(SCR *, char *);
-void msg_close(GS *);
-const char *msg_cmsg(SCR *, cmsg_t, size_t *);
-const char *msg_cat(SCR *, const char *, size_t *);
-char *msg_print(SCR *, const char *, int *);
-int opts_init(SCR *, int *);
-int opts_set(SCR *, ARGS *[], char *);
-int o_set(SCR *, int, u_int, char *, u_long);
-int opts_empty(SCR *, int, int);
-void opts_dump(SCR *, enum optdisp);
-int opts_save(SCR *, FILE *);
-OPTLIST const *opts_search(CHAR_T *);
-void opts_nomatch(SCR *, CHAR_T *);
-int opts_copy(SCR *, SCR *);
-void opts_free(SCR *);
-int f_altwerase(SCR *, OPTION *, char *, u_long *);
-int f_columns(SCR *, OPTION *, char *, u_long *);
-int f_lines(SCR *, OPTION *, char *, u_long *);
-int f_lisp(SCR *, OPTION *, char *, u_long *);
-int f_msgcat(SCR *, OPTION *, char *, u_long *);
-int f_print(SCR *, OPTION *, char *, u_long *);
-int f_readonly(SCR *, OPTION *, char *, u_long *);
-int f_recompile(SCR *, OPTION *, char *, u_long *);
-int f_reformat(SCR *, OPTION *, char *, u_long *);
-int f_ttywerase(SCR *, OPTION *, char *, u_long *);
-int f_w300(SCR *, OPTION *, char *, u_long *);
-int f_w1200(SCR *, OPTION *, char *, u_long *);
-int f_w9600(SCR *, OPTION *, char *, u_long *);
-int f_window(SCR *, OPTION *, char *, u_long *);
-int f_encoding(SCR *, OPTION *, char *, u_long *);
-int put(SCR *, CB *, CHAR_T *, MARK *, MARK *, int);
-int rcv_tmp(SCR *, EXF *, char *);
-int rcv_init(SCR *);
-int rcv_sync(SCR *, u_int);
-int rcv_list(SCR *);
-int rcv_read(SCR *, FREF *);
-int screen_init(GS *, SCR *, SCR **);
-int screen_end(SCR *);
-SCR *screen_next(SCR *);
-int f_search(SCR *,
- MARK *, MARK *, CHAR_T *, size_t, CHAR_T **, u_int);
-int b_search(SCR *,
- MARK *, MARK *, CHAR_T *, size_t, CHAR_T **, u_int);
-void search_busy(SCR *, busy_t);
-int seq_set(SCR *, CHAR_T *,
- size_t, CHAR_T *, size_t, CHAR_T *, size_t, seq_t, int);
-int seq_delete(SCR *, CHAR_T *, size_t, seq_t);
-int seq_free(SEQ *);
-SEQ *seq_find
- (SCR *, SEQ **, EVENT *, CHAR_T *, size_t, seq_t, int *);
-void seq_close(GS *);
-int seq_dump(SCR *, seq_t, int);
-int seq_save(SCR *, FILE *, char *, seq_t);
-int e_memcmp(CHAR_T *, EVENT *, size_t);
-void *binc(SCR *, void *, size_t *, size_t);
-int nonblank(SCR *, recno_t, size_t *);
-char *join(char *, char *);
-char *expanduser(char *);
-char *quote(char *);
-char *v_strdup(SCR *, const char *, size_t);
-CHAR_T *v_wstrdup(SCR *, const CHAR_T *, size_t);
-enum nresult nget_uslong(u_long *, const CHAR_T *, CHAR_T **, int);
-enum nresult nget_slong(long *, const CHAR_T *, CHAR_T **, int);
-void timepoint_steady(struct timespec *);
-void timepoint_system(struct timespec *);
-void TRACE(SCR *, const char *, ...);
diff --git a/common/key.h b/common/key.h
index 3e55d3044129..ae0ba92d1ce5 100644
--- a/common/key.h
+++ b/common/key.h
@@ -22,8 +22,8 @@
sp->conv.input2int(sp, n, nlen, &(cw), &wlen, &w)
#define CONST
#define INTISWIDE(c) (wctob(c) == EOF)
-#define CHAR_WIDTH(sp, ch) wcwidth(ch)
-#define CAN_PRINT(sp, ch) (CHAR_WIDTH(sp, ch) > 0)
+#define XCHAR_WIDTH(sp, ch) wcwidth(ch)
+#define CAN_PRINT(sp, ch) (XCHAR_WIDTH(sp, ch) > 0)
#else
#define FILE2INT5(sp,buf,n,nlen,w,wlen) \
(w = n, wlen = nlen, 0)
@@ -37,7 +37,7 @@
(w = n, wlen = nlen, 0)
#define CONST const
#define INTISWIDE(c) 0
-#define CHAR_WIDTH(sp, ch) 1
+#define XCHAR_WIDTH(sp, ch) 1
#define CAN_PRINT(sp, ch) isprint(ch)
#endif
#define FILE2INT(sp,n,nlen,w,wlen) \
diff --git a/common/options.h b/common/options.h
index 5ed12d39c342..d723a51217bc 100644
--- a/common/options.h
+++ b/common/options.h
@@ -97,4 +97,8 @@ enum optdisp { NO_DISPLAY, ALL_DISPLAY, CHANGED_DISPLAY, SELECT_DISPLAY };
/* Options array. */
extern OPTLIST const optlist[];
+#ifdef O_PATH
+#undef O_PATH /* bits/fcntl-linux.h may have defined O_PATH. */
+#endif
+
#include "options_def.h"
diff --git a/common/options_def.h b/common/options_def.h
deleted file mode 100644
index 54dd6c20c891..000000000000
--- a/common/options_def.h
+++ /dev/null
@@ -1,84 +0,0 @@
-#define O_ALTWERASE 0
-#define O_AUTOINDENT 1
-#define O_AUTOPRINT 2
-#define O_AUTOWRITE 3
-#define O_BACKUP 4
-#define O_BEAUTIFY 5
-#define O_CDPATH 6
-#define O_CEDIT 7
-#define O_COLUMNS 8
-#define O_COMBINED 9
-#define O_COMMENT 10
-#define O_TMPDIR 11
-#define O_EDCOMPATIBLE 12
-#define O_ERRORBELLS 13
-#define O_ESCAPETIME 14
-#define O_EXPANDTAB 15
-#define O_EXRC 16
-#define O_EXTENDED 17
-#define O_FILEC 18
-#define O_FILEENCODING 19
-#define O_FLASH 20
-#define O_HARDTABS 21
-#define O_ICLOWER 22
-#define O_IGNORECASE 23
-#define O_INPUTENCODING 24
-#define O_KEYTIME 25
-#define O_LEFTRIGHT 26
-#define O_LINES 27
-#define O_LISP 28
-#define O_LIST 29
-#define O_LOCKFILES 30
-#define O_MAGIC 31
-#define O_MATCHCHARS 32
-#define O_MATCHTIME 33
-#define O_MESG 34
-#define O_MODELINE 35
-#define O_MSGCAT 36
-#define O_NOPRINT 37
-#define O_NUMBER 38
-#define O_OCTAL 39
-#define O_OPEN 40
-#define O_OPTIMIZE 41
-#define O_PARAGRAPHS 42
-#define O_PATH 43
-#define O_PRINT 44
-#define O_PROMPT 45
-#define O_READONLY 46
-#define O_RECDIR 47
-#define O_REDRAW 48
-#define O_REMAP 49
-#define O_REPORT 50
-#define O_RULER 51
-#define O_SCROLL 52
-#define O_SEARCHINCR 53
-#define O_SECTIONS 54
-#define O_SECURE 55
-#define O_SHELL 56
-#define O_SHELLMETA 57
-#define O_SHIFTWIDTH 58
-#define O_SHOWMATCH 59
-#define O_SHOWMODE 60
-#define O_SIDESCROLL 61
-#define O_SLOWOPEN 62
-#define O_SOURCEANY 63
-#define O_TABSTOP 64
-#define O_TAGLENGTH 65
-#define O_TAGS 66
-#define O_TERM 67
-#define O_TERSE 68
-#define O_TILDEOP 69
-#define O_TIMEOUT 70
-#define O_TTYWERASE 71
-#define O_VERBOSE 72
-#define O_W1200 73
-#define O_W300 74
-#define O_W9600 75
-#define O_WARN 76
-#define O_WINDOW 77
-#define O_WINDOWNAME 78
-#define O_WRAPLEN 79
-#define O_WRAPMARGIN 80
-#define O_WRAPSCAN 81
-#define O_WRITEANY 82
-#define O_OPTIONCOUNT 83
diff --git a/common/recover.c b/common/recover.c
index 120cf4f60b19..cf222bfb5200 100644
--- a/common/recover.c
+++ b/common/recover.c
@@ -701,7 +701,13 @@ rcv_read(SCR *sp, FREF *frp)
/* If we've found more than one, take the most recent. */
(void)fstat(fileno(fp), &sb);
if (recp == NULL ||
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+ timespeccmp(&rec_mtim, &sb.st_mtimespec, <)) {
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
timespeccmp(&rec_mtim, &sb.st_mtim, <)) {
+#else
+ rec_mtim.tv_sec < sb.st_mtime) {
+#endif
p = recp;
t = pathp;
recp = recpath;
@@ -710,7 +716,13 @@ rcv_read(SCR *sp, FREF *frp)
free(p);
free(t);
}
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+ rec_mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
rec_mtim = sb.st_mtim;
+#else
+ rec_mtim.tv_sec = sb.st_mtime;
+#endif
if (sv_fd != -1)
(void)close(sv_fd);
sv_fd = dup(fileno(fp));
diff --git a/ex/ex.c b/ex/ex.c
index 343131537afa..fd920a8df9a1 100644
--- a/ex/ex.c
+++ b/ex/ex.c
@@ -2266,7 +2266,8 @@ ex_comm_search(CHAR_T *name, size_t len)
return (NULL);
if (cp->name[0] != name[0])
continue;
- if (!MEMCMP(name, cp->name, len))
+ if (STRLEN(cp->name) >= len &&
+ !MEMCMP(name, cp->name, len))
return (cp);
}
return (NULL);
diff --git a/ex/ex_cscope.c b/ex/ex_cscope.c
index 74d7f8af95be..e07aa64df802 100644
--- a/ex/ex_cscope.c
+++ b/ex/ex_cscope.c
@@ -261,7 +261,14 @@ cscope_add(SCR *sp, EXCMD *cmdp, CHAR_T *dname)
csc->dname = csc->buf;
csc->dlen = len;
memcpy(csc->dname, np, len);
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+ csc->mtim = sb.st_mtimespec;
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
csc->mtim = sb.st_mtim;
+#else
+ csc->mtim.tv_sec = sb.st_mtime;
+ csc->mtim.tv_nsec = 0;
+#endif
/* Get the search paths for the cscope. */
if (get_paths(sp, csc))
@@ -812,8 +819,15 @@ csc_file(SCR *sp, CSC *csc, char *name, char **dirp, size_t *dlenp, int *isolder
free(buf);
*dirp = *pp;
*dlenp = strlen(*pp);
+#if defined HAVE_STRUCT_STAT_ST_MTIMESPEC
+ *isolderp = timespeccmp(
+ &sb.st_mtimespec, &csc->mtim, <);
+#elif defined HAVE_STRUCT_STAT_ST_MTIM
*isolderp = timespeccmp(
&sb.st_mtim, &csc->mtim, <);
+#else
+ *isolderp = sb.st_mtime < csc->mtim.tv_sec;
+#endif
return;
}
free(buf);
diff --git a/ex/ex_def.h b/ex/ex_def.h
deleted file mode 100644
index 7afb7b19d677..000000000000
--- a/ex/ex_def.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#define C_SCROLL 0
-#define C_BANG 1
-#define C_HASH 2
-#define C_SUBAGAIN 3
-#define C_STAR 4
-#define C_SHIFTL 5
-#define C_EQUAL 6
-#define C_SHIFTR 7
-#define C_AT 8
-#define C_APPEND 9
-#define C_ABBR 10
-#define C_ARGS 11
-#define C_BG 12
-#define C_CHANGE 13
-#define C_CD 14
-#define C_CHDIR 15
-#define C_COPY 16
-#define C_CSCOPE 17
-#define C_DELETE 18
-#define C_DISPLAY 19
-#define C_EDIT 20
-#define C_EX 21
-#define C_EXUSAGE 22
-#define C_FILE 23
-#define C_FG 24
-#define C_GLOBAL 25
-#define C_HELP 26
-#define C_INSERT 27
-#define C_JOIN 28
-#define C_K 29
-#define C_LIST 30
-#define C_MOVE 31
-#define C_MARK 32
-#define C_MAP 33
-#define C_MKEXRC 34
-#define C_NEXT 35
-#define C_NUMBER 36
-#define C_OPEN 37
-#define C_PRINT 38
-#define C_PRESERVE 39
-#define C_PREVIOUS 40
-#define C_PUT 41
-#define C_QUIT 42
-#define C_READ 43
-#define C_RECOVER 44
-#define C_RESIZE 45
-#define C_REWIND 46
-#define C_SUBSTITUTE 47
-#define C_SCRIPT 48
-#define C_SET 49
-#define C_SHELL 50
-#define C_SOURCE 51
-#define C_STOP 52
-#define C_SUSPEND 53
-#define C_T 54
-#define C_TAG 55
-#define C_TAGNEXT 56
-#define C_TAGPOP 57
-#define C_TAGPREV 58
-#define C_TAGTOP 59
-#define C_UNDO 60
-#define C_UNABBREVIATE 61
-#define C_UNMAP 62
-#define C_V 63
-#define C_VERSION 64
-#define C_VISUAL_EX 65
-#define C_VISUAL_VI 66
-#define C_VIUSAGE 67
-#define C_VSPLIT 68
-#define C_WRITE 69
-#define C_WN 70
-#define C_WQ 71
-#define C_XIT 72
-#define C_YANK 73
-#define C_Z 74
-#define C_SUBTILDE 75
diff --git a/ex/extern.h b/ex/extern.h
deleted file mode 100644
index 9d7b1d674c3c..000000000000
--- a/ex/extern.h
+++ /dev/null
@@ -1,131 +0,0 @@
-int ex(SCR **);
-int ex_cmd(SCR *);
-int ex_range(SCR *, EXCMD *, int *);
-int ex_is_abbrev(CHAR_T *, size_t);
-int ex_is_unmap(CHAR_T *, size_t);
-void ex_badaddr
- (SCR *, EXCMDLIST const *, enum badaddr, enum nresult);
-int ex_abbr(SCR *, EXCMD *);
-int ex_unabbr(SCR *, EXCMD *);
-int ex_append(SCR *, EXCMD *);
-int ex_change(SCR *, EXCMD *);
-int ex_insert(SCR *, EXCMD *);
-int ex_next(SCR *, EXCMD *);
-int ex_prev(SCR *, EXCMD *);
-int ex_rew(SCR *, EXCMD *);
-int ex_args(SCR *, EXCMD *);
-char **ex_buildargv(SCR *, EXCMD *, char *);
-int argv_init(SCR *, EXCMD *);
-int argv_exp0(SCR *, EXCMD *, CHAR_T *, size_t);
-int argv_exp1(SCR *, EXCMD *, CHAR_T *, size_t, int);
-int argv_exp2(SCR *, EXCMD *, CHAR_T *, size_t);
-int argv_exp3(SCR *, EXCMD *, CHAR_T *, size_t);
-int argv_flt_ex(SCR *, EXCMD *, CHAR_T *, size_t);
-int argv_free(SCR *);
-int argv_flt_path(SCR *, EXCMD *, CHAR_T *, size_t);
-CHAR_T *argv_esc(SCR *, EXCMD *, CHAR_T *, size_t);
-CHAR_T *argv_uesc(SCR *, EXCMD *, CHAR_T *, size_t);
-int ex_at(SCR *, EXCMD *);
-int ex_bang(SCR *, EXCMD *);
-int ex_cd(SCR *, EXCMD *);
-int ex_cscope(SCR *, EXCMD *);
-int cscope_end(SCR *);
-int cscope_display(SCR *);
-int cscope_search(SCR *, TAGQ *, TAG *);
-int ex_delete(SCR *, EXCMD *);
-int ex_display(SCR *, EXCMD *);
-int ex_edit(SCR *, EXCMD *);
-int ex_equal(SCR *, EXCMD *);
-int ex_file(SCR *, EXCMD *);
-int ex_filter(SCR *,
- EXCMD *, MARK *, MARK *, MARK *, CHAR_T *, enum filtertype);
-int ex_global(SCR *, EXCMD *);
-int ex_v(SCR *, EXCMD *);
-int ex_g_insdel(SCR *, lnop_t, recno_t);
-int ex_screen_copy(SCR *, SCR *);
-int ex_screen_end(SCR *);
-int ex_optchange(SCR *, int, char *, u_long *);
-int ex_exrc(SCR *);
-int ex_run_str(SCR *, char *, CHAR_T *, size_t, int, int);
-int ex_join(SCR *, EXCMD *);
-int ex_map(SCR *, EXCMD *);
-int ex_unmap(SCR *, EXCMD *);
-int ex_mark(SCR *, EXCMD *);
-int ex_mkexrc(SCR *, EXCMD *);
-int ex_copy(SCR *, EXCMD *);
-int ex_move(SCR *, EXCMD *);
-int ex_open(SCR *, EXCMD *);
-int ex_preserve(SCR *, EXCMD *);
-int ex_recover(SCR *, EXCMD *);
-int ex_list(SCR *, EXCMD *);
-int ex_number(SCR *, EXCMD *);
-int ex_pr(SCR *, EXCMD *);
-int ex_print(SCR *, EXCMD *, MARK *, MARK *, u_int32_t);
-int ex_ldisplay(SCR *, const CHAR_T *, size_t, size_t, u_int);
-int ex_scprint(SCR *, MARK *, MARK *);
-int ex_printf(SCR *, const char *, ...);
-int ex_puts(SCR *, const char *);
-int ex_fflush(SCR *sp);
-int ex_put(SCR *, EXCMD *);
-int ex_quit(SCR *, EXCMD *);
-int ex_read(SCR *, EXCMD *);
-int ex_readfp(SCR *, char *, FILE *, MARK *, recno_t *, int);
-int ex_bg(SCR *, EXCMD *);
-int ex_fg(SCR *, EXCMD *);
-int ex_resize(SCR *, EXCMD *);
-int ex_sdisplay(SCR *);
-int ex_script(SCR *, EXCMD *);
-int sscr_exec(SCR *, recno_t);
-int sscr_input(SCR *);
-int sscr_end(SCR *);
-int ex_set(SCR *, EXCMD *);
-int ex_shell(SCR *, EXCMD *);
-int ex_exec_proc(SCR *, EXCMD *, char *, const char *, int);
-int proc_wait(SCR *, long, const char *, int, int);
-int ex_shiftl(SCR *, EXCMD *);
-int ex_shiftr(SCR *, EXCMD *);
-int ex_retab(SCR *, EXCMD *);
-int ex_source(SCR *, EXCMD *);
-int ex_stop(SCR *, EXCMD *);
-int ex_s(SCR *, EXCMD *);
-int ex_subagain(SCR *, EXCMD *);
-int ex_subtilde(SCR *, EXCMD *);
-int re_compile(SCR *,
- CHAR_T *, size_t, CHAR_T **, size_t *, regex_t *, u_int);
-void re_error(SCR *, int, regex_t *);
-int ex_tag_first(SCR *, CHAR_T *);
-int ex_tag_push(SCR *, EXCMD *);
-int ex_tag_next(SCR *, EXCMD *);
-int ex_tag_prev(SCR *, EXCMD *);
-int ex_tag_nswitch(SCR *, TAG *, int);
-int ex_tag_Nswitch(SCR *, TAG *, int);
-int ex_tag_pop(SCR *, EXCMD *);
-int ex_tag_top(SCR *, EXCMD *);
-int ex_tag_display(SCR *);
-int ex_tag_copy(SCR *, SCR *);
-int tagq_free(SCR *, TAGQ *);
-int tagq_push(SCR*, TAGQ*, int, int );
-void tag_msg(SCR *, tagmsg_t, char *);
-int ex_tagf_alloc(SCR *, char *);
-int ex_tag_free(SCR *);
-int ex_txt(SCR *, TEXTH *, ARG_CHAR_T, u_int32_t);
-int ex_undo(SCR *, EXCMD *);
-int ex_help(SCR *, EXCMD *);
-int ex_usage(SCR *, EXCMD *);
-int ex_viusage(SCR *, EXCMD *);
-void ex_cinit(SCR *, EXCMD *, int, int, recno_t, recno_t, int);
-int ex_getline(SCR *, FILE *, size_t *);
-int ex_ncheck(SCR *, int);
-int ex_init(SCR *);
-void ex_wemsg(SCR *, CHAR_T *, exm_t);
-void ex_emsg(SCR *, char *, exm_t);
-int ex_version(SCR *, EXCMD *);
-int ex_visual(SCR *, EXCMD *);
-int ex_wn(SCR *, EXCMD *);
-int ex_wq(SCR *, EXCMD *);
-int ex_write(SCR *, EXCMD *);
-int ex_xit(SCR *, EXCMD *);
-int ex_writefp(SCR *,
- char *, FILE *, MARK *, MARK *, u_long *, u_long *, int);
-int ex_yank(SCR *, EXCMD *);
-int ex_z(SCR *, EXCMD *);
diff --git a/ex/version.h b/ex/version.h
deleted file mode 100644
index 742b145ebd3f..000000000000
--- a/ex/version.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VI_VERSION "2.2.0 (2020-08-01)"
diff --git a/man/vi.1 b/man/vi.1
index ce7b883f8497..62f28d72569c 100644
--- a/man/vi.1
+++ b/man/vi.1
@@ -1809,7 +1809,8 @@ Display buffers, Cscope connections, screens or tags.
.Op Ar +cmd
.Op Ar file
.Xc
-Edit a different file.
+Edit a different file. The capitalized command opens a new screen below the
+current screen.
.Pp
.It Xo
.Cm exu Ns Op Cm sage
@@ -1832,7 +1833,8 @@ Display and optionally change the file name.
.Xc
.Nm vi
mode only.
-Foreground the specified screen.
+Foreground the specified screen. The capitalized command opens a new screen
+below the current screen.
.Pp
.It Xo
.Op Ar range
@@ -1919,7 +1921,8 @@ Write the abbreviations, editor options and maps to the specified
.Op Cm !\&
.Op Ar
.Xc
-Edit the next file from the argument list.
+Edit the next file from the argument list. The capitalized command opens a
+new screen below the current screen.
.\" .Pp
.\" .It Xo
.\" .Op Ar line
@@ -1940,7 +1943,8 @@ option.
.Cm rev Ns Op Cm ious Ns
.Op Cm !\&
.Xc
-Edit the previous file from the argument list.
+Edit the previous file from the argument list. The capitalized command opens
+a new screen below the current screen.
.Pp
.It Xo
.Op Ar range
@@ -2103,7 +2107,8 @@ character is usually
.Op Cm !\&
.Ar tagstring
.Xc
-Edit the file containing the specified tag.
+Edit the file containing the specified tag. The capitalized command opens a
+new screen below the current screen.
.Pp
.It Xo
.Cm tagn Ns Op Cm ext Ns
@@ -2166,15 +2171,15 @@ Enter
.Nm vi .
.Pp
.It Xo
-.Op Cm Vi Ns
-.Cm i Ns Op Cm sual Ns
+.Cm Vi Ns
+.Op Cm sual Ns
.Op Cm !\&
.Op Ar +cmd
.Op Ar file
.Xc
.Nm vi
-mode only.
-Edit a new file.
+mode only. Edit a different file by opening a new screen below the current
+screen.
.Pp
.It Xo
.Cm viu Ns Op Cm sage
@@ -2185,6 +2190,14 @@ Display usage for a
command.
.Pp
.It Xo
+.Cm vs Ns Op Cm plit
+.Op Ar +cmd
+.Op Ar file
+.Xc
+Edit a different file by opening a new screen to the right of the current
+screen.
+.Pp
+.It Xo
.Op Ar range
.Cm w Ns Op Cm rite Ns
.Op Cm !\&
@@ -2194,8 +2207,7 @@ command.
.It Xo
.Op Ar range
.Cm w Ns Op Cm rite
-.Op Cm !\&
-.Op Ar file
+.Cm !\& Ns Ar shell-command
.Xc
.It Xo
.Op Ar range
@@ -2209,7 +2221,21 @@ command.
.Op >>
.Op Ar file
.Xc
-Write the file.
+Write the entire file, or
+.Ar range .
+.Sq !\&
+overwrites a different, preexisting file.
+.Sq >>
+appends to a file that may preexist. Whitespace followed by
+.Sq !\&
+pipes the file to
+.Ar shell-command .
+.Cm wn
+moves to the next file if writing succeeds.
+.Cm wq
+exits the editor if writing succeeds, unless there are more files to edit;
+.Sq !\&
+exits regardless.
.Pp
.It Xo
.Op Ar range
diff --git a/vi/extern.h b/vi/extern.h
deleted file mode 100644
index 8e145c6318ef..000000000000
--- a/vi/extern.h
+++ /dev/null
@@ -1,145 +0,0 @@
-int cs_init(SCR *, VCS *);
-int cs_next(SCR *, VCS *);
-int cs_fspace(SCR *, VCS *);
-int cs_fblank(SCR *, VCS *);
-int cs_prev(SCR *, VCS *);
-int cs_bblank(SCR *, VCS *);
-int v_at(SCR *, VICMD *);
-int v_chrepeat(SCR *, VICMD *);
-int v_chrrepeat(SCR *, VICMD *);
-int v_cht(SCR *, VICMD *);
-int v_chf(SCR *, VICMD *);
-int v_chT(SCR *, VICMD *);
-int v_chF(SCR *, VICMD *);
-int v_delete(SCR *, VICMD *);
-int v_again(SCR *, VICMD *);
-int v_exmode(SCR *, VICMD *);
-int v_join(SCR *, VICMD *);
-int v_shiftl(SCR *, VICMD *);
-int v_shiftr(SCR *, VICMD *);
-int v_suspend(SCR *, VICMD *);
-int v_switch(SCR *, VICMD *);
-int v_tagpush(SCR *, VICMD *);
-int v_tagpop(SCR *, VICMD *);
-int v_filter(SCR *, VICMD *);
-int v_ex(SCR *, VICMD *);
-int v_ecl_exec(SCR *);
-int v_increment(SCR *, VICMD *);
-int v_screen_copy(SCR *, SCR *);
-int v_screen_end(SCR *);
-int v_optchange(SCR *, int, char *, u_long *);
-int v_iA(SCR *, VICMD *);
-int v_ia(SCR *, VICMD *);
-int v_iI(SCR *, VICMD *);
-int v_ii(SCR *, VICMD *);
-int v_iO(SCR *, VICMD *);
-int v_io(SCR *, VICMD *);
-int v_change(SCR *, VICMD *);
-int v_Replace(SCR *, VICMD *);
-int v_subst(SCR *, VICMD *);
-int v_left(SCR *, VICMD *);
-int v_cfirst(SCR *, VICMD *);
-int v_first(SCR *, VICMD *);
-int v_ncol(SCR *, VICMD *);
-int v_zero(SCR *, VICMD *);
-int v_mark(SCR *, VICMD *);
-int v_bmark(SCR *, VICMD *);
-int v_fmark(SCR *, VICMD *);
-int v_emark(SCR *, VICMD *);
-int v_match(SCR *, VICMD *);
-int v_buildmcs(SCR *, char *);
-int v_paragraphf(SCR *, VICMD *);
-int v_paragraphb(SCR *, VICMD *);
-int v_buildps(SCR *, char *, char *);
-int v_Put(SCR *, VICMD *);
-int v_put(SCR *, VICMD *);
-int v_redraw(SCR *, VICMD *);
-int v_replace(SCR *, VICMD *);
-int v_right(SCR *, VICMD *);
-int v_dollar(SCR *, VICMD *);
-int v_screen(SCR *, VICMD *);
-int v_lgoto(SCR *, VICMD *);
-int v_home(SCR *, VICMD *);
-int v_middle(SCR *, VICMD *);
-int v_bottom(SCR *, VICMD *);
-int v_up(SCR *, VICMD *);
-int v_cr(SCR *, VICMD *);
-int v_down(SCR *, VICMD *);
-int v_hpageup(SCR *, VICMD *);
-int v_hpagedown(SCR *, VICMD *);
-int v_pagedown(SCR *, VICMD *);
-int v_pageup(SCR *, VICMD *);
-int v_lineup(SCR *, VICMD *);
-int v_linedown(SCR *, VICMD *);
-int v_searchb(SCR *, VICMD *);
-int v_searchf(SCR *, VICMD *);
-int v_searchN(SCR *, VICMD *);
-int v_searchn(SCR *, VICMD *);
-int v_searchw(SCR *, VICMD *);
-int v_correct(SCR *, VICMD *, int);
-int v_sectionf(SCR *, VICMD *);
-int v_sectionb(SCR *, VICMD *);
-int v_sentencef(SCR *, VICMD *);
-int v_sentenceb(SCR *, VICMD *);
-int v_status(SCR *, VICMD *);
-int v_tcmd(SCR *, VICMD *, ARG_CHAR_T, u_int);
-int v_txt(SCR *, VICMD *, MARK *,
- const CHAR_T *, size_t, ARG_CHAR_T, recno_t, u_long, u_int32_t);
-int v_txt_auto(SCR *, recno_t, TEXT *, size_t, TEXT *);
-int v_ulcase(SCR *, VICMD *);
-int v_mulcase(SCR *, VICMD *);
-int v_Undo(SCR *, VICMD *);
-int v_undo(SCR *, VICMD *);
-void v_eof(SCR *, MARK *);
-void v_eol(SCR *, MARK *);
-void v_nomove(SCR *);
-void v_sof(SCR *, MARK *);
-void v_sol(SCR *);
-int v_isempty(CHAR_T *, size_t);
-void v_emsg(SCR *, char *, vim_t);
-int v_wordW(SCR *, VICMD *);
-int v_wordw(SCR *, VICMD *);
-int v_wordE(SCR *, VICMD *);
-int v_worde(SCR *, VICMD *);
-int v_wordB(SCR *, VICMD *);
-int v_wordb(SCR *, VICMD *);
-int v_xchar(SCR *, VICMD *);
-int v_Xchar(SCR *, VICMD *);
-int v_yank(SCR *, VICMD *);
-int v_z(SCR *, VICMD *);
-int vs_crel(SCR *, long);
-int v_zexit(SCR *, VICMD *);
-int vi(SCR **);
-int v_curword(SCR *);
-int vs_line(SCR *, SMAP *, size_t *, size_t *);
-int vs_number(SCR *);
-void vs_busy(SCR *, const char *, busy_t);
-void vs_home(SCR *);
-void vs_update(SCR *, const char *, const CHAR_T *);
-void vs_msg(SCR *, mtype_t, char *, size_t);
-int vs_ex_resolve(SCR *, int *);
-int vs_resolve(SCR *, SCR *, int);
-int vs_repaint(SCR *, EVENT *);
-int vs_refresh(SCR *, int);
-int vs_column(SCR *, size_t *);
-size_t vs_screens(SCR *, recno_t, size_t *);
-size_t vs_columns(SCR *, CHAR_T *, recno_t, size_t *, size_t *);
-size_t vs_rcm(SCR *, recno_t, int);
-size_t vs_colpos(SCR *, recno_t, size_t);
-int vs_change(SCR *, recno_t, lnop_t);
-int vs_sm_fill(SCR *, recno_t, pos_t);
-int vs_sm_scroll(SCR *, MARK *, recno_t, scroll_t);
-int vs_sm_1up(SCR *);
-int vs_sm_1down(SCR *);
-int vs_sm_next(SCR *, SMAP *, SMAP *);
-int vs_sm_prev(SCR *, SMAP *, SMAP *);
-int vs_sm_cursor(SCR *, SMAP **);
-int vs_sm_position(SCR *, MARK *, u_long, pos_t);
-recno_t vs_sm_nlines(SCR *, SMAP *, recno_t, size_t);
-int vs_split(SCR *, SCR *, int);
-int vs_vsplit(SCR *, SCR *);
-int vs_discard(SCR *, SCR **);
-int vs_fg(SCR *, SCR **, CHAR_T *, int);
-int vs_bg(SCR *);
-int vs_swap(SCR *, SCR **, char *);
-int vs_resize(SCR *, long, adj_t);
diff --git a/vi/v_increment.c b/vi/v_increment.c
index 6c59836cab7e..2583d9704579 100644
--- a/vi/v_increment.c
+++ b/vi/v_increment.c
@@ -198,7 +198,7 @@ nonum: msgq(sp, M_ERR, "181|Cursor not in a number");
/* If we cross 0, signed numbers lose their sign. */
if (lval == 0 && ntype == fmt[SDEC])
ntype = fmt[DEC];
- nlen = SPRINTF(nbuf, sizeof(nbuf), ntype, lval);
+ nlen = SPRINTF(nbuf, SIZE(nbuf), ntype, lval);
} else {
if ((nret = nget_uslong(&ulval, t, NULL, base)) != NUM_OK)
goto err;
@@ -220,7 +220,7 @@ nonum: msgq(sp, M_ERR, "181|Cursor not in a number");
if (base == 16)
wlen -= 2;
- nlen = SPRINTF(nbuf, sizeof(nbuf), ntype, wlen, ulval);
+ nlen = SPRINTF(nbuf, SIZE(nbuf), ntype, wlen, ulval);
}
/* Build the new line. */
diff --git a/vi/vs_line.c b/vi/vs_line.c
index e5778e1971e6..45c950badef9 100644
--- a/vi/vs_line.c
+++ b/vi/vs_line.c
@@ -427,7 +427,7 @@ display:
FLUSH;
/* don't display half a wide character */
- if (is_partial && CHAR_WIDTH(sp, ch) > 1) {
+ if (is_partial && XCHAR_WIDTH(sp, ch) > 1) {
*cbp++ = ' ';
break;
}