001 /* 002 * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. 003 * 004 * This software is distributable under the BSD license. See the terms of the 005 * BSD license in the documentation provided with this software. 006 */ 007 package jline; 008 009 import java.io.IOException; 010 011 /** 012 * A no-op unsupported terminal. 013 * 014 * @author <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a> 015 */ 016 public class UnsupportedTerminal extends Terminal { 017 private Thread maskThread = null; 018 019 public void initializeTerminal() { 020 // nothing we need to do (or can do) for windows. 021 } 022 023 public boolean getEcho() { 024 return true; 025 } 026 027 028 public boolean isEchoEnabled() { 029 return true; 030 } 031 032 033 public void enableEcho() { 034 } 035 036 037 public void disableEcho() { 038 } 039 040 041 /** 042 * Always returng 80, since we can't access this info on Windows. 043 */ 044 public int getTerminalWidth() { 045 return 80; 046 } 047 048 /** 049 * Always returng 24, since we can't access this info on Windows. 050 */ 051 public int getTerminalHeight() { 052 return 80; 053 } 054 055 public boolean isSupported() { 056 return false; 057 } 058 059 public void beforeReadLine(final ConsoleReader reader, final String prompt, 060 final Character mask) { 061 if ((mask != null) && (maskThread == null)) { 062 final String fullPrompt = "\r" + prompt 063 + " " 064 + " " 065 + " " 066 + "\r" + prompt; 067 068 maskThread = new Thread("JLine Mask Thread") { 069 public void run() { 070 while (!interrupted()) { 071 try { 072 reader.out.write(fullPrompt); 073 reader.out.flush(); 074 sleep(3); 075 } catch (IOException ioe) { 076 return; 077 } catch (InterruptedException ie) { 078 return; 079 } 080 } 081 } 082 }; 083 084 maskThread.setPriority(Thread.MAX_PRIORITY); 085 maskThread.setDaemon(true); 086 maskThread.start(); 087 } 088 } 089 090 public void afterReadLine(final ConsoleReader reader, final String prompt, 091 final Character mask) { 092 if ((maskThread != null) && maskThread.isAlive()) { 093 maskThread.interrupt(); 094 } 095 096 maskThread = null; 097 } 098 }