home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c005 / 5.ddi / C / WNCOVER.C < prev    next >
Encoding:
C/C++ Source or Header  |  1986-08-05  |  2.5 KB  |  92 lines

  1. /**
  2. *
  3. * Name        wncover -- Mark lower windows if they are covered by
  4. *               a given rectangular region.
  5. *
  6. * Synopsis    presult = wncover(pnode,pcorner,pdim);
  7. *
  8. *        WIN_NODE *presult Pointer to uppermost window node
  9. *                  examined, or NIL if failure.
  10. *        WIN_NODE *pnode   Pointer to uppermost window node to
  11. *                  examine.
  12. *        LOC *pcorner      Pointer to structure denoting upper
  13. *                  left corner of rectangular region.
  14. *        DIM *pdim      Pointer to structure denoting
  15. *                  dimensions of rectangular region.
  16. *
  17. * Description    This function compares all windows below a given window
  18. *        against a given rectangular region and marks those
  19. *        windows as covered that are overlapped by the region.
  20. *
  21. *        If the window with the active cursor is covered by the
  22. *        rectangle, then its cursor is deactivated and the
  23. *        screen's visible cursor is turned off.
  24. *
  25. * Returns    presult       Pointer to uppermost window node
  26. *                  examined, or NIL if failure.
  27. *        b_pactnode[][]      Window node with active cursor.
  28. *        b_wnerr       Possible values:
  29. *                  (No change)       Success.
  30. *                  WN_BAD_NODE       Invalid pnode.
  31. *                  WN_BAD_WIN       Internal error.
  32. *
  33. * Version    3.0  (C)Copyright Blaise Computing Inc. 1986
  34. *
  35. **/
  36.  
  37. #include <bwindow.h>
  38.  
  39. WIN_NODE *wncover(pnode,pcorner,pdim)
  40. WIN_NODE *pnode;
  41. LOC     *pcorner;
  42. DIM     *pdim;
  43. {
  44.     WIN_NODE *presult;
  45.     BWINDOW  *pwin;
  46.     int      dev,page;
  47.     int      row,col,high,low;
  48.  
  49.     if (NIL == wnvalnod(pnode))
  50.     {
  51.     wnerror(WN_BAD_NODE);
  52.     return NIL;
  53.     }
  54.  
  55.     if (NIL == wnvalwin(pwin = pnode->pwin))
  56.     {
  57.     wnerror(WN_BAD_WIN);
  58.     return NIL;
  59.     }
  60.  
  61.     if (wnovrlap(pcorner,          /* If rectangle overlaps this   */
  62.          pdim,              /* window,              */
  63.          &(pwin->where_shown.corner),
  64.          &(pwin->img.dim)))
  65.     {                      /* mark this window as covered. */
  66.     pwin->internals.frozen         =
  67.     pwin->internals.any_data_covered =
  68.     pwin->internals.cur_frozen     = 1;
  69.  
  70.     dev  = pwin->where_shown.dev;
  71.     page = pwin->where_shown.page;
  72.  
  73.                       /* If this window's cursor is   */
  74.                       /* activated,              */
  75.     if (pnode == b_pactnode[dev][page])
  76.     {
  77.         sccurst(&row,&col,&high,&low);
  78.                       /* turn physical cursor off     */
  79.         scpgcur(1,high,low,CUR_NO_ADJUST);
  80.                       /* and deactivate window.       */
  81.         b_pactnode[dev][page] = NIL;
  82.     }
  83.     }
  84.  
  85.     presult = pnode;
  86.     if (pnode->below != NIL)          /* Continue with lower windows. */
  87.     if (wncover(pnode->below,pcorner,pdim) == NIL)
  88.         presult = NIL;
  89.  
  90.     return presult;
  91. }
  92.