1
0
Files
2022-09-29 17:59:04 +03:00

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);
}