1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #ifndef lint 8 static char sccsid[] = "@(#)delwin.c 5.1 (Berkeley) 06/07/85"; 9 #endif not lint 10 11 # include "curses.ext" 12 13 /* 14 * This routine deletes a window and releases it back to the system. 15 * 16 */ 17 delwin(win) 18 reg WINDOW *win; { 19 20 reg int i; 21 reg WINDOW *wp, *np; 22 23 if (win->_orig == NULL) { 24 /* 25 * If we are the original window, delete the space for 26 * all the subwindows, and the array of space as well. 27 */ 28 for (i = 0; i < win->_maxy && win->_y[i]; i++) 29 free(win->_y[i]); 30 free(win->_firstch); 31 free(win->_lastch); 32 wp = win->_nextp; 33 while (wp != win) { 34 np = wp->_nextp; 35 delwin(wp); 36 wp = np; 37 } 38 } 39 else { 40 /* 41 * If we are a subwindow, take ourselves out of the 42 * list. NOTE: if we are a subwindow, the minimum list 43 * is orig followed by this subwindow, so there are 44 * always at least two windows in the list. 45 */ 46 for (wp = win->_nextp; wp->_nextp != win; wp = wp->_nextp) 47 continue; 48 wp->_nextp = win->_nextp; 49 } 50 free(win->_y); 51 free(win); 52 } 53