⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 de.h

📁 操作系统源代码
💻 H
字号:
/****************************************************************//*								*//*	de.h							*//*								*//*		Definitions for the "Disk editor".		*//*								*//****************************************************************//*  origination         1989-Jan-15        Terrence W. Holm	*//****************************************************************//****************************************************************//*								*//*	de(1)							*//*								*//*  This is the MINIX disk editor. It allows the user to	*//*  observe and modify a file system. It can also be used	*//*  to recover unlink(2)'ed files				*//*								*//*  See the de(1) man page.					*//*								*//****************************************************************//****************************************************************//*								*//*	de		   Copyright  Terrence W. Holm  1989	*//*								*//* This program was written for users of the Minix operating	*//* system, and in the spirit of other public domain software	*//* written for said system, this source code is made available	*//* at no cost to everyone. I assume no responsibility for	*//* damage to file systems caused by this program.		*//*								*//* This program (one .h, five .c's and a "man" page) may be	*//* copied and/or modified subject to (1) no charge must be	*//* made for distribution, other than for the medium, (2) all	*//* modified sources must be clearly marked as such, (3) all	*//* sources must carry this copyright.				*//*								*//****************************************************************//****************************************************************//*								*//*	files							*//*								*//*	    de.h		Definitions			*//*	    de.c		The main loop			*//*	    de_stdin.c		Character input routines	*//*	    de_stdout.c		Output routines			*//*	    de_diskio.c		File system read/write		*//*	    de_recover.c	File restoration routines	*//*								*//*	    de.1		"Man" page			*//*	    Makefile		For "make"			*//*	    README		Installation help		*//*								*//*								*//*	fs/path.c was modified to support the 'x' command.	*//*	fs/link.c and fs/open.c were changed for 'X'.		*//*								*//****************************************************************/#undef printf#include <stdio.h>/*  General constants  */#define   MAX_STRING	60		/*  For all input lines	*/#define   MAX_PREV	8		/*  For 'p' command	*/#define   SEARCH_BUFFER (4*K)		/*  For '/' and 'n'	*//*  Files  */#define   TMP      "/tmp"		/*  For "-r" output	*/#define   DEV	   "/dev"		/*  Where devices are	*//*  a.out header constants  (see a.out.h, if you have it)  */#if (CHIP == INTEL)#define   A_OUT    0x0301#define   SPLIT    0x0420#endif#if (CHIP == M68000)#define   A_OUT    0x0301#define   SPLIT	   0x0B20#endif#if (CHIP == SPARC)#define   A_OUT    0x0301#define   SPLIT    0x0B20#endif/*  Each buffer is 1k.  In WORD mode 16 words (32 bytes) can be	*//*  displayed at once. In BLOCK mode 1K bytes can be displayed.	*//*  In MAP mode 2048 bits (256 bytes) are displayed.		*/#define   K		1024		/*  STD_BLK		*/#define   K_MASK	(~(K-1))	/*  Round to K boundary	*/#define   K_SHIFT	10		/*  Ie. 1<<10 = K	*/#define   PAGE_MASK	0x1f		/*  Word mode: 32 bytes	*/#define   PAGE_SHIFT    5		/*  Ie. 1<<5 = 32	*/#define   MAP_BITS_PER_BLOCK (8 * K)    /*  1k block, 8192 bits */#define   MAP_MASK	0xff		/*  256 bytes/screen	*//*  Terminal i/o codes  */#define   CTRL_D	'\004'		/*  ASCII ^D		*/#define   BELL		'\007'		/*  ASCII bell code     */#define   BS		'\010'		/*  ASCII back space	*/#define   CTRL_U	'\025'		/*  ASCII ^U		*/#define	  ESCAPE  	'\033'		/*  ASCII escape code	*/#define   DEL           '\177'		/*  ASCII delete code   *//*  Input escape codes generated by the	Minix console.	*//*  Format: ESC [ X. 					*/#define   ESC_HOME	('H' + 0x80)#define   ESC_UP	('A' + 0x80)#define   ESC_PGUP	('V' + 0x80)#define   ESC_LEFT	('D' + 0x80)#define   ESC_5		('G' + 0x80)#define   ESC_RIGHT	('C' + 0x80)#define   ESC_END	('Y' + 0x80)#define   ESC_DOWN	('B' + 0x80)#define   ESC_PGDN	('U' + 0x80)#define   ESC_PLUS	('T' + 0x80)#define   ESC_MINUS	('S' + 0x80)/*  Graphic box codes - only applicable for console display  *//*  in visual mode "map".				     */#if (CHIP == INTEL)#define   BOX_CLR	' '		/*  Empty box		*/#define   BOX_ALL	'\333'		/*  Filled box		*/#define   BOX_TOP	'\337'		/*  Filled upper half	*/#define   BOX_BOT	'\334'		/*  Filled lower half   */#endif#if (CHIP == M68000)/*  Please change these.  */#define   BOX_CLR	' '		/*  Empty box		*/#define   BOX_ALL	'='		/*  Filled box		*/#define   BOX_TOP	'-'		/*  Filled upper half	*/#define   BOX_BOT	'_'		/*  Filled lower half   */#endif#if (CHIP == SPARC)/*  Please change these.  */#define   BOX_CLR	' '		/*  Empty box		*/#define   BOX_ALL	'='		/*  Filled box		*/#define   BOX_TOP	'-'		/*  Filled upper half	*/#define   BOX_BOT	'_'		/*  Filled lower half   */#endif/*  Move positions for the output display.  */#define   STATUS_COLUMN	 2#define   STATUS_LINE    0#define   BLOCK_COLUMN	 4#define   BLOCK_LINE	 4#define   INFO_COLUMN	 30#define   INFO_LINE	 BLOCK_LINE#define   PROMPT_COLUMN	 0#define   PROMPT_LINE	 23#define   WARNING_COLUMN 5#define   WARNING_LINE   10/*  Values returned by Process() and Get_Filename()  */#define   OK		  0		/*  No update required	*/#define   REDRAW	  1		/*  Redraw whole screen	*/#define   REDRAW_POINTERS 2		/*  Redraw just ptrs	*/#define   ERROR		  3		/*  Beep		*//*  Visual modes  */#define   WORD	   1#define   BLOCK    2#define   MAP	   3typedef  unsigned short word_t;		/*  For most user i/o	*/#if _WORD_SIZE == 2typedef  unsigned int Word_t;		/*  What it should always be */#elsetypedef  int Word_t;			/*  Unsigned promotion under ANSI C */#endif#ifndef I_MAP_SLOTS/* Max number of inode and zone map blocks we can handle. */#define I_MAP_SLOTS	8#define Z_MAP_SLOTS	(sizeof(char *) == 2 ? 16 : 128)#endiftypedef  struct  de_state		/*  State of disk ed.	*/  {  /*  Information from super block  */  /*  The types here are mostly promoted types for simplicity	*/  /*  and efficiency.						*/  unsigned inodes;			/*  Number of i-nodes	*/  zone_t zones;				/*  Total # of blocks	*/  unsigned inode_maps;			/*  I-node map blocks	*/  unsigned zone_maps;			/*  Zone map blocks	*/  unsigned inode_blocks;		/*  I-node blocks	*/  unsigned first_data;			/*  Total non-data blks	*/  int magic;				/*  Magic number	*/  /* Numbers derived from the magic number */      unsigned char is_fs;			/*  Nonzero for good fs	*/  unsigned char v1;			/*  Nonzero for V1 fs	*/  unsigned inode_size;			/*  Size of disk inode	*/  unsigned nr_indirects;		/*  # indirect blocks	*/  unsigned zone_num_size;		/*  Size of disk z num	*/  /* Other derived numbers */      bit_t inodes_in_map;			/*  Bits in i-node map	*/  bit_t zones_in_map;			/*  Bits in zone map	*/  int ndzones;				/*  # direct zones in an inode */  /*  Information from map blocks  */  bitchunk_t inode_map[ I_MAP_SLOTS * K / sizeof (bitchunk_t) ];  bitchunk_t zone_map[ Z_MAP_SLOTS * K / sizeof (bitchunk_t) ];  /*  Information for current block  */  off_t address;			/*  Current address	*/  off_t last_addr;			/*  For erasing ptrs	*/  zone_t block;				/*  Current block (1K)	*/  unsigned offset;			/*  Offset within block	*/  char buffer[ K ];  /*  Display state  */  int  mode;				/*  WORD, BLOCK or MAP	*/  int  output_base;			/*  2, 8, 10, or 16	*/  /*  Search information  */  char search_string[ MAX_STRING + 1 ];	/*  For '/' and 'n'	*/  off_t prev_addr[ MAX_PREV ];		/*  For 'p' command	*/  int   prev_mode[ MAX_PREV ];  /*  File information  */  char *device_name;			/*  From command line	*/  int   device_d;  int   device_mode;			/*  O_RDONLY or O_RDWR	*/  zone_t device_size;			/*  Number of blocks	*/  char  file_name[ MAX_STRING + 1 ];	/*  For 'w' and 'W'	*/  FILE *file_f;  int   file_written;			/*  Flag if written to	*/  }  de_state;/*  Forward references for external routines  *//*  de.c  */_PROTOTYPE(void main , (int argc , char *argv []));_PROTOTYPE(int Process , (de_state *s , int c ));#if __STDC__void  Error( const char *text, ... );#elsevoid  Error();#endif_PROTOTYPE(int In_Use , (bit_t bit , bitchunk_t *map ));_PROTOTYPE(ino_t Find_Inode , (de_state *s , char *filename ));/*  de_stdin.c  */_PROTOTYPE(void Save_Term , (void));_PROTOTYPE(void Set_Term , (void));_PROTOTYPE(void Reset_Term , (void));_PROTOTYPE(int Get_Char , (void));_PROTOTYPE(char *Get_Line , (void));_PROTOTYPE(int Arrow_Esc , (int c ));/*  de_stdout.c  */_PROTOTYPE(int Init_Termcap , (void));_PROTOTYPE(void Draw_Help_Screen , (de_state *s ));_PROTOTYPE(void Wait_For_Key , (void));_PROTOTYPE(void Draw_Prompt , (char *string ));_PROTOTYPE(void Erase_Prompt , (void));_PROTOTYPE(void Draw_Screen , (de_state *s ));_PROTOTYPE(void Draw_Strings , (de_state *s ));_PROTOTYPE(void Draw_Pointers , (de_state *s ));_PROTOTYPE(void Print_Ascii , (int c ));_PROTOTYPE(void Goto , (int column , int line ));_PROTOTYPE(void Block_Type , (de_state *s ));_PROTOTYPE(void Draw_Words , (de_state *s ));_PROTOTYPE(void Draw_Info , (de_state *s ));_PROTOTYPE(void Draw_Block , (char *block ));_PROTOTYPE(void Draw_Map , (char *block , int max_bits ));_PROTOTYPE(void Draw_Offset , (de_state *s ));_PROTOTYPE(void Word_Pointers , (off_t old_addr , off_t new_addr ));_PROTOTYPE(void Block_Pointers , (off_t old_addr , off_t new_addr ));_PROTOTYPE(void Map_Pointers , (off_t old_addr , off_t new_addr ));_PROTOTYPE(void Print_Number , (Word_t number , int output_base ));_PROTOTYPE(void Draw_Zone_Numbers , (de_state *s , struct inode *inode ,						int zindex , int zrow ));#if __STDC__void  Warning( const char *text, ... );#elsevoid  Warning();#endif/*  de_diskio.c  */_PROTOTYPE(void Read_Disk , (de_state *s , off_t block_addr , char *buffer ));_PROTOTYPE(void Read_Block , (de_state *s , char *buffer ));_PROTOTYPE(void Read_Super_Block , (de_state *s ));_PROTOTYPE(void Read_Bit_Maps , (de_state *s ));_PROTOTYPE(off_t Search , (de_state *s , char *string ));_PROTOTYPE(void Write_Word , (de_state *s , Word_t word ));/*  de_recover.c  */_PROTOTYPE(int Path_Dir_File , (char *path_name , char **dir_name ,							char **file_name ));_PROTOTYPE(char *File_Device , (char *file_name ));_PROTOTYPE(ino_t Find_Deleted_Entry , (de_state *s , char *path_name ));_PROTOTYPE(off_t Recover_Blocks , (de_state *s ));#undef    printf			/*  Because fs/const.h	*/					/*  defines it.		*//*  Static functions are all pre-declared FORWARD but none are	*//*  declared static yet - this can wait until all functions are	*//*  declared with prototypes.					*/#undef FORWARD#define FORWARD /* static */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -