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

  1. /**
  2. *
  3. * Name        wnpgrem -- Remove window from linked list of windows
  4. *               displayed on a device & display page.
  5. *
  6. * Synopsis    presult = wnpgrem(pwindow);
  7. *
  8. *        WIN_NODE *presult Pointer to newly-removed BWINDOW
  9. *                  structure, or NIL if failure.
  10. *        BWINDOW  *pwindow Window to remove from list
  11. *
  12. * Description    This function removes a window from the linked list
  13. *        which governs the windows displayed on its video device
  14. *        and display page.
  15. *
  16. *        An error occurs if the window structure is invalid, if
  17. *        the window is not attached to a location on a video
  18. *        display device, or if the window is not attached to a
  19. *        valid node.
  20. *
  21. * Returns    presult       Pointer to newly-removed BWINDOW
  22. *                  structure, or NIL if failure.
  23. *        b_wnlist[][]      Altered linked list if success.
  24. *        pwindow->pnode      NIL if success.
  25. *        b_wnerr       Possible values:
  26. *                  (No change)      Success.
  27. *                  WN_BAD_WIN      *pwindow is invalid.
  28. *                  WN_BAD_NODE      *pwindow not attached
  29. *                          to valid node.
  30. *                  WN_BAD_DEV      Not shown.
  31. *                  WN_BAD_PAGE      Internal error.
  32. *
  33. * Version    3.0  (C)Copyright Blaise Computing Inc. 1986
  34. *
  35. **/
  36.  
  37. #include <string.h>
  38.  
  39. #include <bwindow.h>
  40.  
  41. #if MSC300
  42. #include <malloc.h>
  43. #else
  44. #include <stdlib.h>
  45. #endif
  46.  
  47. BWINDOW *wnpgrem(pwindow)
  48. BWINDOW *pwindow;
  49. {
  50.     int      dev,page;
  51.     WIN_NODE *pnode;
  52.  
  53.     if (wnvalwin(pwindow) == NIL)
  54.     {
  55.     wnerror(WN_BAD_WIN);
  56.     return NIL;
  57.     }
  58.  
  59.     if (wnvalnod(pnode = pwindow->pnode) == NIL)
  60.     {
  61.     wnerror(WN_BAD_NODE);
  62.     return NIL;
  63.     }
  64.  
  65.     dev = pwindow->where_shown.dev;
  66.     if (dev != MONO && dev != COLOR)
  67.     {
  68.     wnerror(WN_BAD_DEV);
  69.     return NIL;
  70.     }
  71.  
  72.     page = pwindow->where_shown.page;
  73.     if (page < 0 || page >= MAX_PAGES)
  74.     {
  75.     wnerror(WN_BAD_PAGE);
  76.     return NIL;
  77.     }
  78.  
  79.     if (b_wnlist[dev][page] == pnode) /* If this is top window,       */
  80.                       /* link root of list to next    */
  81.                       /* remaining window.          */
  82.     b_wnlist[dev][page] =  pnode->below;
  83.  
  84.     if (pnode->above != NIL)          /* Link next higher window      */
  85.                       /* to   next lower  window.     */
  86.     pnode->above->below = pnode->below;
  87.  
  88.                       /* Link next lower  window      */
  89.                       /* to   next higher window.     */
  90.     if (pnode->below != NIL)
  91.     pnode->below->above = pnode->above;
  92.  
  93.     pnode->above   =              /* Detach from next higher      */
  94.                       /*     window.              */
  95.     pnode->below   = NIL;          /* Detach from next lower window*/
  96.     pnode->pwin    = NIL;          /* Detach node from window.     */
  97.     pwindow->pnode = NIL;          /* Detach window from node.     */
  98.  
  99.     strcpy(pnode->signature,"Closed");/* Mark the node abandoned.     */
  100.  
  101.     free((char *) pnode);          /* Free the node's memory.      */
  102.  
  103.     return pwindow;
  104. }
  105.