Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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--;
}