1 2 /* 3 4 /usr/src/ext2ed/ext2ed.h 5 6 A part of the extended file system 2 disk editor. 7 8 -------------------------------------- 9 Include file for the ext2 disk editor. 10 -------------------------------------- 11 12 This file contains declarations which are needed by all the files in ext2ed. 13 14 First written on: April 9 1995 15 16 Copyright (C) 1995 Gadi Oxman 17 18 */ 19 20 #ifndef EXT2ED_EDITOR_H 21 #define EXT2ED_EDITOR_H 22 23 /* 24 25 ----------------------- 26 User definable options 27 ----------------------- 28 29 */ 30 31 #ifndef ETC_DIR 32 #define ETC_DIR "/etc" /* Where to find the config file */ 33 #endif 34 35 #define DEBUG /* Activate self-sanity checks */ 36 37 #include <ext2fs/ext2_fs.h> /* Main kernel ext2 include file */ 38 #include <sys/stat.h> 39 40 #include <ncurses.h> 41 42 #define MAX_FIELDS 400 43 44 #define MAX_COMMAND_LINE 81 45 #define MAX_COMMANDS_NUM 30 /* Maximum number of commands of one type */ 46 #define REMEMBER_COUNT 30 /* Object memory size */ 47 48 /* 49 The user screen consists of four parts: 50 51 1. Title window (title_win). 52 2. Show (status) window (show_win). 53 3. Main show pad (show_pad). 54 4. Command window (command_win). 55 56 */ 57 58 /* 59 60 The show pad is mapped to the space left between the other three windows. 61 62 If you wondered why ext2ed grabs so memory, the answer is probably below - I wanted to treat 63 the virtual display as infinite. Decrease the following for more realistic memory consumption. 64 65 */ 66 67 #define SHOW_PAD_LINES 3000 68 #define SHOW_PAD_COLS (COLS > 140 ? COLS : 140) 69 70 #define COMMAND_WIN_LINES 6 /* Change this to your preferences */ 71 #define TITLE_WIN_LINES 3 72 #define SHOW_WIN_LINES 3 73 74 #define HEX 1 75 #define TEXT 2 76 77 #ifndef EXT2_PRE_02B_MAGIC 78 #define EXT2_PRE_02B_MAGIC 0xEF51 79 #endif 80 81 82 typedef void (*PF) (char *); /* Used to point to the dispatched functions */ 83 84 struct struct_commands { /* Holds commands of an object */ 85 int last_command; 86 char *names [MAX_COMMANDS_NUM]; 87 char *descriptions [MAX_COMMANDS_NUM]; 88 PF callback [MAX_COMMANDS_NUM]; 89 }; 90 91 struct struct_descriptor { /* Describes an object */ 92 unsigned long length; 93 unsigned char name [60]; 94 unsigned short fields_num; 95 unsigned char field_names [MAX_FIELDS][80]; 96 unsigned char field_types [MAX_FIELDS]; 97 unsigned short field_lengths [MAX_FIELDS]; 98 unsigned short field_positions [MAX_FIELDS]; 99 struct struct_commands type_commands; 100 struct struct_descriptor *prev,*next; 101 }; 102 103 #define FIELD_TYPE_INT 1 104 #define FIELD_TYPE_UINT 2 105 #define FIELD_TYPE_CHAR 3 106 107 struct struct_type_data { /* The object's data is usually here */ 108 long offset_in_block; 109 110 union union_type_data { /* Format it in various ways */ 111 char buffer [EXT2_MAX_BLOCK_SIZE]; 112 struct ext2_acl_header t_ext2_acl_header; 113 struct ext2_acl_entry t_ext2_acl_entry; 114 struct ext2_group_desc t_ext2_group_desc; 115 struct ext2_inode t_ext2_inode; 116 struct ext2_super_block t_ext2_super_block; 117 struct ext2_dir_entry t_ext2_dir_entry; 118 } u; 119 }; 120 121 struct struct_file_system_info { /* Important information about the filesystem */ 122 unsigned long long file_system_size; 123 unsigned long super_block_offset; 124 unsigned long first_group_desc_offset; 125 unsigned long groups_count; 126 unsigned long inodes_per_block; 127 unsigned long blocks_per_group; /* The name is misleading; beware */ 128 unsigned long no_blocks_in_group; 129 unsigned short block_size; 130 struct ext2_super_block super_block; 131 }; 132 133 struct struct_file_info { /* Used to handle files and directories */ 134 135 struct ext2_inode *inode_ptr; 136 137 long inode_offset; 138 long global_block_num,global_block_offset; 139 long block_num,blocks_count; 140 long file_offset,file_length; 141 long level; 142 unsigned char buffer [EXT2_MAX_BLOCK_SIZE]; 143 long offset_in_block; 144 145 int display; 146 /* The following is used if the file is a directory */ 147 148 long dir_entry_num,dir_entries_count; 149 long dir_entry_offset; 150 }; 151 152 struct struct_super_info { /* Used to handle the superblock */ 153 unsigned long copy_num; 154 }; 155 156 struct struct_group_info { /* Used to handle the group descriptors */ 157 unsigned long copy_num; 158 unsigned long group_num; 159 }; 160 161 struct struct_block_bitmap_info { /* Used in blockbitmap_com.c */ 162 unsigned long entry_num; 163 unsigned long group_num; 164 }; 165 166 struct struct_inode_bitmap_info { /* Used in inodebitmap_com.c */ 167 unsigned long entry_num; 168 unsigned long group_num; 169 }; 170 171 struct struct_remember_lifo { /* Implements the objects circular memory */ 172 long entries_count; 173 174 long offset [REMEMBER_COUNT]; 175 struct struct_descriptor *type [REMEMBER_COUNT]; 176 char name [REMEMBER_COUNT][80]; 177 }; 178 179 struct struct_pad_info { /* Used to zoom into the pad window */ 180 int display_lines,display_cols; 181 int line,col; 182 int max_line,max_col; 183 int disable_output; 184 }; 185 186 /* Global variables (defined mostly in main.c) */ 187 188 /* Configurable variables (Through configuration file) */ 189 190 extern char AlternateDescriptors [200]; 191 extern char Ext2Descriptors [200]; 192 extern char LogFile [200]; 193 extern int LogChanges; 194 extern int AllowChanges; 195 extern int AllowMountedRead; 196 extern int ForceExt2; 197 extern int DefaultBlockSize; 198 extern unsigned long DefaultTotalBlocks; 199 extern unsigned long DefaultBlocksInGroup; 200 extern int ForceDefault; 201 202 extern char device_name [80]; 203 extern char last_command_line [80]; 204 extern FILE *device_handle; 205 extern long device_offset; 206 extern int mounted; 207 208 extern short block_size; 209 extern struct struct_commands general_commands; 210 extern struct struct_commands ext2_commands; 211 extern struct struct_descriptor *first_type; 212 extern struct struct_descriptor *last_type; 213 extern struct struct_descriptor *current_type; 214 extern struct struct_type_data type_data; 215 extern struct struct_file_system_info file_system_info; 216 extern struct struct_file_info file_info,first_file_info; 217 extern struct struct_group_info group_info; 218 extern struct struct_super_info super_info; 219 extern struct struct_block_bitmap_info block_bitmap_info; 220 extern struct struct_inode_bitmap_info inode_bitmap_info; 221 extern struct struct_remember_lifo remember_lifo; 222 extern struct struct_pad_info show_pad_info; 223 extern int write_access; 224 225 extern int redraw_request; 226 extern char lines_s [80]; 227 extern char cols_s [80]; 228 229 230 /* init.c */ 231 232 extern int init (void); 233 extern void prepare_to_close (void); 234 extern int set_struct_descriptors (char *file_name); 235 extern void free_struct_descriptors (void); 236 extern struct struct_descriptor *add_new_descriptor (char *name); 237 extern void add_new_variable (struct struct_descriptor *descriptor,char *v_type,char *v_name); 238 extern void fill_type_commands (struct struct_descriptor *ptr); 239 extern void add_user_command (struct struct_commands *ptr,char *name,char *description,PF callback); 240 extern void free_user_commands (struct struct_commands *ptr); 241 extern int set_file_system_info (void); 242 extern int process_configuration_file (void); 243 extern void add_general_commands (void); 244 extern void add_ext2_general_commands (void); 245 extern void check_mounted (char *name); 246 247 int get_next_option (FILE *fp,char *option,char *value); 248 void init_readline (void); 249 void init_signals (void); 250 void signal_SIGWINCH_handler (int sig_num); 251 void signal_SIGTERM_handler (int sig_num); 252 void signal_SIGSEGV_handler (int sig_num); 253 254 /* general_com.c */ 255 256 /* General commands which are aviable always */ 257 258 extern void help (char *command_line); 259 extern void set (char *command_line); 260 extern void set_device (char *command_line); 261 extern void set_offset (char *command_line); 262 extern void set_type (char *command_line); 263 extern void show (char *command_line); 264 extern void pgup (char *command_line); 265 extern void pgdn (char *command_line); 266 extern void redraw (char *command_line); 267 extern void remember (char *command_line); 268 extern void recall (char *command_line); 269 extern void cd (char *command_line); 270 extern void enable_write (char *command_line); 271 extern void disable_write (char *command_line); 272 extern void write_data (char *command_line); 273 extern void next (char *command_line); 274 extern void prev (char *command_line); 275 276 void hex_set (char *command_line); 277 void detailed_help (char *text); 278 279 280 /* ext2_com.c */ 281 282 /* Extended2 filesystem genereal commands - Aviable only when editing an 283 ext2 filesystem */ 284 285 extern void type_ext2___super (char *command_line); 286 extern void type_ext2___group (char *command_line); 287 extern void type_ext2___cd (char *command_line); 288 289 290 /* main.c */ 291 292 extern int version_major,version_minor; 293 extern char revision_date [80]; 294 extern char email_address [80]; 295 296 #ifdef DEBUG 297 extern void internal_error (char *description,char *source_name,char *function_name); 298 #endif 299 300 void parser (void); 301 extern int dispatch (char *command_line); 302 char *parse_word (char *source,char *dest); 303 char *complete_command (char *text,int state); 304 char *dupstr (char *src); 305 306 307 308 /* disk.c */ 309 310 extern int load_type_data (void); 311 extern int write_type_data (void); 312 extern int low_read (unsigned char *buffer,unsigned long length,unsigned long offset); 313 extern int low_write (unsigned char *buffer,unsigned long length,unsigned long offset); 314 extern int log_changes (unsigned char *buffer,unsigned long length,unsigned long offset); 315 316 /* file_com.c */ 317 318 extern int init_file_info (void); 319 extern void type_file___show (char *command_line); 320 extern void type_file___inode (char *command_line); 321 extern void type_file___display (char *command_line); 322 extern void type_file___prev (char *command_line); 323 extern void type_file___next (char *command_line); 324 extern void type_file___offset (char *command_line); 325 extern void type_file___prevblock (char *command_line); 326 extern void type_file___nextblock (char *command_line); 327 extern void type_file___block (char *command_line); 328 extern void type_file___remember (char *command_line); 329 extern void type_file___set (char *command_line); 330 extern void type_file___writedata (char *command_line); 331 332 extern long file_block_to_global_block (long file_block,struct struct_file_info *file_info_ptr); 333 extern long return_indirect (long table_block,long block_num); 334 extern long return_dindirect (long table_block,long block_num); 335 extern long return_tindirect (long table_block,long block_num); 336 337 void file_show_hex (void); 338 void file_show_text (void); 339 void show_status (void); 340 341 /* inode_com.c */ 342 343 extern void type_ext2_inode___next (char *command_line); 344 extern void type_ext2_inode___prev (char *command_line); 345 extern void type_ext2_inode___show (char *command_line); 346 extern void type_ext2_inode___group (char *command_line); 347 extern void type_ext2_inode___entry (char *command_line); 348 extern void type_ext2_inode___file (char *command_line); 349 extern void type_ext2_inode___dir (char *command_line); 350 351 extern long inode_offset_to_group_num (long inode_offset); 352 extern long int inode_offset_to_inode_num (long inode_offset); 353 extern long int inode_num_to_inode_offset (long inode_num); 354 355 /* dir_com.c */ 356 357 extern int init_dir_info (struct struct_file_info *info); 358 extern void type_dir___show (char *command_line); 359 extern void type_dir___inode (char *command_line); 360 extern void type_dir___pgdn (char *command_line); 361 extern void type_dir___pgup (char *command_line); 362 extern void type_dir___prev (char *command_line); 363 extern void type_dir___next (char *command_line); 364 extern void type_dir___followinode (char *command_line); 365 extern void type_dir___remember (char *command_line); 366 extern void type_dir___cd (char *command_line); 367 extern void type_dir___entry (char *command_line); 368 extern void type_dir___writedata (char *command_line); 369 extern void type_dir___set (char *command_line); 370 371 #define HEX 1 372 #define TEXT 2 373 374 #define ABORT 0 375 #define CONTINUE 1 376 #define FOUND 2 377 378 struct struct_file_info search_dir_entries (int (*action) (struct struct_file_info *info),int *status); 379 int action_count (struct struct_file_info *info); 380 void show_dir_status (void); 381 long count_dir_entries (void); 382 int action_name (struct struct_file_info *info); 383 int action_entry_num (struct struct_file_info *info); 384 int action_show (struct struct_file_info *info); 385 386 /* super_com.c */ 387 388 extern void type_ext2_super_block___show (char *command_line); 389 extern void type_ext2_super_block___gocopy (char *command_line); 390 extern void type_ext2_super_block___setactivecopy (char *command_line); 391 392 /* group_com.c */ 393 394 extern void type_ext2_group_desc___next (char *command_line); 395 extern void type_ext2_group_desc___prev (char *command_line); 396 extern void type_ext2_group_desc___entry (char *command_line); 397 extern void type_ext2_group_desc___show (char *command_line); 398 extern void type_ext2_group_desc___inode (char *command_line); 399 extern void type_ext2_group_desc___gocopy (char *command_line); 400 extern void type_ext2_group_desc___blockbitmap (char *command_line); 401 extern void type_ext2_group_desc___inodebitmap (char *command_line); 402 extern void type_ext2_group_desc___setactivecopy (char *command_line); 403 404 /* blockbitmap_com.c */ 405 406 extern void type_ext2_block_bitmap___show (char *command_line); 407 extern void type_ext2_block_bitmap___entry (char *command_line); 408 extern void type_ext2_block_bitmap___next (char *command_line); 409 extern void type_ext2_block_bitmap___prev (char *command_line); 410 extern void type_ext2_block_bitmap___allocate (char *command_line); 411 extern void type_ext2_block_bitmap___deallocate (char *command_line); 412 void allocate_block (long entry_num); 413 void deallocate_block (long entry_num); 414 415 /* inodebitmap_bom.c */ 416 417 extern void type_ext2_inode_bitmap___show (char *command_line); 418 extern void type_ext2_inode_bitmap___entry (char *command_line); 419 extern void type_ext2_inode_bitmap___next (char *command_line); 420 extern void type_ext2_inode_bitmap___prev (char *command_line); 421 extern void type_ext2_inode_bitmap___allocate (char *command_line); 422 extern void type_ext2_inode_bitmap___deallocate (char *command_line); 423 void allocate_inode (long entry_num); 424 void deallocate_inode (long entry_num); 425 426 /* win.c */ 427 428 extern WINDOW *title_win,*show_win,*command_win,*show_pad; 429 430 extern void init_windows (void); 431 extern void refresh_title_win (void); 432 extern void refresh_show_win (void); 433 extern void refresh_show_pad (void); 434 extern void refresh_command_win (void); 435 extern void show_info (void); 436 extern void redraw_all (void); 437 extern void close_windows (void); 438 439 #endif /* EXT2ED_EDITOR_H */ 440