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_*/
 | |
| 
 |