diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9575c36 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.s +*.out diff --git a/lsfs.s b/lsfs.s deleted file mode 100644 index 06f7ad1..0000000 --- a/lsfs.s +++ /dev/null @@ -1,2469 +0,0 @@ -! 1 -! 1 # 1 "implementation/lsfs.c" -! 1 # 1 "implementation/../std_singos/stdio.h" -! 1 void print(string); -!BCC_EOS -! 2 void* dump_ax_return(input); -!BCC_EOS -! 3 -! 4 void print(string) -! 5 char* string; -export _print -_print: -!BCC_EOS -! 6 { -! 7 #asm -!BCC_ASM -_print.string set 2 - - push bp - mov bp,sp - mov si,4[bp] - call 0x0000:0x7C47 - pop bp -! 13 endasm -!BCC_ENDASM -! 14 } -ret -! 15 -! 16 void print_stack(argument) -! 17 { -export _print_stack -_print_stack: -! 18 #asm -!BCC_ASM -_print_stack.argument set 2 - - push bp - mov bp,sp - push ds - push ax - - mov ax, ss - mov ds, ax - mov si,4[bp] - call 0x0000:0x7C47 - - pop ax - pop ds - pop bp -! 32 endasm -!BCC_ENDASM -! 33 } -ret -! 34 -! 35 void* dump_ax_return(input) -! 36 void* input; -export _dump_ax_return -_dump_ax_return: -!BCC_EOS -! 37 { -! 38 return input; -push bp -mov bp,sp -push di -push si -mov ax,4[bp] -pop si -pop di -pop bp -ret -!BCC_EOS -! 39 } -! 40 -! 41 void dump_ax(input) -! 42 void* input; -export _dump_ax -_dump_ax: -!BCC_EOS -! 43 { -! 44 dump_ax_return(input) -push bp -mov bp,sp -push di -push si -! 45 #asm -! Debug: list * void input = [S+6+2] (used reg = ) -push 4[bp] -! Debug: func () * void = dump_ax_return+0 (used reg = ) -call _dump_ax_return -inc sp -inc sp -!BCC_EOS -!BCC_ASM -_dump_ax.input set 8 -.dump_ax.input set 4 - push bp - mov bp,sp - call 0x000:0x7C2A - pop bp -! 50 endasm -!BCC_ENDASM -!BCC_EOS -! 51 } -pop si -pop di -pop bp -ret -! 52 -! 53 void print_newline() -! 54 { -export _print_newline -_print_newline: -! 55 #asm -!BCC_ASM - - printCRLF: - mov ah, #0xE - mov al, #13 - int #0x10 - mov al, #10 - int #0x10 - ret -! 63 endasm -!BCC_ENDASM -! 64 } -ret -! 65 # 1 "implementation/../std_singos/stdlib.h" -! 1 unsigned int global_heap_start = 0; -.data -export _global_heap_start -_global_heap_start: -.word 0 -!BCC_EOS -! 2 unsigned int global_heap_end = 0; -export _global_heap_end -_global_heap_end: -.word 0 -!BCC_EOS -! 3 unsigned int global_heap_next = 0; -export _global_heap_next -_global_heap_next: -.word 0 -!BCC_EOS -! 4 -! 5 void* malloc(num_bytes); -!BCC_EOS -! 6 void* calloc(number_elements, size); -!BCC_EOS -! 7 int set_heap_settings(param_start, param_end); -!BCC_EOS -! 8 unsigned int get_heap_next(); -!BCC_EOS -! 9 -! 10 void* malloc(num_bytes) -! 11 int num_bytes; -.text -export _malloc -_malloc: -!BCC_EOS -! 12 { -! 13 unsigned int allocated_pointer = global_heap_next; -push bp -mov bp,sp -push di -push si -dec sp -dec sp -! Debug: eq unsigned int = [global_heap_next+0] to unsigned int allocated_pointer = [S+8-8] (used reg = ) -mov ax,[_global_heap_next] -mov -6[bp],ax -!BCC_EOS -! 14 global_heap_next = global_heap_next + num_bytes; -! Debug: add int num_bytes = [S+8+2] to unsigned int = [global_heap_next+0] (used reg = ) -mov ax,[_global_heap_next] -add ax,4[bp] -! Debug: eq unsigned int = ax+0 to unsigned int = [global_heap_next+0] (used reg = ) -mov [_global_heap_next],ax -!BCC_EOS -! 15 if (global_heap_next > global_heap_end) -! Debug: gt unsigned int = [global_heap_end+0] to unsigned int = [global_heap_next+0] (used reg = ) -mov ax,[_global_heap_next] -cmp ax,[_global_heap_end] -jbe .1 -.2: -! 16 { -! 17 return 0; -xor ax,ax -inc sp -inc sp -pop si -pop di -pop bp -ret -!BCC_EOS -! 18 } -! 19 -! 20 return allocated_pointer; -.1: -mov ax,-6[bp] -inc sp -inc sp -pop si -pop di -pop bp -ret -!BCC_EOS -! 21 } -! 22 -! 23 void* calloc(number_elements, size) -! 24 unsigned int number_elements; -export _calloc -_calloc: -!BCC_EOS -! 25 unsigned int size; -!BCC_EOS -! 26 { -! 27 int i; -!BCC_EOS -! 28 char* temp_pointer; -!BCC_EOS -! 29 unsigned int num_bytes = number_elements * size; -push bp -mov bp,sp -push di -push si -add sp,*-6 -! Debug: mul unsigned int size = [S+$C+4] to unsigned int number_elements = [S+$C+2] (used reg = ) -mov ax,4[bp] -mov cx,6[bp] -imul cx -! Debug: eq unsigned int = ax+0 to unsigned int num_bytes = [S+$C-$C] (used reg = ) -mov -$A[bp],ax -!BCC_EOS -! 30 void* allocated_pointer = global_heap_next; -dec sp -dec sp -! Debug: eq unsigned int = [global_heap_next+0] to * void allocated_pointer = [S+$E-$E] (used reg = ) -mov bx,[_global_heap_next] -mov -$C[bp],bx -!BCC_EOS -! 31 global_heap_next = global_heap_next + num_bytes; -! Debug: add unsigned int num_bytes = [S+$E-$C] to unsigned int = [global_heap_next+0] (used reg = ) -mov ax,[_global_heap_next] -add ax,-$A[bp] -! Debug: eq unsigned int = ax+0 to unsigned int = [global_heap_next+0] (used reg = ) -mov [_global_heap_next],ax -!BCC_EOS -! 32 if (global_heap_next > global_heap_end) -! Debug: gt unsigned int = [global_heap_end+0] to unsigned int = [global_heap_next+0] (used reg = ) -mov ax,[_global_heap_next] -cmp ax,[_global_heap_end] -jbe .3 -.4: -! 33 { -! 34 return 0; -xor ax,ax -add sp,*8 -pop si -pop di -pop bp -ret -!BCC_EOS -! 35 } -! 36 -! 37 -! 38 temp_pointer = allocated_pointer; -.3: -! Debug: eq * void allocated_pointer = [S+$E-$E] to * char temp_pointer = [S+$E-$A] (used reg = ) -mov bx,-$C[bp] -mov -8[bp],bx -!BCC_EOS -! 39 for (i = 0; i < num_bytes; ++i) -! Debug: eq int = const 0 to int i = [S+$E-8] (used reg = ) -xor ax,ax -mov -6[bp],ax -!BCC_EOS -!BCC_EOS -! 40 { -jmp .7 -.8: -! 41 *temp_pointer = 0; -mov bx,-8[bp] -! Debug: eq int = const 0 to char = [bx+0] (used reg = ) -xor al,al -mov [bx],al -!BCC_EOS -! 42 temp_pointer++; -! Debug: postinc * char temp_pointer = [S+$E-$A] (used reg = ) -mov bx,-8[bp] -inc bx -mov -8[bp],bx -!BCC_EOS -! 43 } -! 44 -! 45 return allocated_pointer; -.6: -! Debug: preinc int i = [S+$E-8] (used reg = ) -mov ax,-6[bp] -inc ax -mov -6[bp],ax -.7: -! Debug: lt unsigned int num_bytes = [S+$E-$C] to int i = [S+$E-8] (used reg = ) -mov ax,-6[bp] -cmp ax,-$A[bp] -jb .8 -.9: -.5: -mov ax,-$C[bp] -add sp,*8 -pop si -pop di -pop bp -ret -!BCC_EOS -! 46 } -! 47 -! 48 int set_heap_settings(param_start, param_end) -! Register BX used in function calloc -! 49 unsigned int param_start; -export _set_heap_settings -_set_heap_settings: -!BCC_EOS -! 50 unsigned int param_end; -!BCC_EOS -! 51 { -! 52 global_heap_start = param_start; -push bp -mov bp,sp -push di -push si -! Debug: eq unsigned int param_start = [S+6+2] to unsigned int = [global_heap_start+0] (used reg = ) -mov ax,4[bp] -mov [_global_heap_start],ax -!BCC_EOS -! 53 global_heap_next = param_start; -! Debug: eq unsigned int param_start = [S+6+2] to unsigned int = [global_heap_next+0] (used reg = ) -mov ax,4[bp] -mov [_global_heap_next],ax -!BCC_EOS -! 54 global_heap_end = param_end; -! Debug: eq unsigned int param_end = [S+6+4] to unsigned int = [global_heap_end+0] (used reg = ) -mov ax,6[bp] -mov [_global_heap_end],ax -!BCC_EOS -! 55 return 0; -xor ax,ax -pop si -pop di -pop bp -ret -!BCC_EOS -! 56 } -! 57 -! 58 unsigned int get_heap_next() -! 59 { -export _get_heap_next -_get_heap_next: -! 60 return global_heap_n -push bp -mov bp,sp -push di -push si -! 60 ext; -mov ax,[_global_heap_next] -pop si -pop di -pop bp -ret -!BCC_EOS -! 61 # 19 "implementation/../main.h" -! 19 } -! 20 # 2 "implementation/../std_singos/string.h" -! 2 typedef struct Length_String { -! 3 short dynamic; -!BCC_EOS -! 4 unsigned int length; -!BCC_EOS -! 5 char *chars; -!BCC_EOS -! 6 } Length_String; -!BCC_EOS -! 7 -! 8 typedef struct String_Array { -! 9 unsigned int length; -!BCC_EOS -! 10 Length_String **strings; -!BCC_EOS -! 11 } String_Array; -!BCC_EOS -! 12 -! 13 void strcpy (destination, destination_segment, source, source_segment ); -!BCC_EOS -! 14 int strlen (source, source_segment); -!BCC_EOS -! 15 void memcpy (destination, destination_segment, source, source_segment, num_bytes ); -!BCC_EOS -! 16 -! 17 -! 18 String_Array *string_split_c(string, delim, keep_delim); -!BCC_EOS -! 19 Length_String *make_length_string(length, chars); -!BCC_EOS -! 20 Length_String *make_length_string_c(cstring); -!BCC_EOS -! 21 String_Array *length_string_split(string, delim, keep_delim); -!BCC_EOS -! 22 String_Array *create_length_string_array(array_size); -!BCC_EOS -! 23 Length_String *create_length_string(length, chars); -!BCC_EOS -! 24 -! 25 -! 26 -! 27 int strlen (source, source_segment) -! 28 { -export _strlen -_strlen: -! 29 #asm -!BCC_ASM -_strlen.source set 2 -_strlen.source_segment set 4 - - -push bp - mov bp,sp - push ds - push bx - - mov ax, 6[bp]; - mov ds, ax - - mov bx, 4[bp]; - - label_strlen: - mov cx, #0x0 ; Set counte to zero - .label_strlen_loop: - mov BYTE al, [bx] - cmp al, #0x0 - je .label_strlen_done - inc cx ; Count 1 - inc bx ; Look at next char - jmp .label_strlen_loop - .label_strlen_done: - mov ax, cx - - pop bx - pop ds - pop bp -! 57 endasm -!BCC_ENDASM -! 58 } -ret -! 59 -! 60 void strcpy (destination, destination_segment, source, source_segment ) -! 61 char *destination; -export _strcpy -_strcpy: -!BCC_EOS -! 62 int destination_segment; -!BCC_EOS -! 63 char *source; -!BCC_EOS -! 64 int source_segment; -!BCC_EOS -! 65 { -! 66 #asm -!BCC_ASM -_strcpy.source set 6 -_strcpy.destination set 2 -_strcpy.source_segment set 8 -_strcpy.destination_segment set 4 - ; copy two strings - ; IN si: the first (zero terminated) string - ; IN di: the second (zero terminated) string - ; OUT SF and ZF (same semantics as cmp) - -! 72 76 - - push bp - mov bp,sp - label_strcpy: - push ax - push bx - push di - push es - push si - push ds - mov ax, 4[bp]; ; - mov di, ax - mov ax, 6[bp]; ; - mov es, ax - mov ax, 8[bp]; ; - mov si, ax - mov ax, 10[bp]; ; - mov ds, ax - mov cx, 0x050 ;TODO(Jrn) Hardcded number of bytes to copy - .label_strcpy_loop: - movsb - cmp cx, 0x0 - je .label_strcpy_end - dec cx - jmp .label_strcpy_loop - .label_strcpy_end: - pop ds - pop si - pop es - pop di - pop bx - pop ax - pop bp - -! 110 endasm -!BCC_ENDASM -! 111 } -ret -! 112 -! 113 void memcpy (destination, destination_segment, source, source_segment, num_bytes) -! 114 void *destination; -export _memcpy -_memcpy: -!BCC_EOS -! 115 int destination_segment; -!BCC_EOS -! 116 void *source; -!BCC_EOS -! 117 int source_segment; -!BCC_EOS -! 118 int num_bytes; -!BCC_EOS -! 119 { -! 120 #asm -!BCC_ASM -_memcpy.source set 6 -_memcpy.destination set 2 -_memcpy.num_bytes set $A -_memcpy.source_segment set 8 -_memcpy.destination_segment set 4 - ; copy two strings - ; IN si: the first (zero terminated) string - ; IN di: the second (zero terminated) string - ; OUT SF and ZF (same semantics as cmp) - -! 126 131 - - push bp - mov bp,sp - label_memcpy: - push ax - push bx - push di - push es - push si - push ds - mov ax, 4[bp]; ; - mov di, ax - mov ax, 6[bp]; ; - mov es, ax - mov ax, 8[bp]; ; - mov si, ax - mov ax, 10[bp]; ; - mov ds, ax - mov cx, 12[bp]; - .label_memcpy_loop: - movsb - cmp cx, 0x0 - je .label_memcpy_end - dec cx - jmp .label_memcpy_loop - .label_memcpy_end: - pop ds - pop si - pop es - pop di - pop bx - pop ax - pop bp - -! 165 endasm -!BCC_ENDASM -! 166 } -ret -! 167 -! 168 int strcmp(source_1, source_2) -! 169 char* source_1; -export _strcmp -_strcmp: -!BCC_EOS -! 170 char* source_2; -!BCC_EOS -! 171 { -! 172 int i; -!BCC_EOS -! 173 int count; -!BCC_EOS -! 174 -! 175 count = strlen(source_1); -push bp -mov bp,sp -push di -push si -add sp,*-4 -! Debug: list * char source_1 = [S+$A+2] (used reg = ) -push 4[bp] -! Debug: func () int = strlen+0 (used reg = ) -call _strlen -inc sp -inc sp -! Debug: eq int = ax+0 to int count = [S+$A-$A] (used reg = ) -mov -8[bp],ax -!BCC_EOS -! 176 if (count != strlen(source_2)) -! Debug: list * char source_2 = [S+$A+4] (used reg = ) -push 6[bp] -! Debug: func () int = strlen+0 (used reg = ) -call _strlen -inc sp -inc sp -! Debug: ne int = ax+0 to int count = [S+$A-$A] (used reg = ) -! Debug: expression subtree swapping -cmp ax,-8[bp] -je .A -.B: -! 177 { -! 178 -! 179 } -! 180 -! 181 -! 182 for (i = 0; i < count; ++i) -.A: -! Debug: eq int = const 0 to int i = [S+$A-8] (used reg = ) -xor ax,ax -mov -6[bp],ax -!BCC_EOS -!BCC_EOS -! 183 { -jmp .E -.F: -! 184 if(source_1[i] != source_2[i]) -! Debug: ptradd int i = [S+$A-8] to * char source_2 = [S+$A+4] (used reg = ) -mov ax,-6[bp] -add ax,6[bp] -mov bx,ax -! Debug: ptradd int i = [S+$A-8] to * char source_1 = [S+$A+2] (used reg = bx) -mov ax,-6[bp] -add ax,4[bp] -mov si,ax -! Debug: ne char = [bx+0] to char = [si+0] (used reg = ) -mov al,[si] -cmp al,[bx] -je .10 -.11: -! 185 { -! 186 return -1; -mov ax,*-1 -add sp,*4 -pop si -pop di -pop bp -ret -!BCC_EOS -! 187 } -! 188 } -.10: -! 189 -! 190 return 0; -.D: -! Debug: preinc int i = [S+$A-8] (used reg = ) -mov ax,-6[bp] -inc ax -mov -6[bp],ax -.E: -! Debug: lt int count = [S+$A-$A] to int i = [S+$A-8] (used reg = ) -mov ax,-6[bp] -cmp ax,-8[bp] -jl .F -.12: -.C: -xor ax,ax -add sp,*4 -pop si -pop di -pop bp -ret -!BCC_EOS -! 191 # 223 -! 223 -! 224 } -! 225 -! 226 String_Array *string_split_c(string, delim, keep_delim) -! Register BX SI used in function strcmp -! 227 char *string; -export _string_split_c -_string_split_c: -!BCC_EOS -! 228 char delim; -!BCC_EOS -! 229 short keep_delim; -!BCC_EOS -! 230 { -! 231 return length_string_split(make_length_string_c(string), delim, keep_delim); -push bp -mov bp,sp -push di -push si -! Debug: list short keep_delim = [S+6+6] (used reg = ) -push 8[bp] -! Debug: list char delim = [S+8+4] (used reg = ) -mov al,6[bp] -xor ah,ah -push ax -! Debug: list * char string = [S+$A+2] (used reg = ) -push 4[bp] -! Debug: func () * struct Length_String = make_length_string_c+0 (used reg = ) -call _make_length_string_c -inc sp -inc sp -! Debug: list * struct Length_String = ax+0 (used reg = ) -push ax -! Debug: func () * struct String_Array = length_string_split+0 (used reg = ) -call _length_string_split -add sp,*6 -! Debug: cast * struct String_Array = const 0 to * struct String_Array = ax+0 (used reg = ) -pop si -pop di -pop bp -ret -!BCC_EOS -! 232 } -! 233 -! 234 Length_String *make_length_string_c(cstring) -! 235 char *cstring; -export _make_length_string_c -_make_length_string_c: -!BCC_EOS -! 236 { -! 237 return make_length_string(strlen(cstring, 0x7e0), cstring); -push bp -mov bp,sp -push di -push si -! Debug: list * char cstring = [S+6+2] (used reg = ) -push 4[bp] -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: list * char cstring = [S+$A+2] (used reg = ) -push 4[bp] -! Debug: func () int = strlen+0 (used reg = ) -call _strlen -add sp,*4 -! Debug: list int = ax+0 (used reg = ) -push ax -! Debug: func () * struct Length_String = make_length_string+0 (used reg = ) -call _make_length_string -add sp,*4 -! Debug: cast * struct Length_String = const 0 to * struct Length_String = ax+0 (used reg = ) -pop si -pop di -pop bp -ret -!BCC_EOS -! 238 } -! 239 -! 240 Length_String *make_length_string(length, chars) -! 241 unsigned int length; -export _make_length_string -_make_length_string: -!BCC_EOS -! 242 char *chars; -!BCC_EOS -! 243 { -! 244 -! 245 Length_String *legth_string = malloc -! 245 (sizeof(Length_String)); -push bp -mov bp,sp -push di -push si -dec sp -dec sp -! Debug: list int = const 6 (used reg = ) -mov ax,*6 -push ax -! Debug: func () * void = malloc+0 (used reg = ) -call _malloc -inc sp -inc sp -! Debug: eq * void = ax+0 to * struct Length_String legth_string = [S+8-8] (used reg = ) -mov -6[bp],ax -!BCC_EOS -! 246 char *copy = malloc(length + 1); -dec sp -dec sp -! Debug: add int = const 1 to unsigned int length = [S+$A+2] (used reg = ) -mov ax,4[bp] -! Debug: list unsigned int = ax+1 (used reg = ) -inc ax -push ax -! Debug: func () * void = malloc+0 (used reg = ) -call _malloc -inc sp -inc sp -! Debug: eq * void = ax+0 to * char copy = [S+$A-$A] (used reg = ) -mov -8[bp],ax -!BCC_EOS -! 247 memcpy(copy, 0x7e0, chars, 0x7e0, length); -! Debug: list unsigned int length = [S+$A+2] (used reg = ) -push 4[bp] -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: list * char chars = [S+$E+4] (used reg = ) -push 6[bp] -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: list * char copy = [S+$12-$A] (used reg = ) -push -8[bp] -! Debug: func () void = memcpy+0 (used reg = ) -call _memcpy -add sp,*$A -!BCC_EOS -! 248 copy[length] = '\0'; -! Debug: ptradd unsigned int length = [S+$A+2] to * char copy = [S+$A-$A] (used reg = ) -mov ax,4[bp] -add ax,-8[bp] -mov bx,ax -! Debug: eq int = const 0 to char = [bx+0] (used reg = ) -xor al,al -mov [bx],al -!BCC_EOS -! 249 -! 250 legth_string->dynamic = 0; -mov bx,-6[bp] -! Debug: eq int = const 0 to short = [bx+0] (used reg = ) -xor ax,ax -mov [bx],ax -!BCC_EOS -! 251 legth_string->length = length; -mov bx,-6[bp] -! Debug: eq unsigned int length = [S+$A+2] to unsigned int = [bx+2] (used reg = ) -mov ax,4[bp] -mov 2[bx],ax -!BCC_EOS -! 252 legth_string->chars = (char *)chars; -mov bx,-6[bp] -! Debug: eq * char chars = [S+$A+4] to * char = [bx+4] (used reg = ) -mov si,6[bp] -mov 4[bx],si -!BCC_EOS -! 253 -! 254 return legth_string; -mov ax,-6[bp] -add sp,*4 -pop si -pop di -pop bp -ret -!BCC_EOS -! 255 } -! 256 -! 257 String_Array *length_string_split(string, delim, keep_delim) -! Register BX SI used in function make_length_string -! 258 Length_String *string; -export _length_string_split -_length_string_split: -!BCC_EOS -! 259 char delim; -!BCC_EOS -! 260 short keep_delim; -!BCC_EOS -! 261 { -! 262 unsigned int i; -!BCC_EOS -! 263 unsigned int last; -!BCC_EOS -! 264 -! 265 unsigned int count = 0; -push bp -mov bp,sp -push di -push si -add sp,*-6 -! Debug: eq int = const 0 to unsigned int count = [S+$C-$C] (used reg = ) -xor ax,ax -mov -$A[bp],ax -!BCC_EOS -! 266 unsigned int insert_index = 0; -dec sp -dec sp -! Debug: eq int = const 0 to unsigned int insert_index = [S+$E-$E] (used reg = ) -xor ax,ax -mov -$C[bp],ax -!BCC_EOS -! 267 String_Array *result; -!BCC_EOS -! 268 int k; -!BCC_EOS -! 269 -! 270 i = 0; -add sp,*-4 -! Debug: eq int = const 0 to unsigned int i = [S+$12-8] (used reg = ) -xor ax,ax -mov -6[bp],ax -!BCC_EOS -! 271 last = 0; -! Debug: eq int = const 0 to unsigned int last = [S+$12-$A] (used reg = ) -xor ax,ax -mov -8[bp],ax -!BCC_EOS -! 272 while(i < string->length) { -jmp .14 -.15: -! 273 if (string->chars[i] == delim) { -mov bx,4[bp] -! Debug: ptradd unsigned int i = [S+$12-8] to * char = [bx+4] (used reg = ) -mov ax,-6[bp] -add ax,4[bx] -mov bx,ax -! Debug: logeq char delim = [S+$12+4] to char = [bx+0] (used reg = ) -mov al,[bx] -cmp al,6[bp] -jne .16 -.17: -! 274 if (i > last+1) { -! Debug: add int = const 1 to unsigned int last = [S+$12-$A] (used reg = ) -mov ax,-8[bp] -! Debug: gt unsigned int = ax+1 to unsigned int i = [S+$12-8] (used reg = ) -inc ax -cmp ax,-6[bp] -jae .18 -.19: -! 275 ++count; -! Debug: preinc unsigned int count = [S+$12-$C] (used reg = ) -mov ax,-$A[bp] -inc ax -mov -$A[bp],ax -!BCC_EOS -! 276 } -! 277 last = i; -.18: -! Debug: eq unsigned int i = [S+$12-8] to unsigned int last = [S+$12-$A] (used reg = ) -mov ax,-6[bp] -mov -8[bp],ax -!BCC_EOS -! 278 } -! 279 ++i; -.16: -! Debug: preinc unsigned int i = [S+$12-8] (used reg = ) -mov ax,-6[bp] -inc ax -mov -6[bp],ax -!BCC_EOS -! 280 } -! 281 if (i > last+1) { -.14: -mov bx,4[bp] -! Debug: lt unsigned int = [bx+2] to unsigned int i = [S+$12-8] (used reg = ) -mov ax,-6[bp] -cmp ax,2[bx] -jb .15 -.1A: -.13: -! Debug: add int = const 1 to unsigned int last = [S+$12-$A] (used reg = ) -mov ax,-8[bp] -! Debug: gt unsigned int = ax+1 to unsigned int i = [S+$12-8] (used reg = ) -inc ax -cmp ax,-6[bp] -jae .1B -.1C: -! 282 ++count; -! Debug: preinc unsigned int count = [S+$12-$C] (used reg = ) -mov ax,-$A[bp] -inc ax -mov -$A[bp],ax -!BCC_EOS -! 283 } -! 284 -! 285 result = create_length_string_array(count); -.1B: -! Debug: list unsigned int count = [S+$12-$C] (used reg = ) -push -$A[bp] -! Debug: func () * struct String_Array = create_length_string_array+0 (used reg = ) -call _create_length_string_array -inc sp -inc sp -! Debug: eq * struct String_Array = ax+0 to * struct String_Array result = [S+$12-$10] (used reg = ) -mov -$E[bp],ax -!BCC_EOS -! 286 -! 287 if (keep_delim) -mov ax,8[bp] -test ax,ax -je .1D -.1E: -! 288 { -! 289 k = 0; -! Debug: eq int = const 0 to int k = [S+$12-$12] (used reg = ) -xor ax,ax -mov -$10[bp],ax -!BCC_EOS -! 290 } -! 291 else -! 292 { -jmp .1F -.1D: -! 293 k = 1; -! Debug: eq int = const 1 to int k = [S+$12-$12] (used reg = ) -mov ax,*1 -mov -$10[bp],ax -!BCC_EOS -! 294 } -! 295 -! 296 i = 0; -.1F: -! Debug: eq int = const 0 to unsigned int i = [S+$12-8] (used reg = ) -xor ax,ax -mov -6[bp],ax -!BCC_EOS -! 297 last = 0; -! Debug: eq int = const 0 to unsigned int last = [S+$12-$A] (used reg = ) -xor ax,ax -mov -8[bp],ax -!BCC_EOS -! 298 while(i < string->length) { -jmp .21 -.22: -! 299 if (string->chars[i] == delim) { -mov bx,4[bp] -! Debug: ptradd unsigned int i = [S+$12-8] to * char = [bx+4] (used reg = ) -mov ax,-6[bp] -add ax,4[bx] -mov bx,ax -! Debug: logeq char delim = [S+$12+4] to char = [bx+0] (used reg = ) -mov al,[bx] -cmp al,6[bp] -jne .23 -.24: -! 300 if (i > last+1) { -! Debug: add int = const 1 to unsigned int last = [S+$12-$A] (used reg = ) -mov ax,-8[bp] -! Debug: gt unsigned int = ax+1 to unsigned int i = [S+$12-8] (used reg = ) -inc ax -cmp ax,-6[bp] -jae .25 -.26: -! 301 result->strings[insert_index++] = create_length_string(i-(last+k), string->chars+(last+k)); -! Debug: add int k = [S+$12-$12] to unsigned int last = [S+$12-$A] (used reg = ) -mov ax,-8[bp] -add ax,-$10[bp] -mov bx,4[bp] -! Debug: ptradd unsigned int = ax+0 to * char = [bx+4] (used reg = ) -add ax,4[bx] -! Debug: list * char = ax+0 (used reg = ) -push ax -! Debug: add int k = [S+$14-$12] to unsigned int last = [S+$14-$A] (used reg = ) -mov ax,-8[bp] -add ax,-$10[bp] -! Debug: sub unsigned int = ax+0 to unsigned int i = [S+$14-8] (used reg = ) -push ax -mov ax,-6[bp] -sub ax,-$14[bp] -inc sp -inc sp -! Debug: list unsigned int = ax+0 (used reg = ) -push ax -! Debug: func () * struct Length_String = create_length_string+0 (used reg = ) -call _create_length_string -add sp,*4 -push ax -! Debug: postinc unsigned int insert_index = [S+$14-$E] (used reg = ) -mov ax,-$C[bp] -inc ax -mov -$C[bp],ax -mov bx,-$E[bp] -! Debug: ptradd unsigned int = ax-1 to * * struct Length_String = [bx+2] (used reg = ) -dec ax -shl ax,*1 -add ax,2[bx] -mov bx,ax -! Debug: eq * struct Length_String (temp) = [S+$14-$14] to * struct Length_String = [bx+0] (used reg = ) -mov si,-$12[bp] -mov [bx],si -inc sp -inc sp -!BCC_EOS -! 302 } -! 303 last = i; -.25: -! Debug: eq unsigned int i = [S+$12-8] to unsigned int last = [S+$12-$A] (used reg = ) -mov ax,-6[bp] -mov -8[bp],ax -!BCC_EOS -! 304 } -! 305 ++i; -.23: -! Debug: preinc unsigned int i = [S+$12-8] (used reg = ) -mov ax,-6[bp] -inc ax -mov -6[bp],ax -!BCC_EOS -! 306 } -! 307 if (i > last+1) { -.21: -mov bx,4[bp] -! Debug: lt unsigned int = [bx+2] to unsigned int i = [S+$12-8] (used reg = ) -mov ax,-6[bp] -cmp ax,2[bx] -jb .22 -.27: -.20: -! Debug: add int = const 1 to unsigned int last = [S+$12-$A] (used reg = ) -mov ax,-8[bp] -! Debug: gt unsigned int = ax+1 to unsigned int i = [S+$12-8] (used reg = ) -inc ax -cmp ax,-6[bp] -jae .28 -.29: -! 308 result->strings[insert_index++] = create_length_string(i-(last+k), ((string->chars)+(last+k))); -! Debug: add int k = [S+$12-$12] to unsigned int last = [S+$12-$A] (used reg = ) -mov ax,-8[bp] -add ax,-$10[bp] -mov bx,4[bp] -! Debug: ptradd unsigned int = ax+0 to * char = [bx+4] (used reg = ) -add ax,4[bx] -! Debug: list * char = ax+0 (used reg = ) -push ax -! Debug: add int k = [S+$14-$12] to unsigned int last = [S+$14-$A] (used reg = ) -mov ax,-8[bp] -add ax,-$10[bp] -! Debug: sub unsigned int = ax+0 to unsigned int i = [S+$14-8] (used reg = ) -push ax -mov ax,-6[bp] -sub ax,-$14[bp] -inc sp -inc sp -! Debug: list unsigned int = ax+0 (used reg = ) -push ax -! Debug: func () * struct Length_String = create_length_string+0 (used reg = ) -call _create_length_string -add sp,*4 -push ax -! Debug: postinc unsigned int insert_index = [S+$14-$E] (used reg = ) -mov ax,-$C[bp] -inc ax -mov -$C[bp],ax -mov bx,-$E[bp] -! Debug: ptradd unsigned int = ax-1 to * * struct Length_String = [bx+2] (used reg = ) -dec ax -shl ax,*1 -add ax,2[bx] -mov bx,ax -! Debug: eq * struct Length_String (temp) = [S+$14-$14] to * struct Length_String = [bx+0] (used reg = ) -mov si,-$12[bp] -mov [bx],si -inc sp -inc sp -!BCC_EOS -! 309 } -! 310 -! 311 return result; -.28: -mov ax,-$E[bp] -add sp,*$C -pop si -pop di -pop bp -ret -!BCC_EOS -! 312 -! 313 } -! 314 -! 315 String_Array *create_length_string_array(array_size) -! Register BX SI used in function length_string_split -! 316 int array_size; -export _create_length_string_array -_create_length_string_array: -!BCC_EOS -! 317 { -! 318 String_Array *result = malloc(sizeof(String_Array)); -push bp -mov bp,sp -push di -push si -dec sp -dec sp -! Debug: list int = const 4 (used reg = ) -mov ax,*4 -push ax -! Debug: func () * void = malloc+0 (used reg = ) -call _malloc -inc sp -inc sp -! Debug: eq * void = ax+0 to * struct String_Array result = [S+8-8] (used reg = ) -mov -6[bp],ax -!BCC_EOS -! 319 result->length = array_size; -mov bx,-6[bp] -! Debug: eq int array_size = [S+8+2] to unsigned int = [bx+0] (used reg = ) -mov ax,4[bp] -mov [bx],ax -!BCC_EOS -! 320 result->strings = malloc(array_size * sizeof(Length_String)); -! Debug: mul int = const 6 to int array_size = [S+8+2] (used reg = ) -mov ax,4[bp] -mov dx,ax -shl ax,*1 -add ax,dx -shl ax,*1 -! Debug: list int = ax+0 (used reg = ) -push ax -! Debug: func () * void = malloc+0 (used reg = ) -call _malloc -inc sp -inc sp -mov bx,-6[bp] -! Debug: eq * void = ax+0 to * * struct Length_String = [bx+2] (used reg = ) -mov 2[bx],ax -!BCC_EOS -! 321 return result; -mov ax,-6[bp] -inc sp -inc sp -pop si -pop di -pop bp -ret -!BCC_EOS -! 322 } -! 323 -! 324 -! 325 Length_String *create_length_string(length, chars) -! Register BX used in function create_length_string_array -! 326 unsigned int length; -export _create_length_string -_create_length_string: -!BCC_EOS -! 327 char *chars; -!BCC_EOS -! 328 { -! 329 -! 330 Length_String *legth_string = malloc(sizeof(Length_String)); -push bp -mov bp,sp -push di -push si -dec sp -dec sp -! Debug: list int = const 6 (used reg = ) -mov ax,*6 -push ax -! Debug: func () * void = malloc+0 (used reg = ) -call _malloc -inc sp -inc sp -! Debug: eq * void = ax+0 to * struct Length_String legth_string = [S+8-8] (used reg = ) -mov -6[bp],ax -!BCC_EOS -! 331 char *copy = malloc(length + 1); -dec sp -dec sp -! Debug: add int = const 1 to unsigned int length = [S+$A+2] (used reg = ) -mov ax,4[bp] -! Debug: list unsigned int = ax+1 (used reg = ) -inc ax -push ax -! Debug: func () * void = malloc+0 (used reg = ) -call _malloc -inc sp -inc sp -! Debug: eq * void = ax+0 to * char copy = [S+$A-$A] (used reg = ) -mov -8[bp],ax -!BCC_EOS -! 332 memcpy(copy, 0x7e0, chars, 0x7e0, length); -! Debug: list unsigned int length = [S+$A+2] (used reg = ) -push 4[bp] -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: list * char chars = [S+$E+4] (used reg = ) -push 6[bp] -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: list * char copy = [S+$12-$A] (used reg = ) -push -8[bp] -! Debug: func () void = memcpy+0 (used reg = ) -call _memcpy -add sp,*$A -!BCC_EOS -! 333 copy[length] = '\0'; -! Debug: ptradd unsigned int length = [S+$A+2] to * char copy = [S+$A-$A] (used reg = ) -mov ax,4[bp] -add ax,-8[bp] -mov bx,ax -! Debug: eq int = const 0 to char = [bx+0] (used reg = ) -xor al,al -mov [bx],al -!BCC_EOS -! 334 -! 335 legth_string->dynamic = 1; -mov bx,-6[bp] -! Debug: eq int = const 1 to short = [bx+0] (used reg = ) -mov ax,*1 -mov [bx],ax -!BCC_EOS -! 336 legth_string->length = length; -mov bx,-6[bp] -! Debug: eq unsigned int length = [S+$A+2] to unsigned int = [bx+2] (used reg = ) -mov ax,4[bp] -mov 2[bx],ax -!BCC_EOS -! 337 legth_string->chars = copy; -mov bx,-6[bp] -! Debug: eq * char copy = [S+$A-$A] to * char = [bx+4] (used reg = ) -mov si,-8[bp] -mov 4[bx],si -!BCC_EOS -! 338 -! 339 return legth_string; -mov ax,-6[bp] -add sp,*4 -pop si -pop di -pop bp -ret -!BCC_EOS -! 340 # 21 -! 20 "implementation/../main.h" -! 21 } -! 22 # 1 "implementation/../driver/disk.h" -! 1 int data_from_disk(index, number_sectors, data_buffer, data_buffer_segment); -! Register BX SI used in function create_length_string -!BCC_EOS -! 2 int disk_service_read_data_from_disk(index, number_sectors, data_buffer, data_buffer_segment); -!BCC_EOS -! 3 -! 4 int disk_service_read_data_from_disk(index, number_sectors, data_buffer, data_buffer_segment) -! 5 long* index; -export _disk_service_read_data_from_disk -_disk_service_read_data_from_disk: -!BCC_EOS -! 6 long number_sectors; -!BCC_EOS -! 7 void* data_buffer; -!BCC_EOS -! 8 int data_buffer_segment; -!BCC_EOS -! 9 { -! 10 -! 11 #asm -!BCC_ASM -_disk_service_read_data_from_disk.data_buffer set 8 -_disk_service_read_data_from_disk.number_sectors set 4 -_disk_service_read_data_from_disk.data_buffer_segment set $A -_disk_service_read_data_from_disk.index set 2 - -! 13 define number_sectors 8[bp]; - - - - push bp - mov bp,sp - pusha - - lsfs_load_data: - mov ax, 4[bp]; - mov WORD [DAPACK.lba_addr_dw_low], ax - mov bx, 8[bp]; - mov WORD [DAPACK.blkcnt], bx - mov cx, 12[bp]; - mov WORD [DAPACK.db_addr_segment], cx - mov dx, 10[bp]; ; - mov WORD [DAPACK.db_addr_offset], dx - mov si, #DAPACK ; address of - mov ah, #0x42 ; READ - mov dl, [global_disk_identifier] - int #0x13 - ;call 0x0000:0x7C2A - popa - pop bp - ret - - - DAPACK: - DAPACK.dap_Size: db 0x10 - DAPACK.rev_byte: db 0x0 - DAPACK.blkcnt: dw 0x0 - DAPACK.db_addr_offset: dw 0x0 - DAPACK.db_addr_segment: dw 0x0 - DAPACK.lba_addr_dw_low: dd 0x0 - DAPACK.lba_addr_dw_high: dd 0x0 - - global_disk_identifier: db 0x80 - -! 51 endasm -!BCC_ENDASM -! 52 } -ret -! 53 # 25 "implementation/../main.h" -! 25 void dump_ax(input); -!BCC_EOS -! 26 void print_stack(argument); -!BCC_EOS -! 27 void print_newline(); -!BCC_EOS -! 28 -! 29 typedef struct struct_partition_control partition_control; -!BCC_EOS -! 30 typedef struct File_System_Control_Information FSCI; -!BCC_EOS -! 31 typedef struct meta_information_format mif; -!BCC_EOS -! 32 typedef struct tag_record tag_record; -!BCC_EOS -! 33 typedef struct Parameter_Struct Parameter_Struct; -!BCC_EOS -! 34 -! 35 -! 36 typedef enum Service_Action -! 37 { -! 38 SERIVCE_LOAD_DISK = 1, -! 39 SERVICE_FIND_ENTRY = 2, -! 40 SERIVCE_READ_DATA = 3, -! 41 SERIVCE_WRITE_DATA = 4, -! 42 -! 43 } Service_Action; -!BCC_EOS -! 44 -! 45 struct File_System_Control_Information -! 46 { -! 47 char filesystem_information[256]; -!BCC_EOS -! 48 long master_table_index[2]; -!BCC_EOS -! 49 long this_partition_offset_on_disk[2]; -!BCC_EOS -! 50 long next_free_sector[2]; -!BCC_EOS -! 51 long next_uniqe_id[2]; -!BCC_EOS -! 52 long next_secto -! 52 r_reuse_pointer[2]; -!BCC_EOS -! 53 long last_sector_index_on_partition[2]; -!BCC_EOS -! 54 long maximum_sectors_on_disk[2]; -!BCC_EOS -! 55 long sector_size_on_disk[2]; -!BCC_EOS -! 56 long not_used[48]; -!BCC_EOS -! 57 -! 58 }; -!BCC_EOS -! 59 -! 60 -! 61 struct Parameter_Struct -! 62 { -! 63 char* path; -!BCC_EOS -! 64 char* new_path; -!BCC_EOS -! 65 int buffer_segment; -!BCC_EOS -! 66 int buffer_address; -!BCC_EOS -! 67 int buffer_size; -!BCC_EOS -! 68 int data_length; -!BCC_EOS -! 69 int byte_offset_into_file; -!BCC_EOS -! 70 short entry_kind; -!BCC_EOS -! 71 }; -!BCC_EOS -! 72 # 5 "implementation/lsfs.h" -! 5 typedef struct lsfs_file lsfs_file; -!BCC_EOS -! 6 typedef struct Directory_Table Directory_Table; -!BCC_EOS -! 7 typedef struct Table_Entry Table_Entry; -!BCC_EOS -! 8 -! 9 int lsfs_disk_getattr(find_file, path); -!BCC_EOS -! 10 int lsfs_disk_read_data_from_file(file, buffer_size, data, offset_to_next_entry); -!BCC_EOS -! 11 Directory_Table* lsfs_find_directory(path, drop_filename); -!BCC_EOS -! 12 -! 13 typedef enum Table_Entry_Kind -! 14 { -! 15 -! 16 ENTRY_EMPTY = 0, -! 17 ENTRY_FILE = 1, -! 18 ENTRY_DIRECTORY = 2, -! 19 } Table_Entry_Kind; -!BCC_EOS -! 20 -! 21 struct Table_Entry -! 22 { -! 23 char filename[256]; -!BCC_EOS -! 24 long file_id[2]; -!BCC_EOS -! 25 long file_size[2]; -!BCC_EOS -! 26 void* ext_file_data_low; -!BCC_EOS -! 27 void* ext_file_data_high; -!BCC_EOS -! 28 long number_sector_s; -!BCC_EOS -! 29 short entry_kind; -!BCC_EOS -! 30 short extra_control_bits1; -!BCC_EOS -! 31 short extra_control_bits2; -!BCC_EOS -! 32 short extra_control_bits3; -!BCC_EOS -! 33 long table_entry_sector_index[2]; -!BCC_EOS -! 34 long data_pointer[27 * 2]; -!BCC_EOS -! 35 }; -!BCC_EOS -! 36 -! 37 struct lsfs_file { -! 38 long file_id[2]; -!BCC_EOS -! 39 long table_entry_pointer[2]; -!BCC_EOS -! 40 Table_Entry_Kind entry_kind; -!BCC_EOS -! 41 char* filename; -!BCC_EOS -! 42 long owner_id; -!BCC_EOS -! 43 long size[2]; -!BCC_EOS -! 44 long creation_date[2]; -!BCC_EOS -! 45 long access_time[2]; -!BCC_EOS -! 46 long modification_time[2]; -!BCC_EOS -! 47 long number_sector; -!BCC_EOS -! 48 long table_entry_sector_index[2]; -!BCC_EOS -! 49 long data_pointer[27 * 2]; -!BCC_EOS -! 50 }; -!BCC_EOS -! 51 -! 52 struct Directory_Table -! 53 { -! 54 Table_Entry entries[16 ]; -!BCC_EOS -! 55 -! 56 }; -!BCC_EOS -! 57 # 3 "implementation/lsfs.c" -! 3 extern FSCI fsci; -!BCC_EOS -! 4 -! 5 int lsfs_disk_getattr(find_file, path) -! 6 lsfs_file* find_file; -export _lsfs_disk_getattr -_lsfs_disk_getattr: -!BCC_EOS -! 7 char* path; -!BCC_EOS -! 8 { -! 9 int i; -!BCC_EOS -! 10 String_Array *split_path = string_split_c(path, '/', 0 ); -push bp -mov bp,sp -push di -push si -add sp,*-4 -! Debug: list int = const 0 (used reg = ) -xor ax,ax -push ax -! Debug: list int = const $2F (used reg = ) -mov ax,*$2F -push ax -! Debug: list * char path = [S+$E+4] (used reg = ) -push 6[bp] -! Debug: func () * struct String_Array = string_split_c+0 (used reg = ) -call _string_split_c -add sp,*6 -! Debug: eq * struct String_Array = ax+0 to * struct String_Array split_path = [S+$A-$A] (used reg = ) -mov -8[bp],ax -!BCC_EOS -! 11 Length_String *filename = split_path->strings[split_path->length-1]; -dec sp -dec sp -mov bx,-8[bp] -! Debug: sub int = const 1 to unsigned int = [bx+0] (used reg = ) -mov bx,[bx] -mov si,-8[bp] -! Debug: ptradd unsigned int = bx-1 to * * struct Length_String = [si+2] (used reg = ) -mov ax,bx -dec ax -shl ax,*1 -add ax,2[si] -mov bx,ax -! Debug: eq * struct Length_String = [bx+0] to * struct Length_String filename = [S+$C-$C] (used reg = ) -mov bx,[bx] -mov -$A[bp],bx -!BCC_EOS -! 12 -! 13 -! 14 Directory_Table *dir_table = lsfs_find_directory(path, 1 ); -dec sp -dec sp -! Debug: list int = const 1 (used reg = ) -mov ax,*1 -push ax -! Debug: list * char path = [S+$10+4] (used reg = ) -push 6[bp] -! Debug: func () * struct Directory_Table = lsfs_find_directory+0 (used reg = ) -call _lsfs_find_directory -add sp,*4 -! Debug: eq * struct Directory_Table = ax+0 to * struct Directory_Table dir_table = [S+$E-$E] (used reg = ) -mov -$C[bp],ax -!BCC_EOS -! 15 -! 16 for (i = 0; i < 16 ; ++i) -! Debug: eq int = const 0 to int i = [S+$E-8] (used reg = ) -xor ax,ax -mov -6[bp],ax -!BCC_EOS -!BCC_EOS -! 17 { -br .2C -.2D: -! 18 if(strcmp( filename -! 18 ->chars, dir_table->entries[i].filename ) == 0) { -! Debug: ptradd int i = [S+$E-8] to [$10] struct Table_Entry dir_table = [S+$E-$E] (used reg = ) -mov ax,-6[bp] -mov cx,#$200 -imul cx -add ax,-$C[bp] -mov bx,ax -! Debug: cast * char = const 0 to [$100] char = bx+0 (used reg = ) -! Debug: list * char = bx+0 (used reg = ) -push bx -mov bx,-$A[bp] -! Debug: list * char = [bx+4] (used reg = ) -push 4[bx] -! Debug: func () int = strcmp+0 (used reg = ) -call _strcmp -add sp,*4 -! Debug: logeq int = const 0 to int = ax+0 (used reg = ) -test ax,ax -bne .2E -.2F: -! 19 find_file->file_id[0] = dir_table->entries[i].file_id; -! Debug: ptradd int i = [S+$E-8] to [$10] struct Table_Entry dir_table = [S+$E-$E] (used reg = ) -mov ax,-6[bp] -mov cx,#$200 -imul cx -add ax,-$C[bp] -mov bx,ax -! Debug: ptradd int = const 0 to [2] long find_file = [S+$E+2] (used reg = bx) -mov si,4[bp] -! Debug: eq [2] long = bx+$100 to long = [si+0] (used reg = ) -mov ax,bx -add ax,#$100 -xor bx,bx -mov [si],ax -mov 2[si],bx -!BCC_EOS -! 20 find_file->entry_kind = dir_table->entries[i].entry_kind; -! Debug: ptradd int i = [S+$E-8] to [$10] struct Table_Entry dir_table = [S+$E-$E] (used reg = ) -mov ax,-6[bp] -mov cx,#$200 -imul cx -add ax,-$C[bp] -mov bx,ax -mov si,4[bp] -! Debug: eq short = [bx+$118] to int = [si+$10] (used reg = ) -mov bx,$118[bx] -mov $10[si],bx -!BCC_EOS -! 21 find_file->table_entry_pointer[0] = i; -mov bx,4[bp] -! Debug: ptradd int = const 0 to [2] long = bx+8 (used reg = ) -! Debug: eq int i = [S+$E-8] to long = [bx+8] (used reg = ) -mov ax,-6[bp] -cwd -mov si,dx -mov 8[bx],ax -mov $A[bx],si -!BCC_EOS -! 22 find_file->filename = dir_table->entries[i].filename; -! Debug: ptradd int i = [S+$E-8] to [$10] struct Table_Entry dir_table = [S+$E-$E] (used reg = ) -mov ax,-6[bp] -mov cx,#$200 -imul cx -add ax,-$C[bp] -mov bx,ax -mov si,4[bp] -! Debug: eq [$100] char = bx+0 to * char = [si+$12] (used reg = ) -mov $12[si],bx -!BCC_EOS -! 23 find_file->table_entry_sector_index[0] = dir_table->entries[i].table_entry_sector_index; -! Debug: ptradd int i = [S+$E-8] to [$10] struct Table_Entry dir_table = [S+$E-$E] (used reg = ) -mov ax,-6[bp] -mov cx,#$200 -imul cx -add ax,-$C[bp] -mov bx,ax -mov si,4[bp] -! Debug: ptradd int = const 0 to [2] long = si+$3C (used reg = bx) -! Debug: eq [2] long = bx+$120 to long = [si+$3C] (used reg = ) -mov ax,bx -add ax,#$120 -xor bx,bx -mov $3C[si],ax -mov $3E[si],bx -!BCC_EOS -! 24 find_file->owner_id = 1; -mov bx,4[bp] -! Debug: eq int = const 1 to long = [bx+$14] (used reg = ) -mov ax,*1 -xor si,si -mov $14[bx],ax -mov $16[bx],si -!BCC_EOS -! 25 find_file->size[0] = dir_table->entries[i].file_size; -! Debug: ptradd int i = [S+$E-8] to [$10] struct Table_Entry dir_table = [S+$E-$E] (used reg = ) -mov ax,-6[bp] -mov cx,#$200 -imul cx -add ax,-$C[bp] -mov bx,ax -mov si,4[bp] -! Debug: ptradd int = const 0 to [2] long = si+$18 (used reg = bx) -! Debug: eq [2] long = bx+$108 to long = [si+$18] (used reg = ) -mov ax,bx -add ax,#$108 -xor bx,bx -mov $18[si],ax -mov $1A[si],bx -!BCC_EOS -! 26 find_file->creation_date[0] = 0; -mov bx,4[bp] -! Debug: ptradd int = const 0 to [2] long = bx+$20 (used reg = ) -! Debug: eq int = const 0 to long = [bx+$20] (used reg = ) -xor ax,ax -xor si,si -mov $20[bx],ax -mov $22[bx],si -!BCC_EOS -! 27 find_file->access_time[0] = 0; -mov bx,4[bp] -! Debug: ptradd int = const 0 to [2] long = bx+$28 (used reg = ) -! Debug: eq int = const 0 to long = [bx+$28] (used reg = ) -xor ax,ax -xor si,si -mov $28[bx],ax -mov $2A[bx],si -!BCC_EOS -! 28 find_file->modification_time[0] = 0; -mov bx,4[bp] -! Debug: ptradd int = const 0 to [2] long = bx+$30 (used reg = ) -! Debug: eq int = const 0 to long = [bx+$30] (used reg = ) -xor ax,ax -xor si,si -mov $30[bx],ax -mov $32[bx],si -!BCC_EOS -! 29 memcpy(find_file->data_pointer, dir_table->entries[i].data_pointer, 27 * 8); -! Debug: list int = const $D8 (used reg = ) -mov ax,#$D8 -push ax -! Debug: ptradd int i = [S+$10-8] to [$10] struct Table_Entry dir_table = [S+$10-$E] (used reg = ) -mov ax,-6[bp] -mov cx,#$200 -imul cx -add ax,-$C[bp] -mov bx,ax -! Debug: cast * long = const 0 to [$36] long = bx+$128 (used reg = ) -! Debug: list * long = bx+$128 (used reg = ) -add bx,#$128 -push bx -mov bx,4[bp] -! Debug: cast * long = const 0 to [$36] long = bx+$44 (used reg = ) -! Debug: list * long = bx+$44 (used reg = ) -add bx,*$44 -push bx -! Debug: func () void = memcpy+0 (used reg = ) -call _memcpy -add sp,*6 -!BCC_EOS -! 30 find_file->number_sector = 1; -mov bx,4[bp] -! Debug: eq int = const 1 to long = [bx+$38] (used reg = ) -mov ax,*1 -xor si,si -mov $38[bx],ax -mov $3A[bx],si -!BCC_EOS -! 31 return 1; -mov ax,*1 -add sp,*8 -pop si -pop di -pop bp -ret -!BCC_EOS -! 32 } -! 33 } -.2E: -! 34 return 0; -.2B: -! Debug: preinc int i = [S+$E-8] (used reg = ) -mov ax,-6[bp] -inc ax -mov -6[bp],ax -.2C: -! Debug: lt int = const $10 to int i = [S+$E-8] (used reg = ) -mov ax,-6[bp] -cmp ax,*$10 -blt .2D -.31: -.2A: -xor ax,ax -add sp,*8 -pop si -pop di -pop bp -ret -!BCC_EOS -! 35 } -! 36 -! 37 Directory_Table* lsfs_find_directory(path, drop_filename) -! Register BX SI used in function lsfs_disk_getattr -! 38 char *path; -export _lsfs_find_directory -_lsfs_find_directory: -!BCC_EOS -! 39 short drop_filename; -!BCC_EOS -! 40 { -! 41 int number_of_traversal; -!BCC_EOS -! 42 int i, j; -!BCC_EOS -! 43 String_Array *split_path; -!BCC_EOS -! 44 Directory_Table *dir_table = calloc(1, sizeof(Directory_Table)); -push bp -mov bp,sp -push di -push si -add sp,*-$A -! Debug: list int = const $2000 (used reg = ) -mov ax,#$2000 -push ax -! Debug: list int = const 1 (used reg = ) -mov ax,*1 -push ax -! Debug: func () * void = calloc+0 (used reg = ) -call _calloc -add sp,*4 -! Debug: eq * void = ax+0 to * struct Directory_Table dir_table = [S+$10-$10] (used reg = ) -mov -$E[bp],ax -!BCC_EOS -! 45 -! 46 disk_service_read_data_from_disk(fsci.master_table_index[0], 16 , dir_table, 0x7e0); -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: list * struct Directory_Table dir_table = [S+$12-$10] (used reg = ) -push -$E[bp] -! Debug: list int = const $10 (used reg = ) -mov ax,*$10 -push ax -! Debug: list long = [fsci+$100] (used reg = ) -push [_fsci+$102] -push [_fsci+$100] -! Debug: func () int = disk_service_read_data_from_disk+0 (used reg = ) -call _disk_service_read_data_from_disk -add sp,*$A -!BCC_EOS -! 47 split_path = string_split_c(path, '/', 0 ); -! Debug: list int = const 0 (used reg = ) -xor ax,ax -push ax -! Debug: list int = const $2F (used reg = ) -mov ax,*$2F -push ax -! Debug: list * char path = [S+$14+2] (used reg = ) -push 4[bp] -! Debug: func () * struct String_Array = string_split_c+0 (used reg = ) -call _string_split_c -add sp,*6 -! Debug: eq * struct String_Array = ax+0 to * struct String_Array split_path = [S+$10-$E] (used reg = ) -mov -$C[bp],ax -!BCC_EOS -! 48 -! 49 number_of_traversal = split_path->length; -mov bx,-$C[bp] -! Debug: eq unsigned int = [bx+0] to int number_of_traversal = [S+$10-8] (used reg = ) -mov bx,[bx] -mov -6[bp],bx -!BCC_EOS -! 50 -! 51 if (drop_filename) -mov ax,6[bp] -test ax,ax -je .32 -.33: -! 52 { -! 53 number_of_traversal -= 1; -! Debug: subab int = const 1 to int number_of_traversal = [S+$10-8] (used reg = ) -mov ax,-6[bp] -dec ax -mov -6[bp],ax -!BCC_EOS -! 54 } -! 55 -! 56 -! 57 for (i = 0; i < number_of_traversal; ++i) -.32: -! Debug: eq int = const 0 to int i = [S+$10-$A] (used reg = ) -xor ax,ax -mov -8[bp],ax -!BCC_EOS -!BCC_EOS -! 58 { -jmp .36 -.37: -! 59 for (j = 0; j < 16 ; ++j) -! Debug: eq int = const 0 to int j = [S+$10-$C] (used reg = ) -xor ax,ax -mov -$A[bp],ax -!BCC_EOS -!BCC_EOS -! 60 { -jmp .3A -.3B: -! 61 if (strcmp(dir_table->entries[j].filename, split_path->strings[i]->chars) == 0) -mov bx,-$C[bp] -! Debug: ptradd int i = [S+$10-$A] to * * struct Length_String = [bx+2] (used reg = ) -mov ax,-8[bp] -shl ax,*1 -add ax,2[bx] -mov bx,ax -mov bx,[bx] -! Debug: list * char = [bx+4] (used reg = ) -push 4[bx] -! Debug: ptradd int j = [S+$12-$C] to [$10] struct Table_Entry dir_table = [S+$12-$10] (used reg = ) -mov ax,-$A[bp] -mov cx,#$200 -imul cx -add ax,-$E[bp] -mov bx,ax -! Debug: cast * char = const 0 to [$100] char = bx+0 (used reg = ) -! Debug: list * char = bx+0 (used reg = ) -push bx -! Debug: func () int = strcmp+0 (used reg = ) -call _strcmp -add sp,*4 -! Debug: logeq int = const 0 to int = ax+0 (used reg = ) -test ax,ax -jne .3C -.3D: -! 62 { -! 63 int index_sector = dir_table->entries[j].data_pointer[0]; -dec sp -dec sp -! Debug: ptradd int j = [S+$12-$C] to [$10] struct Table_Entry dir_table = [S+$12-$10] (used reg = ) -mov ax,-$A[bp] -mov cx,#$200 -imul cx -add ax,-$E[bp] -mov bx,ax -! Debug: ptradd int = const 0 to [$36] long = bx+$128 (used reg = ) -! Debug: eq long = [bx+$128] to int index_sector = [S+$12-$12] (used reg = ) -mov bx,$128[bx] -mov -$10[bp],bx -!BCC_EOS -! 64 -! 65 disk_service_read_data_from_disk(index_sector, 16 , dir_table); -! Debug: list * struct Directory_Table dir_table = [S+$12-$10] (used reg = ) -push -$E[bp] -! Debug: list int = const $10 (used reg = ) -mov ax,*$10 -push ax -! Debug: list int index_sector = [S+$16-$12] (used reg = ) -push -$10[bp] -! Debug: func () int = disk_service_read_data_from_disk+0 (used reg = ) -call _disk_service_read_data_from_disk -add sp,*6 -!BCC_EOS -! 66 break; -inc sp -inc sp -jmp .38 -!BCC_EOS -! 67 } -inc sp -inc sp -! 68 } -.3C: -! 69 } -.39: -! Debug: preinc int j = [S+$10-$C] (used reg = ) -mov ax,-$A[bp] -inc ax -mov -$A[bp],ax -.3A: -! Debug: lt int = const $10 to int j = [S+$10-$C] (used reg = ) -mov ax,-$A[bp] -cmp ax,*$10 -jl .3B -.3E: -.38: -! 70 return dir_table; -.35: -! Debug: preinc int i = [S+$10-$A] (used reg = ) -mov ax,-8[bp] -inc ax -mov -8[bp],ax -.36: -! Debug: lt int number_of_traversal = [S+$10-8] to int i = [S+$10-$A] (used reg = ) -mov ax,-8[bp] -cmp ax,-6[bp] -jl .37 -.3F: -.34: -mov ax,-$E[bp] -add sp,*$A -pop si -pop di -pop bp -ret -!BCC_EOS -! 71 } -! 72 -! 73 int lsfs_disk_read_data_from_file(file, buffer_size, data, offset_to_next_entry, data_segment) -! Register BX used in function lsfs_find_directory -! 74 lsfs_file *file; -export _lsfs_disk_read_data_from_file -_lsfs_disk_read_data_from_file: -!BCC_EOS -! 75 int buffer_size; -!BCC_EOS -! 76 char *data; -!BCC_EOS -! 77 long offset_to_next_entry; -!BCC_EOS -! 78 unsigned int data_segment; -!BCC_EOS -! 79 { -! 80 int integer_file_size = file->size; -push bp -mov bp,sp -push di -push si -dec sp -dec sp -mov bx,4[bp] -! Debug: eq [2] long = bx+$18 to int integer_file_size = [S+8-8] (used reg = ) -add bx,*$18 -mov -6[bp],bx -!BCC_EOS -! 81 int integer_o -! 81 ffset = offset_to_next_entry; -dec sp -dec sp -! Debug: eq long offset_to_next_entry = [S+$A+8] to int integer_offset = [S+$A-$A] (used reg = ) -mov ax,$A[bp] -mov -8[bp],ax -!BCC_EOS -! 82 int integer_datapointer = 0; -dec sp -dec sp -! Debug: eq int = const 0 to int integer_datapointer = [S+$C-$C] (used reg = ) -xor ax,ax -mov -$A[bp],ax -!BCC_EOS -! 83 int data_length = integer_file_size - integer_offset; -dec sp -dec sp -! Debug: sub int integer_offset = [S+$E-$A] to int integer_file_size = [S+$E-8] (used reg = ) -mov ax,-6[bp] -sub ax,-8[bp] -! Debug: eq int = ax+0 to int data_length = [S+$E-$E] (used reg = ) -mov -$C[bp],ax -!BCC_EOS -! 84 int amount_read = 0; -dec sp -dec sp -! Debug: eq int = const 0 to int amount_read = [S+$10-$10] (used reg = ) -xor ax,ax -mov -$E[bp],ax -!BCC_EOS -! 85 int amount_to_read = 0; -dec sp -dec sp -! Debug: eq int = const 0 to int amount_to_read = [S+$12-$12] (used reg = ) -xor ax,ax -mov -$10[bp],ax -!BCC_EOS -! 86 int remaining_offset = offset_to_next_entry; -dec sp -dec sp -! Debug: eq long offset_to_next_entry = [S+$14+8] to int remaining_offset = [S+$14-$14] (used reg = ) -mov ax,$A[bp] -mov -$12[bp],ax -!BCC_EOS -! 87 -! 88 -! 89 -! 90 -! 91 -! 92 int data_pointer_index = 0; -dec sp -dec sp -! Debug: eq int = const 0 to int data_pointer_index = [S+$16-$16] (used reg = ) -xor ax,ax -mov -$14[bp],ax -!BCC_EOS -! 93 -! 94 if (data_length > buffer_size) -! Debug: gt int buffer_size = [S+$16+4] to int data_length = [S+$16-$E] (used reg = ) -mov ax,-$C[bp] -cmp ax,6[bp] -jle .40 -.41: -! 95 { -! 96 data_length = buffer_size; -! Debug: eq int buffer_size = [S+$16+4] to int data_length = [S+$16-$E] (used reg = ) -mov ax,6[bp] -mov -$C[bp],ax -!BCC_EOS -! 97 } -! 98 -! 99 while(data_length > 0) -.40: -! 100 { -br .43 -.44: -! 101 -! 102 if (remaining_offset == 0) -! Debug: logeq int = const 0 to int remaining_offset = [S+$16-$14] (used reg = ) -mov ax,-$12[bp] -test ax,ax -bne .45 -.46: -! 103 { -! 104 char *tmp_buffer = calloc(4 , 512 ); -dec sp -dec sp -! Debug: list int = const $200 (used reg = ) -mov ax,#$200 -push ax -! Debug: list int = const 4 (used reg = ) -mov ax,*4 -push ax -! Debug: func () * void = calloc+0 (used reg = ) -call _calloc -add sp,*4 -! Debug: eq * void = ax+0 to * char tmp_buffer = [S+$18-$18] (used reg = ) -mov -$16[bp],ax -!BCC_EOS -! 105 -! 106 -! 107 if (data_length < (4 * 512 )) -! Debug: lt int = const $800 to int data_length = [S+$18-$E] (used reg = ) -mov ax,-$C[bp] -cmp ax,#$800 -jge .47 -.48: -! 108 { -! 109 amount_to_read = data_length; -! Debug: eq int data_length = [S+$18-$E] to int amount_to_read = [S+$18-$12] (used reg = ) -mov ax,-$C[bp] -mov -$10[bp],ax -!BCC_EOS -! 110 } -! 111 else -! 112 { -jmp .49 -.47: -! 113 amount_to_read = (4 * 512 ); -! Debug: eq int = const $800 to int amount_to_read = [S+$18-$12] (used reg = ) -mov ax,#$800 -mov -$10[bp],ax -!BCC_EOS -! 114 } -! 115 -! 116 integer_datapointer = file->data_pointer[data_pointer_index]; -.49: -mov bx,4[bp] -! Debug: ptradd int data_pointer_index = [S+$18-$16] to [$36] long = bx+$44 (used reg = ) -mov ax,-$14[bp] -shl ax,*1 -shl ax,*1 -add bx,ax -! Debug: eq long = [bx+$44] to int integer_datapointer = [S+$18-$C] (used reg = ) -mov bx,$44[bx] -mov -$A[bp],bx -!BCC_EOS -! 117 if (integer_datapointer == 0) -! Debug: logeq int = const 0 to int integer_datapointer = [S+$18-$C] (used reg = ) -mov ax,-$A[bp] -test ax,ax -jne .4A -.4B: -! 118 { -! 119 break; -inc sp -inc sp -br .42 -!BCC_EOS -! 120 } -! 121 disk_service_read_data_from_disk(file->data_pointer[data_pointer_index], 4 , tmp_buffer, 0x7e0); -.4A: -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: list * char tmp_buffer = [S+$1A-$18] (used reg = ) -push -$16[bp] -! Debug: list int = const 4 (used reg = ) -mov ax,*4 -push ax -mov bx,4[bp] -! Debug: ptradd int data_pointer_index = [S+$1E-$16] to [$36] long = bx+$44 (used reg = ) -mov ax,-$14[bp] -shl ax,*1 -shl ax,*1 -add bx,ax -! Debug: list long = [bx+$44] (used reg = ) -push $46[bx] -push $44[bx] -! Debug: func () int = disk_service_read_data_from_disk+0 (used reg = ) -call _disk_service_read_data_from_disk -add sp,*$A -!BCC_EOS -! 122 memcpy((data + amount_read), data_segment, tmp_buffer, 0x7e0, amount_to_read); -! Debug: list int amount_to_read = [S+$18-$12] (used reg = ) -push -$10[bp] -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: list * char tmp_buffer = [S+$1C-$18] (used reg = ) -push -$16[bp] -! Debug: list unsigned int data_segment = [S+$1E+$C] (used reg = ) -push $E[bp] -! Debug: ptradd int amount_read = [S+$20-$10] to * char data = [S+$20+6] (used reg = ) -mov ax,-$E[bp] -add ax,8[bp] -! Debug: list * char = ax+0 (used reg = ) -push ax -! Debug: func () void = memcpy+0 (used reg = ) -call _memcpy -add sp,*$A -!BCC_EOS -! 123 data_length -= amount_to_read; -! Debug: subab int amount_to_read = [S+$18-$12] to int data_length = [S+$18-$E] (used reg = ) -mov ax,-$C[bp] -sub ax,-$10[bp] -mov -$C[bp],ax -!BCC_EOS -! 124 amount_read += amount_to_read; -! Debug: addab int amount_to_read = [S+$18-$12] to int amount_read = [S+$18-$10] (used reg = ) -mov ax,-$E[bp] -add ax,-$10[bp] -mov -$E[bp],ax -!BCC_EOS -! 125 data_pointer_index = data_pointer_index + 2; -! Debug: add int = const 2 to int data_pointer_index = [S+$18-$16] (used reg = ) -mov ax,-$14[bp] -! Debug: eq int = ax+2 to int data_pointer_index = [S+$18-$16] (used reg = ) -inc ax -inc ax -mov -$14[bp],ax -!BCC_EOS -! 126 -! 127 } -inc sp -inc sp -! 128 else if (remaining_offset < (4 * 512 )) -br .4C -.45: -! Debug: lt int = const $800 to int remaining_offset = [S+$16-$14] (used reg = ) -mov ax,-$12[bp] -cmp ax,#$800 -bge .4D -.4E: -! 129 { -! 130 char *tmp_buffer = calloc(1, (4 * 512 )); -dec sp -dec sp -! Debug: list int = const $800 (used reg = ) -mov ax,#$800 -push ax -! Debug: list int = const 1 (used reg = ) -mov ax,*1 -push ax -! Debug: func () * void = calloc+0 (used reg = ) -call _calloc -add sp,*4 -! Debug: eq * void = ax+0 to * char tmp_buffer = [S+$18-$18] (used reg = ) -mov -$16[bp],ax -!BCC_EOS -! 131 -! 132 -! 133 if (data_length < ((4 * 512 ) - remaining_offset) ) -! Debug: sub int remaining_offset = [S+$18-$14] to int = const $800 (used reg = ) -mov ax,#$800 -sub ax,-$12[bp] -! Debug: lt int = ax+0 to int data_length = [S+$18-$E] (used reg = ) -cmp ax,-$C[bp] -jle .4F -.50: -! 134 { -! 135 amount_to_read = data_length; -! Debug: eq int data_length = [S+$18-$E] to int amount_to_read = [S+$18-$12] (used reg = ) -mov ax,-$C[bp] -mov -$10[bp],ax -!BCC_EOS -! 136 } -! 137 else -! 138 { -jmp .51 -.4F: -! 139 amount_to_read = ((4 * 512 ) - remaining_offset); -! Debug: sub int remaining_offset = [S+$18-$14] to int = const $800 (used reg = ) -mov ax,#$800 -sub ax,-$12[bp] -! Debug: eq int = ax+0 to int amount_to_read = [S+$18-$12] (used reg = ) -mov -$10[bp],ax -!BCC_EOS -! 140 } -! 141 -! 142 disk_service_read_data_from_disk(file->data_pointer[data_pointer_index], 4 , tmp_buffer, 0x7e0); -.51: -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: list * char tmp_buffer = [S+$1A-$18] (used reg = ) -push -$16[bp] -! Debug: list int = const 4 (used reg = ) -mov ax,*4 -push ax -mov bx,4[bp] -! Debug: ptradd int data_pointer_index = [S+$1E-$16] to [$36] long = bx+$44 (used reg = ) -mov ax,-$14[bp] -shl ax,*1 -shl ax,*1 -add bx,ax -! Debug: list long = [bx+$44] (used reg = ) -push $46[bx] -push $44[bx] -! Debug: func () int = disk_service_read_data_from_disk+0 (used reg = ) -call _disk_service_read_data_from_disk -add sp,*$A -!BCC_EOS -! 143 -! 144 memcpy(data, data_segment, (tmp_buffer + remaining_offset), 0x7e0, amount_to_read); -! Debug: list int amount_to_read = [S+$18-$12] (used reg = ) -push -$10[bp] -! Debug: list int = const $7E0 (used reg = ) -mov ax,#$7E0 -push ax -! Debug: ptradd int remaining_offset = [S+$1C-$14] to * char tmp_buffer = [S+$1C-$18] (used reg = ) -mov ax,-$12[bp] -add ax,-$16[bp] -! Debug: list * char = ax+0 (used reg = ) -push ax -! Debug: list unsigned int data_segment = [S+$1E+$C] (used reg = ) -push $E[bp] -! Debug: list * char data = [S+$20+6] (used reg = ) -push 8[bp] -! Debug: func () void = memcpy+0 (used reg = ) -call _memcpy -add sp,*$A -!BCC_EOS -! 145 data_length -= amount_to_read; -! Debug: subab int amount_to_read = [S+$18-$12] to int data_length = [S+$18-$E] (used reg = ) -mov ax,-$C[bp] -sub ax,-$10[bp] -mov -$C[bp],ax -!BCC_EOS -! 146 amount_read += amount_to_read; -! Debug: addab int amount_to_read = [S+$18-$12] to int amount_read = [S+$18-$10] (used reg = ) -mov ax,-$E[bp] -add ax,-$10[bp] -mov -$E[bp],ax -!BCC_EOS -! 147 remaining_offset -= amount_to_read; -! Debug: subab int amount_to_read = [S+$18-$12] to int remaining_offset = [S+$18-$14] (used reg = ) -mov ax,-$12[bp] -sub ax,-$10[bp] -mov -$12[bp],ax -!BCC_EOS -! 148 -! 149 data_pointer_index = data_ -! 149 pointer_index + 2; -! Debug: add int = const 2 to int data_pointer_index = [S+$18-$16] (used reg = ) -mov ax,-$14[bp] -! Debug: eq int = ax+2 to int data_pointer_index = [S+$18-$16] (used reg = ) -inc ax -inc ax -mov -$14[bp],ax -!BCC_EOS -! 150 -! 151 } -inc sp -inc sp -! 152 else -! 153 { -jmp .52 -.4D: -! 154 -! 155 remaining_offset -= (4 * 512 ); -! Debug: subab int = const $800 to int remaining_offset = [S+$16-$14] (used reg = ) -mov ax,-$12[bp] -add ax,#-$800 -mov -$12[bp],ax -!BCC_EOS -! 156 data_pointer_index++; -! Debug: postinc int data_pointer_index = [S+$16-$16] (used reg = ) -mov ax,-$14[bp] -inc ax -mov -$14[bp],ax -!BCC_EOS -! 157 } -! 158 -! 159 } -.52: -.4C: -! 160 # 164 -! 164 -! 165 return amount_read; -.43: -! Debug: gt int = const 0 to int data_length = [S+$16-$E] (used reg = ) -mov ax,-$C[bp] -test ax,ax -bgt .44 -.53: -.42: -mov ax,-$E[bp] -add sp,*$10 -pop si -pop di -pop bp -ret -!BCC_EOS -! 166 -! 167 } -! 168 -! Register BX used in function lsfs_disk_read_data_from_file -.data -.bss - -! 0 errors detected