2020-03-12 01:27:08 +01:00
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;; ;;
|
2024-05-22 17:15:14 +02:00
|
|
|
;; Copyright (C) KolibriOS team 2020-2024. All rights reserved. ;;
|
2020-03-12 01:27:08 +01:00
|
|
|
;; Distributed under terms of the GNU General Public License. ;;
|
|
|
|
;; Version 2, or (at your option) any later version. ;;
|
|
|
|
;; ;;
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
|
|
|
|
|
|
|
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
|