4 /usr/src/ext2ed/ext2ed.h
6 A part of the extended file system 2 disk editor.
8 --------------------------------------
9 Include file for the ext2 disk editor.
10 --------------------------------------
12 This file contains declarations which are needed by all the files in ext2ed.
14 First written on: April 9 1995
16 Copyright (C) 1995 Gadi Oxman
20 #ifndef EXT2ED_EDITOR_H
21 #define EXT2ED_EDITOR_H
25 -----------------------
26 User definable options
27 -----------------------
32 #define ETC_DIR "/etc" /* Where to find the config file */
35 #define DEBUG /* Activate self-sanity checks */
37 #include <linux/ext2_fs.h> /* Main kernel ext2 include file */
42 #define MAX_FIELDS 400
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 */
49 The user screen consists of four parts:
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).
60 The show pad is mapped to the space left between the other three windows.
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.
67 #define SHOW_PAD_LINES 3000
68 #define SHOW_PAD_COLS (COLS > 140 ? COLS : 140)
70 #define COMMAND_WIN_LINES 6 /* Change this to your preferences */
71 #define TITLE_WIN_LINES 3
72 #define SHOW_WIN_LINES 3
77 #ifndef EXT2_PRE_02B_MAGIC
78 #define EXT2_PRE_02B_MAGIC 0xEF51
82 typedef void (*PF) (char *); /* Used to point to the dispatched functions */
84 struct struct_commands { /* Holds commands of an object */
86 char *names [MAX_COMMANDS_NUM];
87 char *descriptions [MAX_COMMANDS_NUM];
88 PF callback [MAX_COMMANDS_NUM];
91 struct struct_descriptor { /* Describes an object */
93 unsigned char name [60];
94 unsigned short fields_num;
95 unsigned char field_names [MAX_FIELDS][80];
96 unsigned short field_lengths [MAX_FIELDS];
97 unsigned short field_positions [MAX_FIELDS];
98 struct struct_commands type_commands;
99 struct struct_descriptor *prev,*next;
102 struct struct_type_data { /* The object's data is usually here */
103 long offset_in_block;
105 union union_type_data { /* Format it in various ways */
106 char buffer [EXT2_MAX_BLOCK_SIZE];
107 struct ext2_acl_header t_ext2_acl_header;
108 struct ext2_acl_entry t_ext2_acl_entry;
109 struct ext2_group_desc t_ext2_group_desc;
110 struct ext2_inode t_ext2_inode;
111 struct ext2_super_block t_ext2_super_block;
112 struct ext2_dir_entry t_ext2_dir_entry;
116 struct struct_file_system_info { /* Important information about the filesystem */
117 unsigned long long file_system_size;
118 unsigned long super_block_offset;
119 unsigned long first_group_desc_offset;
120 unsigned long groups_count;
121 unsigned long inodes_per_block;
122 unsigned long blocks_per_group; /* The name is misleading; beware */
123 unsigned long no_blocks_in_group;
124 unsigned short block_size;
125 struct ext2_super_block super_block;
128 struct struct_file_info { /* Used to handle files and directories */
130 struct ext2_inode *inode_ptr;
133 long global_block_num,global_block_offset;
134 long block_num,blocks_count;
135 long file_offset,file_length;
137 unsigned char buffer [EXT2_MAX_BLOCK_SIZE];
138 long offset_in_block;
141 /* The following is used if the file is a directory */
143 long dir_entry_num,dir_entries_count;
144 long dir_entry_offset;
147 struct struct_super_info { /* Used to handle the superblock */
148 unsigned long copy_num;
151 struct struct_group_info { /* Used to handle the group descriptors */
152 unsigned long copy_num;
153 unsigned long group_num;
156 struct struct_block_bitmap_info { /* Used in blockbitmap_com.c */
157 unsigned long entry_num;
158 unsigned long group_num;
161 struct struct_inode_bitmap_info { /* Used in inodebitmap_com.c */
162 unsigned long entry_num;
163 unsigned long group_num;
166 struct struct_remember_lifo { /* Implements the objects circular memory */
169 long offset [REMEMBER_COUNT];
170 struct struct_descriptor *type [REMEMBER_COUNT];
171 char name [REMEMBER_COUNT][80];
174 struct struct_pad_info { /* Used to zoom into the pad window */
175 int display_lines,display_cols;
177 int max_line,max_col;
181 /* Global variables (defined mostly in main.c) */
183 /* Configurable variables (Through configuration file) */
185 extern char AlternateDescriptors [200];
186 extern char Ext2Descriptors [200];
187 extern char LogFile [200];
188 extern int LogChanges;
189 extern int AllowChanges;
190 extern int AllowMountedRead;
191 extern int ForceExt2;
192 extern int DefaultBlockSize;
193 extern unsigned long DefaultTotalBlocks;
194 extern unsigned long DefaultBlocksInGroup;
195 extern int ForceDefault;
197 extern char device_name [80];
198 extern char last_command_line [80];
199 extern FILE *device_handle;
200 extern long device_offset;
203 extern short block_size;
204 extern struct struct_commands general_commands;
205 extern struct struct_commands ext2_commands;
206 extern struct struct_descriptor *first_type;
207 extern struct struct_descriptor *last_type;
208 extern struct struct_descriptor *current_type;
209 extern struct struct_type_data type_data;
210 extern struct struct_file_system_info file_system_info;
211 extern struct struct_file_info file_info,first_file_info;
212 extern struct struct_group_info group_info;
213 extern struct struct_super_info super_info;
214 extern struct struct_block_bitmap_info block_bitmap_info;
215 extern struct struct_inode_bitmap_info inode_bitmap_info;
216 extern struct struct_remember_lifo remember_lifo;
217 extern struct struct_pad_info show_pad_info;
218 extern int write_access;
220 extern int redraw_request;
221 extern char lines_s [80];
222 extern char cols_s [80];
227 extern int init (void);
228 extern void prepare_to_close (void);
229 extern int set_struct_descriptors (char *file_name);
230 extern void free_struct_descriptors (void);
231 extern struct struct_descriptor *add_new_descriptor (char *name);
232 extern void add_new_variable (struct struct_descriptor *descriptor,char *v_type,char *v_name);
233 extern void fill_type_commands (struct struct_descriptor *ptr);
234 extern void add_user_command (struct struct_commands *ptr,char *name,char *description,PF callback);
235 extern void free_user_commands (struct struct_commands *ptr);
236 extern int set_file_system_info (void);
237 extern int process_configuration_file (void);
238 extern void add_general_commands (void);
239 extern void add_ext2_general_commands (void);
240 extern void check_mounted (char *name);
242 int get_next_option (FILE *fp,char *option,char *value);
243 void init_readline (void);
244 void init_signals (void);
245 void signal_SIGWINCH_handler (int sig_num);
246 void signal_SIGTERM_handler (int sig_num);
247 void signal_SIGSEGV_handler (int sig_num);
251 /* General commands which are aviable always */
253 extern void help (char *command_line);
254 extern void set (char *command_line);
255 extern void set_device (char *command_line);
256 extern void set_offset (char *command_line);
257 extern void set_type (char *command_line);
258 extern void show (char *command_line);
259 extern void pgup (char *command_line);
260 extern void pgdn (char *command_line);
261 extern void redraw (char *command_line);
262 extern void remember (char *command_line);
263 extern void recall (char *command_line);
264 extern void cd (char *command_line);
265 extern void enable_write (char *command_line);
266 extern void disable_write (char *command_line);
267 extern void write_data (char *command_line);
268 extern void next (char *command_line);
269 extern void prev (char *command_line);
271 void hex_set (char *command_line);
272 void detailed_help (char *text);
277 /* Extended2 filesystem genereal commands - Aviable only when editing an
280 extern void type_ext2___super (char *command_line);
281 extern void type_ext2___group (char *command_line);
282 extern void type_ext2___cd (char *command_line);
287 extern int version_major,version_minor;
288 extern char revision_date [80];
289 extern char email_address [80];
292 extern void internal_error (char *description,char *source_name,char *function_name);
296 extern int dispatch (char *command_line);
297 char *parse_word (char *source,char *dest);
298 char *complete_command (char *text,int state);
299 char *dupstr (char *src);
305 extern int load_type_data (void);
306 extern int write_type_data (void);
307 extern int low_read (unsigned char *buffer,unsigned long length,unsigned long offset);
308 extern int low_write (unsigned char *buffer,unsigned long length,unsigned long offset);
309 extern int log_changes (unsigned char *buffer,unsigned long length,unsigned long offset);
313 extern int init_file_info (void);
314 extern void type_file___show (char *command_line);
315 extern void type_file___inode (char *command_line);
316 extern void type_file___display (char *command_line);
317 extern void type_file___prev (char *command_line);
318 extern void type_file___next (char *command_line);
319 extern void type_file___offset (char *command_line);
320 extern void type_file___prevblock (char *command_line);
321 extern void type_file___nextblock (char *command_line);
322 extern void type_file___block (char *command_line);
323 extern void type_file___remember (char *command_line);
324 extern void type_file___set (char *command_line);
325 extern void type_file___writedata (char *command_line);
327 extern long file_block_to_global_block (long file_block,struct struct_file_info *file_info_ptr);
328 extern long return_indirect (long table_block,long block_num);
329 extern long return_dindirect (long table_block,long block_num);
330 extern long return_tindirect (long table_block,long block_num);
332 void file_show_hex (void);
333 void file_show_text (void);
334 void show_status (void);
338 extern void type_ext2_inode___next (char *command_line);
339 extern void type_ext2_inode___prev (char *command_line);
340 extern void type_ext2_inode___show (char *command_line);
341 extern void type_ext2_inode___group (char *command_line);
342 extern void type_ext2_inode___entry (char *command_line);
343 extern void type_ext2_inode___file (char *command_line);
344 extern void type_ext2_inode___dir (char *command_line);
346 extern long inode_offset_to_group_num (long inode_offset);
347 extern long int inode_offset_to_inode_num (long inode_offset);
348 extern long int inode_num_to_inode_offset (long inode_num);
352 extern int init_dir_info (struct struct_file_info *info);
353 extern void type_dir___show (char *command_line);
354 extern void type_dir___inode (char *command_line);
355 extern void type_dir___pgdn (char *command_line);
356 extern void type_dir___pgup (char *command_line);
357 extern void type_dir___prev (char *command_line);
358 extern void type_dir___next (char *command_line);
359 extern void type_dir___followinode (char *command_line);
360 extern void type_dir___remember (char *command_line);
361 extern void type_dir___cd (char *command_line);
362 extern void type_dir___entry (char *command_line);
363 extern void type_dir___writedata (char *command_line);
364 extern void type_dir___set (char *command_line);
373 struct struct_file_info search_dir_entries (int (*action) (struct struct_file_info *info),int *status);
374 int action_count (struct struct_file_info *info);
375 void show_dir_status (void);
376 long count_dir_entries (void);
377 int action_name (struct struct_file_info *info);
378 int action_entry_num (struct struct_file_info *info);
379 int action_show (struct struct_file_info *info);
383 extern void type_ext2_super_block___show (char *command_line);
384 extern void type_ext2_super_block___gocopy (char *command_line);
385 extern void type_ext2_super_block___setactivecopy (char *command_line);
389 extern void type_ext2_group_desc___next (char *command_line);
390 extern void type_ext2_group_desc___prev (char *command_line);
391 extern void type_ext2_group_desc___entry (char *command_line);
392 extern void type_ext2_group_desc___show (char *command_line);
393 extern void type_ext2_group_desc___inode (char *command_line);
394 extern void type_ext2_group_desc___gocopy (char *command_line);
395 extern void type_ext2_group_desc___blockbitmap (char *command_line);
396 extern void type_ext2_group_desc___inodebitmap (char *command_line);
397 extern void type_ext2_group_desc___setactivecopy (char *command_line);
399 /* blockbitmap_com.c */
401 extern void type_ext2_block_bitmap___show (char *command_line);
402 extern void type_ext2_block_bitmap___entry (char *command_line);
403 extern void type_ext2_block_bitmap___next (char *command_line);
404 extern void type_ext2_block_bitmap___prev (char *command_line);
405 extern void type_ext2_block_bitmap___allocate (char *command_line);
406 extern void type_ext2_block_bitmap___deallocate (char *command_line);
407 void allocate_block (long entry_num);
408 void deallocate_block (long entry_num);
410 /* inodebitmap_bom.c */
412 extern void type_ext2_inode_bitmap___show (char *command_line);
413 extern void type_ext2_inode_bitmap___entry (char *command_line);
414 extern void type_ext2_inode_bitmap___next (char *command_line);
415 extern void type_ext2_inode_bitmap___prev (char *command_line);
416 extern void type_ext2_inode_bitmap___allocate (char *command_line);
417 extern void type_ext2_inode_bitmap___deallocate (char *command_line);
418 void allocate_inode (long entry_num);
419 void deallocate_inode (long entry_num);
423 extern WINDOW *title_win,*show_win,*command_win,*show_pad;
425 extern void init_windows (void);
426 extern void refresh_title_win (void);
427 extern void refresh_show_win (void);
428 extern void refresh_show_pad (void);
429 extern void refresh_command_win (void);
430 extern void show_info (void);
431 extern void redraw_all (void);
432 extern void close_windows (void);
434 #endif /* EXT2ED_EDITOR_H */