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.
128 lines
4.1 KiB
128 lines
4.1 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 = 0x50;
|
|
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 = 0x2000;
|
|
service_action = selector;
|
|
|
|
switch (service_action)
|
|
{
|
|
case SERIVCE_LOAD_DISK:
|
|
{
|
|
/*
|
|
What do we need to know:
|
|
Index of FSCI
|
|
*/
|
|
set_heap_settings(heap_start, heap_end);
|
|
index_as_long = pointer_parameter_struct;
|
|
disk_service_read_data_from_disk(index_as_long, (long) 1, fsci, local_segment);
|
|
print("File System has been loaded: ");
|
|
print(fsci->filesystem_information);
|
|
} 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(local_path);
|
|
|
|
path_array = string_split_c(local_path, '/', 0);
|
|
|
|
/* print_newline(); */
|
|
/* print_newline(); */
|
|
for (i = 0; i < path_array->length; ++i)
|
|
{
|
|
print(path_array->strings[i]->chars);
|
|
/* print_newline(); */
|
|
}
|
|
/* print_newline(); */
|
|
/* print_newline(); */
|
|
|
|
find_file = calloc(sizeof(lsfs_file), 1);
|
|
if ( !lsfs_disk_getattr(find_file, local_path, fsci) )
|
|
{
|
|
print("File not found");
|
|
}
|
|
/* 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_*/
|
|
|