]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - include/term_entry.h
ncurses 5.0
[ncurses.git] / include / term_entry.h
index ada2791b830a540810f8148e470df9d01cde552a..a19b6010af767de1e941587fe4e7b550fd68bfe7 100644 (file)
 #ifndef _TERM_ENTRY_H
 #define _TERM_ENTRY_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <term.h>
+
 #define MAX_USES       32
 
 typedef struct entry {
@@ -57,6 +63,28 @@ typedef struct entry {
 }
 ENTRY;
 
+#if NCURSES_XNAMES
+#define NUM_BOOLEANS(tp) (tp)->num_Booleans
+#define NUM_NUMBERS(tp)  (tp)->num_Numbers
+#define NUM_STRINGS(tp)  (tp)->num_Strings
+#define EXT_NAMES(tp,i,limit,index,table) (i >= limit) ? tp->ext_Names[index] : table[i]
+#else
+#define NUM_BOOLEANS(tp) BOOLCOUNT
+#define NUM_NUMBERS(tp)  NUMCOUNT
+#define NUM_STRINGS(tp)  STRCOUNT
+#define EXT_NAMES(tp,i,limit,index,table) table[i]
+#endif
+
+#define NUM_EXT_NAMES(tp) ((tp)->ext_Booleans + (tp)->ext_Numbers + (tp)->ext_Strings)
+
+#define for_each_boolean(n,tp) for(n = 0; n < NUM_BOOLEANS(tp); n++)
+#define for_each_number(n,tp)  for(n = 0; n < NUM_NUMBERS(tp);  n++)
+#define for_each_string(n,tp)  for(n = 0; n < NUM_STRINGS(tp);  n++)
+
+#define ExtBoolname(tp,i,names) EXT_NAMES(tp, i, BOOLCOUNT, (i - (tp->num_Booleans - tp->ext_Booleans)), names)
+#define ExtNumname(tp,i,names)  EXT_NAMES(tp, i, NUMCOUNT, (i - (tp->num_Numbers - tp->ext_Numbers)) + tp->ext_Booleans, names)
+#define ExtStrname(tp,i,names)  EXT_NAMES(tp, i, STRCOUNT, (i - (tp->num_Strings - tp->ext_Strings)) + (tp->ext_Numbers + tp->ext_Booleans), names)
+
 extern ENTRY   *_nc_head, *_nc_tail;
 #define for_entry_list(qp)     for (qp = _nc_head; qp; qp = qp->next)
 
@@ -64,13 +92,45 @@ extern ENTRY        *_nc_head, *_nc_tail;
 
 #define NULLHOOK        (bool(*)(ENTRY *))0
 
+/*
+ * Note that WANTED and PRESENT are not simple inverses!  If a capability
+ * has been explicitly cancelled, it's not considered WANTED.
+ */
+#define WANTED(s)      ((s) == ABSENT_STRING)
+#define PRESENT(s)     (((s) != ABSENT_STRING) && ((s) != CANCELLED_STRING))
+
+#define ANDMISSING(p,q) \
+               {if (PRESENT(p) && !PRESENT(q)) _nc_warning(#p " but no " #q);}
+
+#define PAIRED(p,q) \
+               { \
+               if (PRESENT(q) && !PRESENT(p)) \
+                       _nc_warning(#q " but no " #p); \
+               if (PRESENT(p) && !PRESENT(q)) \
+                       _nc_warning(#p " but no " #q); \
+               }
+
 /* alloc_entry.c: elementary allocation code */
-extern void _nc_init_entry(TERMTYPE *const);
+extern ENTRY *_nc_copy_entry(ENTRY *oldp);
 extern char *_nc_save_str(const char *const);
+extern void _nc_init_entry(TERMTYPE *const);
 extern void _nc_merge_entry(TERMTYPE *const, TERMTYPE *const);
 extern void _nc_wrap_entry(ENTRY *const);
 
+/* alloc_ttype.c: elementary allocation code */
+extern void _nc_align_termtype(TERMTYPE *, TERMTYPE *);
+extern void _nc_copy_termtype(TERMTYPE *, TERMTYPE *);
+
+/* free_ttype.c: elementary allocation code */
+extern void _nc_free_termtype(TERMTYPE *);
+
+/* lib_acs.c */
+extern void _nc_init_acs(void);        /* corresponds to traditional 'init_acs()' */
+
 /* parse_entry.c: entry-parsing code */
+#if NCURSES_XNAMES
+extern bool _nc_user_definable;
+#endif
 extern int _nc_parse_entry(ENTRY *, int, bool);
 extern int _nc_capcmp(const char *, const char *);
 
@@ -83,7 +143,13 @@ extern void _nc_read_entry_source(FILE*, char*, int, bool, bool (*)(ENTRY*));
 extern bool _nc_entry_match(char *, char *);
 extern int _nc_resolve_uses(void);
 extern void _nc_free_entries(ENTRY *);
+extern void (*_nc_check_termtype)(TERMTYPE *);
 
-#endif /* _TERM_ENTRY_H */
+/* trace_xnames.c */
+extern void _nc_trace_xnames(TERMTYPE *);
 
-/* term_entry.h ends here */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TERM_ENTRY_H */