home *** CD-ROM | disk | FTP | other *** search
- /**
- *
- * Name wncursor -- Activate a window's cursor and deactivate
- * the cursors of all other windows showing on
- * that display page.
- *
- * Synopsis presult = wncursor(pwindow);
- *
- * BWINDOW *presult Pointer to newly-selected BWINDOW
- * structure, or NIL if failure.
- * BWINDOW *pwindow Pointer to BWINDOW structure to
- * select.
- *
- * Description The window's cursor is activated (although the cursor
- * may be invisible). The cursors of other windows on that
- * page are deactivated.
- *
- * An error occurs if pwindow does not point to a valid
- * window structure, if the window is hidden or not
- * currently displayed, or if some portion of the window's
- * data area is covered by another window.
- *
- * Returns presult Pointer to newly-selected BWINDOW
- * structure, or NIL if failure.
- * b_wnerr Possible values:
- * (No change) Success.
- * WN_BAD_WIN *pwindow is invalid.
- * WN_NOT_SHOWN Hidden or not
- * currently shown.
- * WN_COVERED Data area partly
- * covered.
- * WN_BAD_NODE Internal error.
- *
- * Version 3.0 (C)Copyright Blaise Computing Inc. 1986
- *
- **/
-
- #include <bwindow.h>
-
- /* The window (on each page) selected */
- /* to have a visible cursor. */
- WIN_NODE *(b_pactnode[MAX_DEVICES][MAX_PAGES]) = {0};
-
- BWINDOW *wncursor(pwindow)
- BWINDOW *pwindow;
- {
- int old_dev,old_page,old_npage;
- int mode,columns,act_page;
- int dev,page;
-
- if (wnvalwin(pwindow) == NIL)
- {
- wnerror(WN_BAD_WIN);
- return NIL;
- }
-
- if (wnvalnod(pwindow->pnode) == NIL)
- {
- wnerror(WN_BAD_NODE);
- return NIL;
- }
-
- if (pwindow->internals.any_data_covered)
- {
- wnerror(WN_COVERED);
- return NIL;
- }
-
- if (pwindow->options.hidden)
- {
- wnerror(WN_NOT_SHOWN);
- return NIL;
- }
-
- /* Note former device. */
- old_dev = scmode(&mode,&columns,&act_page);
-
- old_page = b_curpage; /* Note current page on former */
- /* device. */
-
- /* Select and validate device */
- /* and page. */
- if (wnseldev(&pwindow->where_shown,&pwindow->img.dim,&old_npage))
- {
- wnerror(WN_NOT_SHOWN);
- return NIL;
- }
-
- dev = pwindow->where_shown.dev;
- page = pwindow->where_shown.page;
-
- /* If a window on this page is */
- /* currently designated to */
- /* control the cursor, */
- if (b_pactnode[dev][page] != NIL)
- /* deactivate it. */
- b_pactnode[dev][page]->pwin->internals.cur_frozen = 1;
-
- /* Activate this window instead.*/
- b_pactnode[dev][page] = pwindow->pnode;
-
- pwindow->internals.cur_frozen = 0;
-
- /* Move the cursor. */
- sccurset(pwindow->where_shown.corner.row + pwindow->cur_loc.row,
- pwindow->where_shown.corner.col + pwindow->cur_loc.col);
-
- /* Set cursor type. */
- scpgcur(pwindow->options.cur_off,
- pwindow->cur_type.high,
- pwindow->cur_type.low,
- CUR_ADJUST);
-
- 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 pwindow;
- }