diff --git a/editors/vi.c b/editors/vi.c
index 8d7506d..ddc2edc 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -19,13 +19,13 @@
  */
 
 static const char vi_Version[] =
-	"$Id: vi.c,v 1.15 2001/08/02 05:26:41 andersen Exp $";
+	"$Id: vi.c,v 1.16 2001/10/24 04:59:23 andersen Exp $";
 
 /*
  * To compile for standalone use:
  *	gcc -Wall -Os -s -DSTANDALONE -o vi vi.c
  *	  or
- *	gcc -Wall -Os -s -DSTANDALONE -DBB_FEATURE_VI_CRASHME -o vi vi.c		# include testing features
+ *	gcc -Wall -Os -s -DSTANDALONE -DCONFIG_FEATURE_VI_CRASHME -o vi vi.c		# include testing features
  *	strip vi
  */
 
@@ -48,21 +48,21 @@
 //----  Feature --------------  Bytes to immplement
 #ifdef STANDALONE
 #define vi_main			main
-#define BB_FEATURE_VI_COLON	// 4288
-#define BB_FEATURE_VI_YANKMARK	// 1408
-#define BB_FEATURE_VI_SEARCH	// 1088
-#define BB_FEATURE_VI_USE_SIGNALS	// 1056
-#define BB_FEATURE_VI_DOT_CMD	//  576
-#define BB_FEATURE_VI_READONLY	//  128
-#define BB_FEATURE_VI_SETOPTS	//  576
-#define BB_FEATURE_VI_SET	//  224
-#define BB_FEATURE_VI_WIN_RESIZE	//  256  WIN_RESIZE
+#define CONFIG_FEATURE_VI_COLON	// 4288
+#define CONFIG_FEATURE_VI_YANKMARK	// 1408
+#define CONFIG_FEATURE_VI_SEARCH	// 1088
+#define CONFIG_FEATURE_VI_USE_SIGNALS	// 1056
+#define CONFIG_FEATURE_VI_DOT_CMD	//  576
+#define CONFIG_FEATURE_VI_READONLY	//  128
+#define CONFIG_FEATURE_VI_SETOPTS	//  576
+#define CONFIG_FEATURE_VI_SET	//  224
+#define CONFIG_FEATURE_VI_WIN_RESIZE	//  256  WIN_RESIZE
 // To test editor using CRASHME:
 //    vi -C filename
 // To stop testing, wait until all to text[] is deleted, or
 //    Ctrl-Z and kill -9 %1
 // while in the editor Ctrl-T will toggle the crashme function on and off.
-//#define BB_FEATURE_VI_CRASHME		// randomly pick commands to execute
+//#define CONFIG_FEATURE_VI_CRASHME		// randomly pick commands to execute
 #endif							/* STANDALONE */
 
 #include <stdio.h>
@@ -161,40 +161,40 @@
 static int tabstop;
 static struct termios term_orig, term_vi;	// remember what the cooked mode was
 
-#ifdef BB_FEATURE_VI_OPTIMIZE_CURSOR
+#ifdef CONFIG_FEATURE_VI_OPTIMIZE_CURSOR
 static int last_row;		// where the cursor was last moved to
-#endif							/* BB_FEATURE_VI_OPTIMIZE_CURSOR */
-#ifdef BB_FEATURE_VI_USE_SIGNALS
+#endif							/* CONFIG_FEATURE_VI_OPTIMIZE_CURSOR */
+#ifdef CONFIG_FEATURE_VI_USE_SIGNALS
 static jmp_buf restart;		// catch_sig()
-#endif							/* BB_FEATURE_VI_USE_SIGNALS */
-#ifdef BB_FEATURE_VI_WIN_RESIZE
+#endif							/* CONFIG_FEATURE_VI_USE_SIGNALS */
+#ifdef CONFIG_FEATURE_VI_WIN_RESIZE
 static struct winsize winsize;	// remember the window size
-#endif							/* BB_FEATURE_VI_WIN_RESIZE */
-#ifdef BB_FEATURE_VI_DOT_CMD
+#endif							/* CONFIG_FEATURE_VI_WIN_RESIZE */
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 static int adding2q;		// are we currently adding user input to q
 static Byte *last_modifying_cmd;	// last modifying cmd for "."
 static Byte *ioq, *ioq_start;	// pointer to string for get_one_char to "read"
-#endif							/* BB_FEATURE_VI_DOT_CMD */
-#if	defined(BB_FEATURE_VI_DOT_CMD) || defined(BB_FEATURE_VI_YANKMARK)
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
+#if	defined(CONFIG_FEATURE_VI_DOT_CMD) || defined(CONFIG_FEATURE_VI_YANKMARK)
 static Byte *modifying_cmds;	// cmds that modify text[]
-#endif							/* BB_FEATURE_VI_DOT_CMD || BB_FEATURE_VI_YANKMARK */
-#ifdef BB_FEATURE_VI_READONLY
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD || CONFIG_FEATURE_VI_YANKMARK */
+#ifdef CONFIG_FEATURE_VI_READONLY
 static int vi_readonly, readonly;
-#endif							/* BB_FEATURE_VI_READONLY */
-#ifdef BB_FEATURE_VI_SETOPTS
+#endif							/* CONFIG_FEATURE_VI_READONLY */
+#ifdef CONFIG_FEATURE_VI_SETOPTS
 static int autoindent;
 static int showmatch;
 static int ignorecase;
-#endif							/* BB_FEATURE_VI_SETOPTS */
-#ifdef BB_FEATURE_VI_YANKMARK
+#endif							/* CONFIG_FEATURE_VI_SETOPTS */
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 static Byte *reg[28];		// named register a-z, "D", and "U" 0-25,26,27
 static int YDreg, Ureg;		// default delete register and orig line for "U"
 static Byte *mark[28];		// user marks points somewhere in text[]-  a-z and previous context ''
 static Byte *context_start, *context_end;
-#endif							/* BB_FEATURE_VI_YANKMARK */
-#ifdef BB_FEATURE_VI_SEARCH
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
+#ifdef CONFIG_FEATURE_VI_SEARCH
 static Byte *last_search_pattern;	// last pattern from a '/' or '?' search
-#endif							/* BB_FEATURE_VI_SEARCH */
+#endif							/* CONFIG_FEATURE_VI_SEARCH */
 
 
 static void edit_file(Byte *);	// edit one file
@@ -259,59 +259,59 @@
 static void format_line(Byte*, Byte*, int);
 static void refresh(int);	// update the terminal from screen[]
 
-#ifdef BB_FEATURE_VI_SEARCH
+#ifdef CONFIG_FEATURE_VI_SEARCH
 static Byte *char_search(Byte *, Byte *, int, int);	// search for pattern starting at p
 static int mycmp(Byte *, Byte *, int);	// string cmp based in "ignorecase"
-#endif							/* BB_FEATURE_VI_SEARCH */
-#ifdef BB_FEATURE_VI_COLON
+#endif							/* CONFIG_FEATURE_VI_SEARCH */
+#ifdef CONFIG_FEATURE_VI_COLON
 static void Hit_Return(void);
 static Byte *get_one_address(Byte *, int *);	// get colon addr, if present
 static Byte *get_address(Byte *, int *, int *);	// get two colon addrs, if present
 static void colon(Byte *);	// execute the "colon" mode cmds
-#endif							/* BB_FEATURE_VI_COLON */
+#endif							/* CONFIG_FEATURE_VI_COLON */
 static Byte *get_input_line(Byte *);	// get input line- use "status line"
-#ifdef BB_FEATURE_VI_USE_SIGNALS
+#ifdef CONFIG_FEATURE_VI_USE_SIGNALS
 static void winch_sig(int);	// catch window size changes
 static void suspend_sig(int);	// catch ctrl-Z
 static void alarm_sig(int);	// catch alarm time-outs
 static void catch_sig(int);	// catch ctrl-C
 static void core_sig(int);	// catch a core dump signal
-#endif							/* BB_FEATURE_VI_USE_SIGNALS */
-#ifdef BB_FEATURE_VI_DOT_CMD
+#endif							/* CONFIG_FEATURE_VI_USE_SIGNALS */
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 static void start_new_cmd_q(Byte);	// new queue for command
 static void end_cmd_q();	// stop saving input chars
-#else							/* BB_FEATURE_VI_DOT_CMD */
+#else							/* CONFIG_FEATURE_VI_DOT_CMD */
 #define end_cmd_q()
-#endif							/* BB_FEATURE_VI_DOT_CMD */
-#ifdef BB_FEATURE_VI_WIN_RESIZE
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
+#ifdef CONFIG_FEATURE_VI_WIN_RESIZE
 static void window_size_get(int);	// find out what size the window is
-#endif							/* BB_FEATURE_VI_WIN_RESIZE */
-#ifdef BB_FEATURE_VI_SETOPTS
+#endif							/* CONFIG_FEATURE_VI_WIN_RESIZE */
+#ifdef CONFIG_FEATURE_VI_SETOPTS
 static void showmatching(Byte *);	// show the matching pair ()  []  {}
-#endif							/* BB_FEATURE_VI_SETOPTS */
-#if defined(BB_FEATURE_VI_YANKMARK) || defined(BB_FEATURE_VI_COLON) || defined(BB_FEATURE_VI_CRASHME)
+#endif							/* CONFIG_FEATURE_VI_SETOPTS */
+#if defined(CONFIG_FEATURE_VI_YANKMARK) || defined(CONFIG_FEATURE_VI_COLON) || defined(CONFIG_FEATURE_VI_CRASHME)
 static Byte *string_insert(Byte *, Byte *);	// insert the string at 'p'
-#endif							/* BB_FEATURE_VI_YANKMARK || BB_FEATURE_VI_COLON || BB_FEATURE_VI_CRASHME */
-#ifdef BB_FEATURE_VI_YANKMARK
+#endif							/* CONFIG_FEATURE_VI_YANKMARK || CONFIG_FEATURE_VI_COLON || CONFIG_FEATURE_VI_CRASHME */
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 static Byte *text_yank(Byte *, Byte *, int);	// save copy of "p" into a register
 static Byte what_reg(void);		// what is letter of current YDreg
 static void check_context(Byte);	// remember context for '' command
 static Byte *swap_context(Byte *);	// goto new context for '' command
-#endif							/* BB_FEATURE_VI_YANKMARK */
-#ifdef BB_FEATURE_VI_CRASHME
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
+#ifdef CONFIG_FEATURE_VI_CRASHME
 static void crash_dummy();
 static void crash_test();
 static int crashme = 0;
-#endif							/* BB_FEATURE_VI_CRASHME */
+#endif							/* CONFIG_FEATURE_VI_CRASHME */
 
 
 extern int vi_main(int argc, char **argv)
 {
 	int c;
 
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	int i;
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 
 	CMrc= "\033[%d;%dH";	// Terminal Crusor motion ESC sequence
 	CMup= "\033[A";		// move cursor up one line, same col
@@ -321,46 +321,46 @@
 	SOs = "\033[7m";	// Terminal standout mode on
 	SOn = "\033[0m";	// Terminal standout mode off
 	bell= "\007";		// Terminal bell sequence
-#ifdef BB_FEATURE_VI_CRASHME
+#ifdef CONFIG_FEATURE_VI_CRASHME
 	(void) srand((long) getpid());
-#endif							/* BB_FEATURE_VI_CRASHME */
+#endif							/* CONFIG_FEATURE_VI_CRASHME */
 	status_buffer = (Byte *) malloc(200);	// hold messages to user
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 	vi_readonly = readonly = FALSE;
 	if (strncmp(argv[0], "view", 4) == 0) {
 		readonly = TRUE;
 		vi_readonly = TRUE;
 	}
-#endif							/* BB_FEATURE_VI_READONLY */
-#ifdef BB_FEATURE_VI_SETOPTS
+#endif							/* CONFIG_FEATURE_VI_READONLY */
+#ifdef CONFIG_FEATURE_VI_SETOPTS
 	autoindent = 1;
 	ignorecase = 1;
 	showmatch = 1;
-#endif							/* BB_FEATURE_VI_SETOPTS */
-#ifdef BB_FEATURE_VI_YANKMARK
+#endif							/* CONFIG_FEATURE_VI_SETOPTS */
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	for (i = 0; i < 28; i++) {
 		reg[i] = 0;
 	}					// init the yank regs
-#endif							/* BB_FEATURE_VI_YANKMARK */
-#ifdef BB_FEATURE_VI_DOT_CMD
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 	modifying_cmds = (Byte *) "aAcCdDiIJoOpPrRsxX<>~";	// cmds modifying text[]
-#endif							/* BB_FEATURE_VI_DOT_CMD */
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
 
 	//  1-  process $HOME/.exrc file
 	//  2-  process EXINIT variable from environment
 	//  3-  process command line args
 	while ((c = getopt(argc, argv, "hCR")) != -1) {
 		switch (c) {
-#ifdef BB_FEATURE_VI_CRASHME
+#ifdef CONFIG_FEATURE_VI_CRASHME
 		case 'C':
 			crashme = 1;
 			break;
-#endif							/* BB_FEATURE_VI_CRASHME */
-#ifdef BB_FEATURE_VI_READONLY
+#endif							/* CONFIG_FEATURE_VI_CRASHME */
+#ifdef CONFIG_FEATURE_VI_READONLY
 		case 'R':		// Read-only flag
 			readonly = TRUE;
 			break;
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 			//case 'r':	// recover flag-  ignore- we don't use tmp file
 			//case 'x':	// encryption flag- ignore
 			//case 'c':	// execute command first
@@ -399,21 +399,21 @@
 	char c;
 	int cnt, size, ch;
 
-#ifdef BB_FEATURE_VI_USE_SIGNALS
+#ifdef CONFIG_FEATURE_VI_USE_SIGNALS
 	char *msg;
 	int sig;
-#endif							/* BB_FEATURE_VI_USE_SIGNALS */
-#ifdef BB_FEATURE_VI_YANKMARK
+#endif							/* CONFIG_FEATURE_VI_USE_SIGNALS */
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	static Byte *cur_line;
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 
 	rawmode();
 	rows = 24;
 	columns = 80;
 	ch= -1;
-#ifdef BB_FEATURE_VI_WIN_RESIZE
+#ifdef CONFIG_FEATURE_VI_WIN_RESIZE
 	window_size_get(0);
-#endif							/* BB_FEATURE_VI_WIN_RESIZE */
+#endif							/* CONFIG_FEATURE_VI_WIN_RESIZE */
 	new_screen(rows, columns);	// get memory for virtual screen
 
 	cnt = file_size(fn);	// file size
@@ -427,14 +427,14 @@
 		(void) char_insert(text, '\n');	// start empty buf with dummy line
 	}
 	file_modified = FALSE;
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	YDreg = 26;			// default Yank/Delete reg
 	Ureg = 27;			// hold orig line for "U" cmd
 	for (cnt = 0; cnt < 28; cnt++) {
 		mark[cnt] = 0;
 	}					// init the marks
 	mark[26] = mark[27] = text;	// init "previous context"
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 
 	err_method = 1;		// flash
 	last_forward_char = last_input_char = '\0';
@@ -442,7 +442,7 @@
 	ccol = 0;
 	edit_status();
 
-#ifdef BB_FEATURE_VI_USE_SIGNALS
+#ifdef CONFIG_FEATURE_VI_USE_SIGNALS
 	signal(SIGHUP, catch_sig);
 	signal(SIGINT, catch_sig);
 	signal(SIGALRM, alarm_sig);
@@ -481,7 +481,7 @@
 		psbs("-- caught signal %d %s--", sig, msg);
 		screenbegin = dot = text;
 	}
-#endif							/* BB_FEATURE_VI_USE_SIGNALS */
+#endif							/* CONFIG_FEATURE_VI_USE_SIGNALS */
 
 	editing = 1;
 	cmd_mode = 0;		// 0=command  1=insert  2='R'eplace
@@ -489,20 +489,20 @@
 	tabstop = 8;
 	offset = 0;			// no horizontal offset
 	c = '\0';
-#ifdef BB_FEATURE_VI_DOT_CMD
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 	if (last_modifying_cmd != 0)
 		free(last_modifying_cmd);
 	if (ioq_start != NULL)
 		free(ioq_start);
 	ioq = ioq_start = last_modifying_cmd = 0;
 	adding2q = 0;
-#endif							/* BB_FEATURE_VI_DOT_CMD */
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
 	redraw(FALSE);			// dont force every col re-draw
 	show_status_line();
 
 	//------This is the main Vi cmd handling loop -----------------------
 	while (editing > 0) {
-#ifdef BB_FEATURE_VI_CRASHME
+#ifdef CONFIG_FEATURE_VI_CRASHME
 		if (crashme > 0) {
 			if ((end - text) > 1) {
 				crash_dummy();	// generate a random command
@@ -513,23 +513,23 @@
 				refresh(FALSE);
 			}
 		}
-#endif							/* BB_FEATURE_VI_CRASHME */
+#endif							/* CONFIG_FEATURE_VI_CRASHME */
 		last_input_char = c = get_one_char();	// get a cmd from user
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 		// save a copy of the current line- for the 'U" command
 		if (begin_line(dot) != cur_line) {
 			cur_line = begin_line(dot);
 			text_yank(begin_line(dot), end_line(dot), Ureg);
 		}
-#endif							/* BB_FEATURE_VI_YANKMARK */
-#ifdef BB_FEATURE_VI_DOT_CMD
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 		// These are commands that change text[].
 		// Remember the input for the "." command
 		if (!adding2q && ioq_start == 0
 			&& strchr((char *) modifying_cmds, c) != NULL) {
 			start_new_cmd_q(c);
 		}
-#endif							/* BB_FEATURE_VI_DOT_CMD */
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
 		do_cmd(c);		// execute the user command
 		//
 		// poll to see if there is input already waiting. if we are
@@ -540,10 +540,10 @@
 			refresh(FALSE);
 			show_status_line();
 		}
-#ifdef BB_FEATURE_VI_CRASHME
+#ifdef CONFIG_FEATURE_VI_CRASHME
 		if (crashme > 0)
 			crash_test();	// test editor variables
-#endif							/* BB_FEATURE_VI_CRASHME */
+#endif							/* CONFIG_FEATURE_VI_CRASHME */
 	}
 	//-------------------------------------------------------------------
 
@@ -554,7 +554,7 @@
 
 static Byte readbuffer[BUFSIZ];
 
-#ifdef BB_FEATURE_VI_CRASHME
+#ifdef CONFIG_FEATURE_VI_CRASHME
 static int totalcmds = 0;
 static int Mp = 85;		// Movement command Probability
 static int Np = 90;		// Non-movement command Probability
@@ -756,7 +756,7 @@
 	}
 	return;
 }
-#endif							/* BB_FEATURE_VI_CRASHME */
+#endif							/* CONFIG_FEATURE_VI_CRASHME */
 
 //---------------------------------------------------------------------
 //----- the Ascii Chart -----------------------------------------------
@@ -822,11 +822,11 @@
 		//case 0x10:	// dle
 		//case 0x11:	// dc1
 		//case 0x13:	// dc3
-#ifdef BB_FEATURE_VI_CRASHME
+#ifdef CONFIG_FEATURE_VI_CRASHME
 	case 0x14:			// dc4  ctrl-T
 		crashme = (crashme == 0) ? 1 : 0;
 		break;
-#endif							/* BB_FEATURE_VI_CRASHME */
+#endif							/* CONFIG_FEATURE_VI_CRASHME */
 		//case 0x16:	// syn
 		//case 0x17:	// etb
 		//case 0x18:	// can
@@ -873,14 +873,14 @@
 	case VI_K_PAGEUP:	// Cursor Key Page Up
 		dot_scroll(rows - 2, -1);
 		break;
-#ifdef BB_FEATURE_VI_USE_SIGNALS
+#ifdef CONFIG_FEATURE_VI_USE_SIGNALS
 	case 0x03:			// ctrl-C   interrupt
 		longjmp(restart, 1);
 		break;
 	case 26:			// ctrl-Z suspend
 		suspend_sig(SIGTSTP);
 		break;
-#endif							/* BB_FEATURE_VI_USE_SIGNALS */
+#endif							/* CONFIG_FEATURE_VI_USE_SIGNALS */
 	case 4:			// ctrl-D  scroll down half screen
 		dot_scroll((rows - 2) / 2, 1);
 		break;
@@ -949,7 +949,7 @@
 		}				// repeat cnt
 		dot_right();
 		break;
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	case '"':			// "- name a register to use for Delete/Yank
 		c1 = get_one_char();
 		c1 = tolower(c1);
@@ -1031,7 +1031,7 @@
 			dot_skip_over_ws();
 		}
 		break;
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 	case '$':			// $- goto end of line
 	case VI_K_END:		// Cursor Key End
 		if (cmdcnt-- > 1) {
@@ -1080,7 +1080,7 @@
 		dot_prev();
 		dot_skip_over_ws();
 		break;
-#ifdef BB_FEATURE_VI_DOT_CMD
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 	case '.':			// .- repeat the last modifying command
 		// Stuff the last_modifying_cmd back into stdin
 		// and let it be re-executed.
@@ -1088,8 +1088,8 @@
 			ioq = ioq_start = (Byte *) strdup((char *) last_modifying_cmd);
 		}
 		break;
-#endif							/* BB_FEATURE_VI_DOT_CMD */
-#ifdef BB_FEATURE_VI_SEARCH
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
+#ifdef CONFIG_FEATURE_VI_SEARCH
 	case '?':			// /- search for a pattern
 	case '/':			// /- search for a pattern
 		buf[0] = c;
@@ -1175,7 +1175,7 @@
 			dot = next_line(q);	// move to next blank line
 		}
 		break;
-#endif							/* BB_FEATURE_VI_SEARCH */
+#endif							/* CONFIG_FEATURE_VI_SEARCH */
 	case '0':			// 0- goto begining of line
 	case '1':			// 1- 
 	case '2':			// 2- 
@@ -1194,9 +1194,9 @@
 		break;
 	case ':':			// :- the colon mode commands
 		p = get_input_line((Byte *) ":");	// get input line- use "status line"
-#ifdef BB_FEATURE_VI_COLON
+#ifdef CONFIG_FEATURE_VI_COLON
 		colon(p);		// execute the command
-#else							/* BB_FEATURE_VI_COLON */
+#else							/* CONFIG_FEATURE_VI_COLON */
 		if (*p == ':')
 			p++;				// move past the ':'
 		cnt = strlen((char *) p);
@@ -1225,7 +1225,7 @@
 		} else {		// unrecognised cmd
 			ni((Byte *) p);
 		}
-#endif							/* BB_FEATURE_VI_COLON */
+#endif							/* CONFIG_FEATURE_VI_COLON */
 		break;
 	case '<':			// <- Left  shift something
 	case '>':			// >- Right shift something
@@ -1289,10 +1289,10 @@
 		dot = yank_delete(save_dot, dot, 0, YANKDEL);	// delete to e-o-l
 		if (c == 'C')
 			goto dc_i;	// start inserting
-#ifdef BB_FEATURE_VI_DOT_CMD
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 		if (c == 'D')
 			end_cmd_q();	// stop adding to q
-#endif							/* BB_FEATURE_VI_DOT_CMD */
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
 		break;
 	case 'G':		// G- goto to a line number (default= E-O-F)
 		dot = end - 1;				// assume E-O-F
@@ -1396,10 +1396,10 @@
 			break;
 		}
 		if (file_modified == TRUE
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 			&& vi_readonly == FALSE
 			&& readonly == FALSE
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 			) {
 			cnt = file_write(cfn, text, end - 1);
 			if (cnt == (end - 1 - text + 1)) {
@@ -1435,15 +1435,15 @@
 		break;
 	case 'c':			// c- change something
 	case 'd':			// d- delete something
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	case 'y':			// y- yank   something
 	case 'Y':			// Y- Yank a line
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 		yf = YANKDEL;	// assume either "c" or "d"
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 		if (c == 'y' || c == 'Y')
 			yf = YANKONLY;
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 		c1 = 'y';
 		if (c != 'Y')
 			c1 = get_one_char();	// get the type of thing to delete
@@ -1490,7 +1490,7 @@
 			if (c == 'd') {
 				strcpy((char *) buf, "Delete");
 			}
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 			if (c == 'y' || c == 'Y') {
 				strcpy((char *) buf, "Yank");
 			}
@@ -1502,7 +1502,7 @@
 			}
 			psb("%s %d lines (%d chars) using [%c]",
 				buf, cnt, strlen((char *) reg[YDreg]), what_reg());
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 			end_cmd_q();	// stop adding to q
 		}
 		break;
@@ -1601,9 +1601,9 @@
 	if (dot != end) {
 		dot = bound_dot(dot);	// make sure "dot" is valid
 	}
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	check_context(c);	// update the current context
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 
 	if (!isdigit(c))
 		cmdcnt = 0;		// cmd was not a number, reset cmdcnt
@@ -1614,25 +1614,25 @@
 }
 
 //----- The Colon commands -------------------------------------
-#ifdef BB_FEATURE_VI_COLON
+#ifdef CONFIG_FEATURE_VI_COLON
 static Byte *get_one_address(Byte * p, int *addr)	// get colon addr, if present
 {
 	int st;
 	Byte *q;
 
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	Byte c;
-#endif							/* BB_FEATURE_VI_YANKMARK */
-#ifdef BB_FEATURE_VI_SEARCH
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
+#ifdef CONFIG_FEATURE_VI_SEARCH
 	Byte *pat, buf[BUFSIZ];
-#endif							/* BB_FEATURE_VI_SEARCH */
+#endif							/* CONFIG_FEATURE_VI_SEARCH */
 
 	*addr = -1;			// assume no addr
 	if (*p == '.') {	// the current line
 		p++;
 		q = begin_line(dot);
 		*addr = count_lines(text, q);
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	} else if (*p == '\'') {	// is this a mark addr
 		p++;
 		c = tolower(*p);
@@ -1645,8 +1645,8 @@
 				*addr = count_lines(text, q);	// count lines
 			}
 		}
-#endif							/* BB_FEATURE_VI_YANKMARK */
-#ifdef BB_FEATURE_VI_SEARCH
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
+#ifdef CONFIG_FEATURE_VI_SEARCH
 	} else if (*p == '/') {	// a search pattern
 		q = buf;
 		for (p++; *p; p++) {
@@ -1663,7 +1663,7 @@
 			*addr = count_lines(text, q);
 		}
 		free(pat);
-#endif							/* BB_FEATURE_VI_SEARCH */
+#endif							/* CONFIG_FEATURE_VI_SEARCH */
 	} else if (*p == '$') {	// the last line in file
 		p++;
 		q = begin_line(end - 1);
@@ -1871,7 +1871,7 @@
 			ch= 1;
 		}
 		file_modified = FALSE;
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 		if (Ureg >= 0 && Ureg < 28 && reg[Ureg] != 0) {
 			free(reg[Ureg]);	//   free orig line reg- for 'U'
 			reg[Ureg]= 0;
@@ -1883,18 +1883,18 @@
 		for (li = 0; li < 28; li++) {
 			mark[li] = 0;
 		}				// init the marks
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 		// how many lines in text[]?
 		li = count_lines(text, end - 1);
 		psb("\"%s\"%s"
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 			"%s"
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 			" %dL, %dC", cfn,
 			(sr < 0 ? " [New file]" : ""),
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 			((vi_readonly == TRUE || readonly == TRUE) ? " [Read only]" : ""),
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 			li, ch);
 	} else if (strncasecmp((char *) cmd, "file", i) == 0) {	// what File is this
 		if (b != -1 || e != -1) {
@@ -1940,9 +1940,9 @@
 			if (c > '~')
 				standout_end();
 		}
-#ifdef BB_FEATURE_VI_SET
+#ifdef CONFIG_FEATURE_VI_SET
 	  vc2:
-#endif							/* BB_FEATURE_VI_SET */
+#endif							/* CONFIG_FEATURE_VI_SET */
 		Hit_Return();
 	} else if ((strncasecmp((char *) cmd, "quit", i) == 0) ||	// Quit
 			   (strncasecmp((char *) cmd, "next", i) == 0)) {	// edit next file
@@ -1982,11 +1982,11 @@
 		// read after current line- unless user said ":0r foo"
 		if (b != 0)
 			q = next_line(q);
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 		l= readonly;			// remember current files' status
 #endif
 		ch = file_insert(fn, q, file_size(fn));
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 		readonly= l;
 #endif
 		if (ch < 0)
@@ -1994,13 +1994,13 @@
 		// how many lines in text[]?
 		li = count_lines(q, q + ch - 1);
 		psb("\"%s\""
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 			"%s"
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 			" %dL, %dC", fn,
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 			((vi_readonly == TRUE || readonly == TRUE) ? " [Read only]" : ""),
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 			li, ch);
 		if (ch > 0) {
 			// if the insert is before "dot" then we need to update
@@ -2016,7 +2016,7 @@
 			optind = fn_start - 1;
 			editing = 0;
 		}
-#ifdef BB_FEATURE_VI_SET
+#ifdef CONFIG_FEATURE_VI_SET
 	} else if (strncasecmp((char *) cmd, "set", i) == 0) {	// set or clear features
 		i = 0;			// offset into args
 		if (strlen((char *) args) == 0) {
@@ -2024,7 +2024,7 @@
 			place_cursor(rows - 1, 0, FALSE);	// go to Status line, bottom of screen
 			clear_to_eol();	// clear the line
 			printf("----------------------------------------\r\n");
-#ifdef BB_FEATURE_VI_SETOPTS
+#ifdef CONFIG_FEATURE_VI_SETOPTS
 			if (!autoindent)
 				printf("no");
 			printf("autoindent ");
@@ -2038,13 +2038,13 @@
 				printf("no");
 			printf("showmatch ");
 			printf("tabstop=%d ", tabstop);
-#endif							/* BB_FEATURE_VI_SETOPTS */
+#endif							/* CONFIG_FEATURE_VI_SETOPTS */
 			printf("\r\n");
 			goto vc2;
 		}
 		if (strncasecmp((char *) args, "no", 2) == 0)
 			i = 2;		// ":set noautoindent"
-#ifdef BB_FEATURE_VI_SETOPTS
+#ifdef CONFIG_FEATURE_VI_SETOPTS
 		if (strncasecmp((char *) args + i, "autoindent", 10) == 0 ||
 			strncasecmp((char *) args + i, "ai", 2) == 0) {
 			autoindent = (i == 2) ? 0 : 1;
@@ -2066,9 +2066,9 @@
 			if (ch > 0 && ch < columns - 1)
 				tabstop = ch;
 		}
-#endif							/* BB_FEATURE_VI_SETOPTS */
-#endif							/* BB_FEATURE_VI_SET */
-#ifdef BB_FEATURE_VI_SEARCH
+#endif							/* CONFIG_FEATURE_VI_SETOPTS */
+#endif							/* CONFIG_FEATURE_VI_SET */
+#ifdef CONFIG_FEATURE_VI_SEARCH
 	} else if (strncasecmp((char *) cmd, "s", 1) == 0) {	// substitute a pattern with a replacement pattern
 		Byte *ls, *F, *R;
 		int gflag;
@@ -2115,7 +2115,7 @@
 			}
 			q = next_line(ls);
 		}
-#endif							/* BB_FEATURE_VI_SEARCH */
+#endif							/* CONFIG_FEATURE_VI_SEARCH */
 	} else if (strncasecmp((char *) cmd, "version", i) == 0) {	// show software version
 		psb("%s", vi_Version);
 	} else if ((strncasecmp((char *) cmd, "write", i) == 0) ||	// write text to file
@@ -2124,12 +2124,12 @@
 		if (strlen((char *) args) > 0) {
 			fn = args;
 		}
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 		if ((vi_readonly == TRUE || readonly == TRUE) && useforce == FALSE) {
 			psbs("\"%s\" File is read only", fn);
 			goto vc3;
 		}
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 		// how many lines in text[]?
 		li = count_lines(q, r);
 		ch = r - q + 1;
@@ -2153,10 +2153,10 @@
 		if (cmd[1] == 'q' && l == ch) {
 			editing = 0;
 		}
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 	  vc3:;
-#endif							/* BB_FEATURE_VI_READONLY */
-#ifdef BB_FEATURE_VI_YANKMARK
+#endif							/* CONFIG_FEATURE_VI_READONLY */
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	} else if (strncasecmp((char *) cmd, "yank", i) == 0) {	// yank lines
 		if (b < 0) {	// no addr given- use defaults
 			q = begin_line(dot);	// assume .,. for the range
@@ -2166,7 +2166,7 @@
 		li = count_lines(q, r);
 		psb("Yank %d lines (%d chars) into [%c]",
 			li, strlen((char *) reg[YDreg]), what_reg());
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 	} else {
 		// cmd unknown
 		ni((Byte *) cmd);
@@ -2174,7 +2174,7 @@
   vc1:
 	dot = bound_dot(dot);	// make sure "dot" is valid
 	return;
-#ifdef BB_FEATURE_VI_SEARCH
+#ifdef CONFIG_FEATURE_VI_SEARCH
 colon_s_fail:
 	psb(":s expression missing delimiters");
 	return;
@@ -2193,7 +2193,7 @@
 		;
 	redraw(TRUE);		// force redraw all
 }
-#endif							/* BB_FEATURE_VI_COLON */
+#endif							/* CONFIG_FEATURE_VI_COLON */
 
 //----- Synchronize the cursor to Dot --------------------------
 static void sync_cursor(Byte * d, int *row, int *col)
@@ -2518,17 +2518,17 @@
 	return (text);
 }
 
-#ifdef BB_FEATURE_VI_SEARCH
+#ifdef CONFIG_FEATURE_VI_SEARCH
 static int mycmp(Byte * s1, Byte * s2, int len)
 {
 	int i;
 
 	i = strncmp((char *) s1, (char *) s2, len);
-#ifdef BB_FEATURE_VI_SETOPTS
+#ifdef CONFIG_FEATURE_VI_SETOPTS
 	if (ignorecase) {
 		i = strncasecmp((char *) s1, (char *) s2, len);
 	}
-#endif							/* BB_FEATURE_VI_SETOPTS */
+#endif							/* CONFIG_FEATURE_VI_SETOPTS */
 	return (i);
 }
 
@@ -2623,7 +2623,7 @@
 	return (p);
 #endif							/*REGEX_SEARCH */
 }
-#endif							/* BB_FEATURE_VI_SEARCH */
+#endif							/* CONFIG_FEATURE_VI_SEARCH */
 
 static Byte *char_insert(Byte * p, Byte c) // insert the char c at 'p'
 {
@@ -2648,7 +2648,7 @@
 		if ((p[-1] != '\n') && (dot>text)) {
 			p--;
 			p = text_hole_delete(p, p);	// shrink buffer 1 char
-#ifdef BB_FEATURE_VI_DOT_CMD
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 			// also rmove char from last_modifying_cmd
 			if (strlen((char *) last_modifying_cmd) > 0) {
 				Byte *q;
@@ -2657,7 +2657,7 @@
 				q[strlen((char *) q) - 1] = '\0';	// erase BS
 				q[strlen((char *) q) - 1] = '\0';	// erase prev char
 			}
-#endif							/* BB_FEATURE_VI_DOT_CMD */
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
 		}
 	} else {
 		// insert a char into text[]
@@ -2667,7 +2667,7 @@
 			c = '\n';	// translate \r to \n
 		sp = p;			// remember addr of insert
 		p = stupid_insert(p, c);	// insert the char
-#ifdef BB_FEATURE_VI_SETOPTS
+#ifdef CONFIG_FEATURE_VI_SETOPTS
 		if (showmatch && strchr(")]}", *sp) != NULL) {
 			showmatching(sp);
 		}
@@ -2679,7 +2679,7 @@
 				p = stupid_insert(p, *q);	// insert the char
 			}
 		}
-#endif							/* BB_FEATURE_VI_SETOPTS */
+#endif							/* CONFIG_FEATURE_VI_SETOPTS */
 	}
 	return (p);
 }
@@ -2844,7 +2844,7 @@
 	return (q);
 }
 
-#ifdef BB_FEATURE_VI_SETOPTS
+#ifdef CONFIG_FEATURE_VI_SETOPTS
 // show the matching char of a pair,  ()  []  {}
 static void showmatching(Byte * p)
 {
@@ -2864,7 +2864,7 @@
 		refresh(FALSE);
 	}
 }
-#endif							/* BB_FEATURE_VI_SETOPTS */
+#endif							/* CONFIG_FEATURE_VI_SETOPTS */
 
 //  open a hole in text[]
 static Byte *text_hole_make(Byte * p, int size)	// at "p", make a 'size' byte hole
@@ -2951,9 +2951,9 @@
 		}
 	}
 	p = start;
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	text_yank(start, stop, YDreg);
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 	if (yf == YANKDEL) {
 		p = text_hole_delete(start, stop);
 	}					// delete lines
@@ -2963,33 +2963,33 @@
 static void show_help(void)
 {
 	puts("These features are available:"
-#ifdef BB_FEATURE_VI_SEARCH
+#ifdef CONFIG_FEATURE_VI_SEARCH
 	"\n\tPattern searches with / and ?"
-#endif							/* BB_FEATURE_VI_SEARCH */
-#ifdef BB_FEATURE_VI_DOT_CMD
+#endif							/* CONFIG_FEATURE_VI_SEARCH */
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 	"\n\tLast command repeat with \'.\'"
-#endif							/* BB_FEATURE_VI_DOT_CMD */
-#ifdef BB_FEATURE_VI_YANKMARK
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	"\n\tLine marking with  'x"
 	"\n\tNamed buffers with  \"x"
-#endif							/* BB_FEATURE_VI_YANKMARK */
-#ifdef BB_FEATURE_VI_READONLY
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
+#ifdef CONFIG_FEATURE_VI_READONLY
 	"\n\tReadonly if vi is called as \"view\""
 	"\n\tReadonly with -R command line arg"
-#endif							/* BB_FEATURE_VI_READONLY */
-#ifdef BB_FEATURE_VI_SET
+#endif							/* CONFIG_FEATURE_VI_READONLY */
+#ifdef CONFIG_FEATURE_VI_SET
 	"\n\tSome colon mode commands with \':\'"
-#endif							/* BB_FEATURE_VI_SET */
-#ifdef BB_FEATURE_VI_SETOPTS
+#endif							/* CONFIG_FEATURE_VI_SET */
+#ifdef CONFIG_FEATURE_VI_SETOPTS
 	"\n\tSettable options with \":set\""
-#endif							/* BB_FEATURE_VI_SETOPTS */
-#ifdef BB_FEATURE_VI_USE_SIGNALS
+#endif							/* CONFIG_FEATURE_VI_SETOPTS */
+#ifdef CONFIG_FEATURE_VI_USE_SIGNALS
 	"\n\tSignal catching- ^C"
 	"\n\tJob suspend and resume with ^Z"
-#endif							/* BB_FEATURE_VI_USE_SIGNALS */
-#ifdef BB_FEATURE_VI_WIN_RESIZE
+#endif							/* CONFIG_FEATURE_VI_USE_SIGNALS */
+#ifdef CONFIG_FEATURE_VI_WIN_RESIZE
 	"\n\tAdapt to window re-sizes"
-#endif							/* BB_FEATURE_VI_WIN_RESIZE */
+#endif							/* CONFIG_FEATURE_VI_WIN_RESIZE */
 	);
 }
 
@@ -3021,7 +3021,7 @@
 	}
 }
 
-#ifdef BB_FEATURE_VI_DOT_CMD
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 static void start_new_cmd_q(Byte c)
 {
 	// release old cmd
@@ -3041,15 +3041,15 @@
 
 static void end_cmd_q()
 {
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	YDreg = 26;			// go back to default Yank/Delete reg
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 	adding2q = 0;
 	return;
 }
-#endif							/* BB_FEATURE_VI_DOT_CMD */
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
 
-#if defined(BB_FEATURE_VI_YANKMARK) || defined(BB_FEATURE_VI_COLON) || defined(BB_FEATURE_VI_CRASHME)
+#if defined(CONFIG_FEATURE_VI_YANKMARK) || defined(CONFIG_FEATURE_VI_COLON) || defined(CONFIG_FEATURE_VI_CRASHME)
 static Byte *string_insert(Byte * p, Byte * s) // insert the string at 'p'
 {
 	int cnt, i;
@@ -3061,14 +3061,14 @@
 		if (*s == '\n')
 			cnt++;
 	}
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 	psb("Put %d lines (%d chars) from [%c]", cnt, i, what_reg());
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 	return (p);
 }
-#endif							/* BB_FEATURE_VI_YANKMARK || BB_FEATURE_VI_COLON || BB_FEATURE_VI_CRASHME */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK || CONFIG_FEATURE_VI_COLON || CONFIG_FEATURE_VI_CRASHME */
 
-#ifdef BB_FEATURE_VI_YANKMARK
+#ifdef CONFIG_FEATURE_VI_YANKMARK
 static Byte *text_yank(Byte * p, Byte * q, int dest)	// copy text into a register
 {
 	Byte *t;
@@ -3142,7 +3142,7 @@
 	}
 	return (p);
 }
-#endif							/* BB_FEATURE_VI_YANKMARK */
+#endif							/* CONFIG_FEATURE_VI_YANKMARK */
 
 static int isblnk(Byte c) // is the char a blank or tab
 {
@@ -3170,7 +3170,7 @@
 	tcsetattr(0, TCSANOW, &term_orig);
 }
 
-#ifdef BB_FEATURE_VI_WIN_RESIZE
+#ifdef CONFIG_FEATURE_VI_WIN_RESIZE
 //----- See what the window size currently is --------------------
 static void window_size_get(int sig)
 {
@@ -3191,16 +3191,16 @@
 	rows = (int) winsize.ws_row;
 	columns = (int) winsize.ws_col;
 }
-#endif							/* BB_FEATURE_VI_WIN_RESIZE */
+#endif							/* CONFIG_FEATURE_VI_WIN_RESIZE */
 
 //----- Come here when we get a window resize signal ---------
-#ifdef BB_FEATURE_VI_USE_SIGNALS
+#ifdef CONFIG_FEATURE_VI_USE_SIGNALS
 static void winch_sig(int sig)
 {
 	signal(SIGWINCH, winch_sig);
-#ifdef BB_FEATURE_VI_WIN_RESIZE
+#ifdef CONFIG_FEATURE_VI_WIN_RESIZE
 	window_size_get(0);
-#endif							/* BB_FEATURE_VI_WIN_RESIZE */
+#endif							/* CONFIG_FEATURE_VI_WIN_RESIZE */
 	new_screen(rows, columns);	// get memory for virtual screen
 	redraw(TRUE);		// re-draw the screen
 }
@@ -3263,7 +3263,7 @@
 
 	longjmp(restart, sig);
 }
-#endif							/* BB_FEATURE_VI_USE_SIGNALS */
+#endif							/* CONFIG_FEATURE_VI_USE_SIGNALS */
 
 static int mysleep(int hund)	// sleep for 'h' 1/100 seconds
 {
@@ -3396,7 +3396,7 @@
 {
 	static Byte c;
 
-#ifdef BB_FEATURE_VI_DOT_CMD
+#ifdef CONFIG_FEATURE_VI_DOT_CMD
 	// ! adding2q  && ioq == 0  read()
 	// ! adding2q  && ioq != 0  *ioq
 	// adding2q         *last_modifying_cmd= read()
@@ -3424,9 +3424,9 @@
 			last_modifying_cmd[strlen((char *) last_modifying_cmd)] = c;
 		}
 	}
-#else							/* BB_FEATURE_VI_DOT_CMD */
+#else							/* CONFIG_FEATURE_VI_DOT_CMD */
 	c = readit();		// get the users input
-#endif							/* BB_FEATURE_VI_DOT_CMD */
+#endif							/* CONFIG_FEATURE_VI_DOT_CMD */
 	return (c);			// return the char, where ever it came from
 }
 
@@ -3489,9 +3489,9 @@
 	int fd, cnt;
 
 	cnt = -1;
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 	readonly = FALSE;
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 	if (fn == 0 || strlen((char*) fn) <= 0) {
 		psbs("No filename given");
 		goto fi0;
@@ -3511,13 +3511,13 @@
 	}
 
 	// see if we can open the file
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 	if (vi_readonly == TRUE) goto fi1;		// do not try write-mode
 #endif
 	fd = open((char *) fn, O_RDWR);			// assume read & write
 	if (fd < 0) {
 		// could not open for writing- maybe file is read only
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
   fi1:
 #endif
 		fd = open((char *) fn, O_RDONLY);	// try read-only
@@ -3525,10 +3525,10 @@
 			psbs("\"%s\" %s", fn, "could not open file");
 			goto fi0;
 		}
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 		// got the file- read-only
 		readonly = TRUE;
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 	}
 	p = text_hole_make(p, size);
 	cnt = read(fd, p, size);
@@ -3591,12 +3591,12 @@
 	char cm1[BUFSIZ];
 	char *cm;
 	int l;
-#ifdef BB_FEATURE_VI_OPTIMIZE_CURSOR
+#ifdef CONFIG_FEATURE_VI_OPTIMIZE_CURSOR
 	char cm2[BUFSIZ];
 	Byte *screenp;
 	// char cm3[BUFSIZ];
 	int Rrow= last_row;
-#endif							/* BB_FEATURE_VI_OPTIMIZE_CURSOR */
+#endif							/* CONFIG_FEATURE_VI_OPTIMIZE_CURSOR */
 	
 	memset(cm1, '\0', BUFSIZ - 1);  // clear the buffer
 
@@ -3610,7 +3610,7 @@
 	cm= cm1;
 	if (opti == FALSE) goto pc0;
 
-#ifdef BB_FEATURE_VI_OPTIMIZE_CURSOR
+#ifdef CONFIG_FEATURE_VI_OPTIMIZE_CURSOR
 	//----- find the minimum # of chars to move cursor -------------
 	//----- 2.  Try moving with discreet chars (Newline, [back]space, ...)
 	memset(cm2, '\0', BUFSIZ - 1);  // clear the buffer
@@ -3643,7 +3643,7 @@
 	}  /* else if (strlen(cm3) < strlen(cm)) {
 		cm= cm3;
 	} */
-#endif							/* BB_FEATURE_VI_OPTIMIZE_CURSOR */
+#endif							/* CONFIG_FEATURE_VI_OPTIMIZE_CURSOR */
   pc0:
 	l= strlen(cm);
 	if (l) write(1, cm, l);			// move the cursor
@@ -3690,10 +3690,10 @@
 
 static void indicate_error(char c)
 {
-#ifdef BB_FEATURE_VI_CRASHME
+#ifdef CONFIG_FEATURE_VI_CRASHME
 	if (crashme > 0)
 		return;			// generate a random command
-#endif							/* BB_FEATURE_VI_CRASHME */
+#endif							/* CONFIG_FEATURE_VI_CRASHME */
 	if (err_method == 0) {
 		beep();
 	} else {
@@ -3777,14 +3777,14 @@
 		percent = 100;
 	}
 	psb("\"%s\""
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 		"%s"
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 		"%s line %d of %d --%d%%--",
 		(cfn != 0 ? (char *) cfn : "No file"),
-#ifdef BB_FEATURE_VI_READONLY
+#ifdef CONFIG_FEATURE_VI_READONLY
 		((vi_readonly == TRUE || readonly == TRUE) ? " [Read only]" : ""),
-#endif							/* BB_FEATURE_VI_READONLY */
+#endif							/* CONFIG_FEATURE_VI_READONLY */
 		(file_modified == TRUE ? " [modified]" : ""),
 		cur, tot, percent);
 }
@@ -3847,13 +3847,13 @@
 	int li, changed;
 	Byte buf[MAX_SCR_COLS];
 	Byte *tp, *sp;		// pointer into text[] and screen[]
-#ifdef BB_FEATURE_VI_OPTIMIZE_CURSOR
+#ifdef CONFIG_FEATURE_VI_OPTIMIZE_CURSOR
 	int last_li= -2;				// last line that changed- for optimizing cursor movement
-#endif							/* BB_FEATURE_VI_OPTIMIZE_CURSOR */
+#endif							/* CONFIG_FEATURE_VI_OPTIMIZE_CURSOR */
 
-#ifdef BB_FEATURE_VI_WIN_RESIZE
+#ifdef CONFIG_FEATURE_VI_WIN_RESIZE
 	window_size_get(0);
-#endif							/* BB_FEATURE_VI_WIN_RESIZE */
+#endif							/* CONFIG_FEATURE_VI_WIN_RESIZE */
 	sync_cursor(dot, &crow, &ccol);	// where cursor will be (on "dot")
 	tp = screenbegin;	// index into text[] of top line
 
@@ -3916,31 +3916,31 @@
 				// to handle offsets correctly
 				place_cursor(li, cs, FALSE);
 			} else {
-#ifdef BB_FEATURE_VI_OPTIMIZE_CURSOR
+#ifdef CONFIG_FEATURE_VI_OPTIMIZE_CURSOR
 				// if this just the next line
 				//  try to optimize cursor movement
 				//  otherwise, use standard ESC sequence
 				place_cursor(li, cs, li == (last_li+1) ? TRUE : FALSE);
 				last_li= li;
-#else							/* BB_FEATURE_VI_OPTIMIZE_CURSOR */
+#else							/* CONFIG_FEATURE_VI_OPTIMIZE_CURSOR */
 				place_cursor(li, cs, FALSE);	// use standard ESC sequence
-#endif							/* BB_FEATURE_VI_OPTIMIZE_CURSOR */
+#endif							/* CONFIG_FEATURE_VI_OPTIMIZE_CURSOR */
 			}
 
 			// write line out to terminal
 			write(1, sp+cs, ce-cs+1);
-#ifdef BB_FEATURE_VI_OPTIMIZE_CURSOR
+#ifdef CONFIG_FEATURE_VI_OPTIMIZE_CURSOR
 			last_row = li;
-#endif							/* BB_FEATURE_VI_OPTIMIZE_CURSOR */
+#endif							/* CONFIG_FEATURE_VI_OPTIMIZE_CURSOR */
 		}
 	}
 
-#ifdef BB_FEATURE_VI_OPTIMIZE_CURSOR
+#ifdef CONFIG_FEATURE_VI_OPTIMIZE_CURSOR
 	place_cursor(crow, ccol, (crow == last_row) ? TRUE : FALSE);
 	last_row = crow;
 #else
 	place_cursor(crow, ccol, FALSE);
-#endif							/* BB_FEATURE_VI_OPTIMIZE_CURSOR */
+#endif							/* CONFIG_FEATURE_VI_OPTIMIZE_CURSOR */
 	
 	if (offset != old_offset)
 		old_offset = offset;
