346,10 → 346,10 |
mov al, '_' |
jmp .doit |
.yo1: |
mov al, 'ð' |
mov al, 0xF0 ; 'Ё' |
jmp .doit |
.yo2: |
mov al, 'ñ' |
mov al, 0xF1 ; 'ё' |
jmp .doit |
.rus1: |
; 0x410-0x43F -> 0x80-0xAF |
389,9 → 389,9 |
; 0xF0 -> 0x401 |
; 0xF1 -> 0x451 |
@@: |
cmp al, 'ð' |
cmp al, 0xF0 ; 'Ё' |
jz .yo1 |
cmp al, 'ñ' |
cmp al, 0xF1 ; 'ё' |
jz .yo2 |
.unk: |
mov al, '_' ; ah=0 |
411,16 → 411,16 |
jb .ret |
cmp al, 'z' |
jbe .az |
cmp al, 'ñ' |
cmp al, 0xF1 ; 'ё' |
jz .yo1 |
cmp al, ' ' |
cmp al, 0xA0 ; 'а' |
jb .ret |
cmp al, 'à' |
cmp al, 0xE0 ; 'р' |
jb .rus1 |
cmp al, 'ï' |
cmp al, 0xEF ; 'я' |
ja .ret |
; 0xE0-0xEF -> 0x90-0x9F |
sub al, 'à'-'' |
sub al, 0xE0-0x90 |
.ret: |
ret |
.rus1: |
1601,8 → 1601,26 |
cmp ecx, eax |
jb .scan_cont |
; found! |
; If creating a directory, allocate one data cluster now and fail immediately |
; if this is impossible. This prevents from creating an invalid directory entry |
; on a full disk. |
; yup, the argument is quite non-intuitive... but what should I do if |
; the entire function uses such arguments? BTW, it refers to al from pushad, |
; which in turn is filled with 0 in fs_RamdiskRewrite and 1 in fs_RamdiskCreateFolder. |
push esi ecx |
cmp byte [esp+24+12+20+28], 0 |
jz .no.preallocate.folder.data |
mov ecx, 2849 |
mov edi, RAMDISK_FAT |
xor eax, eax |
repnz scasw |
jz @f |
add esp, 24 |
jmp .disk_full |
@@: |
mov [esp+24+12+20+20], edi ; store the cluster somewhere |
.no.preallocate.folder.data: |
; calculate name checksum |
push esi ecx |
mov esi, [esp+8+8] |
mov ecx, 11 |
xor eax, eax |
1672,6 → 1690,13 |
mov byte [edi+11], 10h ; attributes: folder |
mov ecx, 32*2 |
mov edx, edi |
push edx |
push ecx |
push edi |
add edi, 26 ; edi points to low word of cluster |
push edi |
mov edi, [esp+16+20+20] |
jmp .doit2 |
.doit: |
push edx |
push ecx |
1686,6 → 1711,7 |
xor eax, eax |
repnz scasw |
jnz .disk_full2 |
.doit2: |
dec edi |
dec edi |
|