Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3538 → Rev 3539

/kernel/trunk/fs/iso9660.inc
137,7 → 137,7
.l1:
push ecx edx
push 0
mov eax, [edi+10] ; ðåàëüíûé ðàçìåð ôàéëîâîé ñåêöèè
mov eax, [edi+10] ; реальный размер файловой секции
sub eax, ebx
jb .eof
cmp eax, ecx
159,7 → 159,7
jb .incomplete_sector
; we may read and memmove complete sector
mov [CDDataBuf_pointer], edx
call ReadCDWRetr; ÷èòàåì ñåêòîð ôàéëà
call ReadCDWRetr; читаем сектор файла
cmp [DevErrorCode], 0
jne .noaccess_3
add edx, 2048
170,7 → 170,7
.incomplete_sector:
; we must read and memmove incomplete sector
mov [CDDataBuf_pointer], CDDataBuf
call ReadCDWRetr; ÷èòàåì ñåêòîð ôàéëà
call ReadCDWRetr; читаем сектор файла
cmp [DevErrorCode], 0
jne .noaccess_3
push ecx
240,7 → 240,7
.found_dir:
mov eax, [edi+2] ; eax=cluster
mov [CDSectorAddress], eax
mov eax, [edi+10] ; ðàçìåð äèðåêòðîðèè
mov eax, [edi+10] ; размер директрории
.doit:
; init header
push eax ecx
252,7 → 252,7
mov byte [edx], 1 ; version
mov [cd_mem_location], edx
add [cd_mem_location], 32
; íà÷èíàåì ïåðåáðîñêó ÁÄÂÊ â ÓÑÂÊ
; начинаем переброску БДВК в УСВК
;.mainloop:
mov [cd_counter_block], dword 0
dec dword [CDSectorAddress]
260,12 → 260,12
.read_to_buffer:
inc dword [CDSectorAddress]
mov [CDDataBuf_pointer], CDDataBuf
call ReadCDWRetr ; ÷èòàåì ñåêòîð äèðåêòîðèè
call ReadCDWRetr ; читаем сектор директории
cmp [DevErrorCode], 0
jne .noaccess_1
call .get_names_from_buffer
sub eax, 2048
; äèðåêòîðèÿ çàêîí÷èëàñü?
; директория закончилась?
ja .read_to_buffer
mov edi, [cd_counter_block]
mov [edx+8], edi
310,17 → 310,17
call uni2ansi_char
cld
stosb
; ïðîâåðêà êîíöà ôàéëà
; проверка конца файла
mov ax, [esi]
cmp ax, word 3B00h; ñåïàðàòîð êîíöà ôàéëà ';'
cmp ax, word 3B00h; сепаратор конца файла ';'
je .cd_get_parameters_of_file_1
; ïðîâåðêà äëÿ ôàéëîâ íå çàêàí÷èâàþùèõñÿ ñåïàðàòîðîì
; проверка для файлов не заканчивающихся сепаратором
movzx eax, byte [ebp-33]
add eax, ebp
sub eax, 34
cmp esi, eax
je .cd_get_parameters_of_file_1
; ïðîâåðêà êîíöà ïàïêè
; проверка конца папки
movzx eax, byte [ebp-1]
add eax, ebp
cmp esi, eax
347,17 → 347,17
jbe .unicode_parent_directory
cld
movsw
; ïðîâåðêà êîíöà ôàéëà
; проверка конца файла
mov ax, [esi]
cmp ax, word 3B00h; ñåïàðàòîð êîíöà ôàéëà ';'
cmp ax, word 3B00h; сепаратор конца файла ';'
je .cd_get_parameters_of_file_2
; ïðîâåðêà äëÿ ôàéëîâ íå çàêàí÷èâàþùèõñÿ ñåïàðàòîðîì
; проверка для файлов не заканчивающихся сепаратором
movzx eax, byte [ebp-33]
add eax, ebp
sub eax, 34
cmp esi, eax
je .cd_get_parameters_of_file_2
; ïðîâåðêà êîíöà ïàïêè
; проверка конца папки
movzx eax, byte [ebp-1]
add eax, ebp
cmp esi, eax
386,60 → 386,60
cd_get_parameters_of_file:
mov edi, [cd_mem_location]
cd_get_parameters_of_file_1:
; ïîëó÷àåì àòðèáóòû ôàéëà
; получаем атрибуты файла
xor eax, eax
; ôàéë íå àðõèâèðîâàëñÿ
; файл не архивировался
inc eax
shl eax, 1
; ýòî êàòàëîã?
; это каталог?
test [ebp-8], byte 2
jz .file
inc eax
.file:
; ìåòêà òîìà íå êàê â FAT, â ýòîì âèäå îòñóòñâóåò
; ôàéë íå ÿâëÿåòñÿ ñèñòåìíûì
; метка тома не как в FAT, в этом виде отсутсвует
; файл не является системным
shl eax, 3
; ôàéë ÿâëÿåòñÿ ñêðûòûì? (àòðèáóò ñóùåñòâîâàíèå)
; файл является скрытым? (атрибут существование)
test [ebp-8], byte 1
jz .hidden
inc eax
.hidden:
shl eax, 1
; ôàéë âñåãäà òîëüêî äëÿ ÷òåíèÿ, òàê êàê ýòî CD
; файл всегда только для чтения, так как это CD
inc eax
mov [edi], eax
; ïîëó÷àåì âðåìÿ äëÿ ôàéëà
;÷àñ
; получаем время для файла
;час
movzx eax, byte [ebp-12]
shl eax, 8
;ìèíóòà
;минута
mov al, [ebp-11]
shl eax, 8
;ñåêóíäà
;секунда
mov al, [ebp-10]
;âðåìÿ ñîçäàíèÿ ôàéëà
;время создания файла
mov [edi+8], eax
;âðåìÿ ïîñëåäíåãî äîñòóïà
;время последнего доступа
mov [edi+16], eax
;âðåìÿ ïîñëåäíåé çàïèñè
;время последней записи
mov [edi+24], eax
; ïîëó÷àåì äàòó äëÿ ôàéëà
;ãîä
; получаем дату для файла
;год
movzx eax, byte [ebp-15]
add eax, 1900
shl eax, 8
;ìåñÿö
;месяц
mov al, [ebp-14]
shl eax, 8
;äåíü
;день
mov al, [ebp-13]
;äàòà ñîçäàíèÿ ôàéëà
;дата создания файла
mov [edi+12], eax
;âðåìÿ ïîñëåäíåãî äîñòóïà
;время последнего доступа
mov [edi+20], eax
;âðåìÿ ïîñëåäíåé çàïèñè
;время последней записи
mov [edi+28], eax
; ïîëó÷àåì òèï äàííûõ èìåíè
; получаем тип данных имени
xor eax, eax
test dword [ebx+4], 1; 0=ANSI, 1=UNICODE
jnz .unicode_1
449,7 → 449,7
inc eax
mov [edi+4], eax
@@:
; ïîëó÷àåì ðàçìåð ôàéëà â áàéòàõ
; получаем размер файла в байтах
xor eax, eax
mov [edi+32+4], eax
mov eax, [ebp-23]
503,7 → 503,7
; out: CF=1 - file not found
; else CF=0 and [cd_current_pointer_of_input] direntry
push eax esi
; 16 ñåêòîð íà÷àëî íàáîðà äåñêðèïòîðîâ òîìîâ
; 16 сектор начало набора дескрипторов томов
 
call WaitUnitReady
cmp [DevErrorCode], 0
510,7 → 510,7
jne .access_denied
 
call prevent_medium_removal
; òåñòîâîå ÷òåíèå
; тестовое чтение
mov [CDSectorAddress], dword 16
mov [CDDataBuf_pointer], CDDataBuf
call ReadCDWRetr;_1
517,7 → 517,7
cmp [DevErrorCode], 0
jne .access_denied
 
; âû÷èñëåíèå ïîñëåäíåé ñåññèè
; вычисление последней сессии
call WaitUnitReady
cmp [DevErrorCode], 0
jne .access_denied
539,37 → 539,37
jne .access_denied
 
.start_check:
; ïðîâåðêà íà âøèâîñòü
; проверка на вшивость
cmp [CDDataBuf+1], dword 'CD00'
jne .access_denied
cmp [CDDataBuf+5], byte '1'
jne .access_denied
; ñåêòîð ÿâëÿåòñÿ òåðìèíàòîðîì íàáîð äåñêðèïòîðîâ òîìîâ?
; сектор является терминатором набор дескрипторов томов?
cmp [CDDataBuf], byte 0xff
je .access_denied
; ñåêòîð ÿâëÿåòñÿ äîïîëíèòåëüíûì è óëó÷øåííûì äåñêðèïòîðîì òîìà?
; сектор является дополнительным и улучшенным дескриптором тома?
cmp [CDDataBuf], byte 0x2
jne .start
; ñåêòîð ÿâëÿåòñÿ äîïîëíèòåëüíûì äåñêðèïòîðîì òîìà?
; сектор является дополнительным дескриптором тома?
cmp [CDDataBuf+6], byte 0x1
jne .start
 
; ïàðàìåòðû root äèðåêòðîðèè
mov eax, [CDDataBuf+0x9c+2]; íà÷àëî root äèðåêòðîðèè
; параметры root директрории
mov eax, [CDDataBuf+0x9c+2]; начало root директрории
mov [CDSectorAddress], eax
mov eax, [CDDataBuf+0x9c+10]; ðàçìåð root äèðåêòðîðèè
mov eax, [CDDataBuf+0x9c+10]; размер root директрории
cmp byte [esi], 0
jnz @f
mov [cd_current_pointer_of_input], CDDataBuf+0x9c
jmp .done
@@:
; íà÷èíàåì ïîèñê
; начинаем поиск
.mainloop:
dec dword [CDSectorAddress]
.read_to_buffer:
inc dword [CDSectorAddress]
mov [CDDataBuf_pointer], CDDataBuf
call ReadCDWRetr ; ÷èòàåì ñåêòîð äèðåêòîðèè
call ReadCDWRetr ; читаем сектор директории
cmp [DevErrorCode], 0
jne .access_denied
push ebp
577,27 → 577,27
pop ebp
jnc .found
sub eax, 2048
; äèðåêòîðèÿ çàêîí÷èëàñü?
; директория закончилась?
cmp eax, 0
ja .read_to_buffer
; íåò èñêîìîãî ýëåìåíòà öåïî÷êè
; нет искомого элемента цепочки
.access_denied:
pop esi eax
mov [cd_appl_data], 1
stc
ret
; èñêîìûé ýëåìåíò öåïî÷êè íàéäåí
; искомый элемент цепочки найден
.found:
; êîíåö ïóòè ôàéëà
; конец пути файла
cmp byte [esi-1], 0
jz .done
.nested:
mov eax, [cd_current_pointer_of_input]
push dword [eax+2]
pop dword [CDSectorAddress] ; íà÷àëî äèðåêòîðèè
mov eax, [eax+2+8]; ðàçìåð äèðåêòîðèè
pop dword [CDSectorAddress] ; начало директории
mov eax, [eax+2+8]; размер директории
jmp .mainloop
; óêàçàòåëü ôàéëà íàéäåí
; указатель файла найден
.done:
test ebp, ebp
jz @f
629,13 → 629,13
mov ebp, [cd_current_pointer_of_input_2]
mov [cd_current_pointer_of_input], ebp
mov eax, [ebp]
test eax, eax ; âõîäû çàêîí÷èëèñü?
test eax, eax ; входы закончились?
jz .next_sector
cmp ebp, CDDataBuf+2048 ; áóôåð çàêîí÷èëñÿ?
cmp ebp, CDDataBuf+2048 ; буфер закончился?
jae .next_sector
movzx eax, byte [ebp]
add [cd_current_pointer_of_input_2], eax; ñëåäóþùèé âõîä êàòàëîãà
add ebp, 33; óêàçàòåëü óñòàíîâëåí íà íà÷àëî èìåíè
add [cd_current_pointer_of_input_2], eax; следующий вход каталога
add ebp, 33; указатель установлен на начало имени
pop eax
clc
ret
669,9 → 669,9
scasw
jne .name_not_coincide
.coincides:
cmp [esi], byte '/'; ðàçäåëèòåëü ïóòè, êîíåö èìåíè òåêóùåãî ýëåìåíòà
cmp [esi], byte '/'; разделитель пути, конец имени текущего элемента
je .done
cmp [esi], byte 0; ðàçäåëèòåëü ïóòè, êîíåö èìåíè òåêóùåãî ýëåìåíòà
cmp [esi], byte 0; разделитель пути, конец имени текущего элемента
je .done
jmp .loop
.name_not_coincide:
679,16 → 679,16
stc
ret
.done:
; ïðîâåðêà êîíöà ôàéëà
cmp [edi], word 3B00h; ñåïàðàòîð êîíöà ôàéëà ';'
; проверка конца файла
cmp [edi], word 3B00h; сепаратор конца файла ';'
je .done_1
; ïðîâåðêà äëÿ ôàéëîâ íå çàêàí÷èâàþùèõñÿ ñåïàðàòîðîì
; проверка для файлов не заканчивающихся сепаратором
movzx eax, byte [ebp-33]
add eax, ebp
sub eax, 34
cmp edi, eax
je .done_1
; ïðîâåðêà êîíöà ïàïêè
; проверка конца папки
movzx eax, byte [ebp-1]
add eax, ebp
cmp edi, eax
708,14 → 708,14
jb .ret
cmp al, 'Z'
jbe .az
cmp al, '€'
cmp al, 0x80 ; 'А'
jb .ret
cmp al, ''
cmp al, 0x90 ; 'Р'
jb .rus1
cmp al, 'Ÿ'
cmp al, 0x9F ; 'Я'
ja .ret
; 0x90-0x9F -> 0xE0-0xEF
add al, 'à'-''
add al, 0xE0-0x90
.ret:
ret
.rus1:
744,10 → 744,10
mov al, '_'
jmp .doit
.yo1:
mov al, 'ð'
mov al, 0xF0 ; 'Ё' in cp866
jmp .doit
.yo2:
mov al, 'ñ'
mov al, 0xF1 ; 'ё' in cp866
jmp .doit
.rus1:
; 0x410-0x43F -> 0x80-0xAF