aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configs/mingw32_defconfig18
-rw-r--r--configs/mingw64_defconfig18
-rw-r--r--editors/vi.c100
3 files changed, 119 insertions, 17 deletions
diff --git a/configs/mingw32_defconfig b/configs/mingw32_defconfig
index d9466af1d..179af2f67 100644
--- a/configs/mingw32_defconfig
+++ b/configs/mingw32_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Busybox version: 1.34.0.git 3# Busybox version: 1.35.0.git
4# Sat Jul 24 10:37:11 2021 4# Mon Aug 30 08:54:18 2021
5# 5#
6CONFIG_HAVE_DOT_CONFIG=y 6CONFIG_HAVE_DOT_CONFIG=y
7# CONFIG_PLATFORM_POSIX is not set 7# CONFIG_PLATFORM_POSIX is not set
@@ -226,11 +226,13 @@ CONFIG_CHMOD=y
226# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set 226# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
227# CONFIG_CHROOT is not set 227# CONFIG_CHROOT is not set
228CONFIG_CKSUM=y 228CONFIG_CKSUM=y
229CONFIG_CRC32=y
229CONFIG_COMM=y 230CONFIG_COMM=y
230CONFIG_CP=y 231CONFIG_CP=y
231CONFIG_FEATURE_CP_LONG_OPTIONS=y 232CONFIG_FEATURE_CP_LONG_OPTIONS=y
232# CONFIG_FEATURE_CP_REFLINK is not set 233# CONFIG_FEATURE_CP_REFLINK is not set
233CONFIG_CUT=y 234CONFIG_CUT=y
235CONFIG_FEATURE_CUT_REGEX=y
234CONFIG_DATE=y 236CONFIG_DATE=y
235CONFIG_FEATURE_DATE_ISOFMT=y 237CONFIG_FEATURE_DATE_ISOFMT=y
236# CONFIG_FEATURE_DATE_NANO is not set 238# CONFIG_FEATURE_DATE_NANO is not set
@@ -354,10 +356,10 @@ CONFIG_BASE64=y
354CONFIG_UUENCODE=y 356CONFIG_UUENCODE=y
355CONFIG_WC=y 357CONFIG_WC=y
356CONFIG_FEATURE_WC_LARGE=y 358CONFIG_FEATURE_WC_LARGE=y
357CONFIG_WHOAMI=y
358# CONFIG_WHO is not set 359# CONFIG_WHO is not set
359# CONFIG_W is not set 360# CONFIG_W is not set
360# CONFIG_USERS is not set 361# CONFIG_USERS is not set
362CONFIG_WHOAMI=y
361CONFIG_YES=y 363CONFIG_YES=y
362 364
363# 365#
@@ -446,6 +448,7 @@ CONFIG_FEATURE_VI_REGEX_SEARCH=y
446CONFIG_FEATURE_VI_DOT_CMD=y 448CONFIG_FEATURE_VI_DOT_CMD=y
447CONFIG_FEATURE_VI_READONLY=y 449CONFIG_FEATURE_VI_READONLY=y
448CONFIG_FEATURE_VI_SETOPTS=y 450CONFIG_FEATURE_VI_SETOPTS=y
451CONFIG_FEATURE_VI_FILE_FORMAT=y
449CONFIG_FEATURE_VI_SET=y 452CONFIG_FEATURE_VI_SET=y
450CONFIG_FEATURE_VI_WIN_RESIZE=y 453CONFIG_FEATURE_VI_WIN_RESIZE=y
451# CONFIG_FEATURE_VI_ASK_TERMINAL is not set 454# CONFIG_FEATURE_VI_ASK_TERMINAL is not set
@@ -530,10 +533,10 @@ CONFIG_INIT_TERMINAL_TYPE=""
530# CONFIG_USE_BB_SHADOW is not set 533# CONFIG_USE_BB_SHADOW is not set
531# CONFIG_USE_BB_CRYPT is not set 534# CONFIG_USE_BB_CRYPT is not set
532# CONFIG_USE_BB_CRYPT_SHA is not set 535# CONFIG_USE_BB_CRYPT_SHA is not set
533# CONFIG_ADDGROUP is not set
534# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
535# CONFIG_ADD_SHELL is not set 536# CONFIG_ADD_SHELL is not set
536# CONFIG_REMOVE_SHELL is not set 537# CONFIG_REMOVE_SHELL is not set
538# CONFIG_ADDGROUP is not set
539# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
537# CONFIG_ADDUSER is not set 540# CONFIG_ADDUSER is not set
538# CONFIG_FEATURE_CHECK_NAMES is not set 541# CONFIG_FEATURE_CHECK_NAMES is not set
539CONFIG_LAST_ID=0 542CONFIG_LAST_ID=0
@@ -752,6 +755,7 @@ CONFIG_REV=y
752# Miscellaneous Utilities 755# Miscellaneous Utilities
753# 756#
754# CONFIG_ADJTIMEX is not set 757# CONFIG_ADJTIMEX is not set
758CONFIG_ASCII=y
755# CONFIG_BBCONFIG is not set 759# CONFIG_BBCONFIG is not set
756# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set 760# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
757CONFIG_BC=y 761CONFIG_BC=y
@@ -785,10 +789,10 @@ CONFIG_FEATURE_CROND_DIR=""
785# CONFIG_FEATURE_DEVFS is not set 789# CONFIG_FEATURE_DEVFS is not set
786# CONFIG_DEVMEM is not set 790# CONFIG_DEVMEM is not set
787# CONFIG_FBSPLASH is not set 791# CONFIG_FBSPLASH is not set
788# CONFIG_FLASHCP is not set
789# CONFIG_FLASH_ERASEALL is not set 792# CONFIG_FLASH_ERASEALL is not set
790# CONFIG_FLASH_LOCK is not set 793# CONFIG_FLASH_LOCK is not set
791# CONFIG_FLASH_UNLOCK is not set 794# CONFIG_FLASH_UNLOCK is not set
795# CONFIG_FLASHCP is not set
792# CONFIG_HDPARM is not set 796# CONFIG_HDPARM is not set
793# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set 797# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
794# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set 798# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
@@ -839,13 +843,13 @@ CONFIG_STRINGS=y
839CONFIG_TIME=y 843CONFIG_TIME=y
840CONFIG_TS=y 844CONFIG_TS=y
841CONFIG_TTYSIZE=y 845CONFIG_TTYSIZE=y
842# CONFIG_UBIRENAME is not set
843# CONFIG_UBIATTACH is not set 846# CONFIG_UBIATTACH is not set
844# CONFIG_UBIDETACH is not set 847# CONFIG_UBIDETACH is not set
845# CONFIG_UBIMKVOL is not set 848# CONFIG_UBIMKVOL is not set
846# CONFIG_UBIRMVOL is not set 849# CONFIG_UBIRMVOL is not set
847# CONFIG_UBIRSVOL is not set 850# CONFIG_UBIRSVOL is not set
848# CONFIG_UBIUPDATEVOL is not set 851# CONFIG_UBIUPDATEVOL is not set
852# CONFIG_UBIRENAME is not set
849# CONFIG_VOLNAME is not set 853# CONFIG_VOLNAME is not set
850# CONFIG_WATCHDOG is not set 854# CONFIG_WATCHDOG is not set
851# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set 855# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set
diff --git a/configs/mingw64_defconfig b/configs/mingw64_defconfig
index ef1ba4e22..f9be9aab2 100644
--- a/configs/mingw64_defconfig
+++ b/configs/mingw64_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Busybox version: 1.34.0.git 3# Busybox version: 1.35.0.git
4# Sat Jul 24 10:37:11 2021 4# Mon Aug 30 08:54:18 2021
5# 5#
6CONFIG_HAVE_DOT_CONFIG=y 6CONFIG_HAVE_DOT_CONFIG=y
7# CONFIG_PLATFORM_POSIX is not set 7# CONFIG_PLATFORM_POSIX is not set
@@ -226,11 +226,13 @@ CONFIG_CHMOD=y
226# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set 226# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
227# CONFIG_CHROOT is not set 227# CONFIG_CHROOT is not set
228CONFIG_CKSUM=y 228CONFIG_CKSUM=y
229CONFIG_CRC32=y
229CONFIG_COMM=y 230CONFIG_COMM=y
230CONFIG_CP=y 231CONFIG_CP=y
231CONFIG_FEATURE_CP_LONG_OPTIONS=y 232CONFIG_FEATURE_CP_LONG_OPTIONS=y
232# CONFIG_FEATURE_CP_REFLINK is not set 233# CONFIG_FEATURE_CP_REFLINK is not set
233CONFIG_CUT=y 234CONFIG_CUT=y
235CONFIG_FEATURE_CUT_REGEX=y
234CONFIG_DATE=y 236CONFIG_DATE=y
235CONFIG_FEATURE_DATE_ISOFMT=y 237CONFIG_FEATURE_DATE_ISOFMT=y
236# CONFIG_FEATURE_DATE_NANO is not set 238# CONFIG_FEATURE_DATE_NANO is not set
@@ -354,10 +356,10 @@ CONFIG_BASE64=y
354CONFIG_UUENCODE=y 356CONFIG_UUENCODE=y
355CONFIG_WC=y 357CONFIG_WC=y
356CONFIG_FEATURE_WC_LARGE=y 358CONFIG_FEATURE_WC_LARGE=y
357CONFIG_WHOAMI=y
358# CONFIG_WHO is not set 359# CONFIG_WHO is not set
359# CONFIG_W is not set 360# CONFIG_W is not set
360# CONFIG_USERS is not set 361# CONFIG_USERS is not set
362CONFIG_WHOAMI=y
361CONFIG_YES=y 363CONFIG_YES=y
362 364
363# 365#
@@ -446,6 +448,7 @@ CONFIG_FEATURE_VI_REGEX_SEARCH=y
446CONFIG_FEATURE_VI_DOT_CMD=y 448CONFIG_FEATURE_VI_DOT_CMD=y
447CONFIG_FEATURE_VI_READONLY=y 449CONFIG_FEATURE_VI_READONLY=y
448CONFIG_FEATURE_VI_SETOPTS=y 450CONFIG_FEATURE_VI_SETOPTS=y
451CONFIG_FEATURE_VI_FILE_FORMAT=y
449CONFIG_FEATURE_VI_SET=y 452CONFIG_FEATURE_VI_SET=y
450CONFIG_FEATURE_VI_WIN_RESIZE=y 453CONFIG_FEATURE_VI_WIN_RESIZE=y
451# CONFIG_FEATURE_VI_ASK_TERMINAL is not set 454# CONFIG_FEATURE_VI_ASK_TERMINAL is not set
@@ -530,10 +533,10 @@ CONFIG_INIT_TERMINAL_TYPE=""
530# CONFIG_USE_BB_SHADOW is not set 533# CONFIG_USE_BB_SHADOW is not set
531# CONFIG_USE_BB_CRYPT is not set 534# CONFIG_USE_BB_CRYPT is not set
532# CONFIG_USE_BB_CRYPT_SHA is not set 535# CONFIG_USE_BB_CRYPT_SHA is not set
533# CONFIG_ADDGROUP is not set
534# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
535# CONFIG_ADD_SHELL is not set 536# CONFIG_ADD_SHELL is not set
536# CONFIG_REMOVE_SHELL is not set 537# CONFIG_REMOVE_SHELL is not set
538# CONFIG_ADDGROUP is not set
539# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
537# CONFIG_ADDUSER is not set 540# CONFIG_ADDUSER is not set
538# CONFIG_FEATURE_CHECK_NAMES is not set 541# CONFIG_FEATURE_CHECK_NAMES is not set
539CONFIG_LAST_ID=0 542CONFIG_LAST_ID=0
@@ -752,6 +755,7 @@ CONFIG_REV=y
752# Miscellaneous Utilities 755# Miscellaneous Utilities
753# 756#
754# CONFIG_ADJTIMEX is not set 757# CONFIG_ADJTIMEX is not set
758CONFIG_ASCII=y
755# CONFIG_BBCONFIG is not set 759# CONFIG_BBCONFIG is not set
756# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set 760# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
757CONFIG_BC=y 761CONFIG_BC=y
@@ -785,10 +789,10 @@ CONFIG_FEATURE_CROND_DIR=""
785# CONFIG_FEATURE_DEVFS is not set 789# CONFIG_FEATURE_DEVFS is not set
786# CONFIG_DEVMEM is not set 790# CONFIG_DEVMEM is not set
787# CONFIG_FBSPLASH is not set 791# CONFIG_FBSPLASH is not set
788# CONFIG_FLASHCP is not set
789# CONFIG_FLASH_ERASEALL is not set 792# CONFIG_FLASH_ERASEALL is not set
790# CONFIG_FLASH_LOCK is not set 793# CONFIG_FLASH_LOCK is not set
791# CONFIG_FLASH_UNLOCK is not set 794# CONFIG_FLASH_UNLOCK is not set
795# CONFIG_FLASHCP is not set
792# CONFIG_HDPARM is not set 796# CONFIG_HDPARM is not set
793# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set 797# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
794# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set 798# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
@@ -839,13 +843,13 @@ CONFIG_STRINGS=y
839CONFIG_TIME=y 843CONFIG_TIME=y
840CONFIG_TS=y 844CONFIG_TS=y
841CONFIG_TTYSIZE=y 845CONFIG_TTYSIZE=y
842# CONFIG_UBIRENAME is not set
843# CONFIG_UBIATTACH is not set 846# CONFIG_UBIATTACH is not set
844# CONFIG_UBIDETACH is not set 847# CONFIG_UBIDETACH is not set
845# CONFIG_UBIMKVOL is not set 848# CONFIG_UBIMKVOL is not set
846# CONFIG_UBIRMVOL is not set 849# CONFIG_UBIRMVOL is not set
847# CONFIG_UBIRSVOL is not set 850# CONFIG_UBIRSVOL is not set
848# CONFIG_UBIUPDATEVOL is not set 851# CONFIG_UBIUPDATEVOL is not set
852# CONFIG_UBIRENAME is not set
849# CONFIG_VOLNAME is not set 853# CONFIG_VOLNAME is not set
850# CONFIG_WATCHDOG is not set 854# CONFIG_WATCHDOG is not set
851# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set 855# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set
diff --git a/editors/vi.c b/editors/vi.c
index 2c1048a4c..b973cc056 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -112,6 +112,15 @@
112//config: help 112//config: help
113//config: Enable the editor to set some (ai, ic, showmatch) options. 113//config: Enable the editor to set some (ai, ic, showmatch) options.
114//config: 114//config:
115//config:config FEATURE_VI_FILE_FORMAT
116//config: bool "Enable detection of file format"
117//config: default y
118//config: depends on VI && FEATURE_VI_SETOPTS && PLATFORM_MINGW32
119//config: help
120//config: Enable the editor to detect the format of files it reads
121//config: so they can be written out with the appropriate line
122//config: endings. Enable the 'fileformats' option.
123//config:
115//config:config FEATURE_VI_SET 124//config:config FEATURE_VI_SET
116//config: bool "Support :set" 125//config: bool "Support :set"
117//config: default y 126//config: default y
@@ -297,6 +306,7 @@ struct globals {
297 306
298 // the rest 307 // the rest
299#if ENABLE_FEATURE_VI_SETOPTS 308#if ENABLE_FEATURE_VI_SETOPTS
309#if !ENABLE_FEATURE_VI_FILE_FORMAT
300 smallint vi_setops; // set by setops() 310 smallint vi_setops; // set by setops()
301#define VI_AUTOINDENT (1 << 0) 311#define VI_AUTOINDENT (1 << 0)
302#define VI_EXPANDTAB (1 << 1) 312#define VI_EXPANDTAB (1 << 1)
@@ -304,6 +314,17 @@ struct globals {
304#define VI_IGNORECASE (1 << 3) 314#define VI_IGNORECASE (1 << 3)
305#define VI_SHOWMATCH (1 << 4) 315#define VI_SHOWMATCH (1 << 4)
306#define VI_TABSTOP (1 << 5) 316#define VI_TABSTOP (1 << 5)
317#else
318 smalluint vi_setops; // set by setops()
319#define VI_AUTOINDENT (1 << 0)
320#define VI_EXPANDTAB (1 << 1)
321#define VI_FILEFORMAT (1 << 2)
322#define VI_FILEFORMATS (1 << 3)
323#define VI_ERR_METHOD (1 << 4)
324#define VI_IGNORECASE (1 << 5)
325#define VI_SHOWMATCH (1 << 6)
326#define VI_TABSTOP (1 << 7)
327#endif
307#define autoindent (vi_setops & VI_AUTOINDENT) 328#define autoindent (vi_setops & VI_AUTOINDENT)
308#define expandtab (vi_setops & VI_EXPANDTAB ) 329#define expandtab (vi_setops & VI_EXPANDTAB )
309#define err_method (vi_setops & VI_ERR_METHOD) // indicate error with beep or flash 330#define err_method (vi_setops & VI_ERR_METHOD) // indicate error with beep or flash
@@ -313,10 +334,18 @@ struct globals {
313#define OPTS_STR \ 334#define OPTS_STR \
314 "ai\0""autoindent\0" \ 335 "ai\0""autoindent\0" \
315 "et\0""expandtab\0" \ 336 "et\0""expandtab\0" \
337 IF_FEATURE_VI_FILE_FORMAT("ff\0""fileformat\0") \
338 IF_FEATURE_VI_FILE_FORMAT("ffs\0""fileformats\0") \
316 "fl\0""flash\0" \ 339 "fl\0""flash\0" \
317 "ic\0""ignorecase\0" \ 340 "ic\0""ignorecase\0" \
318 "sm\0""showmatch\0" \ 341 "sm\0""showmatch\0" \
319 "ts\0""tabstop\0" 342 "ts\0""tabstop\0"
343
344#define FF_DOS_UNIX 0
345#define FF_UNIX_DOS 1
346#define FORMATS_STR \
347 "dos,unix\0" \
348 "unix,dos\0"
320#else 349#else
321#define autoindent (0) 350#define autoindent (0)
322#define expandtab (0) 351#define expandtab (0)
@@ -380,6 +409,10 @@ struct globals {
380#if ENABLE_FEATURE_VI_SETOPTS 409#if ENABLE_FEATURE_VI_SETOPTS
381 int indentcol; // column of recently autoindent, 0 or -1 410 int indentcol; // column of recently autoindent, 0 or -1
382#endif 411#endif
412#if ENABLE_FEATURE_VI_FILE_FORMAT
413 smallint fileformat;
414 smallint fileformats;
415#endif
383 smallint cmd_error; 416 smallint cmd_error;
384 417
385 // former statics 418 // former statics
@@ -507,6 +540,8 @@ struct globals {
507#define dotcnt (G.dotcnt ) 540#define dotcnt (G.dotcnt )
508#define last_search_pattern (G.last_search_pattern) 541#define last_search_pattern (G.last_search_pattern)
509#define indentcol (G.indentcol ) 542#define indentcol (G.indentcol )
543#define fileformat (G.fileformat )
544#define fileformats (G.fileformats )
510#define cmd_error (G.cmd_error ) 545#define cmd_error (G.cmd_error )
511 546
512#define edit_file__cur_line (G.edit_file__cur_line) 547#define edit_file__cur_line (G.edit_file__cur_line)
@@ -2066,6 +2101,10 @@ static int file_insert(const char *fn, char *p, int initial)
2066 undo_push_insert(p, size, ALLOW_UNDO); 2101 undo_push_insert(p, size, ALLOW_UNDO);
2067 } 2102 }
2068# endif 2103# endif
2104#if ENABLE_FEATURE_VI_FILE_FORMAT
2105 if (initial && cnt > 0)
2106 fileformat = cnt == size ? FF_UNIX_DOS : FF_DOS_UNIX;
2107#endif
2069 fi: 2108 fi:
2070 close(fd); 2109 close(fd);
2071 2110
@@ -2342,6 +2381,9 @@ static int init_text_buffer(char *fn)
2342 free(text); 2381 free(text);
2343 text_size = 10240; 2382 text_size = 10240;
2344 screenbegin = dot = end = text = xzalloc(text_size); 2383 screenbegin = dot = end = text = xzalloc(text_size);
2384#if ENABLE_FEATURE_VI_FILE_FORMAT
2385 fileformat = fileformats;
2386#endif
2345 2387
2346 update_filename(fn); 2388 update_filename(fn);
2347 rc = file_insert(fn, text, 1); 2389 rc = file_insert(fn, text, 1);
@@ -2387,6 +2429,13 @@ static uintptr_t string_insert(char *p, const char *s, int undo) // insert the s
2387static int file_write(char *fn, char *first, char *last) 2429static int file_write(char *fn, char *first, char *last)
2388{ 2430{
2389 int fd, cnt, charcnt; 2431 int fd, cnt, charcnt;
2432#if ENABLE_PLATFORM_MINGW32
2433# if ENABLE_FEATURE_VI_FILE_FORMAT
2434# define dos (fileformat == FF_DOS_UNIX)
2435# else
2436# define dos (1)
2437# endif
2438#endif
2390 2439
2391 if (fn == 0) { 2440 if (fn == 0) {
2392 status_line_bold("No current filename"); 2441 status_line_bold("No current filename");
@@ -2398,7 +2447,7 @@ static int file_write(char *fn, char *first, char *last)
2398#if !ENABLE_PLATFORM_MINGW32 2447#if !ENABLE_PLATFORM_MINGW32
2399 fd = open(fn, (O_WRONLY | O_CREAT), 0666); 2448 fd = open(fn, (O_WRONLY | O_CREAT), 0666);
2400#else 2449#else
2401 fd = open(fn, (O_WRONLY | O_CREAT | _O_TEXT), 0666); 2450 fd = open(fn, (O_WRONLY | O_CREAT | (dos ? _O_TEXT : 0)), 0666);
2402#endif 2451#endif
2403 if (fd < 0) 2452 if (fd < 0)
2404 return -1; 2453 return -1;
@@ -2407,9 +2456,9 @@ static int file_write(char *fn, char *first, char *last)
2407#if !ENABLE_PLATFORM_MINGW32 2456#if !ENABLE_PLATFORM_MINGW32
2408 ftruncate(fd, charcnt); 2457 ftruncate(fd, charcnt);
2409#else 2458#else
2410 // File was written in text mode; this makes it bigger so adjust 2459 // If file was written in text mode it will be bigger so adjust
2411 // the truncation to match. 2460 // the truncation to match.
2412 ftruncate(fd, charcnt + count_cr(first, cnt)); 2461 ftruncate(fd, charcnt + (dos ? count_cr(first, cnt) : 0));
2413#endif 2462#endif
2414 if (charcnt == cnt) { 2463 if (charcnt == cnt) {
2415 // good write 2464 // good write
@@ -2699,6 +2748,7 @@ static void setops(char *args, int flg_no)
2699 2748
2700 index = 1 << (index >> 1); // convert to VI_bit 2749 index = 1 << (index >> 1); // convert to VI_bit
2701 2750
2751#if !ENABLE_FEATURE_VI_FILE_FORMAT
2702 if (index & VI_TABSTOP) { 2752 if (index & VI_TABSTOP) {
2703 int t; 2753 int t;
2704 if (!eq || flg_no) // no "=NNN" or it is "notabstop"? 2754 if (!eq || flg_no) // no "=NNN" or it is "notabstop"?
@@ -2709,6 +2759,27 @@ static void setops(char *args, int flg_no)
2709 tabstop = t; 2759 tabstop = t;
2710 return; 2760 return;
2711 } 2761 }
2762#else
2763 if (index & VI_FILEFORMAT)
2764 goto bad;
2765 if (index & (VI_TABSTOP | VI_FILEFORMATS)) {
2766 if (!eq || flg_no) // no "=NNN" or it is "notabstop"?
2767 goto bad;
2768 if (index & VI_TABSTOP) {
2769 int t = bb_strtou(eq + 1, NULL, 10);
2770 if (t <= 0 || t > MAX_TABSTOP)
2771 goto bad;
2772 tabstop = t;
2773 return;
2774 } else { // VI_FILEFORMATS
2775 int t = index_in_strings(FORMATS_STR, eq + 1);
2776 if (t < 0)
2777 goto bad;
2778 fileformats = t;
2779 return;
2780 }
2781 }
2782#endif
2712 if (eq) goto bad; // boolean option has "="? 2783 if (eq) goto bad; // boolean option has "="?
2713 if (flg_no) { 2784 if (flg_no) {
2714 vi_setops &= ~index; 2785 vi_setops &= ~index;
@@ -3205,6 +3276,7 @@ static void colon(char *buf)
3205 if (!args[0] || strcmp(args, "all") == 0) { 3276 if (!args[0] || strcmp(args, "all") == 0) {
3206 // print out values of all options 3277 // print out values of all options
3207# if ENABLE_FEATURE_VI_SETOPTS 3278# if ENABLE_FEATURE_VI_SETOPTS
3279# if !ENABLE_FEATURE_VI_FILE_FORMAT
3208 status_line_bold( 3280 status_line_bold(
3209 "%sautoindent " 3281 "%sautoindent "
3210 "%sexpandtab " 3282 "%sexpandtab "
@@ -3219,6 +3291,28 @@ static void colon(char *buf)
3219 showmatch ? "" : "no", 3291 showmatch ? "" : "no",
3220 tabstop 3292 tabstop
3221 ); 3293 );
3294# else // ENABLE_FEATURE_VI_FILE_FORMAT
3295 unsigned int mask = 1, j = 0;
3296 go_bottom_and_clear_to_eol();
3297 for (;;) {
3298 const char *name = nth_string(OPTS_STR, 2 * j + 1);
3299 if (!name[0])
3300 break;
3301 if (mask == VI_FILEFORMAT)
3302 printf("%s=%s ", name, nth_string("dos\0unix\0", fileformat));
3303 else if (mask == VI_FILEFORMATS)
3304 printf("%s=%s ", name, nth_string(FORMATS_STR, fileformats));
3305 else if (mask == VI_TABSTOP)
3306 printf("%s=%u ", name, tabstop);
3307 else
3308 printf("%s%s ", vi_setops & mask ? "" : "no", name);
3309 if (j++ == 4)
3310 bb_putchar('\n');
3311 mask <<= 1;
3312 }
3313 bb_putchar('\n');
3314 Hit_Return();
3315# endif
3222# endif 3316# endif
3223 goto ret; 3317 goto ret;
3224 } 3318 }