/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 1996-1999 by Sun Microsystems, Inc. * All rights reserved. */ /* * private.h * * XCurses Library * * Copyright 1990, 1995 by Mortice Kern Systems Inc. All rights reserved. * */ #include #include #include #include #include #define M_TERM_NAME "unknown" /* * Interbyte timer value used for processing multibyte function keys. */ #ifndef M_CURSES_INTERBYTE_TIME #define M_CURSES_INTERBYTE_TIME 10 #endif /* * Maximum number of lines that can be ripped off. */ #ifndef M_CURSES_MAX_RIPOFFLINE #define M_CURSES_MAX_RIPOFFLINE 5 #endif /* * See copywin() and wrefresh() case 4. It is unclear whether XPG4 V2 * disallows supporting case 4 (expanding characters straddling a window * boundary). */ #define M_CURSES_SENSIBLE_WINDOWS /* * Enable typeahead() support. */ /* using unget buffer as typeahead buffer too */ #define M_TYPEAHEAD_SIZE 200 /* * END OF CONFIGURABLE SECTION */ /* * Constant WINDOW definition attributes. */ #define W_IS_PAD 0x0001 /* Window is a pad. */ #define W_END_LINE 0x0002 /* End of line is the margin. */ #define W_FULL_LINE 0x0004 /* Line spans screen width. */ #define W_FULL_WINDOW 0x0008 /* Window is full screen. */ #define W_SCROLL_WINDOW 0x0010 /* Touches bottom-right corner */ /* * WINDOW state. */ #define W_CLEAR_WINDOW 0x0020 /* clearok() clear screen next update. */ #define W_REDRAW_WINDOW 0x0040 /* wredrawln() use simple() next update. */ /* * Configurable WINDOW options. */ #define W_FLUSH 0x0080 /* immedok() update when window changes. */ #define W_CAN_SCROLL 0x0100 /* scrollok() window can software scroll. */ #define W_LEAVE_CURSOR 0x0200 /* leaveok() don't fuss with the cursor. */ #define W_SYNC_UP 0x0400 /* syncok() update ancestors when changed. */ #define W_USE_KEYPAD 0x0800 /* keypad() enbles KEY_ processing. */ #define W_USE_TIMEOUT 0x1000 /* notimeout() disables the interbyte timer. */ #define W_CONFIG_MASK 0x1f80 /* Mask of configurable flags. */ /* * Flags used in SCREEN. */ #define S_ECHO 0x0001 /* Software echo enbled. */ #define S_ENDWIN 0x0002 /* Curses is in "shell" mode. */ #define S_INS_DEL_CHAR 0x0004 /* idcok() enabled for terminal (future). */ #define S_INS_DEL_LINE 0x0008 /* idlok() enabled for terminal. */ #define S_ISATTY 0x0010 /* _kfd is a terminal. */ #define S_USE_META 0x0020 /* meta() enabled. */ #define S_TYPEAHEAD_OK 0x0040 /* typeahead flag */ typedef struct t_decode { struct t_decode *sibling; struct t_decode *child; short key; /* KEY_ value or 0. */ int ch; /* Character found by this node. */ } t_decode; typedef struct { int top; /* # of lines off the top. */ int bottom; /* # of lines off the bottom (-ve). */ struct { int dy; /* Distance from screen top/bottom. */ int (*init)(WINDOW *, int); /* Init. function for window. */ int created; } line[M_CURSES_MAX_RIPOFFLINE]; } t_rip; extern SCREEN *__m_screen; extern int __m_slk_format; extern int __m_slk_labels_on; extern const short __m_keyindex[][2]; extern const char *boolnames[]; extern const char *boolcodes[]; extern const char *boolfnames[]; extern const char *numnames[]; extern const char *numcodes[]; extern const char *numfnames[]; extern const char *strnames[]; extern const char *strcodes[]; extern const char *strfnames[]; #define ATTR_STATE cur_term->_at #define PTERMIOS(x) ((struct termios *)(cur_term->x)) #define __m_cc_width(cc) wcwidth((cc)->_wc[0]) #define TPUTS(a, b, c) tputs(a, b, c) extern int __m_wc_cc(wint_t, cchar_t *); extern int __m_mbs_cc(const char *, attr_t, short, cchar_t *); extern int __m_wcs_cc(const wchar_t *, attr_t, short, cchar_t *); extern int __m_acs_cc(chtype, cchar_t *); extern int __m_wacs_cc(const cchar_t *, cchar_t *); extern int __m_cc_mbs(const cchar_t *, char *, int); extern int __m_cc_sort(cchar_t *); extern int __m_cc_write(const cchar_t *); extern int __m_cc_first(WINDOW *, int, int); extern int __m_cc_next(WINDOW *, int, int); extern int __m_cc_islast(WINDOW *, int, int); extern int __m_cc_expand(WINDOW *, int, int, int); extern int __m_cc_erase(WINDOW *, int, int, int, int); extern int __m_cc_compare(const cchar_t *, const cchar_t *, int); extern int __m_cc_replace(WINDOW *, int, int, const cchar_t *, int); extern int __m_cc_add(WINDOW *, int, int, const cchar_t *, int, int *, int *); #if defined(_LP64) extern void __m_cc_hash(WINDOW *, unsigned int *, int); #else extern void __m_cc_hash(WINDOW *, unsigned long *, int); #endif extern int __m_set_echo(int); extern int __m_tty_get(struct termios *); extern int __m_tty_set(struct termios *); extern int __m_decode_init(t_decode **); extern void __m_decode_free(t_decode **); extern int __m_do_scroll(WINDOW *, int, int, int *, int *); extern int __m_ptr_move(void **, unsigned, unsigned, unsigned, unsigned); extern int __m_doupdate_init(void); extern int __m_wins_wch(WINDOW *, int, int, const cchar_t *, int *, int *); extern int __m_cc_ins(WINDOW *, int, int, const cchar_t *); extern void __m_mvcur_cost(void); extern int __m_cc_modify(WINDOW *, int, int, const cchar_t *); extern int __m_tty_set_prog_mode(void); extern int __m_tputs(const char *, int, int (*)(int)); extern int __m_slk_clear(int); extern int __m_cc_add_k(WINDOW *, int, int, const cchar_t *, int, int *, int *); extern int __m_cc_equal(const cchar_t *, const cchar_t *); extern void __m_touch_locs(WINDOW *, int, int, int); extern int __m_wadd_wch(WINDOW *, const cchar_t *); extern void __m_slk_doupdate(void); extern int __m_outc(int); extern int __m_tty_wc(int, wchar_t *); extern int __m_chtype_cc(chtype, cchar_t *); extern chtype __m_cc_chtype(const cchar_t *); extern int __m_copywin(const WINDOW *, WINDOW *, int); extern WINDOW *__m_newwin(WINDOW *, int, int, int, int); extern int __m_putchar(int); extern int __m_mvcur(int, int, int, int, int (*)(int)); extern int __m_read_terminfo(const char *, TERMINAL *); extern int __m_setupterm(char *, int, int, int *); extern int pollTypeahead(void); extern int wistombs(char *, const wint_t *, int); extern int wistowcs(wchar_t *, const wint_t *, int); extern void wtouchln_hard(WINDOW *, int, int); /* * Unique callback functions to initialize a SCREEN's wide_io_t structure, * which is used by __m_wio_get(). The __xc_ denotes XCurses and is used * instead of __m_ to avoid possible name conflicts else-where in MKS * libraries and applications. Note that wgetch() is used for the get * function. */ extern int __xc_feof(void *); extern int __xc_ferror(void *); extern void __xc_clearerr(void *); extern int __xc_ungetc(int, void *); /* * Input stack macros replaced by these functions. */ extern void iqAdd(unsigned int ch); extern void iqPush(unsigned int ch); extern int iqIsEmpty(void); extern void iqReset(void); extern int iqPull(void); #define WSYNC(w) \ if ((w)->_flags & W_SYNC_UP) {\ wsyncup(w);\ } #define WFLUSH(w) (((w)->_flags & W_FLUSH) ? wrefresh(w) : OK) /* end */