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/*
2N/A * Copyright 1997 Sun Microsystems, Inc. All rights reserved.
2N/A * Use is subject to license terms.
2N/A */
2N/A
2N/A/* Copyright (c) 1988 AT&T */
2N/A/* All Rights Reserved */
2N/A
2N/A/*
2N/A * University Copyright- Copyright (c) 1982, 1986, 1988
2N/A * The Regents of the University of California
2N/A * All Rights Reserved
2N/A *
2N/A * University Acknowledgment- Portions of this document are derived from
2N/A * software developed by the University of California, Berkeley, and its
2N/A * contributors.
2N/A */
2N/A
2N/A#pragma ident "%Z%%M% %I% %E% SMI"
2N/A
2N/A/*LINTLIBRARY*/
2N/A
2N/A#include <sys/types.h>
2N/A#include "curses_inc.h"
2N/A
2N/A/* Make the changes in ancestors visible in win. */
2N/A
2N/Avoid
2N/Awsyncdown(WINDOW *win)
2N/A{
2N/A short *wbch, *wech, *pbch, *pech, bch, ech, endx;
2N/A int wy, px, py, endy;
2N/A WINDOW *par;
2N/A
2N/A py = win->_pary;
2N/A px = win->_parx;
2N/A endy = win->_maxy;
2N/A endx = win->_maxx - 1;
2N/A
2N/A for (par = win->_parent; par != NULL; par = par->_parent) {
2N/A if (par->_flags & (_WINCHANGED | _WIN_ADD_ONE |
2N/A _WIN_INS_ONE)) {
2N/A wbch = win->_firstch;
2N/A wech = win->_lastch;
2N/A pbch = par->_firstch + py;
2N/A pech = par->_lastch + py;
2N/A
2N/A for (wy = 0; wy < endy; ++wy, ++wbch, ++wech,
2N/A ++pbch, ++pech) {
2N/A if (*pbch != _INFINITY) {
2N/A if ((bch = *pbch - px) < 0)
2N/A bch = 0;
2N/A if ((ech = *pech - px) > endx)
2N/A ech = endx;
2N/A if (!(bch > endx || ech < 0)) {
2N/A if (*wbch > bch)
2N/A *wbch = bch;
2N/A if (*wech < ech)
2N/A *wech = ech;
2N/A }
2N/A }
2N/A }
2N/A win->_flags |= _WINCHANGED;
2N/A }
2N/A
2N/A py += par->_pary;
2N/A px += par->_parx;
2N/A }
2N/A}