kolibrios-fun/programs/develop/tinypad/trunk/tp-dialog.asm

340 lines
6.4 KiB
NASM
Raw Normal View History

;-----------------------------------------------------------------------------
func define_3d_button ;///////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
; ebx = <x,width>
; ecx = <y,height>
; esp+4*3 = id
; esp+4*2 = text
; esp+4*1 = text length
;-----------------------------------------------------------------------------
pushad
mov edx,[esp+4*8+4+4*2]
or edx,0x40000000
mcall 8
mov eax,[esp+4*8+4*1]
add eax,2
imul eax,6
pushad
shr ebx,16
shr ecx,16
push ebx ecx eax 15
call draw_3d_panel
popad
shr ecx,16
mov bx,cx
add ebx,7*65536+4
mcall 4,,[sc.work_text],[esp+4*8+4*2],[esp+4*8+4*1]
popad
ret 4*3
endf
finddlg_handler:
cmp al,1
je .draw
cmp al,2
je .key
cmp al,3
je botdlg.button
ret
.draw:
mov ebx,[bot_ofs]
add ebx,(1+3)*65536+6
mcall 4,,[sc.work_text],s_2find,s_2find.size+1
mov ecx,[bot_ofs]
shl ecx,16
add ecx,(3+17)*65536+15
push ecx
cmp [bot_dlg_mode2],0
je @f
add ebx,18
mcall 4,,[sc.work_text],s_2replace,s_2replace.size+1
mov ecx,[esp]
add ecx,18*65536
@@:
mov ebx,[p_info.client_box.width]
shl ebx,16
push 20003
cmp [bot_dlg_mode2],0
jne .draw.lp1
add ebx,-(2+6*(s_2find.size+2))*65536+6*(s_2find.size+2)
push s_2find s_2find.size
jmp @f
.draw.lp1:
add ebx,-(2+6*(s_2replace.size+2))*65536+6*(s_2replace.size+2)
push s_2replace s_2replace.size
@@: call define_3d_button
sub ebx,(6*(s_2cancel.size+2)+3)*65536
mov bx,6*(s_2cancel.size+2)
push 20001 s_2cancel s_2cancel.size
call define_3d_button
mov ecx,[esp]
mov ebp,tb_find
mov eax,[p_info.client_box.width]
sub eax,6*(s_2find.size+2)+1
add eax,6*(s_2find.size+2)*65536
mov dword[tbox.x],eax
add ecx,-18*65536+1
mov dword[tbox.y],ecx
call textbox.draw
pop ecx
cmp [bot_dlg_mode2],0
je @f
mov ebp,tb_replace
mov eax,[p_info.client_box.width]
sub eax,6*(s_2replace.size+2)+1
add eax,6*(s_2replace.size+2)*65536
mov dword[tbox.x],eax
inc ecx
mov dword[tbox.y],ecx
call textbox.draw
@@:
ret
.key:
cmp ebx,KEY_ESCAPE
je btn.bot.cancel
cmp ebx,KEY_RETURN
je btn.bot.find
cmp ebx,KEY_NUMRETURN
je btn.bot.find
cmp ebx,KEY_TAB
je ..tab
call textbox.key
ret
..tab:
cmp [bot_dlg_mode2],0
je @f
mov eax,tb_replace
cmp eax,[focused_tb]
jne .key.lp1
mov eax,tb_find
.key.lp1:
mov [focused_tb],eax
call .draw
@@: ret
osdlg_handler:
cmp al,1
je .draw
cmp al,2
je .key
cmp al,3
je botdlg.button
ret
.draw:
mov ebx,[bot_ofs]
add ebx,(1+3)*65536+6
mcall 4,,[sc.work_text],s_2filename,s_2filename.size
mov ebx,[p_info.client_box.width]
shl ebx,16
mov ecx,[bot_ofs]
shl ecx,16
add ecx,(2+18)*65536+15
push 20002
cmp [bot_dlg_mode2],0
jne .draw.lp1
add ebx,-(2+6*(s_2open.size+2))*65536+6*(s_2open.size+2)
push s_2open s_2open.size
jmp @f
.draw.lp1:
add ebx,-(2+6*(s_2save.size+2))*65536+6*(s_2save.size+2)
push s_2save s_2save.size
@@: call define_3d_button
sub ebx,(6*(s_2cancel.size+2)+3)*65536
mov bx,6*(s_2cancel.size+2)
push 20001 s_2cancel s_2cancel.size
call define_3d_button
mov ebp,tb_opensave
mov eax,[p_info.client_box.width]
sub eax,6*(s_2filename.size+1)+1
add eax,6*(s_2filename.size+1)*65536
mov dword[tbox.x],eax
add ecx,-18*65536+1
mov dword[tbox.y],ecx
call textbox.draw
ret
.key:
cmp ebx,KEY_ESCAPE
je btn.bot.cancel
cmp ebx,KEY_RETURN
je btn.bot.opensave
cmp ebx,KEY_NUMRETURN
je btn.bot.opensave
call textbox.key
ret
gotodlg_handler:
cmp al,1
je .draw
cmp al,2
je .key
cmp al,3
je botdlg.button
ret
.draw:
mov ebx,[bot_ofs]
add ebx,(1+3)*65536+6
mcall 4,,[sc.work_text],s_2filename,s_2filename.size
mov ebx,[p_info.box.width]
shl ebx,16
mov ecx,[bot_ofs]
shl ecx,16
add ecx,(2+18)*65536+15
push 20002
cmp [bot_dlg_mode2],0
jne .draw.lp1
add ebx,-(2+6*(s_2open.size+2))*65536+6*(s_2open.size+2)
push s_2open s_2open.size
jmp @f
.draw.lp1:
add ebx,-(2+6*(s_2save.size+2))*65536+6*(s_2save.size+2)
push s_2save s_2save.size
@@: call define_3d_button
sub ebx,(6*(s_2cancel.size+2)+3)*65536
mov bx,6*(s_2cancel.size+2)
push 20001 s_2cancel s_2cancel.size
call define_3d_button
mov ebp,tb_opensave
mov eax,[p_info.box.width]
sub eax,6*(s_2filename.size+3)
add eax,6*(s_2filename.size+2)*65536
mov dword[tbox.x],eax
add ecx,-18*65536+1
mov dword[tbox.y],ecx
call textbox.draw
ret
.key:
cmp ebx,KEY_ESCAPE
je btn.bot.cancel
cmp ebx,KEY_RETURN
je btn.bot.opensave
cmp ebx,KEY_NUMRETURN
je btn.bot.opensave
call textbox.key
ret
botdlg.button:
mov esi,accel_table2_botdlg
.acc: cmp ebx,[esi]
jne @f
call dword[esi+4]
ret
@@: add esi,8
cmp byte[esi],0
jne .acc
ret
btn.bot.cancel:
xor eax,eax
mov [bot_mode],al
mov [bot_dlg_height],eax
mov [s_status],eax
call drawwindow
ret
btn.bot.opensave:
cmp [bot_dlg_mode2],0
je .lp1
call save_file
jnc @f
jmp .lp2
.lp1: call btn.load_file
jnc @f
.lp2:
ret
@@: ;call update_caption
xor eax,eax
mov [bot_mode],al
mov [bot_dlg_height],eax
call drawwindow
ret
btn.bot.find:
movzx ecx,[tb_find.length]
mov [s_search.size],ecx
mov esi,tb_find.text
mov edi,s_search
cld
rep movsb
cmp [bot_dlg_mode2],0
je @f
call search
jnc .found
call check_inv_all
ret
.found:
;---------------------------------------
push [copy_size] [copy_count] [copy_buf]
; mov esi,0 ;! AREA_CBUF
; mov edi,0 ;! AREA_CBUF-304
; mov ecx,300/4
; rep movsd
movzx eax,[tb_replace.length]
add eax,10
call mem.Alloc
mov [copy_buf],eax
movzx eax,[tb_replace.length]
mov esi,tb_replace.text
mov edi,[copy_buf] ;! AREA_CBUF
stosd
mov ecx,eax
jecxz .lp1
rep movsb
.lp1: add eax,4
mov [copy_size],eax
mov [copy_count],1
push [cur_tab.Editor.SelStart.X] ;! [sel.x]
call init_sel_vars
call key.ctrl_v
pop [cur_tab.Editor.SelStart.X] ;! [sel.x]
mov eax,[copy_buf]
call mem.Free
; mov esi,0 ;! AREA_CBUF-304
; mov edi,0 ;! AREA_CBUF
; mov ecx,300/4
; rep movsd
pop [copy_buf] [copy_count] [copy_size]
;---------------------------------------
call check_inv_all
ret
@@: xor eax,eax
mov [bot_mode],al
mov [bot_dlg_height],eax
call btn.search
call drawwindow
ret