diff options
-rw-r--r-- | editors/vi.c | 89 |
1 files changed, 2 insertions, 87 deletions
diff --git a/editors/vi.c b/editors/vi.c index df37affac..3937675b1 100644 --- a/editors/vi.c +++ b/editors/vi.c | |||
@@ -7,14 +7,6 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* | 9 | /* |
10 | * To compile for standalone use: | ||
11 | * gcc -Wall -Os -s -DSTANDALONE -o vi vi.c | ||
12 | * or | ||
13 | * gcc -Wall -Os -s -DSTANDALONE -DCONFIG_FEATURE_VI_CRASHME -o vi vi.c # include testing features | ||
14 | * strip vi | ||
15 | */ | ||
16 | |||
17 | /* | ||
18 | * Things To Do: | 10 | * Things To Do: |
19 | * EXINIT | 11 | * EXINIT |
20 | * $HOME/.exrc and ./.exrc | 12 | * $HOME/.exrc and ./.exrc |
@@ -30,50 +22,20 @@ | |||
30 | * An "ex" line oriented mode- maybe using "cmdedit" | 22 | * An "ex" line oriented mode- maybe using "cmdedit" |
31 | */ | 23 | */ |
32 | 24 | ||
33 | //---- Feature -------------- Bytes to implement | 25 | |
34 | #ifdef STANDALONE | 26 | #include "busybox.h" |
35 | #define vi_main main | ||
36 | #define CONFIG_FEATURE_VI_COLON // 4288 | ||
37 | #define CONFIG_FEATURE_VI_YANKMARK // 1408 | ||
38 | #define CONFIG_FEATURE_VI_SEARCH // 1088 | ||
39 | #define CONFIG_FEATURE_VI_USE_SIGNALS // 1056 | ||
40 | #define CONFIG_FEATURE_VI_DOT_CMD // 576 | ||
41 | #define CONFIG_FEATURE_VI_READONLY // 128 | ||
42 | #define CONFIG_FEATURE_VI_SETOPTS // 576 | ||
43 | #define CONFIG_FEATURE_VI_SET // 224 | ||
44 | #define CONFIG_FEATURE_VI_WIN_RESIZE // 256 WIN_RESIZE | ||
45 | // To test editor using CRASHME: | ||
46 | // vi -C filename | ||
47 | // To stop testing, wait until all to text[] is deleted, or | ||
48 | // Ctrl-Z and kill -9 %1 | ||
49 | // while in the editor Ctrl-T will toggle the crashme function on and off. | ||
50 | //#define CONFIG_FEATURE_VI_CRASHME // randomly pick commands to execute | ||
51 | #endif /* STANDALONE */ | ||
52 | |||
53 | #include <stdio.h> | ||
54 | #include <stdlib.h> | ||
55 | #include <string.h> | 27 | #include <string.h> |
56 | #include <strings.h> | 28 | #include <strings.h> |
57 | #include <termios.h> | ||
58 | #include <unistd.h> | 29 | #include <unistd.h> |
59 | #include <sys/ioctl.h> | 30 | #include <sys/ioctl.h> |
60 | #include <sys/types.h> | ||
61 | #include <sys/stat.h> | ||
62 | #include <time.h> | 31 | #include <time.h> |
63 | #include <fcntl.h> | 32 | #include <fcntl.h> |
64 | #include <signal.h> | 33 | #include <signal.h> |
65 | #include <setjmp.h> | 34 | #include <setjmp.h> |
66 | #include <regex.h> | 35 | #include <regex.h> |
67 | #include <ctype.h> | 36 | #include <ctype.h> |
68 | #include <assert.h> | ||
69 | #include <errno.h> | 37 | #include <errno.h> |
70 | #include <stdarg.h> | ||
71 | #ifndef STANDALONE | ||
72 | #include "busybox.h" | ||
73 | #define vi_Version BB_VER " " BB_BT | 38 | #define vi_Version BB_VER " " BB_BT |
74 | #else | ||
75 | #define vi_Version "standalone" | ||
76 | #endif /* STANDALONE */ | ||
77 | 39 | ||
78 | #ifdef CONFIG_LOCALE_SUPPORT | 40 | #ifdef CONFIG_LOCALE_SUPPORT |
79 | #define Isprint(c) isprint((c)) | 41 | #define Isprint(c) isprint((c)) |
@@ -81,10 +43,6 @@ | |||
81 | #define Isprint(c) ( (c) >= ' ' && (c) != 127 && (c) != ((unsigned char)'\233') ) | 43 | #define Isprint(c) ( (c) >= ' ' && (c) != 127 && (c) != ((unsigned char)'\233') ) |
82 | #endif | 44 | #endif |
83 | 45 | ||
84 | #ifndef TRUE | ||
85 | #define TRUE ((int)1) | ||
86 | #define FALSE ((int)0) | ||
87 | #endif /* TRUE */ | ||
88 | #define MAX_SCR_COLS BUFSIZ | 46 | #define MAX_SCR_COLS BUFSIZ |
89 | 47 | ||
90 | // Misc. non-Ascii keys that report an escape sequence | 48 | // Misc. non-Ascii keys that report an escape sequence |
@@ -288,7 +246,6 @@ static void colon(Byte *); // execute the "colon" mode cmds | |||
288 | static void winch_sig(int); // catch window size changes | 246 | static void winch_sig(int); // catch window size changes |
289 | static void suspend_sig(int); // catch ctrl-Z | 247 | static void suspend_sig(int); // catch ctrl-Z |
290 | static void catch_sig(int); // catch ctrl-C and alarm time-outs | 248 | static void catch_sig(int); // catch ctrl-C and alarm time-outs |
291 | static void core_sig(int); // catch a core dump signal | ||
292 | #endif /* CONFIG_FEATURE_VI_USE_SIGNALS */ | 249 | #endif /* CONFIG_FEATURE_VI_USE_SIGNALS */ |
293 | #ifdef CONFIG_FEATURE_VI_DOT_CMD | 250 | #ifdef CONFIG_FEATURE_VI_DOT_CMD |
294 | static void start_new_cmd_q(Byte); // new queue for command | 251 | static void start_new_cmd_q(Byte); // new queue for command |
@@ -461,29 +418,10 @@ static void edit_file(Byte * fn) | |||
461 | 418 | ||
462 | #ifdef CONFIG_FEATURE_VI_USE_SIGNALS | 419 | #ifdef CONFIG_FEATURE_VI_USE_SIGNALS |
463 | catch_sig(0); | 420 | catch_sig(0); |
464 | core_sig(0); | ||
465 | signal(SIGWINCH, winch_sig); | 421 | signal(SIGWINCH, winch_sig); |
466 | signal(SIGTSTP, suspend_sig); | 422 | signal(SIGTSTP, suspend_sig); |
467 | sig = setjmp(restart); | 423 | sig = setjmp(restart); |
468 | if (sig != 0) { | 424 | if (sig != 0) { |
469 | const char *msg = ""; | ||
470 | |||
471 | if (sig == SIGWINCH) | ||
472 | msg = "(window resize)"; | ||
473 | if (sig == SIGHUP) | ||
474 | msg = "(hangup)"; | ||
475 | if (sig == SIGINT) | ||
476 | msg = "(interrupt)"; | ||
477 | if (sig == SIGTERM) | ||
478 | msg = "(terminate)"; | ||
479 | if (sig == SIGBUS) | ||
480 | msg = "(bus error)"; | ||
481 | if (sig == SIGSEGV) | ||
482 | msg = "(I tried to touch invalid memory)"; | ||
483 | if (sig == SIGALRM) | ||
484 | msg = "(alarm)"; | ||
485 | |||
486 | psbs("-- caught signal %d %s--", sig, msg); | ||
487 | screenbegin = dot = text; | 425 | screenbegin = dot = text; |
488 | } | 426 | } |
489 | #endif /* CONFIG_FEATURE_VI_USE_SIGNALS */ | 427 | #endif /* CONFIG_FEATURE_VI_USE_SIGNALS */ |
@@ -2165,33 +2103,10 @@ static void suspend_sig(int sig ATTRIBUTE_UNUSED) | |||
2165 | //----- Come here when we get a signal --------------------------- | 2103 | //----- Come here when we get a signal --------------------------- |
2166 | static void catch_sig(int sig) | 2104 | static void catch_sig(int sig) |
2167 | { | 2105 | { |
2168 | signal(SIGHUP, catch_sig); | ||
2169 | signal(SIGINT, catch_sig); | 2106 | signal(SIGINT, catch_sig); |
2170 | signal(SIGTERM, catch_sig); | ||
2171 | signal(SIGALRM, catch_sig); | ||
2172 | if(sig) | 2107 | if(sig) |
2173 | longjmp(restart, sig); | 2108 | longjmp(restart, sig); |
2174 | } | 2109 | } |
2175 | |||
2176 | //----- Come here when we get a core dump signal ----------------- | ||
2177 | static void core_sig(int sig) | ||
2178 | { | ||
2179 | signal(SIGQUIT, core_sig); | ||
2180 | signal(SIGILL, core_sig); | ||
2181 | signal(SIGTRAP, core_sig); | ||
2182 | signal(SIGABRT, core_sig); | ||
2183 | signal(SIGFPE, core_sig); | ||
2184 | signal(SIGBUS, core_sig); | ||
2185 | signal(SIGSEGV, core_sig); | ||
2186 | #ifdef SIGSYS | ||
2187 | signal(SIGSYS, core_sig); | ||
2188 | #endif | ||
2189 | |||
2190 | if(sig) { // signaled | ||
2191 | dot = bound_dot(dot); // make sure "dot" is valid | ||
2192 | longjmp(restart, sig); | ||
2193 | } | ||
2194 | } | ||
2195 | #endif /* CONFIG_FEATURE_VI_USE_SIGNALS */ | 2110 | #endif /* CONFIG_FEATURE_VI_USE_SIGNALS */ |
2196 | 2111 | ||
2197 | static int mysleep(int hund) // sleep for 'h' 1/100 seconds | 2112 | static int mysleep(int hund) // sleep for 'h' 1/100 seconds |