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 }