UTF-16 file path input

git-svn-id: svn://kolibrios.org@6473 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
pathoswithin 2016-08-15 17:02:18 +00:00
parent 061798afec
commit 668afc0d0b
2 changed files with 163 additions and 225 deletions

View File

@ -28,7 +28,7 @@
* Y=1 - только определить область окна, ничего не рисовать * Y=1 - только определить область окна, ничего не рисовать
* Y=3 - окно со скином * Y=3 - окно со скином
* Y=4 - окно со скином фиксированных размеров * Y=4 - окно со скином фиксированных размеров
* Y=0,2 эти стили являются устаревшими и не должны более использоваться, * Y=0,2 эти стили являются устаревшими и не должны более использоваться,
они оставлены для совместимости со старыми приложениями они оставлены для совместимости со старыми приложениями
* остальные возможные значения (от 5 до 15) зарезервированы, * остальные возможные значения (от 5 до 15) зарезервированы,
вызов функции с такими Y игнорируется вызов функции с такими Y игнорируется
@ -1257,7 +1257,7 @@ dd 1675
* eax = 1 - успех * eax = 1 - успех
Константы положения окна относительно других окон: Константы положения окна относительно других окон:
ZPOS_DESKTOP = -2 - на самом заднем плане ZPOS_DESKTOP = -2 - на самом заднем плане
ZPOS_ALWAYS_BACK = -1 - позади всех окон ZPOS_ALWAYS_BACK = -1 - позади всех окон
ZPOS_NORMAL = 0 - обычное ZPOS_NORMAL = 0 - обычное
ZPOS_ALWAYS_TOP = 1 - поверх всех окон ZPOS_ALWAYS_TOP = 1 - поверх всех окон
@ -1632,7 +1632,7 @@ Parameters:
Returned value: Returned value:
* edx:eax = число наносекунд с момента загрузки ядра * edx:eax = число наносекунд с момента загрузки ядра
* eax = младшее двойное слово * eax = младшее двойное слово
* edx = старшее двойное слово * edx = старшее двойное слово
Remarks: Remarks:
* функция использует счётчик HPET, если HPET не доступен используется * функция использует счётчик HPET, если HPET не доступен используется
счётчик PIT. В этом случае точность будет уменьшена до 10 000 000 счётчик PIT. В этом случае точность будет уменьшена до 10 000 000
@ -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)
@ -2494,7 +2518,7 @@ dword-значение цвета 0x00RRGGBB
* eax = 54 - номер функции * eax = 54 - номер функции
* ebx = 0 - номер подфункции * ebx = 0 - номер подфункции
Возвращаемое значение: Возвращаемое значение:
* eax = количество слотов в буфере * eax = количество слотов в буфере
* eax = -1 - отсутствует область главного списка * eax = -1 - отсутствует область главного списка
---------------------- Константы для регистров: ---------------------- ---------------------- Константы для регистров: ----------------------
@ -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 разрушается
@ -4428,7 +4397,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* eax = 74 - номер функции * eax = 74 - номер функции
* bl = 1 - номер подфункции * bl = 1 - номер подфункции
* bh = номер устройства * bh = номер устройства
* ecx = указатель на буфера - 64 байт * ecx = указатель на буфера - 64 байт
Возвращаемое значение: Возвращаемое значение:
* eax = -1 для ошибки * eax = -1 для ошибки
* В случае успеха в буфер записывается имя сетевого устройства * В случае успеха в буфер записывается имя сетевого устройства

View File

@ -28,7 +28,7 @@ Parameters:
* Y=1 - only define window area, draw nothing * Y=1 - only define window area, draw nothing
* Y=3 - skinned window * Y=3 - skinned window
* Y=4 - skinned fixed-size window * Y=4 - skinned fixed-size window
* Y=0,2 window types are outdated and should not be used anymore, * Y=0,2 window types are outdated and should not be used anymore,
they are retained for compatibility with old programs. they are retained for compatibility with old programs.
* other possible values (from 5 to 15) are reserved, * other possible values (from 5 to 15) are reserved,
function call with such Y is ignored function call with such Y is ignored
@ -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