source: bootcd/isolinux/syslinux-6.03/com32/include/menu.h

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 5.8 KB
Line 
1/* ----------------------------------------------------------------------- *
2 *
3 *   Copyright 2004-2008 H. Peter Anvin - All Rights Reserved
4 *
5 *   This program is free software; you can redistribute it and/or modify
6 *   it under the terms of the GNU General Public License as published by
7 *   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
8 *   Boston MA 02110-1301, USA; either version 2 of the License, or
9 *   (at your option) any later version; incorporated herein by reference.
10 *
11 * ----------------------------------------------------------------------- */
12
13/*
14 * menu.h
15 *
16 * Header file for the simple menu system
17 */
18
19#ifndef MENU_H
20#define MENU_H
21
22#include <time.h>
23#include <sys/time.h>
24#include <sys/times.h>
25#include <inttypes.h>
26#include <unistd.h>
27#include <colortbl.h>
28#include <stdbool.h>
29#include <getkey.h>
30#include "refstr.h"
31
32/* #define DEBUG 1 */
33#include <dprintf.h>
34
35#ifndef CLK_TCK
36# define CLK_TCK sysconf(_SC_CLK_TCK)
37#endif
38
39struct menu;
40
41/* Note: the _UNRES variants must always be immediately after their
42   "normal" versions. */
43enum menu_action {
44    MA_NONE,                    /* Undefined value */
45    MA_CMD,                     /* Execute a command */
46    MA_DISABLED,                /* Disabled menu entry */
47    MA_SUBMENU,                 /* This is a submenu entry */
48    MA_GOTO,                    /* Go to another menu */
49    MA_GOTO_UNRES,              /* Unresolved go to */
50    MA_QUIT,                    /* Quit to CLI */
51    MA_EXIT,                    /* Exit to higher-level menu */
52    MA_EXIT_UNRES,              /* Unresolved exit */
53    MA_HELP,                    /* Show help text */
54};
55
56struct menu_entry {
57    struct menu *menu;          /* Parent menu */
58    const char *displayname;
59    const char *label;
60    const char *passwd;
61    char *helptext;
62    const char *cmdline;
63    const char *background;
64    struct menu *submenu;
65    struct menu_entry *next;    /* Linked list of all labels across menus */
66    int entry;                  /* Entry number inside menu */
67    enum menu_action action;
68    unsigned char hotkey;
69    bool immediate;             /* Hotkey action does not require Enter */
70    bool save;                  /* Save this entry if selected */
71};
72
73static inline bool is_disabled(struct menu_entry *me)
74{
75    return me->action == MA_DISABLED;
76}
77
78enum kernel_type {
79    /* Meta-types for internal use */
80    KT_NONE,
81    KT_LOCALBOOT,
82
83    /* The ones we can pass off to SYSLINUX, in order */
84    KT_KERNEL,                  /* Undefined type */
85    KT_LINUX,                   /* Linux kernel */
86    KT_BOOT,                    /* Bootstrap program */
87    KT_BSS,                     /* Boot sector with patch */
88    KT_PXE,                     /* PXE NBP */
89    KT_FDIMAGE,                 /* Floppy disk image */
90    KT_COM32,                   /* COM32 image */
91    KT_CONFIG,                  /* Configuration file */
92};
93
94/* Configurable integer parameters */
95enum parameter_number {
96    P_WIDTH,
97    P_MARGIN,
98    P_PASSWD_MARGIN,
99    P_MENU_ROWS,
100    P_TABMSG_ROW,
101    P_CMDLINE_ROW,
102    P_END_ROW,
103    P_PASSWD_ROW,
104    P_TIMEOUT_ROW,
105    P_HELPMSG_ROW,
106    P_HELPMSGEND_ROW,
107    P_HSHIFT,
108    P_VSHIFT,
109    P_HIDDEN_ROW,
110
111    NPARAMS
112};
113
114/* Configurable messages */
115enum message_number {
116    MSG_TITLE,
117    MSG_AUTOBOOT,
118    MSG_TAB,
119    MSG_NOTAB,
120    MSG_PASSPROMPT,
121
122    MSG_COUNT
123};
124
125struct messages {
126    const char *name;           /* Message configuration name */
127    const char *defmsg;         /* Default message text */
128};
129
130struct menu_parameter {
131    const char *name;
132    int value;
133};
134
135extern const struct menu_parameter mparm[NPARAMS];
136
137struct fkey_help {
138    const char *textname;
139    const char *background;
140};
141
142struct menu {
143    struct menu *next;          /* Linked list of all menus */
144    const char *label;          /* Goto label for this menu */
145    struct menu *parent;
146    struct menu_entry *parent_entry;    /* Entry for self in parent */
147
148    struct menu_entry **menu_entries;
149    struct menu_entry *menu_hotkeys[256];
150
151    const char *messages[MSG_COUNT];
152    int mparm[NPARAMS];
153
154    int nentries;
155    int nentries_space;
156    int defentry;
157    int timeout;
158
159    bool allowedit;
160    bool immediate;             /* MENU IMMEDIATE default for this menu */
161    bool save;                  /* MENU SAVE default for this menu */
162
163    int curentry;
164    int curtop;
165
166    const char *title;
167    const char *ontimeout;
168    const char *onerror;
169    const char *menu_master_passwd;
170    const char *menu_background;
171
172    struct color_table *color_table;
173
174    struct fkey_help fkeyhelp[12];
175};
176
177extern struct menu *root_menu, *start_menu, *hide_menu, *menu_list;
178
179/* 2048 is the current definition inside syslinux */
180#define MAX_CMDLINE_LEN  2048
181
182/* These are global parameters regardless of which menu we're displaying */
183extern int shiftkey;
184extern int hiddenmenu;
185extern int clearmenu;
186extern long long totaltimeout;
187extern clock_t kbdtimeout;
188extern const char *hide_key[KEY_MAX];
189
190void parse_configs(char **argv);
191int draw_background(const char *filename);
192void set_resolution(int x, int y);
193void start_console(void);
194void local_cursor_enable(bool);
195
196static inline int my_isspace(char c)
197{
198    return (unsigned char)c <= ' ';
199}
200
201int my_isxdigit(char c);
202unsigned int hexval(char c);
203unsigned int hexval2(const char *p);
204uint32_t parse_argb(char **p);
205
206extern const int message_base_color, menu_color_table_size;
207int mygetkey(clock_t timeout);
208int show_message_file(const char *filename, const char *background);
209
210/* passwd.c */
211int passwd_compare(const char *passwd, const char *entry);
212
213/* colors.c */
214#define MSG_COLORS_DEF_FG       0x90ffffff
215#define MSG_COLORS_DEF_BG       0x80ffffff
216#define MSG_COLORS_DEF_SHADOW   SHADOW_NORMAL
217void set_msg_colors_global(struct color_table *tbl,
218                           unsigned int fg, unsigned int bg,
219                           enum color_table_shadow shadow);
220struct color_table *default_color_table(void);
221struct color_table *copy_color_table(const struct color_table *master);
222extern const int message_base_color;
223
224/* background.c */
225extern const char *current_background;
226void set_background(const char *new_background);
227
228/* drain.c */
229void drain_keyboard(void);
230
231/* chainboot.c */
232void chainboot_file(const char *file, enum kernel_type type);
233
234#endif /* MENU_H */
Note: See TracBrowser for help on using the repository browser.