Subversion Repositories Kolibri OS

Rev

Rev 2254 | Rev 8271 | 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 0
  14.     db  'MENUET01'
  15.     dd  1,start,i_end,e_end,e_end,0,sys_path
  16.  
  17. include '../../../proc32.inc'
  18. include '../../../macros.inc'
  19. include '../../../KOSfuncs.inc'
  20. include '../../../develop/libraries/box_lib/load_lib.mac'
  21. include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
  22. include '../../../develop/info3ds/info_fun_float.inc'
  23. include 'lang.inc'
  24.  
  25. @use_library
  26.  
  27. align 4
  28. start:
  29.         load_libraries l_libs_start,l_libs_end
  30.         ;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ­ è  ¡¨¡«¨®â¥ª 
  31.         mov     ebp,lib_0
  32.         cmp     dword[ebp+ll_struc_size-4],0
  33.         jz      @f
  34.                 mcall SF_TERMINATE_PROCESS
  35.         @@:
  36.         mcall SF_SET_EVENTS_MASK,0xC0000027
  37.         mcall SF_STYLE_SETTINGS,SSF_GET_COLORS, sys_colors, sizeof.system_colors
  38.         edit_boxes_set_sys_color edit1,editboxes_end,sys_colors
  39.         option_boxes_set_sys_color sys_colors,Option_boxes1
  40.  
  41. align 4
  42. red:
  43.     call draw_window
  44.  
  45. align 4
  46. still:
  47.     mcall SF_WAIT_EVENT
  48.  
  49.     cmp  eax,1          ; ¯¥à¥à¨á®¢ âì ®ª­® ?
  50.     je   red            ; ¥á«¨ ¤  - ­  ¬¥âªã red
  51.     cmp  eax,2          ; ­ ¦ â  ª« ¢¨è  ?
  52.     je   key            ; ¥á«¨ ¤  - ­  key
  53.     cmp  eax,3          ; ­ ¦ â  ª­®¯ª  ?
  54.     je   button         ; ¥á«¨ ¤  - ­  button
  55.     cmp  eax,6
  56.     je   mouse
  57.  
  58.     jmp  still          ; ¥á«¨ ¤à㣮¥ ᮡë⨥ - ¢ ­ ç «® 横« 
  59.  
  60. align 4
  61. key: ; ­ ¦ â  ª« ¢¨è  ­  ª« ¢¨ âãà¥
  62.         mcall SF_GET_KEY
  63.         ;cmp ah,13
  64.         stdcall [edit_box_key], edit1
  65.         jmp  still ; ¢¥à­ãâìáï ª ­ ç «ã 横« 
  66.  
  67. align 4
  68. button:
  69.         mcall SF_GET_BUTTON
  70.         cmp   ah, 1     ; ¥á«¨ … ­ ¦ â  ª­®¯ª  á ­®¬¥à®¬ 1,
  71.         jne   @f
  72.                 mcall SF_TERMINATE_PROCESS
  73.         @@:
  74.         cmp ah, 5
  75.         jne @f
  76.                 cmp dword[option_group1],opt3
  77.                 jne .opt_3_end
  78.                         stdcall conv_str_to_int,[edit1.text]
  79.                         mov dword[Data_Double],eax
  80.                         finit
  81.                         fld dword[Data_Double]
  82.                         fstp qword[Data_Double]
  83.  
  84.                         ; Data_Double - ¯à¥®¡à §ã¥¬®¥ ç¨á«®
  85.                         mov word[NumberSymbolsAD],8 ; ª®«¨ç¥á⢮ §­ ª®¢ ç¨á«  ¯®á«¥ § ¯ï⮩ (1-17)
  86.                         call DoubleFloat_to_String
  87.                         call String_crop_0
  88.                         mov dword[Data_Double],eax ;¢®ááâ ­ ¢«¨¢ ¥¬ §­ ç¥­¨¥ ¢ ä®à¬ â¥ float
  89.                         jmp .opt_all_end
  90.                 .opt_3_end:
  91.  
  92.                 mov esi,string1
  93.                 mov edi,Data_String
  94.                 cld
  95.                 mov ecx,32
  96.                 rep movsb
  97.  
  98.                 call String_to_DoubleFloat
  99.                 cmp dword[option_group1],opt1
  100.                 jne .opt_all_end ;¥á«¨ ¢ë¡à ­ float, â® ¯à¥®¡à §ã¥¬ ¨§ à ­¥¥ ¯®«ã祭­®£® double
  101.                         finit
  102.                         fld  qword[Data_Double] ;ç¨â ¥¬ ¨§ double
  103.                         fstp dword[Data_Double] ;  ¢®§¢à é ¥¬ ¢® float
  104.                 .opt_all_end:
  105.                 jmp red
  106.         @@:
  107.         jmp still
  108.  
  109. align 4
  110. mouse:
  111.         stdcall [edit_box_mouse], edit1
  112.         stdcall [option_box_mouse], Option_boxes1
  113.         jmp still
  114.  
  115. ;------------------------------------------------
  116. align 4
  117. draw_window:
  118.         mcall SF_STYLE_SETTINGS,SSF_GET_COLORS, sys_colors, sizeof.system_colors
  119.  
  120.         mcall SF_REDRAW,SSF_BEGIN_DRAW
  121.         mov edx, 0x14000000
  122.         or  edx, [sys_colors.work]
  123.         mcall SF_CREATE_WINDOW, (200 shl 16)+300, (200 shl 16)+175, ,,title
  124.  
  125.         mcall SF_DEFINE_BUTTON, ((300-53) shl 16)+38, (145 shl 16)+15, 5, [sys_colors.work_button] ; ª­®¯ª  Ok
  126.  
  127.         mov ecx, 0x80000000
  128.         or  ecx, [sys_colors.work_text]
  129.         mcall SF_DRAW_TEXT, (15 shl 16) +30,, binstr,
  130.         mcall  , (15 shl 16) +58,, decstr,
  131.         mcall  , ((240-56*3) shl 16) +58,, Data_String,
  132.         mcall  , (15 shl 16) +72,, hexstr,
  133.         mcall  , (15 shl 16)+150,, numstr,
  134.  
  135.         mov ecx, 0x80000000
  136.         or  ecx, [sys_colors.work_button_text]
  137.         mcall  , ((300-42) shl 16)+149, , Okstr,3
  138.  
  139.         cmp dword[option_group1],opt1
  140.         je @f ;¥á«¨ ¢ë¡à ­ float, â® áâ à訥 4 ¡ ©â  (¨§ double) ­¥ ¯¥ç â ¥¬
  141.         cmp dword[option_group1],opt3
  142.         je @f ;¥á«¨ ¢ë¡à ­ float, â® áâ à訥 4 ¡ ©â  (¨§ double) ­¥ ¯¥ç â ¥¬
  143.                 mov ecx, dword[Data_Double+4]
  144.                 mcall  SF_DRAW_NUMBER, (8 shl 16)+256,,(185 shl 16)+72,[sys_colors.work_text]    ; 16-­ ï
  145.  
  146.                 mov ecx, dword[Data_Double+4]
  147.                 mcall    ,(8 shl 16)+512,,(240 shl 16)+30,        ; 2-­ ï
  148.                 ror ecx, 8
  149.                 mcall    ,,,((240-56) shl 16)+30,
  150.                 ror ecx, 8
  151.                 mcall    ,,,((240-56*2) shl 16)+30,
  152.                 ror ecx, 8
  153.                 mcall    ,,,((240-56*3) shl 16)+30,
  154.                 ror ecx, 8
  155.         @@:
  156.  
  157.         mov ecx,dword[Data_Double]
  158.         mcall  SF_DRAW_NUMBER, (8 shl 16)+256,,(240 shl 16)+72,[sys_colors.work_text]    ; 16-­ ï
  159.  
  160.         mov ecx,dword[Data_Double]
  161.         mcall    , (8 shl 16)+512,,(240 shl 16)+44,       ; 2-­ ï
  162.         ror ecx, 8
  163.         mcall    ,,,((240-56) shl 16)+44,
  164.         ror ecx, 8
  165.         mcall    ,,,((240-56*2) shl 16)+44,
  166.         ror ecx, 8
  167.         mcall    ,,,((240-56*3) shl 16)+44,
  168.         ror ecx, 8
  169.  
  170.         mcall SF_DRAW_LINE, (15 shl 16)+300-15, (137 shl 16)+137, [sys_colors.work_graph]
  171.         stdcall [edit_box_draw], edit1
  172.         stdcall [option_box_draw], Option_boxes1
  173.         mcall SF_REDRAW,SSF_END_DRAW
  174.  
  175. ret
  176.  
  177.  
  178. string1 db 32 dup (0)
  179. string1_end:
  180.  
  181.  
  182. ;input:
  183. ; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
  184. ;output:
  185. ; eax - ç¨á«®
  186. align 4
  187. proc conv_str_to_int uses ebx ecx esi, buf:dword
  188.         xor eax,eax
  189.         xor ebx,ebx
  190.         mov esi,[buf]
  191.         ;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
  192.         xor ecx,ecx
  193.         inc ecx
  194.         cmp byte[esi],'-'
  195.         jne @f
  196.                 dec ecx
  197.                 inc esi
  198.         @@:
  199.  
  200.         cmp word[esi],'0x'
  201.         je .load_digit_16
  202.  
  203.         .load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
  204.                 mov bl,byte[esi]
  205.                 cmp bl,'0'
  206.                 jl @f
  207.                 cmp bl,'9'
  208.                 jg @f
  209.                         sub bl,'0'
  210.                         imul eax,10
  211.                         add eax,ebx
  212.                         inc esi
  213.                         jmp .load_digit_10
  214.         jmp @f
  215.  
  216.         .load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
  217.                 add esi,2
  218.         .cycle_16:
  219.                 mov bl,byte[esi]
  220.                 cmp bl,'0'
  221.                 jl @f
  222.                 cmp bl,'f'
  223.                 jg @f
  224.                 cmp bl,'9'
  225.                 jle .us1
  226.                         cmp bl,'A'
  227.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
  228.                 .us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
  229.                 cmp bl,'F'
  230.                 jle .us2
  231.                         cmp bl,'a'
  232.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
  233.                         sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
  234.                 .us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
  235.                         sub bl,'0'
  236.                         cmp bl,9
  237.                         jle .cor1
  238.                                 sub bl,7 ;convert 'A' to '10'
  239.                         .cor1:
  240.                         shl eax,4
  241.                         add eax,ebx
  242.                         inc esi
  243.                         jmp .cycle_16
  244.         @@:
  245.         cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
  246.         jne @f
  247.                 sub ecx,eax
  248.                 mov eax,ecx
  249.         @@:
  250.         ret
  251. endp
  252.  
  253. ;-------------------------------------------------
  254. title db 'string to double 20.08.19',0
  255. hexstr db 'hex:',0
  256. decstr db 'dec:',0
  257. binstr db 'bin:',0
  258.  
  259. if lang eq ru
  260.         numstr db '—¨á«®:',0
  261.         Okstr db '‚¢®¤',0
  262.         head_f_i:
  263.         head_f_l db '"‘¨á⥬­ ï ®è¨¡ª ',0
  264.         err_msg_found_lib_0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'box_lib.obj',39,'" -tE',0
  265.         err_msg_import_0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'box_lib',39,'" -tW',0
  266. else
  267.         numstr db 'Number:',0
  268.         Okstr db 'Ok',0
  269.         head_f_i:
  270.         head_f_l db '"System error',0
  271.         err_msg_found_lib_0 db 'Sorry I cannot found library ',39,'box_lib.obj',39,'" -tE',0
  272.         err_msg_import_0 db 'Error on load import library ',39,'box_lib',39,'" -tW',0
  273. end if
  274.  
  275. mouse_dd dd 0
  276. edit1 edit_box 182, 59, 146, 0xffffff, 0xff, 0x80ff, 0, 0x8000, (string1_end-string1), string1, mouse_dd, 0
  277. editboxes_end:
  278.  
  279. ;option_boxes
  280. opt1 option_box option_group1, 15,  90, 8, 12, 0xffffff, 0x80ff, 0, op_text.1, 17
  281. opt2 option_box option_group1, 15, 106, 8, 12, 0xffffff, 0x80ff, 0, op_text.2, 18
  282. opt3 option_box option_group1, 15, 122, 8, 12, 0xffffff, 0x80ff, 0, op_text.3, 21
  283.  
  284. op_text: ;⥪áâ ¤«ï à ¤¨® ª­®¯®ª
  285.   .1 db 'str(dec) -> float'
  286.   .2 db 'str(dec) -> double'
  287.   .3 db 'float(dec,hex) -> str'
  288. ;㪠§ â¥«¨ ¤«ï option_box
  289. option_group1 dd opt1
  290. Option_boxes1 dd opt1, opt2, opt3, 0
  291.  
  292. system_dir_0 db '/sys/lib/'
  293. lib_name_0 db 'box_lib.obj',0
  294.  
  295.  
  296. l_libs_start:
  297.         lib_0 l_libs lib_name_0, sys_path, library_path, system_dir_0,\
  298.                 err_msg_found_lib_0,head_f_l,import_box_lib,err_msg_import_0,head_f_i
  299. l_libs_end:
  300.  
  301. align 4
  302. import_box_lib:
  303.         ;dd sz_init1
  304.         edit_box_draw dd sz_edit_box_draw
  305.         edit_box_key dd sz_edit_box_key
  306.         edit_box_mouse dd sz_edit_box_mouse
  307.         ;edit_box_set_text dd sz_edit_box_set_text
  308.         option_box_draw dd aOption_box_draw
  309.         option_box_mouse dd aOption_box_mouse
  310.         ;version_op dd aVersion_op
  311. dd 0,0
  312.         ;sz_init1 db 'lib_init',0
  313.         sz_edit_box_draw db 'edit_box',0
  314.         sz_edit_box_key db 'edit_box_key',0
  315.         sz_edit_box_mouse db 'edit_box_mouse',0
  316.         ;sz_edit_box_set_text db 'edit_box_set_text',0
  317.         aOption_box_draw db 'option_box_draw',0
  318.         aOption_box_mouse db 'option_box_mouse',0
  319.         ;aVersion_op db 'version_op',0
  320.  
  321. i_end:
  322.         sys_colors system_colors
  323. align 16       
  324.         sys_path rb 4096
  325.         library_path rb 4096
  326.         rb 0x400 ;stack
  327. e_end: ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë
  328.