unicode.inc
mxlgv_KolibriDev/src/kernel/unicode.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                              ;;
;; Copyright (C) KolibriOS team 2020-2020. All rights reserved. ;;
;;  Distributed under terms of the GNU General Public License.  ;;
;;      Version 2, or (at your option) any later version.       ;;
;;                                                              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

$Revision: 8130 $

unicode.utf8.decode:
        test    ecx, ecx
        jz      .error
        movzx   eax, byte[esi]
        test    al, al
        jns     .read1
        shl     al, 2
        jnc     .error
        shl     al, 1
        jnc     .read2
        shl     al, 1
        jnc     .read3
        shl     al, 1
        jnc     .read4
        jmp     .error
.read1:
        sub     ecx, 1
        add     esi, 1
        jmp     .done
.read2:
        cmp     ecx, 2
        jb      .error
        shl     eax, 5
        mov     al, [esi+1]
        shl     al, 1
        jnc     .error
        shl     al, 1
        jc      .error
        shr     eax, 2
        sub     ecx, 2
        add     esi, 2
        jmp     .done
.read3:
        cmp     ecx, 3
        jb      .error
        shl     eax, 4
        mov     al, [esi+1]
        shl     al, 1
        jnc     .error
        shl     al, 1
        jc      .error
        shl     eax, 6
        mov     al, [esi+2]
        shl     al, 1
        jnc     .error
        shl     al, 1
        jc      .error
        shr     eax, 2
        sub     ecx, 3
        add     esi, 3
        jmp     .done
.read4:
        cmp     ecx, 4
        jb      .error
        shl     eax, 3
        mov     al, [esi+1]
        shl     al, 1
        jnc     .error
        shl     al, 1
        jc      .error
        shl     eax, 6
        mov     al, [esi+2]
        shl     al, 1
        jnc     .error
        shl     al, 1
        jc      .error
        shl     eax, 6
        mov     al, [esi+3]
        shl     al, 1
        jnc     .error
        shl     al, 1
        jc      .error
        shr     eax, 2
        sub     ecx, 4
        add     esi, 4
        jmp     .done
.error:
.done:
        ret


unicode.cp866.encode:
        call    uni2ansi_char
        ret


unicode.utf16.encode:
        cmp     eax, 0x110000
        jae     .error
        cmp     eax, 0x10000
        jae     .write2
        cmp     eax, 0xe000
        jae     .write1
        cmp     eax, 0xd800
        jb      .write1
        jmp     .error
.write1:
        jmp     .done
.write2:
        sub     eax, 0x10000
        shl     eax, 6
        shr     ax, 6
        or      eax, 0xdc00d800
        jmp     .done
.done:
.error:
        ret
