1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2012, Daniil Lunev. All rights reserved. 23 */ 24 25 #define SEPARATOR "=" 26 27 typedef struct menu_entry menu_entry; 28 typedef struct menu_list menu_list; 29 typedef enum cmd_id cmd_id; 30 31 struct menu_entry { 32 char entry_name[MAX_STRING_SIZE]; 33 char pool_label[MAX_STRING_SIZE]; 34 char pool_uuid[MAX_STRING_SIZE]; 35 char dataset[MAX_STRING_SIZE]; 36 char kernel[MAX_STRING_SIZE]; 37 char kernel_opts[MAX_STRING_SIZE]; 38 unsigned int modules_amount; 39 char ** modules; 40 }; 41 42 extern char default_entry[MAX_STRING_SIZE]; 43 extern char timeout[MAX_STRING_SIZE]; 44 extern char serial[MAX_STRING_SIZE]; 45 extern char terminal[MAX_STRING_SIZE]; 46 47 struct menu_list { 48 unsigned int entry_number; 49 menu_entry entry; 50 menu_list * next; 51 }; 52 53 enum cmd_id { 54 CMD_ENTRY_NAME, 55 CMD_POOL_LABEL, 56 CMD_POOL_UUID, 57 CMD_DATA_SET, 58 CMD_KERNEL_PATH, 59 CMD_KERNEL_OPTIONS, 60 CMD_BA_PATH, 61 CMD_DEFAULT, 62 CMD_TIMEOUT, 63 CMD_SERIAL, 64 CMD_TERMINAL, 65 CMD_UNKNOWN 66 }; 67 68 extern const char * cmd_list[]; 69 70 void 71 free_menu (menu_list ** menu); 72 73 menu_list * 74 parse_file (const char * file_name, int * entries_amount); 75 76 void 77 list_menu (menu_list * menu); 78 79 menu_list * 80 add_entry (menu_list ** menu, menu_list * entry); 81 82 menu_list * 83 clone_entry (menu_list *entry); 84 85 int 86 delete_entry (menu_list ** menu, menu_list * del); 87 88 menu_list * 89 find_entry (menu_list * menu, menu_list * find); 90 91 menu_list * 92 enable_hyper (menu_list * entry); 93 94 menu_list * 95 disable_hyper (menu_list * entry); 96 97 menu_list * 98 get_entry_by_number (menu_list * menu, int number);