alternate ways of setting the string encoding for absolute paths
git-svn-id: svn://kolibrios.org@6758 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ae17e1bd38
commit
8eb00f284b
@ -828,10 +828,16 @@ common_app_entry:
|
||||
[ebp+APP_HDR.img_base], [ebp+APP_HDR.img_size]
|
||||
mov esi, [ebp+APP_HDR.path_string]
|
||||
mov edi, [ebp+APP_HDR.path]
|
||||
mov ecx, [ebp+APP_HDR.filename_size]
|
||||
cmp ecx, 1023
|
||||
jc @f
|
||||
mov ecx, 1022
|
||||
@@:
|
||||
push esi
|
||||
test edi, edi
|
||||
jz @f
|
||||
mov ecx, [ebp+APP_HDR.filename_size]
|
||||
mov al, '/'
|
||||
stosb
|
||||
rep movsb
|
||||
mov byte [edi], 0
|
||||
@@:
|
||||
|
@ -3900,12 +3900,16 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
* +20 = +0x14: byte: 0
|
||||
* +21 = +0x15: dword: указатель на строку
|
||||
Чувствительность к регистру букв зависит от файловой системы.
|
||||
Можно указать кодировку, поместив в начале строки байт со значениями:
|
||||
Если путь начинается не с '/', то он считается относительным.
|
||||
Получить или установить текущую папку можно с помощью сисфункции 30.
|
||||
'../' в начале пути означает подъём на одну папку относительно текущей.
|
||||
Можно указать кодировку строки, поместив в её начале байт со значениями:
|
||||
* 1 = cp866
|
||||
* 2 = UTF-16LE
|
||||
* 3 = UTF-8
|
||||
иначе будет использоваться кодировка cp866.
|
||||
Формат строки:
|
||||
иначе будет использоваться кодировка cp866. В абсолютном пути можно
|
||||
поместить этот байт после '/' или добавить дополнительный '/' перед ним.
|
||||
Формат абсолютного пути:
|
||||
/base/number/dir1/dir2/.../dirn/file,
|
||||
где base/number идентифицирует устройство, на котором ищется файл:
|
||||
* RD/1 = рамдиск
|
||||
@ -3924,9 +3928,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
* '/HD0/1/folder/file.txt',0
|
||||
* '/hd2/2/pics/tanzania.bmp',0
|
||||
* 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
|
||||
Также функция поддерживает относительные имена. Если путь начинается
|
||||
не с '/', то он считается относительно текущей папки. Получить или
|
||||
установить текущую папку можно с помощью сисфункции 30.
|
||||
|
||||
Доступные подфункции:
|
||||
* подфункция 0 - чтение файла
|
||||
@ -4134,7 +4135,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
* +0: dword: 4 = номер подфункции
|
||||
* +4: dword: младший dword нового размера файла
|
||||
* +8: dword: старший dword нового размера файла
|
||||
(должен быть 0 для FAT)
|
||||
* +12 = +0xC: dword: 0 (зарезервировано)
|
||||
* +16 = +0x10: dword: 0 (зарезервировано)
|
||||
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||
@ -4142,10 +4142,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||
* ebx разрушается
|
||||
Замечания:
|
||||
* Если новый размер файла меньше старого, файл усекается. Если
|
||||
новый размер больше старого, файл расширяется нулевыми символами.
|
||||
Если новый размер равен старому, единственным результатом вызова
|
||||
является установка даты/времени модификации и доступа в текущие.
|
||||
* Если новый размер файла меньше старого, файл усекается.
|
||||
Если новый размер больше старого, файл расширяется, и если
|
||||
разница в размере не больше 16 МБ, новое место очищается нулями.
|
||||
* Если свободного места на диске недостаточно для расширения файла,
|
||||
то функция расширит насколько возможно, после чего вернёт
|
||||
код ошибки 8.
|
||||
|
@ -3670,6 +3670,7 @@ Parameters:
|
||||
* ebx = 2 - subfunction number
|
||||
* ecx = thread identifier
|
||||
* edx = size of context structure, must be 0x28=40 bytes
|
||||
* esi -> context structure
|
||||
Returned value:
|
||||
* function does not return value
|
||||
Format of context structure is shown in the description of
|
||||
@ -3855,12 +3856,16 @@ General format of the information structure:
|
||||
* +20 = +0x14: byte: 0
|
||||
* +21 = +0x15: dword: pointer to string
|
||||
Case sensitivity depends on filesystem.
|
||||
If a path not begins with '/', it is considered a relative.
|
||||
To get or set the current folder, use the function 30.
|
||||
'../' in the beginning means a lift by one folder relatively current folder.
|
||||
To set the encoding, put at the start of the string a byte with next values:
|
||||
* 1 = cp866
|
||||
* 2 = UTF-16LE
|
||||
* 3 = UTF-8
|
||||
otherwise will be used cp866.
|
||||
Format of filename:
|
||||
otherwise will be used cp866. In an absolute path
|
||||
you may put this byte after the '/' or put an additional '/' before it.
|
||||
Format of an absolute path:
|
||||
/base/number/dir1/dir2/.../dirn/file,
|
||||
where base/number identifies device, on which file is located:
|
||||
* RD/1 = ramdisk
|
||||
@ -3879,9 +3884,6 @@ Examples:
|
||||
* '/HD0/1/folder/file.txt',0
|
||||
* '/hd2/2/pics/tanzania.bmp',0
|
||||
* 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
|
||||
Also function supports relative names. If the path begins not
|
||||
with '/', it is considered relative to a current folder. To get or
|
||||
set a current folder, use the function 30.
|
||||
|
||||
Available subfunctions:
|
||||
* subfunction 0 - read file
|
||||
@ -4094,11 +4096,9 @@ Returned value:
|
||||
* eax = 0 - success, otherwise file system error code
|
||||
* ebx destroyed
|
||||
Remarks:
|
||||
* If the new file size is less than old one, file is truncated.
|
||||
If the new size is greater than old one, file is expanded with
|
||||
characters with code 0. If the new size is equal to old one,
|
||||
the only result of call is set date/time of modification and
|
||||
access to the current date/time.
|
||||
* If new file size is less than old one, file will be truncated.
|
||||
If new size is greater than old one, file will be expanded, and if
|
||||
size difference is up to 16 MB, new space will be cleared with 0.
|
||||
* If there is not enough free space on disk for expansion, the
|
||||
function will expand to maximum possible size and then return
|
||||
error code 8.
|
||||
|
@ -510,10 +510,18 @@ get_full_file_name:
|
||||
cmp byte [esi], '/'
|
||||
jnz .set_relative
|
||||
inc esi
|
||||
cmp byte [ebx], 2
|
||||
jnz @f
|
||||
cmp byte [esi], 4
|
||||
jnc @f
|
||||
mov ebx, esi
|
||||
inc esi
|
||||
cmp byte [esi], '/'
|
||||
jnz .start
|
||||
inc esi
|
||||
@@:
|
||||
cmp byte [ebx], 2
|
||||
jnz .start
|
||||
inc esi
|
||||
.start:
|
||||
call process_replace_file_name
|
||||
mov edi, [esp+12]
|
||||
mov ecx, [esp+16]
|
||||
|
Loading…
Reference in New Issue
Block a user