Error Terminal::write(s8 *buffer, Size size, Size offset) { char cr = '\r'; /* Initialize buffer with the current screen first. */ ::lseek(output, 0, SEEK_SET); ::read(output, this->buffer, width * height * 2); /* * Loop all input characters. Add an additional carriage return * whenever a linefeed is detected. */ for (Size i = 0; i < size; i++) { if (*buffer == '\n') { teken_input(&state, &cr, 1); } teken_input(&state, buffer++, 1); } /* Flush changes back to our output device. */ ::lseek(output, 0, SEEK_SET); ::write(output, this->buffer, width * height * 2); /* Done. */ return size; }
static void scteken_puts(scr_stat *scp, u_char *buf, int len, int kernel) { teken_stat *ts = scp->ts; teken_attr_t backup, kattr; scp->sc->write_in_progress++; if (kernel) { /* Use special colors for kernel messages. */ backup = *teken_get_curattr(&ts->ts_teken); scteken_revattr(SC_KERNEL_CONS_ATTR, &kattr); teken_set_curattr(&ts->ts_teken, &kattr); teken_input(&ts->ts_teken, buf, len); teken_set_curattr(&ts->ts_teken, &backup); } else { /* Print user messages with regular colors. */ teken_input(&ts->ts_teken, buf, len); } scp->sc->write_in_progress--; }