| .\"*************************************************************************** |
| .\" Copyright 2018-2021,2022 Thomas E. Dickey * |
| .\" Copyright 2010-2015,2017 Free Software Foundation, Inc. * |
| .\" * |
| .\" Permission is hereby granted, free of charge, to any person obtaining a * |
| .\" copy of this software and associated documentation files (the * |
| .\" "Software"), to deal in the Software without restriction, including * |
| .\" without limitation the rights to use, copy, modify, merge, publish, * |
| .\" distribute, distribute with modifications, sublicense, and/or sell * |
| .\" copies of the Software, and to permit persons to whom the Software is * |
| .\" furnished to do so, subject to the following conditions: * |
| .\" * |
| .\" The above copyright notice and this permission notice shall be included * |
| .\" in all copies or substantial portions of the Software. * |
| .\" * |
| .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| .\" * |
| .\" Except as contained in this notice, the name(s) of the above copyright * |
| .\" holders shall not be used in advertising or otherwise to promote the * |
| .\" sale, use or other dealings in this Software without prior written * |
| .\" authorization. * |
| .\"*************************************************************************** |
| .\" |
| .\" $Id: curs_sp_funcs.3x,v 1.27 2022/02/12 20:05:11 tom Exp $ |
| .TH curs_sp_funcs 3X "" |
| .ie \n(.g .ds `` \(lq |
| .el .ds `` `` |
| .ie \n(.g .ds '' \(rq |
| .el .ds '' '' |
| .na |
| .hy 0 |
| .SH NAME |
| curs_sp_funcs \- \fBcurses\fP screen-pointer extension |
| .ad |
| .hy |
| .SH SYNOPSIS |
| \fB#include <curses.h>\fP |
| .nf |
| .sp |
| \fBint alloc_pair_sp(SCREEN* \fIsp\fB, int \fIfg\fB, int \fIbg\fB);\fR |
| .br |
| \fBint assume_default_colors_sp(SCREEN* \fIsp\fB, int \fIfg\fB, int \fIbg\fB);\fR |
| .br |
| \fBint baudrate_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint beep_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBbool can_change_color_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint cbreak_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint color_content_sp(SCREEN* \fIsp\fB, short \fIcolor\fB, short* \fIr\fB, short* \fIg\fB, short* \fIb\fB);\fR |
| .br |
| \fBint curs_set_sp(SCREEN* \fIsp\fB, int \fIvisibility\fR);\fR |
| .br |
| \fBint def_prog_mode_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint def_shell_mode_sp(SCREEN* \fIsp\fB);\fR |
| .sp |
| \fBint define_key_sp(SCREEN* \fIsp\fB, const char * \fIdefinition\fB, int \fIkeycode\fB);\fR |
| .br |
| \fBint delay_output_sp(SCREEN* \fIsp\fB, int \fIms\fB);\fR |
| .br |
| \fBint doupdate_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint echo_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint endwin_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBchar erasechar_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint erasewchar_sp(SCREEN* \fIsp\fB, wchar_t *\fIch\fB);\fR |
| .br |
| \fBint extended_color_content_sp(SCREEN * \fIsp\fB, int \fIcolor\fB, int * \fIr\fB, int * \fIg\fB, int * \fIb\fB);\fR |
| .br |
| \fBint extended_pair_content_sp(SCREEN* \fIsp\fB, int \fIpair\fB, int * \fIfg\fB, int * \fIbg\fB);\fR |
| .br |
| \fBint extended_slk_color_sp(SCREEN* \fIsp\fB, int \fIpair\fB);\fR |
| .sp |
| \fBvoid filter_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint find_pair_sp(SCREEN* \fIsp\fB, int \fIfg\fB, int \fIbg\fB);\fR |
| .br |
| \fBint flash_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint flushinp_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint free_pair_sp(SCREEN* \fIsp\fB, int \fIpair\fB);\fR |
| .br |
| \fBint get_escdelay_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint getmouse_sp(SCREEN* \fIsp\fB, MEVENT* \fBevent\fB);\fR |
| .br |
| \fBWINDOW* getwin_sp(SCREEN* \fIsp\fB, FILE* \fIfilep\fB);\fR |
| .br |
| \fBint halfdelay_sp(SCREEN* \fIsp\fB, int \fItenths\fB);\fR |
| .br |
| \fBbool has_colors_sp(SCREEN* \fIsp\fB);\fR |
| .sp |
| \fBbool has_ic_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBbool has_il_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint has_key_sp(SCREEN* \fIsp\fB, int \fIch\fB);\fR |
| .br |
| \fBbool has_mouse_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint init_color_sp(SCREEN* \fIsp\fB, short \fIcolor\fB, short \fIr\fB, short \fIg\fB, short \fIb\fB);\fR |
| .br |
| \fBint init_extended_color_sp(SCREEN* \fIsp\fB, int \fIcolor\fB, int \fIr\fB, int \fIg\fB, int \fIb\fB);\fR |
| .br |
| \fBint init_extended_pair_sp(SCREEN* \fIsp\fB, int \fIpair\fB, int \fIfg\fB, int \fIbg\fB);\fR |
| .br |
| \fBint init_pair_sp(SCREEN* \fIsp\fB, short \fIpair\fB, short \fIfg\fB, short \fIbg\fB);\fR |
| .br |
| \fBint intrflush_sp(SCREEN* \fIsp\fB, WINDOW* \fIwin\fB, bool \fIbf\fB);\fR |
| .br |
| \fBbool is_term_resized_sp(SCREEN* \fIsp\fB, int \fIlines\fB, int \fIcolumns\fB);\fR |
| .sp |
| \fBbool isendwin_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint key_defined_sp(SCREEN* \fIsp\fB, const char *\fIdefinition\fB);\fR |
| .br |
| \fBchar* keybound_sp(SCREEN* \fIsp\fB, int \fIkeycode\fB, int \fIcount\fB);\fR |
| .br |
| \fBNCURSES_CONST char * keyname_sp(SCREEN* \fIsp\fB, int \fIc\fB);\fR |
| .br |
| \fBint keyok_sp(SCREEN* \fIsp\fB, int \fIkeycode\fB, bool \fIenable\fB);\fR |
| .br |
| \fBchar killchar_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint killwchar_sp(SCREEN* \fIsp\fB, wchar_t *\fIch\fB);\fR |
| .br |
| \fBchar* longname_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint mcprint_sp(SCREEN* \fIsp\fB, char *\fIdata\fB, int \fIlen\fB);\fR |
| .br |
| \fBint mouseinterval_sp(SCREEN* \fIsp\fB, int \fIerval\fB);\fR |
| .sp |
| \fBmmask_t mousemask_sp(SCREEN* \fIsp\fB, mmask_t \fInewmask\fB, mmask_t *\fIoldmask\fB);\fR |
| .br |
| \fBint mvcur_sp(SCREEN* \fIsp\fB, int \fIoldrow\fB, int \fIoldcol\fB, int \fInewrow\fB, int \fInewcol\fB);\fR |
| .br |
| \fBint napms_sp(SCREEN* \fIsp\fB, int \fIms\fB);\fR |
| .br |
| \fBWINDOW* newpad_sp(SCREEN* \fIsp\fB, int \fInrows\fB, int \fIncols\fB);\fR |
| .br |
| \fBSCREEN* new_prescr(void);\fP |
| .br |
| \fBSCREEN* newterm_sp(SCREEN* \fIsp\fB, const char *\fItype\fB, FILE *\fIoutfd\fB, FILE *\fIinfd\fB);\fR |
| .br |
| \fBWINDOW* newwin_sp(SCREEN* \fIsp\fB, int \fInlines\fB, int \fIncols\fB, int \fIbegin_y\fB, int \fIbegin_x\fB);\fR |
| .br |
| \fBint nl_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint nocbreak_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint noecho_sp(SCREEN* \fIsp\fB);\fR |
| .sp |
| \fBvoid nofilter_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint nonl_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBvoid noqiflush_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint noraw_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint pair_content_sp(SCREEN* \fIsp\fB, short \fIpair\fB, short* \fIfg\fB, short* \fIbg\fB);\fR |
| .br |
| \fBvoid qiflush_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint raw_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint reset_prog_mode_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBvoid reset_color_pairs_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint reset_shell_mode_sp(SCREEN* \fIsp\fB);\fR |
| .sp |
| \fBint resetty_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint resize_term_sp(SCREEN* \fIsp\fB, int \fIlines\fB, int \fIcolumns\fB);\fR |
| .br |
| \fBint resizeterm_sp(SCREEN* \fIsp\fB, int \fIlines\fB, int \fIcolumns\fB);\fR |
| .br |
| \fBint ripoffline_sp(SCREEN* \fIsp\fB, int \fIline\fB, int (*\fIinit\fB)(WINDOW* \fIwin\fB, int \fIfmt\fB));\fR |
| .br |
| \fBint savetty_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint scr_init_sp(SCREEN* \fIsp\fB, const char *\fIfilename\fB);\fR |
| .br |
| \fBint scr_restore_sp(SCREEN* \fIsp\fB, const char *\fIfilename\fB);\fR |
| .br |
| \fBint scr_set_sp(SCREEN* \fIsp\fB, const char *\fIfilename\fB);\fR |
| .br |
| \fBint set_escdelay_sp(SCREEN* \fIsp\fB, int \fIms\fB);\fR |
| .br |
| \fBint set_tabsize_sp(SCREEN* \fIsp\fB, int \fIcols\fB);\fR |
| .sp |
| \fBint slk_attr_set_sp(SCREEN* \fIsp\fB, const attr_t \fIattrs\fB, short \fIpair\fB, void*\fIopts\fB);\fR |
| .br |
| \fBint slk_attrset_sp(SCREEN* \fIsp\fB, const chtype \fIa\fB);\fR |
| .br |
| \fBint slk_attroff_sp(SCREEN* \fIsp\fB, const chtype \fIa\fB);\fR |
| .br |
| \fBint slk_attron_sp(SCREEN* \fIsp\fB, const chtype \fIa\fB);\fR |
| .br |
| \fBattr_t slk_attr_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint slk_clear_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint slk_color_sp(SCREEN* \fIsp\fB, short \fIpair\fB);\fR |
| .br |
| \fBint slk_init_sp(SCREEN* \fIsp\fB, int \fIfmt\fB);\fR |
| .br |
| \fBchar* slk_label_sp(SCREEN* \fIsp\fB, int \fIlabnum\fB);\fR |
| .br |
| \fBint slk_noutrefresh_sp(SCREEN* \fIsp\fB);\fR |
| .sp |
| \fBint slk_refresh_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint slk_restore_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint slk_set_sp(SCREEN* \fIsp\fB, int \fIlabnum\fB, const char * \fIlabel\fB, int \fIfmt\fB);\fR |
| .br |
| \fBint slk_touch_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint start_color_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBattr_t term_attrs_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBchtype termattrs_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBchar* termname_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBint typeahead_sp(SCREEN* \fIsp\fB, int \fIfd\fB);\fR |
| .br |
| \fBint unget_wch_sp(SCREEN* \fIsp\fB, const wchar_t \fIwch\fB);\fR |
| .sp |
| \fBint ungetch_sp(SCREEN* \fIsp\fB, int \fIch\fB);\fR |
| .br |
| \fBint ungetmouse_sp(SCREEN* \fIsp\fB,MEVENT * \fBevent\fB);\fR |
| .br |
| \fBint use_default_colors_sp(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBvoid use_env_sp(SCREEN* \fIsp\fB, bool \fIbf\fB);\fR |
| .br |
| \fBint use_legacy_coding_sp(SCREEN* \fIsp\fB, int \fIlevel\fB);\fR |
| .br |
| \fBvoid use_tioctl_sp(SCREEN *\fIsp\fB, bool \fIbf\fB);\fR |
| .br |
| \fBint vid_attr_sp(SCREEN* \fIsp\fB, attr_t \fIattrs\fB, short \fIpair\fB, void * \fIopts\fB);\fR |
| .br |
| \fBint vid_puts_sp(SCREEN* \fIsp\fB, attr_t \fIattrs\fB, short \fIpair\fB, void * \fIopts\fB, NCURSES_SP_OUTC \fIputc\fB);\fR |
| .br |
| \fBint vidattr_sp(SCREEN* \fIsp\fB, chtype \fIattrs\fB);\fR |
| .br |
| \fBint vidputs_sp(SCREEN* \fIsp\fB, chtype \fIattrs\fB, NCURSES_SP_OUTC \fIputc\fB);\fR |
| .br |
| \fBwchar_t* wunctrl_sp(SCREEN* \fIsp\fB, cchar_t *\fIch\fB);\fR |
| .sp |
| \fB#include <form.h>\fP |
| .sp |
| \fBFORM* new_form_sp(SCREEN* \fIsp\fB, FIELD **\fIfields\fB);\fR |
| .sp |
| \fB#include <menu.h>\fP |
| .sp |
| \fBMENU* new_menu_sp(SCREEN* \fIsp\fB, ITEM **\fIitems\fB);\fR |
| .sp |
| \fB#include <panel.h>\fP |
| .sp |
| \fBPANEL* ceiling_panel(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBPANEL* ground_panel(SCREEN* \fIsp\fB);\fR |
| .br |
| \fBvoid update_panels_sp(SCREEN* \fIsp\fB);\fR |
| .sp |
| \fB#include <term.h>\fP |
| .sp |
| \fBint del_curterm_sp(SCREEN* \fIsp\fB, TERMINAL *\fIoterm\fB);\fR |
| .br |
| \fBint putp_sp(SCREEN* \fIsp\fB, const char *\fIstr\fB);\fR |
| .br |
| \fBint restartterm_sp(SCREEN* \fIsp\fB, NCURSES_CONST char*\fIterm\fB, int \fIfiledes\fB, int *\fIerrret\fB);\fR |
| .br |
| \fBTERMINAL* set_curterm_sp(SCREEN* \fIsp\fB, TERMINAL*\fInterm\fB);\fR |
| .br |
| \fBint tgetent_sp(SCREEN* \fIsp\fB, char *\fIbp\fB, const char *\fIname\fB);\fR |
| .br |
| \fBint tgetflag_sp(SCREEN* \fIsp\fB, const char *\fIcapname\fB);\fR |
| .br |
| \fBint tgetnum_sp(SCREEN* \fIsp\fB, const char *\fIcapname\fB);\fR |
| .br |
| \fBchar* tgetstr_sp(SCREEN* \fIsp\fB, const char *\fIcapname\fB, char **\fIarea\fB);\fR |
| .br |
| \fBchar* tgoto_sp(SCREEN* \fIsp\fB, const char *\fIcapname\fB, int \fIcol\fB, int \fIrow\fB);\fR |
| .br |
| \fBint tigetflag_sp(SCREEN* \fIsp\fB, const char *\fIcapname\fB);\fR |
| .br |
| \fBint tigetnum_sp(SCREEN* \fIsp\fB, const char *\fIcapname\fB);\fR |
| .br |
| \fBchar* tigetstr_sp(SCREEN* \fIsp\fB, const char *\fIcapname\fB);\fR |
| .br |
| \fR/* may instead use 9 long parameters */\fP |
| .br |
| \fBchar* tparm_sp(SCREEN* \fIsp\fB, const char *\fIstr\fB, ...);\fR |
| .br |
| \fBint tputs_sp(SCREEN* \fIsp\fB, const char *\fIstr\fB, int \fIaffcnt\fB, NCURSES_SP_OUTC \fIputc\fB);\fR |
| .sp |
| \fB#include <unctrl.h>\fP |
| .sp |
| \fBNCURSES_CONST char* unctrl_sp(SCREEN* \fIsp\fB, chtype \fIc\fB);\fR |
| .ad |
| .br |
| .SH DESCRIPTION |
| This implementation can be configured to provide a set of functions which |
| improve the ability to manage multiple screens. |
| This feature can be added to any of the configurations supported by ncurses; |
| it adds new entrypoints |
| without changing the meaning of any of the existing ones. |
| .PP |
| .\" *************************************************************************** |
| .SS IMPROVED FUNCTIONS |
| Most of the functions are new versions of existing functions. |
| A parameter is added at the front of the parameter list. |
| It is a SCREEN pointer. |
| .PP |
| The existing functions all use the current screen, |
| which is a static variable. |
| The extended functions use the specified screen, |
| thereby reducing the number of variables which must be modified |
| to update multiple screens. |
| .\" *************************************************************************** |
| .SS NEW FUNCTIONS |
| Here are the new functions: |
| .TP 5 |
| ceiling_panel |
| this returns a pointer to the topmost panel in the given screen. |
| .TP 5 |
| ground_panel |
| this returns a pointer to the lowest panel in the given screen. |
| .TP 5 |
| new_prescr |
| when creating a new screen, the library uses static variables which |
| have been preset, e.g., by \fBuse_env\fP(3X), \fBfilter\fP(3X), etc. |
| With the screen-pointer extension, |
| there are situations where it must create a current screen before |
| the unextended library does. |
| The \fBnew_prescr\fP function is used internally to handle these cases. |
| It is also provided as an entrypoint to allow applications to customize |
| the library initialization. |
| .\" *************************************************************************** |
| .SH NOTES |
| This extension introduces some new names: |
| .TP 5 |
| NCURSES_SP_FUNCS |
| This is set to the library patch-level number. |
| In the unextended library, this is zero (0), |
| to make it useful for checking if the extension is provided. |
| .TP 5 |
| NCURSES_SP_NAME |
| The new functions are named using the macro \fINCURSES_SP_NAME\fP, |
| which hides the actual implementation. |
| Currently this adds a \*(``_sp\*('' suffix to the name of the unextended function. |
| This manual page indexes the extensions showing the full name. |
| However the proper usage of these functions uses the macro, |
| to provide for the possibility of changing the naming convention |
| for specific library configurations. |
| .TP 5 |
| NCURSES_SP_OUTC |
| This is a new function-pointer type to use in the screen-pointer functions |
| where an \fINCURSES_OUTC\fP is used in the unextended library. |
| .TP 5 |
| NCURSES_OUTC |
| This is a function-pointer type used for the cases where a function passes |
| characters to the output stream, e.g., \fBvidputs\fP(3X). |
| .PP |
| .SH PORTABILITY |
| These routines are specific to ncurses. |
| They were not supported on Version 7, BSD or System V implementations. |
| It is recommended that any code depending on ncurses extensions |
| be conditioned using \fINCURSES_SP_FUNCS\fP. |
| .SH SEE ALSO |
| \fBcurses\fP(3X), |
| \fBcurs_opaque\fP(3X), |
| \fBcurs_threads\fP(3X). |