xref: /dragonfly/contrib/libedit/src/terminal.h (revision 12db70c8662d940c359926621f5dcef8a2365781)
1 /*        $NetBSD: terminal.h,v 1.9 2016/05/09 21:46:56 christos Exp $          */
2 
3 /*-
4  * Copyright (c) 1992, 1993
5  *        The Regents of the University of California.  All rights reserved.
6  *
7  * This code is derived from software contributed to Berkeley by
8  * Christos Zoulas of Cornell University.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. Neither the name of the University nor the names of its contributors
19  *    may be used to endorse or promote products derived from this software
20  *    without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  *
34  *        @(#)term.h          8.1 (Berkeley) 6/4/93
35  */
36 
37 /*
38  * el.term.h: Termcap header
39  */
40 #ifndef _h_el_terminal
41 #define   _h_el_terminal
42 
43 typedef struct {              /* Symbolic function key bindings       */
44           const wchar_t       *name;    /* name of the key                      */
45           int                  key;     /* Index in termcap table               */
46           keymacro_value_t     fun;     /* Function bound to it                           */
47           int                  type;    /* Type of function                     */
48 } funckey_t;
49 
50 typedef struct {
51           const char *t_name;           /* the terminal name          */
52           coord_t     t_size;           /* # lines and cols */
53           int         t_flags;
54 #define   TERM_CAN_INSERT               0x001     /* Has insert cap   */
55 #define   TERM_CAN_DELETE               0x002     /* Has delete cap   */
56 #define   TERM_CAN_CEOL                 0x004     /* Has CEOL cap               */
57 #define   TERM_CAN_TAB                  0x008     /* Can use tabs               */
58 #define   TERM_CAN_ME                   0x010     /* Can turn all attrs.        */
59 #define   TERM_CAN_UP                   0x020     /* Can move up                */
60 #define   TERM_HAS_META                 0x040     /* Has a meta key   */
61 #define   TERM_HAS_AUTO_MARGINS         0x080     /* Has auto margins */
62 #define   TERM_HAS_MAGIC_MARGINS        0x100     /* Has magic margins          */
63           char       *t_buf;            /* Termcap buffer   */
64           size_t      t_loc;            /* location used    */
65           char      **t_str;            /* termcap strings  */
66           int        *t_val;            /* termcap values   */
67           char       *t_cap;            /* Termcap buffer   */
68           funckey_t  *t_fkey;           /* Array of keys    */
69 } el_terminal_t;
70 
71 /*
72  * fKey indexes
73  */
74 #define   A_K_DN              0
75 #define   A_K_UP              1
76 #define   A_K_LT              2
77 #define   A_K_RT              3
78 #define   A_K_HO              4
79 #define   A_K_EN              5
80 #define   A_K_DE              6
81 #define   A_K_NKEYS 7
82 
83 #ifdef __sun
84 extern int tgetent(char *, const char *);
85 extern int tgetflag(char *);
86 extern int tgetnum(char *);
87 extern int tputs(const char *, int, int (*)(int));
88 extern char* tgoto(const char*, int, int);
89 extern char* tgetstr(char*, char**);
90 #endif
91 
92 libedit_private void          terminal_move_to_line(EditLine *, int);
93 libedit_private void          terminal_move_to_char(EditLine *, int);
94 libedit_private void          terminal_clear_EOL(EditLine *, int);
95 libedit_private void          terminal_overwrite(EditLine *, const wchar_t *, size_t);
96 libedit_private void          terminal_insertwrite(EditLine *, wchar_t *, int);
97 libedit_private void          terminal_deletechars(EditLine *, int);
98 libedit_private void          terminal_clear_screen(EditLine *);
99 libedit_private void          terminal_beep(EditLine *);
100 libedit_private int terminal_change_size(EditLine *, int, int);
101 libedit_private int terminal_get_size(EditLine *, int *, int *);
102 libedit_private int terminal_init(EditLine *);
103 libedit_private void          terminal_bind_arrow(EditLine *);
104 libedit_private void          terminal_print_arrow(EditLine *, const wchar_t *);
105 libedit_private int terminal_clear_arrow(EditLine *, const wchar_t *);
106 libedit_private int terminal_set_arrow(EditLine *, const wchar_t *,
107     keymacro_value_t *, int);
108 libedit_private void          terminal_end(EditLine *);
109 libedit_private void          terminal_get(EditLine *, const char **);
110 libedit_private int terminal_set(EditLine *, const char *);
111 libedit_private int terminal_settc(EditLine *, int, const wchar_t **);
112 libedit_private int terminal_gettc(EditLine *, int, char **);
113 libedit_private int terminal_telltc(EditLine *, int, const wchar_t **);
114 libedit_private int terminal_echotc(EditLine *, int, const wchar_t **);
115 libedit_private void          terminal_writec(EditLine *, wint_t);
116 libedit_private int terminal__putc(EditLine *, wint_t);
117 libedit_private void          terminal__flush(EditLine *);
118 
119 /*
120  * Easy access macros
121  */
122 #define   EL_FLAGS  (el)->el_terminal.t_flags
123 
124 #define   EL_CAN_INSERT                 (EL_FLAGS & TERM_CAN_INSERT)
125 #define   EL_CAN_DELETE                 (EL_FLAGS & TERM_CAN_DELETE)
126 #define   EL_CAN_CEOL                   (EL_FLAGS & TERM_CAN_CEOL)
127 #define   EL_CAN_TAB                    (EL_FLAGS & TERM_CAN_TAB)
128 #define   EL_CAN_ME           (EL_FLAGS & TERM_CAN_ME)
129 #define EL_CAN_UP             (EL_FLAGS & TERM_CAN_UP)
130 #define   EL_HAS_META                   (EL_FLAGS & TERM_HAS_META)
131 #define   EL_HAS_AUTO_MARGINS (EL_FLAGS & TERM_HAS_AUTO_MARGINS)
132 #define   EL_HAS_MAGIC_MARGINS          (EL_FLAGS & TERM_HAS_MAGIC_MARGINS)
133 
134 #endif /* _h_el_terminal */
135