OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [services/] [curses/] [pdcurses/] [current/] [src/] [pdcurses/] [bkgd.c] - Blame information for rev 786

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
/* Public Domain Curses */
2
 
3
#include <curspriv.h>
4
 
5
RCSID("$Id: bkgd.c,v 1.1 2009/05/10 08:29:53 jld Exp $")
6
 
7
/*man-start**************************************************************
8
 
9
  Name:                                                         bkgd
10
 
11
  Synopsis:
12
        int bkgd(chtype ch);
13
        void bkgdset(chtype ch);
14
        chtype getbkgd(WINDOW *win);
15
        int wbkgd(WINDOW *win, chtype ch);
16
        void wbkgdset(WINDOW *win, chtype ch);
17
 
18
        int bkgrnd(const cchar_t *wch);
19
        void bkgrndset(const cchar_t *wch);
20
        int getbkgrnd(cchar_t *wch);
21
        int wbkgrnd(WINDOW *win, const cchar_t *wch);
22
        void wbkgrndset(WINDOW *win, const cchar_t *wch);
23
        int wgetbkgrnd(WINDOW *win, cchar_t *wch);
24
 
25
  Description:
26
        bkgdset() and wbkgdset() manipulate the background of a window.
27
        The background is a chtype consisting of any combination of
28
        attributes and a character; it is combined with each chtype
29
        added or inserted to the window by waddch() or winsch(). Only
30
        the attribute part is used to set the background of non-blank
31
        characters, while both character and attributes are used for
32
        blank positions.
33
 
34
        bkgd() and wbkgd() not only change the background, but apply it
35
        immediately to every cell in the window.
36
 
37
        The attributes that are defined with the attrset()/attron() set
38
        of functions take precedence over the background attributes if
39
        there is a conflict (e.g., different color pairs).
40
 
41
  Return Value:
42
        bkgd() and wbkgd() return OK, unless the window is NULL, in
43
        which case they return ERR.
44
 
45
  Portability                                X/Open    BSD    SYS V
46
        bkgd                                    Y       -      4.0
47
        bkgdset                                 Y       -      4.0
48
        getbkgd                                 Y
49
        wbkgd                                   Y       -      4.0
50
        wbkgdset                                Y       -      4.0
51
        bkgrnd                                  Y
52
        bkgrndset                               Y
53
        getbkgrnd                               Y
54
        wbkgrnd                                 Y
55
        wbkgrndset                              Y
56
        wgetbkgrnd                              Y
57
 
58
**man-end****************************************************************/
59
 
60
int wbkgd(WINDOW *win, chtype ch)
61
{
62
    int x, y;
63
    chtype oldcolr, oldch, newcolr, newch, colr, attr;
64
    chtype oldattr = 0, newattr = 0;
65
    chtype *winptr;
66
 
67
    PDC_LOG(("wbkgd() - called\n"));
68
 
69
    if (!win)
70
        return ERR;
71
 
72
    if (win->_bkgd == ch)
73
        return OK;
74
 
75
    oldcolr = win->_bkgd & A_COLOR;
76
    if (oldcolr)
77
        oldattr = (win->_bkgd & A_ATTRIBUTES) ^ oldcolr;
78
 
79
    oldch = win->_bkgd & A_CHARTEXT;
80
 
81
    wbkgdset(win, ch);
82
 
83
    newcolr = win->_bkgd & A_COLOR;
84
    if (newcolr)
85
        newattr = (win->_bkgd & A_ATTRIBUTES) ^ newcolr;
86
 
87
    newch = win->_bkgd & A_CHARTEXT;
88
 
89
    /* what follows is what seems to occur in the System V
90
       implementation of this routine */
91
 
92
    for (y = 0; y < win->_maxy; y++)
93
    {
94
        for (x = 0; x < win->_maxx; x++)
95
        {
96
            winptr = win->_y[y] + x;
97
 
98
            ch = *winptr;
99
 
100
            /* determine the colors and attributes of the character read
101
               from the window */
102
 
103
            colr = ch & A_COLOR;
104
            attr = ch & (A_ATTRIBUTES ^ A_COLOR);
105
 
106
            /* if the color is the same as the old background color,
107
               then make it the new background color, otherwise leave it */
108
 
109
            if (colr == oldcolr)
110
                colr = newcolr;
111
 
112
            /* remove any attributes (non color) from the character that
113
               were part of the old background, then combine the
114
               remaining ones with the new background */
115
 
116
            attr ^= oldattr;
117
            attr |= newattr;
118
 
119
            /* change character if it is there because it was the old
120
               background character */
121
 
122
            ch &= A_CHARTEXT;
123
            if (ch == oldch)
124
                ch = newch;
125
 
126
            ch |= (attr | colr);
127
 
128
            *winptr = ch;
129
 
130
        }
131
    }
132
 
133
    touchwin(win);
134
    PDC_sync(win);
135
    return OK;
136
}
137
 
138
int bkgd(chtype ch)
139
{
140
    PDC_LOG(("bkgd() - called\n"));
141
 
142
    return wbkgd(stdscr, ch);
143
}
144
 
145
void wbkgdset(WINDOW *win, chtype ch)
146
{
147
    PDC_LOG(("wbkgdset() - called\n"));
148
 
149
    if (win)
150
    {
151
        if (!(ch & A_CHARTEXT))
152
            ch |= ' ';
153
 
154
        win->_bkgd = ch;
155
    }
156
}
157
 
158
void bkgdset(chtype ch)
159
{
160
    PDC_LOG(("bkgdset() - called\n"));
161
 
162
    wbkgdset(stdscr, ch);
163
}
164
 
165
chtype getbkgd(WINDOW *win)
166
{
167
    PDC_LOG(("getbkgd() - called\n"));
168
 
169
    return win ? win->_bkgd : (chtype)ERR;
170
}
171
 
172
#ifdef PDC_WIDE
173
int wbkgrnd(WINDOW *win, const cchar_t *wch)
174
{
175
    PDC_LOG(("wbkgrnd() - called\n"));
176
 
177
    return wch ? wbkgd(win, *wch) : ERR;
178
}
179
 
180
int bkgrnd(const cchar_t *wch)
181
{
182
    PDC_LOG(("bkgrnd() - called\n"));
183
 
184
    return wbkgrnd(stdscr, wch);
185
}
186
 
187
void wbkgrndset(WINDOW *win, const cchar_t *wch)
188
{
189
    PDC_LOG(("wbkgdset() - called\n"));
190
 
191
    if (wch)
192
        wbkgdset(win, *wch);
193
}
194
 
195
void bkgrndset(const cchar_t *wch)
196
{
197
    PDC_LOG(("bkgrndset() - called\n"));
198
 
199
    wbkgrndset(stdscr, wch);
200
}
201
 
202
int wgetbkgrnd(WINDOW *win, cchar_t *wch)
203
{
204
    PDC_LOG(("wgetbkgrnd() - called\n"));
205
 
206
    if (!win || !wch)
207
        return ERR;
208
 
209
    *wch = win->_bkgd;
210
 
211
    return OK;
212
}
213
 
214
int getbkgrnd(cchar_t *wch)
215
{
216
    PDC_LOG(("getbkgrnd() - called\n"));
217
 
218
    return wgetbkgrnd(stdscr, wch);
219
}
220
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.