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/] [insch.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: insch.c,v 1.1 2009/05/10 08:29:53 jld Exp $")
6
 
7
/*man-start**************************************************************
8
 
9
  Name:                                                         insch
10
 
11
  Synopsis:
12
        int insch(chtype ch);
13
        int winsch(WINDOW *win, chtype ch);
14
        int mvinsch(int y, int x, chtype ch);
15
        int mvwinsch(WINDOW *win, int y, int x, chtype ch);
16
 
17
        int insrawch(chtype ch);
18
        int winsrawch(WINDOW *win, chtype ch);
19
        int mvinsrawch(int y, int x, chtype ch);
20
        int mvwinsrawch(WINDOW *win, int y, int x, chtype ch);
21
 
22
        int ins_wch(const cchar_t *wch);
23
        int wins_wch(WINDOW *win, const cchar_t *wch);
24
        int mvins_wch(int y, int x, const cchar_t *wch);
25
        int mvwins_wch(WINDOW *win, int y, int x, const cchar_t *wch);
26
 
27
  Description:
28
        The insch() functions insert a chtype into the window at the
29
        current or specified cursor position. The cursor is NOT
30
        advanced. A newline is equivalent to clrtoeol(); tabs are
31
        expanded; other control characters are converted as with
32
        unctrl().
33
 
34
        The ins_wch() functions are the wide-character
35
        equivalents, taking cchar_t pointers rather than chtypes.
36
 
37
        Video attributes can be combined with a character by ORing
38
        them into the parameter. Text, including attributes, can be
39
        copied from one place to another using inch() and insch().
40
 
41
        insrawch() etc. are PDCurses-specific wrappers for insch() etc.
42
        that disable the translation of control characters.
43
 
44
  Return Value:
45
        All functions return OK on success and ERR on error.
46
 
47
  Portability                                X/Open    BSD    SYS V
48
        insch                                   Y       Y       Y
49
        winsch                                  Y       Y       Y
50
        mvinsch                                 Y       Y       Y
51
        mvwinsch                                Y       Y       Y
52
        insrawch                                -       -       -
53
        winsrawch                               -       -       -
54
        ins_wch                                 Y
55
        wins_wch                                Y
56
        mvins_wch                               Y
57
        mvwins_wch                              Y
58
 
59
**man-end****************************************************************/
60
 
61
#include <string.h>
62
 
63
int winsch(WINDOW *win, chtype ch)
64
{
65
    int x, y;
66
    chtype attr;
67
    bool xlat;
68
 
69
    PDC_LOG(("winsch() - called: win=%p ch=%x (text=%c attr=0x%x)\n",
70
             win, ch, ch & A_CHARTEXT, ch & A_ATTRIBUTES));
71
 
72
    if (!win)
73
        return ERR;
74
 
75
    x = win->_curx;
76
    y = win->_cury;
77
 
78
    if (y > win->_maxy || x > win->_maxx || y < 0 || x < 0)
79
        return ERR;
80
 
81
    xlat = !SP->raw_out && !(ch & A_ALTCHARSET);
82
    attr = ch & A_ATTRIBUTES;
83
    ch &= A_CHARTEXT;
84
 
85
    if (xlat && (ch < ' ' || ch == 0x7f))
86
    {
87
        int x2;
88
 
89
        switch (ch)
90
        {
91
        case '\t':
92
            for (x2 = ((x / TABSIZE) + 1) * TABSIZE; x < x2; x++)
93
            {
94
                if (winsch(win, attr | ' ') == ERR)
95
                    return ERR;
96
            }
97
            return OK;
98
 
99
        case '\n':
100
            wclrtoeol(win);
101
            break;
102
 
103
        case 0x7f:
104
            if (winsch(win, attr | '?') == ERR)
105
                return ERR;
106
 
107
            return winsch(win, attr | '^');
108
 
109
        default:
110
            /* handle control chars */
111
 
112
            if (winsch(win, attr | (ch + '@')) == ERR)
113
                return ERR;
114
 
115
            return winsch(win, attr | '^');
116
        }
117
    }
118
    else
119
    {
120
        int maxx;
121
        chtype *temp;
122
 
123
        /* If the incoming character doesn't have its own attribute,
124
           then use the current attributes for the window. If it has
125
           attributes but not a color component, OR the attributes to
126
           the current attributes for the window. If it has a color
127
           component, use the attributes solely from the incoming
128
           character. */
129
 
130
        if (!(attr & A_COLOR))
131
            attr |= win->_attrs;
132
 
133
        /* wrs (4/10/93): Apply the same sort of logic for the window
134
           background, in that it only takes precedence if other color
135
           attributes are not there and that the background character
136
           will only print if the printing character is blank. */
137
 
138
        if (!(attr & A_COLOR))
139
            attr |= win->_bkgd & A_ATTRIBUTES;
140
        else
141
            attr |= win->_bkgd & (A_ATTRIBUTES ^ A_COLOR);
142
 
143
        if (ch == ' ')
144
            ch = win->_bkgd & A_CHARTEXT;
145
 
146
        /* Add the attribute back into the character. */
147
 
148
        ch |= attr;
149
 
150
        maxx = win->_maxx;
151
        temp = &win->_y[y][x];
152
 
153
        memmove(temp + 1, temp, (maxx - x - 1) * sizeof(chtype));
154
 
155
        win->_lastch[y] = maxx - 1;
156
 
157
        if ((win->_firstch[y] == _NO_CHANGE) || (win->_firstch[y] > x))
158
            win->_firstch[y] = x;
159
 
160
        *temp = ch;
161
    }
162
 
163
    PDC_sync(win);
164
 
165
    return OK;
166
}
167
 
168
int insch(chtype ch)
169
{
170
    PDC_LOG(("insch() - called\n"));
171
 
172
    return winsch(stdscr, ch);
173
}
174
 
175
int mvinsch(int y, int x, chtype ch)
176
{
177
    PDC_LOG(("mvinsch() - called\n"));
178
 
179
    if (move(y, x) == ERR)
180
        return ERR;
181
 
182
    return winsch(stdscr, ch);
183
}
184
 
185
int mvwinsch(WINDOW *win, int y, int x, chtype ch)
186
{
187
    PDC_LOG(("mvwinsch() - called\n"));
188
 
189
    if (wmove(win, y, x) == ERR)
190
        return ERR;
191
 
192
    return winsch(win, ch);
193
}
194
 
195
int winsrawch(WINDOW *win, chtype ch)
196
{
197
    PDC_LOG(("winsrawch() - called: win=%p ch=%x "
198
             "(char=%c attr=0x%x)\n", win, ch,
199
             ch & A_CHARTEXT, ch & A_ATTRIBUTES));
200
 
201
    if ((ch & A_CHARTEXT) < ' ' || (ch & A_CHARTEXT) == 0x7f)
202
        ch |= A_ALTCHARSET;
203
 
204
    return winsch(win, ch);
205
}
206
 
207
int insrawch(chtype ch)
208
{
209
    PDC_LOG(("insrawch() - called\n"));
210
 
211
    return winsrawch(stdscr, ch);
212
}
213
 
214
int mvinsrawch(int y, int x, chtype ch)
215
{
216
    PDC_LOG(("mvinsrawch() - called\n"));
217
 
218
    if (move(y, x) == ERR)
219
        return ERR;
220
 
221
    return winsrawch(stdscr, ch);
222
}
223
 
224
int mvwinsrawch(WINDOW *win, int y, int x, chtype ch)
225
{
226
    PDC_LOG(("mvwinsrawch() - called\n"));
227
 
228
    if (wmove(win, y, x) == ERR)
229
        return ERR;
230
 
231
    return winsrawch(win, ch);
232
}
233
 
234
#ifdef PDC_WIDE
235
int wins_wch(WINDOW *win, const cchar_t *wch)
236
{
237
    PDC_LOG(("wins_wch() - called\n"));
238
 
239
    return wch ? winsch(win, *wch) : ERR;
240
}
241
 
242
int ins_wch(const cchar_t *wch)
243
{
244
    PDC_LOG(("ins_wch() - called\n"));
245
 
246
    return wins_wch(stdscr, wch);
247
}
248
 
249
int mvins_wch(int y, int x, const cchar_t *wch)
250
{
251
    PDC_LOG(("mvins_wch() - called\n"));
252
 
253
    if (move(y, x) == ERR)
254
        return ERR;
255
 
256
    return wins_wch(stdscr, wch);
257
}
258
 
259
int mvwins_wch(WINDOW *win, int y, int x, const cchar_t *wch)
260
{
261
    PDC_LOG(("mvwins_wch() - called\n"));
262
 
263
    if (wmove(win, y, x) == ERR)
264
        return ERR;
265
 
266
    return wins_wch(win, wch);
267
}
268
#endif

powered by: WebSVN 2.1.0

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