xref: /aosp_15_r20/external/e2fsprogs/ext2ed/general_com.c (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
1*6a54128fSAndroid Build Coastguard Worker /*
2*6a54128fSAndroid Build Coastguard Worker 
3*6a54128fSAndroid Build Coastguard Worker /usr/src/ext2ed/general_com.c
4*6a54128fSAndroid Build Coastguard Worker 
5*6a54128fSAndroid Build Coastguard Worker A part of the extended file system 2 disk editor.
6*6a54128fSAndroid Build Coastguard Worker 
7*6a54128fSAndroid Build Coastguard Worker ---------------------
8*6a54128fSAndroid Build Coastguard Worker General user commands
9*6a54128fSAndroid Build Coastguard Worker ---------------------
10*6a54128fSAndroid Build Coastguard Worker 
11*6a54128fSAndroid Build Coastguard Worker First written on: April 9 1995
12*6a54128fSAndroid Build Coastguard Worker 
13*6a54128fSAndroid Build Coastguard Worker Copyright (C) 1995 Gadi Oxman
14*6a54128fSAndroid Build Coastguard Worker 
15*6a54128fSAndroid Build Coastguard Worker */
16*6a54128fSAndroid Build Coastguard Worker 
17*6a54128fSAndroid Build Coastguard Worker #include "config.h"
18*6a54128fSAndroid Build Coastguard Worker #include <stdio.h>
19*6a54128fSAndroid Build Coastguard Worker #include <stdlib.h>
20*6a54128fSAndroid Build Coastguard Worker #include <string.h>
21*6a54128fSAndroid Build Coastguard Worker 
22*6a54128fSAndroid Build Coastguard Worker #include "ext2ed.h"
23*6a54128fSAndroid Build Coastguard Worker #include "../version.h"
24*6a54128fSAndroid Build Coastguard Worker 
help(char * command_line)25*6a54128fSAndroid Build Coastguard Worker void help (char *command_line)
26*6a54128fSAndroid Build Coastguard Worker 
27*6a54128fSAndroid Build Coastguard Worker {
28*6a54128fSAndroid Build Coastguard Worker 	int i,max_line=0;
29*6a54128fSAndroid Build Coastguard Worker 	char argument [80],*ptr;
30*6a54128fSAndroid Build Coastguard Worker 
31*6a54128fSAndroid Build Coastguard Worker 	werase (show_pad);wmove (show_pad,0,0);
32*6a54128fSAndroid Build Coastguard Worker 
33*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,argument);
34*6a54128fSAndroid Build Coastguard Worker 
35*6a54128fSAndroid Build Coastguard Worker 	if (*ptr!=0) {
36*6a54128fSAndroid Build Coastguard Worker 		 ptr=parse_word (ptr,argument);
37*6a54128fSAndroid Build Coastguard Worker 		 if (*argument!=0) {
38*6a54128fSAndroid Build Coastguard Worker 			 detailed_help (argument);
39*6a54128fSAndroid Build Coastguard Worker 			 return;
40*6a54128fSAndroid Build Coastguard Worker 		}
41*6a54128fSAndroid Build Coastguard Worker 	}
42*6a54128fSAndroid Build Coastguard Worker 
43*6a54128fSAndroid Build Coastguard Worker 	if (current_type!=NULL) {
44*6a54128fSAndroid Build Coastguard Worker 
45*6a54128fSAndroid Build Coastguard Worker 		wprintw (show_pad,"Type %s specific commands:\n",current_type->name);max_line++;
46*6a54128fSAndroid Build Coastguard Worker 
47*6a54128fSAndroid Build Coastguard Worker 		if (current_type->type_commands.last_command==-1) {
48*6a54128fSAndroid Build Coastguard Worker 			wprintw (show_pad,"\nnone\n");max_line+=2;
49*6a54128fSAndroid Build Coastguard Worker 		}
50*6a54128fSAndroid Build Coastguard Worker 		else
51*6a54128fSAndroid Build Coastguard Worker 			for (i=0;i<=current_type->type_commands.last_command;i++) {
52*6a54128fSAndroid Build Coastguard Worker 				if (i%5==0) {
53*6a54128fSAndroid Build Coastguard Worker 					wprintw (show_pad,"\n");max_line++;
54*6a54128fSAndroid Build Coastguard Worker 				}
55*6a54128fSAndroid Build Coastguard Worker 				wprintw (show_pad,"%-13s",current_type->type_commands.names [i]);
56*6a54128fSAndroid Build Coastguard Worker 				if (i%5!=4)
57*6a54128fSAndroid Build Coastguard Worker 					wprintw (show_pad,";  ");
58*6a54128fSAndroid Build Coastguard Worker 			}
59*6a54128fSAndroid Build Coastguard Worker 
60*6a54128fSAndroid Build Coastguard Worker 		wprintw (show_pad,"\n\n");max_line+=2;
61*6a54128fSAndroid Build Coastguard Worker 	}
62*6a54128fSAndroid Build Coastguard Worker 
63*6a54128fSAndroid Build Coastguard Worker 	if (ext2_commands.last_command != -1) {
64*6a54128fSAndroid Build Coastguard Worker 		wprintw (show_pad,"ext2 filesystem general commands: \n");max_line++;
65*6a54128fSAndroid Build Coastguard Worker 		for (i=0;i<=ext2_commands.last_command;i++) {
66*6a54128fSAndroid Build Coastguard Worker 			if (i%5==0) {
67*6a54128fSAndroid Build Coastguard Worker 				wprintw (show_pad,"\n");max_line++;
68*6a54128fSAndroid Build Coastguard Worker 			}
69*6a54128fSAndroid Build Coastguard Worker 			wprintw (show_pad,"%-13s",ext2_commands.names [i]);
70*6a54128fSAndroid Build Coastguard Worker 			if (i%5!=4)
71*6a54128fSAndroid Build Coastguard Worker 				wprintw (show_pad,";  ");
72*6a54128fSAndroid Build Coastguard Worker 
73*6a54128fSAndroid Build Coastguard Worker 		}
74*6a54128fSAndroid Build Coastguard Worker 		wprintw (show_pad,"\n\n");max_line+=2;
75*6a54128fSAndroid Build Coastguard Worker 	}
76*6a54128fSAndroid Build Coastguard Worker 
77*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"General commands: \n");
78*6a54128fSAndroid Build Coastguard Worker 
79*6a54128fSAndroid Build Coastguard Worker 	for (i=0;i<=general_commands.last_command;i++) {
80*6a54128fSAndroid Build Coastguard Worker 		if (i%5==0) {
81*6a54128fSAndroid Build Coastguard Worker 			wprintw (show_pad,"\n");max_line++;
82*6a54128fSAndroid Build Coastguard Worker 		}
83*6a54128fSAndroid Build Coastguard Worker 		wprintw (show_pad,"%-13s",general_commands.names [i]);
84*6a54128fSAndroid Build Coastguard Worker 		if (i%5!=4)
85*6a54128fSAndroid Build Coastguard Worker 			wprintw (show_pad,";  ");
86*6a54128fSAndroid Build Coastguard Worker 	}
87*6a54128fSAndroid Build Coastguard Worker 
88*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"\n\n");max_line+=2;
89*6a54128fSAndroid Build Coastguard Worker 
90*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"EXT2ED ver %s (%s)\n",E2FSPROGS_VERSION, E2FSPROGS_DATE);
91*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"Copyright (C) 1995 Gadi Oxman\n");
92*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"Reviewed 2001 Christian Bac\n");
93*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"Modified and enhanced by Theodore Ts'o, 2002\n");
94*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"EXT2ED is hereby placed under the terms of the GNU General Public License.\n\n");
95*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"EXT2ED was programmed as a student project in the software laboratory\n");
96*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"of the faculty of electrical engineering in the\n");
97*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"Technion - Israel Institute of Technology\n");
98*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"with the guide of Avner Lottem and Dr. Ilana David.\n");
99*6a54128fSAndroid Build Coastguard Worker 
100*6a54128fSAndroid Build Coastguard Worker 	max_line+=10;
101*6a54128fSAndroid Build Coastguard Worker 
102*6a54128fSAndroid Build Coastguard Worker 	show_pad_info.line=0;show_pad_info.max_line=max_line;
103*6a54128fSAndroid Build Coastguard Worker 
104*6a54128fSAndroid Build Coastguard Worker 	werase (show_win);wmove (show_win,0,0);
105*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_win,"EXT2ED help");
106*6a54128fSAndroid Build Coastguard Worker 
107*6a54128fSAndroid Build Coastguard Worker 	refresh_show_win ();
108*6a54128fSAndroid Build Coastguard Worker 	refresh_show_pad ();
109*6a54128fSAndroid Build Coastguard Worker }
110*6a54128fSAndroid Build Coastguard Worker 
detailed_help(char * text)111*6a54128fSAndroid Build Coastguard Worker void detailed_help (char *text)
112*6a54128fSAndroid Build Coastguard Worker 
113*6a54128fSAndroid Build Coastguard Worker {
114*6a54128fSAndroid Build Coastguard Worker 	int i;
115*6a54128fSAndroid Build Coastguard Worker 
116*6a54128fSAndroid Build Coastguard Worker 	if (current_type != NULL)
117*6a54128fSAndroid Build Coastguard Worker 		for (i=0;i<=current_type->type_commands.last_command;i++) {
118*6a54128fSAndroid Build Coastguard Worker 			if (strcmp (current_type->type_commands.names [i],text)==0) {
119*6a54128fSAndroid Build Coastguard Worker 				wprintw (show_pad,"%s - %s\n",text,current_type->type_commands.descriptions [i]);
120*6a54128fSAndroid Build Coastguard Worker 				refresh_show_pad ();return;
121*6a54128fSAndroid Build Coastguard Worker 			}
122*6a54128fSAndroid Build Coastguard Worker 		}
123*6a54128fSAndroid Build Coastguard Worker 
124*6a54128fSAndroid Build Coastguard Worker 	for (i=0;i<=ext2_commands.last_command;i++) {
125*6a54128fSAndroid Build Coastguard Worker 		if (strcmp (ext2_commands.names [i],text)==0) {
126*6a54128fSAndroid Build Coastguard Worker 				wprintw (show_pad,"%s - %s\n",text,ext2_commands.descriptions [i]);
127*6a54128fSAndroid Build Coastguard Worker 				refresh_show_pad ();return;
128*6a54128fSAndroid Build Coastguard Worker 		}
129*6a54128fSAndroid Build Coastguard Worker 	}
130*6a54128fSAndroid Build Coastguard Worker 
131*6a54128fSAndroid Build Coastguard Worker 	for (i=0;i<=general_commands.last_command;i++) {
132*6a54128fSAndroid Build Coastguard Worker 		if (strcmp (general_commands.names [i],text)==0) {
133*6a54128fSAndroid Build Coastguard Worker 				wprintw (show_pad,"%s - %s\n",text,general_commands.descriptions [i]);
134*6a54128fSAndroid Build Coastguard Worker 				refresh_show_pad ();return;
135*6a54128fSAndroid Build Coastguard Worker 		}
136*6a54128fSAndroid Build Coastguard Worker 	}
137*6a54128fSAndroid Build Coastguard Worker 
138*6a54128fSAndroid Build Coastguard Worker 	if (strcmp ("quit",text)==0) {
139*6a54128fSAndroid Build Coastguard Worker 		wprintw (show_pad,"quit - Exists EXT2ED");
140*6a54128fSAndroid Build Coastguard Worker 		refresh_show_pad ();return;
141*6a54128fSAndroid Build Coastguard Worker 	}
142*6a54128fSAndroid Build Coastguard Worker 
143*6a54128fSAndroid Build Coastguard Worker 	wprintw (show_pad,"Error - Command %s not available now\n",text);
144*6a54128fSAndroid Build Coastguard Worker 	refresh_show_pad ();return;
145*6a54128fSAndroid Build Coastguard Worker }
146*6a54128fSAndroid Build Coastguard Worker 
147*6a54128fSAndroid Build Coastguard Worker 
148*6a54128fSAndroid Build Coastguard Worker 
set_device(char * command_line)149*6a54128fSAndroid Build Coastguard Worker void set_device (char *command_line)
150*6a54128fSAndroid Build Coastguard Worker 
151*6a54128fSAndroid Build Coastguard Worker {
152*6a54128fSAndroid Build Coastguard Worker 	char *ptr,new_device [80];
153*6a54128fSAndroid Build Coastguard Worker 
154*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,new_device);
155*6a54128fSAndroid Build Coastguard Worker 	if (*ptr==0) {
156*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Device name not specified\n");
157*6a54128fSAndroid Build Coastguard Worker 		refresh_command_win ();return;
158*6a54128fSAndroid Build Coastguard Worker 	}
159*6a54128fSAndroid Build Coastguard Worker 	parse_word (ptr,new_device);
160*6a54128fSAndroid Build Coastguard Worker 	check_mounted (new_device);
161*6a54128fSAndroid Build Coastguard Worker 	if (mounted && !AllowMountedRead) {
162*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Filesystem is mounted, aborting\n");
163*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"You may wish to use the AllowMountedRead on configuration option\n");
164*6a54128fSAndroid Build Coastguard Worker 		refresh_command_win ();return;
165*6a54128fSAndroid Build Coastguard Worker 	}
166*6a54128fSAndroid Build Coastguard Worker 
167*6a54128fSAndroid Build Coastguard Worker 	if (mounted && AllowMountedRead) {
168*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Warning - Filesystem is mounted. Displayed data may be unreliable.\n");
169*6a54128fSAndroid Build Coastguard Worker 		refresh_command_win ();
170*6a54128fSAndroid Build Coastguard Worker 	}
171*6a54128fSAndroid Build Coastguard Worker 
172*6a54128fSAndroid Build Coastguard Worker 	if (device_handle!=NULL)
173*6a54128fSAndroid Build Coastguard Worker 		fclose (device_handle);
174*6a54128fSAndroid Build Coastguard Worker 
175*6a54128fSAndroid Build Coastguard Worker 	if ( (device_handle=fopen (new_device,"rb"))==NULL) {
176*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Can not open device %s\n",new_device);refresh_command_win ();
177*6a54128fSAndroid Build Coastguard Worker 		return;
178*6a54128fSAndroid Build Coastguard Worker 	}
179*6a54128fSAndroid Build Coastguard Worker 	else {
180*6a54128fSAndroid Build Coastguard Worker 		strcpy (device_name,new_device);
181*6a54128fSAndroid Build Coastguard Worker 		write_access=0;				/* Write access disabled */
182*6a54128fSAndroid Build Coastguard Worker 		current_type=NULL;			/* There is no type now */
183*6a54128fSAndroid Build Coastguard Worker 		remember_lifo.entries_count=0;		/* Empty Object memory */
184*6a54128fSAndroid Build Coastguard Worker 		free_user_commands (&ext2_commands);	/* Free filesystem specific objects */
185*6a54128fSAndroid Build Coastguard Worker 		free_struct_descriptors ();
186*6a54128fSAndroid Build Coastguard Worker 		if (!set_file_system_info ()) {		/* Error while getting info --> abort */
187*6a54128fSAndroid Build Coastguard Worker 			free_user_commands (&ext2_commands);
188*6a54128fSAndroid Build Coastguard Worker 			free_struct_descriptors ();
189*6a54128fSAndroid Build Coastguard Worker 			fclose (device_handle);
190*6a54128fSAndroid Build Coastguard Worker 			device_handle=NULL;		/* Notice that our device is still not set up */
191*6a54128fSAndroid Build Coastguard Worker 			device_offset=-1;
192*6a54128fSAndroid Build Coastguard Worker 			return;
193*6a54128fSAndroid Build Coastguard Worker 		}
194*6a54128fSAndroid Build Coastguard Worker 		if (*AlternateDescriptors)		/* Check if user defined objects exist */
195*6a54128fSAndroid Build Coastguard Worker 			set_struct_descriptors (AlternateDescriptors);
196*6a54128fSAndroid Build Coastguard Worker 		dispatch ("setoffset 0");
197*6a54128fSAndroid Build Coastguard Worker 		dispatch ("help");			/* Show help screen */
198*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Device changed to %s",device_name);refresh_command_win ();
199*6a54128fSAndroid Build Coastguard Worker 	}
200*6a54128fSAndroid Build Coastguard Worker }
201*6a54128fSAndroid Build Coastguard Worker 
set_offset(char * command_line)202*6a54128fSAndroid Build Coastguard Worker void set_offset (char *command_line)
203*6a54128fSAndroid Build Coastguard Worker 
204*6a54128fSAndroid Build Coastguard Worker {
205*6a54128fSAndroid Build Coastguard Worker 	long mult=1;
206*6a54128fSAndroid Build Coastguard Worker 	long new_offset;
207*6a54128fSAndroid Build Coastguard Worker 	char *ptr,new_offset_buffer [80];
208*6a54128fSAndroid Build Coastguard Worker 
209*6a54128fSAndroid Build Coastguard Worker 	if (device_handle==NULL) {
210*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - No device opened\n");refresh_command_win ();
211*6a54128fSAndroid Build Coastguard Worker 		return;
212*6a54128fSAndroid Build Coastguard Worker 	}
213*6a54128fSAndroid Build Coastguard Worker 
214*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,new_offset_buffer);
215*6a54128fSAndroid Build Coastguard Worker 
216*6a54128fSAndroid Build Coastguard Worker 	if (*ptr==0) {
217*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();
218*6a54128fSAndroid Build Coastguard Worker 		return;
219*6a54128fSAndroid Build Coastguard Worker 	}
220*6a54128fSAndroid Build Coastguard Worker 
221*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (ptr,new_offset_buffer);
222*6a54128fSAndroid Build Coastguard Worker 
223*6a54128fSAndroid Build Coastguard Worker 	if (strcmp (new_offset_buffer,"block")==0) {
224*6a54128fSAndroid Build Coastguard Worker 		mult=file_system_info.block_size;
225*6a54128fSAndroid Build Coastguard Worker 		ptr=parse_word (ptr,new_offset_buffer);
226*6a54128fSAndroid Build Coastguard Worker 	}
227*6a54128fSAndroid Build Coastguard Worker 
228*6a54128fSAndroid Build Coastguard Worker 	if (strcmp (new_offset_buffer,"type")==0) {
229*6a54128fSAndroid Build Coastguard Worker 		if (current_type==NULL) {
230*6a54128fSAndroid Build Coastguard Worker 			wprintw (command_win,"Error - No type set\n");refresh_command_win ();
231*6a54128fSAndroid Build Coastguard Worker 			return;
232*6a54128fSAndroid Build Coastguard Worker 		}
233*6a54128fSAndroid Build Coastguard Worker 
234*6a54128fSAndroid Build Coastguard Worker 		mult=current_type->length;
235*6a54128fSAndroid Build Coastguard Worker 		ptr=parse_word (ptr,new_offset_buffer);
236*6a54128fSAndroid Build Coastguard Worker 	}
237*6a54128fSAndroid Build Coastguard Worker 
238*6a54128fSAndroid Build Coastguard Worker 	if (*new_offset_buffer==0) {
239*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - No offset specified\n");refresh_command_win ();
240*6a54128fSAndroid Build Coastguard Worker 		return;
241*6a54128fSAndroid Build Coastguard Worker 	}
242*6a54128fSAndroid Build Coastguard Worker 
243*6a54128fSAndroid Build Coastguard Worker 	if (new_offset_buffer [0]=='+') {
244*6a54128fSAndroid Build Coastguard Worker 		if (device_offset==-1) {
245*6a54128fSAndroid Build Coastguard Worker 			wprintw (command_win,"Error - Select a fixed offset first\n");refresh_command_win ();
246*6a54128fSAndroid Build Coastguard Worker 			return;
247*6a54128fSAndroid Build Coastguard Worker 		}
248*6a54128fSAndroid Build Coastguard Worker 		new_offset=device_offset+atol (new_offset_buffer+1)*mult;
249*6a54128fSAndroid Build Coastguard Worker 	}
250*6a54128fSAndroid Build Coastguard Worker 
251*6a54128fSAndroid Build Coastguard Worker 	else if (new_offset_buffer [0]=='-') {
252*6a54128fSAndroid Build Coastguard Worker 		if (device_offset==-1) {
253*6a54128fSAndroid Build Coastguard Worker 			wprintw (command_win,"Error - Select a fixed offset first\n");refresh_command_win ();
254*6a54128fSAndroid Build Coastguard Worker 			return;
255*6a54128fSAndroid Build Coastguard Worker 		}
256*6a54128fSAndroid Build Coastguard Worker 		new_offset=device_offset-atol (new_offset_buffer+1)*mult;
257*6a54128fSAndroid Build Coastguard Worker 		if (new_offset<0) new_offset=0;
258*6a54128fSAndroid Build Coastguard Worker 	}
259*6a54128fSAndroid Build Coastguard Worker 
260*6a54128fSAndroid Build Coastguard Worker 	else
261*6a54128fSAndroid Build Coastguard Worker 		new_offset=atol (new_offset_buffer)*mult;
262*6a54128fSAndroid Build Coastguard Worker 
263*6a54128fSAndroid Build Coastguard Worker 	if ( (fseek (device_handle,new_offset,SEEK_SET))==-1) {
264*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Failed to seek to offset %ld in device %s\n",new_offset,device_name);
265*6a54128fSAndroid Build Coastguard Worker 		refresh_command_win ();
266*6a54128fSAndroid Build Coastguard Worker 		return;
267*6a54128fSAndroid Build Coastguard Worker 	};
268*6a54128fSAndroid Build Coastguard Worker 	device_offset=new_offset;
269*6a54128fSAndroid Build Coastguard Worker 	wprintw (command_win,"Device offset changed to %ld\n",device_offset);refresh_command_win ();
270*6a54128fSAndroid Build Coastguard Worker 	load_type_data ();
271*6a54128fSAndroid Build Coastguard Worker 	type_data.offset_in_block=0;
272*6a54128fSAndroid Build Coastguard Worker }
273*6a54128fSAndroid Build Coastguard Worker 
set_int(short len,void * ptr,char * name,char * value)274*6a54128fSAndroid Build Coastguard Worker void set_int(short len, void *ptr, char *name, char *value)
275*6a54128fSAndroid Build Coastguard Worker {
276*6a54128fSAndroid Build Coastguard Worker 	char	*char_ptr;
277*6a54128fSAndroid Build Coastguard Worker 	short	*short_ptr;
278*6a54128fSAndroid Build Coastguard Worker 	long	*long_ptr;
279*6a54128fSAndroid Build Coastguard Worker 	long	v;
280*6a54128fSAndroid Build Coastguard Worker 	char	*tmp;
281*6a54128fSAndroid Build Coastguard Worker 
282*6a54128fSAndroid Build Coastguard Worker 	v = strtol(value, &tmp, 0);
283*6a54128fSAndroid Build Coastguard Worker 	if (*tmp) {
284*6a54128fSAndroid Build Coastguard Worker 		wprintw( command_win, "Bad value - %s\n", value);
285*6a54128fSAndroid Build Coastguard Worker 		return;
286*6a54128fSAndroid Build Coastguard Worker 	}
287*6a54128fSAndroid Build Coastguard Worker 	switch (len) {
288*6a54128fSAndroid Build Coastguard Worker 	case 1:
289*6a54128fSAndroid Build Coastguard Worker 		char_ptr = (char *) ptr;
290*6a54128fSAndroid Build Coastguard Worker 		*char_ptr = v;
291*6a54128fSAndroid Build Coastguard Worker 		break;
292*6a54128fSAndroid Build Coastguard Worker 	case 2:
293*6a54128fSAndroid Build Coastguard Worker 		short_ptr = (short *) ptr;
294*6a54128fSAndroid Build Coastguard Worker 		*short_ptr = v;
295*6a54128fSAndroid Build Coastguard Worker 		break;
296*6a54128fSAndroid Build Coastguard Worker 	case 4:
297*6a54128fSAndroid Build Coastguard Worker 		long_ptr = (long *) ptr;
298*6a54128fSAndroid Build Coastguard Worker 		*long_ptr = v;
299*6a54128fSAndroid Build Coastguard Worker 		break;
300*6a54128fSAndroid Build Coastguard Worker 	default:
301*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,
302*6a54128fSAndroid Build Coastguard Worker 			 "set_int: unsupported length: %d\n", len);
303*6a54128fSAndroid Build Coastguard Worker 		return;
304*6a54128fSAndroid Build Coastguard Worker 	}
305*6a54128fSAndroid Build Coastguard Worker 	wprintw (command_win, "Variable %s set to %s\n",
306*6a54128fSAndroid Build Coastguard Worker 		 name, value);
307*6a54128fSAndroid Build Coastguard Worker }
308*6a54128fSAndroid Build Coastguard Worker 
set_uint(short len,void * ptr,char * name,char * value)309*6a54128fSAndroid Build Coastguard Worker void set_uint(short len, void *ptr, char *name, char *value)
310*6a54128fSAndroid Build Coastguard Worker {
311*6a54128fSAndroid Build Coastguard Worker 	unsigned char	*char_ptr;
312*6a54128fSAndroid Build Coastguard Worker 	unsigned short	*short_ptr;
313*6a54128fSAndroid Build Coastguard Worker 	unsigned long	*long_ptr;
314*6a54128fSAndroid Build Coastguard Worker 	unsigned long	v;
315*6a54128fSAndroid Build Coastguard Worker 	char		*tmp;
316*6a54128fSAndroid Build Coastguard Worker 
317*6a54128fSAndroid Build Coastguard Worker 	v = strtoul(value, &tmp, 0);
318*6a54128fSAndroid Build Coastguard Worker 	if (*tmp) {
319*6a54128fSAndroid Build Coastguard Worker 		wprintw( command_win, "Bad value - %s\n", value);
320*6a54128fSAndroid Build Coastguard Worker 		return;
321*6a54128fSAndroid Build Coastguard Worker 	}
322*6a54128fSAndroid Build Coastguard Worker 	switch (len) {
323*6a54128fSAndroid Build Coastguard Worker 	case 1:
324*6a54128fSAndroid Build Coastguard Worker 		char_ptr = (unsigned char *) ptr;
325*6a54128fSAndroid Build Coastguard Worker 		*char_ptr = v;
326*6a54128fSAndroid Build Coastguard Worker 		break;
327*6a54128fSAndroid Build Coastguard Worker 	case 2:
328*6a54128fSAndroid Build Coastguard Worker 		short_ptr = (unsigned short *) ptr;
329*6a54128fSAndroid Build Coastguard Worker 		*short_ptr = v;
330*6a54128fSAndroid Build Coastguard Worker 		break;
331*6a54128fSAndroid Build Coastguard Worker 	case 4:
332*6a54128fSAndroid Build Coastguard Worker 		long_ptr = (unsigned long *) ptr;
333*6a54128fSAndroid Build Coastguard Worker 		*long_ptr = v;
334*6a54128fSAndroid Build Coastguard Worker 		break;
335*6a54128fSAndroid Build Coastguard Worker 	default:
336*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,
337*6a54128fSAndroid Build Coastguard Worker 			 "set_uint: unsupported length: %d\n", len);
338*6a54128fSAndroid Build Coastguard Worker 		return;
339*6a54128fSAndroid Build Coastguard Worker 	}
340*6a54128fSAndroid Build Coastguard Worker 	wprintw (command_win, "Variable %s set to %s\n",
341*6a54128fSAndroid Build Coastguard Worker 		 name, value);
342*6a54128fSAndroid Build Coastguard Worker }
343*6a54128fSAndroid Build Coastguard Worker 
set_char(short len,void * ptr,char * name,char * value)344*6a54128fSAndroid Build Coastguard Worker void set_char(short len, void *ptr, char *name, char *value)
345*6a54128fSAndroid Build Coastguard Worker {
346*6a54128fSAndroid Build Coastguard Worker 	if (strlen(value)+1 > len) {
347*6a54128fSAndroid Build Coastguard Worker 		wprintw( command_win, "Value %s too big for field\n",
348*6a54128fSAndroid Build Coastguard Worker 			name, len);
349*6a54128fSAndroid Build Coastguard Worker 		return;
350*6a54128fSAndroid Build Coastguard Worker 	}
351*6a54128fSAndroid Build Coastguard Worker 	memset(ptr, 0, len);
352*6a54128fSAndroid Build Coastguard Worker 	strcpy((char *) ptr, value);
353*6a54128fSAndroid Build Coastguard Worker 	wprintw (command_win, "Variable %s set to %s\n",
354*6a54128fSAndroid Build Coastguard Worker 		 name, value);
355*6a54128fSAndroid Build Coastguard Worker }
356*6a54128fSAndroid Build Coastguard Worker 
357*6a54128fSAndroid Build Coastguard Worker 
set(char * command_line)358*6a54128fSAndroid Build Coastguard Worker void set (char *command_line)
359*6a54128fSAndroid Build Coastguard Worker 
360*6a54128fSAndroid Build Coastguard Worker {
361*6a54128fSAndroid Build Coastguard Worker 	unsigned short *int_ptr;
362*6a54128fSAndroid Build Coastguard Worker 	unsigned char *char_ptr;
363*6a54128fSAndroid Build Coastguard Worker 	unsigned long *long_ptr,offset=0;
364*6a54128fSAndroid Build Coastguard Worker 	int i,len, found=0;
365*6a54128fSAndroid Build Coastguard Worker 	char *ptr,buffer [80],variable [80],value [80];
366*6a54128fSAndroid Build Coastguard Worker 
367*6a54128fSAndroid Build Coastguard Worker 	if (device_handle==NULL) {
368*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - No device opened\n");refresh_command_win ();
369*6a54128fSAndroid Build Coastguard Worker 		return;
370*6a54128fSAndroid Build Coastguard Worker 	}
371*6a54128fSAndroid Build Coastguard Worker 
372*6a54128fSAndroid Build Coastguard Worker 	if (current_type==NULL) {
373*6a54128fSAndroid Build Coastguard Worker 		hex_set (command_line);
374*6a54128fSAndroid Build Coastguard Worker 		return;
375*6a54128fSAndroid Build Coastguard Worker 	}
376*6a54128fSAndroid Build Coastguard Worker 
377*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,buffer);
378*6a54128fSAndroid Build Coastguard Worker 	if (ptr==NULL || *ptr==0) {
379*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Missing arguments\n");refresh_command_win ();
380*6a54128fSAndroid Build Coastguard Worker 		return;
381*6a54128fSAndroid Build Coastguard Worker 	}
382*6a54128fSAndroid Build Coastguard Worker 	parse_word (ptr,buffer);
383*6a54128fSAndroid Build Coastguard Worker 	ptr=strchr (buffer,'=');
384*6a54128fSAndroid Build Coastguard Worker 	if (ptr==NULL) {
385*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Bad syntax\n");refresh_command_win ();return;
386*6a54128fSAndroid Build Coastguard Worker 	}
387*6a54128fSAndroid Build Coastguard Worker 	strncpy (variable,buffer,ptr-buffer);variable [ptr-buffer]=0;
388*6a54128fSAndroid Build Coastguard Worker 	strcpy (value,++ptr);
389*6a54128fSAndroid Build Coastguard Worker 
390*6a54128fSAndroid Build Coastguard Worker 	if (current_type==NULL) {
391*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Sorry, not yet supported\n");refresh_command_win ();return;
392*6a54128fSAndroid Build Coastguard Worker 	}
393*6a54128fSAndroid Build Coastguard Worker 
394*6a54128fSAndroid Build Coastguard Worker 	for (i=0;i<current_type->fields_num && !found;i++) {
395*6a54128fSAndroid Build Coastguard Worker 		if (strcmp (current_type->field_names [i],variable)==0) {
396*6a54128fSAndroid Build Coastguard Worker 			found=1;
397*6a54128fSAndroid Build Coastguard Worker 			ptr=type_data.u.buffer+offset;
398*6a54128fSAndroid Build Coastguard Worker 			len = current_type->field_lengths [i];
399*6a54128fSAndroid Build Coastguard Worker 			switch (current_type->field_types [i]) {
400*6a54128fSAndroid Build Coastguard Worker 			case FIELD_TYPE_INT:
401*6a54128fSAndroid Build Coastguard Worker 				set_int(len, ptr, variable, value);
402*6a54128fSAndroid Build Coastguard Worker 				break;
403*6a54128fSAndroid Build Coastguard Worker 			case FIELD_TYPE_UINT:
404*6a54128fSAndroid Build Coastguard Worker 				set_uint(len, ptr, variable, value);
405*6a54128fSAndroid Build Coastguard Worker 				break;
406*6a54128fSAndroid Build Coastguard Worker 			case FIELD_TYPE_CHAR:
407*6a54128fSAndroid Build Coastguard Worker 				set_char(len, ptr, variable, value);
408*6a54128fSAndroid Build Coastguard Worker 				break;
409*6a54128fSAndroid Build Coastguard Worker 			default:
410*6a54128fSAndroid Build Coastguard Worker 				wprintw (command_win,
411*6a54128fSAndroid Build Coastguard Worker 					 "set: unhandled type %d\n",
412*6a54128fSAndroid Build Coastguard Worker 					 current_type->field_types [i]);
413*6a54128fSAndroid Build Coastguard Worker 				break;
414*6a54128fSAndroid Build Coastguard Worker 			}
415*6a54128fSAndroid Build Coastguard Worker 			refresh_command_win ();
416*6a54128fSAndroid Build Coastguard Worker 		}
417*6a54128fSAndroid Build Coastguard Worker 		offset+=current_type->field_lengths [i];
418*6a54128fSAndroid Build Coastguard Worker 	}
419*6a54128fSAndroid Build Coastguard Worker 	if (found)
420*6a54128fSAndroid Build Coastguard Worker 		dispatch ("show");
421*6a54128fSAndroid Build Coastguard Worker 	else {
422*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Variable %s not found\n",variable);
423*6a54128fSAndroid Build Coastguard Worker 		refresh_command_win ();
424*6a54128fSAndroid Build Coastguard Worker 	}
425*6a54128fSAndroid Build Coastguard Worker }
426*6a54128fSAndroid Build Coastguard Worker 
hex_set(char * command_line)427*6a54128fSAndroid Build Coastguard Worker void hex_set (char *command_line)
428*6a54128fSAndroid Build Coastguard Worker 
429*6a54128fSAndroid Build Coastguard Worker {
430*6a54128fSAndroid Build Coastguard Worker 	unsigned char tmp;
431*6a54128fSAndroid Build Coastguard Worker 	char *ptr,buffer [80],*ch_ptr;
432*6a54128fSAndroid Build Coastguard Worker 	int mode=HEX;
433*6a54128fSAndroid Build Coastguard Worker 
434*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,buffer);
435*6a54128fSAndroid Build Coastguard Worker 	if (*ptr==0) {
436*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();return;
437*6a54128fSAndroid Build Coastguard Worker 	}
438*6a54128fSAndroid Build Coastguard Worker 
439*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (ptr,buffer);
440*6a54128fSAndroid Build Coastguard Worker 
441*6a54128fSAndroid Build Coastguard Worker 	if (strcasecmp (buffer,"text")==0) {
442*6a54128fSAndroid Build Coastguard Worker 		mode=TEXT;
443*6a54128fSAndroid Build Coastguard Worker 		strcpy (buffer,ptr);
444*6a54128fSAndroid Build Coastguard Worker 	}
445*6a54128fSAndroid Build Coastguard Worker 
446*6a54128fSAndroid Build Coastguard Worker 	else if (strcasecmp (buffer,"hex")==0) {
447*6a54128fSAndroid Build Coastguard Worker 		mode=HEX;
448*6a54128fSAndroid Build Coastguard Worker 		ptr=parse_word (ptr,buffer);
449*6a54128fSAndroid Build Coastguard Worker 	}
450*6a54128fSAndroid Build Coastguard Worker 
451*6a54128fSAndroid Build Coastguard Worker 	if (*buffer==0) {
452*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Data not specified\n");refresh_command_win ();return;
453*6a54128fSAndroid Build Coastguard Worker 	}
454*6a54128fSAndroid Build Coastguard Worker 
455*6a54128fSAndroid Build Coastguard Worker 	if (mode==HEX) {
456*6a54128fSAndroid Build Coastguard Worker 		do {
457*6a54128fSAndroid Build Coastguard Worker 			tmp=(unsigned char) strtol (buffer,NULL,16);
458*6a54128fSAndroid Build Coastguard Worker 			type_data.u.buffer [type_data.offset_in_block]=tmp;
459*6a54128fSAndroid Build Coastguard Worker 			type_data.offset_in_block++;
460*6a54128fSAndroid Build Coastguard Worker 			ptr=parse_word (ptr,buffer);
461*6a54128fSAndroid Build Coastguard Worker 			if (type_data.offset_in_block==file_system_info.block_size) {
462*6a54128fSAndroid Build Coastguard Worker 				if (*ptr) {
463*6a54128fSAndroid Build Coastguard Worker 					wprintw (command_win,"Error - Ending offset outside block, only partial string changed\n");
464*6a54128fSAndroid Build Coastguard Worker 					refresh_command_win ();
465*6a54128fSAndroid Build Coastguard Worker 				}
466*6a54128fSAndroid Build Coastguard Worker 				type_data.offset_in_block--;
467*6a54128fSAndroid Build Coastguard Worker 			}
468*6a54128fSAndroid Build Coastguard Worker 		} while (*buffer) ;
469*6a54128fSAndroid Build Coastguard Worker 	}
470*6a54128fSAndroid Build Coastguard Worker 
471*6a54128fSAndroid Build Coastguard Worker 	else {
472*6a54128fSAndroid Build Coastguard Worker 		ch_ptr=buffer;
473*6a54128fSAndroid Build Coastguard Worker 		while (*ch_ptr) {
474*6a54128fSAndroid Build Coastguard Worker 			tmp=(unsigned char) *ch_ptr++;
475*6a54128fSAndroid Build Coastguard Worker 			type_data.u.buffer [type_data.offset_in_block]=tmp;
476*6a54128fSAndroid Build Coastguard Worker 			type_data.offset_in_block++;
477*6a54128fSAndroid Build Coastguard Worker 			if (type_data.offset_in_block==file_system_info.block_size) {
478*6a54128fSAndroid Build Coastguard Worker 				if (*ch_ptr) {
479*6a54128fSAndroid Build Coastguard Worker 					wprintw (command_win,"Error - Ending offset outside block, only partial string changed\n");
480*6a54128fSAndroid Build Coastguard Worker 					refresh_command_win ();
481*6a54128fSAndroid Build Coastguard Worker 				}
482*6a54128fSAndroid Build Coastguard Worker 				type_data.offset_in_block--;
483*6a54128fSAndroid Build Coastguard Worker 			}
484*6a54128fSAndroid Build Coastguard Worker 		}
485*6a54128fSAndroid Build Coastguard Worker 	}
486*6a54128fSAndroid Build Coastguard Worker 
487*6a54128fSAndroid Build Coastguard Worker 	strcpy (buffer,"show");dispatch (buffer);
488*6a54128fSAndroid Build Coastguard Worker }
489*6a54128fSAndroid Build Coastguard Worker 
490*6a54128fSAndroid Build Coastguard Worker 
491*6a54128fSAndroid Build Coastguard Worker 
set_type(char * command_line)492*6a54128fSAndroid Build Coastguard Worker void set_type (char *command_line)
493*6a54128fSAndroid Build Coastguard Worker 
494*6a54128fSAndroid Build Coastguard Worker {
495*6a54128fSAndroid Build Coastguard Worker 	struct struct_descriptor *descriptor_ptr;
496*6a54128fSAndroid Build Coastguard Worker 	char *ptr,buffer [80],tmp_buffer [80];
497*6a54128fSAndroid Build Coastguard Worker 	short found=0;
498*6a54128fSAndroid Build Coastguard Worker 
499*6a54128fSAndroid Build Coastguard Worker 	if (!load_type_data ())
500*6a54128fSAndroid Build Coastguard Worker 		return;
501*6a54128fSAndroid Build Coastguard Worker 
502*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,buffer);
503*6a54128fSAndroid Build Coastguard Worker 	parse_word (ptr,buffer);
504*6a54128fSAndroid Build Coastguard Worker 
505*6a54128fSAndroid Build Coastguard Worker 	if (strcmp (buffer,"none")==0 || strcmp (buffer,"hex")==0) {
506*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Data will be shown as hex dump\n");refresh_command_win ();
507*6a54128fSAndroid Build Coastguard Worker 		current_type=NULL;
508*6a54128fSAndroid Build Coastguard Worker 		sprintf (tmp_buffer,"show");dispatch (tmp_buffer);
509*6a54128fSAndroid Build Coastguard Worker 		return;
510*6a54128fSAndroid Build Coastguard Worker 	}
511*6a54128fSAndroid Build Coastguard Worker 
512*6a54128fSAndroid Build Coastguard Worker 	descriptor_ptr=first_type;
513*6a54128fSAndroid Build Coastguard Worker 	while (descriptor_ptr!=NULL && !found) {
514*6a54128fSAndroid Build Coastguard Worker 		if (strcmp (descriptor_ptr->name,buffer)==0)
515*6a54128fSAndroid Build Coastguard Worker 			found=1;
516*6a54128fSAndroid Build Coastguard Worker 		else
517*6a54128fSAndroid Build Coastguard Worker 			descriptor_ptr=descriptor_ptr->next;
518*6a54128fSAndroid Build Coastguard Worker 	}
519*6a54128fSAndroid Build Coastguard Worker 	if (found) {
520*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Structure type set to %s\n",buffer);refresh_command_win ();
521*6a54128fSAndroid Build Coastguard Worker 		current_type=descriptor_ptr;
522*6a54128fSAndroid Build Coastguard Worker 		sprintf (tmp_buffer,"show");dispatch (tmp_buffer);
523*6a54128fSAndroid Build Coastguard Worker 	}
524*6a54128fSAndroid Build Coastguard Worker 	else {
525*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - %s is not a valid type\n",buffer);refresh_command_win ();
526*6a54128fSAndroid Build Coastguard Worker 	}
527*6a54128fSAndroid Build Coastguard Worker }
528*6a54128fSAndroid Build Coastguard Worker 
show_int(short len,void * ptr)529*6a54128fSAndroid Build Coastguard Worker void show_int(short len, void *ptr)
530*6a54128fSAndroid Build Coastguard Worker {
531*6a54128fSAndroid Build Coastguard Worker 	long	temp;
532*6a54128fSAndroid Build Coastguard Worker 	char	*format;
533*6a54128fSAndroid Build Coastguard Worker 
534*6a54128fSAndroid Build Coastguard Worker 	switch (len) {
535*6a54128fSAndroid Build Coastguard Worker 	case 1:
536*6a54128fSAndroid Build Coastguard Worker 		temp = *((char *) ptr);
537*6a54128fSAndroid Build Coastguard Worker 		format = "%3d (0x%02x)\n";
538*6a54128fSAndroid Build Coastguard Worker 		break;
539*6a54128fSAndroid Build Coastguard Worker 	case 2:
540*6a54128fSAndroid Build Coastguard Worker 		temp = *((short *) ptr);
541*6a54128fSAndroid Build Coastguard Worker 		format = "%d (0x%x)\n";
542*6a54128fSAndroid Build Coastguard Worker 		break;
543*6a54128fSAndroid Build Coastguard Worker 	case 4:
544*6a54128fSAndroid Build Coastguard Worker 		temp = *((long *) ptr);
545*6a54128fSAndroid Build Coastguard Worker 		format = "%d\n";
546*6a54128fSAndroid Build Coastguard Worker 		break;
547*6a54128fSAndroid Build Coastguard Worker 	default:
548*6a54128fSAndroid Build Coastguard Worker 		wprintw (show_pad, "unimplemented\n");
549*6a54128fSAndroid Build Coastguard Worker 		return;
550*6a54128fSAndroid Build Coastguard Worker 	}
551*6a54128fSAndroid Build Coastguard Worker 	wprintw(show_pad, format, temp, temp);
552*6a54128fSAndroid Build Coastguard Worker }
553*6a54128fSAndroid Build Coastguard Worker 
show_uint(short len,void * ptr)554*6a54128fSAndroid Build Coastguard Worker void show_uint(short len, void *ptr)
555*6a54128fSAndroid Build Coastguard Worker {
556*6a54128fSAndroid Build Coastguard Worker 	unsigned long	temp;
557*6a54128fSAndroid Build Coastguard Worker 	char		*format;
558*6a54128fSAndroid Build Coastguard Worker 
559*6a54128fSAndroid Build Coastguard Worker 	switch (len) {
560*6a54128fSAndroid Build Coastguard Worker 	case 1:
561*6a54128fSAndroid Build Coastguard Worker 		temp = *((unsigned char *) ptr);
562*6a54128fSAndroid Build Coastguard Worker 		temp = temp & 0xFF;
563*6a54128fSAndroid Build Coastguard Worker 		format = "%3u (0x%02x)\n";
564*6a54128fSAndroid Build Coastguard Worker 		break;
565*6a54128fSAndroid Build Coastguard Worker 	case 2:
566*6a54128fSAndroid Build Coastguard Worker 		temp = *((unsigned short *) ptr);
567*6a54128fSAndroid Build Coastguard Worker 		temp = temp & 0xFFFF;
568*6a54128fSAndroid Build Coastguard Worker 		format = "%u (0x%x)\n";
569*6a54128fSAndroid Build Coastguard Worker 		break;
570*6a54128fSAndroid Build Coastguard Worker 	case 4:
571*6a54128fSAndroid Build Coastguard Worker 		temp = (unsigned long) *((unsigned long *) ptr);
572*6a54128fSAndroid Build Coastguard Worker 		format = "%u\n";
573*6a54128fSAndroid Build Coastguard Worker 		break;
574*6a54128fSAndroid Build Coastguard Worker 	default:
575*6a54128fSAndroid Build Coastguard Worker 		wprintw (show_pad, "unimplemented\n");
576*6a54128fSAndroid Build Coastguard Worker 		return;
577*6a54128fSAndroid Build Coastguard Worker 	}
578*6a54128fSAndroid Build Coastguard Worker 	wprintw(show_pad, format, temp, temp);
579*6a54128fSAndroid Build Coastguard Worker }
580*6a54128fSAndroid Build Coastguard Worker 
show_char(short len,void * ptr)581*6a54128fSAndroid Build Coastguard Worker void show_char(short len, void *ptr)
582*6a54128fSAndroid Build Coastguard Worker {
583*6a54128fSAndroid Build Coastguard Worker 	unsigned char	*cp = (unsigned char *) ptr;
584*6a54128fSAndroid Build Coastguard Worker 	unsigned char	ch;
585*6a54128fSAndroid Build Coastguard Worker 	int		i,j;
586*6a54128fSAndroid Build Coastguard Worker 
587*6a54128fSAndroid Build Coastguard Worker 	wprintw(show_pad, "\"");
588*6a54128fSAndroid Build Coastguard Worker 
589*6a54128fSAndroid Build Coastguard Worker 	for (i=0; i < len; i++) {
590*6a54128fSAndroid Build Coastguard Worker 		ch = *cp++;
591*6a54128fSAndroid Build Coastguard Worker 		if (ch == 0) {
592*6a54128fSAndroid Build Coastguard Worker 			for (j=i+1; j < len; j++)
593*6a54128fSAndroid Build Coastguard Worker 				if (cp[j-i])
594*6a54128fSAndroid Build Coastguard Worker 					break;
595*6a54128fSAndroid Build Coastguard Worker 			if (j == len)
596*6a54128fSAndroid Build Coastguard Worker 				break;
597*6a54128fSAndroid Build Coastguard Worker 		}
598*6a54128fSAndroid Build Coastguard Worker 		if (ch > 128) {
599*6a54128fSAndroid Build Coastguard Worker 			wprintw(show_pad, "M-");
600*6a54128fSAndroid Build Coastguard Worker 			ch -= 128;
601*6a54128fSAndroid Build Coastguard Worker 		}
602*6a54128fSAndroid Build Coastguard Worker 		if ((ch < 32) || (ch == 0x7f)) {
603*6a54128fSAndroid Build Coastguard Worker 			wprintw(show_pad, "^");
604*6a54128fSAndroid Build Coastguard Worker 			ch ^= 0x40; /* ^@, ^A, ^B; ^? for DEL */
605*6a54128fSAndroid Build Coastguard Worker 		}
606*6a54128fSAndroid Build Coastguard Worker 		wprintw(show_pad, "%c", ch);
607*6a54128fSAndroid Build Coastguard Worker 	}
608*6a54128fSAndroid Build Coastguard Worker 
609*6a54128fSAndroid Build Coastguard Worker 	wprintw(show_pad, "\"\n");
610*6a54128fSAndroid Build Coastguard Worker }
611*6a54128fSAndroid Build Coastguard Worker 
612*6a54128fSAndroid Build Coastguard Worker 
613*6a54128fSAndroid Build Coastguard Worker 
show(char * command_line)614*6a54128fSAndroid Build Coastguard Worker void show (char *command_line)
615*6a54128fSAndroid Build Coastguard Worker 
616*6a54128fSAndroid Build Coastguard Worker {
617*6a54128fSAndroid Build Coastguard Worker 	unsigned int i,l,len,temp_int;
618*6a54128fSAndroid Build Coastguard Worker 	unsigned long offset=0,temp_long;
619*6a54128fSAndroid Build Coastguard Worker 	unsigned char temp_char,*ch_ptr;
620*6a54128fSAndroid Build Coastguard Worker 	void *ptr;
621*6a54128fSAndroid Build Coastguard Worker 
622*6a54128fSAndroid Build Coastguard Worker 	if (device_handle==NULL)
623*6a54128fSAndroid Build Coastguard Worker 		return;
624*6a54128fSAndroid Build Coastguard Worker 
625*6a54128fSAndroid Build Coastguard Worker 	show_pad_info.line=0;
626*6a54128fSAndroid Build Coastguard Worker 
627*6a54128fSAndroid Build Coastguard Worker 	if (current_type==NULL) {
628*6a54128fSAndroid Build Coastguard Worker 		wmove (show_pad,0,0);
629*6a54128fSAndroid Build Coastguard Worker 		ch_ptr=type_data.u.buffer;
630*6a54128fSAndroid Build Coastguard Worker 		for (l=0;l<file_system_info.block_size/16;l++) {
631*6a54128fSAndroid Build Coastguard Worker 			wprintw (show_pad,"%08ld :  ",offset);
632*6a54128fSAndroid Build Coastguard Worker 			for (i=0;i<16;i++) {
633*6a54128fSAndroid Build Coastguard Worker 				if (type_data.offset_in_block==offset+i)
634*6a54128fSAndroid Build Coastguard Worker 					wattrset (show_pad,A_REVERSE);
635*6a54128fSAndroid Build Coastguard Worker 
636*6a54128fSAndroid Build Coastguard Worker 				if (ch_ptr [i]>=' ' && ch_ptr [i]<='z')
637*6a54128fSAndroid Build Coastguard Worker 					wprintw (show_pad,"%c",ch_ptr [i]);
638*6a54128fSAndroid Build Coastguard Worker 				else
639*6a54128fSAndroid Build Coastguard Worker 					wprintw (show_pad,".");
640*6a54128fSAndroid Build Coastguard Worker 				if (type_data.offset_in_block==offset+i)
641*6a54128fSAndroid Build Coastguard Worker 					wattrset (show_pad,A_NORMAL);
642*6a54128fSAndroid Build Coastguard Worker 			}
643*6a54128fSAndroid Build Coastguard Worker 			wprintw (show_pad,"   ");
644*6a54128fSAndroid Build Coastguard Worker 			for (i=0;i<16;i++) {
645*6a54128fSAndroid Build Coastguard Worker 				if (type_data.offset_in_block==offset+i)
646*6a54128fSAndroid Build Coastguard Worker 					wattrset (show_pad,A_REVERSE);
647*6a54128fSAndroid Build Coastguard Worker 
648*6a54128fSAndroid Build Coastguard Worker 				wprintw (show_pad,"%02x",ch_ptr [i]);
649*6a54128fSAndroid Build Coastguard Worker 
650*6a54128fSAndroid Build Coastguard Worker 				if (type_data.offset_in_block==offset+i) {
651*6a54128fSAndroid Build Coastguard Worker 					wattrset (show_pad,A_NORMAL);
652*6a54128fSAndroid Build Coastguard Worker 					show_pad_info.line=l-l % show_pad_info.display_lines;
653*6a54128fSAndroid Build Coastguard Worker 				}
654*6a54128fSAndroid Build Coastguard Worker 
655*6a54128fSAndroid Build Coastguard Worker 				wprintw (show_pad," ");
656*6a54128fSAndroid Build Coastguard Worker 			}
657*6a54128fSAndroid Build Coastguard Worker 			wprintw (show_pad,"\n");
658*6a54128fSAndroid Build Coastguard Worker 			offset+=16;
659*6a54128fSAndroid Build Coastguard Worker 			ch_ptr+=16;
660*6a54128fSAndroid Build Coastguard Worker 		}
661*6a54128fSAndroid Build Coastguard Worker 		show_pad_info.max_line=l-1;show_pad_info.max_col=COLS-1;
662*6a54128fSAndroid Build Coastguard Worker 		refresh_show_pad ();show_info ();
663*6a54128fSAndroid Build Coastguard Worker 	}
664*6a54128fSAndroid Build Coastguard Worker 	else {
665*6a54128fSAndroid Build Coastguard Worker 		wmove (show_pad,0,0);l=0;
666*6a54128fSAndroid Build Coastguard Worker 		for (i=0;i<current_type->fields_num;i++) {
667*6a54128fSAndroid Build Coastguard Worker 			wprintw (show_pad,"%-20s = ",current_type->field_names [i]);
668*6a54128fSAndroid Build Coastguard Worker 			ptr=type_data.u.buffer+offset;
669*6a54128fSAndroid Build Coastguard Worker 			len = current_type->field_lengths[i];
670*6a54128fSAndroid Build Coastguard Worker 			switch (current_type->field_types[i]) {
671*6a54128fSAndroid Build Coastguard Worker 			case FIELD_TYPE_INT:
672*6a54128fSAndroid Build Coastguard Worker 				show_int(len, ptr);
673*6a54128fSAndroid Build Coastguard Worker 				break;
674*6a54128fSAndroid Build Coastguard Worker 			case FIELD_TYPE_UINT:
675*6a54128fSAndroid Build Coastguard Worker 				show_uint(len, ptr);
676*6a54128fSAndroid Build Coastguard Worker 				break;
677*6a54128fSAndroid Build Coastguard Worker 			case FIELD_TYPE_CHAR:
678*6a54128fSAndroid Build Coastguard Worker 				show_char(len, ptr);
679*6a54128fSAndroid Build Coastguard Worker 				break;
680*6a54128fSAndroid Build Coastguard Worker 			default:
681*6a54128fSAndroid Build Coastguard Worker 				wprintw (show_pad, "unimplemented\n");
682*6a54128fSAndroid Build Coastguard Worker 				break;
683*6a54128fSAndroid Build Coastguard Worker 			}
684*6a54128fSAndroid Build Coastguard Worker 			offset+=len;
685*6a54128fSAndroid Build Coastguard Worker 			l++;
686*6a54128fSAndroid Build Coastguard Worker 		}
687*6a54128fSAndroid Build Coastguard Worker 		current_type->length=offset;
688*6a54128fSAndroid Build Coastguard Worker 		show_pad_info.max_line=l-1;
689*6a54128fSAndroid Build Coastguard Worker 		refresh_show_pad ();show_info ();
690*6a54128fSAndroid Build Coastguard Worker 	}
691*6a54128fSAndroid Build Coastguard Worker }
692*6a54128fSAndroid Build Coastguard Worker 
next(char * command_line)693*6a54128fSAndroid Build Coastguard Worker void next (char *command_line)
694*6a54128fSAndroid Build Coastguard Worker 
695*6a54128fSAndroid Build Coastguard Worker {
696*6a54128fSAndroid Build Coastguard Worker 	long offset=1;
697*6a54128fSAndroid Build Coastguard Worker 	char *ptr,buffer [80];
698*6a54128fSAndroid Build Coastguard Worker 
699*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,buffer);
700*6a54128fSAndroid Build Coastguard Worker 
701*6a54128fSAndroid Build Coastguard Worker 	if (*ptr!=0) {
702*6a54128fSAndroid Build Coastguard Worker 		ptr=parse_word (ptr,buffer);
703*6a54128fSAndroid Build Coastguard Worker 		offset*=atol (buffer);
704*6a54128fSAndroid Build Coastguard Worker 	}
705*6a54128fSAndroid Build Coastguard Worker 
706*6a54128fSAndroid Build Coastguard Worker 	if (current_type!=NULL) {
707*6a54128fSAndroid Build Coastguard Worker 		sprintf (buffer,"setoffset type +%ld",offset);
708*6a54128fSAndroid Build Coastguard Worker 		dispatch (buffer);
709*6a54128fSAndroid Build Coastguard Worker 		return;
710*6a54128fSAndroid Build Coastguard Worker 	}
711*6a54128fSAndroid Build Coastguard Worker 
712*6a54128fSAndroid Build Coastguard Worker 	if (type_data.offset_in_block+offset < file_system_info.block_size) {
713*6a54128fSAndroid Build Coastguard Worker 		type_data.offset_in_block+=offset;
714*6a54128fSAndroid Build Coastguard Worker 		sprintf (buffer,"show");dispatch (buffer);
715*6a54128fSAndroid Build Coastguard Worker 	}
716*6a54128fSAndroid Build Coastguard Worker 
717*6a54128fSAndroid Build Coastguard Worker 	else {
718*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Offset out of block\n");refresh_command_win ();
719*6a54128fSAndroid Build Coastguard Worker 	}
720*6a54128fSAndroid Build Coastguard Worker }
721*6a54128fSAndroid Build Coastguard Worker 
prev(char * command_line)722*6a54128fSAndroid Build Coastguard Worker void prev (char *command_line)
723*6a54128fSAndroid Build Coastguard Worker 
724*6a54128fSAndroid Build Coastguard Worker {
725*6a54128fSAndroid Build Coastguard Worker 	long offset=1;
726*6a54128fSAndroid Build Coastguard Worker 	char *ptr,buffer [80];
727*6a54128fSAndroid Build Coastguard Worker 
728*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,buffer);
729*6a54128fSAndroid Build Coastguard Worker 
730*6a54128fSAndroid Build Coastguard Worker 	if (*ptr!=0) {
731*6a54128fSAndroid Build Coastguard Worker 		ptr=parse_word (ptr,buffer);
732*6a54128fSAndroid Build Coastguard Worker 		offset*=atol (buffer);
733*6a54128fSAndroid Build Coastguard Worker 	}
734*6a54128fSAndroid Build Coastguard Worker 
735*6a54128fSAndroid Build Coastguard Worker 	if (current_type!=NULL) {
736*6a54128fSAndroid Build Coastguard Worker 		sprintf (buffer,"setoffset type -%ld",offset);
737*6a54128fSAndroid Build Coastguard Worker 		dispatch (buffer);
738*6a54128fSAndroid Build Coastguard Worker 		return;
739*6a54128fSAndroid Build Coastguard Worker 	}
740*6a54128fSAndroid Build Coastguard Worker 
741*6a54128fSAndroid Build Coastguard Worker 	if (type_data.offset_in_block-offset >= 0) {
742*6a54128fSAndroid Build Coastguard Worker 		type_data.offset_in_block-=offset;
743*6a54128fSAndroid Build Coastguard Worker 		sprintf (buffer,"show");dispatch (buffer);
744*6a54128fSAndroid Build Coastguard Worker 	}
745*6a54128fSAndroid Build Coastguard Worker 
746*6a54128fSAndroid Build Coastguard Worker 	else {
747*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Offset out of block\n");refresh_command_win ();
748*6a54128fSAndroid Build Coastguard Worker 	}
749*6a54128fSAndroid Build Coastguard Worker }
750*6a54128fSAndroid Build Coastguard Worker 
pgdn(char * commnad_line)751*6a54128fSAndroid Build Coastguard Worker void pgdn (char *commnad_line)
752*6a54128fSAndroid Build Coastguard Worker 
753*6a54128fSAndroid Build Coastguard Worker {
754*6a54128fSAndroid Build Coastguard Worker 	show_pad_info.line+=show_pad_info.display_lines;
755*6a54128fSAndroid Build Coastguard Worker 	refresh_show_pad ();refresh_show_win ();
756*6a54128fSAndroid Build Coastguard Worker }
757*6a54128fSAndroid Build Coastguard Worker 
pgup(char * command_line)758*6a54128fSAndroid Build Coastguard Worker void pgup (char *command_line)
759*6a54128fSAndroid Build Coastguard Worker 
760*6a54128fSAndroid Build Coastguard Worker {
761*6a54128fSAndroid Build Coastguard Worker 	show_pad_info.line-=show_pad_info.display_lines;
762*6a54128fSAndroid Build Coastguard Worker 	refresh_show_pad ();refresh_show_win ();
763*6a54128fSAndroid Build Coastguard Worker }
764*6a54128fSAndroid Build Coastguard Worker 
redraw(char * command_line)765*6a54128fSAndroid Build Coastguard Worker void redraw (char *command_line)
766*6a54128fSAndroid Build Coastguard Worker 
767*6a54128fSAndroid Build Coastguard Worker {
768*6a54128fSAndroid Build Coastguard Worker 	redraw_all ();
769*6a54128fSAndroid Build Coastguard Worker 	dispatch ("show");
770*6a54128fSAndroid Build Coastguard Worker }
771*6a54128fSAndroid Build Coastguard Worker 
remember(char * command_line)772*6a54128fSAndroid Build Coastguard Worker void remember (char *command_line)
773*6a54128fSAndroid Build Coastguard Worker 
774*6a54128fSAndroid Build Coastguard Worker {
775*6a54128fSAndroid Build Coastguard Worker 	long entry_num;
776*6a54128fSAndroid Build Coastguard Worker 	char *ptr,buffer [80];
777*6a54128fSAndroid Build Coastguard Worker 
778*6a54128fSAndroid Build Coastguard Worker 	if (device_handle==NULL) {
779*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - No device opened\n");refresh_command_win ();
780*6a54128fSAndroid Build Coastguard Worker 		return;
781*6a54128fSAndroid Build Coastguard Worker 	}
782*6a54128fSAndroid Build Coastguard Worker 
783*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,buffer);
784*6a54128fSAndroid Build Coastguard Worker 
785*6a54128fSAndroid Build Coastguard Worker 	if (*ptr==0) {
786*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();
787*6a54128fSAndroid Build Coastguard Worker 		return;
788*6a54128fSAndroid Build Coastguard Worker 	}
789*6a54128fSAndroid Build Coastguard Worker 
790*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (ptr,buffer);
791*6a54128fSAndroid Build Coastguard Worker 
792*6a54128fSAndroid Build Coastguard Worker 	entry_num=remember_lifo.entries_count++;
793*6a54128fSAndroid Build Coastguard Worker 	if (entry_num>REMEMBER_COUNT-1) {
794*6a54128fSAndroid Build Coastguard Worker 		entry_num=0;
795*6a54128fSAndroid Build Coastguard Worker 		remember_lifo.entries_count--;
796*6a54128fSAndroid Build Coastguard Worker 	}
797*6a54128fSAndroid Build Coastguard Worker 
798*6a54128fSAndroid Build Coastguard Worker 	remember_lifo.offset [entry_num]=device_offset;
799*6a54128fSAndroid Build Coastguard Worker 	remember_lifo.type [entry_num]=current_type;
800*6a54128fSAndroid Build Coastguard Worker 	strcpy (remember_lifo.name [entry_num],buffer);
801*6a54128fSAndroid Build Coastguard Worker 
802*6a54128fSAndroid Build Coastguard Worker 	if (current_type!=NULL)
803*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Object %s in Offset %ld remembered as %s\n",current_type->name,device_offset,buffer);
804*6a54128fSAndroid Build Coastguard Worker 	else
805*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Offset %ld remembered as %s\n",device_offset,buffer);
806*6a54128fSAndroid Build Coastguard Worker 
807*6a54128fSAndroid Build Coastguard Worker 	refresh_command_win ();
808*6a54128fSAndroid Build Coastguard Worker }
809*6a54128fSAndroid Build Coastguard Worker 
recall(char * command_line)810*6a54128fSAndroid Build Coastguard Worker void recall (char *command_line)
811*6a54128fSAndroid Build Coastguard Worker 
812*6a54128fSAndroid Build Coastguard Worker {
813*6a54128fSAndroid Build Coastguard Worker 	char *ptr,buffer [80];
814*6a54128fSAndroid Build Coastguard Worker 	long entry_num;
815*6a54128fSAndroid Build Coastguard Worker 
816*6a54128fSAndroid Build Coastguard Worker 	if (device_handle==NULL) {
817*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - No device opened\n");refresh_command_win ();
818*6a54128fSAndroid Build Coastguard Worker 		return;
819*6a54128fSAndroid Build Coastguard Worker 	}
820*6a54128fSAndroid Build Coastguard Worker 
821*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (command_line,buffer);
822*6a54128fSAndroid Build Coastguard Worker 
823*6a54128fSAndroid Build Coastguard Worker 	if (*ptr==0) {
824*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Argument not specified\n");refresh_command_win ();
825*6a54128fSAndroid Build Coastguard Worker 		return;
826*6a54128fSAndroid Build Coastguard Worker 	}
827*6a54128fSAndroid Build Coastguard Worker 
828*6a54128fSAndroid Build Coastguard Worker 	ptr=parse_word (ptr,buffer);
829*6a54128fSAndroid Build Coastguard Worker 
830*6a54128fSAndroid Build Coastguard Worker 
831*6a54128fSAndroid Build Coastguard Worker 	for (entry_num=remember_lifo.entries_count-1;entry_num>=0;entry_num--) {
832*6a54128fSAndroid Build Coastguard Worker 		if (strcmp (remember_lifo.name [entry_num],buffer)==0)
833*6a54128fSAndroid Build Coastguard Worker 			break;
834*6a54128fSAndroid Build Coastguard Worker 	}
835*6a54128fSAndroid Build Coastguard Worker 
836*6a54128fSAndroid Build Coastguard Worker 	if (entry_num==-1) {
837*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Can not recall %s\n",buffer);refresh_command_win ();
838*6a54128fSAndroid Build Coastguard Worker 		return;
839*6a54128fSAndroid Build Coastguard Worker 	}
840*6a54128fSAndroid Build Coastguard Worker 
841*6a54128fSAndroid Build Coastguard Worker 	sprintf (buffer,"setoffset %ld",remember_lifo.offset [entry_num]);dispatch (buffer);
842*6a54128fSAndroid Build Coastguard Worker 	if (remember_lifo.type [entry_num] != NULL) {
843*6a54128fSAndroid Build Coastguard Worker 		sprintf (buffer,"settype %s",remember_lifo.type [entry_num]->name);dispatch (buffer);
844*6a54128fSAndroid Build Coastguard Worker 	}
845*6a54128fSAndroid Build Coastguard Worker 
846*6a54128fSAndroid Build Coastguard Worker 	else {
847*6a54128fSAndroid Build Coastguard Worker 		sprintf (buffer,"settype none");dispatch (buffer);
848*6a54128fSAndroid Build Coastguard Worker 	}
849*6a54128fSAndroid Build Coastguard Worker 
850*6a54128fSAndroid Build Coastguard Worker 	wprintw (command_win,"Object %s in Offset %ld recalled\n",current_type->name,device_offset);
851*6a54128fSAndroid Build Coastguard Worker 	refresh_command_win ();
852*6a54128fSAndroid Build Coastguard Worker }
853*6a54128fSAndroid Build Coastguard Worker 
enable_write(char * command_line)854*6a54128fSAndroid Build Coastguard Worker void enable_write (char *command_line)
855*6a54128fSAndroid Build Coastguard Worker 
856*6a54128fSAndroid Build Coastguard Worker {
857*6a54128fSAndroid Build Coastguard Worker 	FILE *fp;
858*6a54128fSAndroid Build Coastguard Worker 
859*6a54128fSAndroid Build Coastguard Worker 	if (device_handle==NULL) {
860*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - No device opened\n");refresh_command_win ();
861*6a54128fSAndroid Build Coastguard Worker 		return;
862*6a54128fSAndroid Build Coastguard Worker 	}
863*6a54128fSAndroid Build Coastguard Worker 
864*6a54128fSAndroid Build Coastguard Worker 	if (!AllowChanges) {
865*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Sorry, write access is not allowed\n");
866*6a54128fSAndroid Build Coastguard Worker     		return;
867*6a54128fSAndroid Build Coastguard Worker     	}
868*6a54128fSAndroid Build Coastguard Worker 
869*6a54128fSAndroid Build Coastguard Worker     	if (mounted) {
870*6a54128fSAndroid Build Coastguard Worker     		wprintw (command_win,"Error - Filesystem is mounted\n");
871*6a54128fSAndroid Build Coastguard Worker 		return;
872*6a54128fSAndroid Build Coastguard Worker     	}
873*6a54128fSAndroid Build Coastguard Worker 
874*6a54128fSAndroid Build Coastguard Worker 	if ( (fp=fopen (device_name,"r+b"))==NULL) {
875*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Can not open device %s for reading and writing\n",device_name);refresh_command_win ();
876*6a54128fSAndroid Build Coastguard Worker 		return;
877*6a54128fSAndroid Build Coastguard Worker 	}
878*6a54128fSAndroid Build Coastguard Worker 	fclose (device_handle);
879*6a54128fSAndroid Build Coastguard Worker 	device_handle=fp;write_access=1;
880*6a54128fSAndroid Build Coastguard Worker 	wprintw (command_win,"Write access enabled - Be careful\n");refresh_command_win ();
881*6a54128fSAndroid Build Coastguard Worker }
882*6a54128fSAndroid Build Coastguard Worker 
disable_write(char * command_line)883*6a54128fSAndroid Build Coastguard Worker void disable_write (char *command_line)
884*6a54128fSAndroid Build Coastguard Worker 
885*6a54128fSAndroid Build Coastguard Worker {
886*6a54128fSAndroid Build Coastguard Worker 	FILE *fp;
887*6a54128fSAndroid Build Coastguard Worker 
888*6a54128fSAndroid Build Coastguard Worker 	if (device_handle==NULL) {
889*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - No device opened\n");refresh_command_win ();
890*6a54128fSAndroid Build Coastguard Worker 		return;
891*6a54128fSAndroid Build Coastguard Worker 	}
892*6a54128fSAndroid Build Coastguard Worker 
893*6a54128fSAndroid Build Coastguard Worker 	if ( (fp=fopen (device_name,"rb"))==NULL) {
894*6a54128fSAndroid Build Coastguard Worker 		wprintw (command_win,"Error - Can not open device %s\n",device_name);refresh_command_win ();
895*6a54128fSAndroid Build Coastguard Worker 		return;
896*6a54128fSAndroid Build Coastguard Worker 	}
897*6a54128fSAndroid Build Coastguard Worker 
898*6a54128fSAndroid Build Coastguard Worker 	fclose (device_handle);
899*6a54128fSAndroid Build Coastguard Worker 	device_handle=fp;write_access=0;
900*6a54128fSAndroid Build Coastguard Worker 	wprintw (command_win,"Write access disabled\n");refresh_command_win ();
901*6a54128fSAndroid Build Coastguard Worker }
902*6a54128fSAndroid Build Coastguard Worker 
write_data(char * command_line)903*6a54128fSAndroid Build Coastguard Worker void write_data (char *command_line)
904*6a54128fSAndroid Build Coastguard Worker 
905*6a54128fSAndroid Build Coastguard Worker {
906*6a54128fSAndroid Build Coastguard Worker 	write_type_data ();
907*6a54128fSAndroid Build Coastguard Worker }
908