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