Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. format MS COFF
  3.  
  4. public EXPORTS
  5.  
  6. section '.flat' code readable writable align 16
  7.  
  8.  
  9. version:
  10.         mov     eax, 10
  11.         ret
  12.  
  13. ; int __stdcall convert (const char filename[], char buffer[], int mode)
  14. convert:
  15.  
  16.         mov     eax, [esp+4]
  17.         mov     dword [filename], eax
  18.         mov     eax, [esp+8]
  19.         mov     dword [buffer], eax
  20.         mov     eax, [esp+12]
  21.         mov     dword [mode], eax
  22.  
  23.         pushad
  24.  
  25.         mov     eax, 68
  26.         mov     ebx, 11
  27.         int     0x40
  28.  
  29.         mov     dword [file_in],    5
  30.         mov     dword [file_in+4],  0
  31.         mov     dword [file_in+8],  0
  32.         mov     dword [file_in+12], 0
  33.         mov     dword [file_in+16], bdvk
  34.         mov     byte  [file_in+20], 0
  35.         mov     eax, [filename]
  36.         mov     dword [file_in+21], eax
  37.  
  38.         mov     eax, 70
  39.         mov     ebx, file_in
  40.         int     0x40
  41.  
  42.         mov     dword eax, [bdvk+32]
  43.         mov     dword [buf_len], eax
  44.  
  45.         mov     eax, 68
  46.         mov     ebx, 12
  47.         mov     ecx, [buf_len]
  48.         int     0x40
  49.  
  50.         mov     [buf], eax
  51.  
  52.         cmp     eax, 0
  53.         jne     _mem_ok
  54.  
  55.         popad
  56.         mov     eax, -1
  57.         ret     12
  58.  
  59. _mem_ok:
  60.         mov     dword [file_in],    0
  61.         mov     dword [file_in+4],  0x600
  62.         mov     dword [file_in+8],  0
  63.         mov     eax, [buf_len]
  64.         sub     eax, 0x600
  65.         mov     [buf_len], eax
  66.         mov     dword [file_in+12], eax
  67.         mov     eax, [buf]
  68.         mov     dword [file_in+16], eax
  69.         mov     byte  [file_in+20], 0
  70.         mov     eax, [filename]
  71.         mov     dword [file_in+21], eax
  72.  
  73.         mov     eax, 70
  74.         mov     ebx, file_in
  75.         int     0x40
  76.  
  77.         call    translate
  78.  
  79.         mov     eax, 68
  80.         mov     ebx, 13
  81.         mov     ecx, [buf]
  82.         int     0x40
  83.  
  84.         popad
  85.  
  86.         mov     eax, [result]
  87.         ret     12
  88.  
  89. translate:
  90.         pushad
  91.  
  92.         xor     ebx, ebx
  93.         mov     [result], 0
  94.  
  95.         mov     ecx, [buf]      ; ¢å®¤­®© ¡ãä¥à
  96.         mov     edx, [buffer]   ; ¢ë室­®© ¡ãä¥à
  97.  
  98. _translate_loop:
  99.  
  100.  
  101.         cmp     ebx, [buf_len]
  102.         je      _translate_end
  103.  
  104.         mov     byte al, [ecx]
  105.         inc     ecx
  106.         inc     ebx
  107.         mov     byte ah, [ecx]
  108.  
  109.         cmp     ah, 0
  110.         jne     _translate_next1
  111.  
  112.         cmp     al, 0
  113.         je      _translate_end
  114.  
  115.         cmp     al, 13
  116.         jne     _translate_no13
  117.  
  118.         mov     byte [edx], 0x0d
  119.         inc     edx
  120.         mov     byte [edx], 0x0a
  121.         inc     edx
  122.         mov     byte [edx], 32
  123.         inc     edx
  124.         mov     byte [edx], 32
  125.         inc     edx
  126.         mov     byte [edx], 32
  127.         inc     edx
  128.         mov     al, 32
  129.         jmp     _translate_copy
  130.  
  131. _translate_no13:
  132.        
  133.         cmp     al, 0x1f
  134.         jg      _translate_eng_1
  135.  
  136.         inc     ecx
  137.         inc     ebx
  138.         jmp     _translate_loop
  139.  
  140. _translate_eng_1:
  141.  
  142.         cmp     al, 0x7f
  143.         jle     _translate_eng_2
  144.  
  145.         inc     ecx
  146.         inc     ebx
  147.         jmp     _translate_loop
  148.  
  149. _translate_eng_2:
  150.         jmp     _translate_copy
  151.  
  152. _translate_next1:
  153.  
  154.         cmp     ah, 4
  155.         jne     _translate_next2
  156.  
  157.         cmp     al, 0x2f
  158.         jb      _translate_rus_s
  159.  
  160.         and     eax, 0xff
  161.         add     eax, rus_big
  162.         sub     eax, 0x10
  163.  
  164.         mov     al, [eax]
  165.        
  166.         jmp     _translate_copy
  167.  
  168. _translate_rus_s:
  169.         and     eax, 0xff
  170.         add     eax, rus_small
  171.         sub     eax, 0x30
  172.  
  173.         mov     al, [eax]
  174.        
  175.         jmp     _translate_copy
  176.  
  177.  
  178. _translate_next2:
  179.         cmp     ah, 0x20
  180.         jne     _translate_next3
  181.  
  182. _translate_next3:
  183.  
  184. _translate_copy:
  185.         mov     byte [edx], al
  186.  
  187.         inc     ecx
  188.         inc     edx
  189.         inc     ebx
  190.         inc     [result]
  191.  
  192.         jmp     _translate_loop
  193.  
  194. _translate_end:
  195.         popad
  196.         ret
  197.  
  198.  
  199.  
  200. align 16
  201. EXPORTS:
  202.                 dd      szVersion,      version
  203.                 dd      szConvert,      convert
  204.                 dd      0,              0
  205.  
  206. szVersion       db      'version',0
  207. szConvert       db      'convert',0
  208.  
  209. buf             dd      0
  210. buf_len         dd      0
  211. result          dd      0
  212.  
  213. mode            dd      0
  214. buffer          dd      0
  215. filename        dd      0
  216.  
  217. rus_big         db      '€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ'
  218. rus_small       db      ' ¡¢£¤¥¦§¨©ª«¬­®¯àáâãäåæçèéêëìíîï'
  219.  
  220. section '.data' data readable writable align 16
  221.  
  222. file_in         rd      1
  223.                 rd      1
  224.                 rd      1
  225.                 rd      1
  226.                 rd      1
  227.                 rb      1
  228.                 rd      1
  229.  
  230. bdvk            rd      1
  231.                 rb      1
  232.                 rb      3
  233.                 rb      4
  234.                 rb      4
  235.                 rb      4
  236.                 rb      4
  237.                 rb      4
  238.                 rb      4
  239.                 rd      1
  240.                 rd      1
  241.  
  242.