|
|
- ! 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
|