home *** CD-ROM | disk | FTP | other *** search
- /**
- *
- * Name wncover -- Mark lower windows if they are covered by
- * a given rectangular region.
- *
- * Synopsis presult = wncover(pnode,pcorner,pdim);
- *
- * WIN_NODE *presult Pointer to uppermost window node
- * examined, or NIL if failure.
- * WIN_NODE *pnode Pointer to uppermost window node to
- * examine.
- * LOC *pcorner Pointer to structure denoting upper
- * left corner of rectangular region.
- * DIM *pdim Pointer to structure denoting
- * dimensions of rectangular region.
- *
- * Description This function compares all windows below a given window
- * against a given rectangular region and marks those
- * windows as covered that are overlapped by the region.
- *
- * If the window with the active cursor is covered by the
- * rectangle, then its cursor is deactivated and the
- * screen's visible cursor is turned off.
- *
- * Returns presult Pointer to uppermost window node
- * examined, or NIL if failure.
- * b_pactnode[][] Window node with active cursor.
- * b_wnerr Possible values:
- * (No change) Success.
- * WN_BAD_NODE Invalid pnode.
- * WN_BAD_WIN Internal error.
- *
- * Version 3.0 (C)Copyright Blaise Computing Inc. 1986
- *
- **/
-
- #include <bwindow.h>
-
- WIN_NODE *wncover(pnode,pcorner,pdim)
- WIN_NODE *pnode;
- LOC *pcorner;
- DIM *pdim;
- {
- WIN_NODE *presult;
- BWINDOW *pwin;
- int dev,page;
- int row,col,high,low;
-
- if (NIL == wnvalnod(pnode))
- {
- wnerror(WN_BAD_NODE);
- return NIL;
- }
-
- if (NIL == wnvalwin(pwin = pnode->pwin))
- {
- wnerror(WN_BAD_WIN);
- return NIL;
- }
-
- if (wnovrlap(pcorner, /* If rectangle overlaps this */
- pdim, /* window, */
- &(pwin->where_shown.corner),
- &(pwin->img.dim)))
- { /* mark this window as covered. */
- pwin->internals.frozen =
- pwin->internals.any_data_covered =
- pwin->internals.cur_frozen = 1;
-
- dev = pwin->where_shown.dev;
- page = pwin->where_shown.page;
-
- /* If this window's cursor is */
- /* activated, */
- if (pnode == b_pactnode[dev][page])
- {
- sccurst(&row,&col,&high,&low);
- /* turn physical cursor off */
- scpgcur(1,high,low,CUR_NO_ADJUST);
- /* and deactivate window. */
- b_pactnode[dev][page] = NIL;
- }
- }
-
- presult = pnode;
- if (pnode->below != NIL) /* Continue with lower windows. */
- if (wncover(pnode->below,pcorner,pdim) == NIL)
- presult = NIL;
-
- return presult;
- }