home *** CD-ROM | disk | FTP | other *** search
- /**
- *
- * Name wnseldev -- Validate & select video page on which
- * to display a rectangular region of data
- *
- * Synopsis ercode = wnseldev(pwhere,pdim,poldpage);
- *
- * int ercode 0 if successful, nonzero if not.
- * WHERE *pwhere Pointer to WHERE structure denoting
- * device, display page, and coordinates
- * where data may be displayed.
- * DIM *pdim Pointer to DIM structure denoting
- * dimensions of rectangle.
- * int *poldpage Pointer to returned value: previous
- * current page on selected device.
- * (This is invalid if ercode is nonzero.)
- *
- * Description This function ensures that a requested video device and
- * display page are present and large enough to contain a
- * rectangular region. If they are, then the device and
- * page are made current; if not, then an error is reported
- * via a nonzero return value.
- *
- * Returns ercode 0 if successful, nonzero if not.
- * b_device Newly-selected device (if successful).
- * b_curpage Newly-selected page (if successful).
- *
- * Version 3.0 (C)Copyright Blaise Computing Inc. 1986
- *
- * Version 3.02 October 2, 1986
- * Corrected check for rightmost column and bottom row.
- *
- **/
-
- #include <bwindow.h>
-
- int wnseldev(pwhere,pdim,poldpage)
- WHERE *pwhere;
- DIM *pdim;
- int *poldpage;
- {
- int old_dev,mode,columns,act_page;
-
- old_dev = scmode(&mode,&columns,&act_page);/* Save former device. */
-
- if (scchgdev(pwhere->dev) != 0) /* Absent device */
- return 1;
-
- *poldpage = b_curpage; /* Former current page on */
- /* new device. */
-
- if ( pwhere->corner.row < 0 /* Left edge */
- || pwhere->corner.col < 0 /* Top row */
- || pwhere->corner.col + pdim->w > columns /* Right edge */
- || pwhere->page >= scpages() /* Invalid page */
- || pwhere->corner.row + pdim->h > scrows()) /* Bottom row */
- {
- scchgdev(old_dev); /* Error: Restore former */
- return 1; /* device and page. */
- }
-
- scpage(pwhere->page);
-
- return 0; /* Success. */
- }