001 /*
002 * Copyright (c) 2002-2006, 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 * Always returng 80, since we can't access this info on Windows.
029 */
030 public int getTerminalWidth() {
031 return 80;
032 }
033
034 /**
035 * Always returng 24, since we can't access this info on Windows.
036 */
037 public int getTerminalHeight() {
038 return 80;
039 }
040
041 public boolean isSupported() {
042 return false;
043 }
044
045 public void beforeReadLine(final ConsoleReader reader, final String prompt,
046 final Character mask) {
047 if ((mask != null) && (maskThread == null)) {
048 final String fullPrompt = "\r" + prompt
049 + " "
050 + " "
051 + " "
052 + "\r" + prompt;
053
054 maskThread = new Thread("JLine Mask Thread") {
055 public void run() {
056 while (!interrupted()) {
057 try {
058 reader.out.write(fullPrompt);
059 reader.out.flush();
060 sleep(3);
061 } catch (IOException ioe) {
062 return;
063 } catch (InterruptedException ie) {
064 return;
065 }
066 }
067 }
068 };
069 }
070
071 maskThread.setPriority(Thread.MAX_PRIORITY);
072 maskThread.setDaemon(true);
073
074 maskThread.start();
075 }
076
077 public void afterReadLine(final ConsoleReader reader, final String prompt,
078 final Character mask) {
079 if ((maskThread != null) && maskThread.isAlive()) {
080 maskThread.interrupt();
081 }
082
083 maskThread = null;
084 }
085 }