1fdd4e1e0SJan Lentfer /**************************************************************************** 2*32bb5217SDaniel Fojt * Copyright 2018-2019,2020 Thomas E. Dickey * 3*32bb5217SDaniel Fojt * Copyright 1998-2015,2017 Free Software Foundation, Inc. * 4fdd4e1e0SJan Lentfer * * 5fdd4e1e0SJan Lentfer * Permission is hereby granted, free of charge, to any person obtaining a * 6fdd4e1e0SJan Lentfer * copy of this software and associated documentation files (the * 7fdd4e1e0SJan Lentfer * "Software"), to deal in the Software without restriction, including * 8fdd4e1e0SJan Lentfer * without limitation the rights to use, copy, modify, merge, publish, * 9fdd4e1e0SJan Lentfer * distribute, distribute with modifications, sublicense, and/or sell * 10fdd4e1e0SJan Lentfer * copies of the Software, and to permit persons to whom the Software is * 11fdd4e1e0SJan Lentfer * furnished to do so, subject to the following conditions: * 12fdd4e1e0SJan Lentfer * * 13fdd4e1e0SJan Lentfer * The above copyright notice and this permission notice shall be included * 14fdd4e1e0SJan Lentfer * in all copies or substantial portions of the Software. * 15fdd4e1e0SJan Lentfer * * 16fdd4e1e0SJan Lentfer * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * 17fdd4e1e0SJan Lentfer * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * 18fdd4e1e0SJan Lentfer * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * 19fdd4e1e0SJan Lentfer * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * 20fdd4e1e0SJan Lentfer * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * 21fdd4e1e0SJan Lentfer * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * 22fdd4e1e0SJan Lentfer * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * 23fdd4e1e0SJan Lentfer * * 24fdd4e1e0SJan Lentfer * Except as contained in this notice, the name(s) of the above copyright * 25fdd4e1e0SJan Lentfer * holders shall not be used in advertising or otherwise to promote the * 26fdd4e1e0SJan Lentfer * sale, use or other dealings in this Software without prior written * 27fdd4e1e0SJan Lentfer * authorization. * 28fdd4e1e0SJan Lentfer ****************************************************************************/ 29fdd4e1e0SJan Lentfer 30fdd4e1e0SJan Lentfer /**************************************************************************** 31fdd4e1e0SJan Lentfer * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 * 32fdd4e1e0SJan Lentfer * and: Eric S. Raymond <esr@snark.thyrsus.com> * 331d102085SJan Lentfer * and: Thomas E. Dickey 1998-on * 34fdd4e1e0SJan Lentfer ****************************************************************************/ 35fdd4e1e0SJan Lentfer 36*32bb5217SDaniel Fojt /* $Id: term_entry.h,v 1.59 2020/02/02 23:34:34 tom Exp $ */ 37fdd4e1e0SJan Lentfer 38fdd4e1e0SJan Lentfer /* 39fdd4e1e0SJan Lentfer * term_entry.h -- interface to entry-manipulation code 40fdd4e1e0SJan Lentfer */ 41fdd4e1e0SJan Lentfer 42fdd4e1e0SJan Lentfer #ifndef NCURSES_TERM_ENTRY_H_incl 43fdd4e1e0SJan Lentfer #define NCURSES_TERM_ENTRY_H_incl 1 44*32bb5217SDaniel Fojt /* *INDENT-OFF* */ 45fdd4e1e0SJan Lentfer 46fdd4e1e0SJan Lentfer #ifdef __cplusplus 47fdd4e1e0SJan Lentfer extern "C" { 48fdd4e1e0SJan Lentfer #endif 49fdd4e1e0SJan Lentfer 50*32bb5217SDaniel Fojt #include <curses.h> 51fdd4e1e0SJan Lentfer #include <term.h> 52fdd4e1e0SJan Lentfer 533468e90cSJohn Marino /* 54*32bb5217SDaniel Fojt * These macros may be used by programs that know about TERMTYPE: 553468e90cSJohn Marino */ 56fdd4e1e0SJan Lentfer #if NCURSES_XNAMES 57fdd4e1e0SJan Lentfer #define NUM_BOOLEANS(tp) (tp)->num_Booleans 58fdd4e1e0SJan Lentfer #define NUM_NUMBERS(tp) (tp)->num_Numbers 59fdd4e1e0SJan Lentfer #define NUM_STRINGS(tp) (tp)->num_Strings 60fdd4e1e0SJan Lentfer #define EXT_NAMES(tp,i,limit,index,table) (i >= limit) ? tp->ext_Names[index] : table[i] 61fdd4e1e0SJan Lentfer #else 62fdd4e1e0SJan Lentfer #define NUM_BOOLEANS(tp) BOOLCOUNT 63fdd4e1e0SJan Lentfer #define NUM_NUMBERS(tp) NUMCOUNT 64fdd4e1e0SJan Lentfer #define NUM_STRINGS(tp) STRCOUNT 65fdd4e1e0SJan Lentfer #define EXT_NAMES(tp,i,limit,index,table) table[i] 66fdd4e1e0SJan Lentfer #endif 67fdd4e1e0SJan Lentfer 6800d8f3c4SJohn Marino #define NUM_EXT_NAMES(tp) (unsigned) ((tp)->ext_Booleans + (tp)->ext_Numbers + (tp)->ext_Strings) 69fdd4e1e0SJan Lentfer 70fdd4e1e0SJan Lentfer #define for_each_boolean(n,tp) for(n = 0; n < NUM_BOOLEANS(tp); n++) 71fdd4e1e0SJan Lentfer #define for_each_number(n,tp) for(n = 0; n < NUM_NUMBERS(tp); n++) 72fdd4e1e0SJan Lentfer #define for_each_string(n,tp) for(n = 0; n < NUM_STRINGS(tp); n++) 73fdd4e1e0SJan Lentfer 7400d8f3c4SJohn Marino #if NCURSES_XNAMES 753468e90cSJohn Marino #define for_each_ext_boolean(n,tp) for(n = BOOLCOUNT; (int) n < (int) NUM_BOOLEANS(tp); n++) 763468e90cSJohn Marino #define for_each_ext_number(n,tp) for(n = NUMCOUNT; (int) n < (int) NUM_NUMBERS(tp); n++) 773468e90cSJohn Marino #define for_each_ext_string(n,tp) for(n = STRCOUNT; (int) n < (int) NUM_STRINGS(tp); n++) 7800d8f3c4SJohn Marino #endif 7900d8f3c4SJohn Marino 80fdd4e1e0SJan Lentfer #define ExtBoolname(tp,i,names) EXT_NAMES(tp, i, BOOLCOUNT, (i - (tp->num_Booleans - tp->ext_Booleans)), names) 81fdd4e1e0SJan Lentfer #define ExtNumname(tp,i,names) EXT_NAMES(tp, i, NUMCOUNT, (i - (tp->num_Numbers - tp->ext_Numbers)) + tp->ext_Booleans, names) 82fdd4e1e0SJan Lentfer #define ExtStrname(tp,i,names) EXT_NAMES(tp, i, STRCOUNT, (i - (tp->num_Strings - tp->ext_Strings)) + (tp->ext_Numbers + tp->ext_Booleans), names) 83fdd4e1e0SJan Lentfer 84*32bb5217SDaniel Fojt /* 85*32bb5217SDaniel Fojt * The remaining type-definitions and macros are used only internally by the 86*32bb5217SDaniel Fojt * ncurses utilities. 87*32bb5217SDaniel Fojt */ 88*32bb5217SDaniel Fojt #ifdef NCURSES_INTERNALS 89*32bb5217SDaniel Fojt 90*32bb5217SDaniel Fojt /* 91*32bb5217SDaniel Fojt * see db_iterator.c - this enumeration lists the places searched for a 92*32bb5217SDaniel Fojt * terminal description and defines the order in which they are searched. 93*32bb5217SDaniel Fojt */ 94*32bb5217SDaniel Fojt typedef enum { 95*32bb5217SDaniel Fojt dbdTIC = 0, /* special, used by tic when writing entry */ 96*32bb5217SDaniel Fojt #if NCURSES_USE_DATABASE 97*32bb5217SDaniel Fojt dbdEnvOnce, /* the $TERMINFO environment variable */ 98*32bb5217SDaniel Fojt dbdHome, /* $HOME/.terminfo */ 99*32bb5217SDaniel Fojt dbdEnvList, /* the $TERMINFO_DIRS environment variable */ 100*32bb5217SDaniel Fojt dbdCfgList, /* the compiled-in TERMINFO_DIRS value */ 101*32bb5217SDaniel Fojt dbdCfgOnce, /* the compiled-in TERMINFO value */ 102*32bb5217SDaniel Fojt #endif 103*32bb5217SDaniel Fojt #if NCURSES_USE_TERMCAP 104*32bb5217SDaniel Fojt dbdEnvOnce2, /* the $TERMCAP environment variable */ 105*32bb5217SDaniel Fojt dbdEnvList2, /* the $TERMPATH environment variable */ 106*32bb5217SDaniel Fojt dbdCfgList2, /* the compiled-in TERMPATH */ 107*32bb5217SDaniel Fojt #endif 108*32bb5217SDaniel Fojt dbdLAST 109*32bb5217SDaniel Fojt } DBDIRS; 110*32bb5217SDaniel Fojt 111*32bb5217SDaniel Fojt #define MAX_USES 32 112*32bb5217SDaniel Fojt #define MAX_CROSSLINKS 16 113*32bb5217SDaniel Fojt 114*32bb5217SDaniel Fojt typedef struct entry ENTRY; 115*32bb5217SDaniel Fojt 116*32bb5217SDaniel Fojt typedef struct { 117*32bb5217SDaniel Fojt char *name; 118*32bb5217SDaniel Fojt ENTRY *link; 119*32bb5217SDaniel Fojt long line; 120*32bb5217SDaniel Fojt } ENTRY_USES; 121*32bb5217SDaniel Fojt 122*32bb5217SDaniel Fojt struct entry { 123*32bb5217SDaniel Fojt TERMTYPE2 tterm; 124*32bb5217SDaniel Fojt unsigned nuses; 125*32bb5217SDaniel Fojt ENTRY_USES uses[MAX_USES]; 126*32bb5217SDaniel Fojt int ncrosslinks; 127*32bb5217SDaniel Fojt ENTRY *crosslinks[MAX_CROSSLINKS]; 128*32bb5217SDaniel Fojt long cstart; 129*32bb5217SDaniel Fojt long cend; 130*32bb5217SDaniel Fojt long startline; 131*32bb5217SDaniel Fojt ENTRY *next; 132*32bb5217SDaniel Fojt ENTRY *last; 133*32bb5217SDaniel Fojt }; 134*32bb5217SDaniel Fojt 135fdd4e1e0SJan Lentfer extern NCURSES_EXPORT_VAR(ENTRY *) _nc_head; 136fdd4e1e0SJan Lentfer extern NCURSES_EXPORT_VAR(ENTRY *) _nc_tail; 137fdd4e1e0SJan Lentfer #define for_entry_list(qp) for (qp = _nc_head; qp; qp = qp->next) 138fdd4e1e0SJan Lentfer 139fdd4e1e0SJan Lentfer #define MAX_LINE 132 140fdd4e1e0SJan Lentfer 141fdd4e1e0SJan Lentfer #define NULLHOOK (bool(*)(ENTRY *))0 142fdd4e1e0SJan Lentfer 143fdd4e1e0SJan Lentfer /* 144fdd4e1e0SJan Lentfer * Note that WANTED and PRESENT are not simple inverses! If a capability 145fdd4e1e0SJan Lentfer * has been explicitly cancelled, it's not considered WANTED. 146fdd4e1e0SJan Lentfer */ 147fdd4e1e0SJan Lentfer #define WANTED(s) ((s) == ABSENT_STRING) 148fdd4e1e0SJan Lentfer #define PRESENT(s) (((s) != ABSENT_STRING) && ((s) != CANCELLED_STRING)) 149fdd4e1e0SJan Lentfer 150fdd4e1e0SJan Lentfer #define ANDMISSING(p,q) \ 151*32bb5217SDaniel Fojt { \ 152*32bb5217SDaniel Fojt if (PRESENT(p) && !PRESENT(q)) \ 153*32bb5217SDaniel Fojt _nc_warning(#p " but no " #q); \ 154*32bb5217SDaniel Fojt } 155fdd4e1e0SJan Lentfer 156fdd4e1e0SJan Lentfer #define PAIRED(p,q) \ 157fdd4e1e0SJan Lentfer { \ 158fdd4e1e0SJan Lentfer if (PRESENT(q) && !PRESENT(p)) \ 159fdd4e1e0SJan Lentfer _nc_warning(#q " but no " #p); \ 160fdd4e1e0SJan Lentfer if (PRESENT(p) && !PRESENT(q)) \ 161fdd4e1e0SJan Lentfer _nc_warning(#p " but no " #q); \ 162fdd4e1e0SJan Lentfer } 163fdd4e1e0SJan Lentfer 164*32bb5217SDaniel Fojt /* 165*32bb5217SDaniel Fojt * These entrypoints are used only by the ncurses utilities such as tic. 166*32bb5217SDaniel Fojt */ 167*32bb5217SDaniel Fojt 168fdd4e1e0SJan Lentfer /* alloc_entry.c: elementary allocation code */ 169fdd4e1e0SJan Lentfer extern NCURSES_EXPORT(ENTRY *) _nc_copy_entry (ENTRY *oldp); 170fdd4e1e0SJan Lentfer extern NCURSES_EXPORT(char *) _nc_save_str (const char *const); 171*32bb5217SDaniel Fojt extern NCURSES_EXPORT(void) _nc_init_entry (ENTRY *const); 172*32bb5217SDaniel Fojt extern NCURSES_EXPORT(void) _nc_merge_entry (ENTRY *const, ENTRY *const); 173fdd4e1e0SJan Lentfer extern NCURSES_EXPORT(void) _nc_wrap_entry (ENTRY *const, bool); 174fdd4e1e0SJan Lentfer 175fdd4e1e0SJan Lentfer /* alloc_ttype.c: elementary allocation code */ 176*32bb5217SDaniel Fojt extern NCURSES_EXPORT(void) _nc_align_termtype (TERMTYPE2 *, TERMTYPE2 *); 177fdd4e1e0SJan Lentfer 178fdd4e1e0SJan Lentfer /* free_ttype.c: elementary allocation code */ 179*32bb5217SDaniel Fojt extern NCURSES_EXPORT(void) _nc_free_termtype2 (TERMTYPE2 *); 180fdd4e1e0SJan Lentfer 1811d102085SJan Lentfer /* lib_termcap.c: trim sgr0 string for termcap users */ 182*32bb5217SDaniel Fojt extern NCURSES_EXPORT(char *) _nc_trim_sgr0 (TERMTYPE2 *); 1831d102085SJan Lentfer 184fdd4e1e0SJan Lentfer /* parse_entry.c: entry-parsing code */ 185fdd4e1e0SJan Lentfer #if NCURSES_XNAMES 186fdd4e1e0SJan Lentfer extern NCURSES_EXPORT_VAR(bool) _nc_user_definable; 187fdd4e1e0SJan Lentfer extern NCURSES_EXPORT_VAR(bool) _nc_disable_period; 188fdd4e1e0SJan Lentfer #endif 189fdd4e1e0SJan Lentfer extern NCURSES_EXPORT(int) _nc_parse_entry (ENTRY *, int, bool); 190fdd4e1e0SJan Lentfer extern NCURSES_EXPORT(int) _nc_capcmp (const char *, const char *); 191fdd4e1e0SJan Lentfer 192fdd4e1e0SJan Lentfer /* write_entry.c: writing an entry to the file system */ 1933468e90cSJohn Marino extern NCURSES_EXPORT(void) _nc_set_writedir (const char *); 194*32bb5217SDaniel Fojt extern NCURSES_EXPORT(void) _nc_write_entry (TERMTYPE2 *const); 195*32bb5217SDaniel Fojt extern NCURSES_EXPORT(int) _nc_write_object (TERMTYPE2 *, char *, unsigned *, unsigned); 196fdd4e1e0SJan Lentfer 197fdd4e1e0SJan Lentfer /* comp_parse.c: entry list handling */ 198fdd4e1e0SJan Lentfer extern NCURSES_EXPORT(void) _nc_read_entry_source (FILE*, char*, int, bool, bool (*)(ENTRY*)); 199fdd4e1e0SJan Lentfer extern NCURSES_EXPORT(bool) _nc_entry_match (char *, char *); 2001d102085SJan Lentfer extern NCURSES_EXPORT(int) _nc_resolve_uses (bool); /* obs 20040705 */ 2011d102085SJan Lentfer extern NCURSES_EXPORT(int) _nc_resolve_uses2 (bool, bool); 202fdd4e1e0SJan Lentfer extern NCURSES_EXPORT(void) _nc_free_entries (ENTRY *); 2031d102085SJan Lentfer extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype)(TERMTYPE *); /* obs 20040705 */ 204*32bb5217SDaniel Fojt extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype2)(TERMTYPE2 *, bool); 205fdd4e1e0SJan Lentfer 206fdd4e1e0SJan Lentfer /* trace_xnames.c */ 207fdd4e1e0SJan Lentfer extern NCURSES_EXPORT(void) _nc_trace_xnames (TERMTYPE *); 208*32bb5217SDaniel Fojt 209*32bb5217SDaniel Fojt #endif /* NCURSES_INTERNALS */ 210*32bb5217SDaniel Fojt 211*32bb5217SDaniel Fojt /* 212*32bb5217SDaniel Fojt * These entrypoints were used by tack before 1.08. 213*32bb5217SDaniel Fojt */ 214*32bb5217SDaniel Fojt 215*32bb5217SDaniel Fojt #undef NCURSES_TACK_1_08 216*32bb5217SDaniel Fojt #ifdef NCURSES_INTERNALS 217*32bb5217SDaniel Fojt #define NCURSES_TACK_1_08 /* nothing */ 218*32bb5217SDaniel Fojt #else 219*32bb5217SDaniel Fojt #define NCURSES_TACK_1_08 GCC_DEPRECATED("upgrade to tack 1.08") 220*32bb5217SDaniel Fojt #endif 221*32bb5217SDaniel Fojt 222*32bb5217SDaniel Fojt /* alloc_ttype.c: elementary allocation code */ 223*32bb5217SDaniel Fojt extern NCURSES_EXPORT(void) _nc_copy_termtype (TERMTYPE *, const TERMTYPE *) NCURSES_TACK_1_08; 224*32bb5217SDaniel Fojt 225*32bb5217SDaniel Fojt /* lib_acs.c */ 226*32bb5217SDaniel Fojt extern NCURSES_EXPORT(void) _nc_init_acs (void) NCURSES_TACK_1_08; /* corresponds to traditional 'init_acs()' */ 227*32bb5217SDaniel Fojt 228*32bb5217SDaniel Fojt /* free_ttype.c: elementary allocation code */ 229*32bb5217SDaniel Fojt extern NCURSES_EXPORT(void) _nc_free_termtype (TERMTYPE *) NCURSES_TACK_1_08; 230fdd4e1e0SJan Lentfer 231fdd4e1e0SJan Lentfer #ifdef __cplusplus 232fdd4e1e0SJan Lentfer } 233fdd4e1e0SJan Lentfer #endif 234*32bb5217SDaniel Fojt 235*32bb5217SDaniel Fojt /* *INDENT-ON* */ 236*32bb5217SDaniel Fojt 237fdd4e1e0SJan Lentfer #endif /* NCURSES_TERM_ENTRY_H_incl */ 238