; à®£à ¬¬  ¤«ï ¯à¥®¡à §®¢ ­¨ï ç¨á¥« ¨§ áâப¨
;   ¢ ä®à¬ â float, double,   â ª¦¥ ¨§ 10 ¨«¨ 16 à¨ç­®£®
;   ¢® float.
; ‘¤¥« ­  ­  ®á­®¢¥ hex2dec2bin ¨ ¯à¨¬¥à®¢ ¨§ ä ©«  list2_05.inc
;   ( ¢â®à Šã« ª®¢ ‚« ¤¨¬¨à ƒ¥­­ ¤ì¥¢¨ç 24.05.2002),
;   ª®â®àë¥ ChE ¯¥à¥¤¥« « á 16 ­  32 ¡¨â  ­   áᥬ¡«¥à fasm.
; à®£à ¬¬  ¯®§¢®«ï¥â à¥è âì â ª¨¥ § ¤ ç¨:
; 1) ç¨á«® ¢ áâப®¢®¬ ¢¨¤¥ ¯¥à¥¢¥á⨠¢ 4 ¡ ©â  (float) ¢ ¬ è¨­­ë© ¢¨¤
; 2) ç¨á«® ¢ áâப®¢®¬ ¢¨¤¥ ¯¥à¥¢¥á⨠¢ 8 ¡ ©â (double) ¢ ¬ è¨­­ë© ¢¨¤
; 3) ç¨á«® ¢ ¬ è¨­­®¬ ¢¨¤¥ (float) ¯¥à¥¢¥á⨠¢ áâப®¢ë© ¢¨¤ (5 §­ ª®¢ ¯®á«¥ § ¯ï⮩)

use32
    org 0x0
    db	'MENUET01'
    dd	0x01,start,i_end,e_end,e_end,0,sys_path

include '../../../proc32.inc'
include '../../../macros.inc'
include '../../../develop/libraries/box_lib/load_lib.mac'
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
include 'lang.inc'

@use_library

align 4
start:
	load_libraries l_libs_start,l_libs_end
	;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ­ è  ¡¨¡«¨®â¥ª 
	mov	ebp,lib_0
	cmp	dword [ebp+ll_struc_size-4],0
	jz	@f
		mcall -1 ;exit not correct
	@@:
	mcall 40,0x27
	mcall 48, 3, sys_colors, 40
	edit_boxes_set_sys_color edit1,editboxes_end,sys_colors
	option_boxes_set_sys_color sys_colors,Option_boxes1

align 4
red:
    call draw_window

align 4
still:
    mcall 10		; äã­ªæ¨ï 10 - ¦¤ âì ᮡëâ¨ï

    cmp  eax,1		; ¯¥à¥à¨á®¢ âì ®ª­® ?
    je	 red		; ¥á«¨ ¤  - ­  ¬¥âªã red
    cmp  eax,2		; ­ ¦ â  ª« ¢¨è  ?
    je	 key		; ¥á«¨ ¤  - ­  key
    cmp  eax,3		; ­ ¦ â  ª­®¯ª  ?
    je	 button 	; ¥á«¨ ¤  - ­  button
    cmp  eax,6
    je	 mouse

    jmp  still		; ¥á«¨ ¤à㣮¥ ᮡë⨥ - ¢ ­ ç «® 横« 

;---------------------------------------------------------------------
key: ; ­ ¦ â  ª« ¢¨è  ­  ª« ¢¨ âãà¥
	mcall 2
	;cmp ah,13
	stdcall [edit_box_key], dword edit1
	jmp  still ; ¢¥à­ãâìáï ª ­ ç «ã 横« 

; Š®«¨ç¥á⢮ §­ ª®¢ ç¨á«  ¯®á«¥ § ¯ï⮩ (1-17)
NumberSymbolsAD DW 5
; Š®­áâ ­âë (10 ¢ á⥯¥­¨ N)
MConst DQ 1.0E1,1.0E2,1.0E3,1.0E4,1.0E5
       DQ 1.0E6,1.0E7,1.0E8,1.0E9,1.0E10
       DQ 1.0E11,1.0E12,1.0E13,1.0E14,1.0E15
       DQ 1.0E16,1.0E17,1.0E18,1.0E19,1.0E20
       DQ 1.0E21,1.0E22,1.0E23,1.0E24,1.0E25
       DQ 1.0E26,1.0E27,1.0E28,1.0E29,1.0E30
       DQ 1.0E31,1.0E32,1.0E33,1.0E34,1.0E35
       DQ 1.0E36,1.0E37,1.0E38,1.0E39,1.0E40
       DQ 1.0E41,1.0E42,1.0E43,1.0E44,1.0E45
       DQ 1.0E46,1.0E47,1.0E48,1.0E49,1.0E50
       DQ 1.0E51,1.0E52,1.0E53,1.0E54,1.0E55
       DQ 1.0E56,1.0E57,1.0E58,1.0E59,1.0E60
       DQ 1.0E61,1.0E62,1.0E63,1.0E64,1.0E65
       DQ 1.0E66,1.0E67,1.0E68,1.0E69,1.0E70
       DQ 1.0E71,1.0E72,1.0E73,1.0E74,1.0E75
       DQ 1.0E76,1.0E77,1.0E78,1.0E79,1.0E80
       DQ 1.0E81,1.0E82,1.0E83,1.0E84,1.0E85
       DQ 1.0E86,1.0E87,1.0E88,1.0E89,1.0E90
       DQ 1.0E91,1.0E92,1.0E93,1.0E94,1.0E95
       DQ 1.0E96,1.0E97,1.0E98,1.0E99,1.0E100
       DQ 1.0E101,1.0E102,1.0E103,1.0E104,1.0E105
       DQ 1.0E106,1.0E107,1.0E108,1.0E109,1.0E110
       DQ 1.0E111,1.0E112,1.0E113,1.0E114,1.0E115
       DQ 1.0E116,1.0E117,1.0E118,1.0E119,1.0E120
       DQ 1.0E121,1.0E122,1.0E123,1.0E124,1.0E125
       DQ 1.0E126,1.0E127,1.0E128
; —¨á«® á ¯« ¢ î饩 § ¯ï⮩ ¤¢®©­®© â®ç­®áâ¨
Data_Double   DQ ?
; —¨á«® ¢ BCD-ä®à¬ â¥ 
Data_BCD      DT ?
; ‚ᯮ¬®£ â¥«ì­ë© ä« £
Data_Flag     DB ?
; ‡­ ª १ã«ìâ â  (¥á«¨ ­¥ 0 - ®âà¨æ â¥«ì­®¥ ç¨á«®)
Data_Sign     DB ?
; ‘âப  ¤«ï åà ­¥­¨ï ç¨á«  ¢ ª®¤¥ ASCII
Data_String   DB 32 DUP (?)

string1 db 32 dup (0)
string1_end:



;*******************************************************
;*  …Ž€‡Ž‚€ˆ… —ˆ‘‹€ ‘ ‹€‚€ž™…‰ ‡€Ÿ’Ž‰ ‚ ‘’ŽŠ“  *
;* —¨á«® ¨¬¥¥â ä®à¬ â á 㤢®¥­­®© â®ç­®áâìî, १ã«ìâ â *
;* ¢ë¤ ¥âáï ¢ ¤¥áïâ¨ç­®¬ ª®¤¥, ¢ "¡ë⮢®¬" ä®à¬ â¥ á   *
;* 䨪á¨à®¢ ­­ë¬ ª®«¨ç¥á⢮¬ §­ ª®¢ ¯®á«¥ § ¯ï⮩.     *
;* ‚室­ë¥ ¯ à ¬¥âàë:                                  *
;* Data_Double - ¯à¥®¡à §ã¥¬®¥ ç¨á«®;                  *
;* NumberSymbolsAD - ª®«¨ç¥á⢮ §­ ª®¢ ¯®á«¥           *
;*                   § ¯ï⮩ (0-17).                   *
;* ‚ë室­ë¥ ¯ à ¬¥âàë:                                 *
;* Data_String - áâப -१ã«ìâ â.                     *
;*******************************************************
DoubleFloat_to_String:
	pushad
	; ¥§ã«ìâ â § ¯¨á뢠âì ¢ áâபã Data_String
	mov	EDI, Data_String

	; ‘¤¢¨£ ¥¬ ç¨á«® ¢«¥¢® ­  NumberSymbolsAD
	; ¤¥áïâ¨ç­ëå à §à冷¢
	fninit		       ;á¡à®á ᮯà®æ¥áá®à 
	fld	[Data_Double]  ;§ £à㧨âì ç¨á«®
	xor ebx,ebx
	mov	BX,[NumberSymbolsAD]
	cmp	BX, 0
	je	.NoShifts     ;­¥â æ¨äà ¯®á«¥ § ¯ï⮩
	jl	.Error	      ;®è¨¡ª 
	dec	BX
	shl	BX, 3		;㬭®¦ ¥¬ ­  8
	add	EBX, MConst
	fmul	qword [EBX] ;㬭®¦¨âì ­  ª®­áâ ­âã
.NoShifts:
	; ˆ§¢«¥çì ç¨á«® ¢ ª®¤¥ BCD
	fbstp	[Data_BCD]
; à®¢¥à¨âì १ã«ìâ â ­  ¯¥à¥¯®«­¥­¨¥
	mov	AX,word [Data_BCD + 8]
	cmp	AX,0FFFFh  ;"¤¥áïâ¨ç­®¥" ¯¥à¥¯®«­¥­¨¥?
	je	.Overflow
; ‚뤥«¨âì §­ ª ç¨á«  ¨ § ¯¨á âì ¥£® ¢ ASCII-ª®¤¥
	mov	AL, byte [Data_BCD + 9]
	and	AL,AL
	jz	.NoSign
	mov	AL,'-'
	stosb
.NoSign:
;  á¯ ª®¢ âì ç¨á«® ¢ ª®¤ ASCII
	mov	ebx,8	 ;ᬥ饭¨¥ ¯®á«¥¤­¥© ¯ àë æ¨äà
	mov	ecx,9	 ;áç¥â稪 ¯ à æ¨äà
	; Ž¯à¥¤¥«¨âì ¯®§¨æ¨î ¤¥áïâ¨ç­®© â®çª¨ ¢ ç¨á«¥
	mov	DX,18
	sub	DX,[NumberSymbolsAD]
	js	.Error	;®è¨¡ª , ¥á«¨ ®âà¨æ â¥«ì­ ï
	jz	.Error	;¨«¨ ­ã«¥¢ ï ¯®§¨æ¨ï
.NextPair:
	; ‡ £à㧨âì ®ç¥à¥¤­ãî ¯ àã à §à冷¢
	mov	AL, byte [ebx + Data_BCD]
	mov	AH,AL
	; ‚뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨
	; á®åà ­¨âì áâ àèãî â¥âà ¤ã
	shr	AL,4
	add	AL,'0'
	stosb
	dec	DX
	jnz	.N0
	mov	AL,'.'
	stosb
.N0:   ; ‚뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨
	; á®åà ­¨âì ¬« ¤èãî â¥âà ¤ã
	mov	AL,AH
	and	AL,0Fh
	add	AL,'0'
	stosb
	dec	DX
	jnz	.N1
	mov	AL,'.'
	stosb
.N1:
	dec  BX
	loop .NextPair
	mov  AL,0
	stosb

; “¡à âì ­¥§­ ç é¨¥ ­ã«¨ á«¥¢ 
	mov	EDI, Data_String
	mov	ESI, Data_String
	; à®¯ãáâ¨âì §­ ª ç¨á« , ¥á«¨ ®­ ¥áâì
	cmp	byte [ESI],'-'
	jne	.N2
	inc	ESI
	inc	EDI
.N2:   ; ‡ £à㧨âì ¢ áç¥â稪 横«  ª®«¨ç¥á⢮ à §à冷¢
	; ç¨á«  ¯«îá 1 (¡ ©â ¤¥áïâ¨ç­®© â®çª¨)
	mov	ecx,18+1+1
	; à®¯ãáâ¨âì ­¥§­ ç é¨¥ ­ã«¨
.N3:
	cmp byte [ESI],'0'
	jne .N4
	cmp byte [ESI+1],'.'
	je .N4
	inc ESI
	loop .N3
	; Žè¨¡ª  - ­¥â §­ ç é¨å æ¨äà
	jmp	.Error
; ‘ª®¯¨à®¢ âì §­ ç éãî ç áâì ç¨á«  ¢ ­ ç «® áâப¨
.N4:	rep movsb
	jmp    .End

; Žè¨¡ª 
.Error:
	mov	AL,'E'
	stosb
	mov	AL,'R'
	stosb
	mov	AL,'R'
	stosb
	xor	AL,AL
	stosb
	jmp	.End
; ¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨
.Overflow:
	mov	AL,'#'
	stosb
	xor	AL,AL
	stosb
; Š®­¥æ ¯à®æ¥¤ãàë
.End:
	popad
	ret

;****************************************************
;* …Ž€‡Ž‚€’œ ‘’ŽŠ“ ‚ —ˆ‘‹Ž ‘ ‹€‚€ž™…‰ ‡€Ÿ’Ž‰ *
;*      (ç¨á«® ¨¬¥¥â ®¡ëç­ë©, "¡ë⮢®©" ä®à¬ â)     *
;* ‚室­ë¥ ¯ à ¬¥âàë:                               *
;* Data_String - ç¨á«® ¢ ª®¤¥ ASCII.                *
;* ‚ë室­ë¥ ¯ à ¬¥âàë:                              *
;* Data_Double - ç¨á«® ¢ ¤¢®¨ç­®¬ ª®¤¥.             *
;****************************************************
String_to_DoubleFloat:
	pushad
	cld
	; Žç¨é ¥¬ Data_BCD 
	mov dword [Data_BCD],0
	mov dword [Data_BCD+4],0
	mov  word [Data_BCD+8],0
	; Žç¨é ¥¬ ¡ ©â §­ ª 
	mov	[Data_Sign],0
	; ‡ ­®á¨¬ ¢ SI 㪠§ â¥«ì ­  áâபã
	mov	ESI, Data_String
	; à®¯ã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬
	mov	ecx,64 ;§ é¨â  ®â § æ¨ª«¨¢ ­¨ï
.ShiftIgnore:
	lodsb
	cmp	AL,' '
	jne	.ShiftIgnoreEnd
	loop	.ShiftIgnore
	jmp	.Error
.ShiftIgnoreEnd:
	; à®¢¥à塞 §­ ª ç¨á« 
	cmp	AL,'-'
	jne	.Positive
	mov	[Data_Sign],80h
	lodsb
.Positive:
	mov	[Data_Flag],0 ;¯à¨§­ ª ­ «¨ç¨ï â®çª¨
	mov	DX,0	      ;¯®§¨æ¨ï â®çª¨
	mov	ecx,18	      ;¬ ªá. ç¨á«® à §à冷¢
.ASCIItoBCDConversion:
	cmp	AL,'.'	      ;â®çª ?
	jne	.NotDot
	cmp	[Data_Flag],0 ;â®çª  ­¥ ¢áâà¥ç « áì?
	jne	.Error
	mov	[Data_Flag],1
	lodsb
	cmp	AL,0	      ;ª®­¥æ áâப¨?
	jne	.NotDot
	jmp	.ASCIItoBCDConversionEnd
.NotDot:
	; “¢¥«¨ç¨âì ­  1 §­ ç¥­¨¥ ¯®§¨æ¨¨ â®çª¨,
	; ¥á«¨ ®­  ¥é¥ ­¥ ¢áâà¥ç « áì
	cmp	[Data_Flag],0
	jnz	.Figures
	inc	DX
.Figures:
	; ‘¨¬¢®«ë ç¨á«  ¤®«¦­ë ¡ëâì æ¨äà ¬¨
	cmp	AL,'0'
	jb	.Error
	cmp	AL,'9'
	ja	.Error
	; ¨è¥¬ ®ç¥à¥¤­ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD
	and	AL,0Fh
	or	byte [Data_BCD],AL
	; à®¢¥àª  ­  ª®­¥æ áâப¨
	cmp	byte [ESI],0
	je	.ASCIItoBCDConversionEnd
	; ‘¤¢¨£ ¥¬ BCD ­  4 à §à鸞 ¢«¥¢®
	; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â )
	mov	AX,word [Data_BCD+6]
	shld	word [Data_BCD+8],AX,4
	; (ᤢ¨£ ¥¬ á।­¨¥ 4 ¡ ©â )
	mov	EAX, dword [Data_BCD]
	shld	dword [Data_BCD+4],EAX,4
	; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â )
	shl	dword [Data_BCD],4
	; ‡ £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL
	lodsb
	loop	.ASCIItoBCDConversion
	; …᫨ 19-© ᨬ¢®« ­¥ 0 ¨ ­¥ â®çª ,
	; â® ®è¨¡ª  ¯¥à¥¯®«­¥­¨ï
	cmp	AL,'.'
	jne	.NotDot2
	inc	ecx
	lodsb
.NotDot2:
	cmp	AL,0
	jne	.Error ;¯¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨

; …Ž€‡Ž‚€’œ —ˆ‘‹Ž ˆ‡ ŠŽ„€ BCD ‚ ‚…™…‘’‚…Ž… —ˆ‘‹Ž
.ASCIItoBCDConversionEnd:
	; ‚¯¨á âì §­ ª ¢ áâ à訩 ¡ ©â
	mov	AL,[Data_Sign]
	mov	byte [Data_BCD+9],AL
	; ‘¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à 
	fninit
	; ‡ £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ â¥
	fbld	[Data_BCD]
	; ‚ëç¨á«¨âì ­®¬¥à ¤¥«¨â¥«ï
	mov	EBX,18+1
	sub	BX,CX
	sub	BX,DX
	cmp	EBX,0
	je	.NoDiv
	dec	EBX
	shl	EBX,3		;㬭®¦ ¥¬ ­  8
	add	EBX, MConst
	fdiv	qword [EBX] ;à §¤¥«¨âì ­  ª®­áâ ­âã
.NoDiv:; ‚ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç­®¬ ä®à¬ â¥
	fstp	[Data_Double]
	jmp	.End

.Error:; à¨ «î¡®© ®è¨¡ª¥ ®¡­ã«¨âì १ã«ìâ â
	fldz	;§ ­¥á⨠­®«ì á á⥪ ᮯà®æ¥áá®à 
	fstp	[Data_Double]
.End:
	popad
	ret



;input:
; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
;output:
; eax - ç¨á«®
align 4
proc conv_str_to_int, buf:dword
	xor eax,eax
	push ebx ecx esi
	xor ebx,ebx
	mov esi,[buf]
	;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
	xor ecx,ecx
	inc ecx
	cmp byte[esi],'-'
	jne @f
		dec ecx
		inc esi
	@@:

	cmp word[esi],'0x'
	je .load_digit_16

	.load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
		mov bl,byte[esi]
		cmp bl,'0'
		jl @f
		cmp bl,'9'
		jg @f
			sub bl,'0'
			imul eax,10
			add eax,ebx
			inc esi
			jmp .load_digit_10
	jmp @f

	.load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
		add esi,2
	.cycle_16:
		mov bl,byte[esi]
		cmp bl,'0'
		jl @f
		cmp bl,'f'
		jg @f
		cmp bl,'9'
		jle .us1
			cmp bl,'A'
			jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
		.us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
		cmp bl,'F'
		jle .us2
			cmp bl,'a'
			jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
			sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
		.us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
			sub bl,'0'
			cmp bl,9
			jle .cor1
				sub bl,7 ;convert 'A' to '10'
			.cor1:
			shl eax,4
			add eax,ebx
			inc esi
			jmp .cycle_16
	@@:
	cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
	jne @f
		sub ecx,eax
		mov eax,ecx
	@@:
	pop esi ecx ebx
	ret
endp



;---------------------------------------------------------------------
align 4
button:
	mcall 17		; 17 - ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
	cmp   ah, 1	; ¥á«¨ … ­ ¦ â  ª­®¯ª  á ­®¬¥à®¬ 1,
	jne   @f
		mcall -1
	@@:
	cmp ah, 5
	jne @f
		cmp dword[option_group1],opt3
		jne .opt_3_end
			stdcall conv_str_to_int,dword[edit1.text]
			mov dword[Data_Double],eax
			finit
			fld dword[Data_Double]
			fstp qword[Data_Double]

			; Data_Double - ¯à¥®¡à §ã¥¬®¥ ç¨á«®
			; NumberSymbolsAD - ª®«¨ç¥á⢮ §­ ª®¢ ¯®á«¥ § ¯ï⮩ (0-17)
			call DoubleFloat_to_String
			mov dword[Data_Double],eax ;¢®ááâ ­ ¢«¨¢ ¥¬ §­ ç¥­¨¥ ¢ ä®à¬ â¥ float
			jmp .opt_all_end
		.opt_3_end:

		mov esi,string1
		mov edi,Data_String
		cld
		mov ecx,32
		rep movsb

		call String_to_DoubleFloat
		cmp dword[option_group1],opt1
		jne .opt_all_end ;¥á«¨ ¢ë¡à ­ float, â® ¯à¥®¡à §ã¥¬ ¨§ à ­¥¥ ¯®«ã祭­®£® double
			finit
			fld  qword[Data_Double] ;ç¨â ¥¬ ¨§ double
			fstp dword[Data_Double] ;  ¢®§¢à é ¥¬ ¢® float
		.opt_all_end:
		jmp red
	@@:
	jmp still

mouse:
	stdcall [edit_box_mouse], edit1
	stdcall [option_box_mouse], Option_boxes1
	jmp still

;------------------------------------------------
align 4
draw_window:
	mcall 48, 3, sys_colors, sizeof.system_colors

	mcall 12, 1
	mov edx, 0x14000000
	or  edx, [sys_colors.work]
	mcall 0, 200*65536+300, 200*65536+175, ,,title

	mcall 8, (300-53)*65536+38,145*65536+ 15, 5,[sys_colors.work_button] ; ª­®¯ª  Ok

	mov ecx, 0x80000000
	or  ecx, [sys_colors.work_text]
	mcall 4, 15*65536 +30,, binstr,
	mcall  , 15*65536 +58,, decstr,
		mcall  , (240-56*3)*65536 +58,, Data_String,
	mcall  , 15*65536 +72,, hexstr,
	mcall  , 15*65536+150,, numstr,

	mov ecx, 0x80000000
	or  ecx, [sys_colors.work_button_text]
	mcall  , (300-42)*65536+149,	, Okstr,3

	cmp dword[option_group1],opt1
	je @f ;¥á«¨ ¢ë¡à ­ float, â® áâ à訥 4 ¡ ©â  (¨§ double) ­¥ ¯¥ç â ¥¬
	cmp dword[option_group1],opt3
	je @f ;¥á«¨ ¢ë¡à ­ float, â® áâ à訥 4 ¡ ©â  (¨§ double) ­¥ ¯¥ç â ¥¬
		mov ecx, dword[Data_Double+4]
		mcall  47, 8*65536+256,,185*65536+72,[sys_colors.work_text]    ; 16-­ ï

		mov ecx, dword[Data_Double+4]
		mcall	 ,8*65536+512,,240*65536+30,	  ; 2-­ ï
		ror ecx, 8
		mcall	 ,,,(240-56)*65536+30,
		ror ecx, 8
		mcall	 ,,,(240-56*2)*65536+30,
		ror ecx, 8
		mcall	 ,,,(240-56*3)*65536+30,
		ror ecx, 8
	@@:

	mov ecx,dword[Data_Double]
	mcall  47, 8*65536+256,,240*65536+72,[sys_colors.work_text]	 ; 16-­ ï

	mov ecx,dword[Data_Double]
	mcall	 , 8*65536+512,,240*65536+44,	  ; 2-­ ï
	ror ecx, 8
	mcall	 ,,,(240-56)*65536+44,
	ror ecx, 8
	mcall	 ,,,(240-56*2)*65536+44,
	ror ecx, 8
	mcall	 ,,,(240-56*3)*65536+44,
	ror ecx, 8

	mcall 38, 15*65536+300-15, 137*65536+137, [sys_colors.work_graph]
	stdcall [edit_box_draw], edit1
	stdcall [option_box_draw], Option_boxes1
	mcall 12, 2		   ; äã­ªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª­ 

ret


;-------------------------------------------------
title db 'string to double 07.09.11',0
hexstr db 'hex:',0
decstr db 'dec:',0
binstr db 'bin:',0

if lang eq ru
	numstr db '—¨á«®:',0
	Okstr db '‚¢®¤',0
	head_f_i:
	head_f_l db '‘¨á⥬­ ï ®è¨¡ª ',0
else
	numstr db 'Number:',0
	Okstr db 'Ok',0
	head_f_i:
	head_f_l db 'System error',0
end if

mouse_dd dd 0
edit1 edit_box 182, 59, 146, 0xffffff, 0xff, 0x80ff, 0, 0x8000, (string1_end-string1), string1, mouse_dd, 0
editboxes_end:

;option_boxes
opt1 option_box option_group1, 15,  90, 8, 12, 0xffffff, 0x80ff, 0, op_text.1, 17
opt2 option_box option_group1, 15, 106, 8, 12, 0xffffff, 0x80ff, 0, op_text.2, 18
opt3 option_box option_group1, 15, 122, 8, 12, 0xffffff, 0x80ff, 0, op_text.3, 21

op_text: ;⥪áâ ¤«ï à ¤¨® ª­®¯®ª
  .1 db 'str(dec) -> float'
  .2 db 'str(dec) -> double'
  .3 db 'float(dec,hex) -> str'
;㪠§ â¥«¨ ¤«ï option_box
option_group1 dd opt1
Option_boxes1 dd opt1, opt2, opt3, 0

system_dir_0 db '/sys/lib/'
lib_name_0 db 'box_lib.obj',0
err_msg_found_lib_0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'box_lib.obj',39,0
err_msg_import_0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'box_lib',39,0

l_libs_start:
	lib_0 l_libs lib_name_0, sys_path, library_path, system_dir_0,\
		err_msg_found_lib_0,head_f_l,import_box_lib,err_msg_import_0,head_f_i
l_libs_end:

align 4
import_box_lib:
	;dd sz_init1
	edit_box_draw dd sz_edit_box_draw
	edit_box_key dd sz_edit_box_key
	edit_box_mouse dd sz_edit_box_mouse
	;edit_box_set_text dd sz_edit_box_set_text
	option_box_draw dd aOption_box_draw
	option_box_mouse dd aOption_box_mouse
	;version_op dd aVersion_op
dd 0,0
	;sz_init1 db 'lib_init',0
	sz_edit_box_draw db 'edit_box',0
	sz_edit_box_key db 'edit_box_key',0
	sz_edit_box_mouse db 'edit_box_mouse',0
	;sz_edit_box_set_text db 'edit_box_set_text',0
	aOption_box_draw db 'option_box_draw',0
	aOption_box_mouse db 'option_box_mouse',0
	;aVersion_op db 'version_op',0

i_end:
	sys_colors system_colors
	rb 0x400 ;stack
	sys_path rb 4096
	library_path rb 4096
e_end: ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë