Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 1 | .\"*************************************************************************** |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 2 | .\" Copyright (c) 1998-2014,2015 Free Software Foundation, Inc. * |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 3 | .\" * |
| 4 | .\" Permission is hereby granted, free of charge, to any person obtaining a * |
| 5 | .\" copy of this software and associated documentation files (the * |
| 6 | .\" "Software"), to deal in the Software without restriction, including * |
| 7 | .\" without limitation the rights to use, copy, modify, merge, publish, * |
| 8 | .\" distribute, distribute with modifications, sublicense, and/or sell * |
| 9 | .\" copies of the Software, and to permit persons to whom the Software is * |
| 10 | .\" furnished to do so, subject to the following conditions: * |
| 11 | .\" * |
| 12 | .\" The above copyright notice and this permission notice shall be included * |
| 13 | .\" in all copies or substantial portions of the Software. * |
| 14 | .\" * |
| 15 | .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| 16 | .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| 17 | .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| 18 | .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| 19 | .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| 20 | .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| 21 | .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| 22 | .\" * |
| 23 | .\" Except as contained in this notice, the name(s) of the above copyright * |
| 24 | .\" holders shall not be used in advertising or otherwise to promote the * |
| 25 | .\" sale, use or other dealings in this Software without prior written * |
| 26 | .\" authorization. * |
| 27 | .\"*************************************************************************** |
| 28 | .\" |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 29 | .\" $Id: curs_initscr.3x,v 1.24 2015/07/21 23:01:38 tom Exp $ |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 30 | .TH curs_initscr 3X "" |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 31 | .de bP |
| 32 | .IP \(bu 4 |
| 33 | .. |
| 34 | .ie \n(.g .ds `` \(lq |
| 35 | .el .ds `` `` |
| 36 | .ie \n(.g .ds '' \(rq |
| 37 | .el .ds '' '' |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 38 | .na |
| 39 | .hy 0 |
| 40 | .SH NAME |
| 41 | \fBinitscr\fR, |
| 42 | \fBnewterm\fR, |
| 43 | \fBendwin\fR, |
| 44 | \fBisendwin\fR, |
| 45 | \fBset_term\fR, |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 46 | \fBdelscreen\fR \- \fBcurses\fR screen initialization and manipulation routines |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 47 | .ad |
| 48 | .hy |
| 49 | .SH SYNOPSIS |
| 50 | \fB#include <curses.h>\fR |
| 51 | .sp |
| 52 | \fBWINDOW *initscr(void);\fR |
| 53 | .br |
| 54 | \fBint endwin(void);\fR |
| 55 | .br |
| 56 | \fBbool isendwin(void);\fR |
| 57 | .br |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 58 | \fBSCREEN *newterm(char *\fP\fItype\fP\fB, FILE *\fP\fIoutfd\fP\fB, FILE *\fP\fIinfd\fP\fB);\fR |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 59 | .br |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 60 | \fBSCREEN *set_term(SCREEN *\fP\fInew\fP\fB);\fR |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 61 | .br |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 62 | \fBvoid delscreen(SCREEN* \fP\fIsp\fP\fB);\fR |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 63 | .br |
| 64 | .SH DESCRIPTION |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 65 | .SS initscr |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 66 | \fBinitscr\fR is normally the first \fBcurses\fR routine to call when |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 67 | initializing a program. |
| 68 | A few special routines sometimes need to be called before it; |
| 69 | these are \fBslk_init\fR, \fBfilter\fR, \fBripoffline\fR, |
| 70 | \fBuse_env\fR. |
| 71 | For multiple-terminal applications, |
| 72 | \fBnewterm\fR may be called before \fBinitscr\fR. |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 73 | .PP |
| 74 | The initscr code determines the terminal type and initializes all \fBcurses\fR |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 75 | data structures. |
| 76 | \fBinitscr\fR also causes the first call to \fBrefresh\fR to clear the screen. |
| 77 | If errors occur, \fBinitscr\fR writes an appropriate error |
| 78 | message to standard error and exits; |
| 79 | otherwise, a pointer is returned to \fBstdscr\fR. |
| 80 | .SS newterm |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 81 | .PP |
| 82 | A program that outputs to more than one terminal should use the \fBnewterm\fR |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 83 | routine for each terminal instead of \fBinitscr\fR. |
| 84 | A program that needs to inspect capabilities, |
| 85 | so it can continue to run in a line-oriented mode if the |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 86 | terminal cannot support a screen-oriented program, would also use |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 87 | \fBnewterm\fR. |
| 88 | The routine \fBnewterm\fR should be called once for each terminal. |
| 89 | It returns a variable of type \fBSCREEN *\fR which should be saved |
| 90 | as a reference to that terminal. |
| 91 | \fBnewterm\fP's arguments are |
| 92 | .bP |
| 93 | the \fItype\fR of the terminal to be used in place of \fB$TERM\fR, |
| 94 | .bP |
| 95 | a file pointer for output to the terminal, and |
| 96 | .bP |
| 97 | another file pointer for input from the terminal |
| 98 | .PP |
| 99 | If the \fItype\fR parameter is \fBNULL\fR, \fB$TERM\fR will be used. |
| 100 | .SS endwin |
| 101 | .PP |
| 102 | The program must also call |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 103 | \fBendwin\fR for each terminal being used before exiting from \fBcurses\fR. |
| 104 | If \fBnewterm\fR is called more than once for the same terminal, the first |
| 105 | terminal referred to must be the last one for which \fBendwin\fR is called. |
| 106 | .PP |
| 107 | A program should always call \fBendwin\fR before exiting or escaping from |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 108 | \fBcurses\fR mode temporarily. |
| 109 | This routine |
| 110 | .bP |
| 111 | restores tty modes, |
| 112 | .bP |
| 113 | moves the cursor to the lower left-hand corner of the screen and |
| 114 | .bP |
| 115 | resets the terminal into |
| 116 | the proper non-visual mode. |
| 117 | .PP |
| 118 | Calling \fBrefresh\fR or \fBdoupdate\fR after a |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 119 | temporary escape causes the program to resume visual mode. |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 120 | .SS isendwin |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 121 | .PP |
| 122 | The \fBisendwin\fR routine returns \fBTRUE\fR if \fBendwin\fR has been |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 123 | called without any subsequent calls to \fBwrefresh\fR, |
| 124 | and \fBFALSE\fR otherwise. |
| 125 | .SS set_term |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 126 | .PP |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 127 | The \fBset_term\fR routine is used to switch between different terminals. |
| 128 | The screen reference \fBnew\fR becomes the new current terminal. |
| 129 | The previous terminal is returned by the routine. |
| 130 | This is the only routine which manipulates \fBSCREEN\fR pointers; |
| 131 | all other routines affect only the current terminal. |
| 132 | .SS delscreen |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 133 | .PP |
| 134 | The \fBdelscreen\fR routine frees storage associated with the |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 135 | \fBSCREEN\fR data structure. |
| 136 | The \fBendwin\fR routine does not do |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 137 | this, so \fBdelscreen\fR should be called after \fBendwin\fR if a |
| 138 | particular \fBSCREEN\fR is no longer needed. |
| 139 | .SH RETURN VALUE |
| 140 | \fBendwin\fR returns the integer \fBERR\fR upon failure and \fBOK\fR |
| 141 | upon successful completion. |
| 142 | .PP |
| 143 | Routines that return pointers always return \fBNULL\fR on error. |
| 144 | .PP |
| 145 | X/Open defines no error conditions. |
| 146 | In this implementation |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 147 | .bP |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 148 | \fBendwin\fP returns an error if the terminal was not initialized. |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 149 | .bP |
| 150 | \fBnewterm\fP |
| 151 | returns an error if it cannot allocate the data structures for the screen, |
| 152 | or for the top-level windows within the screen, |
| 153 | i.e., |
| 154 | \fBcurscr\fP, \fBnewscr\fP, or \fBstdscr\fP. |
| 155 | .bP |
| 156 | \fBset_term\fP |
| 157 | returns no error. |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 158 | .SH NOTES |
| 159 | Note that \fBinitscr\fR and \fBnewterm\fR may be macros. |
| 160 | .SH PORTABILITY |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 161 | These functions were described in the XSI Curses standard, Issue 4. |
| 162 | As of 2015, the current document is X/Open Curses, Issue 7. |
| 163 | .SS Differences |
| 164 | X/Open specifies that portable applications must not |
| 165 | call \fBinitscr\fR more than once: |
| 166 | .bP |
| 167 | The portable way to use \fBinitscr\fP is once only, |
| 168 | using \fBrefresh\fP (see curs_refresh(3X)) to restore the screen after \fBendwin\fP. |
| 169 | .bP |
| 170 | This implementation allows using \fBinitscr\fP after \fBendwin\fP. |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 171 | .PP |
| 172 | Old versions of curses, e.g., BSD 4.4, may have returned a null pointer |
| 173 | from \fBinitscr\fR when an error is detected, rather than exiting. |
| 174 | It is safe but redundant to check the return value of \fBinitscr\fR |
| 175 | in XSI Curses. |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 176 | .SS Unset TERM Variable |
| 177 | .PP |
| 178 | If the TERM variable is missing or empty, \fBinitscr\fP uses the |
| 179 | value \*(``unknown\*('', |
| 180 | which normally corresponds to a terminal entry with the \fIgeneric\fP |
| 181 | (\fIgn\fP) capability. |
| 182 | Generic entries are detected by \fBsetupterm\fP (see curs_terminfo(3X)) and cannot be |
| 183 | used for full-screen operation. |
| 184 | Other implementations may handle a missing/empty TERM variable differently. |
| 185 | .SS Signal Handlers |
| 186 | .PP |
| 187 | Quoting from X/Open Curses, section 3.1.1: |
| 188 | .RS 5 |
| 189 | .PP |
| 190 | \fICurses implementations may provide for special handling of the SIGINT, |
| 191 | SIGQUIT and SIGTSTP signals if their disposition is SIG_DFL at the time |
| 192 | \fBinitscr()\fP is called \fP... |
| 193 | .PP |
| 194 | \fIAny special handling for these signals may remain in effect for the |
| 195 | life of the process or until the process changes the disposition of |
| 196 | the signal.\fP |
| 197 | .PP |
| 198 | \fINone of the Curses functions are required to be safe with respect to signals \fP... |
| 199 | .RE |
| 200 | .PP |
| 201 | This implementation establishes signal handlers during initialization, |
| 202 | e.g., \fBinitscr\fP or \fBnewterm\fP. |
| 203 | Applications which must handle these signals should set up the corresponding |
| 204 | handlers \fIafter\fP initializing the library: |
| 205 | .TP 5 |
| 206 | .B SIGINT |
| 207 | The handler \fIattempts\fP to cleanup the screen on exit. |
| 208 | Although it \fIusually\fP works as expected, there are limitations: |
| 209 | .RS 5 |
| 210 | .bP |
| 211 | Walking the \fBSCREEN\fP list is unsafe, since all list management |
| 212 | is done without any signal blocking. |
| 213 | .bP |
| 214 | On systems which have \fBREENTRANT\fP turned on, \fBset_term\fP uses |
| 215 | functions which could deadlock or misbehave in other ways. |
| 216 | .bP |
| 217 | \fBendwin\fP calls other functions, many of which use stdio or |
| 218 | other library functions which are clearly unsafe. |
| 219 | .RE |
| 220 | .TP 5 |
| 221 | .B SIGTERM |
| 222 | This uses the same handler as \fBSIGINT\fP, with the same limitations. |
| 223 | It is not mentioned in X/Open Curses, but is more suitable for this |
| 224 | purpose than \fBSIGQUIT\fP (which is used in debugging). |
| 225 | .TP 5 |
| 226 | .B SIGTSTP |
| 227 | This handles the \fIstop\fP signal, used in job control. |
| 228 | When resuming the process, this implementation discards pending |
| 229 | input with \fBflushinput\fP (see curs_util(3X)), and repaints the screen |
| 230 | assuming that it has been completely altered. |
| 231 | It also updates the saved terminal modes with \fBdef_shell_mode\fP (see curs_kernel(3X)). |
| 232 | .TP 5 |
| 233 | .B SIGWINCH |
| 234 | This handles the window-size changes which were initially ignored in |
| 235 | the standardization efforts. |
| 236 | The handler sets a (signal-safe) variable |
| 237 | which is later tested in \fBwgetch\fP (see curs_getch(3X)). |
| 238 | If \fBkeypad\fP has been enabled for the corresponding window, |
| 239 | \fBwgetch\fP returns the key symbol \fBKEY_RESIZE\fP. |
| 240 | At the same time, \fBwgetch\fP calls \fBresizeterm\fP to adjust the |
| 241 | standard screen \fBstdscr\fP, |
| 242 | and update other data such as \fBLINES\fP and \fBCOLS\fP. |
Amit Daniel Kachhap | e6a01f5 | 2011-07-20 11:45:59 +0530 | [diff] [blame] | 243 | .SH SEE ALSO |
Steve Kondik | ae271bc | 2015-11-15 02:50:53 +0100 | [diff] [blame] | 244 | \fBcurses\fR(3X), |
| 245 | \fBcurs_kernel\fR(3X), |
| 246 | \fBcurs_refresh\fR(3X), |
| 247 | \fBcurs_slk\fR(3X), |
| 248 | \fBcurs_terminfo\fR(3X), |
| 249 | \fBcurs_util\fR(3X), |
| 250 | \fBcurs_variables\fR(3X). |