nvi: import version 2.2.2

This commit is contained in:
Baptiste Daroussin
2026-01-14 16:22:35 +01:00
33 changed files with 1179 additions and 581 deletions
-14
View File
@@ -1,14 +0,0 @@
*.swp
*~
*.orig
*.core
extern.h
*_def.h
version.h
tags
build/
# Ignore files by the GNU Global source code tagging system.
/GPATH
/GRTAGS
/GTAGS
+34 -33
View File
@@ -42,10 +42,6 @@ add_compile_options(-Wstrict-aliasing -fstrict-aliasing)
include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(MAIN_PROTOS
cl/extern.h common/extern.h ex/extern.h vi/extern.h
common/options_def.h ex/ex_def.h ex/version.h)
set(CL_SRCS set(CL_SRCS
cl/cl_funcs.c cl/cl_main.c cl/cl_read.c cl/cl_screen.c cl/cl_term.c) cl/cl_funcs.c cl/cl_main.c cl/cl_read.c cl/cl_screen.c cl/cl_term.c)
@@ -81,44 +77,59 @@ set(VI_SRCS
set(REGEX_SRCS set(REGEX_SRCS
regex/regcomp.c regex/regerror.c regex/regexec.c regex/regfree.c) regex/regcomp.c regex/regerror.c regex/regexec.c regex/regfree.c)
set(GENERATED_HDRS
${CMAKE_CURRENT_BINARY_DIR}/cl_extern.h
${CMAKE_CURRENT_BINARY_DIR}/common_extern.h
${CMAKE_CURRENT_BINARY_DIR}/ex_extern.h
${CMAKE_CURRENT_BINARY_DIR}/vi_extern.h
${CMAKE_CURRENT_BINARY_DIR}/options_def.h
${CMAKE_CURRENT_BINARY_DIR}/ex_def.h
${CMAKE_CURRENT_BINARY_DIR}/version.h)
# commands to generate the public headers # commands to generate the public headers
set(extract_protos sed -n 's/^ \\* PUBLIC: \\\(.*\\\)/\\1/p') set(extract_protos sed -n 's/^ \\* PUBLIC: \\\(.*\\\)/\\1/p')
set(extract_version sed -n set(extract_version sed -n
's/^.*version \\\([^\)]*\)\\\).*/\#define VI_VERSION \\\"\\1\\\"/p') 's/^.*version \\\([^\)]*\)\\\).*/\#define VI_VERSION \\\"\\1\\\"/p')
add_custom_command(OUTPUT cl/extern.h add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cl_extern.h
COMMAND ${extract_protos} ${CL_SRCS} > cl/extern.h COMMAND ${extract_protos} ${CL_SRCS} >
${CMAKE_CURRENT_BINARY_DIR}/cl_extern.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${CL_SRCS}) DEPENDS ${CL_SRCS})
add_custom_command(OUTPUT common/extern.h add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/common_extern.h
COMMAND ${extract_protos} ${COMMON_SRCS} > common/extern.h COMMAND ${extract_protos} ${COMMON_SRCS} >
${CMAKE_CURRENT_BINARY_DIR}/common_extern.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${COMMON_SRCS}) DEPENDS ${COMMON_SRCS})
add_custom_command(OUTPUT ex/extern.h add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ex_extern.h
COMMAND ${extract_protos} ${EX_SRCS} > ex/extern.h COMMAND ${extract_protos} ${EX_SRCS} >
${CMAKE_CURRENT_BINARY_DIR}/ex_extern.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${EX_SRCS}) DEPENDS ${EX_SRCS})
add_custom_command(OUTPUT vi/extern.h add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vi_extern.h
COMMAND ${extract_protos} ${VI_SRCS} > vi/extern.h COMMAND ${extract_protos} ${VI_SRCS} >
${CMAKE_CURRENT_BINARY_DIR}/vi_extern.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${VI_SRCS}) DEPENDS ${VI_SRCS})
add_custom_command(OUTPUT common/options_def.h add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/options_def.h
COMMAND awk -f common/options.awk COMMAND awk -f common/options.awk common/options.c >
common/options.c > common/options_def.h ${CMAKE_CURRENT_BINARY_DIR}/options_def.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS common/options.c) DEPENDS common/options.c)
add_custom_command(OUTPUT ex/ex_def.h add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ex_def.h
COMMAND awk -f ex/ex.awk ex/ex_cmd.c > ex/ex_def.h COMMAND awk -f ex/ex.awk ex/ex_cmd.c >
${CMAKE_CURRENT_BINARY_DIR}/ex_def.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ex/ex_cmd.c) DEPENDS ex/ex_cmd.c)
add_custom_command(OUTPUT ex/version.h add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h
COMMAND ${extract_version} README > ex/version.h COMMAND ${extract_version} README >
${CMAKE_CURRENT_BINARY_DIR}/version.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS README) DEPENDS README)
add_executable(nvi) add_executable(nvi)
target_sources(nvi PRIVATE ${MAIN_PROTOS} ${CL_SRCS} ${COMMON_SRCS} target_sources(nvi PRIVATE ${CL_SRCS} ${COMMON_SRCS} ${EX_SRCS} ${VI_SRCS}
${EX_SRCS} ${VI_SRCS}) ${GENERATED_HDRS})
target_compile_definitions(nvi PRIVATE $<$<CONFIG:Debug>:DEBUG> target_compile_definitions(nvi PRIVATE $<$<CONFIG:Debug>:DEBUG>
$<$<CONFIG:Debug>:COMLOG>) $<$<CONFIG:Debug>:COMLOG>)
@@ -208,18 +219,8 @@ check_function_exists(dbopen DBOPEN_IN_LIBC)
if(NOT DBOPEN_IN_LIBC) if(NOT DBOPEN_IN_LIBC)
target_link_libraries(nvi PRIVATE db1) target_link_libraries(nvi PRIVATE db1)
endif() endif()
if (APPLE) find_path(DB_INCLUDE_DIR db.h PATH_SUFFIXES db1)
# Avoid using an incompatible db.h installed to /usr/local (since this is target_include_directories(nvi PRIVATE ${DB_INCLUDE_DIR})
# 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(libutil.h HAVE_LIBUTIL_H)
check_include_files(ncurses.h HAVE_NCURSES_H) check_include_files(ncurses.h HAVE_NCURSES_H)
+1 -1
View File
@@ -1,4 +1,4 @@
This is version 2.2.1 (2023-09-25) of nex/nvi, a reimplementation of the ex/vi This is version 2.2.2 (2025-10-08) of nex/nvi, a reimplementation of the ex/vi
text editors originally distributed as part of the Fourth Berkeley text editors originally distributed as part of the Fourth Berkeley
Software Distribution (4BSD), by the University of California, Berkeley. Software Distribution (4BSD), by the University of California, Berkeley.
+1 -1
View File
@@ -77,4 +77,4 @@ typedef enum { INP_OK=0, INP_EOF, INP_ERR, INP_INTR, INP_TIMEOUT } input_t;
#define RCNO(sp, cno) (cno) #define RCNO(sp, cno) (cno)
#define RLNO(sp, lno) (lno) #define RLNO(sp, lno) (lno)
#include "extern.h" #include "cl_extern.h"
+31
View File
@@ -0,0 +1,31 @@
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);
+8 -5
View File
@@ -11,11 +11,7 @@
#define TCSASOFT 0 #define TCSASOFT 0
#endif #endif
#ifdef DB_H_ABS_PATH
#include DB_H_ABS_PATH
#else
#include <db.h> #include <db.h>
#endif
#include <regex.h> /* May refer to the bundled regex. */ #include <regex.h> /* May refer to the bundled regex. */
#include <stdint.h> #include <stdint.h>
@@ -92,4 +88,11 @@ typedef enum { SEQ_ABBREV, SEQ_COMMAND, SEQ_INPUT } seq_t;
#include "log.h" #include "log.h"
#include "mem.h" #include "mem.h"
#include "extern.h" #include "common_extern.h"
#ifndef SLIST_REMOVE_AFTER
#define SLIST_REMOVE_AFTER(elm, field) do { \
SLIST_NEXT(elm, field) = \
SLIST_NEXT(SLIST_NEXT(elm, field), field); \
} while (0)
#endif
+5
View File
@@ -68,6 +68,10 @@ cut(SCR *sp, CHAR_T *namep, MARK *fm, MARK *tm, int flags)
recno_t lno; recno_t lno;
int append, copy_one, copy_def; int append, copy_one, copy_def;
/* Check if the line numbers are out-of-band */
if (fm->lno == OOBLNO || tm->lno == OOBLNO)
return (1);
/* /*
* If the user specified a buffer, put it there. (This may require * If the user specified a buffer, put it there. (This may require
* a copy into the numeric buffers. We do the copy so that we don't * a copy into the numeric buffers. We do the copy so that we don't
@@ -175,6 +179,7 @@ namecb: CBNAME(sp, cbp, name);
text_lfree(cbp->textq); text_lfree(cbp->textq);
cbp->len = 0; cbp->len = 0;
cbp->flags = 0; cbp->flags = 0;
sp->gp->dcbp = NULL;
return (1); return (1);
} }
+131
View File
@@ -0,0 +1,131 @@
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 *, ...);
+2 -2
View File
@@ -51,7 +51,7 @@ db_eget(SCR *sp,
* line in an empty file, find the last line of the file; db_last * line in an empty file, find the last line of the file; db_last
* fails loudly. * fails loudly.
*/ */
if ((lno == 0 || lno == 1) && db_last(sp, &l1)) if ((lno == OOBLNO || lno == 1) && db_last(sp, &l1))
return (1); return (1);
/* If the file isn't empty, fail loudly. */ /* If the file isn't empty, fail loudly. */
@@ -92,7 +92,7 @@ db_get(SCR *sp,
* have to have an OOB condition for the look-aside into the input * have to have an OOB condition for the look-aside into the input
* buffer anyway. * buffer anyway.
*/ */
if (lno == 0) if (lno == OOBLNO)
goto err1; goto err1;
/* Check for no underlying file. */ /* Check for no underlying file. */
+14 -25
View File
@@ -317,14 +317,13 @@ opts_init(SCR *sp, int *oargs)
argv[1] = &b; argv[1] = &b;
/* Set numeric and string default values. */ /* Set numeric and string default values. */
#define OI(indx, str) do { \ #define OI(indx, ...) do { \
a.len = STRLEN(str); \ size_t len = SPRINTF(b2, SIZE(b2), __VA_ARGS__); \
if (STRCMP((CHAR_T*)str, b2) != 0) \ if (len < 0 || len >= SIZE(b2) || opts_set(sp, argv, NULL)) { \
(void)MEMCPY(b2, str, a.len+1); \ optindx = indx; \
if (opts_set(sp, argv, NULL)) { \
optindx = indx; \
goto err; \ goto err; \
} \ } \
a.len = len; \
} while (0) } while (0)
/* /*
* Indirect global options to global space. Specifically, set up * Indirect global options to global space. Specifically, set up
@@ -345,9 +344,7 @@ opts_init(SCR *sp, int *oargs)
F_SET(&sp->opts[O_SECURE], OPT_GLOBAL); F_SET(&sp->opts[O_SECURE], OPT_GLOBAL);
/* Initialize string values. */ /* Initialize string values. */
(void)SPRINTF(b2, SIZE(b2), OI(O_CDPATH, L("cdpath=%s"), (s = getenv("CDPATH")) == NULL ? ":" : s);
L("cdpath=%s"), (s = getenv("CDPATH")) == NULL ? ":" : s);
OI(O_CDPATH, b2);
OI(O_CEDIT, L("cedit=\033")); OI(O_CEDIT, L("cedit=\033"));
/* /*
@@ -357,32 +354,26 @@ opts_init(SCR *sp, int *oargs)
* are two ways to change this -- the user can set either the directory * are two ways to change this -- the user can set either the directory
* option or the TMPDIR environmental variable. * option or the TMPDIR environmental variable.
*/ */
(void)SPRINTF(b2, SIZE(b2), OI(O_TMPDIR,
L("directory=%s"), (s = getenv("TMPDIR")) == NULL ? _PATH_TMP : s); L("directory=%s"), (s = getenv("TMPDIR")) == NULL ? _PATH_TMP : s);
OI(O_TMPDIR, b2);
OI(O_ESCAPETIME, L("escapetime=6")); OI(O_ESCAPETIME, L("escapetime=6"));
OI(O_FILEC, L("filec=\t")); OI(O_FILEC, L("filec=\t"));
OI(O_KEYTIME, L("keytime=6")); OI(O_KEYTIME, L("keytime=6"));
OI(O_MATCHCHARS, L("matchchars=()[]{}")); OI(O_MATCHCHARS, L("matchchars=()[]{}"));
OI(O_MATCHTIME, L("matchtime=7")); OI(O_MATCHTIME, L("matchtime=7"));
(void)SPRINTF(b2, SIZE(b2), L("msgcat=%s"), _PATH_MSGCAT); OI(O_MSGCAT, L("msgcat=%s"), _PATH_MSGCAT);
OI(O_MSGCAT, b2);
OI(O_REPORT, L("report=5")); OI(O_REPORT, L("report=5"));
OI(O_PARAGRAPHS, L("paragraphs=IPLPPPQPP LIpplpipbp")); OI(O_PARAGRAPHS, L("paragraphs=IPLPPPQPP LIpplpipbp"));
(void)SPRINTF(b2, SIZE(b2), L("path=%s"), ""); OI(O_PATH, L("path=%s"), "");
OI(O_PATH, b2); OI(O_RECDIR, L("recdir=%s"), NVI_PATH_PRESERVE);
(void)SPRINTF(b2, SIZE(b2), L("recdir=%s"), NVI_PATH_PRESERVE);
OI(O_RECDIR, b2);
OI(O_SECTIONS, L("sections=NHSHH HUnhsh")); OI(O_SECTIONS, L("sections=NHSHH HUnhsh"));
(void)SPRINTF(b2, SIZE(b2), OI(O_SHELL,
L("shell=%s"), (s = getenv("SHELL")) == NULL ? _PATH_BSHELL : s); L("shell=%s"), (s = getenv("SHELL")) == NULL ? _PATH_BSHELL : s);
OI(O_SHELL, b2);
OI(O_SHELLMETA, L("shellmeta=~{[*?$`'\"\\")); OI(O_SHELLMETA, L("shellmeta=~{[*?$`'\"\\"));
OI(O_SHIFTWIDTH, L("shiftwidth=8")); OI(O_SHIFTWIDTH, L("shiftwidth=8"));
OI(O_SIDESCROLL, L("sidescroll=16")); OI(O_SIDESCROLL, L("sidescroll=16"));
OI(O_TABSTOP, L("tabstop=8")); OI(O_TABSTOP, L("tabstop=8"));
(void)SPRINTF(b2, SIZE(b2), L("tags=%s"), _PATH_TAGS); OI(O_TAGS, L("tags=%s"), _PATH_TAGS);
OI(O_TAGS, b2);
/* /*
* XXX * XXX
@@ -391,8 +382,7 @@ opts_init(SCR *sp, int *oargs)
*/ */
if ((v = (O_VAL(sp, O_LINES) - 1) / 2) == 0) if ((v = (O_VAL(sp, O_LINES) - 1) / 2) == 0)
v = 1; v = 1;
(void)SPRINTF(b2, SIZE(b2), L("scroll=%ld"), v); OI(O_SCROLL, L("scroll=%ld"), v);
OI(O_SCROLL, b2);
/* /*
* The default window option values are: * The default window option values are:
@@ -412,8 +402,7 @@ opts_init(SCR *sp, int *oargs)
else if ((v = O_VAL(sp, O_LINES) - 1) == 0) else if ((v = O_VAL(sp, O_LINES) - 1) == 0)
v = 1; v = 1;
(void)SPRINTF(b2, SIZE(b2), L("window=%lu"), v); OI(O_WINDOW, L("window=%lu"), v);
OI(O_WINDOW, b2);
/* /*
* Set boolean default values, and copy all settings into the default * Set boolean default values, and copy all settings into the default
+86
View File
@@ -0,0 +1,86 @@
#define O_ALTNOTATION 0
#define O_ALTWERASE 1
#define O_AUTOINDENT 2
#define O_AUTOPRINT 3
#define O_AUTOWRITE 4
#define O_BACKUP 5
#define O_BEAUTIFY 6
#define O_CDPATH 7
#define O_CEDIT 8
#define O_COLUMNS 9
#define O_COMBINED 10
#define O_COMMENT 11
#define O_TMPDIR 12
#define O_EDCOMPATIBLE 13
#define O_ERRORBELLS 14
#define O_ESCAPETIME 15
#define O_EXPANDTAB 16
#define O_EXRC 17
#define O_EXTENDED 18
#define O_FILEC 19
#define O_FILEENCODING 20
#define O_FLASH 21
#define O_HARDTABS 22
#define O_ICLOWER 23
#define O_IGNORECASE 24
#define O_INPUTENCODING 25
#define O_KEYTIME 26
#define O_LEFTRIGHT 27
#define O_LINES 28
#define O_LISP 29
#define O_LIST 30
#define O_LOCKFILES 31
#define O_MAGIC 32
#define O_MATCHCHARS 33
#define O_MATCHTIME 34
#define O_MESG 35
#define O_MODELINE 36
#define O_MSGCAT 37
#define O_NOPRINT 38
#define O_NUMBER 39
#define O_OCTAL 40
#define O_OPEN 41
#define O_OPTIMIZE 42
#define O_PARAGRAPHS 43
#define O_PATH 44
#define O_PRINT 45
#define O_PROMPT 46
#define O_READONLY 47
#define O_RECDIR 48
#define O_REDRAW 49
#define O_REMAP 50
#define O_REPORT 51
#define O_RULER 52
#define O_SCROLL 53
#define O_SEARCHINCR 54
#define O_SECTIONS 55
#define O_SECURE 56
#define O_SHELL 57
#define O_SHELLMETA 58
#define O_SHIFTWIDTH 59
#define O_SHOWFILENAME 60
#define O_SHOWMATCH 61
#define O_SHOWMODE 62
#define O_SIDESCROLL 63
#define O_SLOWOPEN 64
#define O_SOURCEANY 65
#define O_TABSTOP 66
#define O_TAGLENGTH 67
#define O_TAGS 68
#define O_TERM 69
#define O_TERSE 70
#define O_TILDEOP 71
#define O_TIMEOUT 72
#define O_TTYWERASE 73
#define O_VERBOSE 74
#define O_W1200 75
#define O_W300 76
#define O_W9600 77
#define O_WARN 78
#define O_WINDOW 79
#define O_WINDOWNAME 80
#define O_WRAPLEN 81
#define O_WRAPMARGIN 82
#define O_WRAPSCAN 83
#define O_WRITEANY 84
#define O_OPTIONCOUNT 85
+30 -16
View File
@@ -26,16 +26,16 @@
* put -- * put --
* Put text buffer contents into the file. * Put text buffer contents into the file.
* *
* PUBLIC: int put(SCR *, CB *, CHAR_T *, MARK *, MARK *, int); * PUBLIC: int put(SCR *, CB *, CHAR_T *, MARK *, MARK *, int, int);
*/ */
int int
put(SCR *sp, CB *cbp, CHAR_T *namep, MARK *cp, MARK *rp, int append) put(SCR *sp, CB *cbp, CHAR_T *namep, MARK *cp, MARK *rp, int append, int cnt)
{ {
CHAR_T name; CHAR_T name;
TEXT *ltp, *tp; TEXT *ltp, *tp;
recno_t lno; recno_t lno;
size_t blen, clen, len; size_t blen, clen, len;
int rval; int rval, i, isempty;
CHAR_T *bp, *t; CHAR_T *bp, *t;
CHAR_T *p; CHAR_T *p;
@@ -77,11 +77,16 @@ put(SCR *sp, CB *cbp, CHAR_T *namep, MARK *cp, MARK *rp, int append)
if (cp->lno == 1) { if (cp->lno == 1) {
if (db_last(sp, &lno)) if (db_last(sp, &lno))
return (1); return (1);
if (lno == 0) { if (lno == 0 && F_ISSET(cbp, CB_LMODE)) {
for (; tp != NULL; for (i = cnt; i > 0; i--) {
++lno, ++sp->rptlines[L_ADDED], tp = TAILQ_NEXT(tp, q)) for (; tp != NULL;
if (db_append(sp, 1, lno, tp->lb, tp->len)) ++lno, ++sp->rptlines[L_ADDED],
return (1); tp = TAILQ_NEXT(tp, q))
if (db_append(sp, 1, lno, tp->lb,
tp->len))
return (1);
tp = TAILQ_FIRST(cbp->textq);
}
rp->lno = 1; rp->lno = 1;
rp->cno = 0; rp->cno = 0;
return (0); return (0);
@@ -92,10 +97,14 @@ put(SCR *sp, CB *cbp, CHAR_T *namep, MARK *cp, MARK *rp, int append)
if (F_ISSET(cbp, CB_LMODE)) { if (F_ISSET(cbp, CB_LMODE)) {
lno = append ? cp->lno : cp->lno - 1; lno = append ? cp->lno : cp->lno - 1;
rp->lno = lno + 1; rp->lno = lno + 1;
for (; tp != NULL; for (i = cnt; i > 0; i--) {
++lno, ++sp->rptlines[L_ADDED], tp = TAILQ_NEXT(tp, q)) for (; tp != NULL;
if (db_append(sp, 1, lno, tp->lb, tp->len)) ++lno, ++sp->rptlines[L_ADDED],
return (1); tp = TAILQ_NEXT(tp, q))
if (db_append(sp, 1, lno, tp->lb, tp->len))
return (1);
tp = TAILQ_FIRST(cbp->textq);
}
rp->cno = 0; rp->cno = 0;
(void)nonblank(sp, rp->lno, &rp->cno); (void)nonblank(sp, rp->lno, &rp->cno);
return (0); return (0);
@@ -111,8 +120,11 @@ put(SCR *sp, CB *cbp, CHAR_T *namep, MARK *cp, MARK *rp, int append)
* Get the first line. * Get the first line.
*/ */
lno = cp->lno; lno = cp->lno;
if (db_get(sp, lno, DBG_FATAL, &p, &len)) if (db_eget(sp, lno, &p, &len, &isempty)) {
return (1); if (!isempty)
return (1);
len = 0;
}
GET_SPACE_RETW(sp, bp, blen, tp->len + len + 1); GET_SPACE_RETW(sp, bp, blen, tp->len + len + 1);
t = bp; t = bp;
@@ -126,8 +138,10 @@ put(SCR *sp, CB *cbp, CHAR_T *namep, MARK *cp, MARK *rp, int append)
/* First line from the CB. */ /* First line from the CB. */
if (tp->len != 0) { if (tp->len != 0) {
MEMCPY(t, tp->lb, tp->len); for (i = cnt; i > 0; i--) {
t += tp->len; MEMCPY(t, tp->lb, tp->len);
t += tp->len;
}
} }
/* Calculate length left in the original line. */ /* Calculate length left in the original line. */
+1 -1
View File
@@ -34,8 +34,8 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include "../ex/version.h"
#include "common.h" #include "common.h"
#include "version.h"
#include "pathnames.h" #include "pathnames.h"
/* /*
+2
View File
@@ -773,6 +773,7 @@ skip_srch: if (ecp->cmd == &cmds[C_VISUAL_EX] && F_ISSET(sp, SC_VI))
* no longer useful. * no longer useful.
*/ */
vi_address = ecp->clen != 0 && ecp->cp[0] != '\n'; vi_address = ecp->clen != 0 && ecp->cp[0] != '\n';
ecp->trailing = 0;
for (p = ecp->cp; ecp->clen > 0; --ecp->clen, ++ecp->cp) { for (p = ecp->cp; ecp->clen > 0; --ecp->clen, ++ecp->cp) {
ch = ecp->cp[0]; ch = ecp->cp[0];
if (IS_ESCAPE(sp, ecp, ch) && ecp->clen > 1) { if (IS_ESCAPE(sp, ecp, ch) && ecp->clen > 1) {
@@ -788,6 +789,7 @@ skip_srch: if (ecp->cmd == &cmds[C_VISUAL_EX] && F_ISSET(sp, SC_VI))
ch = tmp; ch = tmp;
} }
} else if (ch == '\n' || ch == '|') { } else if (ch == '\n' || ch == '|') {
ecp->trailing = 1;
if (ch == '\n') if (ch == '\n')
F_SET(ecp, E_NEWLINE); F_SET(ecp, E_NEWLINE);
--ecp->clen; --ecp->clen;
+3 -2
View File
@@ -99,7 +99,8 @@ struct _excmd {
#define AGV_GLOBAL 0x04 /* global command. */ #define AGV_GLOBAL 0x04 /* global command. */
#define AGV_V 0x08 /* v command. */ #define AGV_V 0x08 /* v command. */
#define AGV_ALL (AGV_AT | AGV_AT_NORANGE | AGV_GLOBAL | AGV_V) #define AGV_ALL (AGV_AT | AGV_AT_NORANGE | AGV_GLOBAL | AGV_V)
u_int8_t agv_flags; u_int8_t agv_flags : 4;
u_int8_t trailing : 1; /* Command had trailing | or \n. */
/* Clear the structure before each ex command. */ /* Clear the structure before each ex command. */
#define CLEAR_EX_CMD(cmdp) do { \ #define CLEAR_EX_CMD(cmdp) do { \
@@ -228,4 +229,4 @@ typedef enum {
} tagmsg_t; } tagmsg_t;
#include "ex_def.h" #include "ex_def.h"
#include "extern.h" #include "ex_extern.h"
+11 -10
View File
@@ -149,17 +149,15 @@ ex_aci(SCR *sp, EXCMD *cmdp, enum which cmd)
for (p = cmdp->save_cmd, for (p = cmdp->save_cmd,
len = cmdp->save_cmdlen; len > 0; p = t) { len = cmdp->save_cmdlen; len > 0; p = t) {
for (t = p; len > 0 && t[0] != '\n'; ++t, --len); for (t = p; len > 0 && t[0] != '\n'; ++t, --len);
if (t != p || len == 0) { if (F_ISSET(sp, SC_EX_GLOBAL) &&
if (F_ISSET(sp, SC_EX_GLOBAL) && t - p == 1 && p[0] == '.') {
t - p == 1 && p[0] == '.') { ++t;
++t; if (len > 0)
if (len > 0) --len;
--len; break;
break;
}
if (db_append(sp, 1, lno++, p, t - p))
return (1);
} }
if (db_append(sp, 1, lno++, p, t - p))
return (1);
if (len != 0) { if (len != 0) {
++t; ++t;
if (--len == 0 && if (--len == 0 &&
@@ -181,6 +179,9 @@ ex_aci(SCR *sp, EXCMD *cmdp, enum which cmd)
if (len != 0) if (len != 0)
cmdp->save_cmd = t; cmdp->save_cmd = t;
cmdp->save_cmdlen = len; cmdp->save_cmdlen = len;
} else if (cmdp->trailing) {
if (db_append(sp, 1, lno++, NULL, 0))
return 1;
} }
if (F_ISSET(sp, SC_EX_GLOBAL)) { if (F_ISSET(sp, SC_EX_GLOBAL)) {
+2 -2
View File
@@ -174,8 +174,8 @@ ex_bang(SCR *sp, EXCMD *cmdp)
if (!F_ISSET(sp, SC_VI) && !F_ISSET(sp, SC_EX_SILENT)) if (!F_ISSET(sp, SC_VI) && !F_ISSET(sp, SC_EX_SILENT))
(void)ex_puts(sp, "!\n"); (void)ex_puts(sp, "!\n");
/* Apply expandtab to the new text */ /* If addresses were specified, apply expandtab to the new text */
if (O_ISSET(sp, O_EXPANDTAB)) if (cmdp->addrcnt != 0 && O_ISSET(sp, O_EXPANDTAB))
ex_retab(sp, cmdp); ex_retab(sp, cmdp);
/* /*
+76
View File
@@ -0,0 +1,76 @@
#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
+1 -1
View File
@@ -57,7 +57,7 @@ ex_copy(SCR *sp, EXCMD *cmdp)
/* Put the text into place. */ /* Put the text into place. */
tm.lno = cmdp->lineno; tm.lno = cmdp->lineno;
tm.cno = 0; tm.cno = 0;
if (put(sp, &cb, NULL, &tm, &m, 1)) if (put(sp, &cb, NULL, &tm, &m, 1, 1))
rval = 1; rval = 1;
else { else {
/* /*
+1 -1
View File
@@ -38,7 +38,7 @@ ex_put(SCR *sp, EXCMD *cmdp)
m.cno = sp->cno; m.cno = sp->cno;
if (put(sp, NULL, if (put(sp, NULL,
FL_ISSET(cmdp->iflags, E_C_BUFFER) ? &cmdp->buffer : NULL, FL_ISSET(cmdp->iflags, E_C_BUFFER) ? &cmdp->buffer : NULL,
&cmdp->addr1, &m, 1)) &cmdp->addr1, &m, 1, 1))
return (1); return (1);
sp->lno = m.lno; sp->lno = m.lno;
sp->cno = m.cno; sp->cno = m.cno;
+6 -2
View File
@@ -79,8 +79,12 @@ shift(SCR *sp, EXCMD *cmdp, enum which rl)
return (0); return (0);
} }
/* Copy the lines being shifted into the unnamed buffer. */ /*
if (cut(sp, NULL, &cmdp->addr1, &cmdp->addr2, CUT_LINEMODE)) * When not doing re-expand tabs, copy the lines being shifted into
* the unnamed buffer.
*/
if (rl != RETAB &&
cut(sp, NULL, &cmdp->addr1, &cmdp->addr2, CUT_LINEMODE))
return (1); return (1);
/* /*
+131
View File
@@ -0,0 +1,131 @@
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 *);
+145
View File
@@ -0,0 +1,145 @@
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);
+16 -18
View File
@@ -41,15 +41,12 @@ v_Put(SCR *sp, VICMD *vp)
* Historic vi did not support a count with the 'p' and 'P' * Historic vi did not support a count with the 'p' and 'P'
* commands. It's useful, so we do. * commands. It's useful, so we do.
*/ */
for (cnt = F_ISSET(vp, VC_C1SET) ? vp->count : 1; cnt--;) { cnt = F_ISSET(vp, VC_C1SET) ? vp->count : 1;
if (put(sp, NULL, if (put(sp, NULL,
F_ISSET(vp, VC_BUFFER) ? &vp->buffer : NULL, F_ISSET(vp, VC_BUFFER) ? &vp->buffer : NULL,
&vp->m_start, &vp->m_final, 0)) &vp->m_start, &vp->m_final, 0, cnt))
return (1); return (1);
vp->m_start = vp->m_final;
if (INTERRUPTED(sp))
return (1);
}
return (0); return (0);
} }
@@ -71,16 +68,17 @@ v_put(SCR *sp, VICMD *vp)
* !!! * !!!
* Historic vi did not support a count with the 'p' and 'P' * Historic vi did not support a count with the 'p' and 'P'
* commands. It's useful, so we do. * commands. It's useful, so we do.
*
* The cursor placement of an individual 'p' and 'P' used to
* affect the content when a count is presented. Now we let
* the command implementation be count-aware instead.
*/ */
for (cnt = F_ISSET(vp, VC_C1SET) ? vp->count : 1; cnt--;) { cnt = F_ISSET(vp, VC_C1SET) ? vp->count : 1;
if (put(sp, NULL, if (put(sp, NULL,
F_ISSET(vp, VC_BUFFER) ? &vp->buffer : NULL, F_ISSET(vp, VC_BUFFER) ? &vp->buffer : NULL,
&vp->m_start, &vp->m_final, 1)) &vp->m_start, &vp->m_final, 1, cnt))
return (1); return (1);
vp->m_start = vp->m_final;
if (INTERRUPTED(sp))
return (1);
}
return (0); return (0);
} }
+1 -1
View File
@@ -381,4 +381,4 @@ typedef enum {
VIM_NOCOM, VIM_NOCOM_B, VIM_USAGE, VIM_WRESIZE VIM_NOCOM, VIM_NOCOM_B, VIM_USAGE, VIM_WRESIZE
} vim_t; } vim_t;
#include "extern.h" #include "vi_extern.h"
+31
View File
@@ -0,0 +1,31 @@
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);
+131
View File
@@ -0,0 +1,131 @@
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);
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 *, ...);
+1 -1
View File
@@ -1 +1 @@
#define VI_VERSION "2.2.1 (2023-09-25)" #define VI_VERSION "2.2.2 (2025-10-08)"
+131
View File
@@ -0,0 +1,131 @@
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 *);
-444
View File
@@ -1,444 +0,0 @@
#ifdef CL_IN_EX /* cl.h */
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);
#endif
#ifdef EXP /* ex.h */
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 *);
#endif
#ifdef V_ABS /* vi.h */
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);
#endif /* common.h */
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 *, ...);
-1
View File
@@ -1,4 +1,3 @@
/* Read standard system paths first. */ /* Read standard system paths first. */
#include <paths.h> #include <paths.h>
+1
View File
@@ -0,0 +1 @@
#define VI_VERSION "2.2.2 (2025-10-08)"
+145
View File
@@ -0,0 +1,145 @@
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);