70 lines
1.7 KiB
C
70 lines
1.7 KiB
C
/* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
|
|
/* Copyright (c) 1988 AT&T */
|
|
/* All Rights Reserved */
|
|
|
|
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
|
|
/* UNIX System Laboratories, Inc. */
|
|
/* The copyright notice above does not evidence any */
|
|
/* actual or intended publication of such source code. */
|
|
|
|
#ident "@(#)curses:screen/getwin.c 1.6"
|
|
#include "curses_inc.h"
|
|
|
|
#define SEPARATE_READ 6
|
|
|
|
/* Read a window that was stored by putwin. */
|
|
|
|
WINDOW *
|
|
getwin(FILE *filep)
|
|
{
|
|
short *save_fch, win_nums[SEPARATE_READ], maxy, maxx, nelt;
|
|
register WINDOW *win = NULL;
|
|
register chtype **ecp, **wcp;
|
|
|
|
/* read everything from _cury to _bkgd inclusive */
|
|
|
|
nelt = sizeof(WINDOW) - sizeof(win->_y) - sizeof(win->_parent) -
|
|
sizeof(win->_parx) - sizeof(win->_pary) -
|
|
sizeof(win->_ndescs) - sizeof(win->_delay) -
|
|
(SEPARATE_READ * sizeof(short));
|
|
|
|
if ((fread((char *) win_nums, sizeof(short), SEPARATE_READ, filep) != SEPARATE_READ) ||
|
|
((win = _makenew(maxy = win_nums[2], maxx = win_nums[3], win_nums[4], win_nums[5])) == NULL))
|
|
{
|
|
goto err;
|
|
}
|
|
|
|
if (_image(win) == ERR)
|
|
{
|
|
win = (WINDOW *) NULL;
|
|
goto err;
|
|
}
|
|
save_fch = win->_firstch;
|
|
|
|
if (fread(&(win->_flags), 1, (size_t) nelt, filep) != (size_t) nelt)
|
|
goto err;
|
|
|
|
win->_firstch = save_fch;
|
|
win->_lastch = save_fch + maxy;
|
|
|
|
/* read the image */
|
|
wcp = win->_y;
|
|
ecp = wcp + maxy;
|
|
|
|
while (wcp < ecp)
|
|
if (fread((char *) *wcp++, sizeof(chtype), (size_t) maxx, filep) !=
|
|
(size_t) maxx)
|
|
{
|
|
err :
|
|
if (win != NULL)
|
|
(void) delwin(win);
|
|
return ((WINDOW *) NULL);
|
|
}
|
|
|
|
win->_cury = win_nums[0];
|
|
win->_curx = win_nums[1];
|
|
win->_use_idl = win->_use_keypad = FALSE;
|
|
|
|
return (win);
|
|
}
|