aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-06-25 00:57:57 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-06-25 00:57:57 +0200
commit51fa147c9bab41cc1f7bf5b2e3bbeddf0fdaf5ca (patch)
tree20caa3f26c0a3858b36a345a33ad7865a399ec73
parenteff6d593437afa91f7fb7c418e13dfb2ddb6886b (diff)
downloadbusybox-w32-51fa147c9bab41cc1f7bf5b2e3bbeddf0fdaf5ca.tar.gz
busybox-w32-51fa147c9bab41cc1f7bf5b2e3bbeddf0fdaf5ca.tar.bz2
busybox-w32-51fa147c9bab41cc1f7bf5b2e3bbeddf0fdaf5ca.zip
conspy: code shrink
function old new delta conspy_main 1385 1380 -5 screen_dump 215 202 -13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--miscutils/conspy.c49
1 files changed, 28 insertions, 21 deletions
diff --git a/miscutils/conspy.c b/miscutils/conspy.c
index b443c9133..b5adce930 100644
--- a/miscutils/conspy.c
+++ b/miscutils/conspy.c
@@ -9,9 +9,9 @@
9 * 9 *
10 * Licensed under GPLv2 or later, see file License in this tarball for details. 10 * Licensed under GPLv2 or later, see file License in this tarball for details.
11 * 11 *
12 * example : conspy num shared access to console num 12 * example: conspy num shared access to console num
13 * or conspy -d num screenshot of console num 13 * or conspy -d num screenshot of console num
14 * or conspy -cs num poor man's GNU screen like 14 * or conspy -cs num poor man's GNU screen like
15 */ 15 */
16 16
17//applet:IF_CONSPY(APPLET(conspy, _BB_DIR_BIN, _BB_SUID_DROP)) 17//applet:IF_CONSPY(APPLET(conspy, _BB_DIR_BIN, _BB_SUID_DROP))
@@ -28,7 +28,7 @@
28//config: or conspy -cs num poor man's GNU screen like 28//config: or conspy -cs num poor man's GNU screen like
29 29
30//usage:#define conspy_trivial_usage 30//usage:#define conspy_trivial_usage
31//usage: "[-vcsndf] [-x ROW] [-y LINE] [CONSOLE_NO]" 31//usage: "[-vcsndf] [-x ROW] [-y LINE] [CONSOLE_NO]"
32//usage:#define conspy_full_usage "\n\n" 32//usage:#define conspy_full_usage "\n\n"
33//usage: "A text-mode VNC like program for Linux virtual consoles." 33//usage: "A text-mode VNC like program for Linux virtual consoles."
34//usage: "\nTo exit, quickly press ESC 3 times." 34//usage: "\nTo exit, quickly press ESC 3 times."
@@ -50,10 +50,10 @@ struct screen_info {
50 unsigned char lines, rows, cursor_x, cursor_y; 50 unsigned char lines, rows, cursor_x, cursor_y;
51}; 51};
52 52
53#define CHAR(x) ((x)[0]) 53#define CHAR(x) ((uint8_t)((x)[0]))
54#define ATTR(x) ((x)[1]) 54#define ATTR(x) ((uint8_t)((x)[1]))
55#define NEXT(x) ((x)+=2) 55#define NEXT(x) ((x)+=2)
56#define DATA(x) (* (short *) (x)) 56#define DATA(x) (*(uint16_t*)(x))
57 57
58struct globals { 58struct globals {
59 char* data; 59 char* data;
@@ -102,7 +102,7 @@ static void screen_read_close(void)
102 unsigned y = i - G.y; // if will catch i < G.y too 102 unsigned y = i - G.y; // if will catch i < G.y too
103 103
104 if (CHAR(data) < ' ') 104 if (CHAR(data) < ' ')
105 CHAR(data) = ' '; 105 *data = ' '; // CHAR(data) = ' ';
106 if (y >= G.height || x >= G.width) 106 if (y >= G.height || x >= G.width)
107 DATA(data) = 0; 107 DATA(data) = 0;
108 } 108 }
@@ -151,8 +151,15 @@ static void screen_char(char *data)
151 putchar(CHAR(data)); 151 putchar(CHAR(data));
152} 152}
153 153
154#define clrscr() printf("\033[1;1H" "\033[0J") 154static void clrscr(void)
155#define curoff() printf("\033[?25l") 155{
156 printf("\033[1;1H" "\033[0J");
157}
158
159static void curoff(void)
160{
161 printf("\033[?25l");
162}
156 163
157static void curon(void) 164static void curon(void)
158{ 165{
@@ -180,10 +187,10 @@ static void screen_dump(void)
180 if (tty_row >= G.width) 187 if (tty_row >= G.width)
181 continue; 188 continue;
182 space_cnt++; 189 space_cnt++;
183 if (BW && (CHAR(data) | ' ') == ' ') 190 if (BW && CHAR(data) == ' ')
184 continue; 191 continue;
185 while (linefeed_cnt != 0) { 192 while (linefeed_cnt != 0) {
186 bb_putchar('\r'); 193 //bb_putchar('\r'); - tty driver does it for us
187 bb_putchar('\n'); 194 bb_putchar('\n');
188 linefeed_cnt--; 195 linefeed_cnt--;
189 } 196 }
@@ -229,12 +236,11 @@ static void cleanup(int code)
229 236
230static void get_initial_data(const char* vcsa_name) 237static void get_initial_data(const char* vcsa_name)
231{ 238{
232 int size;
233 G.vcsa_fd = xopen(vcsa_name, O_RDONLY); 239 G.vcsa_fd = xopen(vcsa_name, O_RDONLY);
234 xread(G.vcsa_fd, &G.info, 4); 240 xread(G.vcsa_fd, &G.info, 4);
235 G.size = size = G.info.rows * G.info.lines * 2; 241 G.size = G.info.rows * G.info.lines * 2;
236 G.width = G.height = UINT_MAX; 242 G.width = G.height = UINT_MAX;
237 G.data = xzalloc(2 * size); 243 G.data = xzalloc(2 * G.size);
238 screen_read_close(); 244 screen_read_close();
239} 245}
240 246
@@ -280,11 +286,11 @@ static NOINLINE void start_shell_in_child(const char* tty_name)
280 } 286 }
281} 287}
282 288
283int conspy_main(int argc UNUSED_PARAM, char **argv) MAIN_EXTERNALLY_VISIBLE; 289int conspy_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
284int conspy_main(int argc UNUSED_PARAM, char **argv) 290int conspy_main(int argc UNUSED_PARAM, char **argv)
285{ 291{
286 char vcsa_name[sizeof("/dev/vcsa") + 2]; 292 char vcsa_name[sizeof("/dev/vcsaNN")];
287 char tty_name[sizeof("/dev/tty") + 2]; 293 char tty_name[sizeof("/dev/ttyNN")];
288#define keybuf bb_common_bufsiz1 294#define keybuf bb_common_bufsiz1
289 struct termios termbuf; 295 struct termios termbuf;
290 unsigned opts; 296 unsigned opts;
@@ -339,7 +345,7 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
339 tcgetattr(G.kbd_fd, &G.term_orig); 345 tcgetattr(G.kbd_fd, &G.term_orig);
340 termbuf = G.term_orig; 346 termbuf = G.term_orig;
341 termbuf.c_iflag &= ~(BRKINT|INLCR|ICRNL|IXON|IXOFF|IUCLC|IXANY|IMAXBEL); 347 termbuf.c_iflag &= ~(BRKINT|INLCR|ICRNL|IXON|IXOFF|IUCLC|IXANY|IMAXBEL);
342 termbuf.c_oflag &= ~(OPOST); 348 //termbuf.c_oflag &= ~(OPOST); - no, we still want \n -> \r\n
343 termbuf.c_lflag &= ~(ISIG|ICANON|ECHO); 349 termbuf.c_lflag &= ~(ISIG|ICANON|ECHO);
344 termbuf.c_cc[VMIN] = 1; 350 termbuf.c_cc[VMIN] = 1;
345 termbuf.c_cc[VTIME] = 0; 351 termbuf.c_cc[VTIME] = 0;
@@ -354,7 +360,7 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
354 old = G.data + G.current; 360 old = G.data + G.current;
355 G.current = G.size - G.current; 361 G.current = G.size - G.current;
356 data = G.data + G.current; 362 data = G.data + G.current;
357 363
358 // Close & re-open vcsa in case they have 364 // Close & re-open vcsa in case they have
359 // swapped virtual consoles 365 // swapped virtual consoles
360 G.vcsa_fd = xopen(vcsa_name, O_RDONLY); 366 G.vcsa_fd = xopen(vcsa_name, O_RDONLY);
@@ -448,7 +454,8 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
448 454
449 // Do exit processing 455 // Do exit processing
450 for (i = 0; i < bytes_read; i++) { 456 for (i = 0; i < bytes_read; i++) {
451 if (k[i] != '\033') G.escape_count = 0; 457 if (k[i] != '\033')
458 G.escape_count = 0;
452 else if (++G.escape_count >= 3) 459 else if (++G.escape_count >= 3)
453 cleanup(0); 460 cleanup(0);
454 } 461 }