Lines Matching full:scp
196 static void sc_puts(scr_stat *scp, u_char *buf, int len);
199 static void sccnupdate(scr_stat *scp);
201 static void init_scp(sc_softc_t *sc, int vty, scr_stat *scp);
204 static void scrn_update(scr_stat *scp, int show_cursor);
212 scr_stat *scp, int mode, u_char *pal, int border);
213 static int restore_scrn_saver_mode(scr_stat *scp, int changemode);
222 static int vt_proc_alive(scr_stat *scp);
223 static int signal_vt_rel(scr_stat *scp);
224 static int signal_vt_acq(scr_stat *scp);
225 static int finish_vt_rel(scr_stat *scp, int release, int *s);
226 static int finish_vt_acq(scr_stat *scp);
228 static void update_cursor_image(scr_stat *scp);
229 static void change_cursor_shape(scr_stat *scp, int flags, int base, int height);
231 static int save_kbd_state(scr_stat *scp);
232 static int update_kbd_state(scr_stat *scp, int state, int mask);
233 static int update_kbd_leds(scr_stat *scp, int which);
409 scr_stat *scp = sc_get_stat(tp); in sctty_outwakeup() local
411 if (scp->status & SLKED || in sctty_outwakeup()
412 (scp == scp->sc->cur_scp && scp->sc->blink_in_progress)) in sctty_outwakeup()
419 SC_VIDEO_LOCK(scp->sc); in sctty_outwakeup()
420 sc_puts(scp, buf, len); in sctty_outwakeup()
421 SC_VIDEO_UNLOCK(scp->sc); in sctty_outwakeup()
445 sc_set_vesa_mode(scr_stat *scp, sc_softc_t *sc, int unit) in sc_set_vesa_mode() argument
482 fontsize = scp->font_size; in sc_set_vesa_mode()
516 if (scp->history != NULL) { in sc_set_vesa_mode()
517 sc_vtb_append(&scp->vtb, 0, scp->history, in sc_set_vesa_mode()
518 scp->ypos * scp->xsize + scp->xpos); in sc_set_vesa_mode()
519 scp->history_pos = sc_vtb_tail(scp->history); in sc_set_vesa_mode()
523 scp->status |= (UNKNOWN_MODE | PIXEL_MODE | MOUSE_HIDDEN); in sc_set_vesa_mode()
524 scp->status &= ~(GRAPHICS_MODE | MOUSE_VISIBLE); in sc_set_vesa_mode()
525 scp->xpixel = info.vi_width; in sc_set_vesa_mode()
526 scp->ypixel = info.vi_height; in sc_set_vesa_mode()
527 scp->xsize = scp->xpixel / 8; in sc_set_vesa_mode()
528 scp->ysize = scp->ypixel / fontsize; in sc_set_vesa_mode()
529 scp->xpos = 0; in sc_set_vesa_mode()
530 scp->ypos = scp->ysize - 1; in sc_set_vesa_mode()
531 scp->xoff = scp->yoff = 0; in sc_set_vesa_mode()
532 scp->font = font; in sc_set_vesa_mode()
533 scp->font_size = fontsize; in sc_set_vesa_mode()
534 scp->font_width = 8; in sc_set_vesa_mode()
535 scp->start = scp->xsize * scp->ysize - 1; in sc_set_vesa_mode()
536 scp->end = 0; in sc_set_vesa_mode()
537 scp->cursor_pos = scp->cursor_oldpos = scp->xsize * scp->xsize; in sc_set_vesa_mode()
538 scp->mode = sc->initial_mode = vmode; in sc_set_vesa_mode()
539 sc_vtb_init(&scp->scr, VTB_FRAMEBUFFER, scp->xsize, scp->ysize, in sc_set_vesa_mode()
541 sc_alloc_scr_buffer(scp, FALSE, FALSE); in sc_set_vesa_mode()
542 sc_init_emulator(scp, NULL); in sc_set_vesa_mode()
544 sc_alloc_cut_buffer(scp, FALSE); in sc_set_vesa_mode()
547 sc_alloc_history_buffer(scp, 0, 0, FALSE); in sc_set_vesa_mode()
549 sc_set_border(scp, scp->border); in sc_set_vesa_mode()
550 sc_set_cursor_image(scp); in sc_set_vesa_mode()
551 scp->status &= ~UNKNOWN_MODE; in sc_set_vesa_mode()
563 scr_stat *scp; in sc_attach_unit() local
610 scp = sc_get_stat(sc->dev[0]); in sc_attach_unit()
612 sc_console = scp; in sc_attach_unit()
616 sc_set_vesa_mode(scp, sc, unit); in sc_attach_unit()
620 if (!ISGRAPHSC(scp)) in sc_attach_unit()
621 update_cursor_image(scp); in sc_attach_unit()
627 (void)kbdd_ioctl(sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode); in sc_attach_unit()
628 update_kbd_state(scp, scp->status, LOCK_MASK); in sc_attach_unit()
638 if (scp->tsw) in sc_attach_unit()
640 scp->tsw->te_name, scp->tsw->te_desc); in sc_attach_unit()
725 scr_stat *scp; in sctty_open() local
747 scp = sc_get_stat(tp); in sctty_open()
748 if (scp == NULL) { in sctty_open()
749 scp = SC_STAT(tp) = alloc_scp(sc, SC_VTY(tp)); in sctty_open()
750 if (ISGRAPHSC(scp)) in sctty_open()
751 sc_set_pixel_mode(scp, NULL, 0, 0, 16, 8); in sctty_open()
754 tp->t_winsize.ws_col = scp->xsize; in sctty_open()
755 tp->t_winsize.ws_row = scp->ysize; in sctty_open()
764 scr_stat *scp; in sctty_close() local
768 scp = sc_get_stat(tp); in sctty_close()
770 DPRINTF(5, ("sc%d: scclose(), ", scp->sc->unit)); in sctty_close()
772 if ((scp == scp->sc->cur_scp) && in sctty_close()
773 (scp->sc->unit == sc_console_unit)) in sctty_close()
775 if (finish_vt_rel(scp, TRUE, &s) == 0) /* force release */ in sctty_close()
777 if (finish_vt_acq(scp) == 0) /* force acknowledge */ in sctty_close()
780 if (scp == &main_console) { in sctty_close()
781 scp->pid = 0; in sctty_close()
782 scp->proc = NULL; in sctty_close()
783 scp->smode.mode = VT_AUTO; in sctty_close()
785 sc_vtb_destroy(&scp->vtb); in sctty_close()
786 sc_vtb_destroy(&scp->scr); in sctty_close()
787 sc_free_history_buffer(scp, scp->ysize); in sctty_close()
789 free(scp, M_DEVBUF); in sctty_close()
792 scp->pid = 0; in sctty_close()
793 scp->proc = NULL; in sctty_close()
794 scp->smode.mode = VT_AUTO; in sctty_close()
796 scp->kbd_mode = K_XLATE; in sctty_close()
797 if (scp == scp->sc->cur_scp) in sctty_close()
799 scp->sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode); in sctty_close()
893 scr_stat *scp; in sctty_ioctl() local
923 scp = sc_get_stat(tp); in sctty_ioctl()
924 /* assert(scp != NULL) */ in sctty_ioctl()
925 /* scp is sc_console, if SC_VTY(dev) == SC_CONSOLECTL. */ in sctty_ioctl()
926 sc = scp->sc; in sctty_ioctl()
928 if (scp->tsw) { in sctty_ioctl()
929 error = (*scp->tsw->te_ioctl)(scp, tp, cmd, data, td); in sctty_ioctl()
957 sc_change_cursor_shape(scp, *(int *)data, -1, -1); in sctty_ioctl()
968 cap = &scp->base_curs_attr; in sctty_ioctl()
974 cap = &scp->dflt_curs_attr; in sctty_ioctl()
993 scp, ((int *)data)[0], ((int *)data)[1], ((int *)data)[2]); in sctty_ioctl()
1013 ptr->font_size = scp->font_size; in sctty_ioctl()
1014 ptr->mv_col = scp->xpos; in sctty_ioctl()
1015 ptr->mv_row = scp->ypos; in sctty_ioctl()
1016 ptr->mv_csz = scp->xsize; in sctty_ioctl()
1017 ptr->mv_rsz = scp->ysize; in sctty_ioctl()
1019 (scp->history != NULL) ? scp->history->vtb_rows : 0; in sctty_ioctl()
1031 ptr->mv_ovscan = scp->border; in sctty_ioctl()
1032 if (scp == sc->cur_scp) in sctty_ioctl()
1033 save_kbd_state(scp); in sctty_ioctl()
1034 ptr->mk_keylock = scp->status & LOCK_MASK; in sctty_ioctl()
1075 scp->status |= SAVER_RUNNING; in sctty_ioctl()
1077 scp->status &= ~SAVER_RUNNING; in sctty_ioctl()
1084 (scp->status & SAVER_RUNNING)) in sctty_ioctl()
1085 scp->status &= ~SAVER_RUNNING; in sctty_ioctl()
1119 if (ISGRAPHSC(scp)) { in sctty_ioctl()
1123 hist_rsz = (scp->history != NULL) ? scp->history->vtb_rows : 0; in sctty_ioctl()
1124 if (((u_int)ptr->x + ptr->xsize) > scp->xsize || in sctty_ioctl()
1125 ((u_int)ptr->y + ptr->ysize) > (scp->ysize + hist_rsz)) { in sctty_ioctl()
1130 lsize = scp->xsize * sizeof(u_int16_t); in sctty_ioctl()
1133 frbp = scp->vtb.vtb_buffer + scp->ysize * lsize + in sctty_ioctl()
1138 if (scp->history != NULL) in sctty_ioctl()
1139 hstp = scp->history->vtb_buffer + in sctty_ioctl()
1140 sc_vtb_tail(scp->history) * sizeof(u_int16_t) + in sctty_ioctl()
1147 if (lnum < scp->ysize) { in sctty_ioctl()
1151 if (hstp < scp->history->vtb_buffer) in sctty_ioctl()
1152 hstp += scp->history->vtb_rows * lsize; in sctty_ioctl()
1173 if (scp->smode.mode == VT_PROCESS) { in sctty_ioctl()
1174 p1 = pfind(scp->pid); in sctty_ioctl()
1175 if (scp->proc == p1 && scp->proc != td->td_proc) { in sctty_ioctl()
1186 scp->smode.mode = VT_AUTO; in sctty_ioctl()
1187 scp->proc = NULL; in sctty_ioctl()
1188 scp->pid = 0; in sctty_ioctl()
1190 if ((scp == sc->cur_scp) && in sctty_ioctl()
1195 if (finish_vt_rel(scp, TRUE, &s) == 0) in sctty_ioctl()
1197 if (finish_vt_acq(scp) == 0) in sctty_ioctl()
1208 bcopy(data, &scp->smode, sizeof(struct vt_mode)); in sctty_ioctl()
1209 scp->proc = td->td_proc; in sctty_ioctl()
1210 scp->pid = scp->proc->p_pid; in sctty_ioctl()
1211 if ((scp == sc->cur_scp) && in sctty_ioctl()
1221 bcopy(&scp->smode, data, sizeof(struct vt_mode)); in sctty_ioctl()
1237 if ((scp != sc->cur_scp) || (scp->smode.mode != VT_PROCESS)) { in sctty_ioctl()
1242 if (scp->proc != td->td_proc) { in sctty_ioctl()
1249 if ((error = finish_vt_rel(scp, FALSE, &s)) == 0) in sctty_ioctl()
1255 if ((error = finish_vt_rel(scp, TRUE, &s)) == 0) in sctty_ioctl()
1261 if ((error = finish_vt_acq(scp)) == 0) in sctty_ioctl()
1290 i = (*(int *)data == 0) ? scp->index : (*(int *)data - 1); in sctty_ioctl()
1307 i = (*(int *)data == 0) ? scp->index : (*(int *)data - 1); in sctty_ioctl()
1321 *(int *)data = scp->index + 1; in sctty_ioctl()
1363 scp->status &= ~LOCK_MASK; in sctty_ioctl()
1364 scp->status |= *(int *)data; in sctty_ioctl()
1365 if (scp == sc->cur_scp) in sctty_ioctl()
1366 update_kbd_state(scp, scp->status, LOCK_MASK); in sctty_ioctl()
1370 if (scp == sc->cur_scp) in sctty_ioctl()
1371 save_kbd_state(scp); in sctty_ioctl()
1372 *(int *)data = scp->status & LOCK_MASK; in sctty_ioctl()
1409 scp->kbd_mode = *(int *)data; in sctty_ioctl()
1410 if (scp == sc->cur_scp) in sctty_ioctl()
1419 *(int *)data = scp->kbd_mode; in sctty_ioctl()
1437 sc_bell(scp, (*(int *)data) & 0xffff, in sctty_ioctl()
1440 sc_bell(scp, scp->bell_pitch, scp->bell_duration); in sctty_ioctl()
1451 if (scp == sc->cur_scp) { in sctty_ioctl()
1477 scp->status &= ~LED_MASK; in sctty_ioctl()
1478 scp->status |= *(int *)data; in sctty_ioctl()
1479 if (scp == sc->cur_scp) in sctty_ioctl()
1480 update_kbd_leds(scp, scp->status); in sctty_ioctl()
1484 if (scp == sc->cur_scp) in sctty_ioctl()
1485 save_kbd_state(scp); in sctty_ioctl()
1486 *(int *)data = scp->status & LED_MASK; in sctty_ioctl()
1555 sw = scp->tsw; in sctty_ioctl()
1577 error = sc_init_emulator(scp, ((term_info_t *)data)->ti_name); in sctty_ioctl()
1578 /* FIXME: what if scp == sc_console! XXX */ in sctty_ioctl()
1883 /* Switch the keyboard to console mode (K_XLATE, polled) on all scp's. in sccnopen()
1919 /* Restore keyboard mode (for the current, possibly-changed scp). */ in sccnclose()
1982 scr_stat *scp = sc_console; in sc_cnputc() local
1995 sccnopen(scp->sc, &st, 0); in sc_cnputc()
2016 if (scp == scp->sc->cur_scp && scp->status & SLKED) { in sc_cnputc()
2017 scp->status &= ~SLKED; in sc_cnputc()
2018 update_kbd_state(scp, scp->status, SLKED); in sc_cnputc()
2019 if (scp->status & BUFFER_SAVED) { in sc_cnputc()
2020 if (!sc_hist_restore(scp)) in sc_cnputc()
2021 sc_remove_cutmarking(scp); in sc_cnputc()
2022 scp->status &= ~BUFFER_SAVED; in sc_cnputc()
2023 scp->status |= CURSOR_ENABLED; in sc_cnputc()
2024 sc_draw_cursor_image(scp); in sc_cnputc()
2032 tp = SC_DEV(scp->sc, scp->index); in sc_cnputc()
2054 oldtsw = scp->tsw; in sc_cnputc()
2055 oldts = scp->ts; in sc_cnputc()
2056 scp->tsw = sc_ktsw; in sc_cnputc()
2057 scp->ts = ts; in sc_cnputc()
2058 (*scp->tsw->te_sync)(scp); in sc_cnputc()
2061 (*scp->tsw->te_default_attr)( in sc_cnputc()
2062 scp, sc_kattrtab[curcpu], SC_KERNEL_CONS_REV_ATTR); in sc_cnputc()
2064 sc_puts(scp, buf, 1); in sc_cnputc()
2066 scp->tsw = oldtsw; in sc_cnputc()
2067 scp->ts = oldts; in sc_cnputc()
2068 (*scp->tsw->te_sync)(scp); in sc_cnputc()
2070 (*scp->tsw->te_default_attr)( in sc_cnputc()
2071 scp, SC_KERNEL_CONS_ATTR, SC_KERNEL_CONS_REV_ATTR); in sc_cnputc()
2076 sccnupdate(scp); in sc_cnputc()
2078 sccnclose(scp->sc, &st); in sc_cnputc()
2106 scr_stat *scp; in sc_cngetc_locked() local
2116 scp = sc_console->sc->cur_scp; /* XXX */ in sc_cngetc_locked()
2118 sccnupdate(scp); in sc_cngetc_locked()
2123 c = scgetc(scp->sc, SCGETC_CN | SCGETC_NONBLOCK, sp); in sc_cngetc_locked()
2129 p = (*scp->tsw->te_fkeystr)(scp, c); in sc_cngetc_locked()
2137 scp->sc->kbd, KEYCHAR(c), (size_t *)&fkeycp); in sc_cngetc_locked()
2154 sccnupdate(scr_stat *scp) in sccnupdate() argument
2158 if (suspend_in_progress || scp->sc->font_loading_in_progress) in sccnupdate()
2163 } else if (scp != scp->sc->cur_scp) { in sccnupdate()
2168 scp->sc->flags &= ~SC_SCRN_IDLE; in sccnupdate()
2170 if ((saver_mode != CONS_LKM_SAVER) || !(scp->sc->flags & SC_SCRN_IDLE)) in sccnupdate()
2171 if (scp->sc->flags & SC_SCRN_BLANKED) in sccnupdate()
2172 stop_scrn_saver(scp->sc, current_saver); in sccnupdate()
2175 if (scp != scp->sc->cur_scp || scp->sc->blink_in_progress || in sccnupdate()
2176 scp->sc->switch_in_progress) in sccnupdate()
2183 if (!ISGRAPHSC(scp) && !(scp->sc->flags & SC_SCRN_BLANKED)) in sccnupdate()
2184 scrn_update(scp, TRUE); in sccnupdate()
2192 scr_stat *scp; in scrn_timer() local
2205 scp = sc->cur_scp; in scrn_timer()
2252 scp = sc->cur_scp; /* cur_scp may have changed... */ in scrn_timer()
2253 if (!ISGRAPHSC(scp) && !(sc->flags & SC_SCRN_BLANKED)) in scrn_timer()
2254 scrn_update(scp, TRUE); in scrn_timer()
2259 if (!ISGRAPHSC(scp) || (sc->flags & SC_SCRN_BLANKED)) in scrn_timer()
2270 if (ISGRAPHSC(scp) && !(sc->flags & SC_SCRN_BLANKED)) in scrn_timer()
2290 scrn_update(scr_stat *scp, int show_cursor) in scrn_update() argument
2297 /* assert(scp == scp->sc->cur_scp) */ in scrn_update()
2299 SC_VIDEO_LOCK(scp->sc); in scrn_update()
2303 if (scp->status & MOUSE_VISIBLE) { in scrn_update()
2304 s = scp->mouse_pos; in scrn_update()
2305 e = scp->mouse_pos + scp->xsize + 1; in scrn_update()
2306 if ((scp->status & (MOUSE_MOVED | MOUSE_HIDDEN)) || in scrn_update()
2307 and_region(&s, &e, scp->start, scp->end) || in scrn_update()
2308 ((scp->status & CURSOR_ENABLED) && in scrn_update()
2309 (scp->cursor_pos != scp->cursor_oldpos) && in scrn_update()
2310 (and_region(&s, &e, scp->cursor_pos, scp->cursor_pos) || in scrn_update()
2311 and_region(&s, &e, scp->cursor_oldpos, in scrn_update()
2312 scp->cursor_oldpos)))) { in scrn_update()
2313 sc_remove_mouse_image(scp); in scrn_update()
2314 if (scp->end >= scp->xsize * scp->ysize) in scrn_update()
2315 scp->end = scp->xsize * scp->ysize - 1; in scrn_update()
2322 if (scp->end >= scp->xsize * scp->ysize) { in scrn_update()
2323 printf("scrn_update(): scp->end %d > size_of_screen!!\n", in scrn_update()
2324 scp->end); in scrn_update()
2325 scp->end = scp->xsize * scp->ysize - 1; in scrn_update()
2327 if (scp->start < 0) { in scrn_update()
2328 printf("scrn_update(): scp->start %d < 0\n", scp->start); in scrn_update()
2329 scp->start = 0; in scrn_update()
2334 if (scp->start <= scp->end) { in scrn_update()
2335 if (scp->mouse_cut_end >= 0) { in scrn_update()
2337 if (scp->mouse_cut_start <= scp->mouse_cut_end) { in scrn_update()
2338 start = scp->mouse_cut_start; in scrn_update()
2339 end = scp->mouse_cut_end; in scrn_update()
2341 start = scp->mouse_cut_end; in scrn_update()
2342 end = scp->mouse_cut_start - 1; in scrn_update()
2348 if (and_region(&s, &e, scp->start, scp->end)) { in scrn_update()
2349 (*scp->rndr->draw)(scp, s, e - s + 1, TRUE); in scrn_update()
2352 if (and_region(&s, &e, scp->start, scp->end)) in scrn_update()
2353 (*scp->rndr->draw)( in scrn_update()
2354 scp, s, e - s + 1, FALSE); in scrn_update()
2356 e = scp->xsize * scp->ysize - 1; in scrn_update()
2357 if (and_region(&s, &e, scp->start, scp->end)) in scrn_update()
2358 (*scp->rndr->draw)( in scrn_update()
2359 scp, s, e - s + 1, FALSE); in scrn_update()
2361 (*scp->rndr->draw)(scp, scp->start, in scrn_update()
2362 scp->end - scp->start + 1, FALSE); in scrn_update()
2365 (*scp->rndr->draw)( in scrn_update()
2366 scp, scp->start, scp->end - scp->start + 1, FALSE); in scrn_update()
2372 scp->end = 0; in scrn_update()
2373 scp->start = scp->xsize * scp->ysize - 1; in scrn_update()
2374 SC_VIDEO_UNLOCK(scp->sc); in scrn_update()
2379 if (scp->status & CURSOR_ENABLED) { in scrn_update()
2380 s = scp->start; in scrn_update()
2381 e = scp->end; in scrn_update()
2383 if (scp->cursor_pos != scp->cursor_oldpos) { in scrn_update()
2386 &s, &e, scp->cursor_oldpos, scp->cursor_oldpos)) in scrn_update()
2387 sc_remove_cursor_image(scp); in scrn_update()
2388 sc_draw_cursor_image(scp); in scrn_update()
2391 &s, &e, scp->cursor_pos, scp->cursor_pos)) in scrn_update()
2394 sc_draw_cursor_image(scp); in scrn_update()
2395 else if (scp->curs_attr.flags & CONS_BLINK_CURSOR) in scrn_update()
2397 (*scp->rndr->blink_cursor)(scp, scp->cursor_pos, in scrn_update()
2398 sc_inside_cutmark(scp, scp->cursor_pos)); in scrn_update()
2404 if (scp->sc->flags & SC_MOUSE_ENABLED) { in scrn_update()
2405 if (!(scp->status & (MOUSE_VISIBLE | MOUSE_HIDDEN))) { in scrn_update()
2406 scp->status &= ~MOUSE_MOVED; in scrn_update()
2407 sc_draw_mouse_image(scp); in scrn_update()
2412 scp->end = 0; in scrn_update()
2413 scp->start = scp->xsize * scp->ysize - 1; in scrn_update()
2415 SC_VIDEO_UNLOCK(scp->sc); in scrn_update()
2457 scr_stat *scp; in scsplash_saver() local
2463 scp = sc->cur_scp; in scsplash_saver()
2467 set_scrn_saver_mode(scp, -1, NULL, 0); in scsplash_saver()
2472 restore_scrn_saver_mode(scp, FALSE); in scsplash_saver()
2478 restore_scrn_saver_mode(scp, TRUE); in scsplash_saver()
2487 restore_scrn_saver_mode(scp, TRUE); in scsplash_saver()
2541 set_scrn_saver_mode(scr_stat *scp, int mode, u_char *pal, int border) in set_scrn_saver_mode() argument
2545 /* assert(scp == scp->sc->cur_scp) */ in set_scrn_saver_mode()
2547 if (!ISGRAPHSC(scp)) in set_scrn_saver_mode()
2548 sc_remove_cursor_image(scp); in set_scrn_saver_mode()
2549 scp->splash_save_mode = scp->mode; in set_scrn_saver_mode()
2550 scp->splash_save_status = scp->status & (GRAPHICS_MODE | PIXEL_MODE); in set_scrn_saver_mode()
2551 scp->status &= ~(GRAPHICS_MODE | PIXEL_MODE); in set_scrn_saver_mode()
2552 scp->status |= (UNKNOWN_MODE | SAVER_RUNNING); in set_scrn_saver_mode()
2553 scp->sc->flags |= SC_SCRN_BLANKED; in set_scrn_saver_mode()
2558 scp->mode = mode; in set_scrn_saver_mode()
2559 if (set_mode(scp) == 0) { in set_scrn_saver_mode()
2560 if (scp->sc->adp->va_info.vi_flags & V_INFO_GRAPHICS) in set_scrn_saver_mode()
2561 scp->status |= GRAPHICS_MODE; in set_scrn_saver_mode()
2564 vidd_load_palette(scp->sc->adp, pal); in set_scrn_saver_mode()
2566 sc_set_border(scp, border); in set_scrn_saver_mode()
2570 scp->mode = scp->splash_save_mode; in set_scrn_saver_mode()
2571 scp->status &= ~(UNKNOWN_MODE | SAVER_RUNNING); in set_scrn_saver_mode()
2572 scp->status |= scp->splash_save_status; in set_scrn_saver_mode()
2579 restore_scrn_saver_mode(scr_stat *scp, int changemode) in restore_scrn_saver_mode() argument
2585 /* assert(scp == scp->sc->cur_scp) */ in restore_scrn_saver_mode()
2587 mode = scp->mode; in restore_scrn_saver_mode()
2588 status = scp->status; in restore_scrn_saver_mode()
2589 scp->mode = scp->splash_save_mode; in restore_scrn_saver_mode()
2590 scp->status &= ~(UNKNOWN_MODE | SAVER_RUNNING); in restore_scrn_saver_mode()
2591 scp->status |= scp->splash_save_status; in restore_scrn_saver_mode()
2592 scp->sc->flags &= ~SC_SCRN_BLANKED; in restore_scrn_saver_mode()
2594 if (!ISGRAPHSC(scp)) in restore_scrn_saver_mode()
2595 sc_draw_cursor_image(scp); in restore_scrn_saver_mode()
2600 if (set_mode(scp) == 0) { in restore_scrn_saver_mode()
2603 if (scp->sc->adp->va_info.vi_mem_model == V_INFO_MM_DIRECT) in restore_scrn_saver_mode()
2604 vidd_load_palette(scp->sc->adp, scp->sc->palette2); in restore_scrn_saver_mode()
2607 vidd_load_palette(scp->sc->adp, scp->sc->palette); in restore_scrn_saver_mode()
2613 scp->mode = mode; in restore_scrn_saver_mode()
2614 scp->status = status; in restore_scrn_saver_mode()
2916 vt_proc_alive(scr_stat *scp) in vt_proc_alive() argument
2920 if (scp->proc) { in vt_proc_alive()
2921 if ((p = pfind(scp->pid)) != NULL) in vt_proc_alive()
2923 if (scp->proc == p) in vt_proc_alive()
2925 scp->proc = NULL; in vt_proc_alive()
2926 scp->smode.mode = VT_AUTO; in vt_proc_alive()
2927 DPRINTF(5, ("vt controlling process %d died\n", scp->pid)); in vt_proc_alive()
2933 signal_vt_rel(scr_stat *scp) in signal_vt_rel() argument
2935 if (scp->smode.mode != VT_PROCESS) in signal_vt_rel()
2937 scp->status |= SWITCH_WAIT_REL; in signal_vt_rel()
2938 PROC_LOCK(scp->proc); in signal_vt_rel()
2939 kern_psignal(scp->proc, scp->smode.relsig); in signal_vt_rel()
2940 PROC_UNLOCK(scp->proc); in signal_vt_rel()
2941 DPRINTF(5, ("sending relsig to %d\n", scp->pid)); in signal_vt_rel()
2946 signal_vt_acq(scr_stat *scp) in signal_vt_acq() argument
2948 if (scp->smode.mode != VT_PROCESS) in signal_vt_acq()
2950 if (scp->sc->unit == sc_console_unit) in signal_vt_acq()
2952 scp->status |= SWITCH_WAIT_ACQ; in signal_vt_acq()
2953 PROC_LOCK(scp->proc); in signal_vt_acq()
2954 kern_psignal(scp->proc, scp->smode.acqsig); in signal_vt_acq()
2955 PROC_UNLOCK(scp->proc); in signal_vt_acq()
2956 DPRINTF(5, ("sending acqsig to %d\n", scp->pid)); in signal_vt_acq()
2961 finish_vt_rel(scr_stat *scp, int release, int *s) in finish_vt_rel() argument
2963 if (scp == scp->sc->old_scp && scp->status & SWITCH_WAIT_REL) { in finish_vt_rel()
2964 scp->status &= ~SWITCH_WAIT_REL; in finish_vt_rel()
2966 *s = do_switch_scr(scp->sc, *s); in finish_vt_rel()
2968 scp->sc->switch_in_progress = 0; in finish_vt_rel()
2975 finish_vt_acq(scr_stat *scp) in finish_vt_acq() argument
2977 if (scp == scp->sc->new_scp && scp->status & SWITCH_WAIT_ACQ) { in finish_vt_acq()
2978 scp->status &= ~SWITCH_WAIT_ACQ; in finish_vt_acq()
2979 scp->sc->switch_in_progress = 0; in finish_vt_acq()
2988 scr_stat *scp; in exchange_scr() local
2998 scp = sc->cur_scp = sc->new_scp; in exchange_scr()
2999 if (sc->old_scp->mode != scp->mode || ISUNKNOWNSC(sc->old_scp)) in exchange_scr()
3000 set_mode(scp); in exchange_scr()
3002 sc_vtb_init(&scp->scr, VTB_FRAMEBUFFER, scp->xsize, scp->ysize, in exchange_scr()
3004 scp->status |= MOUSE_HIDDEN; in exchange_scr()
3005 sc_move_cursor(scp, scp->xpos, scp->ypos); in exchange_scr()
3006 if (!ISGRAPHSC(scp)) in exchange_scr()
3007 sc_set_cursor_image(scp); in exchange_scr()
3018 sc_set_border(scp, scp->border); in exchange_scr()
3021 if (sc->kbd_open_level == 0 && sc->old_scp->kbd_mode != scp->kbd_mode) in exchange_scr()
3022 (void)kbdd_ioctl(sc->kbd, KDSKBMODE, (caddr_t)&scp->kbd_mode); in exchange_scr()
3023 update_kbd_state(scp, scp->status, LOCK_MASK); in exchange_scr()
3025 mark_all(scp); in exchange_scr()
3029 sc_puts(scr_stat *scp, u_char *buf, int len) in sc_puts() argument
3033 if (!sticky_splash && scp == scp->sc->cur_scp && !sc_saver_keyb_only) in sc_puts()
3037 if (scp->tsw) in sc_puts()
3038 (*scp->tsw->te_puts)(scp, buf, len); in sc_puts()
3039 if (scp->sc->delayed_next_scr) in sc_puts()
3040 sc_switch_scr(scp->sc, scp->sc->delayed_next_scr - 1); in sc_puts()
3044 sc_draw_cursor_image(scr_stat *scp) in sc_draw_cursor_image() argument
3046 /* assert(scp == scp->sc->cur_scp); */ in sc_draw_cursor_image()
3047 SC_VIDEO_LOCK(scp->sc); in sc_draw_cursor_image()
3048 (*scp->rndr->draw_cursor)(scp, scp->cursor_pos, in sc_draw_cursor_image()
3049 scp->curs_attr.flags & CONS_BLINK_CURSOR, TRUE, in sc_draw_cursor_image()
3050 sc_inside_cutmark(scp, scp->cursor_pos)); in sc_draw_cursor_image()
3051 scp->cursor_oldpos = scp->cursor_pos; in sc_draw_cursor_image()
3052 SC_VIDEO_UNLOCK(scp->sc); in sc_draw_cursor_image()
3056 sc_remove_cursor_image(scr_stat *scp) in sc_remove_cursor_image() argument
3058 /* assert(scp == scp->sc->cur_scp); */ in sc_remove_cursor_image()
3059 SC_VIDEO_LOCK(scp->sc); in sc_remove_cursor_image()
3060 (*scp->rndr->draw_cursor)(scp, scp->cursor_oldpos, in sc_remove_cursor_image()
3061 scp->curs_attr.flags & CONS_BLINK_CURSOR, FALSE, in sc_remove_cursor_image()
3062 sc_inside_cutmark(scp, scp->cursor_oldpos)); in sc_remove_cursor_image()
3063 SC_VIDEO_UNLOCK(scp->sc); in sc_remove_cursor_image()
3067 update_cursor_image(scr_stat *scp) in update_cursor_image() argument
3069 /* assert(scp == scp->sc->cur_scp); */ in update_cursor_image()
3070 sc_remove_cursor_image(scp); in update_cursor_image()
3071 sc_set_cursor_image(scp); in update_cursor_image()
3072 sc_draw_cursor_image(scp); in update_cursor_image()
3076 sc_set_cursor_image(scr_stat *scp) in sc_set_cursor_image() argument
3078 scp->curs_attr = scp->base_curs_attr; in sc_set_cursor_image()
3079 if (scp->curs_attr.flags & CONS_HIDDEN_CURSOR) { in sc_set_cursor_image()
3082 scp->curs_attr.flags = CONS_CHAR_CURSOR; in sc_set_cursor_image()
3083 scp->curs_attr.base = scp->curs_attr.height = 0; in sc_set_cursor_image()
3084 } else if (scp->curs_attr.flags & CONS_CHAR_CURSOR) { in sc_set_cursor_image()
3085 scp->curs_attr.base = in sc_set_cursor_image()
3086 imin(scp->base_curs_attr.base, scp->font_size - 1); in sc_set_cursor_image()
3087 scp->curs_attr.height = imin(scp->base_curs_attr.height, in sc_set_cursor_image()
3088 scp->font_size - scp->curs_attr.base); in sc_set_cursor_image()
3090 scp->curs_attr.base = 0; in sc_set_cursor_image()
3091 scp->curs_attr.height = scp->font_size; in sc_set_cursor_image()
3094 /* assert(scp == scp->sc->cur_scp); */ in sc_set_cursor_image()
3095 SC_VIDEO_LOCK(scp->sc); in sc_set_cursor_image()
3096 (*scp->rndr->set_cursor)(scp, scp->curs_attr.base, in sc_set_cursor_image()
3097 scp->curs_attr.height, scp->curs_attr.flags & CONS_BLINK_CURSOR); in sc_set_cursor_image()
3098 SC_VIDEO_UNLOCK(scp->sc); in sc_set_cursor_image()
3121 change_cursor_shape(scr_stat *scp, int flags, int base, int height) in change_cursor_shape() argument
3123 if ((scp == scp->sc->cur_scp) && !ISGRAPHSC(scp)) in change_cursor_shape()
3124 sc_remove_cursor_image(scp); in change_cursor_shape()
3127 scp->base_curs_attr = scp->dflt_curs_attr; in change_cursor_shape()
3129 sc_adjust_ca(&scp->dflt_curs_attr, flags, base, height); in change_cursor_shape()
3130 scp->base_curs_attr = scp->dflt_curs_attr; in change_cursor_shape()
3132 sc_adjust_ca(&scp->base_curs_attr, flags, base, height); in change_cursor_shape()
3134 if ((scp == scp->sc->cur_scp) && !ISGRAPHSC(scp)) { in change_cursor_shape()
3135 sc_set_cursor_image(scp); in change_cursor_shape()
3136 sc_draw_cursor_image(scp); in change_cursor_shape()
3141 sc_change_cursor_shape(scr_stat *scp, int flags, int base, int height) in sc_change_cursor_shape() argument
3154 change_cursor_shape(scp, flags, base, height); in sc_change_cursor_shape()
3160 sc = scp->sc; in sc_change_cursor_shape()
3172 if ((scp = sc_get_stat(tp)) == NULL) in sc_change_cursor_shape()
3174 scp->dflt_curs_attr = sc->curs_attr; in sc_change_cursor_shape()
3175 change_cursor_shape(scp, CONS_RESET_CURSOR, -1, -1); in sc_change_cursor_shape()
3219 scr_stat *scp; in scinit() local
3311 scp = &main_console; in scinit()
3312 init_scp(sc, sc->first_vty, scp); in scinit()
3313 sc_vtb_init(&scp->vtb, VTB_MEMORY, scp->xsize, in scinit()
3314 scp->ysize, (void *)sc_buffer, FALSE); in scinit()
3315 if (sc_init_emulator(scp, SC_DFLT_TERM)) in scinit()
3316 sc_init_emulator(scp, "*"); in scinit()
3317 (*scp->tsw->te_default_attr)( in scinit()
3318 scp, SC_KERNEL_CONS_ATTR, SC_KERNEL_CONS_REV_ATTR); in scinit()
3324 scp = alloc_scp(sc, sc->first_vty); in scinit()
3325 SC_STAT(sc->dev[0]) = scp; in scinit()
3327 sc->cur_scp = scp; in scinit()
3330 sc_vtb_init(&scp->scr, VTB_FRAMEBUFFER, scp->xsize, scp->ysize, in scinit()
3331 (void *)scp->sc->adp->va_window, FALSE); in scinit()
3332 if (ISTEXTSC(scp)) in scinit()
3333 sc_vtb_copy(&scp->scr, 0, &scp->vtb, 0, in scinit()
3334 scp->xsize * scp->ysize); in scinit()
3337 if (col >= scp->xsize) in scinit()
3339 if (row >= scp->ysize) in scinit()
3340 row = scp->ysize - 1; in scinit()
3341 scp->xpos = col; in scinit()
3342 scp->ypos = row; in scinit()
3343 scp->cursor_pos = scp->cursor_oldpos = row * scp->xsize + col; in scinit()
3344 (*scp->tsw->te_sync)(scp); in scinit()
3347 sc->dflt_curs_attr.height = howmany(scp->font_size, 8); in scinit()
3355 scp->base_curs_attr = scp->dflt_curs_attr = sc->curs_attr; in scinit()
3356 scp->curs_attr = scp->base_curs_attr; in scinit()
3359 sc_mouse_move(scp, scp->xpixel / 2, scp->ypixel / 2); in scinit()
3361 if (!ISGRAPHSC(scp)) { in scinit()
3362 sc_set_cursor_image(scp); in scinit()
3363 sc_draw_cursor_image(scp); in scinit()
3375 if (scp->font_size < 14) { in scinit()
3376 sc_load_font(scp, 0, 8, 8, sc->font_8, 0, 256); in scinit()
3377 } else if (scp->font_size >= 16) { in scinit()
3379 scp, 0, 16, 8, sc->font_16, 0, 256); in scinit()
3382 scp, 0, 14, 8, sc->font_14, 0, 256); in scinit()
3385 if (scp->font_size < 14) { in scinit()
3386 sc_save_font(scp, 0, 8, 8, sc->font_8, 0, 256); in scinit()
3388 } else if (scp->font_size >= 16) { in scinit()
3390 scp, 0, 16, 8, sc->font_16, 0, 256); in scinit()
3394 scp, 0, 14, 8, sc->font_14, 0, 256); in scinit()
3399 sc_show_font(scp, 0); in scinit()
3435 scr_stat *scp; in scterm() local
3461 scp = sc_get_stat(sc->dev[0]); in scterm()
3462 if (scp->tsw) in scterm()
3463 (*scp->tsw->te_term)(scp, &scp->ts); in scterm()
3468 free(scp->ts, M_DEVBUF); in scterm()
3546 sc_clean_up(scr_stat *scp) in sc_clean_up() argument
3552 if (scp->sc->flags & SC_SCRN_BLANKED) { in sc_clean_up()
3555 if ((error = wait_scrn_saver_stop(scp->sc))) in sc_clean_up()
3559 scp->status |= MOUSE_HIDDEN; in sc_clean_up()
3560 sc_remove_mouse_image(scp); in sc_clean_up()
3561 sc_remove_cutmarking(scp); in sc_clean_up()
3566 sc_alloc_scr_buffer(scr_stat *scp, int wait, int discard) in sc_alloc_scr_buffer() argument
3571 old = scp->vtb; in sc_alloc_scr_buffer()
3572 sc_vtb_init(&new, VTB_MEMORY, scp->xsize, scp->ysize, NULL, wait); in sc_alloc_scr_buffer()
3575 scp->cursor_oldpos = scp->cursor_pos; in sc_alloc_scr_buffer()
3580 sc_vtb_copy(&old, 0, &new, 0, scp->xsize * scp->ysize); in sc_alloc_scr_buffer()
3581 scp->vtb = new; in sc_alloc_scr_buffer()
3583 scp->vtb = new; in sc_alloc_scr_buffer()
3589 sc_mouse_move(scp, scp->xpixel / 2, scp->ypixel / 2); in sc_alloc_scr_buffer()
3596 scr_stat *scp; in alloc_scp() local
3600 scp = (scr_stat *)malloc(sizeof(scr_stat), M_DEVBUF, M_WAITOK); in alloc_scp()
3601 init_scp(sc, vty, scp); in alloc_scp()
3603 sc_alloc_scr_buffer(scp, TRUE, TRUE); in alloc_scp()
3604 if (sc_init_emulator(scp, SC_DFLT_TERM)) in alloc_scp()
3605 sc_init_emulator(scp, "*"); in alloc_scp()
3608 sc_alloc_cut_buffer(scp, TRUE); in alloc_scp()
3612 sc_alloc_history_buffer(scp, 0, 0, TRUE); in alloc_scp()
3615 return scp; in alloc_scp()
3619 init_scp(sc_softc_t *sc, int vty, scr_stat *scp) in init_scp() argument
3623 bzero(scp, sizeof(*scp)); in init_scp()
3625 scp->index = vty; in init_scp()
3626 scp->sc = sc; in init_scp()
3627 scp->status = 0; in init_scp()
3628 scp->mode = sc->initial_mode; in init_scp()
3629 vidd_get_info(sc->adp, scp->mode, &info); in init_scp()
3631 scp->status |= GRAPHICS_MODE; in init_scp()
3632 scp->xpixel = info.vi_width; in init_scp()
3633 scp->ypixel = info.vi_height; in init_scp()
3634 scp->xsize = info.vi_width / info.vi_cwidth; in init_scp()
3635 scp->ysize = info.vi_height / info.vi_cheight; in init_scp()
3636 scp->font_size = 0; in init_scp()
3637 scp->font = NULL; in init_scp()
3639 scp->xsize = info.vi_width; in init_scp()
3640 scp->ysize = info.vi_height; in init_scp()
3641 scp->xpixel = scp->xsize * info.vi_cwidth; in init_scp()
3642 scp->ypixel = scp->ysize * info.vi_cheight; in init_scp()
3645 scp->font_size = info.vi_cheight; in init_scp()
3646 scp->font_width = info.vi_cwidth; in init_scp()
3649 scp->font = sc->font_8; in init_scp()
3651 scp->font = sc->font_16; in init_scp()
3653 scp->font = sc->font_14; in init_scp()
3655 scp->font = NULL; in init_scp()
3658 sc_vtb_init(&scp->vtb, VTB_MEMORY, 0, 0, NULL, FALSE); in init_scp()
3659 sc_vtb_init(&scp->scr, VTB_FRAMEBUFFER, 0, 0, NULL, FALSE); in init_scp()
3660 scp->xoff = scp->yoff = 0; in init_scp()
3661 scp->xpos = scp->ypos = 0; in init_scp()
3662 scp->start = scp->xsize * scp->ysize - 1; in init_scp()
3663 scp->end = 0; in init_scp()
3664 scp->tsw = NULL; in init_scp()
3665 scp->ts = NULL; in init_scp()
3666 scp->rndr = NULL; in init_scp()
3667 scp->border = (SC_NORM_ATTR >> 4) & 0x0f; in init_scp()
3668 scp->base_curs_attr = scp->dflt_curs_attr = sc->curs_attr; in init_scp()
3669 scp->mouse_cut_start = scp->xsize * scp->ysize; in init_scp()
3670 scp->mouse_cut_end = -1; in init_scp()
3671 scp->mouse_signal = 0; in init_scp()
3672 scp->mouse_pid = 0; in init_scp()
3673 scp->mouse_proc = NULL; in init_scp()
3674 scp->kbd_mode = K_XLATE; in init_scp()
3675 scp->bell_pitch = bios_value.bell_pitch; in init_scp()
3676 scp->bell_duration = BELL_DURATION; in init_scp()
3677 scp->status |= (bios_value.shift_state & NLKED); in init_scp()
3678 scp->status |= CURSOR_ENABLED | MOUSE_HIDDEN; in init_scp()
3679 scp->pid = 0; in init_scp()
3680 scp->proc = NULL; in init_scp()
3681 scp->smode.mode = VT_AUTO; in init_scp()
3682 scp->history = NULL; in init_scp()
3683 scp->history_pos = 0; in init_scp()
3684 scp->history_size = 0; in init_scp()
3688 sc_init_emulator(scr_stat *scp, char *name) in sc_init_emulator() argument
3696 sw = scp->tsw; in sc_init_emulator()
3704 rndr = sc_render_match(scp, sw->te_renderer, in sc_init_emulator()
3705 scp->status & (GRAPHICS_MODE | PIXEL_MODE)); in sc_init_emulator()
3708 rndr = sc_render_match(scp, scp->sc->adp->va_name, in sc_init_emulator()
3709 scp->status & (GRAPHICS_MODE | PIXEL_MODE)); in sc_init_emulator()
3714 if (sw == scp->tsw) { in sc_init_emulator()
3715 error = (*sw->te_init)(scp, &scp->ts, SC_TE_WARM_INIT); in sc_init_emulator()
3716 scp->rndr = rndr; in sc_init_emulator()
3717 scp->rndr->init(scp); in sc_init_emulator()
3718 sc_clear_screen(scp); in sc_init_emulator()
3727 error = (*sw->te_init)(scp, &p, SC_TE_COLD_INIT); in sc_init_emulator()
3731 if (scp->tsw) in sc_init_emulator()
3732 (*scp->tsw->te_term)(scp, &scp->ts); in sc_init_emulator()
3733 if (scp->ts != NULL) in sc_init_emulator()
3734 free(scp->ts, M_DEVBUF); in sc_init_emulator()
3735 scp->tsw = sw; in sc_init_emulator()
3736 scp->ts = p; in sc_init_emulator()
3737 scp->rndr = rndr; in sc_init_emulator()
3738 scp->rndr->init(scp); in sc_init_emulator()
3740 (*sw->te_default_attr)(scp, SC_NORM_ATTR, SC_NORM_REV_ATTR); in sc_init_emulator()
3741 sc_clear_screen(scp); in sc_init_emulator()
3755 scr_stat *scp; in scgetc() local
3773 scp = sc->cur_scp; in scgetc()
3784 scp, bios_value.bell_pitch, BELL_DURATION); in scgetc()
3798 if (sc->kbd_open_level == 0 && scp->kbd_mode != K_XLATE) in scgetc()
3802 if (!ISGRAPHSC(scp) && scp->history && scp->status & SLKED) { in scgetc()
3803 scp->status &= ~CURSOR_ENABLED; in scgetc()
3804 sc_remove_cursor_image(scp); in scgetc()
3807 if (!(scp->status & BUFFER_SAVED)) { in scgetc()
3808 scp->status |= BUFFER_SAVED; in scgetc()
3809 sc_hist_save(scp); in scgetc()
3814 sc_remove_cutmarking(scp); in scgetc()
3815 sc_hist_home(scp); in scgetc()
3819 sc_remove_cutmarking(scp); in scgetc()
3820 sc_hist_end(scp); in scgetc()
3824 sc_remove_cutmarking(scp); in scgetc()
3825 if (sc_hist_up_line(scp)) in scgetc()
3827 sc_bell(scp, bios_value.bell_pitch, in scgetc()
3832 sc_remove_cutmarking(scp); in scgetc()
3833 if (sc_hist_down_line(scp)) in scgetc()
3835 sc_bell(scp, bios_value.bell_pitch, in scgetc()
3840 sc_remove_cutmarking(scp); in scgetc()
3841 for (i = 0; i < scp->ysize; i++) in scgetc()
3842 if (sc_hist_up_line(scp)) { in scgetc()
3844 sc_bell(scp, in scgetc()
3852 sc_remove_cutmarking(scp); in scgetc()
3853 for (i = 0; i < scp->ysize; i++) in scgetc()
3854 if (sc_hist_down_line(scp)) { in scgetc()
3856 sc_bell(scp, in scgetc()
3887 scp->status |= SLKED; in scgetc()
3889 if (scp->status & SLKED) { in scgetc()
3890 scp->status &= ~SLKED; in scgetc()
3892 if (scp->status & in scgetc()
3895 scp)) in scgetc()
3897 scp); in scgetc()
3898 scp->status &= in scgetc()
3900 scp->status |= in scgetc()
3903 scp); in scgetc()
3907 tp = SC_DEV(sc, scp->index); in scgetc()
3918 sc_mouse_paste(scp); in scgetc()
3958 if (!ISGRAPHSC(scp)) { in scgetc()
4009 this_scr = scp->index; in scgetc()
4018 scp->sc, sc->first_vty + i); in scgetc()
4025 this_scr = scp->index; in scgetc()
4035 scp->sc, sc->first_vty + i); in scgetc()
4044 sc_switch_scr(scp->sc, in scgetc()
4072 scr_stat *scp; in sctty_mmap() local
4074 scp = sc_get_stat(tp); in sctty_mmap()
4075 if (scp != scp->sc->cur_scp) in sctty_mmap()
4077 return vidd_mmap(scp->sc->adp, offset, paddr, nprot, memattr); in sctty_mmap()
4081 update_font(scr_stat *scp) in update_font() argument
4085 if (!(scp->status & GRAPHICS_MODE)) { in update_font()
4086 if (!(scp->status & PIXEL_MODE) && in update_font()
4087 ISFONTAVAIL(scp->sc->adp->va_flags)) { in update_font()
4088 if (scp->font_size < 14) { in update_font()
4089 if (scp->sc->fonts_loaded & FONT_8) in update_font()
4090 sc_load_font(scp, 0, 8, 8, in update_font()
4091 scp->sc->font_8, 0, 256); in update_font()
4092 } else if (scp->font_size >= 16) { in update_font()
4093 if (scp->sc->fonts_loaded & FONT_16) in update_font()
4094 sc_load_font(scp, 0, 16, 8, in update_font()
4095 scp->sc->font_16, 0, 256); in update_font()
4097 if (scp->sc->fonts_loaded & FONT_14) in update_font()
4098 sc_load_font(scp, 0, 14, 8, in update_font()
4099 scp->sc->font_14, 0, 256); in update_font()
4108 sc_show_font(scp, 0); in update_font()
4110 mark_all(scp); in update_font()
4116 save_kbd_state(scr_stat *scp) in save_kbd_state() argument
4121 error = kbdd_ioctl(scp->sc->kbd, KDGKBSTATE, (caddr_t)&state); in save_kbd_state()
4125 scp->status &= ~LOCK_MASK; in save_kbd_state()
4126 scp->status |= state; in save_kbd_state()
4132 update_kbd_state(scr_stat *scp, int new_bits, int mask) in update_kbd_state() argument
4138 error = kbdd_ioctl(scp->sc->kbd, KDGKBSTATE, (caddr_t)&state); in update_kbd_state()
4148 error = kbdd_ioctl(scp->sc->kbd, KDSKBSTATE, (caddr_t)&state); in update_kbd_state()
4155 update_kbd_leds(scr_stat *scp, int which) in update_kbd_leds() argument
4160 error = kbdd_ioctl(scp->sc->kbd, KDSETLED, (caddr_t)&which); in update_kbd_leds()
4167 set_mode(scr_stat *scp) in set_mode() argument
4172 if (vidd_get_info(scp->sc->adp, scp->mode, &info)) in set_mode()
4176 if (scp != scp->sc->cur_scp) in set_mode()
4180 vidd_set_mode(scp->sc->adp, scp->mode); in set_mode()
4181 scp->rndr->init(scp); in set_mode()
4182 sc_vtb_init(&scp->scr, VTB_FRAMEBUFFER, scp->xsize, scp->ysize, in set_mode()
4183 (void *)scp->sc->adp->va_window, FALSE); in set_mode()
4185 update_font(scp); in set_mode()
4187 sc_set_border(scp, scp->border); in set_mode()
4188 sc_set_cursor_image(scp); in set_mode()
4194 sc_set_border(scr_stat *scp, int color) in sc_set_border() argument
4196 SC_VIDEO_LOCK(scp->sc); in sc_set_border()
4197 (*scp->rndr->draw_border)(scp, color); in sc_set_border()
4198 SC_VIDEO_UNLOCK(scp->sc); in sc_set_border()
4203 sc_load_font(scr_stat *scp, int page, int size, int width, u_char *buf, in sc_load_font() argument
4208 sc = scp->sc; in sc_load_font()
4215 sc_save_font(scr_stat *scp, int page, int size, int width, u_char *buf, in sc_save_font() argument
4220 sc = scp->sc; in sc_save_font()
4227 sc_show_font(scr_stat *scp, int page) in sc_show_font() argument
4229 vidd_show_font(scp->sc->adp, page); in sc_show_font()
4234 sc_paste(scr_stat *scp, const u_char *p, int count) in sc_paste() argument
4239 tp = SC_DEV(scp->sc, scp->sc->cur_scp->index); in sc_paste()
4242 rmap = scp->sc->scr_rmap; in sc_paste()
4249 sc_respond(scr_stat *scp, const u_char *p, int count, int wakeup) in sc_respond() argument
4253 tp = SC_DEV(scp->sc, scp->sc->cur_scp->index); in sc_respond()
4269 sc_bell(scr_stat *scp, int pitch, int duration) in sc_bell() argument
4274 if (scp != scp->sc->cur_scp && (scp->sc->flags & SC_QUIET_BELL)) in sc_bell()
4277 if (scp->sc->flags & SC_VISUAL_BELL) { in sc_bell()
4278 if (scp->sc->blink_in_progress) in sc_bell()
4280 scp->sc->blink_in_progress = 3; in sc_bell()
4281 if (scp != scp->sc->cur_scp) in sc_bell()
4282 scp->sc->blink_in_progress += 2; in sc_bell()
4283 blink_screen(scp->sc->cur_scp); in sc_bell()
4285 if (scp != scp->sc->cur_scp) in sc_bell()
4302 scr_stat *scp = arg; in blink_screen() local
4305 if (ISGRAPHSC(scp) || (scp->sc->blink_in_progress <= 1)) { in blink_screen()
4306 scp->sc->blink_in_progress = 0; in blink_screen()
4307 mark_all(scp); in blink_screen()
4308 tp = SC_DEV(scp->sc, scp->index); in blink_screen()
4311 if (scp->sc->delayed_next_scr) in blink_screen()
4312 sc_switch_scr(scp->sc, scp->sc->delayed_next_scr - 1); in blink_screen()
4314 (*scp->rndr->draw)(scp, 0, scp->xsize * scp->ysize, in blink_screen()
4315 scp->sc->blink_in_progress & 1); in blink_screen()
4316 scp->sc->blink_in_progress--; in blink_screen()
4317 callout_reset_sbt(&scp->sc->cblink, SBT_1S / 15, 0, in blink_screen()
4318 blink_screen, scp, C_PREL(0)); in blink_screen()