X-Git-Url: https://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=man%2Fcurs_initscr.3x;h=0f460af14eee2c2b7acea94491409a335d7d3a4b;hb=HEAD;hp=3bf80125cd7280b2a2c5bddf05fd414db97ebc0c;hpb=894a177fd5228cdbe790bd1dc9435bd435c29681;p=ncurses.git diff --git a/man/curs_initscr.3x b/man/curs_initscr.3x index 3bf80125..1e30604a 100644 --- a/man/curs_initscr.3x +++ b/man/curs_initscr.3x @@ -1,5 +1,5 @@ .\"*************************************************************************** -.\" Copyright 2018-2022,2023 Thomas E. Dickey * +.\" Copyright 2018-2023,2024 Thomas E. Dickey * .\" Copyright 1998-2016,2017 Free Software Foundation, Inc. * .\" * .\" Permission is hereby granted, free of charge, to any person obtaining a * @@ -27,8 +27,8 @@ .\" authorization. * .\"*************************************************************************** .\" -.\" $Id: curs_initscr.3x,v 1.53 2023/10/07 21:19:07 tom Exp $ -.TH curs_initscr 3X 2023-10-07 "ncurses 6.4" "Library calls" +.\" $Id: curs_initscr.3x,v 1.75 2024/06/08 20:34:23 tom Exp $ +.TH curs_initscr 3X 2024-06-08 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls" .ie \n(.g \{\ .ds `` \(lq .ds '' \(rq @@ -91,7 +91,7 @@ terminal cannot support a screen-oriented program, would also use \fBnewterm\fP. .PP The routine \fBnewterm\fP should be called once for each terminal. -It returns a variable of type \fBSCREEN *\fP which should be saved +It returns a variable of type \fISCREEN *\fP which should be saved as a reference to that terminal. \fBnewterm\fP's arguments are .bP @@ -104,8 +104,8 @@ an input stream connected to the terminal If the \fItype\fP parameter is \fBNULL\fP, \fB$TERM\fP will be used. .PP The file descriptor of the output stream is passed to \fBsetupterm\fP(3X), -which returns a pointer to a \fBTERMINAL\fP structure. -\fBnewterm\fP's return value holds a pointer to the \fBTERMINAL\fP structure. +which returns a pointer to a \fI\%TERMINAL\fP structure. +\fBnewterm\fP's return value holds a pointer to the \fI\%TERMINAL\fP structure. .SS endwin The program must also call \fBendwin\fP for each terminal being used before exiting from \fBcurses\fP. @@ -138,14 +138,14 @@ and \fBFALSE\fP otherwise. The \fBset_term\fP routine is used to switch between different terminals. The screen reference \fInew\fP becomes the new current terminal. The previous terminal is returned by the routine. -This is the only routine which manipulates \fBSCREEN\fP pointers; +This is the only routine which manipulates \fISCREEN\fP pointers; all other routines affect only the current terminal. .SS delscreen The \fBdelscreen\fP routine frees storage associated with the -\fBSCREEN\fP data structure. +\fISCREEN\fP data structure. The \fBendwin\fP routine does not do this, so \fBdelscreen\fP should be called after \fBendwin\fP if a -particular \fBSCREEN\fP is no longer needed. +particular \fISCREEN\fP is no longer needed. .SH RETURN VALUE \fBendwin\fP returns the integer \fBERR\fP upon failure and \fBOK\fP upon successful completion. @@ -155,10 +155,23 @@ Routines that return pointers always return \fBNULL\fP on error. X/Open defines no error conditions. In this implementation .bP -\fBendwin\fP returns an error if the terminal was not initialized. +\fBendwin\fP returns +.B ERR +if +.RS +.bP +the terminal was not initialized, or +.bP +\fBendwin\fP is called more than once without updating the screen, or +.bP +\fBreset_shell_mode\fP(3X) return +.BR ERR "." +.RE .bP \fBnewterm\fP -returns an error if it cannot allocate the data structures for the screen, +returns +.B ERR +if it cannot allocate the data structures for the screen, or for the top-level windows within the screen, i.e., \fBcurscr\fP, \fBnewscr\fP, or \fBstdscr\fP. @@ -166,14 +179,14 @@ i.e., \fBset_term\fP returns no error. .SH PORTABILITY -These functions were described in the XSI Curses standard, Issue 4. +These functions were described in X/Open Curses, Issue 4. As of 2015, the current document is X/Open Curses, Issue 7. .SS Differences -X/Open specifies that portable applications must not +X/Open Curses specifies that portable applications must not call \fBinitscr\fP more than once: .bP The portable way to use \fBinitscr\fP is once only, -using \fBrefresh\fP (see curs_refresh(3X)) +using \fB\%refresh\fP(3X) to restore the screen after \fBendwin\fP. .bP This implementation allows using \fBinitscr\fP after \fBendwin\fP. @@ -181,36 +194,36 @@ This implementation allows using \fBinitscr\fP after \fBendwin\fP. Old versions of curses, e.g., BSD 4.4, would return a null pointer from \fBinitscr\fP when an error is detected, rather than exiting. It is safe but redundant to check the return value of \fBinitscr\fP -in XSI Curses. +in X/Open Curses. .PP Calling \fBendwin\fP does not dispose of the memory allocated in \fBinitscr\fP or \fBnewterm\fP. -Deleting a \fBSCREEN\fP provides a way to do this: +Deleting a \fISCREEN\fP provides a way to do this: .bP -X/Open Curses does not say what happens to \fBWINDOW\fPs when \fBdelscreen\fP -\*(``frees storage associated with the \fBSCREEN\fP\*('' +X/Open Curses does not say what happens to \fI\%WINDOW\fPs when \fBdelscreen\fP +\*(``frees storage associated with the \fISCREEN\fP\*('' nor does the SVr4 documentation help, -adding that it should be called after \fBendwin\fP if a \fBSCREEN\fP +adding that it should be called after \fBendwin\fP if a \fISCREEN\fP is no longer needed. .bP -However, \fBWINDOW\fPs are implicitly associated with a \fBSCREEN\fP. +However, \fI\%WINDOW\fPs are implicitly associated with a \fISCREEN\fP. so that it is reasonable to expect \fBdelscreen\fP to deal with these. .bP -SVr4 curses deletes the standard \fBWINDOW\fP structures +SVr4 curses deletes the standard \fI\%WINDOW\fP structures \fBstdscr\fP and \fBcurscr\fP as well as a work area \fBnewscr\fP. SVr4 curses ignores other windows. .bP -Since version 4.0 (1996), ncurses has maintained a list of all windows -for each screen, +Since version 4.0 (1996), +\fI\%ncurses\fP has maintained a list of all windows for each screen, using that information to delete those windows when \fBdelscreen\fP is called. .bP -NetBSD copied this feature of ncurses in 2001. +NetBSD copied this feature of \fI\%ncurses\fP in 2001. PDCurses follows the SVr4 model, -deleting only the standard \fBWINDOW\fP structures. -.SS High-level versus low-level +deleting only the standard \fI\%WINDOW\fP structures. +.SS "High-level versus Low-level" Different implementations may disagree regarding the level of some functions. -For example, \fBSCREEN\fP (returned by \fBnewterm\fP) and -\fBTERMINAL\fP (returned by \fBsetupterm\fP(3X)) hold file descriptors for +For example, \fISCREEN\fP (returned by \fBnewterm\fP) and +\fI\%TERMINAL\fP (returned by \fBsetupterm\fP(3X)) hold file descriptors for the output stream. If an application switches screens using \fBset_term\fR, or switches terminals using \fBset_curterm\fP(3X), @@ -219,25 +232,26 @@ behavior depending on which structure holds the corresponding descriptor. .PP For example .bP -NetBSD's \fBbaudrate\fP(3X) function uses the descriptor in \fBTERMINAL\fP. -\fBncurses\fP and SVr4 use the descriptor in \fBSCREEN\fP. +NetBSD's \fBbaudrate\fP(3X) function uses the descriptor in \fI\%TERMINAL\fP. +\fI\%ncurses\fP and SVr4 use the descriptor in \fISCREEN\fP. .bP -NetBSD and \fBncurses\fP use the descriptor -in \fBTERMINAL\fP +NetBSD and \fI\%ncurses\fP use the descriptor +in \fI\%TERMINAL\fP for terminal I/O modes, e.g., \fBdef_shell_mode\fP(3X), \fBdef_prog_mode\fP(3X). -SVr4 curses uses the descriptor in \fBSCREEN\fP. -.SS Unset TERM Variable -If the TERM variable is missing or empty, \fBinitscr\fP uses the +SVr4 curses uses the descriptor in \fISCREEN\fP. +.SS "Unset \fITERM\fP Variable" +If the \fITERM\fP variable is missing or empty, \fBinitscr\fP uses the value \*(``unknown\*('', which normally corresponds to a terminal entry with the \fIgeneric\fP (\fIgn\fP) capability. Generic entries are detected by \fBsetupterm\fP(3X) and cannot be used for full-screen operation. -Other implementations may handle a missing/empty TERM variable differently. -.SS Signal Handlers +Other implementations may handle +a missing/empty \fITERM\fP variable differently. +.SS "Signal Handlers" Quoting from X/Open Curses Issue 7, section 3.1.1: .RS 5 .PP @@ -262,18 +276,19 @@ Applications which must handle these signals should set up the corresponding handlers \fIafter\fP initializing the library: .TP 5 .B SIGINT -The handler \fIattempts\fP to cleanup the screen on exit. +The handler \fIattempts\fP to clean up the screen on exit. Although it \fIusually\fP works as expected, there are limitations: .RS 5 .bP -Walking the \fBSCREEN\fP list is unsafe, since all list management +Walking the \fISCREEN\fP list is unsafe, since all list management is done without any signal blocking. .bP On systems which have \fBREENTRANT\fP turned on, \fBset_term\fP uses functions which could deadlock or misbehave in other ways. .bP -\fBendwin\fP calls other functions, many of which use stdio or -other library functions which are clearly unsafe. +\fBendwin\fP calls other functions, +many of which use \fI\%stdio\fP(3) or other library functions which are +clearly unsafe. .RE .TP 5 .B SIGTERM @@ -284,19 +299,32 @@ purpose than \fBSIGQUIT\fP (which is used in debugging). .B SIGTSTP This handles the \fIstop\fP signal, used in job control. When resuming the process, this implementation discards pending -input with \fBflushinput\fP (see curs_util(3X)), and repaints the screen +input with \fB\%flushinp\fP(3X), and repaints the screen assuming that it has been completely altered. -It also updates the saved terminal modes with \fBdef_shell_mode\fP -(see \fBcurs_kernel\fP(3X)). +It also updates the saved terminal modes with +\fB\%def_shell_mode\fP(3X). .TP 5 .B SIGWINCH This handles the window-size changes which were ignored in the standardization efforts. The handler sets a (signal-safe) variable -which is later tested in \fBwgetch\fP (see curs_getch(3X)). -If \fBkeypad\fP has been enabled for the corresponding window, -\fBwgetch\fP returns the key symbol \fBKEY_RESIZE\fP. -At the same time, \fBwgetch\fP calls \fBresizeterm\fP to adjust the +that is later tested by \fB\%wgetch\fP(3X) and \fB\%wget_wch\fP(3X). +.RS +.bP +.B \%wgetch +returns the key code +.BR \%KEY_RESIZE "." +.bP +.B \%wget_wch +returns +.B \%KEY_CODE_YES +and sets its +.I wch +parameter to +.BR \%KEY_RESIZE "." +.RE +.IP +At the same time, \fI\%ncurses\fP calls \fBresizeterm\fP to adjust the standard screen \fBstdscr\fP, and update other data such as \fBLINES\fP and \fBCOLS\fP. .SH SEE ALSO