home *** CD-ROM | disk | FTP | other *** search
- /**
- *
- * Name wnupdate -- Write pending I/O requests to a window.
- *
- * Synopsis presult = wnupdate(pwin);
- *
- * BWINDOW *presult Pointer to BWINDOW structure updated,
- * or NIL if failure.
- * BWINDOW *pwin Pointer to BWINDOW structure to
- * update.
- *
- * Description This function writes any pending I/O requests to the
- * designated window if there are any waiting. (Nothing
- * will occur if any portion of the window's data area is
- * covered by another window.)
- *
- * This function does not designate the window "not
- * delayed". Use WNSETOPT to designate a window "delayed"
- * or "not delayed".
- *
- * An error occurs if pwin does not point to a valid window
- * structure or if the window is not currently displayed.
- *
- * Returns presult Pointer to newly-hidden BWINDOW
- * structure, or NIL if failure.
- * *pwin Several fields altered.
- * b_wnerr Possible values:
- * (No change) Success.
- * WN_BAD_WIN *pwin is invalid.
- * WN_NOT_SHOWN Not currently shown.
- * WN_BAD_DEV Internal error.
- * WN_ILL_DIM Internal error.
- * WN_NULL_PTR Internal error.
- *
- * Version 3.0 (C)Copyright Blaise Computing Inc. 1986
- *
- * Version 3.02 March 20, 1987
- * Corrected returned value.
- * Added code to move physical cursor.
- *
- **/
-
- #include <bwindow.h>
-
- BWINDOW *wnupdate(pwin)
- BWINDOW *pwin;
- {
- int old_dev,old_page,old_npage;
- int mode,columns,act_page;
- BWINDOW *presult;
-
- if (wnvalwin(pwin) == NIL) /* Validate window structure */
- {
- wnerror(WN_BAD_WIN);
- return NIL;
- }
- if ( pwin->options.hidden /* Quit if invisible */
- || (!pwin->internals.dirty) /* or if already up-to-date */
- || pwin->internals.frozen) /* or if frozen. */
- return pwin;
-
- /* Note former device. */
- old_dev = scmode(&mode,&columns,&act_page);
-
- old_page = _curpage; /* Note current page on former */
- /* device. */
-
- if (wnseldev(&pwin->where_shown,&pwin->img.dim,&old_npage))
- { /* Validate and select device */
- wnerror(WN_NOT_SHOWN); /* and page. */
- return NIL;
- }
-
- presult = pwin;
- if (wnputimg(&pwin->img,
- &pwin->where_shown) == NIL)
- presult = NIL;
- else
- {
- pwin->internals.dirty = 0;
-
- /* Move physical cursor. */
- if (!pwin->internals.cur_frozen)
- sccurset(pwin->where_shown.corner.row
- + b_pcurwin->cur_loc.row,
- pwin->where_shown.corner.col
- + b_pcurwin->cur_loc.col);
- }
-
- scpage(old_npage); /* Restore current page on new */
- /* device. */
-
- scchgdev(old_dev); /* Restore old device. */
-
- scpage(old_page); /* Restore current page on old */
- /* device. */
-
- return presult;
- }