Subversion Repositories Kolibri OS

Rev

Rev 2162 | Rev 7674 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; à®£à ¬¬  ¤«ï ¯à¥®¡à §®¢ ­¨ï ç¨á¥« ¨§ áâப¨
  2. ;   ¢ ä®à¬ â float, double,   â ª¦¥ ¨§ 10 ¨«¨ 16 à¨ç­®£®
  3. ;   ¢® float.
  4. ; ‘¤¥« ­  ­  ®á­®¢¥ hex2dec2bin ¨ ¯à¨¬¥à®¢ ¨§ ä ©«  list2_05.inc
  5. ;   ( ¢â®à Šã« ª®¢ ‚« ¤¨¬¨à ƒ¥­­ ¤ì¥¢¨ç 24.05.2002),
  6. ;   ª®â®àë¥ ChE ¯¥à¥¤¥« « á 16 ­  32 ¡¨â  ­   áᥬ¡«¥à fasm.
  7. ; à®£à ¬¬  ¯®§¢®«ï¥â à¥è âì â ª¨¥ § ¤ ç¨:
  8. ; 1) ç¨á«® ¢ áâப®¢®¬ ¢¨¤¥ ¯¥à¥¢¥á⨠¢ 4 ¡ ©â  (float) ¢ ¬ è¨­­ë© ¢¨¤
  9. ; 2) ç¨á«® ¢ áâப®¢®¬ ¢¨¤¥ ¯¥à¥¢¥á⨠¢ 8 ¡ ©â (double) ¢ ¬ è¨­­ë© ¢¨¤
  10. ; 3) ç¨á«® ¢ ¬ è¨­­®¬ ¢¨¤¥ (float) ¯¥à¥¢¥á⨠¢ áâப®¢ë© ¢¨¤ (5 §­ ª®¢ ¯®á«¥ § ¯ï⮩)
  11.  
  12. use32
  13.     org 0x0
  14.     db  'MENUET01'
  15.     dd  0x01,start,i_end,e_end,e_end,0,sys_path
  16.  
  17. include '../../../proc32.inc'
  18. include '../../../macros.inc'
  19. include '../../../develop/libraries/box_lib/load_lib.mac'
  20. include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
  21. include 'lang.inc'
  22.  
  23. @use_library
  24.  
  25. align 4
  26. start:
  27.         load_libraries l_libs_start,l_libs_end
  28.         ;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ­ è  ¡¨¡«¨®â¥ª 
  29.         mov     ebp,lib_0
  30.         cmp     dword [ebp+ll_struc_size-4],0
  31.         jz      @f
  32.                 mcall -1 ;exit not correct
  33.         @@:
  34.         mcall 40,0x27
  35.         mcall 48, 3, sys_colors, 40
  36.         edit_boxes_set_sys_color edit1,editboxes_end,sys_colors
  37.         option_boxes_set_sys_color sys_colors,Option_boxes1
  38.  
  39. align 4
  40. red:
  41.     call draw_window
  42.  
  43. align 4
  44. still:
  45.     mcall 10            ; äã­ªæ¨ï 10 - ¦¤ âì ᮡëâ¨ï
  46.  
  47.     cmp  eax,1          ; ¯¥à¥à¨á®¢ âì ®ª­® ?
  48.     je   red            ; ¥á«¨ ¤  - ­  ¬¥âªã red
  49.     cmp  eax,2          ; ­ ¦ â  ª« ¢¨è  ?
  50.     je   key            ; ¥á«¨ ¤  - ­  key
  51.     cmp  eax,3          ; ­ ¦ â  ª­®¯ª  ?
  52.     je   button         ; ¥á«¨ ¤  - ­  button
  53.     cmp  eax,6
  54.     je   mouse
  55.  
  56.     jmp  still          ; ¥á«¨ ¤à㣮¥ ᮡë⨥ - ¢ ­ ç «® 横« 
  57.  
  58. ;---------------------------------------------------------------------
  59. key: ; ­ ¦ â  ª« ¢¨è  ­  ª« ¢¨ âãà¥
  60.         mcall 2
  61.         ;cmp ah,13
  62.         stdcall [edit_box_key], dword edit1
  63.         jmp  still ; ¢¥à­ãâìáï ª ­ ç «ã 横« 
  64.  
  65. ; Š®«¨ç¥á⢮ §­ ª®¢ ç¨á«  ¯®á«¥ § ¯ï⮩ (1-17)
  66. NumberSymbolsAD DW 5
  67. ; Š®­áâ ­âë (10 ¢ á⥯¥­¨ N)
  68. MConst DQ 1.0E1,1.0E2,1.0E3,1.0E4,1.0E5
  69.        DQ 1.0E6,1.0E7,1.0E8,1.0E9,1.0E10
  70.        DQ 1.0E11,1.0E12,1.0E13,1.0E14,1.0E15
  71.        DQ 1.0E16,1.0E17,1.0E18,1.0E19,1.0E20
  72.        DQ 1.0E21,1.0E22,1.0E23,1.0E24,1.0E25
  73.        DQ 1.0E26,1.0E27,1.0E28,1.0E29,1.0E30
  74.        DQ 1.0E31,1.0E32,1.0E33,1.0E34,1.0E35
  75.        DQ 1.0E36,1.0E37,1.0E38,1.0E39,1.0E40
  76.        DQ 1.0E41,1.0E42,1.0E43,1.0E44,1.0E45
  77.        DQ 1.0E46,1.0E47,1.0E48,1.0E49,1.0E50
  78.        DQ 1.0E51,1.0E52,1.0E53,1.0E54,1.0E55
  79.        DQ 1.0E56,1.0E57,1.0E58,1.0E59,1.0E60
  80.        DQ 1.0E61,1.0E62,1.0E63,1.0E64,1.0E65
  81.        DQ 1.0E66,1.0E67,1.0E68,1.0E69,1.0E70
  82.        DQ 1.0E71,1.0E72,1.0E73,1.0E74,1.0E75
  83.        DQ 1.0E76,1.0E77,1.0E78,1.0E79,1.0E80
  84.        DQ 1.0E81,1.0E82,1.0E83,1.0E84,1.0E85
  85.        DQ 1.0E86,1.0E87,1.0E88,1.0E89,1.0E90
  86.        DQ 1.0E91,1.0E92,1.0E93,1.0E94,1.0E95
  87.        DQ 1.0E96,1.0E97,1.0E98,1.0E99,1.0E100
  88.        DQ 1.0E101,1.0E102,1.0E103,1.0E104,1.0E105
  89.        DQ 1.0E106,1.0E107,1.0E108,1.0E109,1.0E110
  90.        DQ 1.0E111,1.0E112,1.0E113,1.0E114,1.0E115
  91.        DQ 1.0E116,1.0E117,1.0E118,1.0E119,1.0E120
  92.        DQ 1.0E121,1.0E122,1.0E123,1.0E124,1.0E125
  93.        DQ 1.0E126,1.0E127,1.0E128
  94. ; —¨á«® á ¯« ¢ î饩 § ¯ï⮩ ¤¢®©­®© â®ç­®áâ¨
  95. Data_Double   DQ ?
  96. ; —¨á«® ¢ BCD-ä®à¬ â¥
  97. Data_BCD      DT ?
  98. ; ‚ᯮ¬®£ â¥«ì­ë© ä« £
  99. Data_Flag     DB ?
  100. ; ‡­ ª १ã«ìâ â  (¥á«¨ ­¥ 0 - ®âà¨æ â¥«ì­®¥ ç¨á«®)
  101. Data_Sign     DB ?
  102. ; ‘âப  ¤«ï åà ­¥­¨ï ç¨á«  ¢ ª®¤¥ ASCII
  103. Data_String   DB 32 DUP (?)
  104.  
  105. string1 db 32 dup (0)
  106. string1_end:
  107.  
  108.  
  109.  
  110. ;*******************************************************
  111. ;*  …Ž€‡Ž‚€ˆ… —ˆ‘‹€ ‘ ‹€‚€ž™…‰ ‡€Ÿ’Ž‰ ‚ ‘’ŽŠ“  *
  112. ;* —¨á«® ¨¬¥¥â ä®à¬ â á 㤢®¥­­®© â®ç­®áâìî, १ã«ìâ â *
  113. ;* ¢ë¤ ¥âáï ¢ ¤¥áïâ¨ç­®¬ ª®¤¥, ¢ "¡ë⮢®¬" ä®à¬ â¥ á   *
  114. ;* 䨪á¨à®¢ ­­ë¬ ª®«¨ç¥á⢮¬ §­ ª®¢ ¯®á«¥ § ¯ï⮩.     *
  115. ;* ‚室­ë¥ ¯ à ¬¥âàë:                                  *
  116. ;* Data_Double - ¯à¥®¡à §ã¥¬®¥ ç¨á«®;                  *
  117. ;* NumberSymbolsAD - ª®«¨ç¥á⢮ §­ ª®¢ ¯®á«¥           *
  118. ;*                   § ¯ï⮩ (0-17).                   *
  119. ;* ‚ë室­ë¥ ¯ à ¬¥âàë:                                 *
  120. ;* Data_String - áâப -१ã«ìâ â.                     *
  121. ;*******************************************************
  122. DoubleFloat_to_String:
  123.         pushad
  124.         ; ¥§ã«ìâ â § ¯¨á뢠âì ¢ áâபã Data_String
  125.         mov     EDI, Data_String
  126.  
  127.         ; ‘¤¢¨£ ¥¬ ç¨á«® ¢«¥¢® ­  NumberSymbolsAD
  128.         ; ¤¥áïâ¨ç­ëå à §à冷¢
  129.         fninit                 ;á¡à®á ᮯà®æ¥áá®à 
  130.         fld     [Data_Double]  ;§ £à㧨âì ç¨á«®
  131.         xor ebx,ebx
  132.         mov     BX,[NumberSymbolsAD]
  133.         cmp     BX, 0
  134.         je      .NoShifts     ;­¥â æ¨äà ¯®á«¥ § ¯ï⮩
  135.         jl      .Error        ;®è¨¡ª 
  136.         dec     BX
  137.         shl     BX, 3           ;㬭®¦ ¥¬ ­  8
  138.         add     EBX, MConst
  139.         fmul    qword [EBX] ;㬭®¦¨âì ­  ª®­áâ ­âã
  140. .NoShifts:
  141.         ; ˆ§¢«¥çì ç¨á«® ¢ ª®¤¥ BCD
  142.         fbstp   [Data_BCD]
  143. ; à®¢¥à¨âì १ã«ìâ â ­  ¯¥à¥¯®«­¥­¨¥
  144.         mov     AX,word [Data_BCD + 8]
  145.         cmp     AX,0FFFFh  ;"¤¥áïâ¨ç­®¥" ¯¥à¥¯®«­¥­¨¥?
  146.         je      .Overflow
  147. ; ‚뤥«¨âì §­ ª ç¨á«  ¨ § ¯¨á âì ¥£® ¢ ASCII-ª®¤¥
  148.         mov     AL, byte [Data_BCD + 9]
  149.         and     AL,AL
  150.         jz      .NoSign
  151.         mov     AL,'-'
  152.         stosb
  153. .NoSign:
  154. ;  á¯ ª®¢ âì ç¨á«® ¢ ª®¤ ASCII
  155.         mov     ebx,8    ;ᬥ饭¨¥ ¯®á«¥¤­¥© ¯ àë æ¨äà
  156.         mov     ecx,9    ;áç¥â稪 ¯ à æ¨äà
  157.         ; Ž¯à¥¤¥«¨âì ¯®§¨æ¨î ¤¥áïâ¨ç­®© â®çª¨ ¢ ç¨á«¥
  158.         mov     DX,18
  159.         sub     DX,[NumberSymbolsAD]
  160.         js      .Error  ;®è¨¡ª , ¥á«¨ ®âà¨æ â¥«ì­ ï
  161.         jz      .Error  ;¨«¨ ­ã«¥¢ ï ¯®§¨æ¨ï
  162. .NextPair:
  163.         ; ‡ £à㧨âì ®ç¥à¥¤­ãî ¯ àã à §à冷¢
  164.         mov     AL, byte [ebx + Data_BCD]
  165.         mov     AH,AL
  166.         ; ‚뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨
  167.         ; á®åà ­¨âì áâ àèãî â¥âà ¤ã
  168.         shr     AL,4
  169.         add     AL,'0'
  170.         stosb
  171.         dec     DX
  172.         jnz     .N0
  173.         mov     AL,'.'
  174.         stosb
  175. .N0:   ; ‚뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨
  176.         ; á®åà ­¨âì ¬« ¤èãî â¥âà ¤ã
  177.         mov     AL,AH
  178.         and     AL,0Fh
  179.         add     AL,'0'
  180.         stosb
  181.         dec     DX
  182.         jnz     .N1
  183.         mov     AL,'.'
  184.         stosb
  185. .N1:
  186.         dec  BX
  187.         loop .NextPair
  188.         mov  AL,0
  189.         stosb
  190.  
  191. ; “¡à âì ­¥§­ ç é¨¥ ­ã«¨ á«¥¢ 
  192.         mov     EDI, Data_String
  193.         mov     ESI, Data_String
  194.         ; à®¯ãáâ¨âì §­ ª ç¨á« , ¥á«¨ ®­ ¥áâì
  195.         cmp     byte [ESI],'-'
  196.         jne     .N2
  197.         inc     ESI
  198.         inc     EDI
  199. .N2:   ; ‡ £à㧨âì ¢ áç¥â稪 横«  ª®«¨ç¥á⢮ à §à冷¢
  200.         ; ç¨á«  ¯«îá 1 (¡ ©â ¤¥áïâ¨ç­®© â®çª¨)
  201.         mov     ecx,18+1+1
  202.         ; à®¯ãáâ¨âì ­¥§­ ç é¨¥ ­ã«¨
  203. .N3:
  204.         cmp byte [ESI],'0'
  205.         jne .N4
  206.         cmp byte [ESI+1],'.'
  207.         je .N4
  208.         inc ESI
  209.         loop .N3
  210.         ; Žè¨¡ª  - ­¥â §­ ç é¨å æ¨äà
  211.         jmp     .Error
  212. ; ‘ª®¯¨à®¢ âì §­ ç éãî ç áâì ç¨á«  ¢ ­ ç «® áâப¨
  213. .N4:    rep movsb
  214.         jmp    .End
  215.  
  216. ; Žè¨¡ª 
  217. .Error:
  218.         mov     AL,'E'
  219.         stosb
  220.         mov     AL,'R'
  221.         stosb
  222.         mov     AL,'R'
  223.         stosb
  224.         xor     AL,AL
  225.         stosb
  226.         jmp     .End
  227. ; ¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨
  228. .Overflow:
  229.         mov     AL,'#'
  230.         stosb
  231.         xor     AL,AL
  232.         stosb
  233. ; Š®­¥æ ¯à®æ¥¤ãàë
  234. .End:
  235.         popad
  236.         ret
  237.  
  238. ;****************************************************
  239. ;* …Ž€‡Ž‚€’œ ‘’ŽŠ“ ‚ —ˆ‘‹Ž ‘ ‹€‚€ž™…‰ ‡€Ÿ’Ž‰ *
  240. ;*      (ç¨á«® ¨¬¥¥â ®¡ëç­ë©, "¡ë⮢®©" ä®à¬ â)     *
  241. ;* ‚室­ë¥ ¯ à ¬¥âàë:                               *
  242. ;* Data_String - ç¨á«® ¢ ª®¤¥ ASCII.                *
  243. ;* ‚ë室­ë¥ ¯ à ¬¥âàë:                              *
  244. ;* Data_Double - ç¨á«® ¢ ¤¢®¨ç­®¬ ª®¤¥.             *
  245. ;****************************************************
  246. String_to_DoubleFloat:
  247.         pushad
  248.         cld
  249.         ; Žç¨é ¥¬ Data_BCD
  250.         mov dword [Data_BCD],0
  251.         mov dword [Data_BCD+4],0
  252.         mov  word [Data_BCD+8],0
  253.         ; Žç¨é ¥¬ ¡ ©â §­ ª 
  254.         mov     [Data_Sign],0
  255.         ; ‡ ­®á¨¬ ¢ SI 㪠§ â¥«ì ­  áâபã
  256.         mov     ESI, Data_String
  257.         ; à®¯ã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬
  258.         mov     ecx,64 ;§ é¨â  ®â § æ¨ª«¨¢ ­¨ï
  259. .ShiftIgnore:
  260.         lodsb
  261.         cmp     AL,' '
  262.         jne     .ShiftIgnoreEnd
  263.         loop    .ShiftIgnore
  264.         jmp     .Error
  265. .ShiftIgnoreEnd:
  266.         ; à®¢¥à塞 §­ ª ç¨á« 
  267.         cmp     AL,'-'
  268.         jne     .Positive
  269.         mov     [Data_Sign],80h
  270.         lodsb
  271. .Positive:
  272.         mov     [Data_Flag],0 ;¯à¨§­ ª ­ «¨ç¨ï â®çª¨
  273.         mov     DX,0          ;¯®§¨æ¨ï â®çª¨
  274.         mov     ecx,18        ;¬ ªá. ç¨á«® à §à冷¢
  275. .ASCIItoBCDConversion:
  276.         cmp     AL,'.'        ;â®çª ?
  277.         jne     .NotDot
  278.         cmp     [Data_Flag],0 ;â®çª  ­¥ ¢áâà¥ç « áì?
  279.         jne     .Error
  280.         mov     [Data_Flag],1
  281.         lodsb
  282.         cmp     AL,0          ;ª®­¥æ áâப¨?
  283.         jne     .NotDot
  284.         jmp     .ASCIItoBCDConversionEnd
  285. .NotDot:
  286.         ; “¢¥«¨ç¨âì ­  1 §­ ç¥­¨¥ ¯®§¨æ¨¨ â®çª¨,
  287.         ; ¥á«¨ ®­  ¥é¥ ­¥ ¢áâà¥ç « áì
  288.         cmp     [Data_Flag],0
  289.         jnz     .Figures
  290.         inc     DX
  291. .Figures:
  292.         ; ‘¨¬¢®«ë ç¨á«  ¤®«¦­ë ¡ëâì æ¨äà ¬¨
  293.         cmp     AL,'0'
  294.         jb      .Error
  295.         cmp     AL,'9'
  296.         ja      .Error
  297.         ; ¨è¥¬ ®ç¥à¥¤­ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD
  298.         and     AL,0Fh
  299.         or      byte [Data_BCD],AL
  300.         ; à®¢¥àª  ­  ª®­¥æ áâப¨
  301.         cmp     byte [ESI],0
  302.         je      .ASCIItoBCDConversionEnd
  303.         ; ‘¤¢¨£ ¥¬ BCD ­  4 à §à鸞 ¢«¥¢®
  304.         ; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â )
  305.         mov     AX,word [Data_BCD+6]
  306.         shld    word [Data_BCD+8],AX,4
  307.         ; (ᤢ¨£ ¥¬ á।­¨¥ 4 ¡ ©â )
  308.         mov     EAX, dword [Data_BCD]
  309.         shld    dword [Data_BCD+4],EAX,4
  310.         ; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â )
  311.         shl     dword [Data_BCD],4
  312.         ; ‡ £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL
  313.         lodsb
  314.         loop    .ASCIItoBCDConversion
  315.         ; …᫨ 19-© ᨬ¢®« ­¥ 0 ¨ ­¥ â®çª ,
  316.         ; â® ®è¨¡ª  ¯¥à¥¯®«­¥­¨ï
  317.         cmp     AL,'.'
  318.         jne     .NotDot2
  319.         inc     ecx
  320.         lodsb
  321. .NotDot2:
  322.         cmp     AL,0
  323.         jne     .Error ;¯¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨
  324.  
  325. ; …Ž€‡Ž‚€’œ —ˆ‘‹Ž ˆ‡ ŠŽ„€ BCD ‚ ‚…™…‘’‚…Ž… —ˆ‘‹Ž
  326. .ASCIItoBCDConversionEnd:
  327.         ; ‚¯¨á âì §­ ª ¢ áâ à訩 ¡ ©â
  328.         mov     AL,[Data_Sign]
  329.         mov     byte [Data_BCD+9],AL
  330.         ; ‘¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à 
  331.         fninit
  332.         ; ‡ £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ â¥
  333.         fbld    [Data_BCD]
  334.         ; ‚ëç¨á«¨âì ­®¬¥à ¤¥«¨â¥«ï
  335.         mov     EBX,18+1
  336.         sub     BX,CX
  337.         sub     BX,DX
  338.         cmp     EBX,0
  339.         je      .NoDiv
  340.         dec     EBX
  341.         shl     EBX,3           ;㬭®¦ ¥¬ ­  8
  342.         add     EBX, MConst
  343.         fdiv    qword [EBX] ;à §¤¥«¨âì ­  ª®­áâ ­âã
  344. .NoDiv:; ‚ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç­®¬ ä®à¬ â¥
  345.         fstp    [Data_Double]
  346.         jmp     .End
  347.  
  348. .Error:; à¨ «î¡®© ®è¨¡ª¥ ®¡­ã«¨âì १ã«ìâ â
  349.         fldz    ;§ ­¥á⨠­®«ì á á⥪ ᮯà®æ¥áá®à 
  350.         fstp    [Data_Double]
  351. .End:
  352.         popad
  353.         ret
  354.  
  355.  
  356.  
  357. ;input:
  358. ; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
  359. ;output:
  360. ; eax - ç¨á«®
  361. align 4
  362. proc conv_str_to_int, buf:dword
  363.         xor eax,eax
  364.         push ebx ecx esi
  365.         xor ebx,ebx
  366.         mov esi,[buf]
  367.         ;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
  368.         xor ecx,ecx
  369.         inc ecx
  370.         cmp byte[esi],'-'
  371.         jne @f
  372.                 dec ecx
  373.                 inc esi
  374.         @@:
  375.  
  376.         cmp word[esi],'0x'
  377.         je .load_digit_16
  378.  
  379.         .load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
  380.                 mov bl,byte[esi]
  381.                 cmp bl,'0'
  382.                 jl @f
  383.                 cmp bl,'9'
  384.                 jg @f
  385.                         sub bl,'0'
  386.                         imul eax,10
  387.                         add eax,ebx
  388.                         inc esi
  389.                         jmp .load_digit_10
  390.         jmp @f
  391.  
  392.         .load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
  393.                 add esi,2
  394.         .cycle_16:
  395.                 mov bl,byte[esi]
  396.                 cmp bl,'0'
  397.                 jl @f
  398.                 cmp bl,'f'
  399.                 jg @f
  400.                 cmp bl,'9'
  401.                 jle .us1
  402.                         cmp bl,'A'
  403.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
  404.                 .us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
  405.                 cmp bl,'F'
  406.                 jle .us2
  407.                         cmp bl,'a'
  408.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
  409.                         sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
  410.                 .us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
  411.                         sub bl,'0'
  412.                         cmp bl,9
  413.                         jle .cor1
  414.                                 sub bl,7 ;convert 'A' to '10'
  415.                         .cor1:
  416.                         shl eax,4
  417.                         add eax,ebx
  418.                         inc esi
  419.                         jmp .cycle_16
  420.         @@:
  421.         cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
  422.         jne @f
  423.                 sub ecx,eax
  424.                 mov eax,ecx
  425.         @@:
  426.         pop esi ecx ebx
  427.         ret
  428. endp
  429.  
  430.  
  431.  
  432. ;---------------------------------------------------------------------
  433. align 4
  434. button:
  435.         mcall 17                ; 17 - ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  436.         cmp   ah, 1     ; ¥á«¨ … ­ ¦ â  ª­®¯ª  á ­®¬¥à®¬ 1,
  437.         jne   @f
  438.                 mcall -1
  439.         @@:
  440.         cmp ah, 5
  441.         jne @f
  442.                 cmp dword[option_group1],opt3
  443.                 jne .opt_3_end
  444.                         stdcall conv_str_to_int,dword[edit1.text]
  445.                         mov dword[Data_Double],eax
  446.                         finit
  447.                         fld dword[Data_Double]
  448.                         fstp qword[Data_Double]
  449.  
  450.                         ; Data_Double - ¯à¥®¡à §ã¥¬®¥ ç¨á«®
  451.                         ; NumberSymbolsAD - ª®«¨ç¥á⢮ §­ ª®¢ ¯®á«¥ § ¯ï⮩ (0-17)
  452.                         call DoubleFloat_to_String
  453.                         mov dword[Data_Double],eax ;¢®ááâ ­ ¢«¨¢ ¥¬ §­ ç¥­¨¥ ¢ ä®à¬ â¥ float
  454.                         jmp .opt_all_end
  455.                 .opt_3_end:
  456.  
  457.                 mov esi,string1
  458.                 mov edi,Data_String
  459.                 cld
  460.                 mov ecx,32
  461.                 rep movsb
  462.  
  463.                 call String_to_DoubleFloat
  464.                 cmp dword[option_group1],opt1
  465.                 jne .opt_all_end ;¥á«¨ ¢ë¡à ­ float, â® ¯à¥®¡à §ã¥¬ ¨§ à ­¥¥ ¯®«ã祭­®£® double
  466.                         finit
  467.                         fld  qword[Data_Double] ;ç¨â ¥¬ ¨§ double
  468.                         fstp dword[Data_Double] ;  ¢®§¢à é ¥¬ ¢® float
  469.                 .opt_all_end:
  470.                 jmp red
  471.         @@:
  472.         jmp still
  473.  
  474. mouse:
  475.         stdcall [edit_box_mouse], edit1
  476.         stdcall [option_box_mouse], Option_boxes1
  477.         jmp still
  478.  
  479. ;------------------------------------------------
  480. align 4
  481. draw_window:
  482.         mcall 48, 3, sys_colors, sizeof.system_colors
  483.  
  484.         mcall 12, 1
  485.         mov edx, 0x14000000
  486.         or  edx, [sys_colors.work]
  487.         mcall 0, 200*65536+300, 200*65536+175, ,,title
  488.  
  489.         mcall 8, (300-53)*65536+38,145*65536+ 15, 5,[sys_colors.work_button] ; ª­®¯ª  Ok
  490.  
  491.         mov ecx, 0x80000000
  492.         or  ecx, [sys_colors.work_text]
  493.         mcall 4, 15*65536 +30,, binstr,
  494.         mcall  , 15*65536 +58,, decstr,
  495.                 mcall  , (240-56*3)*65536 +58,, Data_String,
  496.         mcall  , 15*65536 +72,, hexstr,
  497.         mcall  , 15*65536+150,, numstr,
  498.  
  499.         mov ecx, 0x80000000
  500.         or  ecx, [sys_colors.work_button_text]
  501.         mcall  , (300-42)*65536+149,    , Okstr,3
  502.  
  503.         cmp dword[option_group1],opt1
  504.         je @f ;¥á«¨ ¢ë¡à ­ float, â® áâ à訥 4 ¡ ©â  (¨§ double) ­¥ ¯¥ç â ¥¬
  505.         cmp dword[option_group1],opt3
  506.         je @f ;¥á«¨ ¢ë¡à ­ float, â® áâ à訥 4 ¡ ©â  (¨§ double) ­¥ ¯¥ç â ¥¬
  507.                 mov ecx, dword[Data_Double+4]
  508.                 mcall  47, 8*65536+256,,185*65536+72,[sys_colors.work_text]    ; 16-­ ï
  509.  
  510.                 mov ecx, dword[Data_Double+4]
  511.                 mcall    ,8*65536+512,,240*65536+30,      ; 2-­ ï
  512.                 ror ecx, 8
  513.                 mcall    ,,,(240-56)*65536+30,
  514.                 ror ecx, 8
  515.                 mcall    ,,,(240-56*2)*65536+30,
  516.                 ror ecx, 8
  517.                 mcall    ,,,(240-56*3)*65536+30,
  518.                 ror ecx, 8
  519.         @@:
  520.  
  521.         mov ecx,dword[Data_Double]
  522.         mcall  47, 8*65536+256,,240*65536+72,[sys_colors.work_text]      ; 16-­ ï
  523.  
  524.         mov ecx,dword[Data_Double]
  525.         mcall    , 8*65536+512,,240*65536+44,     ; 2-­ ï
  526.         ror ecx, 8
  527.         mcall    ,,,(240-56)*65536+44,
  528.         ror ecx, 8
  529.         mcall    ,,,(240-56*2)*65536+44,
  530.         ror ecx, 8
  531.         mcall    ,,,(240-56*3)*65536+44,
  532.         ror ecx, 8
  533.  
  534.         mcall 38, 15*65536+300-15, 137*65536+137, [sys_colors.work_graph]
  535.         stdcall [edit_box_draw], edit1
  536.         stdcall [option_box_draw], Option_boxes1
  537.         mcall 12, 2                ; äã­ªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª­ 
  538.  
  539. ret
  540.  
  541.  
  542. ;-------------------------------------------------
  543. title db 'string to double 07.09.11',0
  544. hexstr db 'hex:',0
  545. decstr db 'dec:',0
  546. binstr db 'bin:',0
  547.  
  548. if lang eq ru
  549.         numstr db '—¨á«®:',0
  550.         Okstr db '‚¢®¤',0
  551.         head_f_i:
  552.         head_f_l db '‘¨á⥬­ ï ®è¨¡ª ',0
  553. else
  554.         numstr db 'Number:',0
  555.         Okstr db 'Ok',0
  556.         head_f_i:
  557.         head_f_l db 'System error',0
  558. end if
  559.  
  560. mouse_dd dd 0
  561. edit1 edit_box 182, 59, 146, 0xffffff, 0xff, 0x80ff, 0, 0x8000, (string1_end-string1), string1, mouse_dd, 0
  562. editboxes_end:
  563.  
  564. ;option_boxes
  565. opt1 option_box option_group1, 15,  90, 8, 12, 0xffffff, 0x80ff, 0, op_text.1, 17
  566. opt2 option_box option_group1, 15, 106, 8, 12, 0xffffff, 0x80ff, 0, op_text.2, 18
  567. opt3 option_box option_group1, 15, 122, 8, 12, 0xffffff, 0x80ff, 0, op_text.3, 21
  568.  
  569. op_text: ;⥪áâ ¤«ï à ¤¨® ª­®¯®ª
  570.   .1 db 'str(dec) -> float'
  571.   .2 db 'str(dec) -> double'
  572.   .3 db 'float(dec,hex) -> str'
  573. ;㪠§ â¥«¨ ¤«ï option_box
  574. option_group1 dd opt1
  575. Option_boxes1 dd opt1, opt2, opt3, 0
  576.  
  577. system_dir_0 db '/sys/lib/'
  578. lib_name_0 db 'box_lib.obj',0
  579. err_msg_found_lib_0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'box_lib.obj',39,0
  580. err_msg_import_0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'box_lib',39,0
  581.  
  582. l_libs_start:
  583.         lib_0 l_libs lib_name_0, sys_path, library_path, system_dir_0,\
  584.                 err_msg_found_lib_0,head_f_l,import_box_lib,err_msg_import_0,head_f_i
  585. l_libs_end:
  586.  
  587. align 4
  588. import_box_lib:
  589.         ;dd sz_init1
  590.         edit_box_draw dd sz_edit_box_draw
  591.         edit_box_key dd sz_edit_box_key
  592.         edit_box_mouse dd sz_edit_box_mouse
  593.         ;edit_box_set_text dd sz_edit_box_set_text
  594.         option_box_draw dd aOption_box_draw
  595.         option_box_mouse dd aOption_box_mouse
  596.         ;version_op dd aVersion_op
  597. dd 0,0
  598.         ;sz_init1 db 'lib_init',0
  599.         sz_edit_box_draw db 'edit_box',0
  600.         sz_edit_box_key db 'edit_box_key',0
  601.         sz_edit_box_mouse db 'edit_box_mouse',0
  602.         ;sz_edit_box_set_text db 'edit_box_set_text',0
  603.         aOption_box_draw db 'option_box_draw',0
  604.         aOption_box_mouse db 'option_box_mouse',0
  605.         ;aVersion_op db 'version_op',0
  606.  
  607. i_end:
  608.         sys_colors system_colors
  609.         rb 0x400 ;stack
  610.         sys_path rb 4096
  611.         library_path rb 4096
  612. e_end: ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë
  613.