#ifndef HEAD_EXT2SIM #define HEAD_EXT2SIM #define FS_STATE_NOT_MOUNTED 0 #define FS_STATE_MOUNTED_RW 1 #define FS_STATE_MOUNTED_RO 2 #define MAX_GROUPS 100 #define MAX_DIR_ENTRY 1024 #define EXT2_FT_UNKNOWN 0 #define EXT2_FT_REG_FILE 1 #define EXT2_FT_DIR 2 #define EXT2_FT_CHRDEV 3 #define EXT2_FT_BLKDEV 4 #define EXT2_FT_FIFO 5 #define EXT2_FT_SOCK 6 #define EXT2_FT_SYMLINK 7 #define EXT2_FT_MAX 8 #define EXT2_S_IFMT 0xF000 #define EXT2_S_IFSOCK 0xC000 #define EXT2_S_IFLNK 0xA000 #define EXT2_S_IFREG 0x8000 #define EXT2_S_IFBLK 0x6000 #define EXT2_S_IFDIR 0x4000 #define EXT2_S_IFCHR 0x2000 #define EXT2_S_IFIFO 0x1000 #define EXT2_S_ISUID 0x0800 #define EXT2_S_ISGID 0x0400 #define EXT2_S_ISVTX 0x0200 #define EXT2_S_IRWXU 0x01C0 #define EXT2_S_IRUSR 0x0100 #define EXT2_S_IWUSR 0x0080 #define EXT2_S_IXUSR 0x0040 #define EXT2_S_IRWXG 0x0038 #define EXT2_S_IRGRP 0x0020 #define EXT2_S_IWGRP 0x0010 #define EXT2_S_IXGRP 0x0008 #define EXT2_S_IRWXO 0x0007 #define EXT2_S_IROTH 0x0004 #define EXT2_S_IWOTH 0x0002 #define EXT2_S_IXOTH 0x0001 typedef struct{ unsigned int s_inodes_count; unsigned int s_block_count; unsigned int s_r_blocks_count; unsigned int s_free_blocks_count; unsigned int s_free_inodes_count; unsigned int s_first_data_block; unsigned int s_log_block_size; unsigned int s_log_frag_size; unsigned int s_blocks_per_group; unsigned int s_frags_per_group; unsigned int s_inodes_per_group; unsigned int s_mtime; unsigned int s_wtime; unsigned short s_mnt_count; unsigned short s_max_mnt_count; unsigned short s_magic; unsigned short s_state; unsigned short s_errors; unsigned short s_minor_rev_level; unsigned int s_last_check; unsigned int s_check_interval; unsigned int s_creator_os; unsigned int s_rev_level; unsigned short s_def_resuid; unsigned short s_def_resgid; unsigned int s_first_ino; unsigned short s_inode_size; unsigned short s_block_group_nr; unsigned int s_feature_compat; unsigned int s_feature_incompat; unsigned int s_feature_ro_compat; unsigned char s_uuid[16]; unsigned char s_volume_name[16]; unsigned char s_last_mounted[64]; unsigned int s_algo_bitmap; }S_SUPERBLOCK; typedef struct{ unsigned int bg_block_bitmap; unsigned int bg_inode_bitmap; unsigned int bg_inode_table; unsigned short bg_free_block_count; unsigned short bg_free_inodes_count; unsigned short bg_used_dirs_count; unsigned short bg_pad; unsigned char bg_reserved[12]; }S_GROUP_DESCRIPTOR; typedef struct{ unsigned short i_mode; unsigned short i_uid; unsigned int i_size; unsigned int i_atime; unsigned int i_ctime; unsigned int i_mtime; unsigned int i_dtime; unsigned short i_gid; unsigned short i_links_count; unsigned int i_blocks; unsigned int i_flags; unsigned int i_osd1; unsigned int i_block[15]; unsigned int i_generation; unsigned int i_file_acl; unsigned int i_dir_acl; unsigned int i_faddr; unsigned char i_osd2[12]; }S_INODE; typedef struct{ int group_count; int block_size; int sektors_per_block; int group_desc_start; int first_group_start; int group_size; }FS_INFO; typedef struct{ unsigned int inode; unsigned short rec_len; unsigned char name_len; unsigned char file_type; }S_DIR; typedef struct{ unsigned char name[256]; unsigned int inode; unsigned int size; unsigned short i_mode; unsigned char file_type; }FS_DIR_ENTRY; typedef struct{ int num; unsigned int inode; char name[2048]; char actual_name[256]; }FS_DIR; /* Funkcie z disk.c */ int mount_fs(char *fname,char state); int umount_fs(void); int read_sector(int num,unsigned char buf[512]); int write_sector(int num,unsigned char buf[512]); int create_disk(int num); int write_block(int num,int l,unsigned char *buf); int read_block(int num,int l,unsigned char *buf); int read_inode(int num,S_INODE *inode); int read_blocks(unsigned int i_block[15],int l,unsigned char *buf); /* superblock.c */ int read_superblock(void); int write_superblock(void); /* group_descriptor.c */ int write_group_descriptor(void); int read_group_descriptor(void); /* bitmap.c */ int initialise_bitmaps(void); void deinitialise_bitmaps(void); void clear_bitmaps(void); int write_bitmaps(int num); int read_bitmaps(int num); /* format.c */ int format(int group_count,int block_shift); /* check.c */ int check(void); /* dir.c */ int dir_read_inodetype(int num,unsigned int *size,unsigned short *mode); int dir_read(int num,char *name); int function_cd(char *text); void function_ls(void); /* cat.c */ int function_cat(char *text); #endif #ifndef stricmp #define stricmp strcasecmp #endif