/* * Copyright 2001 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ /* * Copyright (c) 1980 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ /*LINTLIBRARY*/ #ifndef lint static char sccsid[] = "@(#)delwin.c 1.6 88/02/08 SMI"; /* from UCB 5.1 85/06/07 */ #endif /* not lint */ #include "curses.ext" #include /* * This routine deletes a window and releases it back to the system. */ int delwin(WINDOW *win) { int i; WINDOW *wp, *np; if (win->_orig == NULL) { /* * If we are the original window, delete the space for * all the subwindows, and the array of space as well. */ for (i = 0; i < win->_maxy && win->_y[i]; i++) free(win->_y[i]); free(win->_firstch); free(win->_lastch); wp = win->_nextp; while (wp != win) { np = wp->_nextp; (void) delwin(wp); wp = np; } } else { /* * If we are a subwindow, take ourselves out of the * list. NOTE: if we are a subwindow, the minimum list * is orig followed by this subwindow, so there are * always at least two windows in the list. */ for (wp = win->_nextp; wp->_nextp != win; wp = wp->_nextp) continue; wp->_nextp = win->_nextp; } free(win->_y); free(win); return (OK); }