1583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o/* 2583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 3583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o/usr/src/ext2ed/general_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'oGeneral user commands 9583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o--------------------- 10583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 11583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oFirst written on: April 9 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" 227c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o#include "../version.h" 23583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 24583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid help (char *command_line) 25583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 26583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 27583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o int i,max_line=0; 28583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char argument [80],*ptr; 29583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 30583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o werase (show_pad);wmove (show_pad,0,0); 31583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 32583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,argument); 33583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 34583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 35583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,argument); 36efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o if (*argument!=0) { 37583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o detailed_help (argument); 38583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 39583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 40583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 41583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 42583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type!=NULL) { 43efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 44583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"Type %s specific commands:\n",current_type->name);max_line++; 45efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 46583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type->type_commands.last_command==-1) { 47583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\nnone\n");max_line+=2; 48583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 49583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else 50583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<=current_type->type_commands.last_command;i++) { 51583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (i%5==0) { 52583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n");max_line++; 53583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 54583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%-13s",current_type->type_commands.names [i]); 55583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (i%5!=4) 56efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o wprintw (show_pad,"; "); 57583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 58efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 59583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n\n");max_line+=2; 60efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o } 61583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 62583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (ext2_commands.last_command != -1) { 63583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"ext2 filesystem general commands: \n");max_line++; 64583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<=ext2_commands.last_command;i++) { 65583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (i%5==0) { 66583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n");max_line++; 67583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 68583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%-13s",ext2_commands.names [i]); 69583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (i%5!=4) 70efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o wprintw (show_pad,"; "); 71583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 72583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 73583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n\n");max_line+=2; 74583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 75583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 76583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"General commands: \n"); 77efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 78583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<=general_commands.last_command;i++) { 79583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (i%5==0) { 80583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n");max_line++; 81583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 82583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%-13s",general_commands.names [i]); 83583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (i%5!=4) 84efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o wprintw (show_pad,"; "); 85583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 86efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 87583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n\n");max_line+=2; 88efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 897c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (show_pad,"EXT2ED ver %s (%s)\n",E2FSPROGS_VERSION, E2FSPROGS_DATE); 90583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"Copyright (C) 1995 Gadi Oxman\n"); 910f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o wprintw (show_pad,"Reviewed 2001 Christian Bac\n"); 925e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o wprintw (show_pad,"Modified and enchanced by Theodore Ts'o, 2002\n"); 93583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"EXT2ED is hereby placed under the terms of the GNU General Public License.\n\n"); 94583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"EXT2ED was programmed as a student project in the software laboratory\n"); 95583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"of the faculty of electrical engineering in the\n"); 96583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"Technion - Israel Institute of Technology\n"); 97583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"with the guide of Avner Lottem and Dr. Ilana David.\n"); 98583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 995e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o max_line+=10; 100efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 101583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.line=0;show_pad_info.max_line=max_line; 102583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 103583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o werase (show_win);wmove (show_win,0,0); 104583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_win,"EXT2ED help"); 105efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 106583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_win (); 107583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad (); 108583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 109583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 110583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid detailed_help (char *text) 111583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 112583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 113583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o int i; 114efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 115583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type != NULL) 116583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<=current_type->type_commands.last_command;i++) { 117583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (current_type->type_commands.names [i],text)==0) { 118583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%s - %s\n",text,current_type->type_commands.descriptions [i]); 119583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad ();return; 120583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 121583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 122583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 123583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<=ext2_commands.last_command;i++) { 124583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (ext2_commands.names [i],text)==0) { 125583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%s - %s\n",text,ext2_commands.descriptions [i]); 126583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad ();return; 127583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 128583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 129583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 130583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<=general_commands.last_command;i++) { 131583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (general_commands.names [i],text)==0) { 132583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%s - %s\n",text,general_commands.descriptions [i]); 133583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad ();return; 134583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 135583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 136583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 137583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp ("quit",text)==0) { 138583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"quit - Exists EXT2ED"); 139583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad ();return; 140583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 141583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 142583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"Error - Command %s not aviable now\n",text); 143583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad ();return; 144583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 145583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 146583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 147583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 148583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid set_device (char *command_line) 149583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 150583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 151583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,new_device [80]; 152efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 153583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,new_device); 154583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 155583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Device name not specified\n"); 156583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win ();return; 157583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 158efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o parse_word (ptr,new_device); 159583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o check_mounted (new_device); 160583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (mounted && !AllowMountedRead) { 161583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Filesystem is mounted, aborting\n"); 162583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"You may wish to use the AllowMountedRead on configuration option\n"); 163583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win ();return; 164583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 165efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 166583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (mounted && AllowMountedRead) { 167583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Warning - Filesystem is mounted. Displayed data may be unreliable.\n"); 168583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win (); 169583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 170583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 171583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_handle!=NULL) 172583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o fclose (device_handle); 173efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 174583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if ( (device_handle=fopen (new_device,"rb"))==NULL) { 175583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Can not open device %s\n",new_device);refresh_command_win (); 176583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 177583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 178583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 179583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (device_name,new_device); 180583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o write_access=0; /* Write access disabled */ 181583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o current_type=NULL; /* There is no type now */ 182583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o remember_lifo.entries_count=0; /* Empty Object memory */ 183583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o free_user_commands (&ext2_commands); /* Free filesystem specific objects */ 184583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o free_struct_descriptors (); 185583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (!set_file_system_info ()) { /* Error while getting info --> abort */ 186583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o free_user_commands (&ext2_commands); 187583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o free_struct_descriptors (); 188583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o fclose (device_handle); 189583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o device_handle=NULL; /* Notice that our device is still not set up */ 190583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o device_offset=-1; 191583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 192583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 193583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*AlternateDescriptors) /* Check if user defined objects exist */ 194583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o set_struct_descriptors (AlternateDescriptors); 195583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch ("setoffset 0"); 196583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch ("help"); /* Show help screen */ 197583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Device changed to %s",device_name);refresh_command_win (); 198583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 199583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 200583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 201583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid set_offset (char *command_line) 202583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 203583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 204583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long mult=1; 205583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long new_offset; 206583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,new_offset_buffer [80]; 207efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 208583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_handle==NULL) { 209583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No device opened\n");refresh_command_win (); 210583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 211583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 212efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 213583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,new_offset_buffer); 214efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 215583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 216583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No argument specified\n");refresh_command_win (); 217583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 218583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 219583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 220583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,new_offset_buffer); 221583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 222583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (new_offset_buffer,"block")==0) { 223583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o mult=file_system_info.block_size; 224583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,new_offset_buffer); 225583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 226583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 227583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (new_offset_buffer,"type")==0) { 228583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type==NULL) { 229583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No type set\n");refresh_command_win (); 230583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 231583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 232583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 233583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o mult=current_type->length; 234583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,new_offset_buffer); 235583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 236583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 237583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*new_offset_buffer==0) { 238583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No offset specified\n");refresh_command_win (); 239583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 240583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 241583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 242583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (new_offset_buffer [0]=='+') { 243583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_offset==-1) { 244583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Select a fixed offset first\n");refresh_command_win (); 245583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 246583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 247583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o new_offset=device_offset+atol (new_offset_buffer+1)*mult; 248583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 249efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 250583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else if (new_offset_buffer [0]=='-') { 251583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_offset==-1) { 252583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Select a fixed offset first\n");refresh_command_win (); 253583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 254583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 255583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o new_offset=device_offset-atol (new_offset_buffer+1)*mult; 256583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (new_offset<0) new_offset=0; 257583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 258efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 259efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o else 260583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o new_offset=atol (new_offset_buffer)*mult; 261efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 262583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if ( (fseek (device_handle,new_offset,SEEK_SET))==-1) { 263583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Failed to seek to offset %ld in device %s\n",new_offset,device_name); 264583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win (); 265583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 266583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o }; 267583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o device_offset=new_offset; 268583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Device offset changed to %ld\n",device_offset);refresh_command_win (); 269583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o load_type_data (); 270583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.offset_in_block=0; 271583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 272583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 2737c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'ovoid set_int(short len, void *ptr, char *name, char *value) 2747c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o{ 2757c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o char *char_ptr; 2767c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o short *short_ptr; 2777c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o long *long_ptr; 2787c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o long v; 2797c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o char *tmp; 2807c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 2817c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o v = strtol(value, &tmp, 0); 2827c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o if (*tmp) { 2837c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw( command_win, "Bad value - %s\n", value); 2847c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o return; 2857c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 2867c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o switch (len) { 2877c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 1: 2887c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o char_ptr = (char *) ptr; 2897c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o *char_ptr = v; 2907c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 2917c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 2: 2927c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o short_ptr = (short *) ptr; 2937c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o *short_ptr = v; 2947c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 2957c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 4: 2967c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o long_ptr = (long *) ptr; 2977c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o *long_ptr = v; 2987c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 2997c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o default: 3007c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (command_win, 3017c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o "set_int: unsupported length: %d\n", len); 3027c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o return; 3037c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 3047c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (command_win, "Variable %s set to %s\n", 3057c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o name, value); 3067c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o} 3077c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 3087c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'ovoid set_uint(short len, void *ptr, char *name, char *value) 3097c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o{ 3107c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o unsigned char *char_ptr; 3117c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o unsigned short *short_ptr; 3127c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o unsigned long *long_ptr; 3137c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o unsigned long v; 3147c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o char *tmp; 3157c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 3167c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o v = strtoul(value, &tmp, 0); 3177c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o if (*tmp) { 3187c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw( command_win, "Bad value - %s\n", value); 3197c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o return; 3207c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 3217c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o switch (len) { 3227c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 1: 3237c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o char_ptr = (unsigned char *) ptr; 3247c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o *char_ptr = v; 3257c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 3267c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 2: 3277c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o short_ptr = (unsigned short *) ptr; 3287c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o *short_ptr = v; 3297c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 3307c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 4: 3317c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o long_ptr = (unsigned long *) ptr; 3327c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o *long_ptr = v; 3337c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 3347c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o default: 3357c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (command_win, 3367c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o "set_uint: unsupported length: %d\n", len); 3377c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o return; 3387c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 3397c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (command_win, "Variable %s set to %s\n", 3407c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o name, value); 3417c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o} 3427c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 3437c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'ovoid set_char(short len, void *ptr, char *name, char *value) 3447c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o{ 3457c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o if (strlen(value)+1 > len) { 3467c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw( command_win, "Value %s too big for field\n", 3477c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o name, len); 3487c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o return; 3497c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 3507c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o memset(ptr, 0, len); 3517c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o strcpy((char *) ptr, value); 3527c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (command_win, "Variable %s set to %s\n", 3537c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o name, value); 3547c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o} 3557c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 3567c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 357583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid set (char *command_line) 358583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 359583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 360583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned short *int_ptr; 361583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned char *char_ptr; 362583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned long *long_ptr,offset=0; 3637c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o int i,len, found=0; 364583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80],variable [80],value [80]; 365efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 366583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_handle==NULL) { 367583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No device opened\n");refresh_command_win (); 368583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 369583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 370583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 371583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type==NULL) { 372583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o hex_set (command_line); 373583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 374583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 375583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 376583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 377583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (ptr==NULL || *ptr==0) { 378583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Missing arguments\n");refresh_command_win (); 379583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 380583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 381583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o parse_word (ptr,buffer); 382583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=strchr (buffer,'='); 383583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (ptr==NULL) { 384583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Bad syntax\n");refresh_command_win ();return; 385583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 386583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strncpy (variable,buffer,ptr-buffer);variable [ptr-buffer]=0; 387583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (value,++ptr); 388583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 389583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type==NULL) { 390583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Sorry, not yet supported\n");refresh_command_win ();return; 391583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 392efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 393583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<current_type->fields_num && !found;i++) { 394583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (current_type->field_names [i],variable)==0) { 395583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o found=1; 396583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=type_data.u.buffer+offset; 3977c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o len = current_type->field_lengths [i]; 3987c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o switch (current_type->field_types [i]) { 3997c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case FIELD_TYPE_INT: 4007c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o set_int(len, ptr, variable, value); 4017c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 4027c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case FIELD_TYPE_UINT: 4037c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o set_uint(len, ptr, variable, value); 4047c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 4057c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case FIELD_TYPE_CHAR: 4067c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o set_char(len, ptr, variable, value); 4077c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 4087c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o default: 4097c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (command_win, 4107c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o "set: unhandled type %d\n", 4117c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o current_type->field_types [i]); 4127c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 413583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 4147c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o refresh_command_win (); 415583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 416583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset+=current_type->field_lengths [i]; 417583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 418583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (found) 419583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch ("show"); 420583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 421583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Variable %s not found\n",variable); 422583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win (); 423583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 424583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 425583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 426583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid hex_set (char *command_line) 427583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 428583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 429583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned char tmp; 430583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80],*ch_ptr; 431583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o int mode=HEX; 432efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 433583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 434583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 435583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();return; 436583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 437583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 438583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 439583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 440583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcasecmp (buffer,"text")==0) { 441583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o mode=TEXT; 442583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,ptr); 443583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 444583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 445583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else if (strcasecmp (buffer,"hex")==0) { 446583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o mode=HEX; 447583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 448583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 449583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 450583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*buffer==0) { 451583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Data not specified\n");refresh_command_win ();return; 452583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 453583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 454583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (mode==HEX) { 455583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o do { 456583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o tmp=(unsigned char) strtol (buffer,NULL,16); 457583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.u.buffer [type_data.offset_in_block]=tmp; 458583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.offset_in_block++; 459583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 460583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (type_data.offset_in_block==file_system_info.block_size) { 461583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr) { 462583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Ending offset outside block, only partial string changed\n"); 463583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win (); 464583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 465583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.offset_in_block--; 466583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 467583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } while (*buffer) ; 468583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 469583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 470583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 471583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ch_ptr=buffer; 472583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o while (*ch_ptr) { 473583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o tmp=(unsigned char) *ch_ptr++; 474583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.u.buffer [type_data.offset_in_block]=tmp; 475583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.offset_in_block++; 476583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (type_data.offset_in_block==file_system_info.block_size) { 477583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ch_ptr) { 478583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Ending offset outside block, only partial string changed\n"); 479583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win (); 480583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 481583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.offset_in_block--; 482583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 483583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 484583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 485efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 486583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (buffer,"show");dispatch (buffer); 487583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 488583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 489583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 490583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 491583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid set_type (char *command_line) 492583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 493583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 494583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o struct struct_descriptor *descriptor_ptr; 495583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80],tmp_buffer [80]; 496583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o short found=0; 497583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 498583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (!load_type_data ()) 499583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 500583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 501583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 502583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o parse_word (ptr,buffer); 503efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 504583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (buffer,"none")==0 || strcmp (buffer,"hex")==0) { 505583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Data will be shown as hex dump\n");refresh_command_win (); 506583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o current_type=NULL; 507583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (tmp_buffer,"show");dispatch (tmp_buffer); 508583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 509583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 510efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 511583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o descriptor_ptr=first_type; 512583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o while (descriptor_ptr!=NULL && !found) { 513583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (descriptor_ptr->name,buffer)==0) 514583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o found=1; 515583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else 516583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o descriptor_ptr=descriptor_ptr->next; 517583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 518583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (found) { 519583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Structure type set to %s\n",buffer);refresh_command_win (); 520583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o current_type=descriptor_ptr; 521583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (tmp_buffer,"show");dispatch (tmp_buffer); 522583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 523583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 524583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - %s is not a valid type\n",buffer);refresh_command_win (); 525583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 526efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o} 527583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 5287c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'ovoid show_int(short len, void *ptr) 5297c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o{ 5307c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o long temp; 5317c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o char *format; 5327c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 5337c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o switch (len) { 5347c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 1: 5357c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o temp = *((char *) ptr); 5367c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o format = "%3d (0x%02x)\n"; 5377c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 5387c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 2: 5397c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o temp = *((short *) ptr); 5407c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o format = "%d (0x%x)\n"; 5417c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 5427c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 4: 5437c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o temp = *((long *) ptr); 5447c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o format = "%d\n"; 5457c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 5467c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o default: 5477c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (show_pad, "unimplemented\n"); 5487c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o return; 5497c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 5507c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw(show_pad, format, temp, temp); 5517c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o} 5527c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 5537c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'ovoid show_uint(short len, void *ptr) 5547c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o{ 5557c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o unsigned long temp; 5567c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o char *format; 5577c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 5587c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o switch (len) { 5597c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 1: 5607c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o temp = *((unsigned char *) ptr); 5617c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o temp = temp & 0xFF; 5627c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o format = "%3u (0x%02x)\n"; 5637c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 5647c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 2: 5657c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o temp = *((unsigned short *) ptr); 5667c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o temp = temp & 0xFFFF; 5677c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o format = "%u (0x%x)\n"; 5687c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 5697c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case 4: 5707c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o temp = (unsigned long) *((unsigned long *) ptr); 5717c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o format = "%u\n"; 5727c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 5737c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o default: 5747c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (show_pad, "unimplemented\n"); 5757c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o return; 5767c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 5777c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw(show_pad, format, temp, temp); 5787c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o} 5797c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 5807c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'ovoid show_char(short len, void *ptr) 5817c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o{ 5827c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o unsigned char *cp = (unsigned char *) ptr; 5837c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o unsigned char ch; 5847c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o int i,j; 5857c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 5867c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw(show_pad, "\""); 587efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 5887c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o for (i=0; i < len; i++) { 5897c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o ch = *cp++; 5907c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o if (ch == 0) { 5917c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o for (j=i+1; j < len; j++) 5927c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o if (cp[j-i]) 5937c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 5947c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o if (j == len) 5957c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 5967c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 5977c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o if (ch > 128) { 5987c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw(show_pad, "M-"); 5997c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o ch -= 128; 6007c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 6017c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o if ((ch < 32) || (ch == 0x7f)) { 6027c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw(show_pad, "^"); 6037c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o ch ^= 0x40; /* ^@, ^A, ^B; ^? for DEL */ 6047c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 6057c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw(show_pad, "%c", ch); 6067c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o } 607efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 6087c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw(show_pad, "\"\n"); 6097c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o} 6107c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o 611583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 612efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 613583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid show (char *command_line) 614583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 615583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 6167c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o unsigned int i,l,len,temp_int; 617efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o unsigned long offset=0,temp_long; 618583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o unsigned char temp_char,*ch_ptr; 619583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o void *ptr; 620583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 621583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_handle==NULL) 622583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 623583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 624583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.line=0; 625efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 626583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type==NULL) { 627583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wmove (show_pad,0,0); 628583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ch_ptr=type_data.u.buffer; 629583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (l=0;l<file_system_info.block_size/16;l++) { 630583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%08ld : ",offset); 631583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<16;i++) { 632583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (type_data.offset_in_block==offset+i) 633583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_REVERSE); 634efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 635583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (ch_ptr [i]>=' ' && ch_ptr [i]<='z') 636583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%c",ch_ptr [i]); 637583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else 638583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"."); 639583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (type_data.offset_in_block==offset+i) 640583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_NORMAL); 641583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 642583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad," "); 643583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<16;i++) { 644583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (type_data.offset_in_block==offset+i) 645583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_REVERSE); 646efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 647583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%02x",ch_ptr [i]); 648583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 649583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (type_data.offset_in_block==offset+i) { 650583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wattrset (show_pad,A_NORMAL); 651583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.line=l-l % show_pad_info.display_lines; 652583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 653583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 654583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad," "); 655583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 656583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"\n"); 657583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset+=16; 658583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ch_ptr+=16; 659583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 660583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.max_line=l-1;show_pad_info.max_col=COLS-1; 661583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad ();show_info (); 662583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 663583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 664583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wmove (show_pad,0,0);l=0; 665583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (i=0;i<current_type->fields_num;i++) { 666583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (show_pad,"%-20s = ",current_type->field_names [i]); 667583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=type_data.u.buffer+offset; 6687c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o len = current_type->field_lengths[i]; 6697c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o switch (current_type->field_types[i]) { 6707c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case FIELD_TYPE_INT: 6717c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o show_int(len, ptr); 6727c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 6737c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case FIELD_TYPE_UINT: 6747c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o show_uint(len, ptr); 6757c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 6767c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o case FIELD_TYPE_CHAR: 6777c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o show_char(len, ptr); 6787c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 6797c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o default: 6807c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o wprintw (show_pad, "unimplemented\n"); 6817c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o break; 682583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 6837c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o offset+=len; 6847c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o l++; 685583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 686583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o current_type->length=offset; 687583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.max_line=l-1; 688583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad ();show_info (); 689583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 690583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 691583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 692583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid next (char *command_line) 693583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 694583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 695583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long offset=1; 696583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 697583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 698583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 699efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 700583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 701583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 702583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset*=atol (buffer); 703583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 704efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 705583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type!=NULL) { 706583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"setoffset type +%ld",offset); 707583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch (buffer); 708583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 709583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 710583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 711583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (type_data.offset_in_block+offset < file_system_info.block_size) { 712583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.offset_in_block+=offset; 713583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"show");dispatch (buffer); 714583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 715efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 716583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 717583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Offset out of block\n");refresh_command_win (); 718583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 719583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 720583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 721583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid prev (char *command_line) 722583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 723583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 724583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long offset=1; 725583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 726583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 727583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 728efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 729583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr!=0) { 730583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 731583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o offset*=atol (buffer); 732583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 733efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 734583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type!=NULL) { 735583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"setoffset type -%ld",offset); 736583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch (buffer); 737583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 738583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 739583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 740583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (type_data.offset_in_block-offset >= 0) { 741583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o type_data.offset_in_block-=offset; 742583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"show");dispatch (buffer); 743583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 744efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 745583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 746583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Offset out of block\n");refresh_command_win (); 747583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 748583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 749583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 750efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'ovoid pgdn (char *commnad_line) 751583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 752583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 753583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.line+=show_pad_info.display_lines; 754583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad ();refresh_show_win (); 755583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 756583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 757583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid pgup (char *command_line) 758583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 759583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 760583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o show_pad_info.line-=show_pad_info.display_lines; 761583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_show_pad ();refresh_show_win (); 762583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 763583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 764583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid redraw (char *command_line) 765583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 766583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 767583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o redraw_all (); 768583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o dispatch ("show"); 769583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 770583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 771583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid remember (char *command_line) 772583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 773583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 774583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long entry_num; 775583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 776efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 777583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_handle==NULL) { 778583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No device opened\n");refresh_command_win (); 779583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 780583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 781583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 782583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 783efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 784583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 785583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Argument not specified\n");refresh_command_win (); 786efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o return; 787583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 788efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 789583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 790583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 791583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o entry_num=remember_lifo.entries_count++; 792583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (entry_num>REMEMBER_COUNT-1) { 793583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o entry_num=0; 794583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o remember_lifo.entries_count--; 795583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 796efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 797583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o remember_lifo.offset [entry_num]=device_offset; 798583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o remember_lifo.type [entry_num]=current_type; 799583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o strcpy (remember_lifo.name [entry_num],buffer); 800efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 801583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (current_type!=NULL) 802583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Object %s in Offset %ld remembered as %s\n",current_type->name,device_offset,buffer); 803583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else 804583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Offset %ld remembered as %s\n",device_offset,buffer); 805efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 806583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win (); 807583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 808583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 809583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid recall (char *command_line) 810583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 811583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 812583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char *ptr,buffer [80]; 813583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o long entry_num; 814583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 815583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_handle==NULL) { 816583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No device opened\n");refresh_command_win (); 817583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 818583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 819583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 820583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (command_line,buffer); 821583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 822583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (*ptr==0) { 823583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Argument not specified\n");refresh_command_win (); 824efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o return; 825583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 826583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 827583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ptr=parse_word (ptr,buffer); 828583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 829efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 830583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o for (entry_num=remember_lifo.entries_count-1;entry_num>=0;entry_num--) { 831583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (strcmp (remember_lifo.name [entry_num],buffer)==0) 832efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o break; 833583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 834efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 835583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (entry_num==-1) { 836583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Can not recall %s\n",buffer);refresh_command_win (); 837583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 838583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 839583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 840583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o sprintf (buffer,"setoffset %ld",remember_lifo.offset [entry_num]);dispatch (buffer); 841583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (remember_lifo.type [entry_num] != NULL) { 842efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o sprintf (buffer,"settype %s",remember_lifo.type [entry_num]->name);dispatch (buffer); 843583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 844583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 845583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o else { 846efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o sprintf (buffer,"settype none");dispatch (buffer); 847583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 848efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 849583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Object %s in Offset %ld recalled\n",current_type->name,device_offset); 850583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o refresh_command_win (); 851583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 852583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 853583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid enable_write (char *command_line) 854583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 855583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 856583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o FILE *fp; 857583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 858583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_handle==NULL) { 859583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No device opened\n");refresh_command_win (); 860583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 861583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 862583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 863583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (!AllowChanges) { 864583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Sorry, write access is not allowed\n"); 865583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 866583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 867efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 868583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (mounted) { 869583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Filesystem is mounted\n"); 870efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o return; 871583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 872efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 873583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if ( (fp=fopen (device_name,"r+b"))==NULL) { 874583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Can not open device %s for reading and writing\n",device_name);refresh_command_win (); 875583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 876583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 877583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o fclose (device_handle); 878583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o device_handle=fp;write_access=1; 879583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Write access enabled - Be careful\n");refresh_command_win (); 880583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 881583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 882583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid disable_write (char *command_line) 883583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 884583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 885583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o FILE *fp; 886583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 887583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if (device_handle==NULL) { 888583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - No device opened\n");refresh_command_win (); 889583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 890583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 891583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 892583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o if ( (fp=fopen (device_name,"rb"))==NULL) { 893583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Error - Can not open device %s\n",device_name);refresh_command_win (); 894583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o return; 895583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o } 896efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 897583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o fclose (device_handle); 898583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o device_handle=fp;write_access=0; 899583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o wprintw (command_win,"Write access disabled\n");refresh_command_win (); 900583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 901583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 902583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid write_data (char *command_line) 903583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 904583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 905583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o write_type_data (); 906583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 907