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.
132 lines
4.1 KiB
132 lines
4.1 KiB
/* Adress to dump ax, 7C2A*/
|
|
/* Address to print 7C47*/
|
|
/* */
|
|
/* */
|
|
#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 = 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_newline();
|
|
print(fsci->filesystem_information);
|
|
print_newline();
|
|
dump_ax(fsci->master_table_index[0]);
|
|
print_newline();
|
|
} break;
|
|
case SERVICE_FIND_ENTRY:
|
|
{
|
|
String_Array *path_array;
|
|
lsfs_file* find_file;
|
|
int i;
|
|
dump_ax(fsci->master_table_index[0]);
|
|
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);
|
|
dump_ax(path_length);
|
|
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);
|
|
lsfs_disk_getattr(find_file, local_path, fsci);
|
|
print_newline();
|
|
print("Loding SingOS kernel: ");
|
|
print(find_file->filename);
|
|
print_newline();
|
|
print("Kernel file id: ");
|
|
dump_ax(find_file->file_id[0]);
|
|
print_newline();
|
|
print("Kernel file size: ");
|
|
dump_ax(find_file->size[0]);
|
|
print_newline();
|
|
print("Kernel first data pointer: ");
|
|
dump_ax(find_file->data_pointer[0]);
|
|
|
|
lsfs_disk_read_data_from_file(find_file, 0xffff, 0x00, (long) 0x0, 0x50);
|
|
|
|
|
|
} 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;
|
|
default:
|
|
{
|
|
print("Default case");
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/* void load_*/
|
|
|