Lines Matching +full:display +full:- +full:height +full:- +full:chars

1 /*-
2 * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
3 * Copyright (c) 1992-1998 Søren Schmidt
40 #include <machine/pc/display.h>
95 "*", /* matching renderer, any :-) */
133 tcp->flags = SCTERM_BUSY; in scterm_init()
134 tcp->esc = 0; in scterm_init()
135 tcp->saved_xpos = -1; in scterm_init()
136 tcp->saved_ypos = -1; in scterm_init()
137 tcp->attr_mask = NORMAL_ATTR; in scterm_init()
139 tcp->dflt_std_color.fg = SC_NORM_ATTR & 0x0f; in scterm_init()
140 tcp->dflt_std_color.bg = (SC_NORM_ATTR >> 4) & 0x0f; in scterm_init()
141 tcp->dflt_rev_color.fg = SC_NORM_REV_ATTR & 0x0f; in scterm_init()
142 tcp->dflt_rev_color.bg = (SC_NORM_REV_ATTR >> 4) & 0x0f; in scterm_init()
143 tcp->std_color = tcp->dflt_std_color; in scterm_init()
144 tcp->rev_color = tcp->dflt_rev_color; in scterm_init()
145 tcp->cur_color = tcp->std_color; in scterm_init()
146 tcp->cur_attr = mask2attr(tcp); in scterm_init()
151 tcp->esc = 0; in scterm_init()
152 tcp->saved_xpos = -1; in scterm_init()
153 tcp->saved_ypos = -1; in scterm_init()
155 tcp->std_color = tcp->dflt_std_color; in scterm_init()
156 tcp->rev_color = tcp->dflt_rev_color; in scterm_init()
158 tcp->cur_color = tcp->std_color; in scterm_init()
159 tcp->cur_attr = mask2attr(tcp); in scterm_init()
173 --sc_term_sc.te_refcount; in scterm_term()
204 sc = scp->sc; in scterm_scan_esc()
205 if (tcp->esc == 1) { /* seen ESC */ in scterm_scan_esc()
208 tcp->saved_xpos = scp->xpos; in scterm_scan_esc()
209 tcp->saved_ypos = scp->ypos; in scterm_scan_esc()
213 if (tcp->saved_xpos >= 0 && tcp->saved_ypos >= 0) in scterm_scan_esc()
214 sc_move_cursor(scp, tcp->saved_xpos, in scterm_scan_esc()
215 tcp->saved_ypos); in scterm_scan_esc()
219 tcp->esc = 2; in scterm_scan_esc()
220 tcp->last_param = -1; in scterm_scan_esc()
221 for (i = tcp->num_param; i < MAX_ESC_PAR; i++) in scterm_scan_esc()
222 tcp->param[i] = 1; in scterm_scan_esc()
223 tcp->num_param = 0; in scterm_scan_esc()
227 sc_term_up_scroll(scp, 1, sc->scr_map[0x20], in scterm_scan_esc()
228 tcp->cur_attr, 0, 0); in scterm_scan_esc()
232 tcp->esc = 4; in scterm_scan_esc()
236 tcp->attr_mask = NORMAL_ATTR; in scterm_scan_esc()
237 tcp->cur_color = tcp->std_color in scterm_scan_esc()
238 = tcp->dflt_std_color; in scterm_scan_esc()
239 tcp->rev_color = tcp->dflt_rev_color; in scterm_scan_esc()
240 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
242 CONS_RESET_CURSOR | CONS_LOCAL_CURSOR, -1, -1); in scterm_scan_esc()
246 case '(': /* iso-2022: designate 94 character set to G0 */ in scterm_scan_esc()
247 tcp->esc = 5; in scterm_scan_esc()
250 } else if (tcp->esc == 2) { /* seen ESC [ */ in scterm_scan_esc()
252 if (tcp->num_param < MAX_ESC_PAR) { in scterm_scan_esc()
253 if (tcp->last_param != tcp->num_param) { in scterm_scan_esc()
254 tcp->last_param = tcp->num_param; in scterm_scan_esc()
255 tcp->param[tcp->num_param] = 0; in scterm_scan_esc()
257 tcp->param[tcp->num_param] *= 10; in scterm_scan_esc()
259 tcp->param[tcp->num_param] += c - '0'; in scterm_scan_esc()
263 tcp->num_param = tcp->last_param + 1; in scterm_scan_esc()
266 if (tcp->num_param < MAX_ESC_PAR) in scterm_scan_esc()
271 tcp->esc = 3; in scterm_scan_esc()
272 tcp->last_param = -1; in scterm_scan_esc()
273 for (i = tcp->num_param; i < MAX_ESC_PAR; i++) in scterm_scan_esc()
274 tcp->param[i] = 1; in scterm_scan_esc()
275 tcp->num_param = 0; in scterm_scan_esc()
279 sc_term_up(scp, tcp->param[0], 0); in scterm_scan_esc()
283 sc_term_down(scp, tcp->param[0], 0); in scterm_scan_esc()
287 sc_term_right(scp, tcp->param[0]); in scterm_scan_esc()
291 sc_term_left(scp, tcp->param[0]); in scterm_scan_esc()
295 n = tcp->param[0]; in scterm_scan_esc()
298 sc_move_cursor(scp, 0, scp->ypos + n); in scterm_scan_esc()
302 n = tcp->param[0]; in scterm_scan_esc()
305 sc_move_cursor(scp, 0, scp->ypos - n); in scterm_scan_esc()
310 if (tcp->num_param == 0) in scterm_scan_esc()
312 else if (tcp->num_param == 2) in scterm_scan_esc()
313 sc_move_cursor(scp, tcp->param[1] - 1, in scterm_scan_esc()
314 tcp->param[0] - 1); in scterm_scan_esc()
317 case 'J': /* Clear all or part of display */ in scterm_scan_esc()
318 if (tcp->num_param == 0) in scterm_scan_esc()
321 n = tcp->param[0]; in scterm_scan_esc()
322 sc_term_clr_eos(scp, n, sc->scr_map[0x20], in scterm_scan_esc()
323 tcp->cur_attr); in scterm_scan_esc()
327 if (tcp->num_param == 0) in scterm_scan_esc()
330 n = tcp->param[0]; in scterm_scan_esc()
331 sc_term_clr_eol(scp, n, sc->scr_map[0x20], in scterm_scan_esc()
332 tcp->cur_attr); in scterm_scan_esc()
336 sc_term_ins_line(scp, scp->ypos, tcp->param[0], in scterm_scan_esc()
337 sc->scr_map[0x20], tcp->cur_attr, 0); in scterm_scan_esc()
341 sc_term_del_line(scp, scp->ypos, tcp->param[0], in scterm_scan_esc()
342 sc->scr_map[0x20], tcp->cur_attr, 0); in scterm_scan_esc()
345 case 'P': /* Delete n chars */ in scterm_scan_esc()
346 sc_term_del_char(scp, tcp->param[0], in scterm_scan_esc()
347 sc->scr_map[0x20], tcp->cur_attr); in scterm_scan_esc()
350 case '@': /* Insert n chars */ in scterm_scan_esc()
351 sc_term_ins_char(scp, tcp->param[0], in scterm_scan_esc()
352 sc->scr_map[0x20], tcp->cur_attr); in scterm_scan_esc()
356 sc_term_del_line(scp, 0, tcp->param[0], in scterm_scan_esc()
357 sc->scr_map[0x20], tcp->cur_attr, 0); in scterm_scan_esc()
361 sc_term_ins_line(scp, 0, tcp->param[0], in scterm_scan_esc()
362 sc->scr_map[0x20], tcp->cur_attr, 0); in scterm_scan_esc()
366 n = tcp->param[0]; in scterm_scan_esc()
369 if (n > scp->xsize - scp->xpos) in scterm_scan_esc()
370 n = scp->xsize - scp->xpos; in scterm_scan_esc()
371 sc_vtb_erase(&scp->vtb, scp->cursor_pos, n, in scterm_scan_esc()
372 sc->scr_map[0x20], tcp->cur_attr); in scterm_scan_esc()
373 mark_for_update(scp, scp->cursor_pos); in scterm_scan_esc()
374 mark_for_update(scp, scp->cursor_pos + n - 1); in scterm_scan_esc()
378 sc_term_backtab(scp, tcp->param[0]); in scterm_scan_esc()
382 sc_term_col(scp, tcp->param[0]); in scterm_scan_esc()
386 sc_term_right(scp, tcp->param[0]); in scterm_scan_esc()
390 sc_term_row(scp, tcp->param[0]); in scterm_scan_esc()
394 sc_term_down(scp, tcp->param[0], 0); in scterm_scan_esc()
398 if (tcp->num_param == 0) { in scterm_scan_esc()
399 tcp->attr_mask = NORMAL_ATTR; in scterm_scan_esc()
400 tcp->cur_color = tcp->std_color; in scterm_scan_esc()
401 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
404 for (i = 0; i < tcp->num_param; i++) { in scterm_scan_esc()
405 switch (n = tcp->param[i]) { in scterm_scan_esc()
407 tcp->attr_mask = NORMAL_ATTR; in scterm_scan_esc()
408 tcp->cur_color = tcp->std_color; in scterm_scan_esc()
409 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
412 tcp->attr_mask |= BOLD_ATTR; in scterm_scan_esc()
413 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
416 tcp->attr_mask |= UNDERLINE_ATTR; in scterm_scan_esc()
417 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
420 tcp->attr_mask |= BLINK_ATTR; in scterm_scan_esc()
421 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
424 tcp->attr_mask |= REVERSE_ATTR; in scterm_scan_esc()
425 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
428 tcp->attr_mask &= ~BOLD_ATTR; in scterm_scan_esc()
429 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
432 tcp->attr_mask &= ~UNDERLINE_ATTR; in scterm_scan_esc()
433 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
436 tcp->attr_mask &= ~BLINK_ATTR; in scterm_scan_esc()
437 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
440 tcp->attr_mask &= ~REVERSE_ATTR; in scterm_scan_esc()
441 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
446 tcp->attr_mask |= FG_CHANGED; in scterm_scan_esc()
447 tcp->cur_color.fg = ansi_col[n - 30]; in scterm_scan_esc()
448 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
451 tcp->attr_mask &= ~(FG_CHANGED|BOLD_ATTR); in scterm_scan_esc()
452 tcp->cur_color.fg = tcp->std_color.fg; in scterm_scan_esc()
453 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
458 tcp->attr_mask |= BG_CHANGED; in scterm_scan_esc()
459 tcp->cur_color.bg = ansi_col[n - 40]; in scterm_scan_esc()
460 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
463 tcp->attr_mask &= ~BG_CHANGED; in scterm_scan_esc()
464 tcp->cur_color.bg = tcp->std_color.bg; in scterm_scan_esc()
465 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
472 tcp->saved_xpos = scp->xpos; in scterm_scan_esc()
473 tcp->saved_ypos = scp->ypos; in scterm_scan_esc()
477 if (tcp->saved_xpos >= 0 && tcp->saved_ypos >= 0) in scterm_scan_esc()
478 sc_move_cursor(scp, tcp->saved_xpos, in scterm_scan_esc()
479 tcp->saved_ypos); in scterm_scan_esc()
483 if (tcp->num_param == 0) in scterm_scan_esc()
486 n = tcp->param[0]; in scterm_scan_esc()
489 tcp->attr_mask = NORMAL_ATTR; in scterm_scan_esc()
490 tcp->cur_color = tcp->std_color in scterm_scan_esc()
491 = tcp->dflt_std_color; in scterm_scan_esc()
492 tcp->rev_color = tcp->dflt_rev_color; in scterm_scan_esc()
493 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
496 tcp->attr_mask &= ~BG_CHANGED; in scterm_scan_esc()
497 tcp->cur_color.bg = tcp->std_color.bg in scterm_scan_esc()
498 = ansi_col[tcp->param[1] & 0x0f]; in scterm_scan_esc()
499 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
502 tcp->attr_mask &= ~FG_CHANGED; in scterm_scan_esc()
503 tcp->cur_color.fg = tcp->std_color.fg in scterm_scan_esc()
504 = ansi_col[tcp->param[1] & 0x0f]; in scterm_scan_esc()
505 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
508 tcp->attr_mask &= ~(FG_CHANGED | BG_CHANGED); in scterm_scan_esc()
509 tcp->cur_color.fg = tcp->std_color.fg in scterm_scan_esc()
510 = tcp->param[1] & 0x0f; in scterm_scan_esc()
511 tcp->cur_color.bg = tcp->std_color.bg in scterm_scan_esc()
512 = (tcp->param[1] >> 4) & 0x0f; in scterm_scan_esc()
513 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
516 tcp->rev_color.bg = ansi_col[tcp->param[1] & 0x0f]; in scterm_scan_esc()
517 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
520 tcp->rev_color.fg = ansi_col[tcp->param[1] & 0x0f]; in scterm_scan_esc()
521 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
524 tcp->rev_color.fg = tcp->param[1] & 0x0f; in scterm_scan_esc()
525 tcp->rev_color.bg = (tcp->param[1] >> 4) & 0x0f; in scterm_scan_esc()
526 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
532 if (tcp->num_param == 1) in scterm_scan_esc()
533 sc_switch_scr(sc, tcp->param[0]); in scterm_scan_esc()
536 } else if (tcp->esc == 3) { /* seen ESC [0-9]+ = */ in scterm_scan_esc()
538 if (tcp->num_param < MAX_ESC_PAR) { in scterm_scan_esc()
539 if (tcp->last_param != tcp->num_param) { in scterm_scan_esc()
540 tcp->last_param = tcp->num_param; in scterm_scan_esc()
541 tcp->param[tcp->num_param] = 0; in scterm_scan_esc()
543 tcp->param[tcp->num_param] *= 10; in scterm_scan_esc()
545 tcp->param[tcp->num_param] += c - '0'; in scterm_scan_esc()
549 tcp->num_param = tcp->last_param + 1; in scterm_scan_esc()
552 if (tcp->num_param < MAX_ESC_PAR) in scterm_scan_esc()
556 case 'A': /* set display border color */ in scterm_scan_esc()
557 if (tcp->num_param == 1) { in scterm_scan_esc()
558 scp->border=tcp->param[0] & 0xff; in scterm_scan_esc()
559 if (scp == sc->cur_scp) in scterm_scan_esc()
560 sc_set_border(scp, scp->border); in scterm_scan_esc()
565 if (tcp->num_param == 2) { in scterm_scan_esc()
566 scp->bell_pitch = tcp->param[0]; in scterm_scan_esc()
567 scp->bell_duration = in scterm_scan_esc()
568 (tcp->param[1] * hz + 99) / 100; in scterm_scan_esc()
574 n = tcp->num_param; in scterm_scan_esc()
575 v0 = tcp->param[0]; in scterm_scan_esc()
576 v1 = tcp->param[1]; in scterm_scan_esc()
577 v2 = tcp->param[2]; in scterm_scan_esc()
584 sc_change_cursor_shape(scp, v0, -1, -1); in scterm_scan_esc()
591 case 3: /* base and height */ in scterm_scan_esc()
593 sc_change_cursor_shape(scp, -1, in scterm_scan_esc()
594 scp->font_size - v1 - 1, in scterm_scan_esc()
595 v1 - v0 + 1); in scterm_scan_esc()
597 sc_change_cursor_shape(scp, -1, in scterm_scan_esc()
598 v0, v1 - v0 + 1); in scterm_scan_esc()
605 if (tcp->num_param == 1) { in scterm_scan_esc()
606 tcp->attr_mask &= ~FG_CHANGED; in scterm_scan_esc()
607 tcp->cur_color.fg = tcp->std_color.fg in scterm_scan_esc()
608 = tcp->param[0] & 0x0f; in scterm_scan_esc()
609 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
614 if (tcp->num_param == 1) { in scterm_scan_esc()
615 tcp->attr_mask &= ~BG_CHANGED; in scterm_scan_esc()
616 tcp->cur_color.bg = tcp->std_color.bg in scterm_scan_esc()
617 = tcp->param[0] & 0x0f; in scterm_scan_esc()
618 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
623 if (tcp->num_param == 1) { in scterm_scan_esc()
624 tcp->rev_color.fg = tcp->param[0] & 0x0f; in scterm_scan_esc()
625 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
630 if (tcp->num_param == 1) { in scterm_scan_esc()
631 tcp->rev_color.bg = tcp->param[0] & 0x0f; in scterm_scan_esc()
632 tcp->cur_attr = mask2attr(tcp); in scterm_scan_esc()
638 n = tcp->num_param; in scterm_scan_esc()
639 v0 = tcp->param[0]; in scterm_scan_esc()
647 tcattrs[v0], -1, -1); in scterm_scan_esc()
654 } else if (tcp->esc == 4) { /* seen ESC Q */ in scterm_scan_esc()
657 } else if (tcp->esc == 5) { /* seen ESC ( */ in scterm_scan_esc()
659 case 'B': /* iso-2022: desginate ASCII into G0 */ in scterm_scan_esc()
666 tcp->esc = 0; in scterm_scan_esc()
674 tcp = scp->ts; in scterm_puts()
676 scp->sc->write_in_progress++; in scterm_puts()
678 if (tcp->esc) { in scterm_puts()
681 len--; in scterm_puts()
685 tcp->esc = 1; in scterm_puts()
686 tcp->num_param = 0; in scterm_puts()
688 len--; in scterm_puts()
691 sc_term_gen_print(scp, &buf, &len, tcp->cur_attr); in scterm_puts()
696 sc_term_gen_scroll(scp, scp->sc->scr_map[0x20], tcp->cur_attr); in scterm_puts()
698 scp->sc->write_in_progress--; in scterm_puts()
707 term_stat *tcp = scp->ts; in scterm_ioctl()
713 *(int*)data = (tcp->cur_attr >> 8) & 0xff; in scterm_ioctl()
717 if (vi->size != sizeof(struct vid_info)) in scterm_ioctl()
719 vi->mv_norm.fore = tcp->std_color.fg; in scterm_ioctl()
720 vi->mv_norm.back = tcp->std_color.bg; in scterm_ioctl()
721 vi->mv_rev.fore = tcp->rev_color.fg; in scterm_ioctl()
722 vi->mv_rev.back = tcp->rev_color.bg; in scterm_ioctl()
741 term_stat *tcp = scp->ts; in scterm_default_attr()
743 tcp->dflt_std_color.fg = color & 0x0f; in scterm_default_attr()
744 tcp->dflt_std_color.bg = (color >> 4) & 0x0f; in scterm_default_attr()
745 tcp->dflt_rev_color.fg = rev_color & 0x0f; in scterm_default_attr()
746 tcp->dflt_rev_color.bg = (rev_color >> 4) & 0x0f; in scterm_default_attr()
747 tcp->std_color = tcp->dflt_std_color; in scterm_default_attr()
748 tcp->rev_color = tcp->dflt_rev_color; in scterm_default_attr()
749 tcp->cur_color = tcp->std_color; in scterm_default_attr()
750 tcp->cur_attr = mask2attr(tcp); in scterm_default_attr()
756 term_stat *tcp = scp->ts; in scterm_clear()
759 sc_vtb_clear(&scp->vtb, scp->sc->scr_map[0x20], tcp->cur_attr); in scterm_clear()
800 int attr, mask = tcp->attr_mask; in mask2attr()
804 tcp->cur_color.bg : tcp->rev_color.fg) | in mask2attr()
806 tcp->cur_color.fg : tcp->rev_color.bg) << 4); in mask2attr()
808 attr = tcp->cur_color.fg | (tcp->cur_color.bg << 4); in mask2attr()