VI: Add some debug instrumentation
This commit is contained in:
parent
e5a0a2fafb
commit
1b37cdf95a
@ -52,5 +52,19 @@ config SYSTEM_VI_DEBUGLEVEL
|
||||
readable debug output, syslog'ing should sent to some device other
|
||||
than /dev/console (which is the default).
|
||||
|
||||
endif
|
||||
if NSH_BUILTIN_APPS
|
||||
|
||||
config SYSTEM_VI_STACKSIZE
|
||||
int "Builtin task stack size"
|
||||
default 2048
|
||||
---help---
|
||||
Size of the task to configure when started VI from NSH
|
||||
|
||||
config SYSTEM_VI_PRIORITY
|
||||
int "Builtin task priority"
|
||||
default 100
|
||||
---help---
|
||||
Priority of the task to configure when started VI from NSH
|
||||
|
||||
endif # NSH_BUILTIN_APPS
|
||||
endif # SYSTEM_VI
|
||||
|
@ -44,9 +44,12 @@ endif
|
||||
# Hello Application
|
||||
# TODO: appname can be automatically extracted from the directory name
|
||||
|
||||
CONFIG_SYSTEM_VI_STACKSIZE ?= 2048
|
||||
CONFIG_SYSTEM_VI_PRIORITY ?= 100
|
||||
|
||||
APPNAME = vi
|
||||
PRIORITY = SCHED_PRIORITY_DEFAULT
|
||||
STACKSIZE = 1024
|
||||
PRIORITY = $(CONFIG_SYSTEM_VI_PRIORITY)
|
||||
STACKSIZE = $(CONFIG_SYSTEM_VI_STACKSIZE)
|
||||
|
||||
ASRCS =
|
||||
CSRCS = vi.c
|
||||
|
183
system/vi/vi.c
183
system/vi/vi.c
@ -16,6 +16,7 @@
|
||||
#include <ctype.h>
|
||||
#include <syslog.h>
|
||||
#include <errno.h>
|
||||
#include <debug.h>
|
||||
|
||||
#include <nuttx/ascii.h>
|
||||
#include <nuttx/vt100.h>
|
||||
@ -86,29 +87,34 @@
|
||||
|
||||
#ifdef CONFIG_CPP_HAVE_VARARGS
|
||||
# if CONFIG_SYSTEM_VI_DEBUGLEVEL > 0
|
||||
# define inidbg(format, arg...) \
|
||||
# define vidbg(format, arg...) \
|
||||
syslog(EXTRA_FMT format EXTRA_ARG, ##arg)
|
||||
# define vvidbg(format, ap) \
|
||||
vsyslog(format, ap)
|
||||
# else
|
||||
# define inidbg(x...)
|
||||
# define vidbg(x...)
|
||||
# define vvidbg(x...)
|
||||
# endif
|
||||
|
||||
# if CONFIG_SYSTEM_VI_DEBUGLEVEL > 1
|
||||
# define inivdbg(format, arg...) \
|
||||
# define vivdbg(format, arg...) \
|
||||
syslog(EXTRA_FMT format EXTRA_ARG, ##arg)
|
||||
# else
|
||||
# define inivdbg(x...)
|
||||
# define vivdbg(x...)
|
||||
# endif
|
||||
#else
|
||||
# if CONFIG_SYSTEM_VI_DEBUGLEVEL > 0
|
||||
# define inidbg syslog
|
||||
# define vidbg syslog
|
||||
# define vvidbg vsyslog
|
||||
# else
|
||||
# define inidbg (void)
|
||||
# define vidbg (void)
|
||||
# define vvidbg (void)
|
||||
# endif
|
||||
|
||||
# if CONFIG_SYSTEM_VI_DEBUGLEVEL > 1
|
||||
# define inivdbg syslog
|
||||
# define vivdbg syslog
|
||||
# else
|
||||
# define inivdbg (void)
|
||||
# define vivdbg (void)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@ -265,8 +271,8 @@ static void vi_shrinktext(FAR struct vi_s *vi, off_t pos, size_t size);
|
||||
/* File access */
|
||||
|
||||
static bool vi_insertfile(FAR struct vi_s *vi, FAR char *filename);
|
||||
static bool vi_savetext(FAR struct vi_s *vi, FAR char *filename, int pos,
|
||||
int size);
|
||||
static bool vi_savetext(FAR struct vi_s *vi, FAR char *filename,
|
||||
off_t pos, size_t size);
|
||||
static bool vi_checkfile(FAR struct vi_s *vi, FAR char *filename);
|
||||
|
||||
/* Mode management */
|
||||
@ -372,6 +378,8 @@ static void vi_write(FAR struct vi_s *vi, FAR const char *buffer,
|
||||
ssize_t nwritten;
|
||||
size_t nremaining = buflen;
|
||||
|
||||
vivdbg("buffer=%p buflen=%d\n", buffer, (int)buflen);
|
||||
|
||||
/* Loop until all bytes have been successuflly written (or until a
|
||||
* un-recoverable error is encountered)
|
||||
*/
|
||||
@ -468,6 +476,7 @@ static char vi_getch(FAR struct vi_s *vi)
|
||||
|
||||
/* On success, return the character that was read */
|
||||
|
||||
vivdbg("Returning: %c[%02x]\n", isprint(buffer) ? buffer : '.', buffer);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@ -512,6 +521,7 @@ static void vi_boldon(FAR struct vi_s *vi)
|
||||
static void vi_reverseon(FAR struct vi_s *vi)
|
||||
{
|
||||
/* Send the VT100 REVERSON command */
|
||||
|
||||
vi_write(vi, g_reverseon, sizeof(g_reverseon));
|
||||
}
|
||||
|
||||
@ -610,6 +620,8 @@ static void vi_clrscreen(FAR struct vi_s *vi)
|
||||
|
||||
static void vi_scrollup(FAR struct vi_s *vi, uint16_t nlines)
|
||||
{
|
||||
vivdbg("nlines=%d\n", nlines);
|
||||
|
||||
/* Scroll for the specified number of lines */
|
||||
|
||||
for (; nlines; nlines--)
|
||||
@ -630,6 +642,8 @@ static void vi_scrollup(FAR struct vi_s *vi, uint16_t nlines)
|
||||
|
||||
static void vi_scrolldown(FAR struct vi_s *vi, uint16_t nlines)
|
||||
{
|
||||
vivdbg("nlines=%d\n", nlines);
|
||||
|
||||
/* Scroll for the specified number of lines */
|
||||
|
||||
for (; nlines; nlines--)
|
||||
@ -670,6 +684,7 @@ static void vi_error(FAR struct vi_s *vi, FAR const char *fmt, ...)
|
||||
|
||||
va_start(ap, fmt);
|
||||
len += vsnprintf(vi->scratch + len, SCRATCH_BUFSIZE - len, fmt, ap);
|
||||
vvidbg(fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
/* Write the error message to the display in reverse text */
|
||||
@ -715,6 +730,7 @@ static off_t vi_linebegin(FAR struct vi_s *vi, off_t pos)
|
||||
pos--;
|
||||
}
|
||||
|
||||
vivdbg("Return pos=%ld\n", (long)pos);
|
||||
return pos;
|
||||
}
|
||||
|
||||
@ -732,11 +748,17 @@ static off_t vi_prevline(FAR struct vi_s *vi, off_t pos)
|
||||
|
||||
pos = vi_linebegin(vi, pos);
|
||||
|
||||
/* If this not the first line, then back up one more character to position
|
||||
/* If this not the first line, then back up one more character to position
|
||||
* at the last byte of the previous line.
|
||||
*/
|
||||
|
||||
return pos > 0 ? vi_linebegin(vi, pos - 1) : 0;
|
||||
if (pos > 0)
|
||||
{
|
||||
pos = vi_linebegin(vi, pos - 1);
|
||||
}
|
||||
|
||||
vivdbg("Return pos=%ld\n", (long)pos);
|
||||
return pos;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@ -758,6 +780,7 @@ static off_t vi_lineend(FAR struct vi_s *vi, off_t pos)
|
||||
pos++;
|
||||
}
|
||||
|
||||
vivdbg("Return pos=%ld\n", (long)pos);
|
||||
return pos;
|
||||
}
|
||||
|
||||
@ -779,7 +802,13 @@ static off_t vi_nextline(FAR struct vi_s *vi, off_t pos)
|
||||
* for position of the first byte of the next line.
|
||||
*/
|
||||
|
||||
return pos < vi->textsize ? pos + 1 : pos;
|
||||
if (pos < vi->textsize)
|
||||
{
|
||||
pos++;
|
||||
}
|
||||
|
||||
vivdbg("Return pos=%ld\n", (long)pos);
|
||||
return pos;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@ -800,6 +829,8 @@ static bool vi_extendtext(FAR struct vi_s *vi, off_t pos, size_t increment)
|
||||
FAR char *alloc;
|
||||
int i;
|
||||
|
||||
vivdbg("pos=%ld increment=%ld\n", (long)pos, (long)increment);
|
||||
|
||||
/* Check if we need to reallocate */
|
||||
|
||||
if (!vi->text || vi->textsize + increment > vi->txtalloc)
|
||||
@ -857,6 +888,9 @@ static bool vi_extendtext(FAR struct vi_s *vi, off_t pos, size_t increment)
|
||||
|
||||
static void vi_shrinkpos(off_t delpos, size_t delsize, FAR off_t *pos)
|
||||
{
|
||||
vivdbg("delpos=%ld delsize=%ld pos=%ld\n",
|
||||
(long)delpos, (long)delsize, (long)*pos);
|
||||
|
||||
/* Check if the position is beyond the deleted region */
|
||||
|
||||
if (*pos > delpos + delsize)
|
||||
@ -892,6 +926,8 @@ static void vi_shrinktext(FAR struct vi_s *vi, off_t pos, size_t size)
|
||||
size_t allocsize;
|
||||
int i;
|
||||
|
||||
vivdbg("pos=%ld size=%ld\n", (long)pos, (long)size);
|
||||
|
||||
/* Close up the gap to remove 'size' characters at 'pos' */
|
||||
|
||||
for (i = pos + size; i < vi->textsize; i++)
|
||||
@ -947,6 +983,8 @@ static bool vi_insertfile(FAR struct vi_s *vi, FAR char *filename)
|
||||
int result;
|
||||
bool ret;
|
||||
|
||||
vivdbg("filename=\"%s\"\n", filename);
|
||||
|
||||
/* Get the size of the file */
|
||||
|
||||
result = stat(filename, &buf);
|
||||
@ -1010,12 +1048,15 @@ static bool vi_insertfile(FAR struct vi_s *vi, FAR char *filename)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static bool vi_savetext(FAR struct vi_s *vi, FAR char *filename, int pos,
|
||||
int size)
|
||||
static bool vi_savetext(FAR struct vi_s *vi, FAR char *filename, off_t pos,
|
||||
size_t size)
|
||||
{
|
||||
FILE *stream;
|
||||
size_t nwritten;
|
||||
|
||||
vivdbg("filename=\"%s\" pos=%ld size=%ld\n",
|
||||
filename, (long)pos, (long)size);
|
||||
|
||||
/* Open the file for writing */
|
||||
|
||||
stream = fopen(filename, "w");
|
||||
@ -1055,6 +1096,8 @@ static bool vi_checkfile(FAR struct vi_s *vi, FAR char *filename)
|
||||
struct stat buf;
|
||||
int ret;
|
||||
|
||||
vivdbg("filename=\"%s\"\n", filename);
|
||||
|
||||
/* Get the size of the file */
|
||||
|
||||
ret = stat(filename, &buf);
|
||||
@ -1095,6 +1138,8 @@ static bool vi_checkfile(FAR struct vi_s *vi, FAR char *filename)
|
||||
|
||||
static void vi_setmode(FAR struct vi_s *vi, uint8_t mode, long value)
|
||||
{
|
||||
vivdbg("mode=%d value=%ld\n", mode, value);
|
||||
|
||||
/* Set the mode and clear mode-dependent states that are not preserved
|
||||
* across mode changes.
|
||||
*/
|
||||
@ -1120,6 +1165,8 @@ static void vi_setmode(FAR struct vi_s *vi, uint8_t mode, long value)
|
||||
static void vi_setsubmode(FAR struct vi_s *vi, uint8_t mode, char prompt,
|
||||
long value)
|
||||
{
|
||||
vivdbg("mode=%d prompt='%c' value=%ld\n", mode, prompt, value);
|
||||
|
||||
/* Set up the new mode */
|
||||
|
||||
vi_setmode(vi, mode, value);
|
||||
@ -1156,6 +1203,8 @@ static void vi_setsubmode(FAR struct vi_s *vi, uint8_t mode, char prompt,
|
||||
|
||||
static void vi_exitsubmode(FAR struct vi_s *vi, uint8_t mode)
|
||||
{
|
||||
vivdbg("mode=%d\n", mode);
|
||||
|
||||
/* Set up the new mode */
|
||||
|
||||
vi_setmode(vi, mode, 0);
|
||||
@ -1184,6 +1233,8 @@ static uint16_t vi_wincolumn(FAR struct vi_s *vi, off_t start, off_t end)
|
||||
uint16_t column;
|
||||
off_t offset;
|
||||
|
||||
vivdbg("start=%ld end=%ld\n", (long)start, (long)end);
|
||||
|
||||
/* Make sure that the end position is not beyond the end of the text. We
|
||||
* assume that the start position is okay.
|
||||
*/
|
||||
@ -1364,6 +1415,8 @@ static void vi_scrollcheck(FAR struct vi_s *vi)
|
||||
*/
|
||||
|
||||
vi->prevpos = vi->winpos;
|
||||
vivdbg("winpos=%ld hscroll=%d\n",
|
||||
(long)vi->winpos, (long)vi->hscroll);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@ -1510,6 +1563,8 @@ static void vi_cusorup(FAR struct vi_s *vi, int nlines)
|
||||
off_t end;
|
||||
off_t pos;
|
||||
|
||||
vivdbg("nlines=%d\n", nlines);
|
||||
|
||||
/* How many lines do we need to move? Zero means 1 (so does 1) */
|
||||
|
||||
remaining = (nlines == 0 ? 1 : nlines);
|
||||
@ -1543,6 +1598,8 @@ static void vi_cursordown(FAR struct vi_s *vi, int nlines)
|
||||
off_t start;
|
||||
off_t end;
|
||||
|
||||
vivdbg("nlines=%d\n", nlines);
|
||||
|
||||
/* How many lines do we need to move? Zero means 1 (so does 1) */
|
||||
|
||||
remaining = (nlines == 0 ? 1 : nlines);
|
||||
@ -1578,9 +1635,11 @@ static void vi_cursordown(FAR struct vi_s *vi, int nlines)
|
||||
|
||||
static off_t vi_cursorleft(FAR struct vi_s *vi, off_t curpos, int ncolumns)
|
||||
{
|
||||
int remaining = ncolumns < 1 ? 1 : ncolumns;
|
||||
int remaining;
|
||||
|
||||
for (;
|
||||
vivdbg("curpos=%ld ncolumns=%d\n", curpos, ncolumns);
|
||||
|
||||
for (remaining = ncolumns < 1 ? 1 : ncolumns;
|
||||
curpos > 0 && remaining > 0 && vi->text[curpos] != '\n';
|
||||
curpos--, remaining--);
|
||||
|
||||
@ -1599,9 +1658,11 @@ static off_t vi_cursorleft(FAR struct vi_s *vi, off_t curpos, int ncolumns)
|
||||
|
||||
static off_t vi_cursorright(FAR struct vi_s *vi, off_t curpos, int ncolumns)
|
||||
{
|
||||
int remaining = ncolumns < 1 ? 1 : ncolumns;
|
||||
int remaining;
|
||||
|
||||
for (;
|
||||
vivdbg("curpos=%ld ncolumns=%d\n", curpos, ncolumns);
|
||||
|
||||
for (remaining = ncolumns < 1 ? 1 : ncolumns;
|
||||
curpos < vi->textsize && remaining > 0 && vi->text[curpos] != '\n';
|
||||
curpos++, remaining--);
|
||||
|
||||
@ -1618,8 +1679,13 @@ static off_t vi_cursorright(FAR struct vi_s *vi, off_t curpos, int ncolumns)
|
||||
|
||||
static void vi_delforward(FAR struct vi_s *vi)
|
||||
{
|
||||
off_t end = vi_cursorright(vi, vi->curpos, vi->value);
|
||||
size_t size = end - vi->curpos - 1;
|
||||
off_t end;
|
||||
size_t size;
|
||||
|
||||
vivdbg("curpos=%ld value=%ld\n", (long)vi->curpos, vi->value);
|
||||
|
||||
end = vi_cursorright(vi, vi->curpos, vi->value);
|
||||
size = end - vi->curpos - 1;
|
||||
vi_shrinktext(vi, vi->curpos, size);
|
||||
}
|
||||
|
||||
@ -1633,9 +1699,15 @@ static void vi_delforward(FAR struct vi_s *vi)
|
||||
|
||||
static void vi_delbackward(FAR struct vi_s *vi)
|
||||
{
|
||||
off_t start = vi_cursorleft(vi, vi->curpos, 1);
|
||||
off_t end = vi_cursorleft(vi, start, vi->value);
|
||||
size_t size = end - start - 1;
|
||||
off_t start;
|
||||
off_t end;
|
||||
size_t size;
|
||||
|
||||
vivdbg("curpos=%ld value=%ld\n", (long)vi->curpos, vi->value);
|
||||
|
||||
start = vi_cursorleft(vi, vi->curpos, 1);
|
||||
end = vi_cursorleft(vi, start, vi->value);
|
||||
size = end - start - 1;
|
||||
vi_shrinktext(vi, start, size);
|
||||
}
|
||||
|
||||
@ -1663,6 +1735,8 @@ static void vi_yank(FAR struct vi_s *vi)
|
||||
|
||||
nlines = (vi->value > 0 ? vi->value : 1);
|
||||
|
||||
vivdbg("start=%ld nlines=%d\n", (long)start, nlines);
|
||||
|
||||
/* Search ahead to find the end of the last line to yank */
|
||||
|
||||
for (next = start; nlines > 1; nlines--)
|
||||
@ -1713,6 +1787,8 @@ static void vi_paste(FAR struct vi_s *vi)
|
||||
{
|
||||
off_t start;
|
||||
|
||||
vivdbg("curpos=%ld yankalloc=%d\n", (long)vi->curpos, (long)vi->yankalloc);
|
||||
|
||||
/* Make sure there is something to be yanked */
|
||||
|
||||
if (!vi->yank || vi->yankalloc <= 0)
|
||||
@ -1755,6 +1831,8 @@ static void vi_paste(FAR struct vi_s *vi)
|
||||
|
||||
static void vi_gotoline(FAR struct vi_s *vi)
|
||||
{
|
||||
vivdbg("curpos=%ld value=%ld\n", (long)vi->curpos, vi->value);
|
||||
|
||||
/* Special case the first line */
|
||||
|
||||
if (vi->value == 1)
|
||||
@ -1800,6 +1878,8 @@ static void vi_cmd_mode(FAR struct vi_s *vi)
|
||||
{
|
||||
int ch;
|
||||
|
||||
vivdbg("Enter command mode\n");
|
||||
|
||||
/* Loop while we are in command mode */
|
||||
|
||||
while (vi->mode == MODE_COMMAND)
|
||||
@ -1846,6 +1926,8 @@ static void vi_cmd_mode(FAR struct vi_s *vi)
|
||||
/* Update the command repetition count */
|
||||
|
||||
vi->value = tmp;
|
||||
|
||||
vivdbg("Value=%ld\n", vi->value);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -2080,6 +2162,8 @@ static void vi_cmdch(FAR struct vi_s *vi, char ch)
|
||||
int index = vi->cmdlen;
|
||||
int next = index + 1;
|
||||
|
||||
vivdbg("cmdlen=%d ch=%c[%02x]\n", vi->cmdlen, isprint(ch) ? ch : '.', ch);
|
||||
|
||||
/* Abort gracelessly if the scratch buffer becomes full */
|
||||
|
||||
if (next >= SCRATCH_BUFSIZE)
|
||||
@ -2112,6 +2196,8 @@ static void vi_cmdch(FAR struct vi_s *vi, char ch)
|
||||
|
||||
static void vi_cmdbackspace(FAR struct vi_s *vi)
|
||||
{
|
||||
vivdbg("cmdlen=%d\n", vi->cmdlen);
|
||||
|
||||
if (vi->cmdlen > 0)
|
||||
{
|
||||
vi_setcursor(vi, vi->display.row - 1, vi->cmdlen);
|
||||
@ -2151,6 +2237,8 @@ static void vi_parsecolon(FAR struct vi_s *vi)
|
||||
int lastch = 0;
|
||||
int col;
|
||||
|
||||
vivdbg("Parse: \"%s\"\n", vi->scratch);
|
||||
|
||||
/* NUL terminate the command */
|
||||
|
||||
vi->scratch[vi->cmdlen] = '\0';
|
||||
@ -2223,6 +2311,9 @@ static void vi_parsecolon(FAR struct vi_s *vi)
|
||||
* then we have to check if the file exists.
|
||||
*/
|
||||
|
||||
vivdbg("dowrite=%d forcewrite=%d filename=\"%s\"\n",
|
||||
dowrite, forcewrite, filename ? filename : vi->filename);
|
||||
|
||||
if (dowrite && filename && !forcewrite && vi_checkfile(vi, vi->filename))
|
||||
{
|
||||
vi_error(vi, g_fmtfileexists);
|
||||
@ -2234,6 +2325,9 @@ static void vi_parsecolon(FAR struct vi_s *vi)
|
||||
* force quitting in this case.
|
||||
*/
|
||||
|
||||
vivdbg("doquit=%d forcequit=%d modified=%d\n",
|
||||
doquit, forcequit, vi->modified);
|
||||
|
||||
if (doquit && vi->modified && !forcequit)
|
||||
{
|
||||
vi_error(vi, g_fmtmodified);
|
||||
@ -2243,6 +2337,9 @@ static void vi_parsecolon(FAR struct vi_s *vi)
|
||||
|
||||
/* Are we now commit to writing the file? */
|
||||
|
||||
vivdbg("dowrite=%d filename=\"%s modified=%d\n",
|
||||
dowrite, filename ? filename : vi->filename, vi->modified);
|
||||
|
||||
if (dowrite)
|
||||
{
|
||||
/* If we are writing to a new file, then we need to copy the filename
|
||||
@ -2257,7 +2354,7 @@ static void vi_parsecolon(FAR struct vi_s *vi)
|
||||
* terminated
|
||||
*/
|
||||
|
||||
vi->filename[MAX_STRING - 1] = 0;
|
||||
vi->filename[MAX_STRING - 1] = '\0';
|
||||
}
|
||||
|
||||
/* If it is not a new file and if there are no changes to the text
|
||||
@ -2282,6 +2379,8 @@ static void vi_parsecolon(FAR struct vi_s *vi)
|
||||
|
||||
/* Are we committed to exit-ing? */
|
||||
|
||||
vivdbg("doquit=%d\n", doquit);
|
||||
|
||||
if (doquit)
|
||||
{
|
||||
/* Yes... free resources and exit */
|
||||
@ -2307,6 +2406,8 @@ static void vi_cmd_submode(FAR struct vi_s *vi)
|
||||
{
|
||||
int ch;
|
||||
|
||||
vivdbg("Enter colon command sub-mode\n");
|
||||
|
||||
/* Loop while we are in colon command mode */
|
||||
|
||||
while (vi->mode == SUBMODE_COLON)
|
||||
@ -2404,6 +2505,8 @@ static bool vi_findstring(FAR struct vi_s *vi)
|
||||
off_t pos;
|
||||
int len;
|
||||
|
||||
vivdbg("findstr: \"%s\"\n", vi->findstr);
|
||||
|
||||
/* The search string is in the find buffer */
|
||||
|
||||
len = strlen(vi->findstr);
|
||||
@ -2450,19 +2553,27 @@ static bool vi_findstring(FAR struct vi_s *vi)
|
||||
|
||||
static void vi_parsefind(FAR struct vi_s *vi)
|
||||
{
|
||||
/* Make certain that the scratch buffer contents are NUL terminated */
|
||||
|
||||
vi->scratch[vi->cmdlen] = '\0';
|
||||
|
||||
/* Is there anything in the scratch buffer? If not, then we will use the
|
||||
* string from the previous find operation.
|
||||
*/
|
||||
|
||||
vivdbg("scratch: \"%s\"\n", vi->scratch);
|
||||
|
||||
if (vi->cmdlen > 0)
|
||||
{
|
||||
/* Copy the new search string from the scratch to the find buffer */
|
||||
|
||||
memcpy(vi->findstr, vi->scratch, vi->cmdlen);
|
||||
strncpy(vi->findstr, vi->scratch, MAX_STRING - 1);
|
||||
|
||||
/* Make certain that it is NUL terminated */
|
||||
/* Make sure that the (possibly truncated) search string is NUL
|
||||
* terminated
|
||||
*/
|
||||
|
||||
vi->findstr[vi->cmdlen] = '\0';
|
||||
vi->findstr[MAX_STRING - 1] = '\0';
|
||||
}
|
||||
|
||||
/* Then attempt to find the string */
|
||||
@ -2486,6 +2597,8 @@ static void vi_find_submode(FAR struct vi_s *vi)
|
||||
{
|
||||
int ch;
|
||||
|
||||
vivdbg("Enter find sub-mode\n");
|
||||
|
||||
/* Loop while we are in find mode */
|
||||
|
||||
while (vi->mode == SUBMODE_FIND)
|
||||
@ -2580,6 +2693,8 @@ static void vi_find_submode(FAR struct vi_s *vi)
|
||||
|
||||
static void vi_replacech(FAR struct vi_s *vi, char ch)
|
||||
{
|
||||
vivdbg("curpos=%ld ch=%c[%02x]\n", vi->curpos, isprint(ch) ? ch : '.', ch);
|
||||
|
||||
/* Is there a newline at the current cursor position? */
|
||||
|
||||
if (vi->text[vi->curpos] == '\n')
|
||||
@ -2615,6 +2730,8 @@ static void vi_replacech_submode(FAR struct vi_s *vi)
|
||||
|
||||
nchars = (vi->value > 0 ? vi->value : 1);
|
||||
|
||||
vivdbg("Enter replaces character(s) sub-mode: nchars=%d\n", nchars);
|
||||
|
||||
/* Are there that many characters left on the line to be replaced? */
|
||||
|
||||
end = vi_lineend(vi, vi->curpos);
|
||||
@ -2721,6 +2838,8 @@ static void vi_replacech_submode(FAR struct vi_s *vi)
|
||||
|
||||
static void vi_insertch(FAR struct vi_s *vi, char ch)
|
||||
{
|
||||
vivdbg("curpos=%ld ch=%c[%02x]\n", vi->curpos, isprint(ch) ? ch : '.', ch);
|
||||
|
||||
/* Make space in the buffer for the new character */
|
||||
|
||||
if (vi_extendtext(vi, vi->curpos, 1))
|
||||
@ -2743,6 +2862,8 @@ static void vi_insert_mode(FAR struct vi_s *vi)
|
||||
{
|
||||
int ch;
|
||||
|
||||
vivdbg("Enter insert mode\n");
|
||||
|
||||
/* Loop while we are in insert mode */
|
||||
|
||||
while (vi->mode == MODE_INSERT)
|
||||
@ -2856,6 +2977,8 @@ static void vi_replace_mode(FAR struct vi_s *vi)
|
||||
off_t start = vi->curpos;
|
||||
int ch;
|
||||
|
||||
vivdbg("Enter replace mode\n");
|
||||
|
||||
/* Loop until ESC is pressed */
|
||||
|
||||
while (vi->mode == MODE_REPLACE)
|
||||
@ -3112,7 +3235,7 @@ int vi_main(int argc, char **argv)
|
||||
|
||||
/* Make sure that the (possibly truncated) file name is NUL terminated */
|
||||
|
||||
vi->filename[MAX_STRING - 1] = 0;
|
||||
vi->filename[MAX_STRING - 1] = '\0';
|
||||
|
||||
/* Load the file into memory */
|
||||
|
||||
@ -3135,6 +3258,8 @@ int vi_main(int argc, char **argv)
|
||||
{
|
||||
/* We loop, processing each mode change */
|
||||
|
||||
vivdbg("mode=%d\n", vi->mode);
|
||||
|
||||
switch (vi->mode)
|
||||
{
|
||||
default:
|
||||
|
Loading…
x
Reference in New Issue
Block a user