📄 pcvt_vtf.c
字号:
ctp = csd_alternaterom1;#endif break; case '2': /* alt ROM, spec graphics */#ifdef HAVECSD_ALTERNATEROM2 ctp = csd_alternaterom2;#endif break; case '3': /* HP Roman 8, upper 128 chars*/#ifdef HAVECSD_ROMAN8 ctp = csd_roman8;#endif break; case '4': /* Dutch */#ifdef HAVECSD_DUTCH ctp = csd_dutch;#endif break; case '<': /* DEC Supplemental */#ifdef HAVECSD_SUPPLEMENTAL ctp = csd_supplemental;#endif break; case '=': /* Swiss */#ifdef HAVECSD_SWISS ctp = csd_swiss;#endif break; case '>': /* DEC Technical */#ifdef HAVECSD_TECHNICAL ctp = csd_technical;#endif break; default: break; } } swcsp(svsp, ctp);}/*---------------------------------------------------------------------------* * device attributes *---------------------------------------------------------------------------*/voidvt_da(struct video_state *svsp){ static u_char *response = (u_char *)DA_VT220; svsp->report_chars = response; svsp->report_count = 18; respond(svsp);}/*---------------------------------------------------------------------------* * screen alignment display *---------------------------------------------------------------------------*/voidvt_aln(struct video_state *svsp){ register int i; svsp->cur_offset = 0; svsp->col = 0; for(i=0; i < (svsp->screen_rows*svsp->maxcol); i++) { *(svsp->Crtat + svsp->cur_offset) = user_attr | 'E'; vt_selattr(svsp); svsp->cur_offset++; svsp->col++; } svsp->cur_offset = 0; /* reset everything ! */ svsp->col = 0; svsp->row = 0;}/*---------------------------------------------------------------------------* * request terminal parameters *---------------------------------------------------------------------------*/voidvt_reqtparm(struct video_state *svsp){ static u_char *answr = (u_char *)"\033[3;1;1;120;120;1;0x"; svsp->report_chars = answr; svsp->report_count = 20; respond(svsp);}/*---------------------------------------------------------------------------* * invoke selftest *---------------------------------------------------------------------------*/voidvt_tst(struct video_state *svsp){ clear_dld(svsp);}/*---------------------------------------------------------------------------* * device status reports *---------------------------------------------------------------------------*/voidvt_dsr(struct video_state *svsp){ static u_char *answr = (u_char *)"\033[0n"; static u_char *panswr = (u_char *)"\033[?13n"; /* Printer Unattached */ static u_char *udkanswr = (u_char *)"\033[?21n"; /* UDK Locked */ static u_char *langanswr = (u_char *)"\033[?27;1n"; /* North American*/ static u_char buffer[16]; int i = 0; switch(svsp->parms[0]) { case 5: /* return status */ svsp->report_chars = answr; svsp->report_count = 4; respond(svsp); break; case 6: /* return cursor position */ buffer[i++] = 0x1b; buffer[i++] = '['; if((svsp->row+1) > 10) buffer[i++] = ((svsp->row+1) / 10) + '0'; buffer[i++] = ((svsp->row+1) % 10) + '0'; buffer[i++] = ';'; if((svsp->col+1) > 10) buffer[i++] = ((svsp->col+1) / 10) + '0'; buffer[i++] = ((svsp->col+1) % 10) + '0'; buffer[i++] = 'R'; buffer[i++] = '\0'; svsp->report_chars = buffer; svsp->report_count = i; respond(svsp); break; case 15: /* return printer status */ svsp->report_chars = panswr; svsp->report_count = 6; respond(svsp); break; case 25: /* return udk status */ svsp->report_chars = udkanswr; svsp->report_count = 6; respond(svsp); break; case 26: /* return language status */ svsp->report_chars = langanswr; svsp->report_count = 8; respond(svsp); break; default: /* nothing else valid */ break; }}/*---------------------------------------------------------------------------* * IL - insert line *---------------------------------------------------------------------------*/voidvt_il(struct video_state *svsp){ register int p = svsp->parms[0]; if((svsp->row >= svsp->scrr_beg) && (svsp->row <= svsp->scrr_end)) { if(p <= 0) p = 1; else if(p > svsp->scrr_end - svsp->row) p = svsp->scrr_end - svsp->row; svsp->cur_offset -= svsp->col; svsp->col = 0; if(svsp->row == svsp->scrr_beg) roll_down(svsp, p); else { bcopy(svsp->Crtat + svsp->cur_offset, svsp->Crtat + svsp->cur_offset + (p * svsp->maxcol), svsp->maxcol * (svsp->scrr_end-svsp->row+1-p) * CHR ); fillw(user_attr | ' ', svsp->Crtat + svsp->cur_offset, p * svsp->maxcol); } }}/*---------------------------------------------------------------------------* * ICH - insert character *---------------------------------------------------------------------------*/voidvt_ic(struct video_state *svsp){ register int p = svsp->parms[0]; if(p <= 0) p = 1; else if(p > svsp->maxcol-svsp->col) p = svsp->maxcol-svsp->col; while(p--) { bcopy((svsp->Crtat + svsp->cur_offset), (svsp->Crtat + svsp->cur_offset) + 1, (((svsp->maxcol)-1)-svsp->col) * CHR); *(svsp->Crtat + svsp->cur_offset) = user_attr | ' '; vt_selattr(svsp); }}/*---------------------------------------------------------------------------* * DL - delete line *---------------------------------------------------------------------------*/voidvt_dl(struct video_state *svsp){ register int p = svsp->parms[0]; if((svsp->row >= svsp->scrr_beg) && (svsp->row <= svsp->scrr_end)) { if(p <= 0) p = 1; else if(p > svsp->scrr_end - svsp->row) p = svsp->scrr_end - svsp->row; svsp->cur_offset -= svsp->col; svsp->col = 0; if(svsp->row == svsp->scrr_beg) roll_up(svsp, p); else { bcopy(svsp->Crtat + svsp->cur_offset + (p * svsp->maxcol), svsp->Crtat + svsp->cur_offset, svsp->maxcol * (svsp->scrr_end-svsp->row+1-p) * CHR ); fillw(user_attr | ' ', svsp->Crtat + ((svsp->scrr_end-p+1) * svsp->maxcol), p * svsp->maxcol); } }}/*---------------------------------------------------------------------------* * DCH - delete character *---------------------------------------------------------------------------*/voidvt_dch(struct video_state *svsp){ register int p = svsp->parms[0]; if(p <= 0) p = 1; else if(p > svsp->maxcol-svsp->col) p = svsp->maxcol-svsp->col; while(p--) { bcopy((svsp->Crtat + svsp->cur_offset)+1, (svsp->Crtat + svsp->cur_offset), (((svsp->maxcol)-1) - svsp->col)* CHR ); *((svsp->Crtat + svsp->cur_offset) + ((svsp->maxcol)-1)-svsp->col) = user_attr | ' '; }}/*---------------------------------------------------------------------------* * scroll up *---------------------------------------------------------------------------*/voidvt_su(struct video_state *svsp){ register int p = svsp->parms[0]; if(p <= 0) p = 1; else if(p > svsp->screen_rows-1) p = svsp->screen_rows-1; roll_up(svsp, p);}/*---------------------------------------------------------------------------* * scroll down *---------------------------------------------------------------------------*/voidvt_sd(struct video_state *svsp){ register int p = svsp->parms[0]; if(p <= 0) p = 1; else if(p > svsp->screen_rows-1) p = svsp->screen_rows-1; roll_down(svsp, p);}/*---------------------------------------------------------------------------* * ECH - erase character *---------------------------------------------------------------------------*/voidvt_ech(struct video_state *svsp){ register int p = svsp->parms[0]; if(p <= 0) p = 1; else if(p > svsp->maxcol-svsp->col) p = svsp->maxcol-svsp->col; fillw(user_attr | ' ', (svsp->Crtat + svsp->cur_offset), p);}/*---------------------------------------------------------------------------* * media copy (NO PRINTER AVAILABLE IN KERNEL ...) *---------------------------------------------------------------------------*/voidvt_mc(struct video_state *svsp){}/*---------------------------------------------------------------------------* * Device Control String State Machine Entry for: * * DECUDK - user-defined keys and * DECDLD - downloadable charset * *---------------------------------------------------------------------------*/voidvt_dcsentry(U_char ch, struct video_state *svsp){ switch(svsp->dcs_state) { case DCS_INIT: switch(ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': /* parameters */ svsp->parms[svsp->parmi] *= 10; svsp->parms[svsp->parmi] += (ch -'0'); break; case ';': /* next parameter */ svsp->parmi = (svsp->parmi+1 < MAXPARMS) ? svsp->parmi+1 : svsp->parmi; break; case '|': /* DECUDK */ svsp->transparent = 1; init_udk(svsp); svsp->dcs_state = DCS_AND_UDK; break; case '{': /* DECDLD */ svsp->transparent = 1; init_dld(svsp); svsp->dcs_state = DCS_DLD_DSCS; break; default: /* failsafe */ svsp->transparent = 0; svsp->state = STATE_INIT; svsp->dcs_state = DCS_INIT; break; } break; case DCS_AND_UDK: /* DCS ... | */ switch(ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': /* fkey number */ svsp->udk_fnckey *= 10; svsp->udk_fnckey += (ch -'0'); break; case '/': /* Key */ svsp->dcs_state = DCS_UDK_DEF; break; case 0x1b: /* ESC */ svsp->dcs_state = DCS_UDK_ESC; break; default: svsp->transparent = 0; svsp->state = STATE_INIT; svsp->dcs_state = DCS_INIT; break; } break; case DCS_UDK_DEF: /* DCS ... | fnckey / */ switch(ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if(svsp->udk_deflow) /* low nibble */ { svsp->udk_def[svsp->udk_defi] |= (ch -'0'); svsp->udk_deflow = 0; svsp->udk_defi = (svsp->udk_defi+1 >= MAXUDKDEF) ? svsp->udk_defi : svsp->udk_defi+1; } else /* high nibble */ { svsp->udk_def[svsp->udk_defi] = ((ch -'0') << 4); svsp->udk_deflow = 1; } break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': if(svsp->udk_deflow) /* low nibble */ { svsp->udk_def[svsp->udk_defi] |= (ch - 'a' + 10); svsp->udk_deflow = 0; svsp->udk_defi = (svsp->udk_defi+1 >= MAXUDKDEF) ? svsp->udk_defi : svsp->udk_defi+1; } else /* high nibble */ { svsp->udk_def[svsp->udk_defi] = ((ch - 'a' + 10) << 4); svsp->udk_deflow = 1; } break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': if(svsp->udk_deflow) /* low nibble */ { svsp->udk_def[svsp->udk_defi] |= (ch - 'A' + 10); svsp->udk_deflow = 0; svsp->udk_defi = (svsp->udk_defi+1 >= MAXUDKDEF) ? svsp->udk_defi : svsp->udk_defi+1; } else /* high nibble */ { svsp->udk_def[svsp->udk_defi] = ((ch - 'A' + 10) << 4); svsp->udk_deflow = 1; } break; case ';': /* next function key */ vt_udk(svsp); svsp->dcs_state = DCS_AND_UDK; break; case 0x1b: /* ESC */ svsp->dcs_state = DCS_UDK_ESC; break; default: svsp->transparent = 0; svsp->state = STATE_INIT; svsp->dcs_state = DCS_INIT; break; } break; case DCS_UDK_ESC: /* DCS ... | fkey/def ... ESC */ switch(ch) { case '\\': /* ST */ vt_udk(svsp); svsp->transparent = 0; svsp->state = STATE_INIT; svsp->dcs_state = DCS_INIT; break; default: svsp->transparent = 0; svsp->state = STATE_INIT; svsp->dcs_state = DCS_INIT; break; } break; case DCS_DLD_DSCS: /* got DCS ... { */ if(ch >= ' ' && ch <= '/') /* intermediates ... */ { svsp->dld_dscs[svsp->dld_dscsi] = ch; svsp->dld_id[svsp->dld_dscsi] = ch; if(svsp->dld_dscsi >= DSCS_LENGTH) { svsp->transparent = 0; svsp->state = STATE_INIT; svsp->dcs_state = DCS_INIT; svsp->dld_id[0] = '\0'; } else { svsp->dld_dscsi++; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -