/* * Output character. Buffer whitespace. */ void db_putchar(char c) { if (db_max_line >= DB_MIN_MAX_LINE && db_output_line >= db_max_line-1) db_more(); if (c > ' ' && c <= '~') { /* * Printing character. * If we have spaces to print, print them first. * Use tabs if possible. */ db_force_whitespace(); cnputc(c); db_last_gen_return = 0; db_advance_output_position(db_output_position+1, 0); db_last_non_space = db_output_position; } else if (c == '\n') { /* Return */ if (db_last_gen_return) { db_last_gen_return = 0; } else { cnputc(c); db_output_position = 0; db_last_non_space = 0; db_output_line++; db_check_interrupt(); } } else if (c == '\t') { /* assume tabs every 8 positions */ db_advance_output_position(NEXT_TAB(db_output_position), 1); } else if (c == ' ') { /* space */ db_advance_output_position(db_output_position+1, 1); } else if (c == '\007') { /* bell */ cnputc(c); } /* other characters are assumed non-printing */ }
/* * Output character. Buffer whitespace. * * Parameters: * arg: character to output */ static void db_putchar(int c, void *arg) { /* * If not in the debugger, output data to both the console and * the message buffer. */ if (!db_active) { if (c == '\r' || c == '\n' || c == '\t' || isprint(c)) { kprintf("%c", c); } else { kprintf("?"); } if (!db_active) return; if (c == '\r' || c == '\n') db_check_interrupt(); return; } crit_enter_hard(); if (c > ' ' && c <= '~') { /* * Printing character. * If we have spaces to print, print them first. * Use tabs if possible. */ db_force_whitespace(); cnputc(c); db_output_position++; db_last_non_space = db_output_position; } else if (c == '\n') { /* Newline */ cnputc(c); db_output_position = 0; db_last_non_space = 0; db_check_interrupt(); } else if (c == '\r') { /* Return */ cnputc(c); db_output_position = 0; db_last_non_space = 0; db_check_interrupt(); } else if (c == '\t') { /* assume tabs every 8 positions */ db_output_position = NEXT_TAB(db_output_position); } else if (c == ' ') { /* space */ db_output_position++; } else if (c == '\007') { /* bell */ cnputc(c); } /* other characters are assumed non-printing */ crit_exit_hard(); }
static void db_putc(int c) { /* * If not in the debugger or the user requests it, output data to * both the console and the message buffer. */ if (!kdb_active || ddb_use_printf) { printf("%c", c); if (!kdb_active) return; if (c == '\r' || c == '\n') db_check_interrupt(); if (c == '\n' && db_maxlines > 0) { db_newlines++; if (db_newlines >= db_maxlines) db_pager(); } return; } /* Otherwise, output data directly to the console. */ if (c > ' ' && c <= '~') { /* * Printing character. * If we have spaces to print, print them first. * Use tabs if possible. */ db_force_whitespace(); cnputc(c); db_capture_writech(c); db_output_position++; db_last_non_space = db_output_position; } else if (c == '\n') { /* Newline */ cnputc(c); db_capture_writech(c); db_output_position = 0; db_last_non_space = 0; db_check_interrupt(); if (db_maxlines > 0) { db_newlines++; if (db_newlines >= db_maxlines) db_pager(); } } else if (c == '\r') { /* Return */ cnputc(c); db_capture_writech(c); db_output_position = 0; db_last_non_space = 0; db_check_interrupt(); } else if (c == '\t') { /* assume tabs every 8 positions */ db_output_position = NEXT_TAB(db_output_position); } else if (c == ' ') { /* space */ db_output_position++; } else if (c == '\007') { /* bell */ cnputc(c); /* No need to beep in a log: db_capture_writech(c); */ } /* other characters are assumed non-printing */ }