2N/A/*
2N/A * CDDL HEADER START
2N/A *
2N/A * The contents of this file are subject to the terms of the
2N/A * Common Development and Distribution License, Version 1.0 only
2N/A * (the "License"). You may not use this file except in compliance
2N/A * with the License.
2N/A *
2N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A * or http://www.opensolaris.org/os/licensing.
2N/A * See the License for the specific language governing permissions
2N/A * and limitations under the License.
2N/A *
2N/A * When distributing Covered Code, include this CDDL HEADER in each
2N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A * If applicable, add the following below this CDDL HEADER, with the
2N/A * fields enclosed by brackets "[]" replaced with your own identifying
2N/A * information: Portions Copyright [yyyy] [name of copyright owner]
2N/A *
2N/A * CDDL HEADER END
2N/A */
2N/A/* Copyright (c) 1988 AT&T */
2N/A/* All Rights Reserved */
2N/A
2N/A
2N/A/*
2N/A * Copyright (c) 1997, by Sun Microsystems, Inc.
2N/A * All rights reserved.
2N/A */
2N/A
2N/A/* A panels subsystem built on curses--Delete panel routines */
2N/A
2N/A#pragma ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.3 */
2N/A
2N/A/*LINTLIBRARY*/
2N/A
2N/A#include <sys/types.h>
2N/A#include <stdlib.h>
2N/A#include <curses.h>
2N/A#include "private.h"
2N/A
2N/A/* hide_panel - Unlink a panel from the pile and remove it from the screen. */
2N/Aint
2N/Ahide_panel(PANEL *panel)
2N/A{
2N/A if (!panel)
2N/A return (ERR);
2N/A
2N/A /* It is ok to hide a panel that is already hidden. */
2N/A
2N/A if (panel == panel -> below)
2N/A return (OK);
2N/A
2N/A /* unlink panel */
2N/A
2N/A _remove_overlap(panel);
2N/A if (panel == _Bottom_panel)
2N/A _Bottom_panel = panel -> above;
2N/A else
2N/A panel -> below -> above = panel -> above;
2N/A
2N/A if (panel == _Top_panel)
2N/A _Top_panel = panel -> below;
2N/A else
2N/A panel -> above -> below = panel -> below;
2N/A
2N/A _Panel_cnt--;
2N/A panel -> below = panel;
2N/A return (OK);
2N/A}
2N/A
2N/A/*
2N/A * del_panel - Delete a panel from the pile
2N/A * and free all memory associated with it.
2N/A */
2N/Aint
2N/Adel_panel(PANEL *panel)
2N/A{
2N/A return ((hide_panel(panel) == OK) ? free(panel), OK : ERR);
2N/A}
2N/A
2N/A/*
2N/A * _remove_overlap
2N/A * Remove all references to a panel from the obscured lists of all panels.
2N/A * Also remove all obscured nodes from the given panel. This routine
2N/A * touches the appropriate places to ensure that everybody is properly
2N/A * updated.
2N/A */
2N/Avoid
2N/A_remove_overlap(PANEL *panel)
2N/A{
2N/A PANEL *pnl;
2N/A _obscured_list *obs;
2N/A _obscured_list *prev_obs;
2N/A
2N/A /* Make sure that the background gets updated */
2N/A
2N/A (void) touchline(stdscr, panel->wstarty,
2N/A panel->wendy - panel->wstarty + 1);
2N/A
2N/A /* Remove all references to the panel from the remaining panels */
2N/A
2N/A for (pnl = _Bottom_panel; pnl != panel; pnl = pnl->above) {
2N/A if (obs = _unlink_obs(pnl, panel))
2N/A _free_overlap(obs);
2N/A }
2N/A
2N/A /* delete the obscured list from the panel */
2N/A
2N/A if ((obs = panel -> obscured) != 0) {
2N/A do {
2N/A prev_obs = obs;
2N/A obs = obs -> next;
2N/A _free_overlap(prev_obs);
2N/A }
2N/A while (obs != panel -> obscured);
2N/A panel -> obscured = 0;
2N/A }
2N/A}