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

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
4 years ago
4 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. #include "main.h"
  2. int main(selector, pointer_parameter_segment, pointer_parameter_struct)
  3. int selector;
  4. void* pointer_parameter_segment;
  5. void* pointer_parameter_struct;
  6. {
  7. /* selectot should be a "selector" for which disk service*/
  8. /* one wnats to use. */
  9. /* 0 should not be used, to try to ensure that a value has been set explicitly. */
  10. Service_Action service_action;
  11. Directory_Table current_table;
  12. Parameter_Struct parameter_struct;
  13. int* local_segment; /* = 0x7e0; */
  14. unsigned int heap_start = 0x2200;
  15. unsigned int heap_end = 0xffff;
  16. int stack_segment = 0x8fc0;
  17. int path_length;
  18. long index_as_long = 0;
  19. char *local_path = 0;
  20. FSCI *fsci = global_heap_start - 0x200;
  21. service_action = selector;
  22. switch (service_action)
  23. {
  24. case SERIVCE_LOAD_DISK:
  25. {
  26. /*
  27. What do we need to know:
  28. Index of FSCI
  29. */
  30. memcpy(&parameter_struct, stack_segment, pointer_parameter_struct, pointer_parameter_segment, sizeof(Parameter_Struct));
  31. /*fsci = parameter_struct.buffer_segment; */
  32. local_segment = parameter_struct.buffer_segment;
  33. heap_start = parameter_struct.buffer_address + 0x200;
  34. heap_end = parameter_struct.buffer_size;
  35. index_as_long = parameter_struct.data_length;
  36. set_heap_settings(heap_start, heap_end);
  37. fsci = global_heap_start - 0x200;
  38. disk_service_read_data_from_disk(index_as_long, (long) 1, fsci, local_segment);
  39. print("File System has been loaded: ");
  40. print_newline();
  41. print(fsci->filesystem_information);
  42. print("16-bit implementation v0.2.1");
  43. print_newline();
  44. } break;
  45. case SERVICE_FIND_ENTRY:
  46. {
  47. String_Array *path_array;
  48. lsfs_file* find_file;
  49. int i;
  50. disk_service_read_data_from_disk(fsci->master_table_index[0], (long) DEFAULT_TABLE_SIZE, &current_table, stack_segment);
  51. /*
  52. print("Current table: ");
  53. print_newline();
  54. print_stack(current_table.entries[0].filename);
  55. print_newline();
  56. print_stack(current_table.entries[1].filename);
  57. print_newline();
  58. print_stack(current_table.entries[2].filename);
  59. print_newline();
  60. */
  61. memcpy(&parameter_struct, stack_segment, pointer_parameter_struct, pointer_parameter_segment, sizeof(Parameter_Struct));
  62. path_length = strlen(parameter_struct.path, pointer_parameter_segment);
  63. local_path = malloc(256);
  64. memcpy(local_path, local_segment, parameter_struct.path, pointer_parameter_segment, path_length);
  65. local_path[path_length] = 0;
  66. print("Read file: ");
  67. print(local_path);
  68. print_newline();
  69. path_array = string_split_c(local_path, '/', 0);
  70. find_file = calloc(sizeof(lsfs_file), 1);
  71. if ( !lsfs_disk_getattr(find_file, local_path, fsci) )
  72. {
  73. print("File not found");
  74. print_newline();
  75. }
  76. else
  77. {
  78. print("File has been read");
  79. print_newline();
  80. }
  81. /*
  82. print_newline();
  83. print("Buffer_address: ");
  84. dump_ax(parameter_struct.buffer_address);
  85. print_newline();
  86. print("Buffer_segmnent: ");
  87. dump_ax(parameter_struct.buffer_segment);
  88. */
  89. lsfs_disk_read_data_from_file(find_file, parameter_struct.buffer_size, parameter_struct.buffer_address, (long) 0x0, parameter_struct.buffer_segment);
  90. } break;
  91. case SERIVCE_READ_DATA:
  92. {
  93. /*
  94. What do we need to know:
  95. path
  96. Buffer:
  97. destination_segment
  98. destination_address
  99. buffer_size
  100. offset_into_file
  101. */
  102. print("Hit READ case");
  103. } break;
  104. case SERIVCE_WRITE_DATA:
  105. {
  106. print("Hit WRITE case");
  107. } break;
  108. case SERIVCE_WRITE_FS_INFO:
  109. {
  110. /* print_newline(); */
  111. print(fsci->filesystem_information);
  112. /* print_newline(); */
  113. } break;
  114. default:
  115. {
  116. print("Default case: ");
  117. dump_ax(service_action);
  118. }
  119. }
  120. return 0;
  121. }
  122. /* void load_*/