kolibrios/programs/develop/tinypad/trunk/tp-files.asm

307 lines
5.8 KiB
NASM
Raw Normal View History

;-----------------------------------------------------------------------------
func save_file ;//////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov esi,tb_opensave.text
mov edi,f_info.path
movzx ecx,[tb_opensave.length]
mov [f_info.length],ecx
cld
rep movsb
mov byte[edi],0
mov esi,AREA_EDIT ; 0x70000 = 448 Kbytes (maximum)
mov edi,AREA_TEMP
.new_string:
call save_string
cmp dword[esi],0
jne .new_string
sub edi,AREA_TEMP+2 ; minus last CRLF
;! mov [filelen],edi
cmp byte[f_info.path],'/'
je .systree_save
mcall 33,f_info.path,AREA_TEMP,edi,0;[filelen],0
or eax,eax
jz .exit
; call file_not_found
jmp .exit.2
.systree_save:
;! mov eax,[filelen]
; mov [f_info+8],edi ;! eax
; mov [f_info+0],1
; mov esi,s_fname
; mov edi,f_info.path
; mov ecx,PATHL
; cld
; rep movsb
;mcall 58,f_info
mov [f_info70+0],2
mov [f_info70+12],edi
mov [f_info70+16],AREA_TEMP
mov byte[f_info70+20],0
mov [f_info70+21],f_info.path
mcall 70,f_info70
call set_status_fs_error
or eax,eax
jnz .exit.2
.exit:
mov [modified],0
clc
ret
.exit.2:
stc
ret
endf
;-----------------------------------------------------------------------------
func save_string ;////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
movzx ecx,word[esi]
test dword[esi],0x00010000
jz @f
or dword[esi],0x00020000
@@: add esi,4
; mov ecx,eax
@@: cmp byte[esi+ecx-1],' '
jne @f
loop @b
@@: jecxz .endcopy
xor edx,edx
mov ebx,edx
mov ah,dl
.next_char:
mov al,[esi+ebx]
inc ebx
; cmp [asm_mode],0
; je .put
test [options],OPTS_OPTIMSAVE
jz .put
test ah,00000001b
jnz .char
cmp al,'"'
jne @f
xor ah,00000100b
jmp .char
@@: cmp al,"'"
jne @f
xor ah,00000010b
jmp .char
@@: test ah,00000110b
jnz .char
cmp al,';'
jne @f
test ah,00000001b
jnz .char
xor ah,00000001b
jmp .char
@@: cmp al,' '
jne .char
inc edx
test ebx,ATABW-1
jnz @f
dec edx
jle .put
mov al,9
xor edx,edx
jmp .put
.char:
or edx,edx
jz .put
push ecx eax
mov ecx,edx
mov al,' '
rep stosb
pop eax ecx
xor edx,edx
.put:
stosb
@@: loop .next_char
.endcopy:
mov eax,0x0A0D
stosw
movzx eax,word[esi-4]
add esi,eax;[esi-4]
ret
endf
func set_status_fs_error
push eax
mov esi,s_fs_error
@@: dec eax
js @f
movzx ecx,byte[esi]
lea esi,[esi+ecx+1]
jmp @b
@@: inc esi
mov [s_status],esi
pop eax
call writepos
ret
endf
;-----------------------------------------------------------------------------
func load_hd_file ;///////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov [f_info+0],0
mov [f_info+8],300000/512
; mov esi,s_fname
; mov edi,f_info.path;pathfile_read
; mov ecx,PATHL
; cld
; rep movsb
;mcall 58,f_info ; fileinfo_read
mov [f_info70+0],0
mov [f_info70+4],0
mov [f_info70+8],0
mov [f_info70+12],300000;/512
mov [f_info70+16],AREA_TEMP
mov byte[f_info70+20],0
mov [f_info70+21],f_info.path
mcall 70,f_info70
call set_status_fs_error
xchg eax,ebx
inc eax
test ebx,ebx
je load_file.file_found
cmp ebx,6 ;// ATV driver fix (6 instead of 5)
je load_file.file_found
; jmp file_not_found
stc
ret
endf
;-----------------------------------------------------------------------------
func load_file ;//////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
mov esi,tb_opensave.text
mov edi,f_info.path
movzx ecx,[tb_opensave.length]
mov [f_info.length],ecx
cld
rep movsb
mov byte[edi],0
cmp byte[f_info.path],'/'
je load_hd_file
mcall 6,f_info.path,0,16800,AREA_TEMP ; 6 = open file
inc eax ; eax = -1 -> file not found
jnz .file_found
; jmp file_not_found
stc
ret
.file_found:
dec eax
mov [filesize],eax
mov [lines],1
mov [columns],0
mov esi,AREA_TEMP
mov edi,AREA_EDIT
mov edx,eax
.next_line:
mov ebx,edi
add edi,4
.next_char:
or edx,edx
jle .exit
lodsb
dec edx
cmp al,13
je .CR
cmp al,10
je .LF
cmp al,9
je .TB
cmp al,0
je .exit
stosb
jmp .next_char
.exit:
mov ecx,10
mov al,' '
rep stosb
lea eax,[edi-4]
sub eax,ebx
mov [ebx],eax
mov dword[ebx+eax+4],0
sub eax,10
jnz @f
inc eax
@@: cmp eax,[columns]
jbe @f
mov [columns],eax
@@: mov [modified],0
clc
ret
.CR: cmp byte[esi],10
jne .LF
lodsb
dec edx
.LF: mov ecx,10
mov al,' '
rep stosb
lea eax,[edi-4]
sub eax,ebx
mov [ebx],eax
inc [lines]
add eax,-10
cmp eax,[columns]
jbe .next_line
mov [columns],eax
jmp .next_line
.TB: lea eax,[edi-4]
sub eax,ebx
mov ecx,eax
add ecx,ATABW
and ecx,not(ATABW-1)
sub ecx,eax
mov al,' '
rep stosb
jmp .next_char
endf
;-----------------------------------------------------------------------------
func new_file ;///////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
; mcall 55,eax,error_beep ; beep
mov [lines],1 ; open empty document
mov [columns],1
xor eax,eax
mov [top_line],eax
mov [pos.x],eax
mov [pos.y],eax
mov edi,AREA_EDIT+4
mov ecx,10
mov [edi-4],ecx
mov [edi+10],eax
mov al,' '
cld
rep stosb
mov [f_info.length],0
mov [modified],0
mov [asm_mode],0
call update_caption
call drawwindow
ret
endf