home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c005 / 5.ddi / C / WNSELDEV.C < prev    next >
Encoding:
C/C++ Source or Header  |  1987-04-13  |  2.1 KB  |  66 lines

  1. /**
  2. *
  3. * Name        wnseldev -- Validate & select video page on which
  4. *                to display a rectangular region of data
  5. *
  6. * Synopsis    ercode = wnseldev(pwhere,pdim,poldpage);
  7. *
  8. *        int   ercode      0 if successful, nonzero if not.
  9. *        WHERE *pwhere      Pointer to WHERE structure denoting
  10. *                  device, display page, and coordinates
  11. *                  where data may be displayed.
  12. *        DIM   *pdim      Pointer to DIM structure denoting
  13. *                  dimensions of rectangle.
  14. *        int   *poldpage   Pointer to returned value:  previous
  15. *                  current page on selected device.
  16. *                  (This is invalid if ercode is nonzero.)
  17. *
  18. * Description    This function ensures that a requested video device and
  19. *        display page are present and large enough to contain a
  20. *        rectangular region.  If they are, then the device and
  21. *        page are made current; if not, then an error is reported
  22. *        via a nonzero return value.
  23. *
  24. * Returns    ercode          0 if successful, nonzero if not.
  25. *        b_device      Newly-selected device (if successful).
  26. *        b_curpage      Newly-selected page (if successful).
  27. *
  28. * Version    3.0  (C)Copyright Blaise Computing Inc. 1986
  29. *
  30. * Version    3.02 October 2, 1986
  31. *        Corrected check for rightmost column and bottom row.
  32. *
  33. **/
  34.  
  35. #include <bwindow.h>
  36.  
  37. int wnseldev(pwhere,pdim,poldpage)
  38. WHERE *pwhere;
  39. DIM   *pdim;
  40. int   *poldpage;
  41. {
  42.     int old_dev,mode,columns,act_page;
  43.  
  44.     old_dev = scmode(&mode,&columns,&act_page);/* Save former device. */
  45.  
  46.     if (scchgdev(pwhere->dev) != 0)   /* Absent device              */
  47.     return 1;
  48.  
  49.     *poldpage = b_curpage;          /* Former current page on       */
  50.                       /* new device.              */
  51.  
  52.     if (   pwhere->corner.row        <  0         /* Left edge     */
  53.     || pwhere->corner.col        <  0         /* Top row       */
  54.     || pwhere->corner.col + pdim->w >  columns   /* Right edge    */
  55.     || pwhere->page         >= scpages() /* Invalid page  */
  56.     || pwhere->corner.row + pdim->h >  scrows()) /* Bottom row    */
  57.     {
  58.     scchgdev(old_dev);          /* Error:  Restore former       */
  59.     return 1;              /* device and page.          */
  60.     }
  61.  
  62.     scpage(pwhere->page);
  63.  
  64.     return 0;                  /* Success.              */
  65. }
  66.