diff options
Diffstat (limited to 'src/com/jcraft/jcterm/EmulatorVT100.java')
-rw-r--r-- | src/com/jcraft/jcterm/EmulatorVT100.java | 634 |
1 files changed, 0 insertions, 634 deletions
diff --git a/src/com/jcraft/jcterm/EmulatorVT100.java b/src/com/jcraft/jcterm/EmulatorVT100.java deleted file mode 100644 index cf2f96a..0000000 --- a/src/com/jcraft/jcterm/EmulatorVT100.java +++ /dev/null @@ -1,634 +0,0 @@ -/* -*-mode:java; c-basic-offset:2; -*- */ -/* JCTerm - * Copyright (C) 2002,2007 ymnk, JCraft,Inc. - * - * Written by: ymnk<ymnk@jcaft.com> - * - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -package com.jcraft.jcterm; - -import java.io.InputStream; - -public class EmulatorVT100 extends Emulator{ - - public EmulatorVT100(Term term, InputStream in){ - super(term, in); - } - - public void setInputStream(InputStream in){ - this.in=in; - } - - public void setTerm(Term term){ - this.term=term; - } - - public void start(){ - reset(); - - int[] intarg=new int[10]; - int intargi=0; - - x=0; - y=char_height; - - byte b; - - try{ - while(true){ - - b=getChar(); - - //System.out.println("@0: "+ new Character((char)b)+"["+Integer.toHexString(b&0xff)+"]"); - - //System.out.println("@0: ry="+ry); - - /* - outputs from infocmp on RedHat8.0 - # Reconstructed via infocmp from file: /usr/share/terminfo/v/vt100 - vt100|vt100-am|dec vt100 (w/advanced video), - am, msgr, xenl, xon, - cols#80, it#8, lines#24, vt#3, - acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, - bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>, - clear=\E[H\E[J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr, - cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J, - cuf=\E[%p1%dC, cuf1=\E[C$<2>, - cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA, - cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>, - enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=^J, ka1=\EOq, - ka3=\EOs, kb2=\EOr, kbs=^H, kc1=\EOp, kc3=\EOn, kcub1=\EOD, - kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kent=\EOM, kf0=\EOy, - kf1=\EOP, kf10=\EOx, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOt, - kf6=\EOu, kf7=\EOv, kf8=\EOl, kf9=\EOw, rc=\E8, - rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l, - rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>, - rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7, - sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<2>, - sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, - smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g, - */ - /* - am terminal has automatic margnins - msgr safe to move while in standout mode - xenl newline ignored after 80 cols (concept) - xon terminal uses xon/xoff handshake - cols number of columns in a line - it tabs initially every # spaces - lines number of lines on screen of page - vt virstual terminal number(CB/unix) - acsc graphics charset pairs, based on vt100 - bel bell - blink turn on blinking - bold turn on bold(extra bright) mode - clear clear screen and home cursor(P*) - cr carriage return (P)(P*) - csr change region to line #1 to line #2(P) - cub move #1 characters to the left (P) - cub1 move left one space - cud down #1 lines (P*) - cud1 down one line - cuf move to #1 characters to the right. - cuf1 non-destructive space (move right one space) - cup move to row #1 columns #2 - cuu up #1 lines (P*) - cuu1 up one line - ed clear to end of screen (P*) - el clear to end of line (P) - el1 Clear to begining of line - enacs enable alterate char set - home home cursor (if no cup) - ht tab to next 8-space hardware tab stop - hts set a tab in every row, current columns - ind scroll text up - ka1 upper left of keypad - ka3 upper right of keypad - kb2 center of keypad - kbs backspace key - kc1 lower left of keypad - kc3 lower right of keypad - kcub1 left-arrow key - kcud1 down-arrow key - kcuf1 right-arrow key - kcuu1 up-arrow key - kent enter/sekd key - kf0 F0 function key - kf1 F1 function key - kf10 F10 function key - kf2 F2 function key - kf3 F3 function key - kf4 F4 function key - kf5 F5 function key - kf6 F6 function key - kf7 F7 function key - kf8 F8 function key - kf9 F9 function key - rc restore cursor to position of last save_cursor - rev turn on reverse video mode - ri scroll text down (P) - rmacs end alternate character set - rmam turn off automatic margins - rmkx leave 'keybroad_transmit' mode - rmso exit standout mode - rmul exit underline mode - rs2 reset string - sc save current cursor position (P) - sgr define video attribute #1-#9(PG9) - sgr0 turn off all attributes - smacs start alternate character set (P) - smam turn on automatic margins - smkx enter 'keyborad_transmit' mode - smso begin standout mode - smul begin underline mode - tbc clear all tab stops(P) - */ - if(b==0){ - continue; - } - - if(b==0x1b){ - b=getChar(); - - //System.out.println("@1: "+ new Character((char)b)+"["+Integer.toHexString(b&0xff)+"]"); - - if(b=='M'){ // sr \EM sr scroll text down (P) - scroll_reverse(); - continue; - } - - if(b=='D'){ // sf - scroll_forward(); - continue; - } - - if(b=='7'){ - save_cursor(); - continue; - } - - if(b=='('){ - b=getChar(); - if(b=='B'){ - b=getChar(); - if(b==0x1b){ - b=getChar(); - if(b==')'){ - b=getChar(); - if(b=='0'){ // enacs - ena_acs(); - continue; - } - else{ - pushChar((byte)'0'); - } - } - else{ - pushChar((byte)')'); - } - } - else{ - pushChar((byte)0x1b); - } - } - else{ - pushChar((byte)'B'); - } - } - - if(b=='>'){ - b=getChar(); // 0x1b - b=getChar(); // '[' - b=getChar(); // '?' - b=getChar(); // '3' - b=getChar(); // 'l' - b=getChar(); // 0x1b - b=getChar(); // '[' - b=getChar(); // '?' - b=getChar(); // '4' - b=getChar(); // 'l' - b=getChar(); // 0x1b - b=getChar(); // '[' - b=getChar(); // '?' - b=getChar(); // '5' - b=getChar(); // 'l' - b=getChar(); // 0x1b - b=getChar(); // '[' - b=getChar(); // '?' - b=getChar(); // '7' - b=getChar(); // 'h' - b=getChar(); // 0x1b - b=getChar(); // '[' - b=getChar(); // '?' - b=getChar(); // '8' - b=getChar(); // 'h' - - reset_2string(); - continue; - } - - if(b!='['){ - System.out.print("@11: "+new Character((char)b)+"[" - +Integer.toHexString(b&0xff)+"]"); - pushChar(b); - continue; - } - - //System.out.print("@2: "+ new Character((char)b)+"["+Integer.toHexString(b&0xff)+"]"); - - intargi=0; - intarg[intargi]=0; - int digit=0; - - while(true){ - b=getChar(); - //System.out.print("#"+new Character((char)b)+"["+Integer.toHexString(b&0xff)+"]"); - if(b==';'){ - if(digit>0){ - intargi++; - intarg[intargi]=0; - digit=0; - } - continue; - } - - if('0'<=b&&b<='9'){ - intarg[intargi]=intarg[intargi]*10+(b-'0'); - digit++; - continue; - } - - pushChar(b); - break; - } - - b=getChar(); - - //System.out.print("@4: "+ new Character((char)b)+"["+Integer.toHexString(b&0xff)+"]"); - - if(b=='m'){ - /* - b=getChar(); - if(b=='$'){ - b=getChar(); // < - b=getChar(); // 2 - b=getChar(); // > - } - else{ - pushChar(b); - } - */ - - if(digit==0&&intargi==0){ - b=getChar(); - if(b==0x0f){ // sgr0 - exit_attribute_mode(); - continue; - } - else{ // rmso, rmul - exit_underline_mode(); - exit_standout_mode(); - pushChar(b); - continue; - } - } - - for(int i=0; i<=intargi; i++){ - Object fg=null; - Object bg=null; - Object tmp=null; - - switch(intarg[i]){ - case 0: // Reset all attributes - exit_standout_mode(); - continue; - case 1: // Bright // bold - enter_bold_mode(); - continue; - case 2: // Dim - break; - case 4: // Underline - enter_underline_mode(); - continue; - case 5: // Blink - case 8: // Hidden - break; - case 7: // reverse - enter_reverse_mode(); - continue; - case 30: - case 31: - case 32: - case 33: - case 34: - case 35: - case 36: - case 37: - tmp=term.getColor(intarg[i]-30); - if(tmp!=null) - fg=tmp; - break; - case 40: - case 41: - case 42: - case 43: - case 44: - case 45: - case 46: - case 47: - tmp=term.getColor(intarg[i]-40); - if(tmp!=null) - bg=tmp; - break; - default: - break; - } - if(fg!=null) - term.setForeGround(fg); - if(bg!=null) - term.setBackGround(bg); - } - //System.out.println("fg: "+fg+" bg: "+bg); - continue; - } - - if(b=='r'){ // csr - change_scroll_region(intarg[0], intarg[1]); - //System.out.println("r: "+region_y1+", "+region_y2+", intargi="+intargi); - continue; - } - - if(b=='H'){ // cup - /* - b=getChar(); - if(b!='$'){ // home - pushChar(b); - } - else{ - b=getChar(); // < - b=getChar(); // 5 - b=getChar(); // > - } - */ - - if(digit==0&&intargi==0){ - intarg[0]=intarg[1]=1; - } - - //System.out.println("H: "+region_y1+", "+region_y2+", intargi="+intargi); - cursor_address(intarg[0], intarg[1]); - continue; - } - - if(b=='B'){ // cud - parm_down_cursor(intarg[0]); - continue; - } - - if(b=='D'){ // cub - parm_left_cursor(intarg[0]); - continue; - } - - if(b=='C'){ // cuf - if(digit==0&&intargi==0){ - intarg[0]=1; - } - parm_right_cursor(intarg[0]); - continue; - } - - if(b=='K'){ // el - /* - b=getChar(); // - if(b=='$'){ - b=getChar(); // < - b=getChar(); // 3 - b=getChar(); // > - } - else{ - pushChar(b); - } - */ - - if(digit==0&&intargi==0){ // el - clr_eol(); - } - else{ // el1 - clr_bol(); - } - continue; - } - - if(b=='J'){ - //for(int i=0; i<intargi; i++){ System.out.print(intarg[i]+" ");} - //System.out.println(intarg[0]+"<- intargi="+intargi); - clr_eos(); - continue; - } - - if(b=='A'){ // cuu - if(digit==0&&intargi==0){ - intarg[0]=1; - } - parm_up_cursor(intarg[0]); - continue; - } - - if(b=='?'){ - b=getChar(); - if(b=='1'){ - b=getChar(); - if(b=='l'||b=='h'){ - b=getChar(); - if(b==0x1b){ - b=getChar(); - if(b=='>'|| // rmkx , leave 'keybroad_transmit' mode - b=='='){ // smkx , enter 'keyborad_transmit' mode - // TODO - continue; - } - } - } - else if(b=='h'){ - b=getChar(); - if(b==0x1b){ - b=getChar(); - if(b=='='){ // smkx enter 'keyborad_transmit' mode - continue; - } - } - } - } - else if(b=='7'){ - b=getChar(); - if(b=='h'){ // smam - // TODO - //System.out.println("turn on automatic magins"); - continue; - } - else if(b=='l'){ // rmam - // TODO - //System.out.println("turn off automatic magins"); - continue; - } - pushChar(b); - b='7'; - } - else{ - } - } - - if(b=='h'){ // kh \Eh home key - continue; - } - - System.out.println("unknown "+Integer.toHexString(b&0xff)+" " - +new Character((char)b)+", "+intarg[0]+", "+intarg[1]+", " - +intarg[2]+",intargi="+intargi); - continue; - } - - if(b==0x07){ // bel ^G - bell(); - continue; - } - - if(b==0x09){ // ht(^I) - tab(); - continue; - } - - if(b==0x0f){ // rmacs ^O // end alternate character set (P) - exit_alt_charset_mode(); - continue; - } - - if(b==0x0e){ // smacs ^N // start alternate character set (P) - enter_alt_charset_mode(); - continue; - } - - if(b==0x0d){ - carriage_return(); - continue; - } - - if(b==0x08){ - cursor_left(); - continue; - } - - if(b==0x0a){ // '\n' - //System.out.println("x="+x+",y="+y); - cursor_down(); - //check_region(); - continue; - } - - if(b!=0x0a){ // !'\n' - pushChar(b); - draw_text(); - continue; - } - } - } - catch(Exception e){ - } - } - - private static byte[] ENTER= {(byte)0x0d}; - private static byte[] UP= {(byte)0x1b, (byte)0x4f, (byte)0x41}; - private static byte[] DOWN= {(byte)0x1b, (byte)0x4f, (byte)0x42}; - private static byte[] RIGHT= {(byte)0x1b, (byte)/*0x5b*/0x4f, (byte)0x43}; - private static byte[] LEFT= {(byte)0x1b, (byte)/*0x5b*/0x4f, (byte)0x44}; - private static byte[] F1= {(byte)0x1b, (byte)0x4f, (byte)'P'}; - private static byte[] F2= {(byte)0x1b, (byte)0x4f, (byte)'Q'}; - private static byte[] F3= {(byte)0x1b, (byte)0x4f, (byte)'R'}; - private static byte[] F4= {(byte)0x1b, (byte)0x4f, (byte)'S'}; - private static byte[] F5= {(byte)0x1b, (byte)0x4f, (byte)'t'}; - private static byte[] F6= {(byte)0x1b, (byte)0x4f, (byte)'u'}; - private static byte[] F7= {(byte)0x1b, (byte)0x4f, (byte)'v'}; - private static byte[] F8= {(byte)0x1b, (byte)0x4f, (byte)'I'}; - private static byte[] F9= {(byte)0x1b, (byte)0x4f, (byte)'w'}; - private static byte[] F10= {(byte)0x1b, (byte)0x4f, (byte)'x'}; - private static byte[] tab= {(byte)0x09}; - - public byte[] getCodeENTER(){ - return ENTER; - } - - public byte[] getCodeUP(){ - return UP; - } - - public byte[] getCodeDOWN(){ - return DOWN; - } - - public byte[] getCodeRIGHT(){ - return RIGHT; - } - - public byte[] getCodeLEFT(){ - return LEFT; - } - - public byte[] getCodeF1(){ - return F1; - } - - public byte[] getCodeF2(){ - return F2; - } - - public byte[] getCodeF3(){ - return F3; - } - - public byte[] getCodeF4(){ - return F4; - } - - public byte[] getCodeF5(){ - return F5; - } - - public byte[] getCodeF6(){ - return F6; - } - - public byte[] getCodeF7(){ - return F7; - } - - public byte[] getCodeF8(){ - return F8; - } - - public byte[] getCodeF9(){ - return F9; - } - - public byte[] getCodeF10(){ - return F10; - } - - public byte[] getCodeTAB(){ - return tab; - } -} |