~ubuntu-branches/debian/sid/ncurses/sid-200908151543

« back to all changes in this revision

Viewing changes to ncurses/base/lib_newwin.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2009-05-24 15:13:01 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20090524151301-uixgxq2zonfov2nr
Tags: 5.7+20090523-1
MergingĀ upstreamĀ versionĀ 5.7+20090523.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/****************************************************************************
2
 
 * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc.              *
 
2
 * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc.              *
3
3
 *                                                                          *
4
4
 * Permission is hereby granted, free of charge, to any person obtaining a  *
5
5
 * copy of this software and associated documentation files (the            *
30
30
 *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
31
31
 *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
32
32
 *     and: Thomas E. Dickey                        1996-on                 *
 
33
 *     and: Juergen Pfeifer                         2009                    *
33
34
 ****************************************************************************/
34
35
 
35
36
/*
42
43
#include <curses.priv.h>
43
44
#include <stddef.h>
44
45
 
45
 
MODULE_ID("$Id: lib_newwin.c,v 1.52 2008/06/07 13:58:09 tom Exp $")
 
46
MODULE_ID("$Id: lib_newwin.c,v 1.57 2009/05/09 23:40:03 tom Exp $")
46
47
 
47
48
#define window_is(name) ((sp)->_##name == win)
48
49
 
87
88
    if (win != 0) {
88
89
        if (_nc_try_global(curses) == 0) {
89
90
            q = 0;
90
 
            for (each_window(p)) {
 
91
            for (each_window(SP, p)) {
91
92
                if (&(p->win) == win) {
92
93
                    remove_window_from_screen(win);
93
94
                    if (q == 0)
94
 
                        _nc_windows = p->next;
 
95
                        WindowList(SP) = p->next;
95
96
                    else
96
97
                        q->next = p->next;
97
98
 
115
116
}
116
117
 
117
118
NCURSES_EXPORT(WINDOW *)
118
 
newwin(int num_lines, int num_columns, int begy, int begx)
 
119
NCURSES_SP_NAME(newwin) (NCURSES_SP_DCLx
 
120
                         int num_lines, int num_columns, int begy, int begx)
119
121
{
120
122
    WINDOW *win;
121
123
    NCURSES_CH_T *ptr;
127
129
        returnWin(0);
128
130
 
129
131
    if (num_lines == 0)
130
 
        num_lines = SP->_lines_avail - begy;
 
132
        num_lines = SP_PARM->_lines_avail - begy;
131
133
    if (num_columns == 0)
132
 
        num_columns = screen_columns - begx;
 
134
        num_columns = screen_columns(SP_PARM) - begx;
133
135
 
134
 
    if ((win = _nc_makenew(num_lines, num_columns, begy, begx, 0)) == 0)
 
136
    win = NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_ARGx
 
137
                                        num_lines, num_columns, begy, begx, 0);
 
138
    if (win == 0)
135
139
        returnWin(0);
136
140
 
137
141
    for (i = 0; i < num_lines; i++) {
149
153
    returnWin(win);
150
154
}
151
155
 
 
156
#if NCURSES_SP_FUNCS
 
157
NCURSES_EXPORT(WINDOW *)
 
158
newwin(int num_lines, int num_columns, int begy, int begx)
 
159
{
 
160
    return NCURSES_SP_NAME(newwin) (CURRENT_SCREEN,
 
161
                                    num_lines, num_columns,
 
162
                                    begy, begx);
 
163
}
 
164
#endif
 
165
 
152
166
NCURSES_EXPORT(WINDOW *)
153
167
derwin(WINDOW *orig, int num_lines, int num_columns, int begy, int begx)
154
168
{
 
169
#if NCURSES_SP_FUNCS
 
170
    SCREEN *sp = CURRENT_SCREEN;
 
171
#endif
155
172
    WINDOW *win;
156
173
    int i;
157
174
    int flags = _SUBWIN;
177
194
    if (orig->_flags & _ISPAD)
178
195
        flags |= _ISPAD;
179
196
 
180
 
    if ((win = _nc_makenew(num_lines, num_columns, orig->_begy + begy,
181
 
                           orig->_begx + begx, flags)) == 0)
 
197
    win = NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_ARGx num_lines, num_columns,
 
198
                                        orig->_begy + begy,
 
199
                                        orig->_begx + begx, flags);
 
200
    if (win == 0)
182
201
        returnWin(0);
183
202
 
184
203
    win->_pary = begy;
211
230
}
212
231
 
213
232
NCURSES_EXPORT(WINDOW *)
214
 
_nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags)
 
233
NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx
 
234
                              int num_lines,
 
235
                              int num_columns,
 
236
                              int begy,
 
237
                              int begx,
 
238
                              int flags)
215
239
{
216
240
    int i;
217
241
    WINDOWLIST *wp;
218
242
    WINDOW *win;
219
243
    bool is_pad = (flags & _ISPAD);
220
244
 
221
 
    T((T_CALLED("_nc_makenew(%d,%d,%d,%d)"), num_lines, num_columns, begy, begx));
 
245
    T((T_CALLED("_nc_makenew(%p,%d,%d,%d,%d)"),
 
246
       SP_PARM, num_lines, num_columns, begy, begx));
222
247
 
223
 
    if (SP == 0)
 
248
    if (SP_PARM == 0)
224
249
        returnWin(0);
225
250
 
226
251
    if (!dimension_limit(num_lines) || !dimension_limit(num_columns))
244
269
    win->_maxx = num_columns - 1;
245
270
    win->_begy = begy;
246
271
    win->_begx = begx;
247
 
    win->_yoffset = SP->_topstolen;
 
272
    win->_yoffset = SP_PARM->_topstolen;
248
273
 
249
274
    win->_flags = flags;
250
275
    WINDOW_ATTRS(win) = A_NORMAL;
251
276
    SetChar(win->_nc_bkgd, BLANK_TEXT, BLANK_ATTR);
252
277
 
253
 
    win->_clear = is_pad ? FALSE : (num_lines == screen_lines
254
 
                                    && num_columns == screen_columns);
 
278
    win->_clear = (is_pad
 
279
                   ? FALSE
 
280
                   : (num_lines == screen_lines(SP_PARM)
 
281
                      && num_columns == screen_columns(SP_PARM)));
255
282
    win->_idlok = FALSE;
256
283
    win->_idcok = TRUE;
257
284
    win->_scroll = FALSE;
300
327
        if_USE_SCROLL_HINTS(win->_line[i].oldindex = i);
301
328
    }
302
329
 
303
 
    if (!is_pad && (begx + num_columns == screen_columns)) {
 
330
    if (!is_pad && (begx + num_columns == screen_columns(SP_PARM))) {
304
331
        win->_flags |= _ENDLINE;
305
332
 
306
 
        if (begx == 0 && num_lines == screen_lines && begy == 0)
 
333
        if (begx == 0 && num_lines == screen_lines(SP_PARM) && begy == 0)
307
334
            win->_flags |= _FULLWIN;
308
335
 
309
 
        if (begy + num_lines == screen_lines)
 
336
        if (begy + num_lines == screen_lines(SP_PARM))
310
337
            win->_flags |= _SCROLLWIN;
311
338
    }
312
339
 
313
 
    wp->next = _nc_windows;
314
 
    wp->screen = SP;
315
 
    _nc_windows = wp;
 
340
    wp->next = WindowList(SP_PARM);
 
341
    wp->screen = SP_PARM;
 
342
    WindowList(SP_PARM) = wp;
316
343
 
317
344
    T((T_CREATE("window %p"), win));
318
345
 
320
347
    returnWin(win);
321
348
}
322
349
 
 
350
#if NCURSES_SP_FUNCS
 
351
NCURSES_EXPORT(WINDOW *)
 
352
_nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags)
 
353
{
 
354
    return NCURSES_SP_NAME(_nc_makenew) (CURRENT_SCREEN,
 
355
                                         num_lines, num_columns,
 
356
                                         begy, begx, flags);
 
357
}
 
358
#endif
 
359
 
323
360
/*
324
361
 * wgetch() and other functions with a WINDOW* parameter may use a SCREEN*
325
362
 * internally, and it is useful to allow those to be invoked without switching
336
373
    }
337
374
    return (sp);
338
375
}
 
376
 
 
377
#if NCURSES_SP_FUNCS
 
378
NCURSES_EXPORT(WINDOW *)
 
379
_nc_curscr_of(SCREEN *sp)
 
380
{
 
381
    return sp == 0 ? 0 : sp->_curscr;
 
382
}
 
383
 
 
384
NCURSES_EXPORT(WINDOW *)
 
385
_nc_newscr_of(SCREEN *sp)
 
386
{
 
387
    return sp == 0 ? 0 : sp->_newscr;
 
388
}
 
389
 
 
390
NCURSES_EXPORT(WINDOW *)
 
391
_nc_stdscr_of(SCREEN *sp)
 
392
{
 
393
    return sp == 0 ? 0 : sp->_stdscr;
 
394
}
 
395
#endif