.\"***************************************************************************
-.\" Copyright (c) 1998-2003,2010 Free Software Foundation, Inc. *
+.\" Copyright 2018-2022,2023 Thomas E. Dickey *
+.\" Copyright 1998-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 *
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_bkgd.3x,v 1.21 2010/07/31 14:36:04 tom Exp $
-.TH curs_bkgd 3X ""
+.\" $Id: curs_bkgd.3x,v 1.51 2023/12/02 21:02:44 tom Exp $
+.TH curs_bkgd 3X 2023-12-02 "ncurses 6.4" "Library calls"
+.ie \n(.g \{\
+.ds `` \(lq
+.ds '' \(rq
+.\}
+.el \{\
+.ie t .ds `` ``
+.el .ds `` ""
+.ie t .ds '' ''
+.el .ds '' ""
+.\}
+.
+.de bP
+.ie n .IP \(bu 4
+.el .IP \(bu 2
+..
.SH NAME
-\fBbkgdset\fR, \fBwbkgdset\fR,
-\fBbkgd\fR, \fBwbkgd\fR,
-\fBgetbkgd\fR \- \fBcurses\fR window background manipulation routines
+\fB\%bkgdset\fP,
+\fB\%wbkgdset\fP,
+\fB\%bkgd\fP,
+\fB\%wbkgd\fP,
+\fB\%getbkgd\fP \-
+manipulate background of a \fIcurses\fR window of characters
.SH SYNOPSIS
-\fB#include <curses.h>\fR
+.nf
+\fB#include <curses.h>
.PP
-\fBvoid bkgdset(chtype ch);\fR
-.br
-\fBvoid wbkgdset(WINDOW *win, chtype ch);\fR
-.br
-\fBint bkgd(chtype ch);\fR
-.br
-\fBint wbkgd(WINDOW *win, chtype ch);\fR
-.br
-\fBchtype getbkgd(WINDOW *win);\fR
-.br
+\fBvoid bkgdset(chtype \fIch\fP);
+\fBvoid wbkgdset(WINDOW *\fIwin\fP, chtype \fIch\fP);
+.PP
+\fBint bkgd(chtype \fIch\fP);
+\fBint wbkgd(WINDOW *\fIwin\fP, chtype \fIch\fP);
+.PP
+\fBchtype getbkgd(WINDOW *\fIwin\fP);
+.fi
.SH DESCRIPTION
-The \fBbkgdset\fR and \fBwbkgdset\fR routines manipulate the
-background of the named window.
-The window background is a \fBchtype\fR consisting of
-any combination of attributes (i.e., rendition) and a character.
+.SS bkgdset
+The \fBbkgdset\fP and \fBwbkgdset\fP routines
+set the \fIbackground\fP for a window.
+A window's background is a \fBchtype\fP consisting of
+any combination of attributes (i.e., rendition) and a character:
+.bP
The attribute part of the background is combined (OR'ed) with all non-blank
-characters that are written into the window with \fBwaddch\fR. Both
-the character and attribute parts of the background are combined with
-the blank characters. The background becomes a property of the
+characters that are written into the window with \fBwaddch\fP.
+.bP
+Both the character and attribute parts of the background are combined with
+blank characters that are written into the window.
+.PP
+The background becomes a property of each
character and moves with the character through any scrolling and
insert/delete line/character operations.
.PP
To the extent possible on a particular terminal,
the attribute part of the background is displayed
as the graphic rendition of the character put on the screen.
-.PP
-The \fBbkgd\fR and \fBwbkgd\fR functions
+.SS bkgd
+The \fBbkgd\fP and \fBwbkgd\fP functions
set the background property of the current or specified window
-and then apply this setting to every character position in that window:
-.PP
-.RS
+and then apply this setting to every character position in that window.
+According to X/Open Curses, it should do this:
+.bP
The rendition of every character on the screen is changed to
the new background rendition.
-.PP
+.bP
Wherever the former background character
appears, it is changed to the new background character.
-.RE
.PP
-The \fBgetbkgd\fR function returns the given window's current background
+Neither X/Open Curses nor the SVr4 manual pages give details about
+the way the rendition of characters on the screen is updated when
+\fBbkgd\fP or \fBwbkgd\fP is used to change the background character.
+.PP
+\fI\%ncurses\fP,
+like SVr4 \fIcurses\fP,
+does not store the background and window attribute contributions to each
+cell separately.
+It updates the rendition by comparing the character,
+non-color attributes and colors contained in the background.
+For each cell in the window, whether or not it is blank:
+.bP
+The library first compares the \fIcharacter\fP,
+and if it matches the current character part of the background,
+it replaces that with the new background character.
+.IP
+When \fBbkgdset\fP is used to set the background character,
+that does not update each cell in the window.
+A subsequent call to \fBbkgd\fP will only modify the \fIcharacter\fP in
+cells which match the current background character.
+.bP
+The library then checks if the cell uses color,
+i.e., its color pair value is nonzero.
+If not, it simply replaces the attributes and color pair in the
+cell with those from the new background character.
+.bP
+If the cell uses color,
+and that matches the color in the current background,
+the library removes attributes
+which may have come from the current background
+and adds attributes from the new background.
+It finishes by setting the cell
+to use the color from the new background.
+.bP
+If the cell uses color,
+and that does not match the color in the current background,
+the library updates only the non-color attributes,
+first removing those which may have come from the current background,
+and then adding attributes from the new background.
+.PP
+If the background's character value is zero (0), a space is assumed.
+.PP
+If the terminal does not support color,
+or if color has not been started with \fBstart_color\fP,
+the new background character's color attribute will be ignored.
+.SS getbkgd
+The \fBgetbkgd\fP function returns the given window's current background
character/attribute pair.
.SH RETURN VALUE
-The routines \fBbkgd\fR and \fBwbkgd\fR return the integer \fBOK\fR.
-The SVr4.0 manual says "or a non-negative integer if \fBimmedok\fR is set",
-but this appears to be an error.
+Functions returning an \fIint\fP return \fBOK\fP on success.
+\fB\%bkgd\fP returns \fBERR\fP if the library has not been initialized.
+\fB\%wbkgd\fP and \fB\%getbkgd\fP return \fBERR\fP if the \fI\%WINDOW\fP
+pointer argument is null.
+.PP
+In contrast,
+the SVr4.0 manual says \fB\%bkgd\fP and \fB\%wbkgd\fP may return
+\fBOK\fP
+\*(``or a non-negative integer if \fB\%immedok\fP is set\*('',
+which refers to the return value from \fB\%wrefresh\fP
+(used to implement the immediate repainting).
+SVr4 \fIcurses\fP \fB\%wrefresh\fP returns the number of characters
+written to the screen during the refresh.
+\fI\%ncurses\fP does not do that.
.SH NOTES
-Note that \fBbkgdset\fR and \fBbkgd\fR may be macros.
+Unusually,
+there is no \fB\%wgetbkgd\fP function;
+\fB\%getbkgd\fP behaves as one would expect \fB\%wgetbkgd\fP to,
+accepting a \fI\%WINDOW\fP pointer argument.
+.PP
+Note that \fBbkgdset\fP and \fBbkgd\fP may be macros.
+.PP
+X/Open Curses mentions that the character part of the background must
+be a single-byte value.
+\fI\%ncurses\fP,
+like SVr4 \fIcurses\fP,
+checks to ensure that,
+and will reuse the old background character if the check fails.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
-It specifies that \fBbkgd\fR and \fBwbkgd\fR return \fBERR\fR on failure,
+It specifies that \fBbkgd\fP and \fBwbkgd\fP return \fBERR\fP on
+failure,
but gives no failure conditions.
.SH SEE ALSO
-\fBcurses\fR(3X),
-\fBcurs_addch\fR(3X),
-\fBcurs_attr\fR(3X),
-\fBcurs_outopts\fR(3X)
-.\"#
-.\"# The following sets edit modes for GNU EMACS
-.\"# Local Variables:
-.\"# mode:nroff
-.\"# fill-column:79
-.\"# End:
+\fB\%curses\fP(3X),
+\fB\%curs_addch\fP(3X),
+\fB\%curs_attr\fP(3X),
+\fB\%curs_outopts\fP(3X)