home *** CD-ROM | disk | FTP | other *** search
- /**
- *
- * Name MNDSTROY -- Remove menu from screen
- * and discard its memory structures.
- *
- * Synopsis ret = mndstroy (pmenu);
- *
- * int ret Error code, or WN_NO_ERROR if ok.
- * BMENU *pmenu Pointer to BMENU structure to
- * discard.
- *
- * Description This function completely discards a Blaise C TOOLS menu
- * structure. It undisplays the menu if necessary.
- *
- * Do NOT use a menu structure (or any of its components)
- * after destroying it via MNDSTROY. Its memory has been
- * freed.
- *
- * An error occurs if pmenu does not point to a valid menu
- * structure.
- *
- * Returns ret Error code, or WN_NO_ERROR if ok.
- * *pmenu Several fields altered.
- * b_pactnode[][] Window node with active cursor.
- * b_wnerr Possible values:
- * (No change) Success.
- * MN_BAD_MENU *pmenu is invalid.
- * MN_BAD_WIN Internal error.
- * MN_BAD_KEY Bad keymap entry found
- * MN_BAD_ITEM Bad menu item found.
- * MN_BAD_MOUSE Bad mouse event found.
- * WN_NOT_SHOWN Internal error.
- * WN_BAD_NODE Internal error.
- * WN_BAD_PAGE Internal error.
- * WN_BAD_DEV Internal error.
- *
- * Version 6.00 (C)Copyright Blaise Computing Inc. 1987-1989
- *
- **/
-
- #include <stdlib.h> /* For free(). */
-
- #include <bmenu.h>
-
- static int mndlmice(BMNMOUSE *);
-
- int mndstroy (pmenu)
- BMENU *pmenu;
- {
- int code,ercode;
-
- /* Validate menu structure. */
- if (mnvalmnu (pmenu) == NIL)
- wnretern (MN_BAD_MENU);
-
- /* Validate menu's window. */
- if (wnvalwin (pmenu->pwin) == NIL)
- wnretern (WN_BAD_WIN);
-
- /* If shown, undisplay window. */
- if (pmenu->pwin->where_shown.dev == SC_COLOR ||
- pmenu->pwin->where_shown.dev == SC_MONO)
-
- if (wnremove (pmenu->pwin) == NIL)
- return (b_wnerr);
-
- /* Destroy menu's window data structures. */
- if (wndstroy (pmenu->pwin))
- return (b_wnerr);
-
- /* Free memory used by item list. */
- code = mndlitms(pmenu);
-
- /* Free memory used by key list. */
- ercode = mndlkeys(pmenu);
- if (code == WN_NO_ERROR);
- code = ercode;
-
- /* Free menu mouse event list. */
- ercode = mndlmice(pmenu->pmouse);
- pmenu->pmouse = NIL;
- if (code == WN_NO_ERROR)
- code = ercode;
-
- /* Invalidate menu signature. */
- pmenu->signature = BMENU_DEAD;
-
- /* Free memory used by menu. */
- free(pmenu);
-
- return (code);
- }
-
- /**
- *
- * Name MNDLMICE -- Free linked list of mouse menu events.
- *
- * Synopsis ercode = mndlmice(pmouse);
- *
- * int ercode Returned result code:
- * WN_NO_ERROR if okay;
- * MN_BAD_MOUSE if list corrupted.
- * BMNMOUSE *pmouse
- * Address of first event to free.
- *
- * Description This function completely discards a linked list
- * of menu mouse event structures.
- *
- * Returns ercode Returned result code:
- * WN_NO_ERROR if okay;
- * MN_BAD_MOUSE if list corrupted.
- *
- **/
-
- static int mndlmice(pmouse)
- BMNMOUSE *pmouse;
- {
- BMNMOUSE *pnext_mouse;
-
- /* Free memory used by item list. */
- for (; pmouse != NIL; pmouse = pnext_mouse)
- {
- /* Check event signature, then delete it. */
- if (pmouse->signature != MN_MOU_SIGN)
- wnretern (MN_BAD_MOUSE);
- pmouse->signature = MN_DEAD_MOUSE;
-
- pnext_mouse = pmouse->pnext;
- free(pmouse);
- }
-
- return WN_NO_ERROR;
- }