forked from KolibriOS/kolibrios
UTF-16 file path input
git-svn-id: svn://kolibrios.org@6473 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
061798afec
commit
668afc0d0b
@ -1700,7 +1700,8 @@ Remarks:
|
|||||||
Параметры:
|
Параметры:
|
||||||
* eax = 30 - номер функции
|
* eax = 30 - номер функции
|
||||||
* ebx = 1 - номер подфункции
|
* ebx = 1 - номер подфункции
|
||||||
* ecx = указатель на ASCIIZ-строку с путём к новой текущей папке
|
* ecx = указатель на строку с путём к новой текущей папке,
|
||||||
|
правила формирования строки указаны в описании функции 70.
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* функция не возвращает значения
|
* функция не возвращает значения
|
||||||
|
|
||||||
@ -1725,17 +1726,40 @@ Remarks:
|
|||||||
* eax = 30 - номер функции
|
* eax = 30 - номер функции
|
||||||
* ebx = 3 - номер подфункции
|
* ebx = 3 - номер подфункции
|
||||||
* ecx = указатель на блок данных:
|
* ecx = указатель на блок данных:
|
||||||
sysdir_name rb 64
|
для кодировки cp866:
|
||||||
sysdir_path rb 64
|
key rb 64
|
||||||
Пример:
|
path rb 64
|
||||||
dir_name1 db 'KolibriOS',0
|
для кодировки UTF-16LE:
|
||||||
rb 64-10
|
key rb 64
|
||||||
dir_path1 db 'HD0/1',0
|
dw 2
|
||||||
rb 64-6
|
path rw 31
|
||||||
|
Пример:
|
||||||
|
align 64
|
||||||
|
key db 'kolibrios',0 ; ключ должен быть в нижнем регистре
|
||||||
|
align 64
|
||||||
|
path db 'HD0/1',0
|
||||||
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* функция не возвращает значения
|
* функция не возвращает значения
|
||||||
Замечания:
|
Замечания:
|
||||||
* Функция может быть вызвана только 1 раз за 1 сессию работы ОС.
|
* Функция может быть вызвана только 1 раз за 1 сессию работы ОС.
|
||||||
|
* Кодировка не влияет на символьный ключ.
|
||||||
|
|
||||||
|
----- Подфункция 4 - получить текущую папку в кодировке UTF-16LE -----
|
||||||
|
Параметры:
|
||||||
|
* eax = 30 - номер функции
|
||||||
|
* ebx = 4 - номер подфункции
|
||||||
|
* ecx = указатель на буфер
|
||||||
|
* edx = размер буфера
|
||||||
|
Возвращаемое значение:
|
||||||
|
* eax = количество символов в строке (включая завершающий 0)
|
||||||
|
Замечания:
|
||||||
|
* Если размера буфера недостаточно для копирования всего имени,
|
||||||
|
копируются только первые (edx-2) байт и в конце ставится
|
||||||
|
завершающий 0.
|
||||||
|
* По умолчанию, текущая папка для потока - "/rd/1".
|
||||||
|
* При создании процесса/потока текущая папка наследуется от
|
||||||
|
родителя.
|
||||||
|
|
||||||
---------------------- Константы для регистров: ----------------------
|
---------------------- Константы для регистров: ----------------------
|
||||||
eax - SF_CURRENT_FOLDER (30)
|
eax - SF_CURRENT_FOLDER (30)
|
||||||
@ -3869,36 +3893,32 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +8: dword: старший dword смещения (должен быть 0) или поле флагов
|
* +8: dword: старший dword смещения (должен быть 0) или поле флагов
|
||||||
* +12 = +0xC: dword: размер
|
* +12 = +0xC: dword: размер
|
||||||
* +16 = +0x10: dword: указатель на данные
|
* +16 = +0x10: dword: указатель на данные
|
||||||
* +20 = +0x14: n db: ASCIIZ-строка с именем файла
|
* +20 = +0x14: ?: текстовая строка - путь к файлу, заканчивается нулём
|
||||||
или
|
или
|
||||||
* +20 = +0x14: db 0
|
* +20 = +0x14: byte: 0
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
* +21 = +0x15: dword: указатель на строку
|
||||||
Уточнения - в документации на соответствующую подфункцию.
|
Для ввода текста в кодировке UTF-16LE нужно расположить в начале строки
|
||||||
Имя файла нечувствительно к регистру букв. Русские буквы должны быть
|
байт со значением 2, иначе будет использоваться кодировка cp866.
|
||||||
записаны в кодировке cp866 (DOS).
|
Чувствительность к регистру букв зависит от файловой системы.
|
||||||
Формат имени файла:
|
Формат строки:
|
||||||
/base/number/dir1/dir2/.../dirn/file,
|
/base/number/dir1/dir2/.../dirn/file,
|
||||||
где /base/number идентифицирует устройство, на котором ищется файл:
|
где base/number идентифицирует устройство, на котором ищется файл:
|
||||||
одно из
|
* RD/1 = рамдиск
|
||||||
* /RD/1 = /RAMDISK/1 для доступа к рамдиску
|
* FD/1 = первый флоппи-дисковод,
|
||||||
* /FD/1 = /FLOPPYDISK/1 для доступа к первому флоппи-дисководу,
|
FD/2 = второй флоппи-дисковод
|
||||||
/FD/2 = /FLOPPYDISK/2 для второго флоппи-дисковода
|
* HD0/x, HD1/x, HD2/x, HD3/x = жёсткие диски соответственно на
|
||||||
* /HD0/x, /HD1/x, /HD2/x, /HD3/x для доступа соответственно
|
IDE0 (Primary Master), IDE1 (Primary Slave),
|
||||||
к жёстким дискам на IDE0 (Primary Master), IDE1 (Primary Slave),
|
|
||||||
IDE2 (Secondary Master), IDE3 (Secondary Slave);
|
IDE2 (Secondary Master), IDE3 (Secondary Slave);
|
||||||
x - номер раздела на выбранном винчестере, изменяется от 1 до 255
|
x - номер раздела на выбранном винчестере, начиная с 1
|
||||||
(на каждом из винчестеров нумерация начинается с 1)
|
* CD0/1, CD1/1, CD2/1, CD3/1 = аналогично для cd
|
||||||
* /CD0/1, /CD1/1, /CD2/1, /CD3/1 для доступа соответственно
|
* SYS - системная папка (является ключём, не зависит от кодировки),
|
||||||
к CD на IDE0 (Primary Master), IDE1 (Primary Slave),
|
второй ключ может быть установлен сисфункцией 30.3.
|
||||||
IDE2 (Secondary Master), IDE3 (Secondary Slave)
|
|
||||||
* /SYS - определяет системную папку; при обычной загрузке системы
|
|
||||||
с дискеты эквивалентно /RD/1
|
|
||||||
Примеры:
|
Примеры:
|
||||||
* '/rd/1/kernel.asm',0
|
* '/sys/example.asm',0
|
||||||
* '/HD0/1/kernel.asm',0
|
* '/rd/1/example.asm',0
|
||||||
* '/hd0/2/menuet/pics/tanzania.bmp',0
|
* '/HD0/1/folder/file.txt',0
|
||||||
* '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
|
* '/hd2/2/pics/tanzania.bmp',0
|
||||||
* '/sys/MySuperApp.ini',0
|
* 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
|
||||||
Также функция поддерживает относительные имена. Если путь начинается
|
Также функция поддерживает относительные имена. Если путь начинается
|
||||||
не с '/', то он считается относительно текущей папки. Получить или
|
не с '/', то он считается относительно текущей папки. Получить или
|
||||||
установить текущую папку можно с помощью сисфункции 30.
|
установить текущую папку можно с помощью сисфункции 30.
|
||||||
@ -3941,11 +3961,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +8: dword: 0 (зарезервировано под старший dword позиции)
|
* +8: dword: 0 (зарезервировано под старший dword позиции)
|
||||||
* +12 = +0xC: dword: сколько байт читать
|
* +12 = +0xC: dword: сколько байт читать
|
||||||
* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
|
* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
|
||||||
* +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx = число прочитанных байт или
|
* ebx = число прочитанных байт или
|
||||||
@ -3969,27 +3985,21 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
Формат информационной структуры:
|
Формат информационной структуры:
|
||||||
* +0: dword: 1 = номер подфункции
|
* +0: dword: 1 = номер подфункции
|
||||||
* +4: dword: индекс начального блока (считая с 0)
|
* +4: dword: индекс начального блока (считая с 0)
|
||||||
* +8: dword: поле флагов:
|
* +8: dword: в какой кодировке возвращать имена:
|
||||||
* бит 0 (маска 1): в каком формате возвращать имена,
|
0 = cp866 -> байт на символ
|
||||||
0=ANSI, 1=UNICODE
|
1 = UTF-16LE -> 2 байта на символ
|
||||||
* прочие биты зарезервированы и должны быть установлены в 0
|
|
||||||
для будущей совместимости
|
|
||||||
* +12 = +0xC: dword: сколько блоков читать
|
* +12 = +0xC: dword: сколько блоков читать
|
||||||
* +16 = +0x10: dword: указатель на буфер, куда будут записаны
|
* +16 = +0x10: dword: указатель на буфер, куда будут записаны
|
||||||
данные, размер буфера должен быть не меньше 32 + [+12]*560 байт
|
данные, размер буфера должен быть не меньше 32+n(40+256*enc+8) байт
|
||||||
* +20 = +0x14: ASCIIZ-имя папки, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx = число файлов, информация о которых была записана в буфер,
|
* ebx = число файлов, информация о которых была записана в буфер,
|
||||||
или -1=0xffffffff, если папка не найдена
|
или -1=0xffffffff, если папка не найдена
|
||||||
Структура буфера:
|
Структура буфера:
|
||||||
* +0: 32*byte: заголовок
|
* заголовок (32 байта)
|
||||||
* +32 = +0x20: n1*byte: блок с информацией о файле 1
|
* блок с информацией о файле 1
|
||||||
* +32+n1: n2*byte: блок с информацией о файле 2
|
* блок с информацией о файле 2
|
||||||
* ...
|
* ...
|
||||||
Структура заголовка:
|
Структура заголовка:
|
||||||
* +0: dword: версия структуры (текущая версия = 1)
|
* +0: dword: версия структуры (текущая версия = 1)
|
||||||
@ -4013,11 +4023,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
это может быть полезно для автоматического создания
|
это может быть полезно для автоматического создания
|
||||||
backup-архивов, ибо при записи бит обычно устанавливается
|
backup-архивов, ибо при записи бит обычно устанавливается
|
||||||
(не в Kolibri, правда)
|
(не в Kolibri, правда)
|
||||||
* +4: byte: тип данных имени:
|
* +4: dword: кодировка имени:
|
||||||
(совпадает с битом 0 флагов информационной структуры)
|
* 0 = cp866 -> байт на символ
|
||||||
* 0 = ASCII = 1-байтное представление каждого символа
|
* 1 = UTF-16LE -> 2 байта на символ
|
||||||
* 1 = UNICODE = 2-байтное представление каждого символа
|
|
||||||
* +5: 3*byte: зарезервировано (нули)
|
|
||||||
* +8: 4*byte: время создания файла
|
* +8: 4*byte: время создания файла
|
||||||
* +12 = +0xC: 4*byte: дата создания файла
|
* +12 = +0xC: 4*byte: дата создания файла
|
||||||
* +16 = +0x10: 4*byte: время последнего доступа (чтение или запись)
|
* +16 = +0x10: 4*byte: время последнего доступа (чтение или запись)
|
||||||
@ -4025,11 +4033,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +24 = +0x18: 4*byte: время последней модификации
|
* +24 = +0x18: 4*byte: время последней модификации
|
||||||
* +28 = +0x1C: 4*byte: дата последней модификации
|
* +28 = +0x1C: 4*byte: дата последней модификации
|
||||||
* +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб)
|
* +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб)
|
||||||
* +40 = +0x28: имя
|
* +40 = +0x28: (256*enc+8)*byte: имя
|
||||||
* для формата ASCII: максимальная длина имени 263 символа
|
|
||||||
(263 байта), байт после имени имеет значение 0
|
|
||||||
* для формата UNICODE: максимальная длина имени 259 символов
|
|
||||||
(518 байт), два байта после имени имеют значение 0
|
|
||||||
Формат времени:
|
Формат времени:
|
||||||
* +0: byte: секунды
|
* +0: byte: секунды
|
||||||
* +1: byte: минуты
|
* +1: byte: минуты
|
||||||
@ -4042,12 +4046,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +2: word: год
|
* +2: word: год
|
||||||
* например, 25.11.1979 записывается как (в hex) 19 0B BB 07
|
* например, 25.11.1979 записывается как (в hex) 19 0B BB 07
|
||||||
Замечания:
|
Замечания:
|
||||||
* Если в БДВК присутствует имя в ASCII, то длина БДВК составляет
|
* Если в БДВК присутствует имя в cp866, то длина БДВК составляет
|
||||||
304 байта, если в UNICODE - 560 байт. Значение длины выравнено
|
304 байта, если в UTF-16LE - 560 байт. Значение длины выравнено
|
||||||
на целое кратное 16 байт
|
на целое кратное 16 байт для ускорения обработки в кэш-памяти CPU.
|
||||||
(для ускорения обработки в кэш-памяти CPU).
|
* Строка имени заканчивается нулём, дальнейшие данные содержат мусор.
|
||||||
* Первый символ после имени нулевой (ASCIIZ-строка). Дальнейшие
|
|
||||||
данные содержат мусор.
|
|
||||||
* Если файлы в папке кончились раньше, чем было прочитано
|
* Если файлы в папке кончились раньше, чем было прочитано
|
||||||
запрошенное количество, то функция прочитает, сколько сможет,
|
запрошенное количество, то функция прочитает, сколько сможет,
|
||||||
после чего вернёт eax=6 (EOF).
|
после чего вернёт eax=6 (EOF).
|
||||||
@ -4056,8 +4058,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
родительскую папку.
|
родительскую папку.
|
||||||
* Функция позволяет также читать виртуальные папки "/", "/rd",
|
* Функция позволяет также читать виртуальные папки "/", "/rd",
|
||||||
"/fd", "/hd[n]", при этом атрибуты подпапок полагаются равными
|
"/fd", "/hd[n]", при этом атрибуты подпапок полагаются равными
|
||||||
0x10, а времена и даты обнулены. Альтернативный способ получения
|
0x10, а времена и даты обнулены.
|
||||||
информации об оборудовании - подфункция 11 функции 18.
|
|
||||||
|
|
||||||
---------------------- Константы для регистров: ----------------------
|
---------------------- Константы для регистров: ----------------------
|
||||||
eax - SF_FILE (70)
|
eax - SF_FILE (70)
|
||||||
@ -4075,11 +4076,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +8: dword: 0 (зарезервировано)
|
* +8: dword: 0 (зарезервировано)
|
||||||
* +12 = +0xC: dword: сколько байт писать
|
* +12 = +0xC: dword: сколько байт писать
|
||||||
* +16 = +0x10: dword: указатель на данные
|
* +16 = +0x10: dword: указатель на данные
|
||||||
* +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx = число записанных байт (возможно, 0)
|
* ebx = число записанных байт (возможно, 0)
|
||||||
@ -4106,11 +4103,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +8: dword: старший dword позиции (должен быть 0 для FAT)
|
* +8: dword: старший dword позиции (должен быть 0 для FAT)
|
||||||
* +12 = +0xC: dword: сколько байт писать
|
* +12 = +0xC: dword: сколько байт писать
|
||||||
* +16 = +0x10: dword: указатель на данные
|
* +16 = +0x10: dword: указатель на данные
|
||||||
* +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx = число записанных байт (возможно, 0)
|
* ebx = число записанных байт (возможно, 0)
|
||||||
@ -4139,11 +4132,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
(должен быть 0 для FAT)
|
(должен быть 0 для FAT)
|
||||||
* +12 = +0xC: dword: 0 (зарезервировано)
|
* +12 = +0xC: dword: 0 (зарезервировано)
|
||||||
* +16 = +0x10: dword: 0 (зарезервировано)
|
* +16 = +0x10: dword: 0 (зарезервировано)
|
||||||
* +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx разрушается
|
* ebx разрушается
|
||||||
@ -4173,11 +4162,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +12 = +0xC: dword: 0 (зарезервировано)
|
* +12 = +0xC: dword: 0 (зарезервировано)
|
||||||
* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
|
* +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
|
||||||
(40 байт)
|
(40 байт)
|
||||||
* +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx разрушается
|
* ebx разрушается
|
||||||
@ -4203,11 +4188,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +8: dword: 0 (зарезервировано)
|
* +8: dword: 0 (зарезервировано)
|
||||||
* +12 = +0xC: dword: 0 (зарезервировано)
|
* +12 = +0xC: dword: 0 (зарезервировано)
|
||||||
* +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта)
|
* +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта)
|
||||||
* +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx разрушается
|
* ebx разрушается
|
||||||
@ -4238,11 +4219,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +8: dword: 0 или указатель на ASCIIZ-строку с параметрами
|
* +8: dword: 0 или указатель на ASCIIZ-строку с параметрами
|
||||||
* +12 = +0xC: dword: 0 (зарезервировано)
|
* +12 = +0xC: dword: 0 (зарезервировано)
|
||||||
* +16 = +0x10: dword: 0 (зарезервировано)
|
* +16 = +0x10: dword: 0 (зарезервировано)
|
||||||
* +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax > 0 - программа загружена, eax содержит PID
|
* eax > 0 - программа загружена, eax содержит PID
|
||||||
* eax < 0 - произошла ошибка, -eax содержит
|
* eax < 0 - произошла ошибка, -eax содержит
|
||||||
@ -4272,11 +4249,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +8: dword: 0 (зарезервировано)
|
* +8: dword: 0 (зарезервировано)
|
||||||
* +12 = +0xC: dword: 0 (зарезервировано)
|
* +12 = +0xC: dword: 0 (зарезервировано)
|
||||||
* +16 = +0x10: dword: 0 (зарезервировано)
|
* +16 = +0x10: dword: 0 (зарезервировано)
|
||||||
* +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx разрушается
|
* ebx разрушается
|
||||||
@ -4300,11 +4273,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +8: dword: 0 (зарезервировано)
|
* +8: dword: 0 (зарезервировано)
|
||||||
* +12 = +0xC: dword: 0 (зарезервировано)
|
* +12 = +0xC: dword: 0 (зарезервировано)
|
||||||
* +16 = +0x10: dword: 0 (зарезервировано)
|
* +16 = +0x10: dword: 0 (зарезервировано)
|
||||||
* +20 = +0x14: ASCIIZ-имя папки, правила формирования имён указаны в
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
общем описании
|
|
||||||
или
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd указатель на ASCIIZ-строку с именем папки
|
|
||||||
Возвращаемое значение:
|
Возвращаемое значение:
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx разрушается
|
* ebx разрушается
|
||||||
|
@ -1682,7 +1682,8 @@ Remarks:
|
|||||||
Parameters:
|
Parameters:
|
||||||
* eax = 30 - function number
|
* eax = 30 - function number
|
||||||
* ebx = 1 - subfunction number
|
* ebx = 1 - subfunction number
|
||||||
* ecx = pointer to ASCIIZ-string with the path to new current folder
|
* ecx = pointer to string with the path to new current folder,
|
||||||
|
rules of path forming can be found in function 70 description.
|
||||||
Returned value:
|
Returned value:
|
||||||
* function does not return value
|
* function does not return value
|
||||||
|
|
||||||
@ -1706,17 +1707,39 @@ Parameters:
|
|||||||
* eax = 30 - function number
|
* eax = 30 - function number
|
||||||
* ebx = 3 - subfunction number
|
* ebx = 3 - subfunction number
|
||||||
* ecx = pointer to a block of data:
|
* ecx = pointer to a block of data:
|
||||||
sysdir_name rb 64
|
for cp866 encoding:
|
||||||
sysdir_path rb 64
|
key rb 64
|
||||||
For example:
|
path rb 64
|
||||||
dir_name1 db 'KolibriOS',0
|
for UTF-16LE encoding:
|
||||||
rb 64-10
|
key rb 64
|
||||||
dir_path1 db 'HD0/1',0
|
dw 2
|
||||||
rb 64-6
|
path rw 31
|
||||||
|
Example:
|
||||||
|
align 64
|
||||||
|
key db 'kolibrios',0 ; key must be in lower case
|
||||||
|
align 64
|
||||||
|
path db 'HD0/1',0
|
||||||
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* function does not return value
|
* function does not return value
|
||||||
Remarks:
|
Remarks:
|
||||||
* The function can be called only 1 time for 1 session of the OS.
|
* The function can be called only 1 time for 1 session of the OS.
|
||||||
|
* The key is not affected by encoding.
|
||||||
|
|
||||||
|
------ Subfunction 4 - get current folder in UTF-16LE encoding. ------
|
||||||
|
Parameters:
|
||||||
|
* eax = 30 - function number
|
||||||
|
* ebx = 4 - subfunction number
|
||||||
|
* ecx = pointer to buffer
|
||||||
|
* edx = size of buffer
|
||||||
|
Returned value:
|
||||||
|
* eax = number of chars in the buffer (including terminating 0)
|
||||||
|
Remarks:
|
||||||
|
* If the buffer is too small to hold all data, only first (edx-2)
|
||||||
|
bytes are copied and than terminating 0 is inserted.
|
||||||
|
* By default, current folder for the thread is "/rd/1".
|
||||||
|
* At process/thread creation the current folder will be inherited
|
||||||
|
from the parent.
|
||||||
|
|
||||||
---------------------- Constants for registers: ----------------------
|
---------------------- Constants for registers: ----------------------
|
||||||
eax - SF_CURRENT_FOLDER (30)
|
eax - SF_CURRENT_FOLDER (30)
|
||||||
@ -3825,36 +3848,31 @@ General format of the information structure:
|
|||||||
* +8: dword: high dword of offset (must be 0) or flags field
|
* +8: dword: high dword of offset (must be 0) or flags field
|
||||||
* +12 = +0xC: dword: size
|
* +12 = +0xC: dword: size
|
||||||
* +16 = +0x10: dword: pointer to data
|
* +16 = +0x10: dword: pointer to data
|
||||||
* +20 = +0x14: n db: ASCIIZ-string with the filename
|
* +20 = +0x14: ?: path - zero terminated string
|
||||||
or
|
or
|
||||||
* +20 = +0x14: db 0
|
* +20 = +0x14: byte: 0
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with the filename
|
* +21 = +0x15: dword: pointer to string
|
||||||
Specifications - in documentation on the appropriate subfunction.
|
You may set encoding to UTF-16LE by starting the string with a byte with value 2,
|
||||||
Filename is case-insensitive. Russian letters must be written in
|
otherwise will be used cp866. Case sensitivity depends on filesystem.
|
||||||
the encoding cp866 (DOS).
|
|
||||||
Format of filename:
|
Format of filename:
|
||||||
/base/number/dir1/dir2/.../dirn/file,
|
/base/number/dir1/dir2/.../dirn/file,
|
||||||
where /base/number identifies device, on which file is located:
|
where base/number identifies device, on which file is located:
|
||||||
one of
|
* RD/1 = ramdisk
|
||||||
* /RD/1 = /RAMDISK/1 to access ramdisk
|
* FD/1 = first floppy drive,
|
||||||
* /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
|
FD/2 = second floppy drive
|
||||||
/FD/2 = /FLOPPYDISK/2 to access second one
|
* HD0/x, HD1/x, HD2/x, HD3/x = hard drives accordingly on
|
||||||
* /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
|
|
||||||
IDE0 (Primary Master), IDE1 (Primary Slave),
|
IDE0 (Primary Master), IDE1 (Primary Slave),
|
||||||
IDE2 (Secondary Master), IDE3 (Secondary Slave);
|
IDE2 (Secondary Master), IDE3 (Secondary Slave);
|
||||||
x - partition number on the selected hard drive, varies from 1
|
x - partition number on the selected hard drive, starts from 1
|
||||||
to 255 (on each hard drive the indexing starts from 1)
|
* CD0/1, CD1/1, CD2/1, CD3/1 = same for cd
|
||||||
* /CD0/1, /CD1/1, /CD2/1, /CD3/1 to access accordingly to
|
* SYS = system folder (encoding inaffected key),
|
||||||
CD on IDE0 (Primary Master), IDE1 (Primary Slave),
|
second key may be set by sysfunction 30.3.
|
||||||
IDE2 (Secondary Master), IDE3 (Secondary Slave)
|
|
||||||
* /SYS means system folder; with the usual boot (from floppy)
|
|
||||||
is equivalent to /RD/1
|
|
||||||
Examples:
|
Examples:
|
||||||
* '/rd/1/kernel.asm',0
|
* '/sys/example.asm',0
|
||||||
* '/HD0/1/kernel.asm',0
|
* '/rd/1/example.asm',0
|
||||||
* '/hd0/2/menuet/pics/tanzania.bmp',0
|
* '/HD0/1/folder/file.txt',0
|
||||||
* '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
|
* '/hd2/2/pics/tanzania.bmp',0
|
||||||
* '/sys/MySuperApp.ini',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
|
Also function supports relative names. If the path begins not
|
||||||
with '/', it is considered relative to a current folder. To get or
|
with '/', it is considered relative to a current folder. To get or
|
||||||
set a current folder, use the function 30.
|
set a current folder, use the function 30.
|
||||||
@ -3896,11 +3914,7 @@ Format of the information structure:
|
|||||||
* +8: dword: 0 (reserved for high dword of offset)
|
* +8: dword: 0 (reserved for high dword of offset)
|
||||||
* +12 = +0xC: dword: number of bytes to read
|
* +12 = +0xC: dword: number of bytes to read
|
||||||
* +16 = +0x10: dword: pointer to buffer for data
|
* +16 = +0x10: dword: pointer to buffer for data
|
||||||
* +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with file name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx = number of read bytes or -1=0xffffffff if file was not found
|
* ebx = number of read bytes or -1=0xffffffff if file was not found
|
||||||
@ -3923,27 +3937,21 @@ Parameters:
|
|||||||
Format of the information structure:
|
Format of the information structure:
|
||||||
* +0: dword: 1 = subfunction number
|
* +0: dword: 1 = subfunction number
|
||||||
* +4: dword: index of starting block (beginning from 0)
|
* +4: dword: index of starting block (beginning from 0)
|
||||||
* +8: dword: flags field:
|
* +8: dword: encoding:
|
||||||
* bit 0 (mask 1): in what format to return names,
|
* 0 = cp866 -> byte per char
|
||||||
0=ANSI, 1=UNICODE
|
* 1 = UTF-16LE -> word per char
|
||||||
* other bits are reserved and must be set to 0 for the future
|
|
||||||
compatibility
|
|
||||||
* +12 = +0xC: dword: number of blocks to read
|
* +12 = +0xC: dword: number of blocks to read
|
||||||
* +16 = +0x10: dword: pointer to buffer for data, buffer size
|
* +16 = +0x10: dword: pointer to buffer for data, buffer size
|
||||||
must be not less than 32 + [+12]*560 bytes
|
must be not less than 32+n(40+256*enc+8) bytes
|
||||||
* +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with file name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx = number of files, information on which was written to
|
* ebx = number of files, information on which was written to
|
||||||
the buffer, or -1=0xffffffff, if folder was not found
|
the buffer, or -1=0xffffffff, if folder was not found
|
||||||
Structure of the buffer:
|
Structure of the buffer:
|
||||||
* +0: 32*byte: header
|
* header (32 bytes)
|
||||||
* +32 = +0x20: n1*byte: block with information on file 1
|
* block with information on file 1
|
||||||
* +32+n1: n2*byte: block with information on file 2
|
* block with information on file 2
|
||||||
* ...
|
* ...
|
||||||
Structure of header:
|
Structure of header:
|
||||||
* +0: dword: version of structure (current is 1)
|
* +0: dword: version of structure (current is 1)
|
||||||
@ -3966,11 +3974,9 @@ Structure of block of data for folder entry (BDFE):
|
|||||||
and after archiving this bit is cleared - it can be useful
|
and after archiving this bit is cleared - it can be useful
|
||||||
for automatically creating of backup-archives as at writing
|
for automatically creating of backup-archives as at writing
|
||||||
this bit is usually set
|
this bit is usually set
|
||||||
* +4: byte: type of name data:
|
* +4: dword: encoding:
|
||||||
(coincides with bit 0 of flags in the information structure)
|
* 0 = cp866 -> byte per char
|
||||||
* 0 = ASCII = 1-byte representation of each character
|
* 1 = UTF-16LE -> word per char
|
||||||
* 1 = UNICODE = 2-byte representation of each character
|
|
||||||
* +5: 3*byte: reserved (zero)
|
|
||||||
* +8: 4*byte: time of file creation
|
* +8: 4*byte: time of file creation
|
||||||
* +12 = +0xC: 4*byte: date of file creation
|
* +12 = +0xC: 4*byte: date of file creation
|
||||||
* +16 = +0x10: 4*byte: time of last access (read or write)
|
* +16 = +0x10: 4*byte: time of last access (read or write)
|
||||||
@ -3978,11 +3984,7 @@ Structure of block of data for folder entry (BDFE):
|
|||||||
* +24 = +0x18: 4*byte: time of last modification
|
* +24 = +0x18: 4*byte: time of last modification
|
||||||
* +28 = +0x1C: 4*byte: date of last modification
|
* +28 = +0x1C: 4*byte: date of last modification
|
||||||
* +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
|
* +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
|
||||||
* +40 = +0x28: name
|
* +40 = +0x28: (256*enc+8)*byte: name
|
||||||
* for ASCII format: maximum length is 263 characters
|
|
||||||
(263 bytes), byte after the name has value 0
|
|
||||||
* for UNICODE format: maximum length is 259 characters
|
|
||||||
(518 bytes), 2 bytes after the name have value 0
|
|
||||||
Time format:
|
Time format:
|
||||||
* +0: byte: seconds
|
* +0: byte: seconds
|
||||||
* +1: byte: minutes
|
* +1: byte: minutes
|
||||||
@ -3995,11 +3997,10 @@ Date format:
|
|||||||
* +2: word: year
|
* +2: word: year
|
||||||
* for example, 25.11.1979 is written as (in hex) 19 0B BB 07
|
* for example, 25.11.1979 is written as (in hex) 19 0B BB 07
|
||||||
Remarks:
|
Remarks:
|
||||||
* If BDFE contains ASCII name, the length of BDFE is 304 bytes,
|
* If BDFE contains cp866 name, the length of BDFE is 304 bytes,
|
||||||
if UNICODE name - 560 bytes. Value of length is aligned
|
if UTF-16LE name - 560 bytes. Value of length is aligned
|
||||||
on 16-byte bound (to accelerate processing in CPU cache).
|
on 16-byte bound to accelerate processing in CPU cache.
|
||||||
* First character after a name is zero (ASCIIZ-string). The further
|
* Name string is zero terminated, further data contain garbage.
|
||||||
data contain garbage.
|
|
||||||
* If files in folder were ended before requested number was read,
|
* If files in folder were ended before requested number was read,
|
||||||
the function will read as many as it can, and after that return
|
the function will read as many as it can, and after that return
|
||||||
eax=6 (EOF).
|
eax=6 (EOF).
|
||||||
@ -4027,11 +4028,7 @@ Format of the information structure:
|
|||||||
* +8: dword: 0 (reserved)
|
* +8: dword: 0 (reserved)
|
||||||
* +12 = +0xC: dword: number of bytes to write
|
* +12 = +0xC: dword: number of bytes to write
|
||||||
* +16 = +0x10: dword: pointer to data
|
* +16 = +0x10: dword: pointer to data
|
||||||
* +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with file name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx = number of written bytes (possibly 0)
|
* ebx = number of written bytes (possibly 0)
|
||||||
@ -4058,11 +4055,7 @@ Format of the information structure:
|
|||||||
* +8: dword: high dword of offset (must be 0 for FAT)
|
* +8: dword: high dword of offset (must be 0 for FAT)
|
||||||
* +12 = +0xC: dword: number of bytes to write
|
* +12 = +0xC: dword: number of bytes to write
|
||||||
* +16 = +0x10: dword: pointer to data
|
* +16 = +0x10: dword: pointer to data
|
||||||
* +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with file name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx = number of written bytes (possibly 0)
|
* ebx = number of written bytes (possibly 0)
|
||||||
@ -4090,11 +4083,7 @@ Format of the information structure:
|
|||||||
* +8: dword: high dword of new file size (must be 0 for FAT)
|
* +8: dword: high dword of new file size (must be 0 for FAT)
|
||||||
* +12 = +0xC: dword: 0 (reserved)
|
* +12 = +0xC: dword: 0 (reserved)
|
||||||
* +16 = +0x10: dword: 0 (reserved)
|
* +16 = +0x10: dword: 0 (reserved)
|
||||||
* +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with file name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx destroyed
|
* ebx destroyed
|
||||||
@ -4124,11 +4113,7 @@ Format of the information structure:
|
|||||||
* +8: dword: 0 or flags (for the root folder)
|
* +8: dword: 0 or flags (for the root folder)
|
||||||
* +12 = +0xC: dword: 0 (reserved)
|
* +12 = +0xC: dword: 0 (reserved)
|
||||||
* +16 = +0x10: dword: pointer to buffer for data (40 bytes)
|
* +16 = +0x10: dword: pointer to buffer for data (40 bytes)
|
||||||
* +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with file name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx destroyed
|
* ebx destroyed
|
||||||
@ -4154,11 +4139,7 @@ Format of the information structure:
|
|||||||
* +8: dword: 0 (reserved)
|
* +8: dword: 0 (reserved)
|
||||||
* +12 = +0xC: dword: 0 (reserved)
|
* +12 = +0xC: dword: 0 (reserved)
|
||||||
* +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
|
* +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
|
||||||
* +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with file name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx destroyed
|
* ebx destroyed
|
||||||
@ -4189,11 +4170,7 @@ Format of the information structure:
|
|||||||
* +8: dword: 0 or pointer to ASCIIZ-string with parameters
|
* +8: dword: 0 or pointer to ASCIIZ-string with parameters
|
||||||
* +12 = +0xC: dword: 0 (reserved)
|
* +12 = +0xC: dword: 0 (reserved)
|
||||||
* +16 = +0x10: dword: 0 (reserved)
|
* +16 = +0x10: dword: 0 (reserved)
|
||||||
* +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with file name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax > 0 - program is loaded, eax contains PID
|
* eax > 0 - program is loaded, eax contains PID
|
||||||
* eax < 0 - an error has occured, -eax contains
|
* eax < 0 - an error has occured, -eax contains
|
||||||
@ -4222,11 +4199,7 @@ Format of the information structure:
|
|||||||
* +8: dword: 0 (reserved)
|
* +8: dword: 0 (reserved)
|
||||||
* +12 = +0xC: dword: 0 (reserved)
|
* +12 = +0xC: dword: 0 (reserved)
|
||||||
* +16 = +0x10: dword: 0 (reserved)
|
* +16 = +0x10: dword: 0 (reserved)
|
||||||
* +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with file name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx destroyed
|
* ebx destroyed
|
||||||
@ -4250,11 +4223,7 @@ Format of the information structure:
|
|||||||
* +8: dword: 0 (reserved)
|
* +8: dword: 0 (reserved)
|
||||||
* +12 = +0xC: dword: 0 (reserved)
|
* +12 = +0xC: dword: 0 (reserved)
|
||||||
* +16 = +0x10: dword: 0 (reserved)
|
* +16 = +0x10: dword: 0 (reserved)
|
||||||
* +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
|
* +20 = +0x14: path, general rules of names forming
|
||||||
given in the general description
|
|
||||||
or
|
|
||||||
* +20 = +0x14: db 0
|
|
||||||
* +21 = +0x15: dd pointer to ASCIIZ-string with folder name
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx destroyed
|
* ebx destroyed
|
||||||
|
Loading…
Reference in New Issue
Block a user