diff --git a/ChangeLog b/ChangeLog index a794b9b..b5da674 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3711,3 +3711,9 @@ Mon Jun 26 09:50:37 PDT 2000 Michael Jennings . ------------------------------------------------------------------------------- +Mon Jun 26 16:54:04 PDT 2000 Michael Jennings + + Between myself and Marius Gedminas , I think we + licked that BCE issue that was talked about on the mutt-dev list. + +------------------------------------------------------------------------------- diff --git a/configure.in b/configure.in index 150b448..2219309 100644 --- a/configure.in +++ b/configure.in @@ -162,7 +162,7 @@ dnl# Utility stuff dnl# dnl# Did they want debugging? AC_MSG_CHECKING(for debugging level) -AC_ARG_WITH(debugging, [ --with-debugging[=num] enable debugging output, num is an optional level], +AC_ARG_WITH(debugging, [ --with-debugging[=num] enable debugging output, num is an integer 0-9], if test "$withval" = "yes"; then withval=4 else diff --git a/src/command.c b/src/command.c index 53be7fd..b08e081 100644 --- a/src/command.c +++ b/src/command.c @@ -955,6 +955,20 @@ request_code_to_name(int code) return "Unknown"; } +const char * +get_ctrl_char_name(char c) +{ + const char *lookup[] = + { + "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", /* 0-7 */ + "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI", /* 8-15 */ + "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", /* 16-23 */ + "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US" /* 24-31 */ + }; + + return ((c < ' ') ? (lookup[(int) c]) : ("")); +} + static void hard_exit(void) { @@ -2600,6 +2614,15 @@ main_loop(void) while (cmdbuf_ptr < cmdbuf_endp) { ch = *cmdbuf_ptr++; +#if DEBUG >= DEBUG_VT + if (debug_level >= DEBUG_VT) { + if (ch < 32) { + D_VT(("\'%s\' (%d 0x%02x %03o)\n", get_ctrl_char_name(ch), ch, ch, ch)); + } else { + D_VT(("\'%c\' (%d 0x%02x %03o)\n", ch, ch, ch, ch)); + } + } +#endif if (ch >= ' ' || ch == '\t' || ch == '\r') { /* nothing */ } else if (ch == '\n') { diff --git a/src/command.h b/src/command.h index d4d04a7..d02bfd9 100644 --- a/src/command.h +++ b/src/command.h @@ -268,7 +268,13 @@ if (test) PrivateModes |= (bit); else PrivateModes &= ~(bit);} while (0) #define CHARS_READ() (cmdbuf_ptr < cmdbuf_endp) #define CHARS_BUFFERED() (count != CMD_BUF_SIZE) -#define RETURN_CHAR() do { refreshed = 0; return (*cmdbuf_ptr++); } while (0) +#define RETURN_CHAR() do { \ + char c = *cmdbuf_ptr++; \ + refreshed = 0; \ + if (c < 32) D_VT(("RETURN_CHAR(): \'%s\' (%d 0x%02x %03o)\n", get_ctrl_char_name(c), c, c, c)); \ + else D_VT(("RETURN_CHAR(): \'%c\' (%d 0x%02x %03o)\n", c, c, c, c)); \ + return (c); \ + } while (0) #ifdef REFRESH_DELAY # define REFRESH_DELAY_USEC (1000000/25) @@ -341,6 +347,7 @@ extern void privileges(int); extern char *sig_to_str(int); extern const char *event_type_to_name(int); extern const char *request_code_to_name(int); +extern const char *get_ctrl_char_name(char); extern void dump_stack_trace(void); extern void install_handlers(void); extern void clean_exit(void); diff --git a/src/debug.h b/src/debug.h index 2f92d2d..46b8983 100644 --- a/src/debug.h +++ b/src/debug.h @@ -107,6 +107,10 @@ extern unsigned int debug_level; # define DPRINTF3(x) do { if (debug_level >= 3) {__DEBUG(); real_dprintf x;} } while (0) # define DPRINTF4(x) do { if (debug_level >= 4) {__DEBUG(); real_dprintf x;} } while (0) # define DPRINTF5(x) do { if (debug_level >= 5) {__DEBUG(); real_dprintf x;} } while (0) +# define DPRINTF6(x) do { if (debug_level >= 6) {__DEBUG(); real_dprintf x;} } while (0) +# define DPRINTF7(x) do { if (debug_level >= 7) {__DEBUG(); real_dprintf x;} } while (0) +# define DPRINTF8(x) do { if (debug_level >= 8) {__DEBUG(); real_dprintf x;} } while (0) +# define DPRINTF9(x) do { if (debug_level >= 9) {__DEBUG(); real_dprintf x;} } while (0) # else # ifndef DPRINTF # define DPRINTF(x) NOP @@ -116,6 +120,10 @@ extern unsigned int debug_level; # define DPRINTF3(x) NOP # define DPRINTF4(x) NOP # define DPRINTF5(x) NOP +# define DPRINTF6(x) NOP +# define DPRINTF7(x) NOP +# define DPRINTF8(x) NOP +# define DPRINTF9(x) NOP # endif /* Use this for stuff that you only want turned on in dire situations */ @@ -171,7 +179,10 @@ extern unsigned int debug_level; # define DEBUG_PROFILE 4 # define D_PROFILE(x) DPRINTF4(x) -# define DEBUG_X 5 +# define DEBUG_VT 5 +# define D_VT(x) DPRINTF5(x) + +# define DEBUG_X 9 # define DEBUG_PARSE 9999 # define D_PARSE(x) D_NEVER(x) diff --git a/src/screen.c b/src/screen.c index f5f90fd..5af7b01 100644 --- a/src/screen.c +++ b/src/screen.c @@ -768,7 +768,7 @@ scr_add_lines(const unsigned char *str, int nlines, int len) if (screen.row == screen.bscroll) { scroll_text(screen.tscroll, screen.bscroll, 1, 0); j = screen.bscroll + TermWin.saveLines; - blank_screen_mem(screen.text, screen.rend, j, DEFAULT_RSTYLE | ((rstyle & RS_RVid) ? (RS_RVid) : (0))); + blank_screen_mem(screen.text, screen.rend, j, rstyle & ~RS_Uline); } else if (screen.row < (TermWin.nrow - 1)) { screen.row++; row = screen.row + TermWin.saveLines; @@ -797,7 +797,7 @@ scr_add_lines(const unsigned char *str, int nlines, int len) j = screen.bscroll + TermWin.saveLines; /* blank_line(screen.text[j], screen.rend[j], TermWin.ncol, rstyle); Bug fix from John Ellison - need to reset rstyle */ - blank_screen_mem(screen.text, screen.rend, j, DEFAULT_RSTYLE | ((rstyle & RS_RVid) ? (RS_RVid) : (0))); + blank_screen_mem(screen.text, screen.rend, j, rstyle & ~RS_Uline); } else if (screen.row < (TermWin.nrow - 1)) { screen.row++; row = screen.row + TermWin.saveLines; @@ -985,26 +985,29 @@ scr_erase_line(int mode) screen.flags &= ~Screen_WrapNext; row = TermWin.saveLines + screen.row; - switch (mode) { - case 0: /* erase to end of line */ - col = screen.col; - num = TermWin.ncol - col; - MIN_IT(screen.text[row][TermWin.ncol], col); - break; - case 1: /* erase to beginning of line */ - col = 0; - num = screen.col + 1; - break; - case 2: /* erase whole line */ - col = 0; - num = TermWin.ncol; - screen.text[row][TermWin.ncol] = 0; - break; - default: - return; + if (screen.text[row]) { + switch (mode) { + case 0: /* erase to end of line */ + col = screen.col; + num = TermWin.ncol - col; + MIN_IT(screen.text[row][TermWin.ncol], col); + break; + case 1: /* erase to beginning of line */ + col = 0; + num = screen.col + 1; + break; + case 2: /* erase whole line */ + col = 0; + num = TermWin.ncol; + screen.text[row][TermWin.ncol] = 0; + break; + default: + return; + } + blank_line(&(screen.text[row][col]), &(screen.rend[row][col]), num, rstyle & ~RS_Uline); + } else { + blank_screen_mem(screen.text, screen.rend, row, rstyle & ~RS_Uline); } - blank_line(&(screen.text[row][col]), &(screen.rend[row][col]), num, - rstyle & ~(RS_RVid | RS_Uline)); } /*