;SayErr  int num_strings, const char* strings[],
;                      int num_buttons, const char* buttons[]);

proc SayErr num_strings:dword, strings:dword,num_buttons:dword, buttons:dword
	pushad
	cmp	[num_strings],1
	je	@f
	m2m	[errmess0], strErrorExc
	jmp	.l1
       @@:
	mov	ebx,[strings]
	m2m	[errmess0], dword [ebx]
       .l1:
	mcall	51,1,threadSayErr,stackDlg
	popad
	mov	eax,1
	ret
endp

proc SimpleSayErr str:dword
	pushad
	m2m	[errmess0],[str]
	mcall	51,1,threadSayErr,stackDlg
	popad
	ret
endp


proc threadSayErr
	mcall	40, 000111b+0C000000h

.wm_redraw:
	mcall	12, 1
	mcall	48, 3, sc, sizeof.system_colors
	mov	edx, [sc.work]

	or	edx, 0x33000000
	mcall 0, <220,420>, <220,110>, , , title

	mov	ecx,[sc.work_text]
	or	ecx,90000000h
	mov	edx,[errmess0]
	mcall 4, <15,11>

	mcall 8, <105,100>,<45,25>,1,[sc.work_button]
	mov	ecx,[sc.work_button_text]
	or	ecx,90000000h
	mcall 4, <147,51>, , strOk

	mcall 12, 2

.still:
	mcall	10
	cmp	eax, 1
	je	.wm_redraw
	cmp	eax, 2
	je	.wm_key
	cmp	eax, 3
	je	.wm_button
	jmp	.still

.wm_button:
	mcall	17

	cmp	ah, 1
	je	.exit
	jmp	.still

.wm_key:
	mcall	2
	jmp	.still
.exit:
	mcall	-1
endp

;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
    ; "enter password" dialog for KFar
;password_dlg:
;        dd      1       ; use standard dialog colors
;        dd      -1      ; center window by x
;        dd      -1      ; center window by y
;.width  dd      ?       ; width (will be filled according to current console width)
;        dd      2       ; height
;        dd      4, 2    ; border size
;        dd      aEnterPasswordTitle     ; title
;        dd      ?       ; colors (will be set by KFar)
;        dd      0       ; used internally by dialog manager, ignored
;        dd      0, 0    ; reserved for DlgProc
;        dd      2       ; 2 controls
;; the string "enter password"
;        dd      1       ; type: static
;        dd      1,0     ; upper-left position
;.width1 dd      ?,0     ; bottom-right position
;        dd      aEnterPassword  ; data
;        dd      0       ; flags
;; editbox for password
;        dd      3       ; type: edit
;        dd      1,1     ; upper-left position
;.width2 dd      ?,0     ; bottom-right position
;        dd      password_data   ; data
;        dd      2Ch     ; flags



proc DialogBox dlgInfo:dword
	pushad
	mov	ebx,[dlgInfo]
	mov	eax,[ebx+19*4]
	mov	[forpassword],eax
	mov	byte[eax], 0
	mov	[stateDlg], 0
	mcall	51,1,threadDialogBox,stackDlg

	;wait thread...
    @@: cmp	[stateDlg],0
	jne	@f
	mcall	5,1
	jmp	@b
     @@:
	popad
	cmp	[stateDlg], 1
	jne	@f
	xor	eax, eax
	ret
    @@:
	or	eax, -1
	ret
endp

proc threadDialogBox

	mcall	40, 100111b+0C000000h
	mov	eax,[forpassword]
	mov	[edtPassword+4*9],eax
	xor	eax,eax
	mov	dword[edtPassword.size], eax
	mov	dword[edtPassword.pos], eax

.wm_redraw:
	mcall	12, 1
	mcall	48, 3, sc, sizeof.system_colors
	mov	edx, [sc.work]
	or	edx, 0x33000000
	mcall	0, <200,320>, <200,140>, , , title

	edit_boxes_set_sys_color edtPack,endEdits,sc
	stdcall [edit_box_draw],edtPassword


	mov	ecx,[sc.work_text]
	or	ecx,90000000h
	mcall 4, <56,12>, , strGetPass

	mcall 8, <70,80>,<74,22>,2,[sc.work_button]
	mov	ecx,[sc.work_button_text]
	or	ecx,90000000h
	mcall 4, <103,79>, , strOk

	mcall 8, <165,80>,<74,22>,1,[sc.work_button]
	mov	ecx,[sc.work_button_text]
	or	ecx,90000000h
	mcall 4, <182,79>, , strCancel


	mcall 12, 2

.still:
	mcall	10
	cmp	eax, 1
	je	.wm_redraw
	cmp	eax, 2
	je	.wm_key
	cmp	eax, 3
	je	.wm_button
	cmp	eax, 6
	je	.wm_mouse

	jmp	.still

.wm_key:
	mcall	2
	stdcall [edit_box_key],edtPassword
	jmp	.still


.wm_button:
	mcall	17

	cmp	ah, 2		;OK
	jne	@f
	mov	[stateDlg],1
	jmp	.exit
    @@:

	cmp	ah, 1		;Close window or Cancel
	jne	 .still
	mov	[stateDlg],2
	jmp	.exit

.wm_mouse:
	stdcall [edit_box_mouse],edtPassword


	jmp	.still

.exit:
	mcall	-1
endp