You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
4.5 KiB
135 lines
4.5 KiB
#include "main.h" |
|
|
|
int main(selector, pointer_parameter_segment, pointer_parameter_struct) |
|
int selector; |
|
void* pointer_parameter_segment; |
|
void* pointer_parameter_struct; |
|
{ |
|
/* selectot should be a "selector" for which disk service*/ |
|
/* one wnats to use. */ |
|
/* 0 should not be used, to try to ensure that a value has been set explicitly. */ |
|
|
|
Service_Action service_action; |
|
Directory_Table current_table; |
|
Parameter_Struct parameter_struct; |
|
int* local_segment; /* = 0x7e0; */ |
|
unsigned int heap_start = 0x2200; |
|
unsigned int heap_end = 0xffff; |
|
int stack_segment = 0x8fc0; |
|
int path_length; |
|
long index_as_long = 0; |
|
|
|
char *local_path = 0; |
|
FSCI *fsci = global_heap_start - 0x200; |
|
service_action = selector; |
|
|
|
switch (service_action) |
|
{ |
|
case SERIVCE_LOAD_DISK: |
|
{ |
|
/* |
|
What do we need to know: |
|
Index of FSCI |
|
*/ |
|
memcpy(¶meter_struct, stack_segment, pointer_parameter_struct, pointer_parameter_segment, sizeof(Parameter_Struct)); |
|
/*fsci = parameter_struct.buffer_segment; */ |
|
local_segment = parameter_struct.buffer_segment; |
|
heap_start = parameter_struct.buffer_address + 0x200; |
|
heap_end = parameter_struct.buffer_size; |
|
index_as_long = parameter_struct.data_length; |
|
set_heap_settings(heap_start, heap_end); |
|
fsci = global_heap_start - 0x200; |
|
disk_service_read_data_from_disk(index_as_long, (long) 1, fsci, local_segment); |
|
print("File System has been loaded: "); |
|
print_newline(); |
|
print(fsci->filesystem_information); |
|
print("16-bit implementation v0.2.1"); |
|
print_newline(); |
|
} break; |
|
case SERVICE_FIND_ENTRY: |
|
{ |
|
String_Array *path_array; |
|
lsfs_file* find_file; |
|
int i; |
|
disk_service_read_data_from_disk(fsci->master_table_index[0], (long) DEFAULT_TABLE_SIZE, ¤t_table, stack_segment); |
|
/* |
|
print("Current table: "); |
|
print_newline(); |
|
print_stack(current_table.entries[0].filename); |
|
print_newline(); |
|
print_stack(current_table.entries[1].filename); |
|
print_newline(); |
|
print_stack(current_table.entries[2].filename); |
|
print_newline(); |
|
*/ |
|
|
|
memcpy(¶meter_struct, stack_segment, pointer_parameter_struct, pointer_parameter_segment, sizeof(Parameter_Struct)); |
|
path_length = strlen(parameter_struct.path, pointer_parameter_segment); |
|
local_path = malloc(256); |
|
memcpy(local_path, local_segment, parameter_struct.path, pointer_parameter_segment, path_length); |
|
local_path[path_length] = 0; |
|
print("Read file: "); |
|
print(local_path); |
|
print_newline(); |
|
|
|
path_array = string_split_c(local_path, '/', 0); |
|
|
|
find_file = calloc(sizeof(lsfs_file), 1); |
|
if ( !lsfs_disk_getattr(find_file, local_path, fsci) ) |
|
{ |
|
print("File not found"); |
|
print_newline(); |
|
} |
|
else |
|
{ |
|
print("File has been read"); |
|
print_newline(); |
|
} |
|
/* |
|
print_newline(); |
|
print("Buffer_address: "); |
|
dump_ax(parameter_struct.buffer_address); |
|
print_newline(); |
|
print("Buffer_segmnent: "); |
|
dump_ax(parameter_struct.buffer_segment); |
|
*/ |
|
lsfs_disk_read_data_from_file(find_file, parameter_struct.buffer_size, parameter_struct.buffer_address, (long) 0x0, parameter_struct.buffer_segment); |
|
|
|
|
|
} break; |
|
case SERIVCE_READ_DATA: |
|
{ |
|
/* |
|
What do we need to know: |
|
path |
|
Buffer: |
|
destination_segment |
|
destination_address |
|
buffer_size |
|
offset_into_file |
|
*/ |
|
print("Hit READ case"); |
|
} break; |
|
case SERIVCE_WRITE_DATA: |
|
{ |
|
print("Hit WRITE case"); |
|
} break; |
|
case SERIVCE_WRITE_FS_INFO: |
|
{ |
|
/* print_newline(); */ |
|
print(fsci->filesystem_information); |
|
/* print_newline(); */ |
|
} break; |
|
|
|
default: |
|
{ |
|
print("Default case: "); |
|
dump_ax(service_action); |
|
} |
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
/* void load_*/
|
|
|