Tinypad from 0.6.0.0
git-svn-id: svn://kolibrios.org@178 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
307
programs/develop/tinypad/trunk/tp-files.asm
Normal file
307
programs/develop/tinypad/trunk/tp-files.asm
Normal file
@@ -0,0 +1,307 @@
|
||||
;-----------------------------------------------------------------------------
|
||||
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
|
Reference in New Issue
Block a user