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