Subversion Repositories Kolibri OS

Rev

Rev 8919 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. include "..\..\develop\info3ds\info_fun_float.inc"
  2.  
  3. align 4
  4. proc @DoubleToStr$qduso uses esi edi
  5.   cld
  6.   lea  esi,[esp+12]
  7.   mov  edi,Data_Double
  8.   movsd
  9.   movsd
  10.   mov  ax,[esp+20]
  11.   mov [NumberSymbolsAD],ax
  12.   call DoubleFloat_to_String
  13.   cmp dword[esp+24],0
  14.   je @f
  15.   call String_crop_0
  16.   @@:
  17.   mov eax,Data_String
  18.   ret
  19. endp
  20.  
  21. align 4
  22. proc @StrToDouble$qpc uses esi edi
  23.   cld
  24.   mov edi,Data_String
  25.   mov esi,[esp+12]
  26.   mov ecx,32
  27.   repnz movsb
  28.   call String_to_DoubleFloat
  29.   fld qword[Data_Double]
  30.   ret
  31. endp
  32.  
  33. ;input:
  34. ; *str - указатель на строку, число должно быть в 10 или 16 ричном виде
  35. ;output:
  36. ; eax - число
  37. align 4
  38. proc @StrToInt$qpc uses ebx esi
  39.         xor eax,eax
  40.         xor ebx,ebx
  41.         mov esi,[esp+12]
  42.  
  43.         ;на случай если перед числом находятся пробелы
  44.         @@:
  45.         cmp byte[esi],' '
  46.         jne @f
  47.                 inc esi
  48.                 jmp @b
  49.         @@:
  50.  
  51.         ;определение отрицательных чисел
  52.         xor ecx,ecx
  53.         inc ecx
  54.         cmp byte[esi],'-'
  55.         jne @f
  56.                 dec ecx
  57.                 inc esi
  58.         @@:
  59.  
  60.         cmp word[esi],'0x'
  61.         je .load_digit_16
  62.  
  63.         .load_digit_10: ;считывание 10-тичных цифр
  64.                 mov bl,byte[esi]
  65.                 cmp bl,'0'
  66.                 jl @f
  67.                 cmp bl,'9'
  68.                 jg @f
  69.                         sub bl,'0'
  70.                         imul eax,10
  71.                         add eax,ebx
  72.                         inc esi
  73.                         jmp .load_digit_10
  74.         jmp @f
  75.  
  76.         .load_digit_16: ;считывание 16-ричных цифр
  77.                 add esi,2
  78.         .cycle_16:
  79.                 mov bl,byte[esi]
  80.                 cmp bl,'0'
  81.                 jl @f
  82.                 cmp bl,'f'
  83.                 jg @f
  84.                 cmp bl,'9'
  85.                 jle .us1
  86.                         cmp bl,'A'
  87.                         jl @f ;отсеиваем символы >'9' и <'A'
  88.                 .us1: ;составное условие
  89.                 cmp bl,'F'
  90.                 jle .us2
  91.                         cmp bl,'a'
  92.                         jl @f ;отсеиваем символы >'F' и <'a'
  93.                         sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
  94.                 .us2: ;составное условие
  95.                         sub bl,'0'
  96.                         cmp bl,9
  97.                         jle .cor1
  98.                                 sub bl,7 ;convert 'A' to '10'
  99.                         .cor1:
  100.                         shl eax,4
  101.                         add eax,ebx
  102.                         inc esi
  103.                         jmp .cycle_16
  104.         @@:
  105.         or ecx,ecx ;если число отрицательное
  106.         jnz @f
  107.                 sub ecx,eax
  108.                 mov eax,ecx
  109.         @@:
  110.         ret
  111. endp
  112.  
  113. align 4
  114. proc @strlen$qpxc uses edi
  115.   cld
  116.   mov  edi,[esp+8]
  117.   mov  ecx,-1
  118.   xor  al,al
  119.   repnz scasb
  120.   not  ecx
  121.   lea  eax,[ecx-1]
  122.   ret
  123. endp
  124.  
  125. align 4
  126. proc @strcpy$qpcpxc uses esi edi
  127.   cld
  128.   mov  edi,[esp+16]
  129.   mov  ecx,-1
  130.   mov  esi,edi
  131.   xor  al,al
  132.   repnz scasb
  133.   not  ecx
  134.   mov  edi,[esp+12]
  135.   mov  edx,ecx
  136.   mov  eax,edi
  137.   shr  ecx,2
  138.   rep movsd
  139.   mov  ecx,edx
  140.   and  ecx,3
  141.   rep movsb
  142.   ret
  143. endp
  144.  
  145. align 4
  146. proc @strncpy$qpcpxcl uses esi edi
  147.   cld
  148.   mov  edi,[esp+16]
  149.   mov  ecx,[esp+20]
  150.   jecxz @f
  151.   mov  esi,edi
  152.   xor  al,al
  153.   repnz scasb
  154.   not  ecx
  155.   mov  edi,[esp+12]
  156.   mov  edx,ecx
  157.   mov  eax,edi
  158.   shr  ecx,2
  159.   rep movsd
  160.   mov  ecx,edx
  161.   and  ecx,3
  162.   rep movsb
  163. @@:
  164.   ret
  165. endp
  166.  
  167. align 4
  168. proc @memcmp$qpxvt1l uses esi edi
  169.         cld
  170.         mov     ecx,[esp+20]
  171.         mov     edi,[esp+16]
  172.         mov     esi,[esp+12]
  173.         repe  cmpsb
  174.         movzx eax,byte[esi-1]
  175.         movzx edx,byte[edi-1]
  176.         sub     eax,edx
  177.         ret
  178. endp
  179.  
  180. align 4
  181. proc @memcpy$qpvpxvui uses esi edi
  182.   cld
  183.   mov  edi,[esp+12]
  184.   mov  eax,edi
  185.   mov  ecx,[esp+20]
  186.   mov  esi,[esp+16]
  187.   mov  edx,ecx
  188.   shr  ecx,2
  189.   rep movsd
  190.   mov  ecx,edx
  191.   and  ecx,3
  192.   rep movsb
  193.   ret
  194. endp
  195.  
  196. align 4
  197. proc @memset$qpvcui uses edi
  198.   cld
  199.   mov  edi,[esp+8]
  200.   mov  al,[esp+12]
  201.   mov  ah,al
  202.   mov  dx,ax
  203.   shl  eax,16
  204.   mov  ax,dx
  205.   mov  ecx,[esp+16]
  206.   mov  edx,ecx
  207.   shr  ecx,2
  208.   rep stosd
  209.   mov  ecx,edx
  210.   and  ecx,3
  211.   rep stosb
  212.   mov  eax,[esp+4]
  213.   ret
  214. endp
  215.  
  216. align 4
  217. proc @strcmp$qpxct1 uses esi edi
  218.         cld
  219.         xor     eax,eax
  220.         mov     edi,[esp+16]
  221.         mov     esi,edi
  222.         mov     ecx,-1
  223.         repne scasb
  224.         not     ecx
  225.         mov     edi,esi
  226.         mov     esi,[esp+12]
  227.         repe  cmpsb
  228.         mov     al,[esi-1]
  229.         movzx edx,byte[edi-1]
  230.         sub     eax,edx
  231.         ret
  232. endp
  233.  
  234. align 4
  235. proc @strchr$qpxci uses edi
  236.         mov     edi,[esp+8]
  237.         mov     edx,edi
  238.         mov     ecx,-1
  239.         xor     eax,eax
  240.         cld
  241.         repne scasb
  242.         not     ecx
  243.         mov     edi,edx
  244.         mov     al,[esp+12]
  245.         repne scasb
  246.         jnz     @f
  247.         lea     eax,[edi-1]
  248.         ret
  249. @@:
  250.         xor     eax,eax
  251.         ret
  252. endp
  253.  
  254. align 4
  255. proc @strstr$qpxct1 uses ebx esi edi
  256.         xor  eax,eax
  257.         mov  esi,[esp+16]
  258.         test esi,esi
  259.         je   .not_f
  260.         mov  edi,[esp+20]
  261.         test edi,edi
  262.         je   .not_f
  263.         mov  edx,edi
  264.         mov      ecx,-1
  265.         cld
  266.         repne scasb
  267.         not      ecx
  268.         mov  ebx,ecx ;ebx = strlen(str2)
  269. align 4
  270. .cycle:
  271.         cmp  byte[esi],0
  272.         je   .not_f
  273.         mov  edi,edx
  274.         push esi
  275.         mov  ecx,ebx
  276.         repe cmpsb
  277.         pop  esi
  278.         inc  esi
  279.         cmp  byte[edi-1],0
  280.         jne  .cycle
  281.  
  282.         lea  eax,[esi-1]
  283. .not_f:
  284.         ret
  285. endp
  286.  
  287. align 4
  288. proc __ftol
  289.   sub  esp,12
  290.   wait
  291.   fstcw word [esp+8]
  292.   wait
  293.   mov  al,[esp+9]
  294.   or  byte [esp+9],0x0c
  295.   fldcw word [esp+8]
  296.   fistp qword [esp]
  297.   mov  [esp+9],al
  298.   fldcw word [esp+8]
  299.   mov  eax,[esp]
  300.   mov  edx,[esp+4]
  301.   add  esp,12
  302.   ret
  303. endp
  304.  
  305. align 4
  306. proc @floor$qd
  307.   fld  qword [esp+4]
  308.   mov  ax,[esp+10]
  309.   shl  ax,1
  310.   cmp  ax,0x8680
  311.   ja  .floor_end
  312.   mov  ch,4
  313.   sub  esp,2
  314.   wait
  315.   fstcw word [esp]
  316.   mov  ax,0xf3ff
  317.   wait
  318.   mov  dx,[esp]
  319.   and  ax,dx
  320.   or  ah,ch
  321.   mov  [esp],ax
  322.   fldcw word [esp]
  323.   frndint
  324.   mov  [esp],dx
  325.   fldcw word [esp]
  326.   add  esp,2
  327. .floor_end:
  328.   ret
  329. endp
  330.  
  331. align 4
  332. proc @MessageBox$qpc
  333.         mov eax,[esp+4]
  334.         notify_window_run eax
  335.         ret
  336. endp