1 /*
   2  * Copyright (c) 2002-2012, the original author or authors.
   3  *
   4  * This software is distributable under the BSD license. See the terms of the
   5  * BSD license in the documentation provided with this software.
   6  *
   7  * http://www.opensource.org/licenses/bsd-license.php
   8  */
   9 package jdk.internal.jline;
  10 
  11 import java.io.IOException;
  12 import java.io.InputStream;
  13 import java.io.OutputStream;
  14 
  15 /**
  16  * Representation of the input terminal for a platform.
  17  *
  18  * @author <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a>
  19  * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
  20  * @since 2.0
  21  */
  22 public interface Terminal
  23 {
  24     void init() throws Exception;
  25 
  26     void restore() throws Exception;
  27 
  28     void reset() throws Exception;
  29 
  30     boolean isSupported();
  31 
  32     int getWidth();
  33 
  34     int getHeight();
  35 
  36     boolean isAnsiSupported();
  37 
  38     /**
  39      * When ANSI is not natively handled, the output will have to be wrapped.
  40      */
  41     OutputStream wrapOutIfNeeded(OutputStream out);
  42 
  43     /**
  44      * When using native support, return the InputStream to use for reading characters
  45      * else return the input stream passed as a parameter.
  46      *
  47      * @since 2.6
  48      */
  49     InputStream wrapInIfNeeded(InputStream in) throws IOException;
  50 
  51     /**
  52      * For terminals that don't wrap when character is written in last column,
  53      * only when the next character is written.
  54      * These are the ones that have 'am' and 'xn' termcap attributes (xterm and
  55      * rxvt flavors falls under that category)
  56      */
  57     boolean hasWeirdWrap();
  58 
  59     boolean isEchoEnabled();
  60 
  61     void setEchoEnabled(boolean enabled);
  62 
  63     String getOutputEncoding();
  64 
  65 }