home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c070 / 4.ddi / TOOLS.4 / TCTSRC1.EXE / MNDSTROY.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-03-31  |  3.3 KB  |  134 lines

  1. /**
  2. *
  3. * Name        MNDSTROY -- Remove menu from screen
  4. *                and discard its memory structures.
  5. *
  6. * Synopsis    ret = mndstroy (pmenu);
  7. *
  8. *        int    ret     Error code, or WN_NO_ERROR if ok.
  9. *        BMENU *pmenu     Pointer to BMENU structure to
  10. *                 discard.
  11. *
  12. * Description    This function completely discards a Blaise C TOOLS menu
  13. *        structure.  It undisplays the menu if necessary.
  14. *
  15. *        Do NOT use a menu structure (or any of its components)
  16. *        after destroying it via MNDSTROY.  Its memory has been
  17. *        freed.
  18. *
  19. *        An error occurs if pmenu does not point to a valid menu
  20. *        structure.
  21. *
  22. * Returns    ret          Error code, or WN_NO_ERROR if ok.
  23. *        *pmenu          Several fields altered.
  24. *        b_pactnode[][]      Window node with active cursor.
  25. *        b_wnerr       Possible values:
  26. *                  (No change)       Success.
  27. *                  MN_BAD_MENU       *pmenu is invalid.
  28. *                  MN_BAD_WIN       Internal error.
  29. *                  MN_BAD_KEY       Bad keymap entry found
  30. *                  MN_BAD_ITEM       Bad menu item found.
  31. *                  MN_BAD_MOUSE       Bad mouse event found.
  32. *                  WN_NOT_SHOWN       Internal error.
  33. *                  WN_BAD_NODE       Internal error.
  34. *                  WN_BAD_PAGE       Internal error.
  35. *                  WN_BAD_DEV       Internal error.
  36. *
  37. * Version    6.00 (C)Copyright Blaise Computing Inc.  1987-1989
  38. *
  39. **/
  40.  
  41. #include <stdlib.h>            /* For free().            */
  42.  
  43. #include <bmenu.h>
  44.  
  45. static int mndlmice(BMNMOUSE *);
  46.  
  47. int    mndstroy (pmenu)
  48. BMENU *pmenu;
  49. {
  50.     int code,ercode;
  51.  
  52.         /* Validate menu structure.                */
  53.     if (mnvalmnu (pmenu) == NIL)
  54.     wnretern (MN_BAD_MENU);
  55.  
  56.         /* Validate menu's window.                          */
  57.     if (wnvalwin (pmenu->pwin) == NIL)
  58.     wnretern (WN_BAD_WIN);
  59.  
  60.         /* If shown, undisplay window.                */
  61.     if (pmenu->pwin->where_shown.dev == SC_COLOR ||
  62.     pmenu->pwin->where_shown.dev == SC_MONO)
  63.  
  64.     if (wnremove (pmenu->pwin) == NIL)
  65.         return (b_wnerr);
  66.  
  67.         /* Destroy menu's window data structures.           */
  68.     if (wndstroy (pmenu->pwin))
  69.     return (b_wnerr);
  70.  
  71.         /* Free memory used by item list.            */
  72.     code = mndlitms(pmenu);
  73.  
  74.         /* Free memory used by key list.            */
  75.     ercode = mndlkeys(pmenu);
  76.     if (code == WN_NO_ERROR);
  77.     code = ercode;
  78.  
  79.         /* Free menu mouse event list.                */
  80.     ercode = mndlmice(pmenu->pmouse);
  81.     pmenu->pmouse = NIL;
  82.     if (code == WN_NO_ERROR)
  83.     code = ercode;
  84.  
  85.         /* Invalidate menu signature.                */
  86.     pmenu->signature = BMENU_DEAD;
  87.  
  88.         /* Free memory used by menu.                */
  89.     free(pmenu);
  90.  
  91.     return (code);
  92. }
  93.  
  94. /**
  95. *
  96. * Name        MNDLMICE -- Free linked list of mouse menu events.
  97. *
  98. * Synopsis    ercode = mndlmice(pmouse);
  99. *
  100. *        int ercode    Returned result code:
  101. *                  WN_NO_ERROR if okay;
  102. *                  MN_BAD_MOUSE if list corrupted.
  103. *        BMNMOUSE *pmouse
  104. *                Address of first event to free.
  105. *
  106. * Description    This function completely discards a linked list
  107. *        of menu mouse event structures.
  108. *
  109. * Returns    ercode        Returned result code:
  110. *                  WN_NO_ERROR if okay;
  111. *                  MN_BAD_MOUSE if list corrupted.
  112. *
  113. **/
  114.  
  115. static int mndlmice(pmouse)
  116. BMNMOUSE *pmouse;
  117. {
  118.     BMNMOUSE *pnext_mouse;
  119.  
  120.         /* Free memory used by item list.            */
  121.     for (; pmouse != NIL; pmouse = pnext_mouse)
  122.     {
  123.         /* Check event signature, then delete it.        */
  124.     if (pmouse->signature != MN_MOU_SIGN)
  125.         wnretern (MN_BAD_MOUSE);
  126.     pmouse->signature = MN_DEAD_MOUSE;
  127.  
  128.     pnext_mouse = pmouse->pnext;
  129.     free(pmouse);
  130.     }
  131.  
  132.     return WN_NO_ERROR;
  133. }
  134.