home *** CD-ROM | disk | FTP | other *** search
- /*** MENU.H ***/
-
- /* Written By P.A. McKenzie
- * The C Window Library
- * Copyright (C) 1990 All Rights Reserved
- */
- #if !defined (MENU_DEF)
- #define MENU_DEF 1
- #include "window.h"
- #include "bstring.h"
- #undef PROTO_DEF
- #include "proto.h"
-
- #ifndef UNKNOWNARGS
- #ifndef __cplusplus
- #define UNKNOWNARGS
- #else
- #define UNKNOWNARGS ...
- #endif
- #endif
-
- #if defined (MENU_GLOBAL_DEF)
- #define MENU_EXTERN
- #else
- #define MENU_EXTERN extern
- #endif
-
- /* define offsets for pop-up menu keys */
-
- #define POPUP_UPKEY 0
- #define POPUP_DOWNKEY 1
- #define POPUP_ACCEPTKEY 2
- #define POPUP_QUITKEY 3
- #define POPUP_HOMEKEY 4
- #define POPUP_ENDKEY 5
- #define POPUP_RIGHTKEY 6
- #define POPUP_LEFTKEY 7
- #define POPUP_PULLDOWN_QUITKEY 8
-
- #define NUMPOPUPKEYS 9
-
- #define POPUP_EXIT 1
- #define BAR_EXIT 2
- #define PULLDOWN_EXIT 3
- #define PULLDOWN_POPUP_EXIT 4
- #define PULLDOWN_CONTINUE 5
-
- /* define offsets for bar menu keys */
- #define BAR_RIGHTKEY 0
- #define BAR_LEFTKEY 1
- #define BAR_ACCEPTKEY 2
- #define BAR_QUITKEY 3
- #define BAR_HOMEKEY 4
- #define BAR_ENDKEY 5
-
- #define NUMBARKEYS 6
-
-
- #define BARWRAP 1
- #define BARSTATIC 2
- #define BARCONFIRM 4
- #define BARDISPLAY 8
- #define BAROVERRIDE 16
- #define BARENHANCEDKEY 32
-
- #define POPUPWRAP 1
- #define POPUPSTATIC 2
- #define POPUPCONFIRM 4
- #define POPUPDISPLAY 8
- #define POPUPOVERRIDE 16
- #define POPUPENHANCEDKEY 32
-
- /********** Popup return values for user-defined functions **********/
-
- #define POPUP_CONTINUE 0
- #define POPUP_MOVE_UP 1
- #define POPUP_MOVE_DOWN 2
- #define POPUP_DO_CHOICE 3
- #define POPUP_MOVE_CONTINUE 4
- #define POPUP_ESCAPE 5
- #define POPUP_MOVE_LEFT 6
- #define POPUP_MOVE_RIGHT 7
- #define POPUP_MOVE_HOME 8
- #define POPUP_MOVE_END 9
- #define POPUP_PULLDOWN_QUIT 10
-
- /********** Bar return values for user-defined functions **********/
-
- #define BAR_CONTINUE 0
- #define BAR_MOVE_RIGHT 1
- #define BAR_MOVE_LEFT 2
- #define BAR_DO_CHOICE 3
- #define BAR_MOVE_CONTINUE 4
- #define BAR_ESCAPE 5
- #define BAR_MOVE_HOME 6
- #define BAR_MOVE_END 7
-
- #define MOVE_CONTINUE_DONE -1
-
- #define ENTRYCOLOR 0
- #define BORDERCOLOR 1
- #define HOTKEYCOLOR 2
- #define HIGHLIGHTCOLOR 3
- #define UNAVAILCOLOR 4
-
- #define NUMPOPUPCOLORS 5
- #define NUMBARCOLORS 5
-
- typedef struct
- {
- unsigned int wrap_around:1; /* menu highlight bar wrap */
- unsigned int static_menu:1; /* menu is displayed while performing
- * function */
- unsigned int confirm_flag:1; /* confirmation function when hotkey is
- * pressed */
- unsigned int open_flag:1; /* menu is activated ? */
- unsigned int pulldown_flag:1; /* menu is part of pulldown system? */
- unsigned int display_flag:1; /* menu is displayed even after exiting? */
- unsigned int override:1; /* unavailable entries are still processed? */
- unsigned int enhanced_key:1; /* enhanced key flag */
-
- } POPUP_MENU_STATUS, BAR_MENU_STATUS;
-
-
- typedef struct
- {
- char *entry_name;
- unsigned row;
- char hotkey_letter;
- unsigned int ext_hotkey;
- int (*func)(UNKNOWNARGS);
- } POPUP_MENU_ENTRY;
-
-
- typedef struct popmenu
- {
- WPOINTER w;
- POPUP_MENU_ENTRY *menu_select;
- unsigned menu_color[NUMPOPUPCOLORS];
- unsigned menu_key[NUMPOPUPKEYS];
- POPUP_MENU_STATUS popmenu_flags;
- BITSTRING active_entry;
- int pwidth;
- unsigned last_entry;
- int exp_method;
- int (*confirm_func)(struct popmenu *, unsigned);
- } POPUP_MENU, *POPUP_MENU_PTR;
-
-
-
- #define POPUP_WRAP_ON(p) (p)->popmenu_flags.wrap_around
- #define POPUP_STATIC_ON(p) (p)->popmenu_flags.static_menu
- #define POPUP_EXPLODE(p) (p)->popmenu_flags.explode_flag
- #define POPUP_CONFIRM_ON(p) (p)->popmenu_flags.confirm_flag
- #define POPUP_OPEN(p) (p)->popmenu_flags.open_flag
- #define POPUP_PULLDOWN_ON(p) (p)->popmenu_flags.pulldown_flag
- #define POPUP_DISPLAY_ON(p) (p)->popmenu_flags.display_flag
- #define POPUP_OVERRIDE_ON(p) (p)->popmenu_flags.override
- #define POPUP_ENHANCED_ON(p) (p)->popmenu_flags.enhanced_key
-
- void menu_init();
-
- typedef struct
- {
- char *entry_name;
- int row;
- int col;
- unsigned char hotkey_letter;
- unsigned int ext_hotkey;
- int (*func)(UNKNOWNARGS);
- } BAR_MENU_ENTRY;
-
-
-
- typedef struct barmenu
- {
- WPOINTER w;
- BAR_MENU_ENTRY *menu_select;
- unsigned menu_color[NUMBARCOLORS];
- unsigned menu_key[NUMBARKEYS];
- BAR_MENU_STATUS barmenu_flags;
- BITSTRING active_entry;
- int *width;
- int exp_method;
- unsigned last_entry;
- int (*confirm_func)(struct barmenu *, unsigned);
- } BAR_MENU, *BAR_MENU_PTR;
-
-
-
-
-
- #define BAR_WRAP_ON(b) (b)->barmenu_flags.wrap_around
- #define BAR_STATIC_ON(b) (b)->barmenu_flags.static_menu
- #define BAR_EXPLODE(b) (b)->barmenu_flags.explode_flag
- #define BAR_CONFIRM_ON(b) (b)->barmenu_flags.confirm_flag
- #define BAR_OPEN(b) (b)->barmenu_flags.open_flag
- #define BAR_DISPLAY_ON(b) (b)->barmenu_flags.display_flag
- #define BAR_OVERRIDE_ON(b) (b)->barmenu_flags.override
- #define BAR_PULLDOWN_ON(b) (b)->barmenu_flags.pulldown_flag
- #define BAR_ENHANCED_ON(b) (b)->barmenu_flags.enhanced_key
-
-
- typedef struct pullmenu
- {
- BAR_MENU_PTR barmenu;
- POPUP_MENU_PTR *popupmenu;
- } PULLDOWN_MENU, *PULLDOWN_MENU_PTR;
-
- PULLDOWN_MENU_PTR CreatePulldownMenu();
- /* Up to here */
-
- MENU_EXTERN int (*popup_undef_key) P((POPUP_MENU_PTR p, unsigned key,
- unsigned *entry));
- MENU_EXTERN int (*bar_undef_key) P((BAR_MENU_PTR b, unsigned key,
- unsigned *entry));
- MENU_EXTERN void (*global_bar_prefunc) P((BAR_MENU_PTR, unsigned));
- MENU_EXTERN void (*global_popup_prefunc) P((POPUP_MENU_PTR, unsigned));
-
- MENU_EXTERN unsigned popup_key_definition[NUMPOPUPKEYS];
- MENU_EXTERN unsigned bar_key_definition[NUMBARKEYS];
-
-
- #if __cplusplus
- extern "C"
- {
- #endif
-
- int BarAssignColors P((BAR_MENU_PTR barptr, unsigned *colors));
- int BarAssignKeys P((BAR_MENU_PTR barptr, unsigned *keys));
- int BarChangeEntryString P((BAR_MENU_PTR barptr, unsigned entry,
- char *string));
- BAR_MENU_PTR BarCreateMenu P((BAR_MENU_ENTRY *entries, unsigned *colors,
- int row, int col, WPOINTER (*wfunc)(void)));
-
- int BarMakeEntryAvailable P((BAR_MENU_PTR barptr, unsigned entry));
- int BarMakeEntryUnavailable P((BAR_MENU_PTR barptr, unsigned entry));
- int BarMenuFree P((BAR_MENU_PTR barptr));
- int BarSetExplosionType P((BAR_MENU_PTR barptr, int effect));
- int BarSetOptions P((BAR_MENU_PTR barptr, int options, int flag));
- int BarSelectMenu P((BAR_MENU_PTR barptr, int rank,
- unsigned entry));
- int BarSetConfirmFunction P((BAR_MENU_PTR barptr,
- int (*cfunc)(BAR_MENU_PTR, unsigned)));
-
- int PopupAssignColors P((POPUP_MENU_PTR popptr, unsigned *colors));
- int PopupAssignKeys P((POPUP_MENU_PTR popptr, unsigned *keys));
-
- POPUP_MENU_PTR PopupCreateMenu P((POPUP_MENU_ENTRY *entries, unsigned *colors,
- unsigned row, unsigned col, int wheight,
- WPOINTER (*wfunc)(void),
- VWPOINTER (*vwfunc)(void)));
-
- int PopupMakeEntryAvailable P((POPUP_MENU_PTR popptr,
- unsigned entry));
- int PopupMakeEntryUnavailable P((POPUP_MENU_PTR popptr,
- unsigned entry));
-
- int PopupSelectMenu P((POPUP_MENU_PTR popptr, int rank,
- unsigned entry));
- int PopupSetOptions P((POPUP_MENU_PTR popptr, unsigned options,
- int flag));
-
- int PopupChangeEntryString P((POPUP_MENU_PTR popptr,
- unsigned entry, char *string));
- int PopupSetExplosionType P((POPUP_MENU_PTR popptr, int effect));
-
- int PopupSetConfirmFunction P((POPUP_MENU_PTR popptr,
- int (*cfunc)(POPUP_MENU_PTR, unsigned)));
- int PopupMenuFree P((POPUP_MENU_PTR popptr));
-
- PULLDOWN_MENU_PTR PulldownCreateMenu P((POPUP_MENU_PTR popptrs[],
- BAR_MENU_PTR barptr, int adjust));
-
- int PulldownSelectMenu P((PULLDOWN_MENU_PTR pullptr, int rankbar,
- unsigned startbar, int *rankpop,
- unsigned *startpop,
- int imode));
-
- int PulldownMenuFree P((PULLDOWN_MENU_PTR pullptr));
- int PulldownMenuFreeAll P((PULLDOWN_MENU_PTR pullptr));
-
- #if defined (SOURCE)
- #include "mintern.h"
- #endif
- #if __cplusplus
- }
- #endif
- /* Other defines */
- #define BAR_NULL_PTR ((BAR_MENU_PTR)0)
- #define POPUP_NULL_PTR ((POPUP_MENU_PTR)0)
- #define PULLDOWN_NULL_PTR ((PULLDOWN_MENU_PTR)0)
- #define BAR_ENTRY_NULL ((BAR_MENU_ENTRY *)0)
- #define POPUP_ENTRY_NULL ((POPUP_MENU_ENTRY *)0)
- #define POPUP_STRING_IN_WINDOW(p,e) \
- (((p)->w->vwrow+(p)->w->height-1) > ((p)->menu_select[(e)-1].row) ? 1:0)
- #define POPUP_ENTRY_AVAILABLE(p,e) (test_bit(&(p)->active_entry,(e)-1))
- #define POPUP_WINDOW(p) ((p)->w)
- #define POPUP_VIRTUAL_WINDOW(p) ((p)->w->vwptr)
- #define POPUP_ENTRY_STRING(p,e) ((p)->menu_select[(e)-1].entry_name)
- #define POPUP_NUMBER_OF_ENTRIES(p) ((p)->active_entry.nbits)
- #define BAR_ENTRY_AVAILABLE(b,e) (POPUP_ENTRY_AVAILABLE((b),(e)))
- #define BAR_WINDOW(b) ((b)->w)
- #define BAR_ENTRY_STRING(b,e) ((b)->menu_select[(e)-1].entry_name)
- #define BAR_NUMBER_OF_ENTRIES(b) ((b)->active_entry.nbits)
- #endif