;-----------------------------------------------------------------------------
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
	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]

	mov	esi,AREA_CBUF
	mov	edi,AREA_CBUF-304
	mov	ecx,300/4
	rep	movsd

	movzx	eax,[tb_replace.length]
	mov	esi,tb_replace.text
	mov	edi,AREA_CBUF
	stosd
	mov	ecx,eax
	jecxz	.lp1
	rep	movsb
  .lp1: add	eax,4
	mov	[copy_size],eax
	mov	[copy_count],1

	push	[sel.x]
	call	init_sel_vars
	call	key.ctrl_v
	pop	[sel.x]

	mov	esi,AREA_CBUF-304
	mov	edi,AREA_CBUF
	mov	ecx,300/4
	rep	movsd

	pop	[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
