#ifndef MAIN_H #define MAIN_H #define SPACE_MBR_RECORD 2048 /* Sectors*/ #define SPACE_VBR_RECORD 2048 /* Sectors*/ #define SIZE_FSCI_RECORD 1 /* Sectors*/ #define DEFAULT_ENTRY_SIZE 1 /* Sectors*/ #define SECTOR_SIZE 512 /* BYTES*/ #define NUMBER_OF_MBR_PARTITIONS 4 #define DEFAULT_FILE_SIZE 4 /* This is in sectors*/ #define DEFAULT_DATA_POINTER_SIZE 4 /* This is in sectors*/ #define DEFAULT_TABLE_SIZE 16 #define NUM_DATA_POINTERS 27 #include "std_singos/stdio.h" #include "std_singos/stdlib.h" #include "std_singos/string.h" #include "driver/disk.h" #include "implementation/lsfs.h" void dump_ax(input); void print_stack(argument); void print_newline(); typedef struct Directory_Table Directory_Table; typedef struct Struct_Table_Entry Table_Entry; typedef struct struct_partition_control partition_control; typedef struct File_System_Control_Information FSCI; typedef struct meta_information_format mif; typedef struct tag_record tag_record; typedef struct Parameter_Struct Parameter_Struct; typedef enum Table_Entry_Kind { /* These are specific values since, is has to corrospond to the implementation in assembly*/ ENTRY_EMPTY = 0, ENTRY_FILE = 1, ENTRY_DIRECTORY = 2, } Table_Entry_Kind; typedef enum Service_Action { SERIVCE_LOAD_DISK = 1, SERVICE_FIND_ENTRY = 2, SERIVCE_READ_DATA = 3, SERIVCE_WRITE_DATA = 4, } Service_Action; struct Struct_Table_Entry { char filename[256]; long file_id[2]; long file_size[2]; void* ext_file_data_low; void* ext_file_data_high; long number_sector_s; /* <- Just try to remove the last undercore and compile . */ short entry_kind; short extra_control_bits1; short extra_control_bits2; short extra_control_bits3; long table_entry_sector_index[2]; long data_pointer[NUM_DATA_POINTERS * 2]; /* if it is a directory, the first pointer will be to the next table. */ }; struct File_System_Control_Information { char filesystem_information[256]; long master_table_index[2]; long this_partition_offset_on_disk[2]; long next_free_sector[2]; long next_uniqe_id[2]; /* both files and directories gets this. */ long next_sector_reuse_pointer[2]; long last_sector_index_on_partition[2]; long maximum_sectors_on_disk[2]; long sector_size_on_disk[2]; long not_used[48]; }; typedef struct Directory_Table { Table_Entry entries[DEFAULT_TABLE_SIZE]; }; struct Parameter_Struct { char* path; char* new_path; int buffer_segment; int buffer_address; int buffer_size; int data_length; int byte_offset_into_file; Table_Entry_Kind entry_kind; }; #endif