1583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o/* 2583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 3583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o/usr/src/ext2ed/file_com.c 4583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 5583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oA part of the extended file system 2 disk editor. 6583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 7583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o---------------------------- 8583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oCommands which handle a file 9583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o---------------------------- 10583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 11583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oFirst written on: April 18 1995 12583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 13583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oCopyright (C) 1995 Gadi Oxman 14583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 15583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o*/ 16583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 17583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <stdio.h> 18583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <stdlib.h> 19583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <string.h> 20583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 21583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include "ext2ed.h" 22583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 23583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oint init_file_info (void) 24583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 25583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 26583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o struct ext2_inode *ptr; 27efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 28583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=&type_data.u.t_ext2_inode; 29efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 30583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.inode_ptr=ptr; 31583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.inode_offset=device_offset; 32583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 33583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.global_block_num=ptr->i_block [0]; 34583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.global_block_offset=ptr->i_block [0]*file_system_info.block_size; 35583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.block_num=0; 36583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.blocks_count=(ptr->i_size+file_system_info.block_size-1)/file_system_info.block_size; 37583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.file_offset=0; 38583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.file_length=ptr->i_size; 39583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.level=0; 40583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.offset_in_block=0; 41efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 42583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.display=HEX; 43583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 44583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o low_read (file_info.buffer,file_system_info.block_size,file_info.global_block_offset); 45efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 46583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return (1); 47583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 48583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 49583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 50583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___inode (char *command_line) 51583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 52583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 53583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch ("settype ext2_inode"); 54583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 55583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 56583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___show (char *command_line) 57583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 58583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 59583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.display==HEX) 60583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_show_hex (); 61583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.display==TEXT) 62583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_show_text (); 63583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 64583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 65583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___nextblock (char *command_line) 66583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 67583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 68583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long block_offset=1; 69583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 70583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 71583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 72efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 73583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 74583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 75583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o block_offset*=atol (buffer); 76583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 77583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 78583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.block_num+block_offset >= file_info.blocks_count) { 79583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Block offset out of range\n");wrefresh (command_win); 80583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 81583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 82efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 83583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.block_num+=block_offset; 84583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.global_block_num=file_block_to_global_block (file_info.block_num,&file_info); 85583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.global_block_offset=file_info.global_block_num*file_system_info.block_size; 86583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.file_offset=file_info.block_num*file_system_info.block_size; 87583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 88583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o low_read (file_info.buffer,file_system_info.block_size,file_info.global_block_offset); 89583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 90583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,"show");dispatch (buffer); 91583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 92583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 93583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___next (char *command_line) 94583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 95583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 96583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o int offset=1; 97583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 98583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 99583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 100efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 101583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 102583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 103583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset*=atol (buffer); 104583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 105efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 106583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block+offset < file_system_info.block_size) { 107583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.offset_in_block+=offset; 108583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"show");dispatch (buffer); 109583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 110efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 111583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 112583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Offset out of block\n");refresh_command_win (); 113583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 114583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 115583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 116583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___offset (char *command_line) 117583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 118583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 119583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned long offset; 120583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 121583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 122583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 123efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 124583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 125583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 126583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset=atol (buffer); 127583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 128583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 129583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Argument not specified\n");refresh_command_win (); 130583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 131583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 132efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 133583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (offset < file_system_info.block_size) { 134583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.offset_in_block=offset; 135583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"show");dispatch (buffer); 136583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 137583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 138583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 139583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Offset out of block\n");refresh_command_win (); 140583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 141583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 142583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 143583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___prev (char *command_line) 144583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 145583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 146583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o int offset=1; 147583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 148583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 149583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 150efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 151583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 152583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 153583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset*=atol (buffer); 154583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 155efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 156583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block-offset >= 0) { 157583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.offset_in_block-=offset; 158583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"show");dispatch (buffer); 159583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 160efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 161583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 162583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Offset out of block\n");refresh_command_win (); 163583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 164583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 165583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 166583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___prevblock (char *command_line) 167583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 168583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 169583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long block_offset=1; 170583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 171583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 172583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 173efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 174583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 175583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 176583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o block_offset*=atol (buffer); 177583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 178583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 179583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.block_num-block_offset < 0) { 180583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Block offset out of range\n");wrefresh (command_win); 181583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 182583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 183efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 184583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.block_num-=block_offset; 185583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.global_block_num=file_block_to_global_block (file_info.block_num,&file_info); 186583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.global_block_offset=file_info.global_block_num*file_system_info.block_size; 187583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.file_offset=file_info.block_num*file_system_info.block_size; 188583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 189583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o low_read (file_info.buffer,file_system_info.block_size,file_info.global_block_offset); 190583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 191583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,"show");dispatch (buffer); 192583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 193583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 194583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___block (char *command_line) 195583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 196583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 197583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long block_offset=1; 198583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 199583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 200583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 201efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 202583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 203583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Invalid arguments\n");wrefresh (command_win); 204583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 205583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 206efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 207583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 208583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o block_offset=atol (buffer); 209583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 210583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (block_offset < 0 || block_offset >= file_info.blocks_count) { 211583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Block offset out of range\n");wrefresh (command_win); 212583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 213583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 214583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 215583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.block_num=block_offset; 216583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.global_block_num=file_block_to_global_block (file_info.block_num,&file_info); 217583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.global_block_offset=file_info.global_block_num*file_system_info.block_size; 218583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.file_offset=file_info.block_num*file_system_info.block_size; 219583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 220583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o low_read (file_info.buffer,file_system_info.block_size,file_info.global_block_offset); 221583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 222583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,"show");dispatch (buffer); 223583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 224583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 225583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___display (char *command_line) 226583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 227583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 228583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 229efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 230583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 231efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o if (*ptr==0) 232583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,"hex"); 233583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else 234583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 235efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 236583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcasecmp (buffer,"hex")==0) { 237583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Display set to hex\n");wrefresh (command_win); 238583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.display=HEX; 239583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"show");dispatch (buffer); 240583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 241efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 242583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else if (strcasecmp (buffer,"text")==0) { 243583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Display set to text\n");wrefresh (command_win); 244583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.display=TEXT; 245583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"show");dispatch (buffer); 246583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 247efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 248583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 249583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Invalid arguments\n");wrefresh (command_win); 250583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 251583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 252583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 253583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid file_show_hex (void) 254583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 255583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 256583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long offset=0,l,i; 257583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned char *ch_ptr; 258efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 259583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o /* device_offset and type_data points to the inode */ 260583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 261583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.line=0; 262efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 263583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wmove (show_pad,0,0); 264583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ch_ptr=file_info.buffer; 265583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (l=0;l<file_system_info.block_size/16;l++) { 266583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.file_offset+offset>file_info.file_length-1) break; 267583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%08ld : ",offset); 268583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<16;i++) { 269efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 270583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.file_offset+offset+i>file_info.file_length-1) { 271583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad," "); 272583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 273efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 274583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 275583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block==offset+i) 276583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_REVERSE); 277583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 278583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (ch_ptr [i]>=' ' && ch_ptr [i]<='z') 279583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%c",ch_ptr [i]); 280583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else 281583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"."); 282583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 283583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block==offset+i) 284583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_NORMAL); 285583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 286583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 287583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 288583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad," "); 289583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<16;i++) { 290583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.file_offset+offset+i>file_info.file_length-1) break; 291583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block==offset+i) 292583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_REVERSE); 293583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 294583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%02x",ch_ptr [i]); 295583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 296583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block==offset+i) { 297583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_NORMAL); 298583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.line=l-l % show_pad_info.display_lines; 299583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 300efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 301583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad," "); 302efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 303583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 304583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 305583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n"); 306583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset+=i; 307583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ch_ptr+=i; 308583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 309efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 310583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.max_line=l-1; 311efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 312583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad (); 313efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 314583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_status (); 315583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 316583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 317583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid file_show_text (void) 318583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 319583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 320583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long offset=0,last_offset,l=0,cols=0; 321583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned char *ch_ptr; 322efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 323583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o /* device_offset and type_data points to the inode */ 324583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 325583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.line=0; 326583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wmove (show_pad,0,0); 327583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ch_ptr=file_info.buffer; 328583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 329583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o last_offset=file_system_info.block_size-1; 330583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 331583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.file_offset+last_offset > file_info.file_length-1) 332583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o last_offset=file_info.file_length-1-file_info.file_offset; 333efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 334583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o while ( (offset <= last_offset) && l<SHOW_PAD_LINES) { 335583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 336583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (cols==SHOW_PAD_COLS-1) { 337583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n"); 338583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o l++;cols=0; 339583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 340efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 341583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 342583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block==offset) 343583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_REVERSE); 344583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 345583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ch_ptr >= ' ' && *ch_ptr <= 'z') 346583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%c",*ch_ptr); 347583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 348583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 349583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 350583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ch_ptr == 0xa) { 351583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n"); 352583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o l++;cols=0; 353583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 354583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 355583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else if (*ch_ptr == 0x9) 356583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad," "); 357efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 358583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else 359583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"."); 360583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 361583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 362583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block==offset) { 363583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_NORMAL); 364583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.line=l-l % show_pad_info.display_lines; 365583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 366efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 367583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 368583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset++;cols++;ch_ptr++; 369583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 370efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 371583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n"); 372583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.max_line=l; 373efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 374583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad (); 375efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 376efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o show_status (); 377583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 378583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 379583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid show_status (void) 380583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 381583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 382583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long inode_num; 383efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 384583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o werase (show_win);wmove (show_win,0,0); 385583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_win,"File contents. Block %ld. ",file_info.global_block_num); 386583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_win,"File block %ld of %ld. ",file_info.block_num,file_info.blocks_count-1); 387583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_win,"File Offset %ld of %ld.",file_info.file_offset,file_info.file_length-1); 388efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 389583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wmove (show_win,1,0); 390583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o inode_num=inode_offset_to_inode_num (file_info.inode_offset); 391583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_win,"File inode %ld. Indirection level %ld.",inode_num,file_info.level); 392583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 393583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_win (); 394583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 395583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 396583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___remember (char *command_line) 397583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 398583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 399583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o int found=0; 400583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long entry_num; 401583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 402583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o struct struct_descriptor *descriptor_ptr; 403efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 404583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 405efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 406583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 407583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Argument not specified\n");wrefresh (command_win); 408efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o return; 409583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 410efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 411583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 412583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 413583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o entry_num=remember_lifo.entries_count++; 414583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (entry_num>REMEMBER_COUNT-1) { 415583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o entry_num=0; 416583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o remember_lifo.entries_count--; 417583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 418efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 419583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o descriptor_ptr=first_type; 420583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o while (descriptor_ptr!=NULL && !found) { 421583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (descriptor_ptr->name,"ext2_inode")==0) 422583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o found=1; 423583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else 424583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o descriptor_ptr=descriptor_ptr->next; 425583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 426583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 427583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 428583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o remember_lifo.offset [entry_num]=device_offset; 429583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o remember_lifo.type [entry_num]=descriptor_ptr; 430583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (remember_lifo.name [entry_num],buffer); 431efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 432583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Object %s in Offset %ld remembered as %s\n",descriptor_ptr->name,device_offset,buffer); 433583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wrefresh (command_win); 434583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 435583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 436583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___set (char *command_line) 437583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 438583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 439583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned char tmp; 440583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80],*ch_ptr; 441583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o int mode=HEX; 442efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 443583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 444583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 445583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();return; 446583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 447583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 448583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 449583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 450583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcasecmp (buffer,"text")==0) { 451583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o mode=TEXT; 452583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,ptr); 453583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 454583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 455583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else if (strcasecmp (buffer,"hex")==0) { 456583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o mode=HEX; 457583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 458583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 459583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 460583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*buffer==0) { 461583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Data not specified\n");refresh_command_win ();return; 462583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 463583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 464583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (mode==HEX) { 465583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o do { 466583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o tmp=(unsigned char) strtol (buffer,NULL,16); 467583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.buffer [file_info.offset_in_block]=tmp; 468583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.offset_in_block++; 469583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 470583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block==file_system_info.block_size) { 471583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr) { 472583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Ending offset outside block, only partial string changed\n"); 473583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win (); 474583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 475583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.offset_in_block--; 476583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 477583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } while (*buffer) ; 478583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 479583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 480583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 481583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ch_ptr=buffer; 482583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o while (*ch_ptr) { 483583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o tmp=(unsigned char) *ch_ptr++; 484583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.buffer [file_info.offset_in_block]=tmp; 485583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.offset_in_block++; 486583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_info.offset_in_block==file_system_info.block_size) { 487583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ch_ptr) { 488583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Ending offset outside block, only partial string changed\n"); 489583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win (); 490583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 491583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info.offset_in_block--; 492583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 493583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 494583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 495efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 496583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,"show");dispatch (buffer); 497583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 498583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 499583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid type_file___writedata (char *command_line) 500583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 501583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 502583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o low_write (file_info.buffer,file_system_info.block_size,file_info.global_block_offset); 503583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 504583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 505583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 506583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'olong file_block_to_global_block (long file_block,struct struct_file_info *file_info_ptr) 507583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 508583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 509583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long last_direct,last_indirect,last_dindirect; 510efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 511583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o last_direct=EXT2_NDIR_BLOCKS-1; 512583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o last_indirect=last_direct+file_system_info.block_size/4; 513583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o last_dindirect=last_indirect+(file_system_info.block_size/4)*(file_system_info.block_size/4); 514583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 515583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_block <= last_direct) { 516583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info_ptr->level=0; 517583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return (file_info_ptr->inode_ptr->i_block [file_block]); 518583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 519efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 520583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_block <= last_indirect) { 521583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info_ptr->level=1; 522583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_block=file_block-last_direct-1; 523583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return (return_indirect (file_info_ptr->inode_ptr->i_block [EXT2_IND_BLOCK],file_block)); 524583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 525583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 526583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (file_block <= last_dindirect) { 527583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info_ptr->level=2; 528583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_block=file_block-last_indirect-1; 529583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return (return_dindirect (file_info_ptr->inode_ptr->i_block [EXT2_DIND_BLOCK],file_block)); 530583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 531583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 532583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_info_ptr->level=3; 533583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o file_block=file_block-last_dindirect-1; 534583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return (return_tindirect (file_info_ptr->inode_ptr->i_block [EXT2_TIND_BLOCK],file_block)); 535583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 536583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 537583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'olong return_indirect (long table_block,long block_num) 538583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 539583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 540583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long block_table [EXT2_MAX_BLOCK_SIZE/4]; 541efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 542583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o low_read ((char *) block_table,file_system_info.block_size,table_block*file_system_info.block_size); 543efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o return (block_table [block_num]); 544583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 545583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 546583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'olong return_dindirect (long table_block,long block_num) 547583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 548583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 549583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long f_indirect; 550efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 551583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o f_indirect=block_num/(file_system_info.block_size/4); 552583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o f_indirect=return_indirect (table_block,f_indirect); 553583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return (return_indirect (f_indirect,block_num%(file_system_info.block_size/4))); 554583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 555583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 556583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'olong return_tindirect (long table_block,long block_num) 557583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 558583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 559583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long s_indirect; 560efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 561583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o s_indirect=block_num/((file_system_info.block_size/4)*(file_system_info.block_size/4)); 562583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o s_indirect=return_indirect (table_block,s_indirect); 563583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return (return_dindirect (s_indirect,block_num%((file_system_info.block_size/4)*(file_system_info.block_size/4)))); 564583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 565