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 */
9package jdk.internal.jline;
10
11import java.io.IOException;
12import java.io.InputStream;
13import 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 */
22public 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}
66