Hello, Another shrink (106 bytes).
-pascal > commit: > http://git.busybox.net/busybox/commit/?id=ff37799dfe0e6e8fb9b971a2aeb4076d8a3784ec > branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master > > function old new delta > conspy_main 1446 1444 -2 > screen_read_close 114 108 -6 > screen_char 299 293 -6 > > Signed-off-by: Pascal Bellard <[email protected]> > Signed-off-by: Denys Vlasenko <[email protected]> > --- > include/usage.src.h | 10 ---- > init/bootchartd.c | 31 ++++++------- > miscutils/conspy.c | 123 > ++++++++++++++++++++++++++------------------------- > 3 files changed, 78 insertions(+), 86 deletions(-) > > diff --git a/include/usage.src.h b/include/usage.src.h > index 6d17ab5..53ee794 100644 > --- a/include/usage.src.h > +++ b/include/usage.src.h > @@ -163,16 +163,6 @@ INSERT > #define blkid_full_usage "\n\n" \ > "Print UUIDs of all filesystems" > > -#define bootchartd_trivial_usage \ > - "start [PROG ARGS]|stop|init" > -#define bootchartd_full_usage "\n\n" \ > - "Create /var/log/bootchart.tgz with boot chart data\n" \ > - "\nOptions:" \ > - "\nstart: start background logging; with PROG, run PROG, then kill > logging with USR1" \ > - "\nstop: send USR1 to all bootchartd processes" \ > - "\ninit: start background logging; stop when getty/xdm is seen (for > init scripts)" \ > - "\nUnder PID 1: as init, then exec $bootchart_init, /init, > /sbin/init" \ > - > #define brctl_trivial_usage \ > "COMMAND [BRIDGE [INTERFACE]]" > #define brctl_full_usage "\n\n" \ > diff --git a/init/bootchartd.c b/init/bootchartd.c > index f7de13e..4e15da4 100644 > --- a/init/bootchartd.c > +++ b/init/bootchartd.c > @@ -156,7 +156,7 @@ static int dump_procs(FILE *fp, int > look_for_login_process) > continue; > p++; > strchrnul(p, ')')[0] = '\0'; > - /* If is gdm, kdm or a getty? */ > + /* Is it gdm, kdm or a getty? */ > if (((p[0] == 'g' || p[0] == 'k' || p[0] == 'x') && > p[1] == 'd' && > p[2] == 'm') > || strstr(p, "getty") > ) { > @@ -258,13 +258,12 @@ static void finalize(char *tempdir, const char > *prog) > fprintf(header_fp, "profile.process = %s\n", prog); > > fputs("version = "BC_VERSION_STR"\n", header_fp); > - > if (ENABLE_FEATURE_BOOTCHARTD_BLOATED_HEADER) { > char *hostname; > char *kcmdline; > time_t t; > struct tm tm_time; > - /* x2 for possible localized data */ > + /* x2 for possible localized weekday/month names */ > char date_buf[sizeof("Mon Jun 21 05:29:03 CEST 2010") * 2]; > struct utsname unamebuf; > > @@ -313,16 +312,16 @@ static void finalize(char *tempdir, const char > *prog) > */ > } > > -/* Usage: > - * bootchartd start [PROG ARGS]: start logging in background, USR1 stops > it. > - * With PROG, runs PROG, then kills background logging. > - * bootchartd stop: same as "killall -USR1 bootchartd" > - * bootchartd init: start logging in background > - * Stop when getty/gdm is seen (if AUTO_STOP_LOGGER = yes). > - * Meant to be used from init scripts. > - * bootchartd (pid==1): as init, but then execs $bootchart_init, /init, > /sbin/init > - * Meant to be used as kernel's init process. > - */ > +//usage:#define bootchartd_trivial_usage > +//usage: "start [PROG ARGS]|stop|init" > +//usage:#define bootchartd_full_usage "\n\n" > +//usage: "Create /var/log/bootchart.tgz with boot chart data\n" > +//usage: "\nOptions:" > +//usage: "\nstart: start background logging; with PROG, run PROG, > then kill logging with USR1" > +//usage: "\nstop: send USR1 to all bootchartd processes" > +//usage: "\ninit: start background logging; stop when getty/xdm is > seen (for init scripts)" > +//usage: "\nUnder PID 1: as init, then exec $bootchart_init, /init, > /sbin/init" > + > int bootchartd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; > int bootchartd_main(int argc UNUSED_PARAM, char **argv) > { > @@ -358,7 +357,7 @@ int bootchartd_main(int argc UNUSED_PARAM, char > **argv) > cmd = CMD_PID1; > } > > - /* Here we are in START or INIT state */ > + /* Here we are in START, INIT or CMD_PID1 state */ > > /* Read config file: */ > sample_period_us = 200 * 1000; > @@ -422,7 +421,7 @@ int bootchartd_main(int argc UNUSED_PARAM, char > **argv) > execl(bootchart_init, bootchart_init, NULL); > execl("/init", "init", NULL); > execl("/sbin/init", "init", NULL); > - bb_perror_msg_and_die("can't exec '%s'", "/sbin/init"); > + bb_perror_msg_and_die("can't execute '%s'", "/sbin/init"); > } > > if (cmd == CMD_START && argv[2]) { /* "start PROG ARGS" */ > @@ -432,7 +431,7 @@ int bootchartd_main(int argc UNUSED_PARAM, char > **argv) > if (pid == 0) { /* child */ > argv += 2; > execvp(argv[0], argv); > - bb_perror_msg_and_die("can't exec '%s'", argv[0]); > + bb_perror_msg_and_die("can't execute '%s'", argv[0]); > } > /* parent */ > waitpid(pid, NULL, 0); > diff --git a/miscutils/conspy.c b/miscutils/conspy.c > index 11105f0..6f2f025 100644 > --- a/miscutils/conspy.c > +++ b/miscutils/conspy.c > @@ -56,31 +56,33 @@ struct globals { > int size; > int x, y; > int kbd_fd; > - unsigned width; > - unsigned height; > - unsigned col; > - unsigned line; > + int vcsa_fd; > int ioerror_count; > int key_count; > int escape_count; > int nokeys; > int current; > - int vcsa_fd; > - uint16_t last_attr; > - uint8_t last_bold; > - uint8_t last_blink; > - uint8_t last_fg; > - uint8_t last_bg; > - char attrbuf[sizeof("\033[0;1;5;30;40m")]; > + // cached local tty parameters > + unsigned width; > + unsigned height; > + unsigned col; > + unsigned line; > smallint curoff; > + uint8_t last_attr; > + uint8_t force_attr_change; > + char attrbuf[sizeof("\033[0;1;5;30;40m")]; > + // remote console > struct screen_info remote; > + // saved local tty terminfo > struct termios term_orig; > }; > > #define G (*ptr_to_globals) > #define INIT_G() do { \ > SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ > - strcpy((char*)&G.last_attr, "\xff\xff\xff\xff\xff\xff" "\033["); \ > + G.attrbuf[0] = '\033'; \ > + G.attrbuf[1] = '['; \ > + G.force_attr_change = 0xff; \ > } while (0) > > enum { > @@ -100,7 +102,6 @@ static void screen_read_close(void) > char *data = G.data + G.current; > > xread(G.vcsa_fd, data, G.size); > - G.last_attr = 0; > for (i = 0; i < G.remote.lines; i++) { > for (j = 0; j < G.remote.cols; j++, NEXT(data)) { > unsigned x = j - G.x; // if will catch j < G.x too > @@ -117,9 +118,12 @@ static void screen_read_close(void) > > static void screen_char(char *data) > { > - uint8_t attr = ATTR(data); > + if (!BW) { > + uint8_t attr = ATTR(data); > + //uint8_t attr = ATTR(data) >> 1; // for framebuffer console > + uint8_t attr_diff = (G.last_attr ^ attr) | G.force_attr_change; > > - if (!BW && G.last_attr != attr) { > + if (attr_diff) { > // Attribute layout for VGA compatible text videobuffer: > // blinking text > // |red bkgd > @@ -143,51 +147,49 @@ static void screen_char(char *data) > // green text > // blue text > // text 8th bit > - // converting RGB color bit triad to BGR: > - static const char color[8] = "04261537"; > - char *ptr; > - uint8_t fg, bold, bg, blink; > - > - G.last_attr = attr; > - > - //attr >>= 1; // for framebuffer console > - ptr = G.attrbuf + sizeof("\033[")-1; > - fg = (attr & 0x07); > - bold = (attr & 0x08); > - bg = (attr & 0x70); > - blink = (attr & 0x80); > - if (G.last_bold > bold || G.last_blink > blink) { > - G.last_bold = G.last_blink = 0; > - G.last_bg = 0xff; > - *ptr++ = '0'; > - *ptr++ = ';'; > - } > - if (G.last_bold != bold) { > - G.last_bold = bold; > - *ptr++ = '1'; > - *ptr++ = ';'; > - } > - if (G.last_blink != blink) { > - G.last_blink = blink; > - *ptr++ = '5'; > - *ptr++ = ';'; > - } > - if (G.last_fg != fg) { > - G.last_fg = fg; > - *ptr++ = '3'; > - *ptr++ = color[fg]; > - *ptr++ = ';'; > - } > - if (G.last_bg != bg) { > - G.last_bg = bg; > - *ptr++ = '4'; > - *ptr++ = color[bg >> 4]; > - *ptr++ = ';'; > - } > - if (ptr != G.attrbuf + sizeof("\033[")-1) { > - ptr[-1] = 'm'; > - *ptr = '\0'; > - fputs(G.attrbuf, stdout); > + // converting RGB color bit triad to BGR: > + static const char color[8] = "04261537"; > + const uint8_t fg_mask = 0x07, bold_mask = 0x08; > + const uint8_t bg_mask = 0x70, blink_mask = 0x80; > + char *ptr; > + > + ptr = G.attrbuf + 2; /* skip "ESC [" */ > + > + // (G.last_attr & ~attr) has 1 only where > + // G.last_attr has 1 but attr has 0. > + // Here we check whether we have transition > + // bold->non-bold or blink->non-blink: > + if ((G.last_attr & ~attr) & (bold_mask | blink_mask)) { > + *ptr++ = '0'; // "reset all attrs" > + *ptr++ = ';'; > + // must set fg & bg, maybe need to set bold or > blink: > + attr_diff = attr | ~(bold_mask | blink_mask); > + } > + G.force_attr_change = 0; > + G.last_attr = attr; > + if (attr_diff & bold_mask) { > + *ptr++ = '1'; > + *ptr++ = ';'; > + } > + if (attr_diff & blink_mask) { > + *ptr++ = '5'; > + *ptr++ = ';'; > + } > + if (attr_diff & fg_mask) { > + *ptr++ = '3'; > + *ptr++ = color[attr & fg_mask]; > + *ptr++ = ';'; > + } > + if (attr_diff & bg_mask) { > + *ptr++ = '4'; > + *ptr++ = color[(attr & bg_mask) >> 4]; > + *ptr++ = ';'; > + } > + if (ptr != G.attrbuf + 2) { > + ptr[-1] = 'm'; > + *ptr = '\0'; > + fputs(G.attrbuf, stdout); > + } > } > } > putchar(CHAR(data)); > @@ -402,6 +404,7 @@ int conspy_main(int argc UNUSED_PARAM, char **argv) > termbuf.c_cc[VMIN] = 1; > termbuf.c_cc[VTIME] = 0; > tcsetattr(G.kbd_fd, TCSANOW, &termbuf); > + > poll_timeout_ms = 250; > while (1) { > struct pollfd pfd; > -- > 1.7.1 > > _______________________________________________ > busybox-cvs mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox-cvs >
conspy.u
Description: Binary data
_______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
