831,81 → 831,3 |
inc esi |
clc |
ret |
;----------------------------------------------------------------------------- |
char_todown: |
; convert character to uppercase, using cp866 encoding |
; in: al=symbol |
; out: al=converted symbol |
cmp al, 'A' |
jb .ret |
|
cmp al, 'Z' |
jbe .az |
|
cmp al, 0x80 ; 'А' |
jb .ret |
|
cmp al, 0x90 ; 'Р' |
jb .rus1 |
|
cmp al, 0x9F ; 'Я' |
ja .ret |
; 0x90-0x9F -> 0xE0-0xEF |
add al, 0xE0-0x90 |
;-------------------------------------- |
.ret: |
ret |
;-------------------------------------- |
.rus1: |
; 0x80-0x8F -> 0xA0-0xAF |
.az: |
add al, 0x20 |
ret |
;----------------------------------------------------------------------------- |
uni2ansi_char: |
; convert UNICODE character in al to ANSI character in ax, using cp866 encoding |
; in: ax=UNICODE character |
; out: al=converted ANSI character |
cmp ax, 0x80 |
jb .ascii |
|
cmp ax, 0x401 |
jz .yo1 |
|
cmp ax, 0x451 |
jz .yo2 |
|
cmp ax, 0x410 |
jb .unk |
|
cmp ax, 0x440 |
jb .rus1 |
|
cmp ax, 0x450 |
jb .rus2 |
;-------------------------------------- |
.unk: |
mov al, '_' |
jmp .doit |
;-------------------------------------- |
.yo1: |
mov al, 0xF0 ; 'Ё' in cp866 |
jmp .doit |
;-------------------------------------- |
.yo2: |
mov al, 0xF1 ; 'ё' in cp866 |
jmp .doit |
;-------------------------------------- |
.rus1: |
; 0x410-0x43F -> 0x80-0xAF |
add al, 0x70 |
jmp .doit |
;-------------------------------------- |
.rus2: |
; 0x440-0x44F -> 0xE0-0xEF |
add al, 0xA0 |
;-------------------------------------- |
.ascii: |
.doit: |
ret |
;----------------------------------------------------------------------------- |