⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 terminalxterm.java

📁 一个非常好的ssh客户端实现
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    "\033P",    "\033[",    "\033]",    "\033^",    "\033_",  };  public final static char CHARSET_UK        = 'A';  public final static char CHARSET_ASCII     = 'B';  public final static char CHARSET_LINES     = '0';  public final static char CHARSET_ASCII_ALT = '1';  public final static char CHARSET_LINES_ALT = '2';  char[] gSets = new char[4];  int    scsType;  int    curGL;  int    curSS;  int    curGLDECSC;  char[] gSetsDECSC = new char[4];  String xtermSeq = null;  String reply = null;  public final static int PARAMNOTUSED = -1;  int[] parseState;  boolean windowRelative;  boolean keypadAppl;  boolean cursorKeysMode;  public final static int MOUSE_DONTSEND = 0;  public final static int MOUSE_X10COMP  = 1;  public final static int MOUSE_DECVT200 = 2;  public final static int MOUSE_HLTRACK  = 3;  int sendMousePos;  int[] param  = new int[10];  int   nparam ;  public TerminalXTerm() {    this(DEFAULT_TERM);  }  public TerminalXTerm(int personality) {      try {	  setTerminalTypeInternal(personality);      } catch (NoSuchElementException e) {	  try {	      setTerminalTypeInternal(DEFAULT_TERM);	  } catch (NoSuchElementException ee) {	      // !!! Can't happen...	  }      }  }  public static String listAvailableTerminalTypes() {    int i;    String list = " ";    for(i = 0; i < terminalTypes.length; i++)      list += terminalTypes[i] + " ";    return list;  }  public static String[] getTerminalTypes() {    int i, n = 0;    for(i = 0; i < terminalTypes.length; i++)      if(!terminalTypes[i].equals(""))	n++;    String[] types = new String[n];    n = 0;    for(i = 0; i < terminalTypes.length; i++)      if(!terminalTypes[i].equals(""))	types[n++] = terminalTypes[i];    return types;  }  public String terminalType() {    return terminalTypes[whoAmI];  }  private void setTerminalTypeInternal(int type) throws NoSuchElementException {    if(type < terminalTypes.length && type > -1) {      whoAmI = type;      whoAmIReally = type;      if(whoAmI >= EMUL_ALTERNATENAME)	whoAmIReally -= EMUL_ALTERNATENAME;      vtReset();    } else {      throw new NoSuchElementException(type + " is not a supported terminal-emulation");    }  }  protected void setTerminalType(String type) throws NoSuchElementException {    int i;    for(i = 0; i < terminalTypes.length; i++)      if(terminalTypes[i].equalsIgnoreCase(type))	break;    setTerminalTypeInternal(i);  }  final int mapLineDrawToAscii(char c) {    if(c >= (char)0x5f && c <= (char)0x7e)      c = (char)asciiLineDrawChars[(int)c - 0x5f];    else if(c >= (char)0x2b && c <= (char)0x2e) {      c = (char)asciiLineDrawChars[((int)c - 0x2b) + 0x20];    } else if (c == 0x20) {      // !! <space>    } else {      if(DEBUGNOTIMPL) notImplemented("ASCII line-draw-char: " + c + " (" + ((int)c) + ")");    }    return (int)c;  }  final char mapLineDrawToLinux(char c) {    switch(c) {    case ' ':      c = ' ';      break;    case '\004':      c = '`';      break;    case '\261':      c = 'a';      break;    case '\370':      c = 'f';      break;    case '\361':      c = 'g';      break;    case '\260':      c = 'h';      break;    case '\331':    case '\211':      c = 'j';      break;    case '\277':    case '\214':      c = 'k';      break;    case '\332':    case '\206':      c = 'l';      break;    case '\300':    case '\203':      c = 'm';      break;    case '\305':      c = 'n';      break;    case '\304':    case '\212':      c = 'q';      break;    case '\362':      c = 'r';      break;    case '\303':    case '\207':	c = 't';      break;    case '\264':    case '\215':      c = 'u';      break;    case '\301':      c = 'v';      break;    case '\302':      c = 'w';      break;    case '\263':    case '\205':      c = 'x';      break;    case '\363':    case '\371':      c = 'y';      break;    case '\372':      c = 'z';      break;    case '\343':    case '\373':      c = '{';      break;    case '\374':    case '\330':      c = '|';      break;    case '\375':    case '\234':      c = '}';      break;    case '\376':      c = '~';      break;    case '\031':      c = '.';      break;    case '\333':      c = '+';      break;    case '\030':      c = '-';      break;    default:      if(DEBUGNOTIMPL) notImplemented("linux line-draw-char: " + c + " (" + ((int)c) + ")");      break;    }    return c;  }  final char mapLineDrawToATT6386(char c) {    switch(c) {    case ' ':      c = ' ';      break;    case '`':      c = '`';      break;    case '1':      c = 'a';      break;    case 'x':      c = 'f';      break;    case 'q':      c = 'g';      break;    case '0':      c = 'h';      break;    case 'Y':      c = 'j';      break;    case '?':      c = 'k';      break;    case 'Z':      c = 'l';      break;    case '@':      c = 'm';      break;    case 'E':      c = 'n';      break;    case 'o':      c = 'o';      break;    case 'p':      c = 'p';      break;    case 'D':      c = 'q';      break;    case 'r':      c = 'r';      break;    case 's':      c = 's';      break;    case 'C':      c = 't';      break;    case '4':      c = 'u';      break;    case 'A':      c = 'v';      break;    case 'B':      c = 'w';      break;    case '3':      c = 'x';      break;    case 'y':      c = 'y';      break;    case 'z':      c = 'z';      break;    case '{':      c = '{';      break;    case '|':      c = '|';      break;    case '}':      c = '}';      break;    case '~':      c = '~';      break;    default:      if(DEBUGNOTIMPL) notImplemented("att6386 line-draw-char: " + c + " (" + ((int)c) + ")");    }    return c;  }  public int interpretChar(char c) {    int val, h, v;    // If we have encountered a national-character we should print it!    // The character comes from ssh as 8-bit but we do a    // locale-specific translation to a java unicode-String... it's    // definately not in for interpretation, silly bug... :-)    //    if(((int)c) > 0xff) {	return (int)c;    }    switch(parseState[c]) {    case CASE_PRINT:      if(DEBUGPRINT) System.out.println("PRINT: " + c + "(" + ((int)c) + ")");      int ic = IGNORE;      switch(gSets[curGL]) {      case CHARSET_UK:	if(c == (char)'#')	  ic = 0x00a3; // unicode pound-sign	break;      case CHARSET_ASCII:      case CHARSET_ASCII_ALT:        // Do nothing...	ic = (int)c;	// Make ctrl-chars print nice (OK, we should really do this in TerminalWin but this is simpler...)	//	if(ic < 32) {	  if(ic == 0 && hasNullPadding(whoAmIReally))	    return IGNORE;	  term.write('^');	  ic += 64;	}	break;      case CHARSET_LINES:      case CHARSET_LINES_ALT:	if(!term.getOption(Terminal.OPT_ASCII_LDC)) {	  if(whoAmIReally == EMUL_LINUX) {	    c = mapLineDrawToLinux(c);	  } else if(whoAmIReally == EMUL_ATT6386) {	    c = mapLineDrawToATT6386(c);	  }	  term.writeLineDrawChar(c);	} else {	  ic = mapLineDrawToAscii(c);	}	break;      default:	if(DEBUGNOTIMPL) notImplemented("unknown char-set: " + gSets[curGL] + " (" + ((int)gSets[curGL]) + ")");      }      return ic;    case CASE_GROUND_STATE:      if(DEBUG) System.out.println("GND_STATE");      parseState = groundTable;      break;    case CASE_IGNORE_STATE:      if(DEBUG) System.out.println("IGN_STATE");      parseState = ignTable;      break;    case CASE_IGNORE_ESC:      if(DEBUG) System.out.println("IGN_ESC");      parseState = iesTable;      break;    case CASE_IGNORE:      if(DEBUG) System.out.println("IGNORE");      break;    case CASE_BELL:      if(DEBUG) System.out.println("BELL");      term.doBell();      break;    case CASE_BS:      if(DEBUG) System.out.println("BS");      term.doBS();      break;    case CASE_CR:      if(DEBUG) System.out.println("CR");      term.doCR();      parseState = groundTable;      break;    case CASE_ESC:      if(DEBUG) System.out.println("ESC");      parseState = escTable;      break;    case CASE_VMOT:      if(DEBUG) System.out.println("VMOT");      term.doLF();      parseState = groundTable;      break;    case CASE_TAB:      if(DEBUG) System.out.println("TAB");      term.doTab();      break;    case CASE_SI:      if(DEBUG) System.out.println("SI(curGL = 0)");      curGL = 0;      break;    case CASE_SO:      if(DEBUG) System.out.println("S0(curGL = 1)");      curGL = 1;      break;    case CASE_SCR_STATE:      if(DEBUG) System.out.println("SCR_STATE");      parseState = scrTable;      break;    case CASE_SCS0_STATE:      if(DEBUG) System.out.println("SCS0");      scsType    = 0;      parseState = scsTable;      break;    case CASE_SCS1_STATE:      if(DEBUG) System.out.println("SCS1");      scsType    = 1;      parseState = scsTable;      break;    case CASE_SCS2_STATE:      if(DEBUG) System.out.println("SCS2");      scsType    = 2;      parseState = scsTable;      break;    case CASE_SCS3_STATE:      if(DEBUG) System.out.println("SCS3");      scsType    = 3;      parseState = scsTable;      break;    case CASE_ESC_IGNORE:      if(DEBUG) System.out.println("ESC_IGN");      parseState = eigTable;      break;    case CASE_ESC_DIGIT:      if(DEBUG) System.out.println("ESC_DIGIT (" + ((int)(c - '0')) + ")");      val = param[nparam - 1];      if(val == PARAMNOTUSED)	val = 0;      param[nparam - 1] = 10 * val + (c - '0');      break;    case CASE_ESC_SEMI:      if(DEBUG) System.out.println("ESC_SEMI");      param[nparam++] = PARAMNOTUSED;      break;    case CASE_ESC_SEMIOSC:      if(DEBUG) System.out.println("ESC_SEMIOSC");      param[nparam++] = PARAMNOTUSED;      xtermSeq   = "";      parseState = xtermSeqTable;      break;    case CASE_DEC_STATE:      if(DEBUG) System.out.println("DEC_STATE");      parseState = decTable;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -