📄 pcvt_out.c
字号:
{ if(svsp->which_fkl == SYS_FKL) { if(svsp->force24) { svsp->force24 = 0; swritefkl(2,(u_char *)"FORCE24 ENABLE ",svsp); } else { svsp->force24 = 1; swritefkl(2,(u_char *)"FORCE24 ENABLE *",svsp); } set_screen_size(svsp, vgacs[(svsp->vga_charset)].screen_size); }}#if PCVT_SHOWKEYS/*---------------------------------------------------------------------------* * toggle keyboard scancode display *---------------------------------------------------------------------------*/voidtoggl_kbddbg(struct video_state *svsp){ if((svsp->which_fkl == SYS_FKL) && (svsp == &vs[0])) { if(keyboard_show) { keyboard_show = 0; swritefkl(3,(u_char *)"KEYBSCANDISPLAY ",svsp); } else { keyboard_show = 1; swritefkl(3,(u_char *)"KEYBSCANDISPLAY*",svsp); } }}#endif /* PCVT_SHOWKEYS *//*---------------------------------------------------------------------------* * toggle display functions *---------------------------------------------------------------------------*/voidtoggl_dspf(struct video_state *svsp){ if(svsp->which_fkl == SYS_FKL) { if(svsp->dis_fnc) { svsp->dis_fnc = 0; swritefkl(6,(u_char *)"DISPLAY FUNCTNS ",svsp); } else { svsp->dis_fnc = 1; swritefkl(6,(u_char *)"DISPLAY FUNCTNS*",svsp); } }}/*---------------------------------------------------------------------------* * auto wrap on/off *---------------------------------------------------------------------------*/voidtoggl_awm(struct video_state *svsp){ if(svsp->which_fkl == SYS_FKL) { if(svsp->m_awm) { svsp->m_awm = 0; swritefkl(7,(u_char *)"AUTOWRAPENABLE ",svsp); } else { svsp->m_awm = 1; swritefkl(7,(u_char *)"AUTOWRAPENABLE *",svsp); } }}/*---------------------------------------------------------------------------* * bell on/off *---------------------------------------------------------------------------*/voidtoggl_bell(struct video_state *svsp){ if(svsp->which_fkl == SYS_FKL) { if(svsp->bell_on) { svsp->bell_on = 0; swritefkl(4,(u_char *)"BELL ENABLE ",svsp); } else { svsp->bell_on = 1; swritefkl(4,(u_char *)"BELL ENABLE *",svsp); } }}/*---------------------------------------------------------------------------* * 7/8 bit usage *---------------------------------------------------------------------------*/voidtoggl_sevenbit(struct video_state *svsp){ if(svsp->which_fkl == SYS_FKL) { if(svsp->sevenbit) { svsp->sevenbit = 0; swritefkl(5,(u_char *)"8-BIT ENABLE *",svsp); } else { svsp->sevenbit = 1; swritefkl(5,(u_char *)"8-BIT ENABLE ",svsp); } }}/*---------------------------------------------------------------------------* * 80 / 132 columns *---------------------------------------------------------------------------*/voidtoggl_columns(struct video_state *svsp){ if(svsp->which_fkl == SYS_FKL) { if(svsp->maxcol == SCR_COL132) { if(vt_col(svsp, SCR_COL80)) svsp->maxcol = 80; } else { if(vt_col(svsp, SCR_COL132)) svsp->maxcol = 132; } }}/*---------------------------------------------------------------------------* * toggle vga 80/132 column operation *---------------------------------------------------------------------------*/intvt_col(struct video_state *svsp, int cols){ if(vga_col(svsp, cols) == 0) return(0); if(cols == SCR_COL80) swritefkl(0,(u_char *)"132 COLUMNS ",svsp); else swritefkl(0,(u_char *)"132 COLUMNS*",svsp); fillw(user_attr | ' ', svsp->Crtat, svsp->maxcol * svsp->screen_rowsize); clr_parms(svsp); /* escape parameter init */ svsp->state = STATE_INIT; /* initial state */ svsp->col = 0; /* init row */ svsp->row = 0; /* init col */ svsp->cur_offset = 0; /* cursor offset init */ svsp->sc_flag = 0; /* invalidate saved cursor position */ svsp->scrr_beg = 0; /* reset scrolling region */ svsp->scrr_len = svsp->screen_rows; /*reset scrolling region legnth */ svsp->scrr_end = svsp->scrr_len - 1; svsp->transparent = 0; /* disable control code processing */ svsp->selchar = 0; /* selective attr off */ vt_initsel(svsp); /* re-init sel attr */ update_hp(svsp); /* update labels, row/col, page ind */ /* Update winsize struct to reflect screen size */ if(svsp->vs_tty) { svsp->vs_tty->t_winsize.ws_row = svsp->screen_rows; svsp->vs_tty->t_winsize.ws_col = svsp->maxcol; svsp->vs_tty->t_winsize.ws_xpixel = (cols == SCR_COL80)? 720: 1056; svsp->vs_tty->t_winsize.ws_ypixel = 400;#if PCVT_SIGWINCH if(svsp->vs_tty->t_pgrp) pgsignal(svsp->vs_tty->t_pgrp, SIGWINCH, 1);#endif /* PCVT_SIGWINCH */ } return(1);}/*---------------------------------------------------------------------------* * update HP stuff on screen *---------------------------------------------------------------------------*/voidupdate_hp(struct video_state *svsp){ if(svsp->vt_pure_mode != M_HPVT) return; fillw (user_attr | ' ', svsp->Crtat + svsp->screen_rows * svsp->maxcol, (svsp->screen_rowsize - svsp->screen_rows) * svsp->maxcol); if (!svsp->labels_on) return; /* update fkey labels */ fkl_off(svsp); fkl_on(svsp); if(vsp == svsp) { /* update current displayed screen indicator */ *((svsp->Crtat + ((svsp->screen_rows + 2) * svsp->maxcol)) + svsp->maxcol - 3) = user_attr | '['; *((svsp->Crtat + ((svsp->screen_rows + 2) * svsp->maxcol)) + svsp->maxcol - 2) = user_attr | current_video_screen + '0'; *((svsp->Crtat + ((svsp->screen_rows + 2) * svsp->maxcol)) + svsp->maxcol - 1) = user_attr | ']'; }}/*---------------------------------------------------------------------------* * initialize ANSI escape sequence parameter buffers *---------------------------------------------------------------------------*/voidclr_parms(struct video_state *svsp){ register int i; for(i=0; i < MAXPARMS; i++) svsp->parms[i] = 0; svsp->parmi = 0;}/*---------------------------------------------------------------------------* * * partial HP 2392 ANSI mode Emulator * ================================== * * this part takes over the emulation of some escape sequences * needed to handle the function key labels * * They are modeled after the corresponding escape sequences * introduced with the HP2392 terminals from Hewlett-Packard. * * see: * "HP2392A, Display Terminal Reference Manual", * HP Manual Part Number 02390-90001 * and: * Reference Manual Supplement * "2392A Display Terminal Option 049, ANSI Operation" * HP Manual Part Number 02390-90023EN * *---------------------------------------------------------------------------*/static voidhp_entry(U_char ch, struct video_state *svsp){ switch(svsp->hp_state) { case SHP_INIT: switch(ch) { case 'f': svsp->hp_state = SHP_AND_F; svsp->attribute = 0; svsp->key = 0; svsp->l_len = 0; svsp->s_len = 0; svsp->i = 0; break; case 'j': svsp->m_len = 0; svsp->hp_state = SHP_AND_J; break; case 's': svsp->hp_state = SHP_AND_ETE; break; default: svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; break; } break; case SHP_AND_F: if((ch >= '0') && (ch <= '8')) { svsp->attribute = ch; svsp->hp_state = SHP_AND_Fa; } else { svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; } break; case SHP_AND_Fa: if(ch == 'a') svsp->hp_state = SHP_AND_Fak; else if(ch == 'k') { svsp->key = svsp->attribute; svsp->hp_state = SHP_AND_Fakd; } else { svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; } break; case SHP_AND_Fak: if((ch >= '1') && (ch <= '8')) { svsp->key = ch; svsp->hp_state = SHP_AND_Fak1; } else { svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; } break; case SHP_AND_Fak1: if(ch == 'k') svsp->hp_state = SHP_AND_Fakd; else { svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; } break; case SHP_AND_Fakd: if(svsp->l_len > 16) { svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; } else if(ch >= '0' && ch <= '9') { svsp->l_len *= 10; svsp->l_len += (ch -'0'); } else if(ch == 'd') svsp->hp_state = SHP_AND_FakdL; else { svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; } break; case SHP_AND_FakdL: if(svsp->s_len > 80) { svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; } else if(ch >= '0' && ch <= '9') { svsp->s_len *= 10; svsp->s_len += (ch -'0'); } else if(ch == 'L') { svsp->hp_state = SHP_AND_FakdLl; svsp->transparent = 1; } else { svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; } break; case SHP_AND_FakdLl: svsp->l_buf[svsp->i] = ch; if(svsp->i >= svsp->l_len-1) { svsp->hp_state = SHP_AND_FakdLls; svsp->i = 0; if(svsp->s_len == 0) { svsp->state = STATE_INIT; svsp->hp_state = SHP_INIT; svsp->transparent = 0; svsp->i = 0; svsp->l_buf[svsp->l_len] = '\0'; svsp->s_buf[svsp->s_len] = '\0'; writefkl((svsp->key - '0' -1), svsp->l_buf, svsp); } } else svsp->i++; break; case SHP_AND_FakdLls: svsp->s_buf[svsp->i] = ch; if(svsp->i >= svsp->s_len-1) { svsp->state = STATE_INIT; svsp->hp_state = SHP_INIT; svsp->transparent = 0; svsp->i = 0; svsp->l_buf[svsp->l_len] = '\0'; svsp->s_buf[svsp->s_len] = '\0'; writefkl((svsp->key - '0' -1), svsp->l_buf, svsp); } else svsp->i++; break; case SHP_AND_J: switch(ch) { case '@': /* enable user keys, remove */ /* all labels & status from */ /* screen */ svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; fkl_off(svsp); break; case 'A': /* enable & display "modes" */ svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; fkl_on(svsp); sw_sfkl(svsp); break; case 'B': /* enable & display "user" */ svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; fkl_on(svsp); sw_ufkl(svsp); break; case 'C': /* remove (clear) status line*/ /* and restore current labels*/ svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; fkl_on(svsp); break; case 'R': /* enable usr/menu keys */ /* and fkey label modes */ svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; break; case 'S': /* disable usr/menu keys */ /* and fkey label modes */ svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': /* parameters for esc & j xx L mm */ svsp->m_len *= 10; svsp->m_len += (ch -'0'); break; case 'L': svsp->hp_state = SHP_AND_JL; svsp->i = 0; svsp->transparent = 1; break; default: svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; break; } break; case SHP_AND_JL: svsp->m_buf[svsp->i] = ch; if(svsp->i >= svsp->m_len-1) { svsp->state = STATE_INIT; svsp->hp_state = SHP_INIT; svsp->transparent = 0; svsp->i = 0; svsp->m_buf[svsp->m_len] = '\0'; /* display status line */ /* needs to be implemented */ /* see 2392 man, 3-14 */ } else svsp->i++; break; case SHP_AND_ETE: /* eat chars until uppercase */ if(ch >= '@' && ch <= 'Z') { svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; svsp->transparent = 0; } break; default: svsp->hp_state = SHP_INIT; svsp->state = STATE_INIT; svsp->transparent = 0; break; }}#endif /* NVT > 0 *//* ------------------------- E O F ------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -