button:
	mcall	17
	cmp	al,0
	jne	still
	shr	eax,8

	cmp	[bot_mode],0
	je	@f
	mov	ebx,eax
	mov	al,3
	call	[bot_dlg_handler]
	jmp	still

    @@: mov	esi,accel_table2
  .acc: cmp	eax,[esi]
	jne	@f
	call	dword[esi+4]
	jmp	still.skip_write
    @@: add	esi,8
	cmp	byte[esi],0
	jne	.acc

	jmp	still.skip_write

;        cmp     eax,BUTTON_SCRLUP
;        jne     not_up
  btn.scroll_up:
	dec	[top_line]
	jns	@f
	inc	[top_line]
	ret;jmp     still.skip_write
    @@: call	check_inv_all.skip_check
	ret
;  not_up:

;        cmp     eax,BUTTON_SCRLDN
;        jne     not_down
  btn.scroll_down:
	inc	[top_line]
	mov	eax,[lines]
	sub	eax,[lines.scr]
	cmp	eax,[top_line]
	jge	@f
	dec	[top_line]
	;dec     eax
	;mov     [top_line],eax
	ret;jmp     still.skip_write
    @@: call	check_inv_all.skip_check
	ret
;  not_down:

;        cmp     eax,BUTTON_SCRLLT
;        jne     not_left
  btn.scroll_left:
	dec	[left_col]
	jns	@f
	inc	[left_col]
	ret;jmp     still.skip_write
    @@: call	check_inv_all.skip_check
	ret
;  not_left:

;        cmp     eax,BUTTON_SCRLRT
;        jne     not_right
  btn.scroll_right:
	inc	[left_col]
	mov	eax,[columns]
	sub	eax,[columns.scr]
	cmp	eax,[left_col]
	jge	@f
	dec	[left_col]
	;dec     eax
	;mov     [left_col],eax
	ret;jmp     still.skip_write
    @@: call	check_inv_all.skip_check
	ret
;  not_right:

; SEARCH {
;  search:
;        cmp     al,BUTTON_SEARCH
;        jne     no_search
  btn.search:
  key.f3:
	call	search
	jc	@f
	call	check_inv_all
    @@: ret


func search
	cld
	mov	ecx,[pos.y]
	mov	edx,ecx
	call	get_line_offset
	cmp	word[esi],0
	je	.exit
	call	get_real_length
	add	esi,4
	or	eax,eax
	jz	.end_line.2
	mov	ecx,eax
	sub	ecx,[pos.x]
	push	esi
	add	esi,[pos.x]
	;dec     ecx
	;inc     esi
	jmp	@f

  .next_line:
	push	esi
    @@: sub	ecx,[s_search.size]
	inc	ecx

  .next_char:
	dec	ecx
	js	.end_line
	xor	edi,edi

  .next_ok:
	movzx	eax,byte[edi+esi]
	movzx	ebx,byte[edi+s_search]

	cmp	al,$61
	jb	@f
	add	al,[eax+add_table-$61]
    @@: cmp	bl,$61
	jb	@f
	add	bl,[ebx+add_table-$61]
    @@:
	cmp	al,bl
	je	@f

	inc	esi
	jmp	.next_char
    @@:
	inc	edi
	cmp	edi,[s_search.size]
	jne	.next_ok

  .found:
	add	esp,4
	mov	[pos.y],edx
	mov	[sel.y],edx
	mov	ecx,edx
	lea	eax,[esi-4]
	call	get_line_offset
	sub	eax,esi
	mov	[sel.x],eax
	add	eax,[s_search.size]
	mov	[pos.x],eax
	mov	[s_status],0
	clc
	ret

  .end_line:
	pop	esi
  .end_line.2:
	movzx	eax,word[esi-4]
	add	esi,eax;[esi-4]
	inc	edx
	call	get_real_length
	mov	ecx,eax
	lodsd
	or	eax,eax
	jnz	.next_line
  .exit:
	mov	[s_status],s_text_not_found
	stc
	ret
endf

; SEARCH }

;  no_search:

; TOOLBAR {
;        cmp     eax,10000
;        jb      no_toolbar

;        add     eax,-10000
;        jnz     @f
  btn.compile:
  key.ctrl_f9:
	mov	bl,0;[run_outfile],0
	call	start_fasm
	ret;jmp     still
;    @@: dec     eax
;        jnz     @f
  btn.compile_run:
  key.f9:
	mov	bl,1;[run_outfile],1
	call	start_fasm
	ret;jmp     still
;    @@: dec     eax
;        jnz     @f
  btn.debug_board:
	call	open_debug_board
	ret;jmp     still
;    @@: dec     eax
;        jnz     still
  btn.sysfuncs_txt:
	call	open_sysfuncs_txt
	ret;jmp     still
; TOOLBAR }

;  no_toolbar:

;        cmp     al,4
;        jne     noid4

; LOAD_FILE {
;  do_load_file:
  btn.load_file:
  key.ctrl_l:
;        cmp     [s_fname],'/'
;        jne     @f
;        call    load_hd_file
;        jmp     .restorecursor
;    @@: call    load_file
	call	load_file
	jnc	@f
	ret
;    .restorecursor:
    @@:
	xor	eax,eax
	mov	[top_line],eax
	mov	[left_col],eax
	mov	[pos.x],eax
	mov	[pos.y],eax
	mov	[sel.x],eax
	mov	[sel.y],eax

	mov	[modified],al

; enable color syntax for ASM and INC files:
	mov	[asm_mode],al

	mov	eax,[f_info.length] ; [s_fname.size]
	add	eax,f_info.path ; s_fname
	mov	byte[eax],0
	mov     ecx, dword [eax-3]
	or      ecx, 0x202020
	cmp     ecx, 'asm'
	jne	@f
	inc	[asm_mode]
	jmp	.nocol
    @@: cmp	ecx, 'inc'
	jne	.nocol
	inc	[asm_mode]
    .nocol:

  update_caption:
macro unused {
	movzx	ecx,[f_info.length] ; [s_fname.size]
	add	ecx,10		   ; strlen(" - TINYPAD");
	cmp	ecx,[s_title.size]
	jne	@f
	add	ecx,-10
	mov	esi,f_info.path ; s_fname       ; strcmp(s_fname,header);
	mov	edi,s_title
	repe	cmpsb
	jne	@f
;       call    draw_file
	clc
	ret;jmp     still
    @@:
}
; set window title:
	mov	esi,f_info.path ; s_fname
	mov	edi,s_title

	cld
	mov	ecx,[f_info.length] ; [s_fname.size]
	jecxz	@f
	;lea     eax,[ecx+10]
	;mov     [s_title.size],eax
	;cld
	rep	movsb

	mov	dword[edi],' - '
	add	edi,3
    @@: mov	esi,htext
	mov	ecx,htext.size
	rep	movsb

	mov	al,0
	stosb

;       call    drawwindow
	clc
	ret;jmp     still
; LOAD_FILE }

;  noid4:

;        cmp     al, 2
;        jz      yessave

;        dec     al       ; close if butid == 1
;        jnz     nosave
; EXIT:
  btn.close_main_window:
  key.alt_x:
	mov	esi,self_path
	mov	byte[esi+PATHL-1],0
	mov	edi,f_info.path
	cld
    @@: lodsb
	stosb
	or	al,al
	jnz	@b
	mov	ebx,f_info
	mov	dword[ebx+0],1
	mov	dword[ebx+8],self_path
	mov	dword[ebx+12],0
	mcall	58

;       test    eax,eax
;       je      .close
;       cmp     eax,6
;       je      .close
;       ret

  .close:
	mov	[main_closed],1
	mcall	-1

; SAVE_FILE {
;  yessave:
;  btn.save_file:
;  key.ctrl_s:
;        mov     [bot_mode],1
;        mov     [bot_save_mode],1
;        mov     [bot_dlg_height],16*2+4*2-1
;        mov     [bot_dlg_handler],osdlg_handler
;        call    drawwindow
;        call    save_file
;        ret;jmp     still
; SAVE_FILE }

;  nosave:
;  btn.save_enter_name:
;        inc     al
;        call    read_string
;        ret;jmp     still