Listing 1 (rcmenu.h)

  1: /************************************************************
  2:  *  Program: RMENU Menu Interpreter
  3:  *  Module: rcmenu.h -- Interpreter Module header file
  4:  *  Written by: Leor Zolman, 7/91
  5:  ************************************************************/
  6:
  7: #include <curses.h>
  8:
  9: #define min(x,y) ((x) < (y) ? (x) : (y))
 10:
 11:
 12: /********************* Curses Configuration *****************/
 13:
 14: #ifndef KEY_UP
 15: #   define OLD_CURSES 1     /* no KEY_UP definition: old Curses */
 16: #else
 17: #   define OLD_CURSES 0     /* KEY_UP defined: new Curses       */
 18: #endif
 19:
 20: #if OLD_CURSES              /* under old Curses, emulate some   */
 21: #   define INIT_FAIL    ERR /* of new Curses' features          */
 22: #   ifdef CTRL
 23: #       undef CTRL
 24: #   endif
 25: #   define CTRL(x)      ((x) & 037)
 26: #   define  KEY_UP      CTRL('P')
 27: #   define  KEY_DOWN    CTRL('N')
 28: #   define  KEY_LEFT    CTRL('B')
 29: #   define  KEY_RIGHT   CTRL('F')
 30: #   define  beep()      write(1, "\007", 1);
 31: #   define  keypad(a,b)
 32: #else
 33: #   define  INIT_FAIL  NULL
 34: #endif
 35:
 36: #if XENIX
 37: #define resetty reset_tty
 38: #endif
 39:
 40: #if DOS                         /* Color definitions for DOS:   */
 41: #define DOS_FCOLOR  A_CYAN      /* Normal DOS foreground color  */
 42: #define DOS_BCOLOR  A_BLACK     /* Normal DOS background color  */
 43:
 44: #define M_FCOLOR    A_YELLOW    /* Normal Menu foreground color */
 45: #define M_BCOLOR    A_BLUE      /* Normal Menu background color */
 46:
 47: #define MREV_FCOLOR A_BLUE      /* Reverse Menu foregnd color   */
 48: #define MREV_BCOLOR A_WHITE     /* Reverse Menu backgnd color   */
 49: #endif
 50:
 51:
 52: /*************** Default menu control options ***************/
 53:
 54: #define ON_ERROR        50         /* prompt option            */
 55:
 56: #define SHELL_PROMPT    FALSE      /* Prompt for shell escape? */
 57:
 58: #define DEF_PRECLEAR    YES
 59: #define DEF_POSTCLEAR   NO
 60: #define DEF_PROMPT      ON_ERROR     /* YES, NO or ON_ERROR    */
 61: #define DEF_ESCAPE      YES
 62:
 63: #define DEF_COLUMNS     1
 64: #define DEF_SPACING     2
 65:
 66:
 67: /************** Screen layout characteristics ***************/
 68:
 69: #define MAX_IROWS   18          /* # of item rows MUST BE EVEN) */
 70: #define HOME_Y      2           /* upper left y for 1st Item    */
 71: #define HOME_X      1           /* upper left x for 1st Item    */
 72: #define SCREEN_COLS 80          /* # of columns on the screen   */
 73:
 74: #define TITLE_ROW   0           /* row on screen for menu title */
 75: #define HELP_ROWO   20          /* row that "HELP" sign goes on */
 76: #define HELP_COLO   36          /* column that "HELP" sign goes */
 77: #define HELP_ROW    21          /* row on screen for HELP text  */
 78: #define PROMPT_ROW  23          /* row for prompt text          */
 79:
 80:
 81: /** System/hardware-dependent Key codes and line numbers: ***/
 82:
 83: #if DOS
 84: #   define LAST_ROW       24        /* last row of screen       */
 85: #   define MAX_PATH_STACK 5         /* maximum nested submenus  */
 86: #else
 87: #   define LAST_ROW     23          /* last row of screen       */
 88: #endif
 89:
 90: #define ERR_ROW  (PROMPT_ROW - 1)
 91:
 92:
 93: /************** Shell Escape Control Parameters *************/
 94:
 95: #define SH_PROMPT_STR \
 96:     " Press Enter for sub-shell, ESC to abort\
 97:  ('exit' returns from shell): "
 98:
 99: #define MENU_OPTS \
100: " Space/arrows/item#=Choose  ENTER=Run\
101:  'e'=Previous 'x'=Exit "
102:
103: #define MENU_SHELL  " !=shell"
104: #define MENU_PROMPT " -> "
105:
106: #ifndef DOS
107: #   define SHELL_ESC    "PS1=\"\n('exit' returns to\
108:  Menu)\n$ \"; export PS1; exec sh -"
109: #endif
110:
111:
112: /********** Other Miscellaneous constants: *****************/
113:
114: #define ESC         033         /* ESC key                      */
115: #define EXITALL     2           /* "super exit" code            */
116:
117: #define KEY_RUN     '\r'            /* raw-mode Enter key       */
118: #define KEY_SHOW    'a'         /* show action text for an item */
119: #define K_DIRECT    (-2)        /* values returned by get_cmd() */
120: #define K_EXIT      (-3)
121: #define K_EXITALL   (-4)
122: #define K_SHELL     (-5)
123: #define K_UNKNOWN   (-6)
124: #define K_VERSION   (-7)        /* report version number         */
125:
126: #define STANDOUT    1           /* video mode codes passed to    */
127: #define NORMAL      2           /* the draw_item() function      */
128:
129:
130: /********************* Global data **************************/
131:
132: extern struct levels {
133:     int n_menus;                         /* # currently active   */
134:     int max_menus;                       /* highest ever active  */
135:     struct menu2 {
136:         int most_items;                  /* most Items allocated */
137:         MENU Menu;                       /* the header structure */
138:         ITEM *Items[MAX_ITEMS];          /* the actual items     */
139:
140:         int field_len;                   /* length of item field */
141:         struct coord {                   /* coords of each item  */
142:             int ypos, xpos;
143:             int spaces_needed;       /* # of spaces to fill  */
144:         } coords[MAX_ITEMS];
145:
146:     } *Menus[MAX_MENUS];
147: } LMenus[MAX_NEST];
148:
149: typedef struct levels LEVELS;
150: typedef struct menu2 MENU2;
151: typedef struct coord COORDS;
152:
153: extern  int     nestlev;         /* current nesting level        */
154: extern  int     echox, echoy;    /* Location of item # echo area */
155: extern  int     debug;           /* true to display sys commands */
156:
157: extern  char  SysShell[80];      /* System Command Interpreter   */
158:
159: /********************* Prototypes: **************************/
160:
161: #if __STDC__ || XENIX      /* Standard C, supporting prototypes: */
162:
163: void    init_win(void);
154: void    close_win(void);
165: void    pre_shell(void);
166: void    post_shell(void);
167: void    tty_curses(void);
168: void    tty_shell(void);
169: void    push_path(void);
170: void    pop_path (void);
171:
172: int     ld_menu(char *);
173: void    placement(MENU *);
174: void    free_menus(void);
175: int     do_menu(char *, char *);
176: int     sub_menu(int, char *);
177: void    draw_menu(MENU2 *, int);
178: int     get_cmd(int, int, int *);
179: int     put_msg(int, char *, ...);
180: int     do_item(MENU2 *, int, char *);
181: void    draw_item(MENU2 *, int, int, int);
182: int     fatal(char *, ...);
183: void    do_cmnd(ITEM *, char *);
184: int     do_emenu(ITEM *, char *);
185: int     system0(char *);
186: char *  make_path( char *, char *);
187: char *  make_cmd( char *, char *);
188: void    show_item(MENU2 *, int, char *);
189: void    show_cmnd(ITEM *, char *);
190: void    hlight_on(void);
191: void    hlight_end(void);
192:
193: #else                            /* K&R C, minimal "prototypes:" */
194:
195: int     init_win();
196: int     close_win();
197: int     pre_shell();
198: int     post_shell();
199: int     tty_curses();
200: int     tty_shell();
201: int     push_path();
202: int     pop_path();
203:
204: int     ld_menu();
205: int     placement();
206: int     free_menus();
207: int     do_menu();
208: int     sub_menu();
209: int     draw_menu();
210: int     get_cmd();
211: int     put_msg();
212: int     do_item();
213: int     draw_item();
214: int     fatal();
215: int     do_cmnd();
216: int     do_emenu();
217: int     system0();
218: char *  make_path();
219: char *  make_cmd();
220: int     show_item();
221: int     show_cmnd();
222: int     hlight_on();
223: int     hlight_end();
224: #endif
/* End of File */