1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/*
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/usr/src/ext2ed/ext2_com.c
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)A part of the extended file system 2 disk editor.
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch--------------------------------------
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)Extended-2 filesystem General commands
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)--------------------------------------
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)The commands here will be registered when we are editing an ext2 filesystem
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)First written on: July 28 1995
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)Copyright (C) 1995 Gadi Oxman
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)*/
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include <stdio.h>
20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include <stdlib.h>
21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include <string.h>
22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "ext2ed.h"
24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void type_ext2___super (char *command_line)
26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/*
28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)We are moving to the superblock - Just use setoffset and settype. The offset was gathered in the
30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)initialization phase (but is constant - 1024).
31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)*/
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	char buffer [80];
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	super_info.copy_num=0;
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	sprintf (buffer,"setoffset %ld",file_system_info.super_block_offset);dispatch (buffer);
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	sprintf (buffer,"settype ext2_super_block");dispatch (buffer);
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void type_ext2___cd (char *command_line)
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/*
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)A global cd command - The path should start with /.
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)We implement it through dispatching to our primitive functions.
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)*/
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	char temp [80],buffer [80],*ptr;
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	ptr=parse_word (command_line,buffer);
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	if (*ptr==0) {
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		wprintw (command_win,"Error - No argument specified\n");refresh_command_win ();return;
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	}
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	ptr=parse_word (ptr,buffer);
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	if (buffer [0] != '/') {
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		wprintw (command_win,"Error - Use a full pathname (begin with '/')\n");refresh_command_win ();return;
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	}
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	/* Note the various dispatches below - They should be intuitive if you know the ext2 filesystem structure */
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	dispatch ("super");dispatch ("group");dispatch ("inode");dispatch ("next");dispatch ("dir");
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	if (buffer [1] != 0) {
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		sprintf (temp,"cd %s",buffer+1);dispatch (temp);
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	}
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void type_ext2___group (char *command_line)
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/*
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)We go to the group descriptors.
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)First, we go to the first group descriptor in the main copy.
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)Then, we use the group's entry command to pass to another group.
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch*/
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch{
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	long group_num=0;
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	char *ptr,buffer [80];
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	ptr=parse_word (command_line,buffer);
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	if (*ptr!=0) {
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		ptr=parse_word (ptr,buffer);
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		group_num=atol (buffer);
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	}
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	group_info.copy_num=0;group_info.group_num=0;
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	sprintf (buffer,"setoffset %ld",file_system_info.first_group_desc_offset);dispatch (buffer);
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	sprintf (buffer,"settype ext2_group_desc");dispatch (buffer);
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	sprintf (buffer,"entry %ld",group_num);dispatch (buffer);
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)