1
0
Fork 0
mirror of https://github.com/vbatts/bvi.git synced 2025-08-02 15:40:28 +00:00

Compare commits

...

2 commits

Author SHA1 Message Date
Gerhard Bürgmann
50898d8d59
bvi-1.5.0.src.tar.gz
6540716a1a3b2b9711635108da14b26baea488881d4a682121c0bddbba6b74cb  bvi-1.5.0.src.tar.gz

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2025-07-30 10:02:07 -04:00
Gerhard Bürgmann
75fc14b579 bvi-1.4.2.src.tar.gz
4bba16c2b496963a9b939336c0abcc8d488664492080ae43a86da18cf4ce94f2  bvi-1.4.2.src.tar.gz

https://bvi.sourceforge.net/download.html
2025-03-02 10:44:16 -05:00
31 changed files with 3491 additions and 2307 deletions

38
CHANGES
View file

@ -1,3 +1,33 @@
New in release 1.5.0
====================
* Terminal window resizeable
* fix build fails with gcc-15/C23
* fix statusline for small windows
* various issues caught by lintian solved
* fix old-style-definition warnings
* Minor fixes
New in release 1.4.2
====================
This release is dedicated to Sven Guckes (*1967-04-06 +2022-02-20).
Sven was an enthusiastic Linux explainer, his particular passion was the console tools.
I met Sven a couple of times. He always showed interest in the further development of
the bvi and liked to discuss new ideas.
R.I.P. Sven
* :wq bug fixed
* Error-message if input no terminal
* Mixed licenses (SF bug #10)
* Segmentation fault occurs on undo (SF bug #11)
* Segmentation fault occurs on substitution in 32-bit systems (SF bug #12)
* ncursesw support
* Handling inputs larger than 2^31 bytes (SF bug #13)
* Some incorrect function prototypes in ANSI mode fixed (SF bug #14)
* Minor fixes
New in release 1.4.1 New in release 1.4.1
==================== ====================
@ -10,7 +40,7 @@ New in release 1.4.1rc
* Compile warning: implicit declaration of function save_chk fixed (SF bug #9) * Compile warning: implicit declaration of function save_chk fixed (SF bug #9)
* bmore seg fault on file not found fixed * bmore seg fault on file not found fixed
* set columns prevents filename display on the commandline fixed (SF bug #8) * set columns prevents filename display on the commandline fixed (SF bug #8)
* bmore new option -r * bmore new option -r
bvi new setting: set reverse bvi new setting: set reverse
Characters between 160 - 254 are displayed as "reverse video text" as used in Characters between 160 - 254 are displayed as "reverse video text" as used in
some legacy systems (Atari, Commodore, Apple II, etc). some legacy systems (Atari, Commodore, Apple II, etc).
@ -109,9 +139,9 @@ New in release 1.3.0
* Reading of Block Special Files * Reading of Block Special Files
* New Command line options: * New Command line options:
+cmd +cmd
-b begin \ -b begin \
-e end > for partial file read -e end > for partial file read
-s size / -s size /
* :e# bug fixed * :e# bug fixed
* Debian bug #68436 (Buffer overflow in io.c) fixed * Debian bug #68436 (Buffer overflow in io.c) fixed

10
CREDITS
View file

@ -1,7 +1,7 @@
Patches: Patches:
Guido <guido@bearix.oche.de> sys_errlist Etienne Mollier <emollier@debian.org> gcc-15/C23 issues
Christian "naddy" Weisgerber <naddy@mips.rhein-neckar.de> {Free,Open}BSD Matthias Klose <doko@debian.org> GCC-15 issues
Gunnar Larisch <la@softing.com> ^ZZ bug Vincent Batts <vbatts@hashbangbash.com> nit cleanup
Peter J. Holzer <hjp@wsr.ac.at> setlocale Peter J. Holzer <hjp@wsr.ac.at> setlocale
Albert Chin-A-Young <china@thewrittenword.com> Makefile.in Albert Chin-A-Young <china@thewrittenword.com> Makefile.in
Ralf <rks@ffm.tc.iot.dtag.de> AIX fixes Ralf <rks@ffm.tc.iot.dtag.de> AIX fixes
@ -22,6 +22,10 @@ Josef Hinteregger <joehtg@joehtg.co.at> ZZ write bug, lfs
Richard Yao <ryao@gentoo.org> Buffer overflow at terminals > 255, ncurses with tinfo, configure fixed Richard Yao <ryao@gentoo.org> Buffer overflow at terminals > 255, ncurses with tinfo, configure fixed
<elo3456@sbcglobal.net> ~ operator dumps core <elo3456@sbcglobal.net> ~ operator dumps core
Dave Keaton <davek@gmail.com> ASCII_DEL patch Dave Keaton <davek@gmail.com> ASCII_DEL patch
Udo Hertrich-Jeromin <udo.hertrich-jeromin@tuwien.ac.at> ncursesw for tinycorelinux
Takashi Yano Segmentation fault occurs on undo, Segmentation fault occurs on substitution in 32-bit systems
Dominik Köppl <dkppl@dkppl.de> Handling inputs larger than 2^31 bytes
Christopher Head Some incorrect function prototypes in ANSI mode
Packages: Packages:

View file

@ -6,9 +6,9 @@
# "autoconf" program (constructs like "@foo@" will get replaced in the # "autoconf" program (constructs like "@foo@" will get replaced in the
# actual Makefile. # actual Makefile.
# #
# Copyright (c) 1996-2019 by Gerhard Buergmann # Copyright (c) 1996-2022 by Gerhard Buergmann
# gerhard@puon.at # gerhard@puon.at
# #
# 1996-01-18 V 1.0.0 # 1996-01-18 V 1.0.0
# 1999-01-15 V 1.1.0 # 1999-01-15 V 1.1.0
# 1999-03-03 V 1.1.1 # 1999-03-03 V 1.1.1
@ -18,6 +18,7 @@
# 2003-07-03 V 1.3.2 # 2003-07-03 V 1.3.2
# 2014-10-01 V 1.4.0 # 2014-10-01 V 1.4.0
# 2019-01-30 V 1.4.1 # 2019-01-30 V 1.4.1
# 2022-02-08 V 1.4.2
# #
############################################### ###############################################
@ -55,7 +56,7 @@ all: bvi bmore
bvi: $(OBJS) $(HEADER) bvi: $(OBJS) $(HEADER)
$(CC) $(LDFLAGS) -o bvi $(OBJS) $(LIBS) $(CC) $(LDFLAGS) -o bvi $(OBJS) $(LIBS)
bmore: $(BMOBJ) bmore: $(BMOBJ) bmore.h
$(CC) $(LDFLAGS) -o bmore $(BMOBJ) $(LIBS) $(CC) $(LDFLAGS) -o bmore $(BMOBJ) $(LIBS)
%.o: %.c $(INCLUDES) %.o: %.c $(INCLUDES)

16
README
View file

@ -1,6 +1,6 @@
BVI - Binary visual editor BVI - Binary visual editor
========================== ==========================
http://bvi.sourceforge.net/ https/bvi.sourceforge.net/
This editor for binary files was written by Gerhard Buergmann This editor for binary files was written by Gerhard Buergmann
and is distributed under the GPL (GNU Public License). and is distributed under the GPL (GNU Public License).
@ -9,12 +9,12 @@ and is distributed under the GPL (GNU Public License).
How to compile How to compile
============== ==============
You need the curses (ncurses) library for cursor movement on your system. You need the curses (ncurses) library for cursor movement on your system.
https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/ https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/
gunzip -c bvi-1.4.1.src.tar.gz | tar xvf - gunzip -c bvi-1.5.0.src.tar.gz | tar xvf -
cd bvi-1.4.1 cd bvi-1.5.0
./configure ./configure
make make
make install make install
@ -32,14 +32,6 @@ To avoid this behaviour use:
stty dsusp undef stty dsusp undef
---------------------------------------------------------------------------
Subscribe to the bvi mailing for support, updates and other news:
Send a blank email to bvi-subscribe@yahoogroups.com. You will receive a
subscription confirmation message. Simply reply this message and your
subscription will be complete.
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
PLEASE send any bug reports (and fixes), code for new features, PLEASE send any bug reports (and fixes), code for new features,
comments, questions, etc. (even flames) to: comments, questions, etc. (even flames) to:

View file

@ -4,8 +4,10 @@
#undef HAVE_CURSES_H #undef HAVE_CURSES_H
#undef HAVE_NCURSESW_CURSES_H
#undef NO_SYSERRL #undef NO_SYSERRL
#undef NEED_PUTC_CHAR #undef NEED_PUTC_CHAR
#undef HAVE_NCURSES_TERM_H #undef HAVE_NCURSES_TERM_H

View file

@ -126,7 +126,7 @@ cleartoeol()
int int
vgetc() vgetc()
{ {
return ((char)bioskey(0)); return ((char)bioskey(0));
} }

View file

@ -7,10 +7,11 @@
* 2010-06-02 V 1.3.4 * 2010-06-02 V 1.3.4
* 2013-08-22 V 1.4.0 * 2013-08-22 V 1.4.0
* 2019-10-09 V 1.4.1 * 2019-10-09 V 1.4.1
* 2025-07-19 V 1.5.0
* *
* NOTE: Edit this file with tabstop=4 ! * NOTE: Edit this file with tabstop=4 !
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -64,8 +65,7 @@ putchr(char ch)
#else #else
int int
putchr(ch) putchr(int ch)
int ch;
{return putchar(ch);} {return putchar(ch);}
#endif #endif
@ -116,7 +116,7 @@ initterm()
no_intty = tcgetattr(fileno(stdin), &ostate); no_intty = tcgetattr(fileno(stdin), &ostate);
tcgetattr(fileno(stderr), &ostate); tcgetattr(fileno(stderr), &ostate);
nstate = ostate; nstate = ostate;
if (!no_tty) { if (!no_tty) {
ostate.c_lflag &= ~(ICANON|ECHO); ostate.c_lflag &= ~(ICANON|ECHO);
@ -143,8 +143,7 @@ reset_tty()
void void
sig(sig) sig(int sig)
int sig;
{ {
reset_tty(); reset_tty();
printf("\r\n"); printf("\r\n");
@ -156,12 +155,15 @@ sig(sig)
* doshell() - run a command or an interactive shell * doshell() - run a command or an interactive shell
*/ */
void void
doshell(cmd) doshell(char *cmd)
char *cmd;
{ {
int ret; int ret;
#ifndef DJGPP #ifndef DJGPP
#ifdef __STDC__
char *getenv(const char *);
#else
char *getenv(); char *getenv();
#endif
char *shell; char *shell;
char cline[128]; char cline[128];
#endif #endif
@ -277,10 +279,7 @@ vgetc()
* Copy contents of memory (with possible overlapping). * Copy contents of memory (with possible overlapping).
*/ */
char * char *
memmove(s1, s2, n) memmove(char *s1, char *s2, size_t n)
char *s1;
char *s2;
size_t n;
{ {
bcopy(s2, s1, n); bcopy(s2, s1, n);
return(s1); return(s1);

View file

@ -1,4 +1,4 @@
.TH BMORE 1 "30 Jan 2019" .TH BMORE 1 "24 May 2025"
.SH NAME .SH NAME
bmore \- browse through a binary file bmore \- browse through a binary file
.SH SYNOPSIS .SH SYNOPSIS
@ -77,7 +77,7 @@ except that a header is printed before each file in a series.
.SH OPTIONS .SH OPTIONS
.TP .TP
.B \-a .B \-a
ASCII mode: no hex representation of the contents. Non printable ASCII mode: no hex representation of the contents. Non printable
characters are displayed as a dot (.) characters are displayed as a dot (.)
.TP .TP
.B \-c .B \-c
@ -232,7 +232,7 @@ in the file remains unchanged. Regular expressions can be
edited using erase and kill characters. edited using erase and kill characters.
Erasing back past the first column cancels the search command. Erasing back past the first column cancels the search command.
.TP .TP
.B \' .B '
Single quote. Go to the point from which the last search started. Single quote. Go to the point from which the last search started.
If no search has been performed in the current file, If no search has been performed in the current file,
go to the beginning of the file. go to the beginning of the file.

85
bmore.c
View file

@ -8,8 +8,10 @@
* 2004-01-09 V 1.3.2 * 2004-01-09 V 1.3.2
* 2013-08-23 V 1.4.0 * 2013-08-23 V 1.4.0
* 2019-01-22 V 1.4.1 * 2019-01-22 V 1.4.1
* 2023-03-06 V 1.4.2
* 2025-07-19 V 1.5.0
* *
* Copyright 1990-2019 by Gerhard Buergmann * Copyright 1990-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* NOTE: Edit this file with tabstop=4 ! * NOTE: Edit this file with tabstop=4 !
@ -49,7 +51,7 @@
#include "bmore.h" #include "bmore.h"
char *copyright = "GPL (C) 1990-2019 by Gerhard Buergmann"; char *copyright = "GPL (C) 1990-2022 by Gerhard Buergmann";
int maxx, maxy; int maxx, maxy;
int mymaxx = 0, mymaxy = 0; int mymaxx = 0, mymaxy = 0;
@ -85,7 +87,7 @@ int prompt = 1;
char helppath[MAXCMD]; char helppath[MAXCMD];
static char progname[10]; static char progname[10];
static char cmdbuf[MAXCMD]; static char cmdbuf[2 * MAXCMD];
static int cnt = 0; static int cnt = 0;
static int icnt = 0; static int icnt = 0;
static int smode; static int smode;
@ -112,9 +114,7 @@ usage()
int int
main(argc, argv) main(int argc, char *argv[])
int argc;
char *argv[];
{ {
int ch, ch1; int ch, ch1;
int colon = 0, last_ch = 0; int colon = 0, last_ch = 0;
@ -140,7 +140,7 @@ main(argc, argv)
#endif #endif
poi = strrchr(argv[0], DELIM); poi = strrchr(argv[0], DELIM);
if (poi) strncpy(progname, ++poi, 9); if (poi) strncpy(progname, ++poi, 9);
else strncpy(progname, argv[0], 9); else strncpy(progname, argv[0], 9);
strtok(progname, "."); strtok(progname, ".");
@ -176,7 +176,7 @@ main(argc, argv)
break; break;
case 'r': r_flag++; case 'r': r_flag++;
break; break;
default: default:
usage(); usage();
} }
i++; i++;
@ -339,7 +339,7 @@ main(argc, argv)
fclose(curr_file); fclose(curr_file);
reset_tty(); reset_tty();
exit(exval); exit(exval);
case ':' : case ':' :
switch (colon) { switch (colon) {
case 'f': case 'f':
prompt = 0; prompt = 0;
@ -448,7 +448,7 @@ main(argc, argv)
bytepos = screen_home; bytepos = screen_home;
to_print = maxy; to_print = maxy;
break; break;
case '\\': case '\\':
if (ascii_flag) { if (ascii_flag) {
bmbeep(); bmbeep();
break; break;
@ -459,13 +459,13 @@ main(argc, argv)
if (rdline(ch, sstring)) break; if (rdline(ch, sstring)) break;
} }
case 'n': /**** Search Next ****/ case 'n': /**** Search Next ****/
case 'N': case 'N':
bmsearch(ch); bmsearch(ch);
/* /*
to_print--; to_print--;
*/ */
break; break;
case '\'': case '\'':
if (no_intty) { if (no_intty) {
bmbeep(); bmbeep();
} else { } else {
@ -492,7 +492,7 @@ main(argc, argv)
break; break;
} }
while ((ch1 = getc(help_file)) != EOF) while ((ch1 = getc(help_file)) != EOF)
putchar(ch1); putchar(ch1);
fclose(help_file); fclose(help_file);
to_print = 0; to_print = 0;
break; break;
@ -501,13 +501,13 @@ main(argc, argv)
if (!no_intty) { if (!no_intty) {
cleartoeol(); cleartoeol();
if (ch == 'v') { if (ch == 'v') {
sprintf(string, "bvi +%lu %s", sprintf(string, "bvi +%lu %s",
(unsigned long)(screen_home + (unsigned long)(screen_home +
(maxy + 1) / 2 * out_len), name); (maxy + 1) / 2 * out_len), name);
} else { } else {
if (precount < 1) precount = bytepos - screen_home; if (precount < 1) precount = bytepos - screen_home;
sprintf(string, "bvi -b %lu -s %lu %s", sprintf(string, "bvi -b %lu -s %lu %s",
(unsigned long)screen_home, (unsigned long)screen_home,
(unsigned long)precount, name); (unsigned long)precount, name);
} }
doshell(string); doshell(string);
@ -532,9 +532,7 @@ main(argc, argv)
int int
rdline(ch, sstring) rdline(int ch, char *sstring)
int ch;
char *sstring;
{ {
int i = 0; int i = 0;
int ch1 = 0; int ch1 = 0;
@ -586,8 +584,7 @@ rdline(ch, sstring)
void void
do_next(n) do_next(int n)
int n;
{ {
if (numfiles) { if (numfiles) {
if (n == 1 && file_nr == numfiles) { if (n == 1 && file_nr == numfiles) {
@ -613,8 +610,7 @@ do_next(n)
int int
open_file(name) open_file(char *name)
char *name;
{ {
struct stat buf; struct stat buf;
@ -635,9 +631,7 @@ open_file(name)
void void
putline(buf, num) putline(char *buf, int num)
char *buf;
int num;
{ {
int print_pos; int print_pos;
unsigned char ch; unsigned char ch;
@ -648,31 +642,31 @@ putline(buf, num)
if (!ascii_flag) { if (!ascii_flag) {
for (print_pos = 0; print_pos < num; print_pos++) { for (print_pos = 0; print_pos < num; print_pos++) {
ch = buf[print_pos]; ch = buf[print_pos];
PRINTF("%02X ", ch); PRINTF("%02X ", ch);
} }
for (; print_pos < out_len; print_pos++) { for (; print_pos < out_len; print_pos++) {
PRINTF(" "); PRINTF(" ");
} }
PRINTF(" "); PRINTF(" ");
} }
// ASCII section // ASCII section
for (print_pos = 0; print_pos < num; print_pos++) { for (print_pos = 0; print_pos < num; print_pos++) {
++bytepos; ++bytepos;
ch = buf[print_pos]; ch = buf[print_pos];
if ((ch > 31) && (ch < 127)) { if ((ch > 31) && (ch < 127)) {
PRINTF("%c", ch); PRINTF("%c", ch);
} else { } else {
if (r_flag) { if (r_flag) {
if ((ch & 128) && ((ch > 159) && (ch < 255))) { if ((ch & 128) && ((ch > 159) && (ch < 255))) {
if (!no_tty) highlight(); if (!no_tty) highlight();
PRINTF("%c", ch & 127); PRINTF("%c", ch & 127);
if (!no_tty) normal(); if (!no_tty) normal();
} else { } else {
PRINTF("."); PRINTF(".");
} }
} else { } else {
PRINTF("."); PRINTF(".");
} }
} }
} }
@ -688,13 +682,12 @@ putline(buf, num)
int int
printout(lns) printout(int lns)
int lns;
{ {
int c, num; int c, num;
int doub = 0; int doub = 0;
static int flag; static int flag;
if (c_flag) { if (c_flag) {
clearscreen(); clearscreen();
} }
@ -754,9 +747,7 @@ nextchar()
void void
pushback(n, where) pushback(int n, char *where)
int n;
char *where;
{ {
if (cnt) memmove(cmdbuf + n, cmdbuf, n); if (cnt) memmove(cmdbuf + n, cmdbuf, n);
memcpy(cmdbuf, where, n); memcpy(cmdbuf, where, n);
@ -773,8 +764,7 @@ pushback(n, where)
* 1 found * 1 found
*/ */
int int
bmregexec(scan) bmregexec(char *scan)
char *scan;
{ {
char *act; char *act;
int count, test; int count, test;
@ -868,7 +858,7 @@ bmregexec(scan)
pushback(1, --act); pushback(1, --act);
l--; l--;
} }
} else { /* ".*" */ } else { /* ".*" */
do { do {
if ((test = nextchar()) == -1) return -5; if ((test = nextchar()) == -1) return -5;
*act++ = test; *act++ = test;
@ -892,10 +882,7 @@ bmregexec(scan)
int int
sbracket(start, scan, count) sbracket(int start, char *scan, int count)
int start;
char *scan;
int count;
{ {
if (*scan++ == '^') { if (*scan++ == '^') {
if (!memchr(scan, start, --count)) return 0; if (!memchr(scan, start, --count)) return 0;
@ -907,8 +894,7 @@ sbracket(start, scan, count)
void void
bmsearch(ch) bmsearch(int ch)
int ch;
{ {
int i; int i;
@ -960,8 +946,7 @@ emsg(string);
void void
emsg(s) emsg(char *s)
char *s;
{ {
putchar('\r'); putchar('\r');
cleartoeol(); cleartoeol();

48
bmore.h
View file

@ -7,14 +7,15 @@
* 1999-08-21 V 1.2.0 final * 1999-08-21 V 1.2.0 final
* 2000-05-31 V 1.3.0 beta * 2000-05-31 V 1.3.0 beta
* 2000-10-04 V 1.3.0 final * 2000-10-04 V 1.3.0 final
* 2002-01-16 V 1.3.1 * 2002-01-16 V 1.3.1
* 2003-02-20 V 1.3.2 * 2003-02-20 V 1.3.2
* 2010-03-28 V 1.3.4 * 2010-03-28 V 1.3.4
* 2019-01-22 V 1.4.1 * 2019-01-22 V 1.4.1
* 2022-03-07 V 1.4.2
* *
* NOTE: Edit this file with tabstop=4 ! * NOTE: Edit this file with tabstop=4 !
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2023 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -42,27 +43,30 @@
#if defined(__MSDOS__) && !defined(DJGPP) #if defined(__MSDOS__) && !defined(DJGPP)
# include "patchlev.h" # include "patchlev.h"
# include "dosconf.h" # include "dosconf.h"
# include <alloc.h> # include <alloc.h>
# include <conio.h> # include <conio.h>
# include <bios.h> # include <bios.h>
#else #else
# include "patchlevel.h" # include "patchlevel.h"
# include "config.h" # include "config.h"
# include <unistd.h> # include <unistd.h>
# if HAVE_NCURSES_H # if defined HAVE_NCURSESW_CURSES_H
# include <ncurses.h> # include <ncursesw/curses.h>
# else # include <ncursesw/term.h>
# include <curses.h> # elif defined HAVE_NCURSESW_H
# endif # include <ncursesw.h>
# if HAVE_TERM_H # elif defined HAVE_NCURSES_CURSES_H
# include <ncurses/curses.h>
# elif defined HAVE_NCURSES_H
# include <ncurses.h>
# elif defined HAVE_CURSES_H
# include <curses.h>
# else
# error "SysV or X/Open-compatible Curses header file required"
# endif
# if HAVE_TERM_H
# include <term.h> # include <term.h>
# else # endif
# if HAVE_NCURSES_TERM_H
# include <ncurses/term.h>
# else
# include <term.h>
# endif
# endif
#endif #endif
@ -132,20 +136,20 @@ extern int no_tty, no_intty;
#ifdef ANSI #if defined(ANSI) || defined(__STDC__)
void initterm(void), set_tty(void), reset_tty(void); void initterm(void), set_tty(void), reset_tty(void);
void cleartoeol(void), clearscreen(void), highlight(void); void cleartoeol(void), clearscreen(void), highlight(void);
void normal(void), bmbeep(void), home(void), sig(void); void normal(void), bmbeep(void), home(void), sig(int);
void doshell(char *), emsg(char *); void doshell(char *), emsg(char *);
void do_next(int); void do_next(int);
void bmsearch(int); void bmsearch(int);
void pushback(int, char *); void pushback(int, char *);
int open_file(void); int open_file(char *);
int printout(int), rdline(int, char *); int printout(int), rdline(int, char *);
int nextchar(void), vgetc(void); int nextchar(void), vgetc(void);
int sbracket(int, char *, int); int sbracket(int, char *, int);
int bmregexec(char *); int bmregexec(char *);
int ascii_comp(char *, char *), hex_comp(char *, char *); int ascii_comp(char *, char *), hex_comp(char *, char *);
void putline(char *, int); void putline(char *, int);
#else #else
void initterm(), set_tty(), reset_tty(); void initterm(), set_tty(), reset_tty();

77
bvi.1
View file

@ -1,8 +1,8 @@
.rn '' }` .rn '' }`
''' $RCSfile$$Revision$$Date$ .\" $RCSfile$$Revision$$Date$
''' .\"
''' $Log$ .\" $Log$
''' .\"
.de Sh .de Sh
.br .br
.if t .Sp .if t .Sp
@ -31,12 +31,12 @@
.fi .fi
.. ..
''' .\"
''' .\"
''' Set up \*(-- to give an unbreakable dash; .\" Set up \*(-- to give an unbreakable dash;
''' string Tr holds user defined translation string. .\" string Tr holds user defined translation string.
''' Bell System Logo is used as a dummy character. .\" Bell System Logo is used as a dummy character.
''' .\"
.tr \(*W-|\(bv\*(Tr .tr \(*W-|\(bv\*(Tr
.ie n \{\ .ie n \{\
.ds -- \(*W- .ds -- \(*W-
@ -45,10 +45,10 @@
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" "" .ds L" ""
.ds R" "" .ds R" ""
''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of .\" \*(M", \*(S", \*(N" and \*(T" are the equivalent of
''' \*(L" and \*(R", except that they are used on ".xx" lines, .\" \*(L" and \*(R", except that they are used on ".xx" lines,
''' such as .IP and .SH, which do another additional levels of .\" such as .IP and .SH, which do another additional levels of
''' double-quote interpretation .\" double-quote interpretation
.ds M" """ .ds M" """
.ds S" """ .ds S" """
.ds N" """"" .ds N" """""
@ -79,9 +79,9 @@
'br\} 'br\}
.\" If the F register is turned on, we'll generate .\" If the F register is turned on, we'll generate
.\" index entries out stderr for the following things: .\" index entries out stderr for the following things:
.\" TH Title .\" TH Title
.\" SH Header .\" SH Header
.\" Sh Subsection .\" Sh Subsection
.\" Ip Item .\" Ip Item
.\" X<> Xref (embedded .\" X<> Xref (embedded
.\" Of course, you have to process the output yourself .\" Of course, you have to process the output yourself
@ -93,7 +93,7 @@
.nr % 0 .nr % 0
.rr F .rr F
.\} .\}
.TH BVI 1 "BVI Version 1.4.1" "30/Jan/2019" "User Commands" .TH BVI 1 "BVI Version 1.5.0" "31/May/2025" "User Commands"
.IX Title "BVI 1" .IX Title "BVI 1"
.UC .UC
.IX Name "bvi, bview - visual display editor for binary files" .IX Name "bvi, bview - visual display editor for binary files"
@ -194,7 +194,7 @@
bvi, bview \- visual editor for binary files bvi, bview \- visual editor for binary files
.SH "VERSION" .SH "VERSION"
.IX Header "VERSION" .IX Header "VERSION"
bvi-1.4.1 bvi-1.5.0
.SH "SYNOPSIS" .SH "SYNOPSIS"
.IX Header "SYNOPSIS" .IX Header "SYNOPSIS"
\fBbvi\fR\ \ \ [\fB\-R\fR]\ [\fB\-c\fR\ \fIcmd\fR]\ [\fB\-f\fR\ \fIscript\fR]\ [\fB\-s\fR\ \fIskip\fR]\ [\fB\-e\fR\ \fIend\fR]\ [\fB\-n\fR\ \fIlength\fR]\ \fIfile\fR... \fBbvi\fR\ \ \ [\fB\-R\fR]\ [\fB\-c\fR\ \fIcmd\fR]\ [\fB\-f\fR\ \fIscript\fR]\ [\fB\-s\fR\ \fIskip\fR]\ [\fB\-e\fR\ \fIend\fR]\ [\fB\-n\fR\ \fIlength\fR]\ \fIfile\fR...
@ -203,10 +203,10 @@ bvi-1.4.1
.IX Header "OPTIONS" .IX Header "OPTIONS"
.Ip "\fIfile\fR..." 4 .Ip "\fIfile\fR..." 4
.IX Item "\fIfile\fR..." .IX Item "\fIfile\fR..."
A list of filenames. The first one will be the current file and A list of filenames. The first one will be the current file and
will be read will be read
into the buffer. The cursor will be positioned on the first line of into the buffer. The cursor will be positioned on the first line of
the buffer. You can get to the other files with the ":next" command. the buffer. You can get to the other files with the ":next" command.
.Ip "\fB\-R\fR" 4 .Ip "\fB\-R\fR" 4
.IX Item "\fB\-R\fR" .IX Item "\fB\-R\fR"
\*(L"Readonly": The readonly flag is set for all the files, \*(L"Readonly": The readonly flag is set for all the files,
@ -261,7 +261,7 @@ The byte offset (extreme left), the hex pane (middle),
and an ascii pane (right) which shows as printable characters and an ascii pane (right) which shows as printable characters
those bytes in the hex pane. those bytes in the hex pane.
On an 80 column terminal there will be sixteen hex values On an 80 column terminal there will be sixteen hex values
and their ASCII values on each screen line. and their ASCII values on each screen line.
Note that (as one would expect) the first byte has the offset \*(L'0\*(R' (zero). Note that (as one would expect) the first byte has the offset \*(L'0\*(R' (zero).
.PP .PP
You can toggle between the hex and ascii windows with the tab key (TAB). You can toggle between the hex and ascii windows with the tab key (TAB).
@ -270,10 +270,10 @@ position (offset) within the file.
.PP .PP
No \*(L"lines\*(R" concept: No \*(L"lines\*(R" concept:
Files are treated as one long stream of bytes. The characters Files are treated as one long stream of bytes. The characters
\*(L"newline\*(R" and \*(L"carriage return\*(R" are not special, id est they \*(L"newline\*(R" and \*(L"carriage return\*(R" are not special, id est they
never mark the end of lines. Therefore the lines on the screen do not never mark the end of lines. Therefore the lines on the screen do not
represent lines in the usual way. Data is broken across screen lines represent lines in the usual way. Data is broken across screen lines
arbitarily. arbitrarily.
As a consequence there are no commands in bvi from ex or vi As a consequence there are no commands in bvi from ex or vi
that are based on line numbers, eg \*(L"dd\*(R", \*(L"yy\*(R", \*(L'C\*(R', \*(L'S\*(R', \*(L'o\*(R', \*(L'O\*(R'. that are based on line numbers, eg \*(L"dd\*(R", \*(L"yy\*(R", \*(L'C\*(R', \*(L'S\*(R', \*(L'o\*(R', \*(L'O\*(R'.
This also changes the meaning of \*(L"range\*(R" before the \*(L":write\*(R" command This also changes the meaning of \*(L"range\*(R" before the \*(L":write\*(R" command
@ -313,13 +313,13 @@ using these meta sequences:
.Ve .Ve
Additional search commands: Additional search commands:
Similar to the text search commands there are additional hex-search Similar to the text search commands there are additional hex-search
functions \*(L'\e\*(R' and \*(L'#\*(R' which allow to search for any byte value. functions \*(L'\e\*(R' and \*(L'#\*(R' which allow one to search for any byte value.
Example: \*(L"\e62 76 69\*(R" will search for the string \*(L"bvi\*(R". Example: \*(L"\e62 76 69\*(R" will search for the string \*(L"bvi\*(R".
Spaces between hex value are optional, so searching Spaces between hex value are optional, so searching
for \*(L"6775636B6573\*(R" will find \*(L"guckes\*(R". for \*(L"6775636B6573\*(R" will find \*(L"guckes\*(R".
.PP .PP
Changing the length of data (insertion, deletion) moves the data to other addresses; Changing the length of data (insertion, deletion) moves the data to other addresses;
this is bad for many cases (eg. databases, program files) and is this is bad for many cases (eg. databases, program files) and is
thus disabled by default. You can enable this commands by typing thus disabled by default. You can enable this commands by typing
.PP .PP
\f(CW :set memmove\fR \f(CW :set memmove\fR
@ -334,11 +334,11 @@ Use ESC (escape) to cancel a partial (uncompleted) command.
.PP .PP
Input Mode: Input Mode:
.PP .PP
Input is treated as replacement of current characters or Input is treated as replacement of current characters or
(after the end of the file) is appended (after the end of the file) is appended
to the current file. This mode is entered from command mode by to the current file. This mode is entered from command mode by
typing one of \*(L'i\*(R', \*(L'I\*(R', \*(L'A\*(R', \*(L'r\*(R', or \*(L'R\*(R'. typing one of \*(L'i\*(R', \*(L'I\*(R', \*(L'A\*(R', \*(L'r\*(R', or \*(L'R\*(R'.
You can enter the characters from the keyboard (in the ASCII window) or You can enter the characters from the keyboard (in the ASCII window) or
hexadecimal values (in the HEX window). hexadecimal values (in the HEX window).
Type TAB to switch between these two windows. Type TAB to switch between these two windows.
Type ESC to finish the current input and return to command mode. Type ESC to finish the current input and return to command mode.
@ -346,8 +346,8 @@ Type CTRL\-C to cancel current command abnormally.
.PP .PP
Command line mode (Last Line Mode or : mode): Command line mode (Last Line Mode or : mode):
.PP .PP
Similar to vi, this mode is entered by typing one of the Similar to vi, this mode is entered by typing one of the
characters characters
: / ? \e # ! : / ? \e # !
The command is terminated and executed by typing a carriage The command is terminated and executed by typing a carriage
return; to cancel a partially typed command, type return; to cancel a partially typed command, type
@ -439,10 +439,10 @@ used within the following description of commands.
You can insert/append/change bytes in ASCII/binary/decimal/ You can insert/append/change bytes in ASCII/binary/decimal/
hexadecimal or octal representation. You can enter several hexadecimal or octal representation. You can enter several
(screen) lines of input. A line with only a period (.) in it (screen) lines of input. A line with only a period (.) in it
will terminate the command. You must not type in values greater will terminate the command. You must not type in values greater
than a byte value. This causes an abandonment of the command. than a byte value. This causes an abandonment of the command.
Pressing the CR key does not insert a newline \- character into Pressing the CR key does not insert a newline \- character into
the file. If you use ASCII mode you can use the special characters the file. If you use ASCII mode you can use the special characters
\en, \er, \et and \e0. \en, \er, \et and \e0.
.PP .PP
.Vb 3 .Vb 3
@ -507,7 +507,7 @@ the file. If you use ASCII mode you can use the special characters
`\fIx\fR move cursor to mark \fIx\fR in HEX section `\fIx\fR move cursor to mark \fIx\fR in HEX section
\*(L'\*(R' move cursor to previous context in ASCII section \*(L'\*(R' move cursor to previous context in ASCII section
`` move cursor to previous context in HEX section `` move cursor to previous context in HEX section
\fBLine positioning:\fR \fBLine positioning:\fR
H jump to first line on screen ("top") H jump to first line on screen ("top")
L jump to last line on screen ("low") L jump to last line on screen ("low")
@ -554,7 +554,7 @@ the file. If you use ASCII mode you can use the special characters
rx replace current bte with char \*(L'x\*(R' rx replace current bte with char \*(L'x\*(R'
R enter replace mode; for all subsequent input, R enter replace mode; for all subsequent input,
the current byte is overwritten with the next the current byte is overwritten with the next
input character; leave replace mode with ESC. input character; leave replace mode with ESC.
.PP .PP
\fBMiscellaneous Operations:\fR \fBMiscellaneous Operations:\fR
TAB toggle between ASCII and HEX section TAB toggle between ASCII and HEX section
@ -583,8 +583,8 @@ the file. If you use ASCII mode you can use the special characters
\& columns cm=16 on an 80 character wide terminal \& columns cm=16 on an 80 character wide terminal
\& ignorecase noic Ignores letter case in searching \& ignorecase noic Ignores letter case in searching
\& magic nomagic Makes . [ * special in patterns \& magic nomagic Makes . [ * special in patterns
\& memmove nomm enables insert and delete commands \& memmove nomm enables insert and delete commands
\& offset of=0 adds an offset to the diplayed addresses \& offset of=0 adds an offset to the displayed addresses
\& readonly noro If set, write fails unless you use ! after command \& readonly noro If set, write fails unless you use ! after command
\& reverse nore display otherwise-printable characters with their \& reverse nore display otherwise-printable characters with their
\& high bit set as reverse video \& high bit set as reverse video
@ -606,7 +606,7 @@ bvi was developed by Gerhard Buergmann, Vienna, Austria
\fIgerhard@puon.at\fR \fIgerhard@puon.at\fR
.SH "WWW" .SH "WWW"
.IX Header "WWW" .IX Header "WWW"
Bvi\ Homepage:\ \ http://bvi.sourceforge.net/ Bvi\ Homepage:\ \ https://bvi.sourceforge.net/
Vi\ Pages:\ \ \ \ \ \ http://www.guckes.net/vi/clones.php3 Vi\ Pages:\ \ \ \ \ \ http://www.guckes.net/vi/clones.php3
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (all\ about\ Vi\ and\ its\ clones) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (all\ about\ Vi\ and\ its\ clones)
.SH "FILES" .SH "FILES"
@ -614,9 +614,6 @@ Vi\ Pages:\ \ \ \ \ \ http://www.guckes.net/vi/clones.php3
\fI\ $HOME/.bvirc\fR\ \ \ \ \ \ \ \ \ \ editor\ startup\ file \fI\ $HOME/.bvirc\fR\ \ \ \ \ \ \ \ \ \ editor\ startup\ file
.BR .BR
\fI\ ./.bvirc\fR\ \ \ \ \ \ \ \ \ \ \ \ \ \ editor\ startup\ file \fI\ ./.bvirc\fR\ \ \ \ \ \ \ \ \ \ \ \ \ \ editor\ startup\ file
.SH "BUGS"
.IX Header "BUGS"
Bvi does not update the screen when the terminal changes its size.
.SH "SEE ALSO" .SH "SEE ALSO"
.IX Header "SEE ALSO" .IX Header "SEE ALSO"
\fIbmore\fR\|(1), \fIvi\fR\|(1), \fIstrings\fR\|(1), \fIascii\fR\|(5) \fIbmore\fR\|(1), \fIvi\fR\|(1), \fIstrings\fR\|(1), \fIascii\fR\|(5)

167
bvi.c
View file

@ -2,7 +2,7 @@
* *
* 1996-02-28 V 1.0.0 * 1996-02-28 V 1.0.0
* 1999-01-27 V 1.1.0 * 1999-01-27 V 1.1.0
* 1999-04-22 V 1.1.1 * 1999-04-22 V 1.1.1
* 1999-07-01 V 1.2.0 beta * 1999-07-01 V 1.2.0 beta
* 1999-10-22 V 1.2.0 final * 1999-10-22 V 1.2.0 final
* 2000-05-10 V 1.3.0 alpha * 2000-05-10 V 1.3.0 alpha
@ -13,10 +13,12 @@
* 2013-08-23 V 1.4.0alpha * 2013-08-23 V 1.4.0alpha
* 2014-10-07 V 1.4.0 * 2014-10-07 V 1.4.0
* 2019-10-12 V 1.4.1 * 2019-10-12 V 1.4.1
* 2023-03-06 V 1.4.2
* 2025-07-19 V 1.5.0
* *
* NOTE: Edit this file with tabstop=4 ! * NOTE: Edit this file with tabstop=4 !
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -33,6 +35,7 @@
*/ */
#include <sys/types.h> #include <sys/types.h>
#include <unistd.h>
#include "bvi.h" #include "bvi.h"
#include "set.h" #include "set.h"
@ -42,55 +45,56 @@
#endif #endif
char *copyright = "(C) GPL 1996-2019 by Gerhard Buergmann"; char *copyright = "(C) GPL 1996-2025 by Gerhard Buergmann";
jmp_buf env; /* context for `longjmp' function */ jmp_buf env; /* context for `longjmp' function */
int loc; int loc;
int maxx, maxy, x, xx, y; int maxx, maxy, x, xx, y;
int screen, status, statsize; int screen, status, statsize;
off_t size; off_t size;
PTR mem = NULL; PTR mem = NULL;
PTR curpos; PTR curpos;
PTR maxpos; PTR maxpos;
PTR pagepos; PTR pagepos;
PTR spos; PTR spos;
char *name = NULL; char *name = NULL;
char *shell; char *shell;
char string[MAXCMD+1]; char string[MAXCMD+1];
char cmdstr[MAXCMD+1] = ""; char cmdstr[MAXCMD+1] = "";
FILE *Ausgabe_Datei; FILE *Ausgabe_Datei;
int edits = 0; int edits = 0;
int AnzAdd, Anzahl, Anzahl3; int AnzAdd, Anzahl, Anzahl3;
off_t filesize, memsize, undosize; off_t filesize, memsize, undosize;
int statusflag = 1;
int space = 2;
long precount = -1; long precount = -1;
int block_flag = 0; int block_flag = 0;
off_t block_begin, block_end, block_size; off_t block_begin, block_end, block_size;
char **files; /* list of input files */ char **files; /* list of input files */
int numfiles; /* number of input files */ int numfiles; /* number of input files */
int curfile; /* number of the current file */ int curfile; /* number of the current file */
int arrnum = 0; int arrnum = 0;
char numarr[MAXCMD+1]; /* string for collecting number */ char numarr[MAXCMD+1]; /* string for collecting number */
char rep_buf[BUFFER]; char rep_buf[BUFFER];
PTR current; PTR current;
PTR last_motion; PTR last_motion;
PTR current_start; PTR current_start;
PTR undo_start; PTR undo_start;
off_t undo_count; off_t undo_count;
off_t yanked = 0L; off_t yanked = 0L;
char *yank_buf = NULL; char *yank_buf = NULL;
char *undo_buf = NULL; char *undo_buf = NULL;
char *fname_buf = NULL; char *fname_buf = NULL;
PTR markbuf[26]; PTR markbuf[26];
char addr_form[15]; char addr_form[15];
@ -98,8 +102,8 @@ char *nobytes = "No bytes@in the buffer";
static char progname[8]; static char progname[8];
static char line[MAXCMD+1]; static char line[MAXCMD+1];
static int mark; static int mark;
static int wrstat = 1; static int wrstat = 1;
void void
@ -115,9 +119,7 @@ usage()
int int
main(argc, argv) main(int argc, char *argv[])
int argc;
char *argv[];
{ {
int ch; int ch;
int lflag; int lflag;
@ -145,6 +147,13 @@ main(argc, argv)
/* This should be the beginners version */ /* This should be the beginners version */
} }
if (isatty(fileno(stdin)) == 0) {
// Guckes
fprintf(stderr, "Input is not from a terminal\n");
exit(1);
}
while (n < argc) { while (n < argc) {
switch (argv[n][0]) { switch (argv[n][0]) {
case '-': case '-':
@ -239,7 +248,7 @@ main(argc, argv)
break; break;
case BLOCK_BEGIN|BLOCK_END|BLOCK_LEN: case BLOCK_BEGIN|BLOCK_END|BLOCK_LEN:
if (block_end - block_begin != block_size + 1) { if (block_end - block_begin != block_size + 1) {
fprintf(stderr, "Ambigous block data\n"); fprintf(stderr, "Ambiguous block data\n");
exit(1); exit(1);
} }
break; break;
@ -258,7 +267,9 @@ main(argc, argv)
maxy = LINES; maxy = LINES;
if (params[P_LI].flags & P_CHANGED) maxy = P(P_LI); if (params[P_LI].flags & P_CHANGED) maxy = P(P_LI);
P(P_SS) = maxy / 2; P(P_SS) = maxy / 2;
/* We do not set P(P_LI) and P(P_CM) anymore, because 0 means "auto"
P(P_LI) = maxy; P(P_LI) = maxy;
*/
maxy--; maxy--;
keypad(stdscr, TRUE); keypad(stdscr, TRUE);
scrollok(stdscr, TRUE); scrollok(stdscr, TRUE);
@ -266,21 +277,21 @@ main(argc, argv)
cbreak(); cbreak();
noecho(); noecho();
/* address column width */ /* address column width */
/* default is 8 + 2 blanks */ /* default is 8 + 2 blanks */
/* if block_begin has 8 hex digits or more */ /* if block_begin has 8 hex digits or more */
/* reserve 1 hex digit more than required */ /* reserve 1 hex digit more than required */
char tmp[sizeof(block_begin) * 2 + 3]; char tmp[sizeof(block_begin) * 2 + 3];
AnzAdd = sprintf(tmp, "%llX", (long long unsigned)block_begin) + 1; AnzAdd = sprintf(tmp, "%llX", (long long unsigned)block_begin) + 1;
if (AnzAdd < 8) if (AnzAdd < 8) AnzAdd = 8;
AnzAdd = 8; if (AnzAdd > sizeof(block_begin) * 2) AnzAdd = sizeof(block_begin) * 2;
if (AnzAdd > sizeof(block_begin) * 2) sprintf(addr_form, "%%0%dllX ", AnzAdd);
AnzAdd = sizeof(block_begin) * 2; AnzAdd = sprintf(tmp, addr_form, block_begin);
sprintf(addr_form, "%%0%dllX ", AnzAdd);
AnzAdd = sprintf(tmp, addr_form, block_begin);
Anzahl = ((COLS - AnzAdd - 1) / 16) * 4; Anzahl = ((COLS - AnzAdd - space) / 16) * 4;
/*
P(P_CM) = Anzahl; P(P_CM) = Anzahl;
*/
maxx = Anzahl * 4 + AnzAdd + 1; maxx = Anzahl * 4 + AnzAdd + 1;
Anzahl3 = Anzahl * 3; Anzahl3 = Anzahl * 3;
statsize = 35; statsize = 35;
@ -301,7 +312,7 @@ main(argc, argv)
if (*cmdstr != '\0') if (*cmdstr != '\0')
docmdline(cmdstr); docmdline(cmdstr);
msg(fname_buf); msg(fname_buf);
/* main loop */ /* main loop */
do { do {
setjmp(env); setjmp(env);
@ -319,6 +330,10 @@ main(argc, argv)
else precount = -1; else precount = -1;
lflag = arrnum = 0; lflag = arrnum = 0;
if (statusflag == 0) {
statusflag = 1;
clearstr();
}
switch (ch) { switch (ch) {
case '^': x = AnzAdd; case '^': x = AnzAdd;
loc = HEX; loc = HEX;
@ -417,7 +432,7 @@ main(argc, argv)
x = AnzAdd - 1 + Anzahl3 + Anzahl; x = AnzAdd - 1 + Anzahl3 + Anzahl;
loc = ASCII; } loc = ASCII; }
break; break;
case ':' : clearstr(); case ':' : clearstr();
addch(ch); addch(ch);
refresh(); refresh();
getcmdstr(cmdstr, 1); getcmdstr(cmdstr, 1);
@ -458,6 +473,18 @@ main(argc, argv)
fileinfo(name); fileinfo(name);
wrstat = 0; wrstat = 0;
break; break;
case KEY_RESIZE:
if (P(P_CM) == 0) {
Anzahl = ((COLS - AnzAdd - space) / 4);
maxx = Anzahl * 4 + AnzAdd + 1;
Anzahl3 = Anzahl * 3;
status = Anzahl3 + Anzahl - statsize;
}
if (P(P_LI) == 0) {
screen = Anzahl * (maxy - 1);
maxy = LINES - 1;
P(P_SS) = maxy / 2;
}
case BVICTRL('L'): /*** REDRAW SCREEN ***/ case BVICTRL('L'): /*** REDRAW SCREEN ***/
new_screen(); new_screen();
break; break;
@ -482,9 +509,9 @@ main(argc, argv)
break; break;
case ';': do_ft(0, 0); case ';': do_ft(0, 0);
break; break;
case 'F': case 'F':
case 'f': case 'f':
case 't': case 't':
case 'T': do_ft(ch, 0); case 'T': do_ft(ch, 0);
break; break;
case 'G': last_motion = current; case 'G': last_motion = current;
@ -492,10 +519,10 @@ main(argc, argv)
if ((precount < P(P_OF)) || if ((precount < P(P_OF)) ||
(precount - P(P_OF)) > (filesize - 1L)) { (precount - P(P_OF)) > (filesize - 1L)) {
beep(); beep();
} else { } else {
setpage((PTR)(mem + precount - P(P_OF))); setpage((PTR)(mem + precount - P(P_OF)));
} }
} else { } else {
setpage((PTR)(mem + filesize - 1L)); setpage((PTR)(mem + filesize - 1L));
} }
break; break;
@ -726,8 +753,7 @@ main(argc, argv)
off_t off_t
calc_size(arg) calc_size(char *arg)
char *arg;
{ {
off_t val; off_t val;
extern int errno; extern int errno;
@ -747,13 +773,13 @@ calc_size(arg)
switch (*poi) { switch (*poi) {
case 'k': case 'k':
case 'K': val *= 1024; case 'K': val *= 1024;
break; break;
case 'm': case 'm':
case 'M': val *= 1048576; case 'M': val *= 1048576;
break; break;
case 'g': case 'g':
case 'G': val *= 1024*1024*1024LL; case 'G': val *= 1024*1024*1024LL;
break; break;
case '\0': break; case '\0': break;
default: usage(); default: usage();
} }
@ -778,9 +804,7 @@ trunc_cur()
int int
do_append(count, buf) do_append(off_t count, char *buf)
off_t count;
char *buf;
{ {
if (filesize + count > memsize) { if (filesize + count > memsize) {
if (enlarge(count + 100L)) return 1; if (enlarge(count + 100L)) return 1;
@ -797,8 +821,7 @@ do_append(count, buf)
void void
do_tilde(count) do_tilde(off_t count)
off_t count;
{ {
if (filesize == 0L) return; if (filesize == 0L) return;
undo_start = current; undo_start = current;
@ -884,10 +907,7 @@ do_undo()
void void
do_over(loc, n, buf) do_over(PTR loc, off_t n, PTR buf)
PTR loc;
off_t n;
PTR buf;
{ {
if (n < 1L) { if (n < 1L) {
emsg(nobytes); emsg(nobytes);
@ -909,16 +929,13 @@ do_over(loc, n, buf)
void void
do_put(loc, n, buf) do_put(PTR loc, off_t n, PTR buf)
PTR loc;
off_t n;
PTR buf;
{ {
if (n < 1L) { if (n < 1L) {
emsg(nobytes); emsg(nobytes);
return; return;
} }
if (loc > maxpos) { if (loc >= maxpos) {
beep(); beep();
return; return;
} }
@ -940,8 +957,7 @@ do_put(loc, n, buf)
/* argument sig not used, because only SIGINT will be catched */ /* argument sig not used, because only SIGINT will be catched */
void void
jmpproc(sig) jmpproc(int sig)
int sig;
{ {
if (P(P_EB)) beep(); if (P(P_EB)) beep();
repaint(); repaint();
@ -952,8 +968,7 @@ jmpproc(sig)
off_t off_t
range(ch) range(int ch)
int ch;
{ {
int ch1; int ch1;
long count; long count;
@ -1024,7 +1039,7 @@ range(ch)
- (off_t)P(P_OF)) > (filesize - 1L)) { - (off_t)P(P_OF)) > (filesize - 1L)) {
beep(); beep();
return 0; return 0;
} else { } else {
if (mem + count < current) { if (mem + count < current) {
return(mem + count - current); return(mem + count - current);
} else { } else {
@ -1042,9 +1057,9 @@ range(ch)
} }
end_addr = markbuf[mark - 'a']; end_addr = markbuf[mark - 'a'];
if (end_addr == NULL) { if (end_addr == NULL) {
beep(); beep();
return 0; return 0;
} }
if (end_addr < current) { if (end_addr < current) {
return(end_addr - current); return(end_addr - current);
} else { } else {

184
bvi.h
View file

@ -12,10 +12,12 @@
* 2010-08-04 V 1.3.4 * 2010-08-04 V 1.3.4
* 2014-10-01 V 1.4.0 * 2014-10-01 V 1.4.0
* 2019-01-28 V 1.4.1 * 2019-01-28 V 1.4.1
* 2023-03-07 V 1.4.2
* 2025-05-24 V 1.5.0
* *
* NOTE: Edit this file with tabstop=4 ! * NOTE: Edit this file with tabstop=4 !
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -45,16 +47,24 @@
#if defined(__MSDOS__) && !defined(DJGPP) #if defined(__MSDOS__) && !defined(DJGPP)
# include "patchlev.h" # include "patchlev.h"
# include "dosconf.h" # include "dosconf.h"
# include "doscur.h" # include "doscur.h"
# include <alloc.h> # include <alloc.h>
#else #else
# include "patchlevel.h" # include "patchlevel.h"
# include "config.h" # include "config.h"
#if HAVE_NCURSES_H #if defined HAVE_NCURSESW_CURSES_H
# include <ncurses.h> # include <ncursesw/curses.h>
#else #elif defined HAVE_NCURSESW_H
# include <curses.h> # include <ncursesw.h>
#endif #elif defined HAVE_NCURSES_CURSES_H
# include <ncurses/curses.h>
#elif defined HAVE_NCURSES_H
# include <ncurses.h>
#elif defined HAVE_CURSES_H
# include <curses.h>
#else
# error "SysV or X/Open-compatible Curses header file required"
#endif
#endif #endif
/* defines for filemode */ /* defines for filemode */
@ -120,14 +130,14 @@
# define ANSI # define ANSI
# define PTR char huge * # define PTR char huge *
# define off_t long # define off_t long
# define DELIM '\\' # define DELIM '\\'
# define strncasecmp strnicmp # define strncasecmp strnicmp
# define strcasecmp stricmp # define strcasecmp stricmp
# define memcpy d_memcpy # define memcpy d_memcpy
# define memmove d_memmove # define memmove d_memmove
#else #else
# define PTR char * # define PTR char *
# define DELIM '/' # define DELIM '/'
#endif #endif
#define MAXCMD 255 #define MAXCMD 255
@ -155,27 +165,27 @@ extern char search_pat[];
extern long hl_spat; extern long hl_spat;
extern char pattern[]; extern char pattern[];
extern char rep_buf[]; extern char rep_buf[];
extern int maxx, maxy, x, y; extern int maxx, maxy, x, y;
extern int filemode, loc; extern int filemode, loc;
extern int edits, new; extern int edits, new;
extern int AnzAdd; extern int AnzAdd;
extern int Anzahl, Anzahl3; extern int Anzahl, Anzahl3;
extern int addr_flag; extern int addr_flag;
extern int ignore_case, magic; extern int ignore_case, magic;
extern int screen, status, statsize; extern int screen, status, statsize;
extern PTR mem; extern PTR mem;
extern PTR maxpos; extern PTR maxpos;
extern PTR pagepos; extern PTR pagepos;
extern PTR undo_start; extern PTR undo_start;
extern PTR current_start; extern PTR current_start;
extern PTR curpos; extern PTR curpos;
extern PTR current; extern PTR current;
extern PTR start_addr; extern PTR start_addr;
extern PTR end_addr; extern PTR end_addr;
extern char *name, cmdstr[]; extern char *name, cmdstr[];
extern off_t filesize, memsize; extern off_t filesize, memsize;
extern PTR markbuf[]; extern PTR markbuf[];
extern PTR last_motion; extern PTR last_motion;
extern off_t undo_count; extern off_t undo_count;
extern off_t yanked; extern off_t yanked;
extern off_t undosize; extern off_t undosize;
@ -183,14 +193,16 @@ extern char *copyright, *notfound;
extern char *terminal; extern char *terminal;
extern char *undo_buf; extern char *undo_buf;
extern char *yank_buf; extern char *yank_buf;
extern int repl_count; extern int repl_count;
extern char string[]; extern char string[];
extern char *shell; extern char *shell;
extern char *poi; extern char *poi;
extern int smode; extern int smode;
extern int again; extern int again;
extern int block_flag; extern int block_flag;
extern off_t block_begin, block_end, block_size; extern off_t block_begin, block_end, block_size;
extern int statusflag;
extern int space;
#ifndef S_ISDIR /* POSIX 1003.1 file type tests. */ #ifndef S_ISDIR /* POSIX 1003.1 file type tests. */
#define S_ISDIR(m) ((m & 0170000) == 0040000) /* directory */ #define S_ISDIR(m) ((m & 0170000) == 0040000) /* directory */
@ -205,7 +217,7 @@ extern off_t block_begin, block_end, block_size;
void d_memmove(PTR, PTR, off_t); void d_memmove(PTR, PTR, off_t);
#endif #endif
#ifdef ANSI #if defined(ANSI) || defined(__STDC__)
off_t alloc_buf(off_t, char **), yd_addr(void); off_t alloc_buf(off_t, char **), yd_addr(void);
off_t range(int); off_t range(int);
void do_dot(void), do_exit(void), do_shell(void), do_undo(void); void do_dot(void), do_exit(void), do_shell(void), do_undo(void);
@ -214,26 +226,26 @@ extern off_t block_begin, block_end, block_size;
void do_mark(int, PTR), badcmd(char *), movebyte(void); void do_mark(int, PTR), badcmd(char *), movebyte(void);
void docmdline(char *), do_over(PTR, off_t, PTR), do_put(PTR, off_t, PTR); void docmdline(char *), do_over(PTR, off_t, PTR), do_put(PTR, off_t, PTR);
void jmpproc(int), printline(PTR, int); void jmpproc(int), printline(PTR, int);
int addfile(char *); int addfile(char *);
int bregexec(PTR, char *); PTR bregexec(PTR, char *);
int chk_comm(int); int chk_comm(int);
int doecmd(char *, int); int doecmd(char *, int);
int do_append(off_t, char *), do_logic(int, char *); int do_append(off_t, char *), do_logic(int, char *);
int do_delete(off_t, PTR); int do_delete(off_t, PTR);
int doset(char *); int doset(char *);
int do_substitution(int, char *, PTR, PTR); int do_substitution(int, char *, PTR, PTR);
int hexchar(void); int hexchar(void);
int outmsg(char *); int outmsg(char *);
int save_chk(char *, char *, char *, int); int save_chk(char *, char *, char *, int);
PTR searching(int, char *, PTR, PTR, int); PTR searching(int, char *, PTR, PTR, int);
PTR wordsearch(PTR, char); PTR wordsearch(PTR, char);
PTR backsearch(PTR, char); PTR backsearch(PTR, char);
PTR fsearch(PTR, PTR, char *); PTR fsearch(PTR, PTR, char *);
PTR fsearch_end(PTR, PTR, char *, PTR *); PTR fsearch_end(PTR, PTR, char *, PTR *);
PTR rsearch(PTR, PTR, char *); PTR rsearch(PTR, PTR, char *);
PTR end_word(PTR); PTR end_word(PTR);
PTR calc_addr(char **, PTR); PTR calc_addr(char **, PTR);
PTR do_ft(int, int); PTR do_ft(int, int);
char *patcpy(char *, char *, char); char *patcpy(char *, char *, char);
void setpage(PTR), msg(char *), emsg(char *), smsg(char *); void setpage(PTR), msg(char *), emsg(char *), smsg(char *);
void usage(void), bvi_init(char *), statpos(void), setcur(void); void usage(void), bvi_init(char *), statpos(void), setcur(void);
@ -244,43 +256,43 @@ extern off_t block_begin, block_end, block_size;
off_t edit(int), load(char *); off_t edit(int), load(char *);
off_t calc_size(char *); off_t calc_size(char *);
int ascii_comp(char *, char *), hex_comp(char *, char *); int ascii_comp(char *, char *), hex_comp(char *, char *);
int cur_forw(int), cur_back(void); int cur_forw(int), cur_back(void);
int lineout(void), save(char *, PTR, PTR, int); int lineout(void), save(char *, PTR, PTR, int);
int at_least(char *, char *, int); int at_least(char *, char *, int);
int vgetc(void), xpos(void), enlarge(off_t); int vgetc(void), xpos(void), enlarge(off_t);
int getcmdstr(char *, int), read_rc(char *); int getcmdstr(char *, int), read_rc(char *);
int wait_return(int); int wait_return(int);
#else #else
int addfile(); int addfile();
off_t alloc_buf(), yd_addr(); off_t alloc_buf(), yd_addr();
off_t range(); off_t range();
off_t calc_size(); off_t calc_size();
void do_mark(), badcmd(), movebyte(); void do_mark(), badcmd(), movebyte();
void do_back(), do_ins_chg(); void do_back(), do_ins_chg();
void jmpproc(), printline(); void jmpproc(), printline();
int chk_comm(); int chk_comm();
void docmdline(), do_over(), do_put(); void docmdline(), do_over(), do_put();
int doecmd(); int doecmd();
void do_dot(), do_exit(), do_shell(), do_undo(); void do_dot(), do_exit(), do_shell(), do_undo();
void do_tilde(), trunc_cur(); void do_tilde(), trunc_cur();
int do_append(), do_logic(); int do_append(), do_logic();
int do_delete(); int do_delete();
int doset(); int doset();
int do_substitution(); int do_substitution();
int hexchar(); int hexchar();
int outmsg(); int outmsg();
int save_chk(); int save_chk();
PTR searching(); PTR searching();
PTR wordsearch(); PTR wordsearch();
PTR backsearch(); PTR backsearch();
/* int bregexec(); */ /* int bregexec(); */
PTR bregexec(); PTR bregexec();
PTR fsearch(); PTR fsearch();
PTR fsearch_end(); PTR fsearch_end();
PTR rsearch(); PTR rsearch();
PTR end_word(); PTR end_word();
PTR calc_addr(); PTR calc_addr();
PTR do_ft(); PTR do_ft();
char *patcpy(); char *patcpy();
void setpage(), msg(), emsg(), smsg(); void setpage(), msg(), emsg(), smsg();
void usage(), bvi_init(), statpos(), setcur(); void usage(), bvi_init(), statpos(), setcur();
@ -290,9 +302,9 @@ extern off_t block_begin, block_end, block_size;
void quit(), sysemsg(), do_z(), stuffin(); void quit(), sysemsg(), do_z(), stuffin();
off_t edit(), load(); off_t edit(), load();
int ascii_comp(), hex_comp(); int ascii_comp(), hex_comp();
int cur_forw(), cur_back(); int cur_forw(), cur_back();
int lineout(), save(), at_least(), read_rc(); int lineout(), save(), at_least(), read_rc();
int getcmdstr(), enlarge(); int getcmdstr(), enlarge();
int vgetc(), xpos(); int vgetc(), xpos();
int wait_return(); int wait_return();
#endif #endif

99
comm.c
View file

@ -8,16 +8,18 @@
* 1999-09-10 V 1.2.0 final * 1999-09-10 V 1.2.0 final
* 2000-03-03 V 1.3.0 beta * 2000-03-03 V 1.3.0 beta
* 2000-07-15 V 1.3.0 final * 2000-07-15 V 1.3.0 final
* 2001-10-10 V 1.3.1 * 2001-10-10 V 1.3.1
* 2003-07-04 V 1.3.2 * 2003-07-04 V 1.3.2
* 2005-08-17 V 1.3.3 * 2005-08-17 V 1.3.3
* 2010-06-02 V 1.3.4 * 2010-06-02 V 1.3.4
* 2014-01-28 V 1.4.0 * 2014-01-28 V 1.4.0
* 2019-01-27 V 1.4.1 * 2019-01-27 V 1.4.1
* 2023-03-06 V 1.4.2
* 2025-07-19 V 1.5.0
* *
* NOTE: Edit this file with tabstop=4 ! * NOTE: Edit this file with tabstop=4 !
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -71,8 +73,8 @@ static char *c_argv[9];
char *nowrtmsg = "No write@since last change (:%s! overrides)"; char *nowrtmsg = "No write@since last change (:%s! overrides)";
char *morefiles = "more files@to edit"; char *morefiles = "more files@to edit";
char *ambigous = "Ambigous|Too many file names"; char *ambigous = "Ambiguous|Too many file names";
char *ambvalue = "Ambigous|Too many values"; char *ambvalue = "Ambiguous|Too many values";
char *extra = "Extra chars|Extra characters at end of command"; char *extra = "Extra chars|Extra characters at end of command";
char *noaddr = "No address allowed@on this command"; char *noaddr = "No address allowed@on this command";
char *noval = "No value@for binary operation"; char *noval = "No value@for binary operation";
@ -87,7 +89,7 @@ extern char **files; /* used for "next" and "rewind" */
extern int numfiles, curfile; extern int numfiles, curfile;
extern int errno; extern int errno;
static char oldbuf[CMDSZ]; /** for :!! command **/ static char oldbuf[CMDSZ + 3]; /** for :!! command **/
/* /*
@ -97,8 +99,7 @@ static char oldbuf[CMDSZ]; /** for :!! command **/
* the environment variable "BVIINIT" (or eventually .bvirc). * the environment variable "BVIINIT" (or eventually .bvirc).
*/ */
void void
docmdline(cmdline) docmdline(char *cmdline)
char *cmdline;
{ {
char buff[CMDSZ]; char buff[CMDSZ];
char cmdbuf[CMDSZ]; char cmdbuf[CMDSZ];
@ -285,22 +286,22 @@ docmdline(cmdline)
if ((c_argv[c_argc] = strtok(cmd, " \t")) != NULL) c_argc++; if ((c_argv[c_argc] = strtok(cmd, " \t")) != NULL) c_argc++;
while ((c_argv[c_argc] = strtok(NULL, " \t")) != NULL) c_argc++; while ((c_argv[c_argc] = strtok(NULL, " \t")) != NULL) c_argc++;
if (c_argc > 1) { if (c_argc > 1) {
emsg(ambigous); emsg(ambigous);
return; } return; }
if (c_argc == 1) { if (c_argc == 1) {
/* change '%' to Filename */ /* change '%' to Filename */
while ((p = strchr(c_argv[0], '%')) != NULL && *(p-1) != '\\') { while ((p = strchr(c_argv[0], '%')) != NULL && *(p-1) != '\\') {
if (name == NULL) { if (name == NULL) {
emsg("No filename@to substitute for %"); emsg("No filename@to substitute for %");
return; return;
} }
*p = '\0'; *p = '\0';
strcpy (oldbuf, c_argv[0]); strcpy (oldbuf, c_argv[0]);
strcat (oldbuf, name); strcat (oldbuf, name);
strcat (oldbuf, p + 1); strcat (oldbuf, p + 1);
c_argv[0] = oldbuf; c_argv[0] = oldbuf;
} }
} }
if (name == NULL && c_argc != 0) name = strdup(c_argv[0]); if (name == NULL && c_argc != 0) name = strdup(c_argv[0]);
if (force) { if (force) {
@ -308,7 +309,7 @@ docmdline(cmdline)
else ok = save(c_argv[0], start_addr, end_addr, saveflag); else ok = save(c_argv[0], start_addr, end_addr, saveflag);
} else { } else {
if (c_argc == 0) { if (c_argc == 0) {
save_chk(name, start_addr, end_addr, saveflag); ok = save_chk(name, start_addr, end_addr, saveflag);
} else { } else {
if (!stat(c_argv[0], &buf)) { if (!stat(c_argv[0], &buf)) {
if (saveflag == WRITE) { if (saveflag == WRITE) {
@ -628,11 +629,7 @@ yd_addr()
/*********** Save file if not read only ********************/ /*********** Save file if not read only ********************/
int int
save_chk(fname, start, end, flags) save_chk(char *fname, char *start, char *end, int flags)
char *fname;
char *start;
char *end;
int flags;
{ {
if (P(P_RO)) { if (P(P_RO)) {
sprintf(string, "\"%s\" File is read only", name); sprintf(string, "\"%s\" File is read only", name);
@ -656,9 +653,7 @@ do_exit()
int int
doecmd(arg, force) doecmd(char *arg, int force)
char *arg;
int force;
{ {
char *tmp; char *tmp;
@ -721,33 +716,34 @@ clearstr()
/**** displays an error message *****/ /**** displays an error message *****/
void void
emsg(s) emsg(char *s)
char *s;
{ {
int cnt; int cnt;
int stchar; /*
int stchar;
if (P(P_EB)) beep();
if (P(P_MO)) { if (P(P_MO)) {
stchar = statsize; stchar = statsize;
} else { } else {
stchar = 0; stchar = 0;
} }
*/
if (P(P_EB)) beep();
statusflag = 0;
clearstr(); clearstr();
attrset(A_REVERSE); attrset(A_REVERSE);
cnt = outmsg(s); cnt = outmsg(s);
attrset(A_NORMAL); attrset(A_NORMAL);
if (cnt >= (maxx - stchar)) { if (cnt >= (maxx)) {
addch('\n'); // addch('\n');
wait_return(TRUE); } wait_return(TRUE);
}
} }
/*** System error message *****/ /*** System error message *****/
void void
sysemsg(s) sysemsg(char *s)
char *s;
{ {
char string[256]; char string[256];
@ -763,8 +759,7 @@ sysemsg(s)
/*** displays mode if showmode set *****/ /*** displays mode if showmode set *****/
void void
smsg(s) smsg(char *s)
char *s;
{ {
if (P(P_MO)) { if (P(P_MO)) {
msg(s); msg(s);
@ -775,30 +770,30 @@ smsg(s)
/************* displays s on status line *****************/ /************* displays s on status line *****************/
void void
msg(s) msg(char *s)
char *s;
{ {
/*
int stchar; int stchar;
if (P(P_MO)) { if (P(P_MO)) {
stchar = statsize; stchar = statsize;
} else { } else {
stchar = 0; stchar = 0;
} }o*/
statusflag = 0;
clearstr(); clearstr();
if (outmsg(s) >= (maxx - stchar)) { if (outmsg(s) >= maxx) {
addch('\n'); // addch('\n');
wait_return(TRUE); wait_return(TRUE);
} }
} }
int int
outmsg(s) outmsg(char *s)
char *s;
{ {
char *poi; char *poi;
int cnt = 0; int cnt = 0;
move(maxy, 0); move(maxy, 0);
poi = strchr(s, '|'); poi = strchr(s, '|');
@ -810,7 +805,7 @@ outmsg(s)
cnt++; cnt++;
} }
} else { } else {
if (poi) poi++; if (poi) poi++;
else poi = s; else poi = s;
while (*poi) { while (*poi) {
if (*poi == '@') addch(' '); if (*poi == '@') addch(' ');
@ -827,8 +822,7 @@ outmsg(s)
* *
*/ */
int int
wait_return(flag) wait_return(int flag)
int flag;
{ {
int c; int c;
@ -851,8 +845,7 @@ wait_return(flag)
int int
chk_comm(flag) chk_comm(int flag)
int flag;
{ {
if ((flag & NO_ADDR) && (addr_flag > 0)) { if ((flag & NO_ADDR) && (addr_flag > 0)) {
emsg(noaddr); return 1; } emsg(noaddr); return 1; }

1276
config.guess vendored

File diff suppressed because it is too large Load diff

View file

@ -1,87 +1,144 @@
/* config.h.in. Generated automatically from configure.in by autoheader. */ /* config.h.in. Generated from configure.ac by autoheader. */
/***** begin user configuration section *****/ /***** begin user configuration section *****/
#undef HAVE_NCURSES_H #undef HAVE_NCURSES_H
#undef HAVE_CURSES_H #undef HAVE_CURSES_H
#undef HAVE_NCURSESW_CURSES_H
#undef NO_SYSERRL #undef NO_SYSERRL
#undef NEED_PUTC_CHAR #undef NEED_PUTC_CHAR
#undef HAVE_NCURSES_TERM_H
/* Define if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define if you have the `memmove' function. */
#undef HAVE_MEMMOVE
/* Define if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define if you have the <ncurses/term.h> header file. */
#undef HAVE_NCURSES_TERM_H #undef HAVE_NCURSES_TERM_H
/* Define if you have the <stdint.h> header file. */ /* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
#undef HAVE_FSEEKO
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
to 0 otherwise. */
#undef HAVE_MALLOC
/* Define to 1 if you have the `memmove' function. */
#undef HAVE_MEMMOVE
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the <ncurses/term.h> header file. */
#undef HAVE_NCURSES_TERM_H
/* Define to 1 if your system has a GNU libc compatible `realloc' function,
and to 0 otherwise. */
#undef HAVE_REALLOC
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H #undef HAVE_STDINT_H
/* Define if you have the <stdlib.h> header file. */ /* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H #undef HAVE_STDLIB_H
/* Define if you have the `strdup' function. */ /* Define to 1 if you have the `strdup' function. */
#undef HAVE_STRDUP #undef HAVE_STRDUP
/* Define if you have the `strerror' function. */ /* Define to 1 if you have the `strerror' function. */
#undef HAVE_STRERROR #undef HAVE_STRERROR
/* Define if you have the <strings.h> header file. */ /* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H #undef HAVE_STRINGS_H
/* Define if you have the <string.h> header file. */ /* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H #undef HAVE_STRING_H
/* Define if you have the `strtol' function. */ /* Define to 1 if you have the `strtol' function. */
#undef HAVE_STRTOL #undef HAVE_STRTOL
/* Define if you have the <sys/stat.h> header file. */ /* Define to 1 if you have the `strtoll' function. */
#undef HAVE_STRTOLL
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H #undef HAVE_SYS_STAT_H
/* Define if you have the <sys/types.h> header file. */ /* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H #undef HAVE_SYS_TYPES_H
/* Define if you have the <termcap.h> header file. */ /* Define to 1 if you have the <termcap.h> header file. */
#undef HAVE_TERMCAP_H #undef HAVE_TERMCAP_H
/* Define if you have the <termios.h> header file. */ /* Define to 1 if you have the <termios.h> header file. */
#undef HAVE_TERMIOS_H #undef HAVE_TERMIOS_H
/* Define if you have the <termio.h> header file. */ /* Define to 1 if you have the <termio.h> header file. */
#undef HAVE_TERMIO_H #undef HAVE_TERMIO_H
/* Define if you have the <term.h> header file. */ /* Define to 1 if you have the <term.h> header file. */
#undef HAVE_TERM_H #undef HAVE_TERM_H
/* Define if you have the <unistd.h> header file. */ /* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H #undef HAVE_UNISTD_H
/* The size of a `int', as computed by sizeof. */ /* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* The size of `int', as computed by sizeof. */
#undef SIZEOF_INT #undef SIZEOF_INT
/* The size of a `long', as computed by sizeof. */ /* The size of `long', as computed by sizeof. */
#undef SIZEOF_LONG #undef SIZEOF_LONG
/* The size of a `void *', as computed by sizeof. */ /* The size of `long long', as computed by sizeof. */
#undef SIZEOF_LONG_LONG
/* The size of `void *', as computed by sizeof. */
#undef SIZEOF_VOID_P #undef SIZEOF_VOID_P
/* Define if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS #undef STDC_HEADERS
/* Enable large inode numbers on Mac OS X 10.5. */
#ifndef _DARWIN_USE_64_BIT_INODE
# define _DARWIN_USE_64_BIT_INODE 1
#endif
/* Number of bits in a file offset, on hosts where this is settable. */
#undef _FILE_OFFSET_BITS
/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
#undef _LARGEFILE_SOURCE
/* Define for large files, on AIX-style hosts. */
#undef _LARGE_FILES
/* Define to rpl_malloc if the replacement function should be used. */
#undef malloc
/* Define to `int' if <sys/types.h> does not define. */ /* Define to `int' if <sys/types.h> does not define. */
#undef off_t #undef off_t
/* Define to rpl_realloc if the replacement function should be used. */
#undef realloc
/* Define to `unsigned int' if <sys/types.h> does not define. */ /* Define to `unsigned int' if <sys/types.h> does not define. */
#undef size_t #undef size_t

1423
config.sub vendored

File diff suppressed because it is too large Load diff

839
configure vendored

File diff suppressed because it is too large Load diff

View file

@ -12,13 +12,13 @@ dnl On SunOS4 systems you have to use the /usr/5bin/cc compiler
dnl to get the SYSV curses library: dnl to get the SYSV curses library:
case "$host_os" in case "$host_os" in
sunos4*) sunos4*)
AC_MSG_RESULT("using /usr/5bin/cc") AC_MSG_RESULT("using /usr/5bin/cc")
CC="/usr/5bin/cc" CC="/usr/5bin/cc"
ac_objext="o" ac_objext="o"
;; ;;
*) *)
AC_PROG_CC AC_PROG_CC
;; ;;
esac esac
@ -26,11 +26,11 @@ dnl Some curses specials
dnl Solaris needs for tputs 'putc(char)' instead of 'putc(int)' dnl Solaris needs for tputs 'putc(char)' instead of 'putc(int)'
case "$host_os" in case "$host_os" in
solaris*) solaris*)
CPPFLAGS="${CPPFLAGS} -D_MSE_INT_H" CPPFLAGS="${CPPFLAGS} -D_MSE_INT_H"
AC_DEFINE(NEED_PUTC_CHAR) AC_DEFINE(NEED_PUTC_CHAR)
;; ;;
hpux9*) DEFS=${DEFS-"-DMINICURSES"} hpux9*) DEFS=${DEFS-"-DMINICURSES"}
;; ;;
esac esac
@ -63,18 +63,23 @@ AC_ARG_WITH(ncurses,
]) ])
AC_CHECK_HEADER([ncurses.h],[ AC_CHECK_HEADER([ncurses.h],[
AC_SEARCH_LIBS([initscr], [ncurses],[ AC_SEARCH_LIBS([initscr], [ncurses], [
AC_DEFINE(HAVE_NCURSES_H) AC_DEFINE(HAVE_NCURSES_H)
AC_SEARCH_LIBS([tputs], [tinfo])], [ AC_SEARCH_LIBS([tputs], [tinfo])],[
AC_SEARCH_LIBS([initscr], [curses],[ AC_SEARCH_LIBS([initscr], [curses],[
AC_DEFINE(HAVE_CURSES_H) AC_DEFINE(HAVE_CURSES_H)
AC_SEARCH_LIBS([tputs], [tinfo])],[ AC_SEARCH_LIBS([tputs], [tinfo])],[
AC_MSG_ERROR([bvi requires the curses library])])])],[ AC_MSG_ERROR([bvi requires a curses library])])])
],[
AC_CHECK_HEADER([curses.h],[ AC_CHECK_HEADER([curses.h],[
AC_SEARCH_LIBS([initscr], [curses], [ AC_SEARCH_LIBS([initscr], [curses], [
AC_DEFINE(HAVE_CURSES_H)],[ AC_DEFINE(HAVE_CURSES_H)],[
AC_MSG_ERROR([bvi requires the curses library])])],[ AC_MSG_ERROR([bvi requires a curses library])])],[
AC_MSG_ERROR([bvi requires the curses library])])]) AC_CHECK_HEADER([ncursesw/curses.h], [
AC_SEARCH_LIBS([initscr], [ncursesw], [
AC_DEFINE(HAVE_NCURSESW_CURSES_H)],[
AC_MSG_ERROR([bvi requires a curses library])])],[
AC_MSG_ERROR([bvi requires a curses library])])])])
dnl Checks for typedefs, structures, and compiler characteristics. dnl Checks for typedefs, structures, and compiler characteristics.
dnl AC_TYPE_SIZE_T dnl AC_TYPE_SIZE_T

66
dosio.c
View file

@ -141,14 +141,14 @@ save(char *fname, PTR start, PTR end, int flags)
if (!fname) { if (!fname) {
emsg("No file|No current filename"); emsg("No file|No current filename");
return 0; return 0;
} }
if (stat(fname, &buf) == -1) { if (stat(fname, &buf) == -1) {
newstr = "[New file] "; newstr = "[New file] ";
} else { } else {
if (S_ISDIR(buf.st_mode)) { if (S_ISDIR(buf.st_mode)) {
sprintf(string, "\"%s\" Is a directory", fname); sprintf(string, "\"%s\" Is a directory", fname);
msg(string); msg(string);
return 0; return 0;
} }
newstr = ""; newstr = "";
} }
@ -159,20 +159,20 @@ save(char *fname, PTR start, PTR end, int flags)
return 0; return 0;
} }
if (filemode == PARTIAL) { if (filemode == PARTIAL) {
if (block_read) { if (block_read) {
filesize = block_read; filesize = block_read;
sprintf(string, "\"%s\" range %lu-%lu", fname, sprintf(string, "\"%s\" range %lu-%lu", fname,
(unsigned long)block_begin, (unsigned long)block_begin,
(unsigned long)(block_begin - 1 + filesize)); (unsigned long)(block_begin - 1 + filesize));
if (lseek(fd, block_begin, SEEK_SET) < 0) { if (lseek(fd, block_begin, SEEK_SET) < 0) {
sysemsg(fname); sysemsg(fname);
return 0; return 0;
} }
} else { } else {
msg("Null range"); msg("Null range");
return 0; return 0;
} }
} else { } else {
filesize = end - start + 1L; filesize = end - start + 1L;
sprintf(string, "\"%s\" %s%lu@bytes", fname, newstr, (long)filesize); sprintf(string, "\"%s\" %s%lu@bytes", fname, newstr, (long)filesize);
} }
@ -228,7 +228,7 @@ load(char *fname)
} else if (filemode == REGULAR) { } else if (filemode == REGULAR) {
memsize = buf.st_size + 100; memsize = buf.st_size + 100;
} else { } else {
memsize = 1000; memsize = 1000;
} }
if (farcoreleft() < memsize) { if (farcoreleft() < memsize) {
@ -255,18 +255,18 @@ load(char *fname)
filesize += (off_t)n; filesize += (off_t)n;
} while (filesize < buf.st_size); } while (filesize < buf.st_size);
if ((filesize == 0) { if ((filesize == 0) {
sprintf(string, "\"%s\" No such range: %lu-%lu", fname, sprintf(string, "\"%s\" No such range: %lu-%lu", fname,
(unsigned long)block_begin, (unsigned long)(block_end)); (unsigned long)block_begin, (unsigned long)(block_end));
} else { } else {
sprintf(string, "\"%s\" range %lu-%lu", fname, sprintf(string, "\"%s\" range %lu-%lu", fname,
(unsigned long)block_begin, (unsigned long)block_begin,
(unsigned long)(block_begin + filesize - 1)); (unsigned long)(block_begin + filesize - 1));
} }
filemode = PARTIAL; filemode = PARTIAL;
block_read = filesize; block_read = filesize;
msg(string); msg(string);
P(P_OF) = block_begin; P(P_OF) = block_begin;
params[P_OF].flags |= P_CHANGED; params[P_OF].flags |= P_CHANGED;
} }
} else if (filemode == REGULAR) { } else if (filemode == REGULAR) {
chunk = buf.st_size > 0xfffe ? 0xfffe : buf.st_size; chunk = buf.st_size > 0xfffe ? 0xfffe : buf.st_size;

177
edit.c
View file

@ -12,8 +12,9 @@
* 2006-04-05 V 1.3.3 alpha - binary representation * 2006-04-05 V 1.3.3 alpha - binary representation
* 2014-09-30 V 1.4.0 * 2014-09-30 V 1.4.0
* 2019-10-12 V 1.4.1 * 2019-10-12 V 1.4.1
* 2025-07-19 V 1.5.0
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -63,8 +64,7 @@ static char *getcnext = NULL;
* characters (for "." command) * characters (for "." command)
*/ */
off_t off_t
edit(mode) edit(int mode)
int mode;
{ {
int ch, ch1; int ch, ch1;
size_t len; size_t len;
@ -117,7 +117,7 @@ edit(mode)
setcur(); setcur();
continue; continue;
} }
if (ch == KEY_BACKSPACE if (ch == KEY_BACKSPACE
|| ch == ASCII_DEL || ch == ASCII_DEL
|| ch == BVICTRL('H')) { || ch == BVICTRL('H')) {
if (count > 0) { if (count > 0) {
@ -286,8 +286,7 @@ escape:
* else setpage() * else setpage()
*/ */
PTR PTR
do_ft(ch, flag) do_ft(int ch, int flag)
int ch, flag;
{ {
static int chi; static int chi;
static int chp = 1; static int chp = 1;
@ -298,7 +297,7 @@ do_ft(ch, flag)
switch (ch) { switch (ch) {
/* /*
case 1: beep(); case 1: beep();
return NULL; no previous command return NULL; no previous command
case -1: if (chp == 'f' || chp == 't') dir = BACKWARD; case -1: if (chp == 'f' || chp == 't') dir = BACKWARD;
else dir = FORWARD; else dir = FORWARD;
break; break;
@ -364,8 +363,7 @@ do_ft(ch, flag)
void void
do_z(mode) do_z(int mode)
int mode;
{ {
switch (mode) { switch (mode) {
case '.': while (y != maxy / 2) { case '.': while (y != maxy / 2) {
@ -401,8 +399,7 @@ do_z(mode)
void void
scrolldown(lns) scrolldown(int lns)
int lns;
{ {
while (lns--) { while (lns--) {
if (maxpos >= (pagepos + Anzahl)) pagepos += Anzahl; if (maxpos >= (pagepos + Anzahl)) pagepos += Anzahl;
@ -414,8 +411,7 @@ scrolldown(lns)
void void
scrollup(lns) scrollup(int lns)
int lns;
{ {
while (lns--) { while (lns--) {
if (mem <= (PTR)(pagepos - Anzahl)) pagepos -= Anzahl; if (mem <= (PTR)(pagepos - Anzahl)) pagepos -= Anzahl;
@ -459,13 +455,14 @@ setcur()
void void
statpos() statpos()
{ {
char bin_val [9]; char bin_val [9];
unsigned char Char1; unsigned char Char1;
int i; int i;
off_t bytepos; off_t bytepos;
char string[MAXCMD+1], str[6]; char string[MAXCMD+1], str[6];
if (!P(P_MO)) return; // if (!P(P_MO)) return;
if (!statusflag) return;
bytepos = current - mem; bytepos = current - mem;
if (bytepos >= filesize) { if (bytepos >= filesize) {
// mvaddstr(maxy, status, " "); // mvaddstr(maxy, status, " ");
@ -483,11 +480,19 @@ statpos()
} }
} }
bin_val[8] = '\0'; bin_val[8] = '\0';
sprintf(string, "%08llX %s \\%03o 0x%02X %3d ",
(long long)(bytepos + P(P_OF)), bin_val, Char1, Char1, Char1);
attrset(A_BOLD); attrset(A_BOLD);
status = maxx - 1 - statsize; status = maxx - 1 - statsize;
if (status > 0) {
sprintf(string, "%08llX %s \\%03o 0x%02X %3d ",
(long long)(bytepos + P(P_OF)), bin_val, Char1, Char1, Char1);
} else {
sprintf(string, "%08llX %3d ",
(long long)(bytepos + P(P_OF)), Char1);
mvaddstr(maxy, 0, string);
attrset(A_NORMAL);
return;
}
mvaddstr(maxy, status, string); mvaddstr(maxy, status, string);
if (isprint(Char1)) { if (isprint(Char1)) {
@ -521,10 +526,9 @@ statpos()
} }
void void
printline(mempos, scpos) printline(PTR mempos, int scpos)
PTR mempos;
int scpos;
{ {
PTR hl_start = 0; PTR hl_start = 0;
PTR hl_end = 0; PTR hl_end = 0;
@ -544,44 +548,44 @@ printline(mempos, scpos)
mv_pos = AnzAdd; mv_pos = AnzAdd;
*linbuf = '\0'; *linbuf = '\0';
if (hl_spat) { if (hl_spat) {
f_start = (mempos - Anzahl) < mem ? mem : (mempos - Anzahl); f_start = (mempos - Anzahl) < mem ? mem : (mempos - Anzahl);
f_end = mempos + (2 * Anzahl); f_end = mempos + (2 * Anzahl);
hl_start = fsearch_end(f_start, f_end, search_pat, &hl_end); hl_start = fsearch_end(f_start, f_end, search_pat, &hl_end);
} }
for (print_pos = 0; print_pos < Anzahl; print_pos++) { for (print_pos = 0; print_pos < Anzahl; print_pos++) {
if (hl_spat) { if (hl_spat) {
while (hl_start != NULL) { while (hl_start != NULL) {
if (hl_start < mempos) { if (hl_start < mempos) {
if (hl_end < mempos) { if (hl_end < mempos) {
f_start = hl_start + 1; f_start = hl_start + 1;
hl_start = fsearch_end(f_start, f_end, search_pat, &hl_end); hl_start = fsearch_end(f_start, f_end, search_pat, &hl_end);
} else { } else {
attrset(A_STANDOUT); /* start out highlighted */ attrset(A_STANDOUT); /* start out highlighted */
break; break;
} }
} else if (hl_start >= mempos) { } else if (hl_start >= mempos) {
break; break;
} }
} }
if (hl_start != NULL) { if (hl_start != NULL) {
if ((hl_start - mempos) == print_pos) { if ((hl_start - mempos) == print_pos) {
mvaddstr(scpos, mv_pos, linbuf); mvaddstr(scpos, mv_pos, linbuf);
mv_pos = AnzAdd + (3 * print_pos); mv_pos = AnzAdd + (3 * print_pos);
*linbuf = '\0'; *linbuf = '\0';
attrset(A_STANDOUT); attrset(A_STANDOUT);
} }
if ((hl_end - mempos) == print_pos) { if ((hl_end - mempos) == print_pos) {
mvaddstr(scpos, mv_pos, linbuf); mvaddstr(scpos, mv_pos, linbuf);
*linbuf = '\0'; *linbuf = '\0';
mv_pos = AnzAdd + (3 * print_pos); mv_pos = AnzAdd + (3 * print_pos);
f_start = hl_end; f_start = hl_end;
hl_start = fsearch_end(f_start, f_end, search_pat, &hl_end); hl_start = fsearch_end(f_start, f_end, search_pat, &hl_end);
if (f_start != hl_start) { if (f_start != hl_start) {
attrset(A_NORMAL); attrset(A_NORMAL);
} }
} }
} }
} }
if (mempos + print_pos >= maxpos) { if (mempos + print_pos >= maxpos) {
sprintf(tmpbuf, " "); sprintf(tmpbuf, " ");
@ -609,10 +613,10 @@ printline(mempos, scpos)
addstr(string); addstr(string);
attrset(A_NORMAL); attrset(A_NORMAL);
} else { } else {
addstr("."); addstr(".");
} }
} else { } else {
addstr("."); addstr(".");
} }
} }
} else { } else {
@ -660,8 +664,7 @@ repaint() /***** redraw screen *********************/
/******* display an arbitrary address on screen *******/ /******* display an arbitrary address on screen *******/
void void
setpage(addr) setpage(PTR addr)
PTR addr;
{ {
if ((addr >= pagepos) && ((addr - pagepos) < screen)) { if ((addr >= pagepos) && ((addr - pagepos) < screen)) {
y = (addr - pagepos) / Anzahl; y = (addr - pagepos) / Anzahl;
@ -684,8 +687,7 @@ setpage(addr)
int int
cur_forw(check) cur_forw(int check)
int check;
{ {
if (check) { if (check) {
if (current - mem >= filesize) { if (current - mem >= filesize) {
@ -760,8 +762,7 @@ cur_back()
void void
fileinfo(fname) fileinfo(char *fname)
char *fname;
{ {
off_t bytepos; off_t bytepos;
char fstatus[MAXCMD]; char fstatus[MAXCMD];
@ -788,8 +789,8 @@ fileinfo(fname)
if (edits) strcat(string, "[Modified] "); if (edits) strcat(string, "[Modified] ");
if (filesize) { if (filesize) {
bytepos = (pagepos + y * Anzahl + xpos()) - mem + 1L; bytepos = (pagepos + y * Anzahl + xpos()) - mem + 1L;
sprintf(fstatus, "byte %llu of %llu --%llu%%--", sprintf(fstatus, "byte %llu of %llu --%llu%%--",
(unsigned long long)bytepos, (unsigned long long)bytepos,
(unsigned long long)filesize, (unsigned long long)filesize,
(unsigned long long)(bytepos * 100L / filesize)); (unsigned long long)(bytepos * 100L / filesize));
strcat(string, fstatus); strcat(string, fstatus);
@ -830,8 +831,7 @@ vgetc()
void void
stuffin(s) stuffin(char *s)
char *s;
{ {
if (s == NULL) { /* clear the stuff buffer */ if (s == NULL) { /* clear the stuff buffer */
getcnext = NULL; getcnext = NULL;
@ -846,9 +846,7 @@ char *s;
void void
do_back(n, start) do_back(off_t n, PTR start)
off_t n;
PTR start;
{ {
if (start - n < mem) { if (start - n < mem) {
beep(); beep();
@ -870,9 +868,7 @@ do_back(n, start)
int int
do_delete(n, start) do_delete(off_t n, PTR start)
off_t n;
PTR start;
{ {
if (n + start > maxpos) { if (n + start > maxpos) {
beep(); beep();
@ -902,10 +898,7 @@ do_delete(n, start)
* The :insert, :append and :change command * The :insert, :append and :change command
*/ */
void void
do_ins_chg(start, arg, mode) do_ins_chg(PTR start, char *arg, int mode)
PTR start;
char *arg;
int mode;
{ {
int base; int base;
off_t buffer = BUFFER; off_t buffer = BUFFER;
@ -945,22 +938,22 @@ do_ins_chg(start, arg, mode)
if (base == 1) { /* ASCII */ if (base == 1) { /* ASCII */
while (*poi != '\0') { while (*poi != '\0') {
if (*poi == '\\') { if (*poi == '\\') {
switch (*(++poi)) { switch (*(++poi)) {
case 'n': val = '\n'; break; case 'n': val = '\n'; break;
case 'r': val = '\r'; break; case 'r': val = '\r'; break;
case 't': val = '\t'; break; case 't': val = '\t'; break;
case '0': val = '\0'; break; case '0': val = '\0'; break;
case '\\': val = '\\'; break; case '\\': val = '\\'; break;
default : val = '\\'; poi--; default : val = '\\'; poi--;
} }
poi++; poi++;
} else { } else {
val = *poi++; val = *poi++;
} }
*(tempbuf + count++) = val; *(tempbuf + count++) = val;
} }
} else { } else {
while (isspace(cmdstr[strlen(cmdstr) - 1])) while (isspace(cmdstr[strlen(cmdstr) - 1]))
cmdstr[strlen(cmdstr) - 1] = '\0'; cmdstr[strlen(cmdstr) - 1] = '\0';
while (*poi != '\0') { while (*poi != '\0') {
val = strtol(poi, &epoi, base); val = strtol(poi, &epoi, base);
@ -993,7 +986,7 @@ do_ins_chg(start, arg, mode)
case U_APPEND: case U_APPEND:
if ((undo_count = alloc_buf(count, &undo_buf)) == 0L) { if ((undo_count = alloc_buf(count, &undo_buf)) == 0L) {
repaint(); repaint();
goto mfree; goto mfree;
} }
do_append((off_t)count, tempbuf); do_append((off_t)count, tempbuf);
memcpy(undo_buf, tempbuf, count); memcpy(undo_buf, tempbuf, count);
@ -1021,11 +1014,9 @@ clear_marks()
void void
do_mark(mark, addr) do_mark(int mark, PTR addr)
int mark;
PTR addr;
{ {
if (mark < 'a' || mark > 'z' || current >= maxpos) if (mark < 'a' || mark > 'z' || current >= maxpos)
return; return;
markbuf[mark - 'a'] = addr; markbuf[mark - 'a'] = addr;
} }

63
io.c
View file

@ -11,10 +11,12 @@
* 2010-06-02 V 1.3.4 * 2010-06-02 V 1.3.4
* 2014-05-03 V 1.4.0 * 2014-05-03 V 1.4.0
* 2019-01-27 V 1.4.1 * 2019-01-27 V 1.4.1
* 2022-03-09 V 1.4.2
* 2025-07-19 V 1.5.0
* *
* NOTE: Edit this file with tabstop=4 ! * NOTE: Edit this file with tabstop=4 !
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -55,6 +57,20 @@
# include <fcntl.h> # include <fcntl.h>
#endif #endif
//@ read on linux has a limit of 0x7ffff000 bytes (see `man read`)
//@ this function calls recursively read until all `count` characters are read.
static ssize_t
read_to_end(int fd, void *buf, size_t count) {
size_t read_bytes = 0;
while(read_bytes < count) {
const ssize_t ret = read(fd, ((char*)buf)+read_bytes, count-read_bytes);
if(ret <= 0) return ret;
read_bytes += ret;
}
return read_bytes;
}
int filemode; int filemode;
static struct stat buf; static struct stat buf;
static off_t block_read; static off_t block_read;
@ -64,11 +80,7 @@ extern char *fname_buf;
/*********** Save the patched file ********************/ /*********** Save the patched file ********************/
int int
save(fname, start, end, flags) save(char *fname, char *start, char *end, int flags)
char *fname;
char *start;
char *end;
int flags;
{ {
int fd; int fd;
char *string; char *string;
@ -152,8 +164,7 @@ save(fname, start, end, flags)
/* loads a file, returns the filesize */ /* loads a file, returns the filesize */
off_t off_t
load(fname) load(char *fname)
char *fname;
{ {
int fd = -1; int fd = -1;
//char *string; //char *string;
@ -220,7 +231,7 @@ load(fname)
params[P_RO].flags |= P_CHANGED; params[P_RO].flags |= P_CHANGED;
} }
} else { } else {
sysemsg(fname); sysemsg(fname);
filemode = ERROR; filemode = ERROR;
} }
} }
@ -261,7 +272,7 @@ load(fname)
sysemsg(fname); sysemsg(fname);
filemode = ERROR; filemode = ERROR;
} else { } else {
if ((filesize = read(fd, mem, block_size)) == 0) { if ((filesize = read_to_end(fd, mem, block_size)) == 0) {
sprintf(fname_buf, "\"%s\" Empty file", fname); sprintf(fname_buf, "\"%s\" Empty file", fname);
filemode = ERROR; filemode = ERROR;
} else { } else {
@ -278,7 +289,7 @@ load(fname)
} }
} else if ((filemode == REGULAR) || (filemode == DIRECTORY)) { } else if ((filemode == REGULAR) || (filemode == DIRECTORY)) {
filesize = buf.st_size; filesize = buf.st_size;
if (read(fd, mem, filesize) != filesize) { if (read_to_end(fd, mem, filesize) != filesize) {
sysemsg(fname); sysemsg(fname);
filemode = ERROR; filemode = ERROR;
} }
@ -318,12 +329,11 @@ load(fname)
} }
/* argument "dir" not used! /* argument "dir" not used!
* Needed for DOS version only * Needed for DOS version only
*/ */
void void
bvi_init(dir) bvi_init(char *dir)
char *dir;
{ {
char *initstr; char *initstr;
char rcpath[MAXCMD]; char rcpath[MAXCMD];
@ -337,7 +347,7 @@ bvi_init(dir)
docmdline(initstr); docmdline(initstr);
return; return;
} }
#ifdef DJGPP #ifdef DJGPP
strcpy(rcpath, "c:"); strcpy(rcpath, "c:");
strcpy(rcpath, dir); strcpy(rcpath, dir);
@ -363,8 +373,7 @@ bvi_init(dir)
int int
enlarge(add) enlarge(off_t add)
off_t add;
{ {
char *newmem; char *newmem;
off_t savecur, savepag, savemax, saveundo; off_t savecur, savepag, savemax, saveundo;
@ -413,11 +422,10 @@ do_shell()
#ifndef HAVE_STRDUP #ifndef HAVE_STRDUP
char * char *
strdup(s) strdup(char *s)
char *s;
{ {
char *p; char *p;
size_t n; size_t n;
n = strlen(s) + 1; n = strlen(s) + 1;
if ((p = (char *)malloc(n)) != NULL) if ((p = (char *)malloc(n)) != NULL)
@ -432,10 +440,7 @@ strdup(s)
* Copy contents of memory (with possible overlapping). * Copy contents of memory (with possible overlapping).
*/ */
char * char *
memmove(s1, s2, n) memmove(char *s1, char *s2, size_t n)
char *s1;
char *s2;
size_t n;
{ {
bcopy(s2, s1, n); bcopy(s2, s1, n);
return(s1); return(s1);
@ -444,9 +449,7 @@ memmove(s1, s2, n)
off_t off_t
alloc_buf(n, buffer) alloc_buf(off_t n, char **buffer)
off_t n;
char **buffer;
{ {
if (*buffer == NULL) { if (*buffer == NULL) {
*buffer = (char *)malloc(n); *buffer = (char *)malloc(n);
@ -462,8 +465,7 @@ alloc_buf(n, buffer)
int int
addfile(fname) addfile(char *fname)
char *fname;
{ {
int fd; int fd;
off_t oldsize; off_t oldsize;
@ -478,7 +480,7 @@ addfile(fname)
} }
oldsize = filesize; oldsize = filesize;
if (enlarge(buf.st_size)) return 1; if (enlarge(buf.st_size)) return 1;
if (read(fd, mem + filesize, buf.st_size) == -1) { if (read_to_end(fd, mem + filesize, buf.st_size) == -1) {
sysemsg(fname); sysemsg(fname);
return 1; return 1;
} }
@ -488,3 +490,4 @@ addfile(fname)
setpage(mem + oldsize); setpage(mem + oldsize);
return 0; return 0;
} }

59
macro.m4 Normal file
View file

@ -0,0 +1,59 @@
AC_CHECK_HEADER
(
[ncurses.h],
[
AC_SEARCH_LIBS
([initscr], [ncurses],
[
AC_DEFINE(HAVE_NCURSES_H)
AC_SEARCH_LIBS([tputs], [tinfo])
],[
AC_SEARCH_LIBS
(
[initscr], [curses],
[
AC_DEFINE(HAVE_CURSES_H)
AC_SEARCH_LIBS([tputs], [tinfo])
],[
AC_MSG_ERROR([bvi requires a curses library])
]
)
]
)
],[
AC_CHECK_HEADER
(
[curses.h],
[
AC_SEARCH_LIBS
(
[initscr], [curses],
[
AC_DEFINE(HAVE_CURSES_H)
],[
AC_MSG_ERROR([bvi requires a curses library])
]
)
],[
# statt: AC_MSG_ERROR([bvi requires a curses library])
AC_CHECK_HEADER
(
[ncursesw/curses.h],
[
AC_SEARCH_LIBS
(
[initscr], [curses],
[
AC_DEFINE(HAVE_NCURSESW_CURSES_H)
],[
AC_MSG_ERROR([bvi requires a curses library])
]
)
],[
AC_MSG_ERROR([bvi requires a curses library])
]
)
]
)
]
)

View file

@ -1 +1 @@
#define VERSION "1.4.1" #define VERSION "1.5.0"

79
re.c
View file

@ -11,8 +11,10 @@
* 2010-06-02 V 1.3.4 * 2010-06-02 V 1.3.4
* 2013-08-24 V 1.4.0 * 2013-08-24 V 1.4.0
* 2019-01-28 V 1.4.1 * 2019-01-28 V 1.4.1
* 2023-03-07 V 1.4.2
* 2025-07-19 V 1.5.0
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -31,11 +33,15 @@
/* You cannot use a common regexp subroutine, because \0 is a regular /* You cannot use a common regexp subroutine, because \0 is a regular
* character in a binary string ! * character in a binary string !
*/ */
#include "bvi.h" #include "bvi.h"
#include "set.h" #include "set.h"
#ifdef __STDC__
static int sbracket(int, char *, int);
#else
static int sbracket(); static int sbracket();
#endif
char act_pat[MAXCMD]; /* found pattern */ char act_pat[MAXCMD]; /* found pattern */
char pattern[MAXCMD + 1]; char pattern[MAXCMD + 1];
@ -47,9 +53,7 @@ char *emptyclass = "Bad character class|Empty byte class '[]' or '[^]' cannot ma
PTR PTR
bregexec(start, scan) bregexec(PTR start, char *scan)
PTR start;
char *scan;
{ {
char *act; char *act;
int count, test; int count, test;
@ -124,10 +128,7 @@ bregexec(start, scan)
static int static int
sbracket(start, scan, count) sbracket(int start, char *scan, int count)
int start;
char *scan;
int count;
{ {
if (*scan++ == '^') { if (*scan++ == '^') {
if (!memchr(scan, start, --count)) return 0; if (!memchr(scan, start, --count)) return 0;
@ -139,8 +140,7 @@ sbracket(start, scan, count)
PTR PTR
end_word(start) end_word(PTR start)
PTR start;
{ {
PTR pos; PTR pos;
@ -154,9 +154,7 @@ end_word(start)
/* wordsearch serves the 'W' and 'w' - command /* wordsearch serves the 'W' and 'w' - command
*/ */
PTR PTR
wordsearch(start, mode) wordsearch(PTR start, char mode)
PTR start;
char mode;
{ {
PTR found; PTR found;
PTR pos; PTR pos;
@ -186,9 +184,7 @@ wordsearch(start, mode)
/* backsearch serves the 'b' and 'B' command /* backsearch serves the 'b' and 'B' command
*/ */
PTR PTR
backsearch(start, mode) backsearch(PTR start, char mode)
PTR start;
char mode;
{ {
PTR pos; PTR pos;
int ccount; int ccount;
@ -215,11 +211,7 @@ backsearch(start, mode)
/* used by :s /* used by :s
*/ */
int int
do_substitution(delim, line, startpos, endpos) do_substitution(int delim, char *line, PTR startpos, PTR endpos)
int delim;
char *line;
PTR startpos;
PTR endpos;
{ {
int n; int n;
char *found; char *found;
@ -312,7 +304,7 @@ do_substitution(delim, line, startpos, endpos)
refresh(); refresh();
if (global) { if (global) {
if ((undo_count = alloc_buf(endpos - startpos, &undo_buf))) { if ((undo_count = alloc_buf((off_t)(endpos - startpos), &undo_buf))) {
memcpy(undo_buf, startpos + 1, undo_count); memcpy(undo_buf, startpos + 1, undo_count);
} }
undo_start = startpos + 1; undo_start = startpos + 1;
@ -331,9 +323,9 @@ AGAIN:
emsg(notfound); emsg(notfound);
} else { } else {
if (P(P_TE)) if (P(P_TE))
sprintf(string, "No match to %s", direct == FORWARD ? "BOTTOM" : "TOP"); sprintf(string, "No match to %s", direct == FORWARD ? "BOTTOM" : "TOP");
else else
sprintf(string, "Address search hit %s without matching pattern", sprintf(string, "Address search hit %s without matching pattern",
direct == FORWARD ? "BOTTOM" : "TOP"); direct == FORWARD ? "BOTTOM" : "TOP");
emsg(string); emsg(string);
} }
@ -350,7 +342,7 @@ AGAIN:
repl_count++; repl_count++;
current_start = pagepos + y * Anzahl + xpos(); current_start = pagepos + y * Anzahl + xpos();
if (!global) { if (!global) {
if ((undo_count = alloc_buf(pat_len, &undo_buf))) { if ((undo_count = alloc_buf((off_t)pat_len, &undo_buf))) {
memcpy(undo_buf, current_start, undo_count); memcpy(undo_buf, current_start, undo_count);
} }
undo_start = current_start; undo_start = current_start;
@ -375,12 +367,7 @@ SKIP:
* return address found * return address found
*/ */
PTR PTR
searching(ch, line, startpos, endpos, flag) searching(int ch, char *line, PTR startpos, PTR endpos, int flag)
int ch;
char *line;
PTR startpos;
PTR endpos;
int flag;
{ {
char *cmd = NULL; char *cmd = NULL;
PTR found; PTR found;
@ -454,9 +441,9 @@ searching(ch, line, startpos, endpos, flag)
emsg(notfound); emsg(notfound);
} else { } else {
if (P(P_TE)) { if (P(P_TE)) {
sprintf(string, "No match to %s", sdir == FORWARD ? "BOTTOM" : "TOP"); sprintf(string, "No match to %s", sdir == FORWARD ? "BOTTOM" : "TOP");
} else { } else {
sprintf(string, "Address search hit %s without matching pattern", sprintf(string, "Address search hit %s without matching pattern",
sdir == FORWARD ? "BOTTOM" : "TOP"); sdir == FORWARD ? "BOTTOM" : "TOP");
} }
emsg(string); emsg(string);
@ -484,9 +471,7 @@ searching(ch, line, startpos, endpos, flag)
* returns pointer to next character * returns pointer to next character
*/ */
char * char *
patcpy(s1, s2, delim) patcpy(char *s1, char *s2, char delim)
char *s1, *s2;
char delim;
{ {
while (*s2 != '\0' && *s2 != delim) { while (*s2 != '\0' && *s2 != delim) {
if (*s2 == '\\' && *(s2 + 1) == delim) s2++; if (*s2 == '\\' && *(s2 + 1) == delim) s2++;
@ -499,14 +484,10 @@ patcpy(s1, s2, delim)
PTR PTR
fsearch_end(start, end, smem, s_end) fsearch_end(PTR start, PTR end, char *smem, PTR *s_end)
/* /*
fsearch(start, end, smem) fsearch(start, end, smem)
*/ */
PTR start;
PTR end;
char *smem;
PTR *s_end;
{ {
PTR spos; PTR spos;
@ -525,10 +506,7 @@ fsearch(start, end, smem)
PTR PTR
fsearch(start, end, smem) fsearch(PTR start, PTR end, char *smem)
PTR start;
PTR end;
char *smem;
{ {
PTR s_end; PTR s_end;
return fsearch_end(start, end, smem, &s_end); return fsearch_end(start, end, smem, &s_end);
@ -536,10 +514,7 @@ fsearch(start, end, smem)
PTR PTR
rsearch(start, end, smem) rsearch(PTR start, PTR end, char *smem)
PTR start;
PTR end;
char *smem;
{ {
PTR spos; PTR spos;
@ -559,9 +534,7 @@ rsearch(start, end, smem)
* returns NULL on error or default_address, if nothing found * returns NULL on error or default_address, if nothing found
*/ */
PTR PTR
calc_addr(pointer, def_addr) calc_addr(char **pointer, PTR def_addr)
char **pointer;
PTR def_addr;
{ {
PTR addr; PTR addr;
int ch, mark; int ch, mark;

View file

@ -6,8 +6,9 @@
* 2000-04-25 V 1.3.0 beta * 2000-04-25 V 1.3.0 beta
* 2000-07-12 V 1.3.0 final * 2000-07-12 V 1.3.0 final
* 2019-01-28 V 1.4.1 * 2019-01-28 V 1.4.1
* 2025-07-19 V 1.5.0
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -26,7 +27,7 @@
/* You cannot use a common regexp subroutine, because \0 is a regular /* You cannot use a common regexp subroutine, because \0 is a regular
* character in a binary string ! * character in a binary string !
*/ */
#include "bvi.h" #include "bvi.h"
#include "set.h" #include "set.h"
@ -46,9 +47,7 @@ extern char *emptyclass;
* Compiling an ASCII sequence to a regex string * Compiling an ASCII sequence to a regex string
*/ */
int int
ascii_comp(smem, pattern) ascii_comp(char *smem, char *pattern)
char *smem;
char *pattern;
{ {
char *end; char *end;
char *comp; char *comp;
@ -167,9 +166,7 @@ ascii_comp(smem, pattern)
* Compiling a hex expression to a regex string * Compiling a hex expression to a regex string
*/ */
int int
hex_comp(smem, pattern) hex_comp(char *smem, char *pattern)
char *smem;
char *pattern;
{ {
char *end; char *end;
char *comp; char *comp;

134
set.c
View file

@ -9,13 +9,14 @@
* 1999-07-02 V 1.2.0 beta * 1999-07-02 V 1.2.0 beta
* 1999-08-14 V 1.2.0 final * 1999-08-14 V 1.2.0 final
* 2000-07-15 V 1.3.0 final * 2000-07-15 V 1.3.0 final
* 2001-10-10 V 1.3.1 * 2001-10-10 V 1.3.1
* 2003-07-03 V 1.3.2 * 2003-07-03 V 1.3.2
* 2010-06-02 V 1.2.4 * 2010-06-02 V 1.2.4
* 2014-09-30 V 1.4.0 * 2014-09-30 V 1.4.0
* 2019-01-22 V 1.4.1 * 2019-01-22 V 1.4.1
* 2025-07-19 V 1.5.0
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* gerhard@puon.at * gerhard@puon.at
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
@ -34,46 +35,47 @@
#include "bvi.h" #include "bvi.h"
#include "set.h" #include "set.h"
static int from_file = 0; static int from_file = 0;
static FILE *ffp; static FILE *ffp;
static char fbuf[MAXCMD+1]; static char fbuf[MAXCMD+1];
static char buf[MAXCMD+1]; static char buf[MAXCMD+1];
struct param params[] = { struct param params[] = {
{ "autowrite", "aw", FALSE, "", P_BOOL }, { "autowrite", "aw", FALSE, "", P_BOOL },
{ "columns", "cm", 16, "", P_NUM }, { "columns", "cm", 0, "", P_NUM },
{ "errorbells", "eb", FALSE, "", P_BOOL }, { "errorbells", "eb", FALSE, "", P_BOOL },
{ "ignorecase", "ic", FALSE, "", P_BOOL }, { "ignorecase", "ic", FALSE, "", P_BOOL },
{ "magic", "ma", TRUE, "", P_BOOL }, { "magic", "ma", TRUE, "", P_BOOL },
{ "memmove", "mm", FALSE, "", P_BOOL }, { "memmove", "mm", FALSE, "", P_BOOL },
{ "offset", "of", 0, "", P_NUM }, { "offset", "of", 0, "", P_NUM },
{ "readonly", "ro", FALSE, "", P_BOOL }, { "readonly", "ro", FALSE, "", P_BOOL },
{ "scroll", "scroll", 12, "", P_NUM }, { "scroll", "scroll", 12, "", P_NUM },
{ "showmode", "mo", TRUE, "", P_BOOL }, { "showmode", "mo", TRUE, "", P_BOOL },
{ "term", "term", 0, "", P_TEXT }, { "term", "term", 0, "", P_TEXT },
{ "terse", "terse", FALSE, "", P_BOOL }, { "terse", "terse", FALSE, "", P_BOOL },
{ "unixstyle", "us", FALSE, "", P_BOOL }, { "unixstyle", "us", FALSE, "", P_BOOL },
{ "window", "window", 25, "", P_NUM }, { "window", "window", 0, "", P_NUM },
{ "wordlength", "wl", 4, "", P_NUM }, { "wordlength", "wl", 4, "", P_NUM },
{ "wrapscan", "ws", TRUE, "", P_BOOL }, { "wrapscan", "ws", TRUE, "", P_BOOL },
{ "highlight", "hl", TRUE, "", P_BOOL }, { "highlight", "hl", TRUE, "", P_BOOL },
{ "reverse", "re", FALSE, "", P_BOOL }, { "reverse", "re", FALSE, "", P_BOOL },
#if defined(__MSDOS__) && !defined(DJGPP) #if defined(__MSDOS__) && !defined(DJGPP)
{ "color", "co", 7, "", P_NUM }, { "color", "co", 7, "", P_NUM },
#endif #endif
{ "", "", 0, "", 0, } /* end marker */ { "", "", 0, "", 0, } /* end marker */
}; };
int int
doset(arg) doset(char *arg)
char *arg; /* parameter string */
{ {
int i; int i;
char *s; char *s;
int did_window = FALSE; int did_window = FALSE;
int state = TRUE; /* new state of boolean parms. */ int state = TRUE; /* new state of boolean parms. */
char string[80]; char string[80];
off_t val;
if (arg == NULL) { if (arg == NULL) {
showparms(FALSE); showparms(FALSE);
@ -111,20 +113,38 @@ doset(arg)
return 0; return 0;
} }
if (!strcmp(params[i].fullname, "term")) { if (!strcmp(params[i].fullname, "term")) {
emsg("Can't change type of terminal from within bvi"); emsg("Can't change@type of terminal from within bvi");
return 1; return 1;
} }
if (params[i].flags & P_NUM) { if (params[i].flags & P_NUM) {
if ((i == P_LI) || (i == P_OF)) did_window++; if ((i == P_LI) || (i == P_OF) || (i == P_CM)) did_window++;
if (arg[strlen(s)] != '=' || state == FALSE) { if (arg[strlen(s)] != '=' || state == FALSE) {
sprintf(string, "Option %s is not a toggle", sprintf(string, "Option %s is not a toggle", params[i].fullname);
params[i].fullname);
emsg(string); emsg(string);
return 1; return 1;
} else { } else {
s = arg + strlen(s) + 1; s = arg + strlen(s) + 1;
params[i].nvalue = strtoll(s, &s, 0); val = strtoll(s, &s, 0);
if ((i == P_CM || i == P_LI) && (!strcmp("auto", s) || (val == 0))) {
if (i == P_CM) {
params[i].nvalue = 0;
Anzahl = ((COLS - AnzAdd - space) / 4);
} else {
params[i].nvalue = 0;
maxy = LINES - 1;
}
} else {
params[i].nvalue = val;
if (i == P_CM) {
Anzahl = val;
} else {
maxy = val;
}
}
params[i].flags |= P_CHANGED; params[i].flags |= P_CHANGED;
if (i == P_LI) params[P_SS].nvalue = val / 2;
#if defined(__MSDOS__) && !defined(DJGPP) #if defined(__MSDOS__) && !defined(DJGPP)
if (i == P_CO) { if (i == P_CO) {
textcolor(P(P_CO) & 0x07); textcolor(P(P_CO) & 0x07);
@ -134,22 +154,23 @@ doset(arg)
} }
#endif #endif
if (i == P_CM) { if (i == P_CM) {
/*
if (((COLS - AnzAdd - 1) / 4) >= P(P_CM)) { if (((COLS - AnzAdd - 1) / 4) >= P(P_CM)) {
Anzahl = P(P_CM); Anzahl = P(P_CM);
} else { } else {
Anzahl = P(P_CM) = ((COLS - AnzAdd - 1) / 4); Anzahl = ((COLS - AnzAdd - 1) / 4);
} }
maxx = Anzahl * 4 + AnzAdd + 1; */
Anzahl3 = Anzahl * 3; maxx = Anzahl * 4 + AnzAdd + 1;
status = Anzahl3 + Anzahl - 17; Anzahl3 = Anzahl * 3;
screen = Anzahl * (maxy - 1); status = Anzahl3 + Anzahl - statsize;
did_window++; screen = Anzahl * (maxy - 1);
stuffin("H"); /* set cursor at HOME */ stuffin("H"); /* set cursor at HOME */
} }
} }
} else { /* boolean */ } else { /* boolean */
if (arg[strlen(s)] == '=') { if (arg[strlen(s)] == '=') {
emsg("Invalid set of boolean parameter"); emsg("Invalid set@of boolean parameter");
return 1; return 1;
} else { } else {
params[i].nvalue = state; params[i].nvalue = state;
@ -169,7 +190,10 @@ doset(arg)
} }
if (did_window) { if (did_window) {
/*
maxy = P(P_LI) - 1; maxy = P(P_LI) - 1;
maxy = LINES - 1;
*/
new_screen(); new_screen();
} }
@ -179,28 +203,33 @@ doset(arg)
/* show ALL parameters */ /* show ALL parameters */
void void
showparms(all) showparms(int all)
int all;
{ {
struct param *p; struct param *p;
int n; int n, i;
statusflag = 0;
n = 2; n = 2;
i = -1;
msg("Parameters:\n"); msg("Parameters:\n");
for (p = &params[0]; p->fullname[0] != '\0' ;p++) { for (p = &params[0]; p->fullname[0] != '\0' ;p++) {
i++;
if (!all && ((p->flags & P_CHANGED) == 0)) if (!all && ((p->flags & P_CHANGED) == 0))
continue; continue;
if (p->flags & P_BOOL) if (p->flags & P_BOOL) {
sprintf(buf, " %s%s\n", sprintf(buf, " %s%s\n", (p->nvalue ? " " : "no"), p->fullname);
(p->nvalue ? " " : "no"), p->fullname); } else if (p->flags & P_TEXT) {
else if (p->flags & P_TEXT)
sprintf(buf, " %s=%s\n", p->fullname, p->svalue); sprintf(buf, " %s=%s\n", p->fullname, p->svalue);
else } else {
sprintf(buf, " %s=%lld\n", p->fullname, (long long)p->nvalue); if ((p->nvalue == 0) && (i == P_CM || i == P_LI)) {
sprintf(buf, " %s=auto\n", p->fullname);
} else {
sprintf(buf, " %s=%lld\n", p->fullname, (long long)p->nvalue);
}
}
msg(buf); msg(buf);
n++; n++;
if (n == params[P_LI].nvalue) { if (n == maxy) {
if (wait_return(FALSE)) return; if (wait_return(FALSE)) return;
n = 1; n = 1;
} }
@ -211,8 +240,7 @@ showparms(all)
/* reads the init file (.bvirc) */ /* reads the init file (.bvirc) */
int int
read_rc(fn) read_rc(char *fn)
char *fn;
{ {
int i; int i;
@ -230,9 +258,7 @@ read_rc(fn)
int int
do_logic(mode, str) do_logic(int mode, char *str)
int mode;
char *str;
{ {
int a, b; int a, b;
int value; int value;
@ -289,13 +315,13 @@ do_logic(mode, str)
b = a >> 8; b = a >> 8;
a |= b; a |= b;
break; break;
case RROTATE: case RROTATE:
b = a << 8; b = a << 8;
a |= b; a |= b;
a >>= value; a >>= value;
/* /*
b = a << (8 - value); b = a << (8 - value);
a >>= value; a >>= value;
a |= b; a |= b;
*/ */
break; break;
@ -303,7 +329,7 @@ do_logic(mode, str)
break; break;
case OR: a |= value; case OR: a |= value;
break; break;
case XOR: case XOR:
case NOT: a ^= value; case NOT: a ^= value;
break; break;
case NEG: a ^= value; case NEG: a ^= value;
@ -318,9 +344,7 @@ do_logic(mode, str)
int int
getcmdstr(p, x) getcmdstr(char *p, int x)
char *p;
int x;
{ {
int c; int c;
int i, n; int i, n;

7
set.h
View file

@ -2,8 +2,8 @@
* *
* NOTE: Edit this file with tabstop=4 ! * NOTE: Edit this file with tabstop=4 !
* *
* Copyright 1996-2019 by Gerhard Buergmann * Copyright 1996-2025 by Gerhard Buergmann
* Gerhard.Buergmann@puon.at * gerhard@puon.at
* *
* 1998-03-14 V 1.0.0 * 1998-03-14 V 1.0.0
* 1999-01-14 V 1.1.0 * 1999-01-14 V 1.1.0
@ -14,6 +14,7 @@
* 2010-06-02 V 1.3.4 * 2010-06-02 V 1.3.4
* 2013-08-23 V 1.4.0 * 2013-08-23 V 1.4.0
* 2019-01-22 V 1.4.1 * 2019-01-22 V 1.4.1
* 2025-05-24 V 1.5.0
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
@ -34,7 +35,7 @@ struct param {
char *shortname; /* permissible abbreviation */ char *shortname; /* permissible abbreviation */
off_t nvalue; off_t nvalue;
char *svalue; char *svalue;
int flags; int flags;
}; };
extern struct param params[]; extern struct param params[];

504
tags
View file

@ -4,14 +4,14 @@
!_TAG_PROGRAM_NAME Exuberant Ctags // !_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.9~svn20110310 // !_TAG_PROGRAM_VERSION 5.9~svn20110310 //
AND bvi.h 90;" d AND bvi.h 100;" d
ANSI bmore.h 104;" d ANSI bmore.h 108;" d
ANSI bvi.h 120;" d ANSI bvi.h 130;" d
APPEND comm.c 51;" d file: APPEND comm.c 53;" d file:
APPEND comm.c 54;" d file: APPEND comm.c 56;" d file:
ASCII bmore.h 83;" d ASCII bmore.h 87;" d
ASCII bvi.h 97;" d ASCII bvi.h 107;" d
ASCII_DEL bvi.h 106;" d ASCII_DEL bvi.h 116;" d
A_ATTRIBUTES doscur.h 56;" d A_ATTRIBUTES doscur.h 56;" d
A_BLINK doscur.h 54;" d A_BLINK doscur.h 54;" d
A_BOLD doscur.h 52;" d A_BOLD doscur.h 52;" d
@ -20,63 +20,64 @@ A_NORMAL doscur.h 50;" d
A_REVERSE doscur.h 53;" d A_REVERSE doscur.h 53;" d
A_STANDOUT doscur.h 51;" d A_STANDOUT doscur.h 51;" d
AnzAdd bmore.c /^int AnzAdd;$/;" v AnzAdd bmore.c /^int AnzAdd;$/;" v
AnzAdd bvi.c /^int AnzAdd, Anzahl, Anzahl3;$/;" v AnzAdd bvi.c /^int AnzAdd, Anzahl, Anzahl3;$/;" v
Anzahl bvi.c /^int AnzAdd, Anzahl, Anzahl3;$/;" v Anzahl bvi.c /^int AnzAdd, Anzahl, Anzahl3;$/;" v
Anzahl3 bvi.c /^int AnzAdd, Anzahl, Anzahl3;$/;" v Anzahl3 bvi.c /^int AnzAdd, Anzahl, Anzahl3;$/;" v
Ausgabe_Datei bvi.c /^FILE *Ausgabe_Datei;$/;" v Ausgabe_Datei bvi.c /^FILE *Ausgabe_Datei;$/;" v
BACKWARD bmore.h 85;" d BACKWARD bmore.h 89;" d
BACKWARD bvi.h 99;" d BACKWARD bvi.h 109;" d
BLOCK_BEGIN bvi.h /^ BLOCK_BEGIN = 1,$/;" e enum:_block_datum BLOCK_BEGIN bvi.h /^ BLOCK_BEGIN = 1,$/;" e enum:_block_datum
BLOCK_END bvi.h /^ BLOCK_END = 2,$/;" e enum:_block_datum BLOCK_END bvi.h /^ BLOCK_END = 2,$/;" e enum:_block_datum
BLOCK_LEN bvi.h /^ BLOCK_LEN = 4$/;" e enum:_block_datum BLOCK_LEN bvi.h /^ BLOCK_LEN = 4$/;" e enum:_block_datum
BLOCK_SPECIAL bmore.h 75;" d BLOCK_SPECIAL bmore.h 79;" d
BLOCK_SPECIAL bvi.h 66;" d BLOCK_SPECIAL bvi.h 76;" d
BS bmore.h 88;" d BS bmore.h 92;" d
BS bvi.h 102;" d BS bvi.h 112;" d
BUFFER bmore.h 116;" d BUFFER bmore.h 120;" d
BUFFER bvi.h 134;" d BUFFER bvi.h 144;" d
BVICTRL bmore.h 92;" d BVICTRL bmore.h 96;" d
BVICTRL bvi.h 105;" d BVICTRL bvi.h 115;" d
CHARACTER_SPECIAL bmore.h 74;" d CHARACTER_SPECIAL bmore.h 78;" d
CHARACTER_SPECIAL bvi.h 65;" d CHARACTER_SPECIAL bvi.h 75;" d
CMDLNG bvi.h 108;" d CMDLNG bvi.h 118;" d
CMDSZ comm.c 57;" d file: CMDSZ comm.c 59;" d file:
COLS dosio.c /^int COLS = 80;$/;" v COLS dosio.c /^int COLS = 80;$/;" v
CR bmore.h 86;" d CR bmore.h 90;" d
CR bvi.h 100;" d CR bvi.h 110;" d
DELIM bmore.h 107;" d DELIM bmore.h 111;" d
DELIM bmore.h 112;" d DELIM bmore.h 116;" d
DELIM bvi.h 123;" d DELIM bvi.h 133;" d
DELIM bvi.h 130;" d DELIM bvi.h 140;" d
DIRECTORY bmore.h 73;" d DIRECTORY bmore.h 77;" d
DIRECTORY bvi.h 64;" d DIRECTORY bvi.h 74;" d
ECHO dosio.c /^int ECHO = TRUE;$/;" v ECHO dosio.c /^int ECHO = TRUE;$/;" v
END bmore.h 79;" d END bmore.h 83;" d
END bvi.h 70;" d END bvi.h 80;" d
ERR doscur.h 147;" d ERR doscur.h 147;" d
ERROR bmore.h 70;" d ERROR bmore.h 74;" d
ERROR bvi.h 61;" d ERROR bvi.h 71;" d
ESC bmore.h 89;" d ESC bmore.h 93;" d
ESC bvi.h 103;" d ESC bvi.h 113;" d
ESC doscur.h 31;" d ESC doscur.h 31;" d
FALSE bmore.h 100;" d FALSE bmore.h 104;" d
FALSE bvi.h 116;" d FALSE bvi.h 126;" d
FALSE doscur.h 29;" d FALSE doscur.h 29;" d
FORWARD bmore.h 84;" d FORWARD bmore.h 88;" d
FORWARD bvi.h 98;" d FORWARD bvi.h 108;" d
HAVE_CURSES_H acconfig.h 5;" d HAVE_CURSES_H acconfig.h 5;" d
HAVE_FCNTL_H dosconf.h 40;" d HAVE_FCNTL_H dosconf.h 40;" d
HAVE_LOCALE_H dosconf.h 44;" d HAVE_LOCALE_H dosconf.h 44;" d
HAVE_MEMMOVE dosconf.h 31;" d HAVE_MEMMOVE dosconf.h 31;" d
HAVE_NCURSESW_CURSES_H acconfig.h 7;" d
HAVE_NCURSES_H acconfig.h 3;" d HAVE_NCURSES_H acconfig.h 3;" d
HAVE_NCURSES_TERM_H acconfig.h 11;" d HAVE_NCURSES_TERM_H acconfig.h 13;" d
HAVE_STRDUP dosconf.h 34;" d HAVE_STRDUP dosconf.h 34;" d
HAVE_STRTOL dosconf.h 37;" d HAVE_STRTOL dosconf.h 37;" d
HELPFILE bmore.c 43;" d file:
HELPFILE bmore.c 45;" d file: HELPFILE bmore.c 45;" d file:
HEX bvi.h 96;" d HELPFILE bmore.c 47;" d file:
HEX bvi.h 106;" d
Home bm_unix.c /^char *Home; \/* go to home *\/$/;" v Home bm_unix.c /^char *Home; \/* go to home *\/$/;" v
JOEHTG bvi.h 43;" d JOEHTG bvi.h 45;" d
KEY_BACKSPACE doscur.h 42;" d KEY_BACKSPACE doscur.h 42;" d
KEY_DC doscur.h 45;" d KEY_DC doscur.h 45;" d
KEY_DOWN doscur.h 34;" d KEY_DOWN doscur.h 34;" d
@ -93,132 +94,132 @@ KEY_RETURN doscur.h 40;" d
KEY_RIGHT doscur.h 37;" d KEY_RIGHT doscur.h 37;" d
KEY_UP doscur.h 35;" d KEY_UP doscur.h 35;" d
LINES dosio.c /^int LINES = 25;$/;" v LINES dosio.c /^int LINES = 25;$/;" v
LROTATE bvi.h 88;" d LROTATE bvi.h 98;" d
LSHIFT bvi.h 86;" d LSHIFT bvi.h 96;" d
MAXCMD bmore.h 115;" d MAXCMD bmore.h 119;" d
MAXCMD bvi.h 133;" d MAXCMD bvi.h 143;" d
MAXNAME comm.c 58;" d file: MAXNAME comm.c 60;" d file:
MAX_ONE_ARG comm.c 63;" d file: MAX_ONE_ARG comm.c 65;" d file:
MAX_ONE_FILE comm.c 65;" d file: MAX_ONE_FILE comm.c 67;" d file:
NEED_PUTC_CHAR acconfig.h 9;" d NEED_PUTC_CHAR acconfig.h 11;" d
NEED_PUTC_CHAR bm_unix.c 52;" d file: NEED_PUTC_CHAR bm_unix.c 54;" d file:
NEG bvi.h 93;" d NEG bvi.h 103;" d
NEW bmore.h 72;" d NEW bmore.h 76;" d
NEW bvi.h 63;" d NEW bvi.h 73;" d
NL bmore.h 87;" d NL bmore.h 91;" d
NL bvi.h 101;" d NL bvi.h 111;" d
NODEL dosio.c /^int NODEL = FALSE;$/;" v NODEL dosio.c /^int NODEL = FALSE;$/;" v
NOT bvi.h 94;" d NOT bvi.h 104;" d
NO_ADDR comm.c 60;" d file: NO_ADDR comm.c 62;" d file:
NO_ARG comm.c 61;" d file: NO_ARG comm.c 63;" d file:
NO_SYSERRL acconfig.h 7;" d NO_SYSERRL acconfig.h 9;" d
NULL bmore.h 95;" d NULL bmore.h 99;" d
NULL bvi.h 111;" d NULL bvi.h 121;" d
OFF_T_MAX io.c 47;" d file: OFF_T_MAX io.c 49;" d file:
ONE bmore.h 80;" d ONE bmore.h 84;" d
ONE bvi.h 71;" d ONE bvi.h 81;" d
ONE_ARG comm.c 62;" d file: ONE_ARG comm.c 64;" d file:
ONE_FILE comm.c 64;" d file: ONE_FILE comm.c 66;" d file:
OR bvi.h 91;" d OR bvi.h 101;" d
P set.h 77;" d P set.h 78;" d
PARTIAL bmore.h 76;" d PARTIAL bmore.h 80;" d
PARTIAL bvi.h 67;" d PARTIAL bvi.h 77;" d
PRINTF bmore.c 38;" d file:
PRINTF bmore.c 40;" d file: PRINTF bmore.c 40;" d file:
PTR bmore.h 105;" d PRINTF bmore.c 42;" d file:
PTR bmore.h 111;" d PTR bmore.h 109;" d
PTR bvi.h 121;" d PTR bmore.h 115;" d
PTR bvi.h 129;" d PTR bvi.h 131;" d
P_AW set.h 54;" d PTR bvi.h 139;" d
P_BOOL set.h 42;" d P_AW set.h 55;" d
P_CHANGED set.h 45;" d P_BOOL set.h 43;" d
P_CM set.h 55;" d P_CHANGED set.h 46;" d
P_CO set.h 72;" d P_CM set.h 56;" d
P_EB set.h 56;" d P_CO set.h 73;" d
P_HL set.h 70;" d P_EB set.h 57;" d
P_IC set.h 57;" d P_HL set.h 71;" d
P_LI set.h 67;" d P_IC set.h 58;" d
P_MA set.h 58;" d P_LI set.h 68;" d
P_MM set.h 59;" d P_MA set.h 59;" d
P_MO set.h 63;" d P_MM set.h 60;" d
P_NUM set.h 43;" d P_MO set.h 64;" d
P_OF set.h 60;" d P_NUM set.h 44;" d
P_RE set.h 71;" d P_OF set.h 61;" d
P_RO set.h 61;" d P_RE set.h 72;" d
P_SS set.h 62;" d P_RO set.h 62;" d
P_TE set.h 65;" d P_SS set.h 63;" d
P_TEXT set.h 44;" d P_TE set.h 66;" d
P_TT set.h 64;" d P_TEXT set.h 45;" d
P_US set.h 66;" d P_TT set.h 65;" d
P_WL set.h 68;" d P_US set.h 67;" d
P_WS set.h 69;" d P_WL set.h 69;" d
REGULAR bmore.h 71;" d P_WS set.h 70;" d
REGULAR bvi.h 62;" d REGULAR bmore.h 75;" d
REPLACE bmore.h 91;" d REGULAR bvi.h 72;" d
RROTATE bvi.h 89;" d REPLACE bmore.h 95;" d
RSHIFT bvi.h 87;" d RROTATE bvi.h 99;" d
SEARCH bmore.h 90;" d RSHIFT bvi.h 97;" d
SEARCH bvi.h 104;" d SEARCH bmore.h 94;" d
SKIP_WHITE bvi.h 136;" d SEARCH bvi.h 114;" d
STAR bmore.h 81;" d SKIP_WHITE bvi.h 146;" d
STAR bvi.h 72;" d STAR bmore.h 85;" d
STAR bvi.h 82;" d
STDC_HEADERS dosconf.h 28;" d STDC_HEADERS dosconf.h 28;" d
S_GLOBAL bvi.h 83;" d S_GLOBAL bvi.h 93;" d
S_ISBLK bvi.h 198;" d S_ISBLK bvi.h 210;" d
S_ISCHR bvi.h 197;" d S_ISCHR bvi.h 209;" d
S_ISDIR bvi.h 196;" d S_ISDIR bvi.h 208;" d
S_ISFIFO bvi.h 200;" d S_ISFIFO bvi.h 212;" d
S_ISREG bvi.h 199;" d S_ISREG bvi.h 211;" d
TBUFSIZ bm_dos.c 32;" d file: TBUFSIZ bm_dos.c 32;" d file:
TBUFSIZ bm_unix.c 32;" d file: TBUFSIZ bm_unix.c 34;" d file:
TRUE bmore.h 99;" d TRUE bmore.h 103;" d
TRUE bvi.h 115;" d TRUE bvi.h 125;" d
TRUE doscur.h 28;" d TRUE doscur.h 28;" d
U_APPEND bvi.h 80;" d U_APPEND bvi.h 90;" d
U_BACK bvi.h 79;" d U_BACK bvi.h 89;" d
U_DELETE bvi.h 78;" d U_DELETE bvi.h 88;" d
U_EDIT bvi.h 75;" d U_EDIT bvi.h 85;" d
U_INSERT bvi.h 77;" d U_INSERT bvi.h 87;" d
U_TILDE bvi.h 81;" d U_TILDE bvi.h 91;" d
U_TRUNC bvi.h 76;" d U_TRUNC bvi.h 86;" d
VERSION patchlevel.h 1;" d VERSION patchlevel.h 1;" d
WINDOW doscur.h 60;" d WINDOW doscur.h 60;" d
WRITE comm.c 50;" d file: WRITE comm.c 52;" d file:
WRITE comm.c 53;" d file: WRITE comm.c 55;" d file:
XOR bvi.h 92;" d XOR bvi.h 102;" d
_block_datum bvi.h /^typedef enum _block_datum {$/;" g _block_datum bvi.h /^typedef enum _block_datum {$/;" g
act_pat re.c /^char act_pat[MAXCMD]; \/* found pattern *\/$/;" v act_pat re.c /^char act_pat[MAXCMD]; \/* found pattern *\/$/;" v
addch doscur.h 95;" d addch doscur.h 95;" d
addfile dosio.c /^addfile(char *fname)$/;" f addfile dosio.c /^addfile(char *fname)$/;" f
addfile io.c /^addfile(fname)$/;" f addfile io.c /^addfile(char *fname)$/;" f
addr_flag comm.c /^int addr_flag;$/;" v addr_flag comm.c /^int addr_flag;$/;" v
addr_form bmore.c /^char addr_form[15];$/;" v addr_form bmore.c /^char addr_form[15];$/;" v
addr_form bvi.c /^char addr_form[15];$/;" v addr_form bvi.c /^char addr_form[15];$/;" v
addstr doscur.h 99;" d addstr doscur.h 99;" d
again recomp.c /^int again = 0;$/;" v again recomp.c /^int again = 0;$/;" v
alloc_buf dosio.c /^alloc_buf(off_t n, char **buffer)$/;" f alloc_buf dosio.c /^alloc_buf(off_t n, char **buffer)$/;" f
alloc_buf io.c /^alloc_buf(n, buffer)$/;" f alloc_buf io.c /^alloc_buf(off_t n, char **buffer)$/;" f
altfile comm.c /^static char *altfile = NULL; \/* alternate file *\/$/;" v file: altfile comm.c /^static char *altfile = NULL; \/* alternate file *\/$/;" v file:
ambigous comm.c /^char *ambigous = "Ambigous|Too many file names";$/;" v ambigous comm.c /^char *ambigous = "Ambiguous|Too many file names";$/;" v
ambvalue comm.c /^char *ambvalue = "Ambigous|Too many values";$/;" v ambvalue comm.c /^char *ambvalue = "Ambiguous|Too many values";$/;" v
arrnum bmore.c /^int arrnum = 0;$/;" v arrnum bmore.c /^int arrnum = 0;$/;" v
arrnum bvi.c /^int arrnum = 0;$/;" v arrnum bvi.c /^int arrnum = 0;$/;" v
ascii_comp recomp.c /^ascii_comp(smem, pattern)$/;" f ascii_comp recomp.c /^ascii_comp(char *smem, char *pattern)$/;" f
ascii_flag bmore.c /^int ascii_flag = 0;$/;" v ascii_flag bmore.c /^int ascii_flag = 0;$/;" v
attrset dosio.c /^attrset(int attr)$/;" f attrset dosio.c /^attrset(int attr)$/;" f
backsearch re.c /^backsearch(start, mode)$/;" f backsearch re.c /^backsearch(PTR start, char mode)$/;" f
beep doscur.h 76;" d beep doscur.h 76;" d
block_begin bvi.c /^off_t block_begin, block_end, block_size;$/;" v block_begin bvi.c /^off_t block_begin, block_end, block_size;$/;" v
block_datum bvi.h /^} block_datum;$/;" t typeref:enum:_block_datum block_datum bvi.h /^} block_datum;$/;" t typeref:enum:_block_datum
block_end bvi.c /^off_t block_begin, block_end, block_size;$/;" v block_end bvi.c /^off_t block_begin, block_end, block_size;$/;" v
block_flag bvi.c /^int block_flag = 0;$/;" v block_flag bvi.c /^int block_flag = 0;$/;" v
block_read io.c /^static off_t block_read;$/;" v file: block_read io.c /^static off_t block_read;$/;" v file:
block_size bvi.c /^off_t block_begin, block_end, block_size;$/;" v block_size bvi.c /^off_t block_begin, block_end, block_size;$/;" v
bmbeep bmore.c /^bmbeep() {$/;" f bmbeep bmore.c /^bmbeep() {$/;" f
bmore_search_pat bmore.c /^char bmore_search_pat[BUFFER]; \/* \/ or ? command *\/$/;" v bmore_search_pat bmore.c /^char bmore_search_pat[BUFFER]; \/* \/ or ? command *\/$/;" v
bmregexec bmore.c /^bmregexec(scan)$/;" f bmregexec bmore.c /^bmregexec(char *scan)$/;" f
bmsearch bmore.c /^bmsearch(ch)$/;" f bmsearch bmore.c /^bmsearch(int ch)$/;" f
bregexec re.c /^bregexec(start, scan)$/;" f bregexec re.c /^bregexec(PTR start, char *scan)$/;" f
buf comm.c /^static struct stat buf;$/;" v typeref:struct:stat file: buf comm.c /^static struct stat buf;$/;" v typeref:struct:stat file:
buf dosio.c /^static struct stat buf;$/;" v typeref:struct:stat file: buf dosio.c /^static struct stat buf;$/;" v typeref:struct:stat file:
buf io.c /^static struct stat buf;$/;" v typeref:struct:stat file: buf io.c /^static struct stat buf;$/;" v typeref:struct:stat file:
@ -226,15 +227,15 @@ buf set.c /^static char buf[MAXCMD+1];$/;" v file:
buffer1 bmore.c /^char buffer1[MAXCMD], buffer2[MAXCMD];$/;" v buffer1 bmore.c /^char buffer1[MAXCMD], buffer2[MAXCMD];$/;" v
buffer2 bmore.c /^char buffer1[MAXCMD], buffer2[MAXCMD];$/;" v buffer2 bmore.c /^char buffer1[MAXCMD], buffer2[MAXCMD];$/;" v
bvi_init dosio.c /^bvi_init(char *dir)$/;" f bvi_init dosio.c /^bvi_init(char *dir)$/;" f
bvi_init io.c /^bvi_init(dir)$/;" f bvi_init io.c /^bvi_init(char *dir)$/;" f
bytepos bmore.c /^off_t bytepos, oldpos;$/;" v bytepos bmore.c /^off_t bytepos, oldpos;$/;" v
c_argc comm.c /^static int c_argc = 0;$/;" v file: c_argc comm.c /^static int c_argc = 0;$/;" v file:
c_argv comm.c /^static char *c_argv[9];$/;" v file: c_argv comm.c /^static char *c_argv[9];$/;" v file:
c_flag bmore.c /^int c_flag = 0, d_flag = 0, r_flag = 0;$/;" v c_flag bmore.c /^int c_flag = 0, d_flag = 0, r_flag = 0;$/;" v
calc_addr re.c /^calc_addr(pointer, def_addr)$/;" f calc_addr re.c /^calc_addr(char **pointer, PTR def_addr)$/;" f
calc_size bvi.c /^calc_size(arg)$/;" f calc_size bvi.c /^calc_size(char *arg)$/;" f
cbreak doscur.h 136;" d cbreak doscur.h 136;" d
chk_comm comm.c /^chk_comm(flag)$/;" f chk_comm comm.c /^chk_comm(int flag)$/;" f
chtype doscur.h 58;" d chtype doscur.h 58;" d
clear doscur.h 83;" d clear doscur.h 83;" d
clear_marks edit.c /^clear_marks()$/;" f clear_marks edit.c /^clear_marks()$/;" f
@ -245,21 +246,21 @@ clearstr comm.c /^clearstr()$/;" f
cleartoeol bm_dos.c /^cleartoeol()$/;" f cleartoeol bm_dos.c /^cleartoeol()$/;" f
cleartoeol bm_unix.c /^cleartoeol()$/;" f cleartoeol bm_unix.c /^cleartoeol()$/;" f
clrtoeol doscur.h 79;" d clrtoeol doscur.h 79;" d
cmdbuf bmore.c /^static char cmdbuf[MAXCMD];$/;" v file: cmdbuf bmore.c /^static char cmdbuf[2 * MAXCMD];$/;" v file:
cmdstr bvi.c /^char cmdstr[MAXCMD+1] = "";$/;" v cmdstr bvi.c /^char cmdstr[MAXCMD+1] = "";$/;" v
cnt bmore.c /^static int cnt = 0;$/;" v file: cnt bmore.c /^static int cnt = 0;$/;" v file:
contrd edit.c /^char contrd[][4] = {"NUL", " ^A", " ^B", " ^C", " ^D", " ^E", " ^F", "BEL",$/;" v contrd edit.c /^char contrd[][4] = {"NUL", " ^A", " ^B", " ^C", " ^D", " ^E", " ^F", "BEL",$/;" v
contru edit.c /^char contru[][4] = {"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL",$/;" v contru edit.c /^char contru[][4] = {"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL",$/;" v
copyright bmore.c /^char *copyright = "GPL (C) 1990-2019 by Gerhard Buergmann";$/;" v copyright bmore.c /^char *copyright = "GPL (C) 1990-2022 by Gerhard Buergmann";$/;" v
copyright bvi.c /^char *copyright = "(C) GPL 1996-2019 by Gerhard Buergmann";$/;" v copyright bvi.c /^char *copyright = "(C) GPL 1996-2025 by Gerhard Buergmann";$/;" v
corr bmore.c /^int corr = 0, do_header = 0, to_print;$/;" v corr bmore.c /^int corr = 0, do_header = 0, to_print;$/;" v
cur_back edit.c /^cur_back()$/;" f cur_back edit.c /^cur_back()$/;" f
cur_forw edit.c /^cur_forw(check)$/;" f cur_forw edit.c /^cur_forw(int check)$/;" f
curfile bvi.c /^int curfile; \/* number of the current file *\/$/;" v curfile bvi.c /^int curfile; \/* number of the current file *\/$/;" v
curpos bvi.c /^PTR curpos;$/;" v curpos bvi.c /^PTR curpos;$/;" v
curr_file bmore.c /^FILE *curr_file = NULL, *help_file;$/;" v curr_file bmore.c /^FILE *curr_file = NULL, *help_file;$/;" v
current bvi.c /^PTR current;$/;" v current bvi.c /^PTR current;$/;" v
current_start bvi.c /^PTR current_start;$/;" v current_start bvi.c /^PTR current_start;$/;" v
d_flag bmore.c /^int c_flag = 0, d_flag = 0, r_flag = 0;$/;" v d_flag bmore.c /^int c_flag = 0, d_flag = 0, r_flag = 0;$/;" v
d_memcpy dosio.c /^d_memcpy(PTR dest, PTR src, off_t n)$/;" f d_memcpy dosio.c /^d_memcpy(PTR dest, PTR src, off_t n)$/;" f
d_memmove dosio.c /^d_memmove(PTR dest, PTR src, off_t n)$/;" f d_memmove dosio.c /^d_memmove(PTR dest, PTR src, off_t n)$/;" f
@ -267,44 +268,44 @@ dbug bm_dos.c /^FILE *dbug;$/;" v
delch dosio.c /^delch()$/;" f delch dosio.c /^delch()$/;" f
deleteln doscur.h 110;" d deleteln doscur.h 110;" d
dlines bm_unix.c /^int dum_opt, dlines;$/;" v dlines bm_unix.c /^int dum_opt, dlines;$/;" v
do_append bvi.c /^do_append(count, buf)$/;" f do_append bvi.c /^do_append(off_t count, char *buf)$/;" f
do_back edit.c /^do_back(n, start)$/;" f do_back edit.c /^do_back(off_t n, PTR start)$/;" f
do_delete edit.c /^do_delete(n, start)$/;" f do_delete edit.c /^do_delete(off_t n, PTR start)$/;" f
do_exit comm.c /^do_exit()$/;" f do_exit comm.c /^do_exit()$/;" f
do_ft edit.c /^do_ft(ch, flag)$/;" f do_ft edit.c /^do_ft(int ch, int flag)$/;" f
do_header bmore.c /^int corr = 0, do_header = 0, to_print;$/;" v do_header bmore.c /^int corr = 0, do_header = 0, to_print;$/;" v
do_ins_chg edit.c /^do_ins_chg(start, arg, mode)$/;" f do_ins_chg edit.c /^do_ins_chg(PTR start, char *arg, int mode)$/;" f
do_logic set.c /^do_logic(mode, str)$/;" f do_logic set.c /^do_logic(int mode, char *str)$/;" f
do_mark edit.c /^do_mark(mark, addr)$/;" f do_mark edit.c /^do_mark(int mark, PTR addr)$/;" f
do_next bmore.c /^do_next(n)$/;" f do_next bmore.c /^do_next(int n)$/;" f
do_over bvi.c /^do_over(loc, n, buf)$/;" f do_over bvi.c /^do_over(PTR loc, off_t n, PTR buf)$/;" f
do_put bvi.c /^do_put(loc, n, buf)$/;" f do_put bvi.c /^do_put(PTR loc, off_t n, PTR buf)$/;" f
do_shell dosio.c /^do_shell()$/;" f do_shell dosio.c /^do_shell()$/;" f
do_shell io.c /^do_shell()$/;" f do_shell io.c /^do_shell()$/;" f
do_substitution re.c /^do_substitution(delim, line, startpos, endpos)$/;" f do_substitution re.c /^do_substitution(int delim, char *line, PTR startpos, PTR endpos)$/;" f
do_tilde bvi.c /^do_tilde(count)$/;" f do_tilde bvi.c /^do_tilde(off_t count)$/;" f
do_undo bvi.c /^do_undo()$/;" f do_undo bvi.c /^do_undo()$/;" f
do_z edit.c /^do_z(mode)$/;" f do_z edit.c /^do_z(int mode)$/;" f
docmdline comm.c /^docmdline(cmdline)$/;" f docmdline comm.c /^docmdline(char *cmdline)$/;" f
doecmd comm.c /^doecmd(arg, force)$/;" f doecmd comm.c /^doecmd(char *arg, int force)$/;" f
doset set.c /^doset(arg)$/;" f doset set.c /^doset(char *arg)$/;" f
doshell bm_dos.c /^doshell(cmd)$/;" f doshell bm_dos.c /^doshell(cmd)$/;" f
doshell bm_unix.c /^doshell(cmd)$/;" f doshell bm_unix.c /^doshell(char *cmd)$/;" f
doupdate doscur.h 143;" d doupdate doscur.h 143;" d
dum_opt bm_unix.c /^int dum_opt, dlines;$/;" v dum_opt bm_unix.c /^int dum_opt, dlines;$/;" v
dup_print_flag bmore.c /^int dup_print_flag = 0;$/;" v dup_print_flag bmore.c /^int dup_print_flag = 0;$/;" v
echo doscur.h 128;" d echo doscur.h 128;" d
edit edit.c /^edit(mode)$/;" f edit edit.c /^edit(int mode)$/;" f
edits bvi.c /^int edits = 0;$/;" v edits bvi.c /^int edits = 0;$/;" v
emptyclass bmore.c /^char *emptyclass = "Empty byte class '[]' or '[^]'";$/;" v emptyclass bmore.c /^char *emptyclass = "Empty byte class '[]' or '[^]'";$/;" v
emptyclass re.c /^char *emptyclass = "Bad character class|Empty byte class '[]' or '[^]' cannot match";$/;" v emptyclass re.c /^char *emptyclass = "Bad character class|Empty byte class '[]' or '[^]' cannot match";$/;" v
emsg bmore.c /^emsg(s)$/;" f emsg bmore.c /^emsg(char *s)$/;" f
emsg comm.c /^emsg(s)$/;" f emsg comm.c /^emsg(char *s)$/;" f
end_addr comm.c /^PTR end_addr;$/;" v end_addr comm.c /^PTR end_addr;$/;" v
end_word re.c /^end_word(start)$/;" f end_word re.c /^end_word(PTR start)$/;" f
endwin doscur.h 137;" d endwin doscur.h 137;" d
enlarge dosio.c /^enlarge(off_t add)$/;" f enlarge dosio.c /^enlarge(off_t add)$/;" f
enlarge io.c /^enlarge(add)$/;" f enlarge io.c /^enlarge(off_t add)$/;" f
env bvi.c /^jmp_buf env; \/* context for `longjmp' function *\/$/;" v env bvi.c /^jmp_buf env; \/* context for `longjmp' function *\/$/;" v
erase doscur.h 81;" d erase doscur.h 81;" d
erase_ln bm_unix.c /^char *erase_ln; \/* erase line *\/$/;" v erase_ln bm_unix.c /^char *erase_ln; \/* erase line *\/$/;" v
@ -315,26 +316,26 @@ exval bmore.c /^int exval = 0;$/;" v
fbuf set.c /^static char fbuf[MAXCMD+1];$/;" v file: fbuf set.c /^static char fbuf[MAXCMD+1];$/;" v file:
ffp set.c /^static FILE *ffp;$/;" v file: ffp set.c /^static FILE *ffp;$/;" v file:
file_nr bmore.c /^int file_nr = 0; \/* number of current input file *\/$/;" v file_nr bmore.c /^int file_nr = 0; \/* number of current input file *\/$/;" v
fileinfo edit.c /^fileinfo(fname)$/;" f fileinfo edit.c /^fileinfo(char *fname)$/;" f
filemode dosio.c /^int filemode;$/;" v filemode dosio.c /^int filemode;$/;" v
filemode io.c /^int filemode;$/;" v filemode io.c /^int filemode;$/;" v
files bmore.c /^char **files; \/* list of input files *\/$/;" v files bmore.c /^char **files; \/* list of input files *\/$/;" v
files bvi.c /^char **files; \/* list of input files *\/$/;" v files bvi.c /^char **files; \/* list of input files *\/$/;" v
filesize bmore.c /^off_t screen_home, filesize;$/;" v filesize bmore.c /^off_t screen_home, filesize;$/;" v
filesize bvi.c /^off_t filesize, memsize, undosize;$/;" v filesize bvi.c /^off_t filesize, memsize, undosize;$/;" v
flags set.h /^ int flags;$/;" m struct:param flags set.h /^ int flags;$/;" m struct:param
flash doscur.h 77;" d flash doscur.h 77;" d
flushinp doscur.h 120;" d flushinp doscur.h 120;" d
fname_buf bvi.c /^char *fname_buf = NULL;$/;" v fname_buf bvi.c /^char *fname_buf = NULL;$/;" v
fnum bm_unix.c /^int fnum, no_intty, no_tty, slow_tty;$/;" v fnum bm_unix.c /^int fnum, no_intty, no_tty, slow_tty;$/;" v
from_file set.c /^static int from_file = 0;$/;" v file: from_file set.c /^static int from_file = 0;$/;" v file:
fsearch re.c /^fsearch(start, end, smem)$/;" f fsearch re.c /^fsearch(PTR start, PTR end, char *smem)$/;" f
fsearch_end re.c /^fsearch_end(start, end, smem, s_end)$/;" f fsearch_end re.c /^fsearch_end(PTR start, PTR end, char *smem, PTR *s_end)$/;" f
fullname set.h /^ char *fullname; \/* full parameter name *\/$/;" m struct:param fullname set.h /^ char *fullname; \/* full parameter name *\/$/;" m struct:param
getbegyx doscur.h 105;" d getbegyx doscur.h 105;" d
getcbuff edit.c /^static char getcbuff[BUFFER];$/;" v file: getcbuff edit.c /^static char getcbuff[BUFFER];$/;" v file:
getch dosio.c /^getch()$/;" f getch dosio.c /^getch()$/;" f
getcmdstr set.c /^getcmdstr(p, x)$/;" f getcmdstr set.c /^getcmdstr(char *p, int x)$/;" f
getcnext edit.c /^static char *getcnext = NULL;$/;" v file: getcnext edit.c /^static char *getcnext = NULL;$/;" v file:
getmaxyx doscur.h 106;" d getmaxyx doscur.h 106;" d
getyx doscur.h 104;" d getyx doscur.h 104;" d
@ -342,7 +343,7 @@ got_int bm_dos.c /^int got_int;$/;" v
got_int bm_unix.c /^int got_int;$/;" v got_int bm_unix.c /^int got_int;$/;" v
help_file bmore.c /^FILE *curr_file = NULL, *help_file;$/;" v help_file bmore.c /^FILE *curr_file = NULL, *help_file;$/;" v
helppath bmore.c /^char helppath[MAXCMD];$/;" v helppath bmore.c /^char helppath[MAXCMD];$/;" v
hex_comp recomp.c /^hex_comp(smem, pattern)$/;" f hex_comp recomp.c /^hex_comp(char *smem, char *pattern)$/;" f
hexchar recomp.c /^hexchar()$/;" f hexchar recomp.c /^hexchar()$/;" f
highlight bm_dos.c /^highlight()$/;" f highlight bm_dos.c /^highlight()$/;" f
highlight bm_unix.c /^highlight()$/;" f highlight bm_unix.c /^highlight()$/;" f
@ -360,36 +361,36 @@ initterm bm_dos.c /^initterm()$/;" f
initterm bm_unix.c /^initterm()$/;" f initterm bm_unix.c /^initterm()$/;" f
insch dosio.c /^insch(int c)$/;" f insch dosio.c /^insch(int c)$/;" f
insertln doscur.h 108;" d insertln doscur.h 108;" d
jmpproc bvi.c /^jmpproc(sig)$/;" f jmpproc bvi.c /^jmpproc(int sig)$/;" f
keypad doscur.h 133;" d keypad doscur.h 133;" d
last_motion bvi.c /^PTR last_motion;$/;" v last_motion bvi.c /^PTR last_motion;$/;" v
last_search bmore.c /^off_t last_search = 0;$/;" v last_search bmore.c /^off_t last_search = 0;$/;" v
linbuf edit.c /^char linbuf[16384];$/;" v linbuf edit.c /^char linbuf[16384];$/;" v
line bvi.c /^static char line[MAXCMD+1];$/;" v file: line bvi.c /^static char line[MAXCMD+1];$/;" v file:
lineout edit.c /^lineout()$/;" f lineout edit.c /^lineout()$/;" f
load dosio.c /^load(char *fname)$/;" f load dosio.c /^load(char *fname)$/;" f
load io.c /^load(fname)$/;" f load io.c /^load(char *fname)$/;" f
loc bvi.c /^int loc;$/;" v loc bvi.c /^int loc;$/;" v
magic recomp.c /^int magic = 1;$/;" v magic recomp.c /^int magic = 1;$/;" v
main bmore.c /^main(argc, argv)$/;" f main bmore.c /^main(int argc, char *argv[])$/;" f
main bvi.c /^main(argc, argv)$/;" f main bvi.c /^main(int argc, char *argv[])$/;" f
mark bvi.c /^static int mark;$/;" v file: mark bvi.c /^static int mark;$/;" v file:
markbuf bvi.c /^PTR markbuf[26];$/;" v markbuf bvi.c /^PTR markbuf[26];$/;" v
maxpos bvi.c /^PTR maxpos;$/;" v maxpos bvi.c /^PTR maxpos;$/;" v
maxx bmore.c /^int maxx, maxy;$/;" v maxx bmore.c /^int maxx, maxy;$/;" v
maxx bvi.c /^int maxx, maxy, x, xx, y;$/;" v maxx bvi.c /^int maxx, maxy, x, xx, y;$/;" v
maxy bmore.c /^int maxx, maxy;$/;" v maxy bmore.c /^int maxx, maxy;$/;" v
maxy bvi.c /^int maxx, maxy, x, xx, y;$/;" v maxy bvi.c /^int maxx, maxy, x, xx, y;$/;" v
mem bvi.c /^PTR mem = NULL;$/;" v mem bvi.c /^PTR mem = NULL;$/;" v
memcpy bvi.h 126;" d memcpy bvi.h 136;" d
memmove bm_unix.c /^memmove(s1, s2, n)$/;" f memmove bm_unix.c /^memmove(char *s1, char *s2, size_t n)$/;" f
memmove bvi.h 127;" d memmove bvi.h 137;" d
memmove io.c /^memmove(s1, s2, n)$/;" f memmove io.c /^memmove(char *s1, char *s2, size_t n)$/;" f
memsize bvi.c /^off_t filesize, memsize, undosize;$/;" v memsize bvi.c /^off_t filesize, memsize, undosize;$/;" v
morefiles comm.c /^char *morefiles = "more files@to edit";$/;" v morefiles comm.c /^char *morefiles = "more files@to edit";$/;" v
move doscur.h 91;" d move doscur.h 91;" d
movebyte edit.c /^movebyte()$/;" f movebyte edit.c /^movebyte()$/;" f
msg comm.c /^msg(s)$/;" f msg comm.c /^msg(char *s)$/;" f
mvaddch doscur.h 93;" d mvaddch doscur.h 93;" d
mvaddstr doscur.h 97;" d mvaddstr doscur.h 97;" d
mvgetch doscur.h 112;" d mvgetch doscur.h 112;" d
@ -433,40 +434,41 @@ nstate bm_unix.c /^struct termios ostate, nstate;$/;" v typeref:struct:
numarr bmore.c /^char numarr[64]; \/* string for collecting number *\/$/;" v numarr bmore.c /^char numarr[64]; \/* string for collecting number *\/$/;" v
numarr bvi.c /^char numarr[MAXCMD+1]; \/* string for collecting number *\/$/;" v numarr bvi.c /^char numarr[MAXCMD+1]; \/* string for collecting number *\/$/;" v
numfiles bmore.c /^int numfiles; \/* number of input files *\/$/;" v numfiles bmore.c /^int numfiles; \/* number of input files *\/$/;" v
numfiles bvi.c /^int numfiles; \/* number of input files *\/$/;" v numfiles bvi.c /^int numfiles; \/* number of input files *\/$/;" v
nvalue set.h /^ off_t nvalue;$/;" m struct:param nvalue set.h /^ off_t nvalue;$/;" m struct:param
off_t bmore.h 106;" d off_t bmore.h 110;" d
off_t bvi.h 122;" d off_t bvi.h 132;" d
oldbuf comm.c /^static char oldbuf[CMDSZ]; \/** for :!! command **\/$/;" v file: oldbuf comm.c /^static char oldbuf[CMDSZ + 3]; \/** for :!! command **\/$/;" v file:
oldpos bmore.c /^off_t bytepos, oldpos;$/;" v oldpos bmore.c /^off_t bytepos, oldpos;$/;" v
open_file bmore.c /^open_file(name)$/;" f open_file bmore.c /^open_file(char *name)$/;" f
ostate bm_unix.c /^struct termios ostate, nstate;$/;" v typeref:struct:termios ostate bm_unix.c /^struct termios ostate, nstate;$/;" v typeref:struct:termios
out_len bmore.c /^int out_len;$/;" v out_len bmore.c /^int out_len;$/;" v
outmsg comm.c /^outmsg(s)$/;" f outmsg comm.c /^outmsg(char *s)$/;" f
pagepos bvi.c /^PTR pagepos;$/;" v pagepos bvi.c /^PTR pagepos;$/;" v
param set.h /^struct param {$/;" s param set.h /^struct param {$/;" s
params set.c /^struct param params[] = {$/;" v typeref:struct:param params set.c /^struct param params[] = {$/;" v typeref:struct:param
patcpy re.c /^patcpy(s1, s2, delim)$/;" f patcpy re.c /^patcpy(char *s1, char *s2, char delim)$/;" f
pattern re.c /^char pattern[MAXCMD + 1];$/;" v pattern re.c /^char pattern[MAXCMD + 1];$/;" v
poi recomp.c /^char *poi;$/;" v poi recomp.c /^char *poi;$/;" v
precount bmore.c /^long precount = -1; \/* number preceding command *\/$/;" v precount bmore.c /^long precount = -1; \/* number preceding command *\/$/;" v
precount bvi.c /^long precount = -1;$/;" v precount bvi.c /^long precount = -1;$/;" v
printline edit.c /^printline(mempos, scpos)$/;" f printline edit.c /^printline(PTR mempos, int scpos)$/;" f
printout bmore.c /^printout(lns)$/;" f printout bmore.c /^printout(int lns)$/;" f
printw doscur.h 103;" d printw doscur.h 103;" d
progname bmore.c /^static char progname[10];$/;" v file: progname bmore.c /^static char progname[10];$/;" v file:
progname bvi.c /^static char progname[8];$/;" v file: progname bvi.c /^static char progname[8];$/;" v file:
prompt bmore.c /^int prompt = 1;$/;" v prompt bmore.c /^int prompt = 1;$/;" v
pushback bmore.c /^pushback(n, where)$/;" f pushback bmore.c /^pushback(int n, char *where)$/;" f
putchr bm_unix.c /^putchr(ch)$/;" f
putchr bm_unix.c /^putchr(char ch)$/;" f putchr bm_unix.c /^putchr(char ch)$/;" f
putline bmore.c /^putline(buf, num)$/;" f putchr bm_unix.c /^putchr(int ch)$/;" f
putline bmore.c /^putline(char *buf, int num)$/;" f
quit edit.c /^quit()$/;" f quit edit.c /^quit()$/;" f
r_flag bmore.c /^int c_flag = 0, d_flag = 0, r_flag = 0;$/;" v r_flag bmore.c /^int c_flag = 0, d_flag = 0, r_flag = 0;$/;" v
range bvi.c /^range(ch)$/;" f range bvi.c /^range(int ch)$/;" f
raw doscur.h 138;" d raw doscur.h 138;" d
rdline bmore.c /^rdline(ch, sstring)$/;" f rdline bmore.c /^rdline(int ch, char *sstring)$/;" f
read_rc set.c /^read_rc(fn)$/;" f read_rc set.c /^read_rc(char *fn)$/;" f
read_to_end io.c /^read_to_end(int fd, void *buf, size_t count) {$/;" f file:
refresh doscur.h 134;" d refresh doscur.h 134;" d
rep_buf bvi.c /^char rep_buf[BUFFER];$/;" v rep_buf bvi.c /^char rep_buf[BUFFER];$/;" v
repaint edit.c /^repaint() \/***** redraw screen *********************\/$/;" f repaint edit.c /^repaint() \/***** redraw screen *********************\/$/;" f
@ -476,56 +478,58 @@ reset_tty bm_unix.c /^reset_tty()$/;" f
resetty doscur.h 145;" d resetty doscur.h 145;" d
rev_end bm_unix.c /^char *rev_start, *rev_end; \/* enter and exit standout mode *\/$/;" v rev_end bm_unix.c /^char *rev_start, *rev_end; \/* enter and exit standout mode *\/$/;" v
rev_start bm_unix.c /^char *rev_start, *rev_end; \/* enter and exit standout mode *\/$/;" v rev_start bm_unix.c /^char *rev_start, *rev_end; \/* enter and exit standout mode *\/$/;" v
rsearch re.c /^rsearch(start, end, smem)$/;" f rsearch re.c /^rsearch(PTR start, PTR end, char *smem)$/;" f
save dosio.c /^save(char *fname, PTR start, PTR end, int flags)$/;" f save dosio.c /^save(char *fname, PTR start, PTR end, int flags)$/;" f
save io.c /^save(fname, start, end, flags)$/;" f save io.c /^save(char *fname, char *start, char *end, int flags)$/;" f
save_chk comm.c /^save_chk(fname, start, end, flags)$/;" f save_chk comm.c /^save_chk(char *fname, char *start, char *end, int flags)$/;" f
savetty doscur.h 144;" d savetty doscur.h 144;" d
sbracket bmore.c /^sbracket(start, scan, count)$/;" f sbracket bmore.c /^sbracket(int start, char *scan, int count)$/;" f
sbracket re.c /^sbracket(start, scan, count)$/;" f file: sbracket re.c /^sbracket(int start, char *scan, int count)$/;" f file:
scanw doscur.h 124;" d scanw doscur.h 124;" d
scr dosio.c /^struct WINDOW scr;$/;" v typeref:struct:WINDOW scr dosio.c /^struct WINDOW scr;$/;" v typeref:struct:WINDOW
screen bvi.c /^int screen, status, statsize;$/;" v screen bvi.c /^int screen, status, statsize;$/;" v
screen_home bmore.c /^off_t screen_home, filesize;$/;" v screen_home bmore.c /^off_t screen_home, filesize;$/;" v
scrolldown edit.c /^scrolldown(lns)$/;" f scrolldown edit.c /^scrolldown(int lns)$/;" f
scrollok doscur.h 142;" d scrollok doscur.h 142;" d
scrollup edit.c /^scrollup(lns)$/;" f scrollup edit.c /^scrollup(int lns)$/;" f
search_pat re.c /^char search_pat[BUFFER]; \/* \/ or ? command *\/$/;" v search_pat re.c /^char search_pat[BUFFER]; \/* \/ or ? command *\/$/;" v
searching re.c /^searching(ch, line, startpos, endpos, flag)$/;" f searching re.c /^searching(int ch, char *line, PTR startpos, PTR endpos, int flag)$/;" f
set_tty bm_dos.c /^set_tty ()$/;" f set_tty bm_dos.c /^set_tty ()$/;" f
set_tty bm_unix.c /^set_tty()$/;" f set_tty bm_unix.c /^set_tty()$/;" f
setcur edit.c /^setcur()$/;" f setcur edit.c /^setcur()$/;" f
setpage edit.c /^setpage(addr)$/;" f setpage edit.c /^setpage(PTR addr)$/;" f
shell bvi.c /^char *shell;$/;" v shell bvi.c /^char *shell;$/;" v
shortname set.h /^ char *shortname; \/* permissible abbreviation *\/$/;" m struct:param shortname set.h /^ char *shortname; \/* permissible abbreviation *\/$/;" m struct:param
showparms set.c /^showparms(all)$/;" f showparms set.c /^showparms(int all)$/;" f
sig bm_dos.c /^sig()$/;" f sig bm_dos.c /^sig()$/;" f
sig bm_unix.c /^sig(sig)$/;" f sig bm_unix.c /^sig(int sig)$/;" f
size bvi.c /^off_t size;$/;" v size bvi.c /^off_t size;$/;" v
slow_tty bm_unix.c /^int fnum, no_intty, no_tty, slow_tty;$/;" v slow_tty bm_unix.c /^int fnum, no_intty, no_tty, slow_tty;$/;" v
smode bmore.c /^static int smode;$/;" v file: smode bmore.c /^static int smode;$/;" v file:
smode recomp.c /^int smode;$/;" v smode recomp.c /^int smode;$/;" v
smsg comm.c /^smsg(s)$/;" f smsg comm.c /^smsg(char *s)$/;" f
spos bvi.c /^PTR spos;$/;" v space bvi.c /^int space = 2;$/;" v
spos bvi.c /^PTR spos;$/;" v
sstring bmore.c /^char sstring[MAXCMD] = ""; \/* string for search *\/$/;" v sstring bmore.c /^char sstring[MAXCMD] = ""; \/* string for search *\/$/;" v
standend doscur.h 89;" d standend doscur.h 89;" d
standout doscur.h 88;" d standout doscur.h 88;" d
start_addr comm.c /^PTR start_addr;$/;" v start_addr comm.c /^PTR start_addr;$/;" v
statpos edit.c /^statpos()$/;" f statpos edit.c /^statpos()$/;" f
statsize bvi.c /^int screen, status, statsize;$/;" v statsize bvi.c /^int screen, status, statsize;$/;" v
status bvi.c /^int screen, status, statsize;$/;" v status bvi.c /^int screen, status, statsize;$/;" v
statusflag bvi.c /^int statusflag = 1;$/;" v
stdscr dosio.c /^int stdscr = 0;$/;" v stdscr dosio.c /^int stdscr = 0;$/;" v
strcasecmp bmore.h 109;" d strcasecmp bmore.h 113;" d
strcasecmp bvi.h 125;" d strcasecmp bvi.h 135;" d
strdup io.c /^strdup(s)$/;" f strdup io.c /^strdup(char *s)$/;" f
string bmore.c /^char string[MAXCMD];$/;" v string bmore.c /^char string[MAXCMD];$/;" v
string bvi.c /^char string[MAXCMD+1];$/;" v string bvi.c /^char string[MAXCMD+1];$/;" v
strncasecmp bmore.h 108;" d strncasecmp bmore.h 112;" d
strncasecmp bvi.h 124;" d strncasecmp bvi.h 134;" d
stty bm_unix.c 34;" d file: stty bm_unix.c 36;" d file:
stuffin edit.c /^stuffin(s)$/;" f stuffin edit.c /^stuffin(char *s)$/;" f
svalue set.h /^ char *svalue;$/;" m struct:param svalue set.h /^ char *svalue;$/;" m struct:param
sysemsg comm.c /^sysemsg(s)$/;" f sysemsg comm.c /^sysemsg(char *s)$/;" f
terminal dosio.c /^char *terminal = "ansi";$/;" v terminal dosio.c /^char *terminal = "ansi";$/;" v
terminal io.c /^char *terminal;$/;" v terminal io.c /^char *terminal;$/;" v
tmpbuf edit.c /^char tmpbuf[10];$/;" v tmpbuf edit.c /^char tmpbuf[10];$/;" v
@ -534,7 +538,7 @@ toggle edit.c /^toggle()$/;" f
trunc_cur bvi.c /^trunc_cur()$/;" f trunc_cur bvi.c /^trunc_cur()$/;" f
undo_buf bvi.c /^char *undo_buf = NULL;$/;" v undo_buf bvi.c /^char *undo_buf = NULL;$/;" v
undo_count bvi.c /^off_t undo_count;$/;" v undo_count bvi.c /^off_t undo_count;$/;" v
undo_start bvi.c /^PTR undo_start;$/;" v undo_start bvi.c /^PTR undo_start;$/;" v
undosize bvi.c /^off_t filesize, memsize, undosize;$/;" v undosize bvi.c /^off_t filesize, memsize, undosize;$/;" v
usage bmore.c /^usage()$/;" f usage bmore.c /^usage()$/;" f
usage bvi.c /^usage()$/;" f usage bvi.c /^usage()$/;" f
@ -543,7 +547,7 @@ vgetc bm_unix.c /^vgetc()$/;" f
vgetc edit.c /^vgetc()$/;" f vgetc edit.c /^vgetc()$/;" f
waddch doscur.h 94;" d waddch doscur.h 94;" d
waddstr doscur.h 98;" d waddstr doscur.h 98;" d
wait_return comm.c /^wait_return(flag)$/;" f wait_return comm.c /^wait_return(int flag)$/;" f
wclear doscur.h 82;" d wclear doscur.h 82;" d
wclrtoeol doscur.h 78;" d wclrtoeol doscur.h 78;" d
wdeleteln doscur.h 109;" d wdeleteln doscur.h 109;" d
@ -552,15 +556,15 @@ wgetch doscur.h 113;" d
wgetstr doscur.h 116;" d wgetstr doscur.h 116;" d
winsertln doscur.h 107;" d winsertln doscur.h 107;" d
wmove doscur.h 90;" d wmove doscur.h 90;" d
wordsearch re.c /^wordsearch(start, mode)$/;" f wordsearch re.c /^wordsearch(PTR start, char mode)$/;" f
wprintw doscur.h 102;" d wprintw doscur.h 102;" d
wrefresh doscur.h 135;" d wrefresh doscur.h 135;" d
wrstat bvi.c /^static int wrstat = 1;$/;" v file: wrstat bvi.c /^static int wrstat = 1;$/;" v file:
wscanw doscur.h 123;" d wscanw doscur.h 123;" d
x bvi.c /^int maxx, maxy, x, xx, y;$/;" v x bvi.c /^int maxx, maxy, x, xx, y;$/;" v
xpos edit.c /^xpos()$/;" f xpos edit.c /^xpos()$/;" f
xx bvi.c /^int maxx, maxy, x, xx, y;$/;" v xx bvi.c /^int maxx, maxy, x, xx, y;$/;" v
y bvi.c /^int maxx, maxy, x, xx, y;$/;" v y bvi.c /^int maxx, maxy, x, xx, y;$/;" v
yank_buf bvi.c /^char *yank_buf = NULL;$/;" v yank_buf bvi.c /^char *yank_buf = NULL;$/;" v
yanked bvi.c /^off_t yanked = 0L;$/;" v yanked bvi.c /^off_t yanked = 0L;$/;" v
yd_addr comm.c /^yd_addr()$/;" f yd_addr comm.c /^yd_addr()$/;" f

209
test.txt Normal file
View file

@ -0,0 +1,209 @@
AAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZ
aaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbb
ccccccccccccccccccccccc
ddddddddddddddddddddddd
eeeeeeeeeeeeeeeeeeeeeee
fffffffffffffffffffffff
ggggggggggggggggggggggg
hhhhhhhhhhhhhhhhhhhhhhh
iiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjj
kkkkkkkkkkkkkkkkkkkkkkk
lllllllllllllllllllllll
mmmmmmmmmmmmmmmmmmmmmmm
nnnnnnnnnnnnnnnnnnnnnnn
ooooooooooooooooooooooo
ppppppppppppppppppppppp
qqqqqqqqqqqqqqqqqqqqqqq
rrrrrrrrrrrrrrrrrrrrrrr
sssssssssssssssssssssss
ttttttttttttttttttttttt
uuuuuuuuuuuuuuuuuuuuuuu
vvvvvvvvvvvvvvvvvvvvvvv
wwwwwwwwwwwwwwwwwwwwwww
xxxxxxxxxxxxxxxxxxxxxxx
AAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZ
aaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbb
ccccccccccccccccccccccc
ddddddddddddddddddddddd
eeeeeeeeeeeeeeeeeeeeeee
fffffffffffffffffffffff
ggggggggggggggggggggggg
hhhhhhhhhhhhhhhhhhhhhhh
iiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjj
kkkkkkkkkkkkkkkkkkkkkkk
lllllllllllllllllllllll
mmmmmmmmmmmmmmmmmmmmmmm
nnnnnnnnnnnnnnnnnnnnnnn
ooooooooooooooooooooooo
ppppppppppppppppppppppp
qqqqqqqqqqqqqqqqqqqqqqq
rrrrrrrrrrrrrrrrrrrrrrr
sssssssssssssssssssssss
ttttttttttttttttttttttt
uuuuuuuuuuuuuuuuuuuuuuu
vvvvvvvvvvvvvvvvvvvvvvv
wwwwwwwwwwwwwwwwwwwwwww
xxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzz
yyyyyyyyyyyyyyyyyyyyyyy
AAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZ
aaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbb
ccccccccccccccccccccccc
ddddddddddddddddddddddd
eeeeeeeeeeeeeeeeeeeeeee
fffffffffffffffffffffff
ggggggggggggggggggggggg
hhhhhhhhhhhhhhhhhhhhhhh
iiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjj
kkkkkkkkkkkkkkkkkkkkkkk
lllllllllllllllllllllll
mmmmmmmmmmmmmmmmmmmmmmm
nnnnnnnnnnnnnnnnnnnnnnn
ooooooooooooooooooooooo
ppppppppppppppppppppppp
qqqqqqqqqqqqqqqqqqqqqqq
rrrrrrrrrrrrrrrrrrrrrrr
sssssssssssssssssssssss
ttttttttttttttttttttttt
uuuuuuuuuuuuuuuuuuuuuuu
vvvvvvvvvvvvvvvvvvvvvvv
wwwwwwwwwwwwwwwwwwwwwww
xxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzz
AAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNNNNNNNN
OOOOOOOOOOOOOOOOOOOOOOO
PPPPPPPPPPPPPPPPPPPPPPP
QQQQQQQQQQQQQQQQQQQQQQQ
RRRRRRRRRRRRRRRRRRRRRRR
SSSSSSSSSSSSSSSSSSSSSSS
TTTTTTTTTTTTTTTTTTTTTTT
UUUUUUUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVVVVVV
WWWWWWWWWWWWWWWWWWWWWWW
XXXXXXXXXXXXXXXXXXXXXXX
YYYYYYYYYYYYYYYYYYYYYYY
ZZZZZZZZZZZZZZZZZZZZZZZ
aaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbb
ccccccccccccccccccccccc
ddddddddddddddddddddddd
eeeeeeeeeeeeeeeeeeeeeee
fffffffffffffffffffffff
ggggggggggggggggggggggg
hhhhhhhhhhhhhhhhhhhhhhh
iiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjj
kkkkkkkkkkkkkkkkkkkkkkk
lllllllllllllllllllllll
mmmmmmmmmmmmmmmmmmmmmmm
nnnnnnnnnnnnnnnnnnnnnnn
ooooooooooooooooooooooo
ppppppppppppppppppppppp
qqqqqqqqqqqqqqqqqqqqqqq
rrrrrrrrrrrrrrrrrrrrrrr
sssssssssssssssssssssss
ttttttttttttttttttttttt
uuuuuuuuuuuuuuuuuuuuuuu
vvvvvvvvvvvvvvvvvvvvvvv
wwwwwwwwwwwwwwwwwwwwwww
xxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzz

15
tmp
View file

@ -1,15 +0,0 @@
if ((ch > 31) && (ch < 127)) {
PRINTF("%c", ch);
} else {
if (r_flag) {
if ((ch & 128) && ((ch > 159) && (ch < 255))) {
if (!no_tty) highlight();
PRINTF("%c", ch & 127);
if (!no_tty) normal();
} else {
PRINTF(".");
}
} else {
PRINTF(".");
}
}