diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 34c4374cc7..dbded1267f 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -28,7 +28,7 @@ * Y=1 - только определить область окна, ничего не рисовать * Y=3 - окно со скином * Y=4 - окно со скином фиксированных размеров - * Y=0,2 эти стили являются устаревшими и не должны более использоваться, + * Y=0,2 эти стили являются устаревшими и не должны более использоваться, они оставлены для совместимости со старыми приложениями * остальные возможные значения (от 5 до 15) зарезервированы, вызов функции с такими Y игнорируется @@ -1257,7 +1257,7 @@ dd 1675 * eax = 1 - успех Константы положения окна относительно других окон: - ZPOS_DESKTOP = -2 - на самом заднем плане + ZPOS_DESKTOP = -2 - на самом заднем плане ZPOS_ALWAYS_BACK = -1 - позади всех окон ZPOS_NORMAL = 0 - обычное ZPOS_ALWAYS_TOP = 1 - поверх всех окон @@ -1632,7 +1632,7 @@ Parameters: Returned value: * edx:eax = число наносекунд с момента загрузки ядра * eax = младшее двойное слово - * edx = старшее двойное слово + * edx = старшее двойное слово Remarks: * функция использует счётчик HPET, если HPET не доступен используется счётчик PIT. В этом случае точность будет уменьшена до 10 000 000 @@ -1700,7 +1700,8 @@ Remarks: Параметры: * eax = 30 - номер функции * ebx = 1 - номер подфункции - * ecx = указатель на ASCIIZ-строку с путём к новой текущей папке + * ecx = указатель на строку с путём к новой текущей папке, + правила формирования строки указаны в описании функции 70. Возвращаемое значение: * функция не возвращает значения @@ -1725,17 +1726,40 @@ Remarks: * eax = 30 - номер функции * ebx = 3 - номер подфункции * ecx = указатель на блок данных: - sysdir_name rb 64 - sysdir_path rb 64 -Пример: -dir_name1 db 'KolibriOS',0 - rb 64-10 -dir_path1 db 'HD0/1',0 - rb 64-6 + для кодировки cp866: +key rb 64 +path rb 64 + для кодировки UTF-16LE: +key rb 64 + dw 2 +path rw 31 + Пример: +align 64 +key db 'kolibrios',0 ; ключ должен быть в нижнем регистре +align 64 +path db 'HD0/1',0 + Возвращаемое значение: * функция не возвращает значения Замечания: * Функция может быть вызвана только 1 раз за 1 сессию работы ОС. + * Кодировка не влияет на символьный ключ. + +----- Подфункция 4 - получить текущую папку в кодировке UTF-16LE ----- +Параметры: + * eax = 30 - номер функции + * ebx = 4 - номер подфункции + * ecx = указатель на буфер + * edx = размер буфера +Возвращаемое значение: + * eax = количество символов в строке (включая завершающий 0) +Замечания: + * Если размера буфера недостаточно для копирования всего имени, + копируются только первые (edx-2) байт и в конце ставится + завершающий 0. + * По умолчанию, текущая папка для потока - "/rd/1". + * При создании процесса/потока текущая папка наследуется от + родителя. ---------------------- Константы для регистров: ---------------------- eax - SF_CURRENT_FOLDER (30) @@ -2494,7 +2518,7 @@ dword-значение цвета 0x00RRGGBB * eax = 54 - номер функции * ebx = 0 - номер подфункции Возвращаемое значение: - * eax = количество слотов в буфере + * eax = количество слотов в буфере * eax = -1 - отсутствует область главного списка ---------------------- Константы для регистров: ---------------------- @@ -3869,36 +3893,32 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: старший dword смещения (должен быть 0) или поле флагов * +12 = +0xC: dword: размер * +16 = +0x10: dword: указатель на данные - * +20 = +0x14: n db: ASCIIZ-строка с именем файла + * +20 = +0x14: ?: текстовая строка - путь к файлу, заканчивается нулём или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла -Уточнения - в документации на соответствующую подфункцию. -Имя файла нечувствительно к регистру букв. Русские буквы должны быть -записаны в кодировке cp866 (DOS). -Формат имени файла: -/base/number/dir1/dir2/.../dirn/file, -где /base/number идентифицирует устройство, на котором ищется файл: -одно из - * /RD/1 = /RAMDISK/1 для доступа к рамдиску - * /FD/1 = /FLOPPYDISK/1 для доступа к первому флоппи-дисководу, - /FD/2 = /FLOPPYDISK/2 для второго флоппи-дисковода - * /HD0/x, /HD1/x, /HD2/x, /HD3/x для доступа соответственно - к жёстким дискам на IDE0 (Primary Master), IDE1 (Primary Slave), + * +20 = +0x14: byte: 0 + * +21 = +0x15: dword: указатель на строку +Для ввода текста в кодировке UTF-16LE нужно расположить в начале строки +байт со значением 2, иначе будет использоваться кодировка cp866. +Чувствительность к регистру букв зависит от файловой системы. +Формат строки: + /base/number/dir1/dir2/.../dirn/file, +где base/number идентифицирует устройство, на котором ищется файл: + * RD/1 = рамдиск + * FD/1 = первый флоппи-дисковод, + FD/2 = второй флоппи-дисковод + * HD0/x, HD1/x, HD2/x, HD3/x = жёсткие диски соответственно на + IDE0 (Primary Master), IDE1 (Primary Slave), IDE2 (Secondary Master), IDE3 (Secondary Slave); - x - номер раздела на выбранном винчестере, изменяется от 1 до 255 - (на каждом из винчестеров нумерация начинается с 1) - * /CD0/1, /CD1/1, /CD2/1, /CD3/1 для доступа соответственно - к CD на IDE0 (Primary Master), IDE1 (Primary Slave), - IDE2 (Secondary Master), IDE3 (Secondary Slave) - * /SYS - определяет системную папку; при обычной загрузке системы - с дискеты эквивалентно /RD/1 + x - номер раздела на выбранном винчестере, начиная с 1 + * CD0/1, CD1/1, CD2/1, CD3/1 = аналогично для cd + * SYS - системная папка (является ключём, не зависит от кодировки), + второй ключ может быть установлен сисфункцией 30.3. Примеры: - * '/rd/1/kernel.asm',0 - * '/HD0/1/kernel.asm',0 - * '/hd0/2/menuet/pics/tanzania.bmp',0 - * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0 - * '/sys/MySuperApp.ini',0 + * '/sys/example.asm',0 + * '/rd/1/example.asm',0 + * '/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. @@ -3941,11 +3961,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 (зарезервировано под старший dword позиции) * +12 = +0xC: dword: сколько байт читать * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx = число прочитанных байт или @@ -3969,27 +3985,21 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); Формат информационной структуры: * +0: dword: 1 = номер подфункции * +4: dword: индекс начального блока (считая с 0) - * +8: dword: поле флагов: - * бит 0 (маска 1): в каком формате возвращать имена, - 0=ANSI, 1=UNICODE - * прочие биты зарезервированы и должны быть установлены в 0 - для будущей совместимости + * +8: dword: в какой кодировке возвращать имена: + 0 = cp866 -> байт на символ + 1 = UTF-16LE -> 2 байта на символ * +12 = +0xC: dword: сколько блоков читать * +16 = +0x10: dword: указатель на буфер, куда будут записаны - данные, размер буфера должен быть не меньше 32 + [+12]*560 байт - * +20 = +0x14: ASCIIZ-имя папки, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла + данные, размер буфера должен быть не меньше 32+n(40+256*enc+8) байт + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx = число файлов, информация о которых была записана в буфер, или -1=0xffffffff, если папка не найдена Структура буфера: - * +0: 32*byte: заголовок - * +32 = +0x20: n1*byte: блок с информацией о файле 1 - * +32+n1: n2*byte: блок с информацией о файле 2 + * заголовок (32 байта) + * блок с информацией о файле 1 + * блок с информацией о файле 2 * ... Структура заголовка: * +0: dword: версия структуры (текущая версия = 1) @@ -4013,11 +4023,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); это может быть полезно для автоматического создания backup-архивов, ибо при записи бит обычно устанавливается (не в Kolibri, правда) - * +4: byte: тип данных имени: - (совпадает с битом 0 флагов информационной структуры) - * 0 = ASCII = 1-байтное представление каждого символа - * 1 = UNICODE = 2-байтное представление каждого символа - * +5: 3*byte: зарезервировано (нули) + * +4: dword: кодировка имени: + * 0 = cp866 -> байт на символ + * 1 = UTF-16LE -> 2 байта на символ * +8: 4*byte: время создания файла * +12 = +0xC: 4*byte: дата создания файла * +16 = +0x10: 4*byte: время последнего доступа (чтение или запись) @@ -4025,11 +4033,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +24 = +0x18: 4*byte: время последней модификации * +28 = +0x1C: 4*byte: дата последней модификации * +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб) - * +40 = +0x28: имя - * для формата ASCII: максимальная длина имени 263 символа - (263 байта), байт после имени имеет значение 0 - * для формата UNICODE: максимальная длина имени 259 символов - (518 байт), два байта после имени имеют значение 0 + * +40 = +0x28: (256*enc+8)*byte: имя Формат времени: * +0: byte: секунды * +1: byte: минуты @@ -4042,12 +4046,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +2: word: год * например, 25.11.1979 записывается как (в hex) 19 0B BB 07 Замечания: - * Если в БДВК присутствует имя в ASCII, то длина БДВК составляет - 304 байта, если в UNICODE - 560 байт. Значение длины выравнено - на целое кратное 16 байт - (для ускорения обработки в кэш-памяти CPU). - * Первый символ после имени нулевой (ASCIIZ-строка). Дальнейшие - данные содержат мусор. + * Если в БДВК присутствует имя в cp866, то длина БДВК составляет + 304 байта, если в UTF-16LE - 560 байт. Значение длины выравнено + на целое кратное 16 байт для ускорения обработки в кэш-памяти CPU. + * Строка имени заканчивается нулём, дальнейшие данные содержат мусор. * Если файлы в папке кончились раньше, чем было прочитано запрошенное количество, то функция прочитает, сколько сможет, после чего вернёт eax=6 (EOF). @@ -4056,8 +4058,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); родительскую папку. * Функция позволяет также читать виртуальные папки "/", "/rd", "/fd", "/hd[n]", при этом атрибуты подпапок полагаются равными - 0x10, а времена и даты обнулены. Альтернативный способ получения - информации об оборудовании - подфункция 11 функции 18. + 0x10, а времена и даты обнулены. ---------------------- Константы для регистров: ---------------------- eax - SF_FILE (70) @@ -4075,11 +4076,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 (зарезервировано) * +12 = +0xC: dword: сколько байт писать * +16 = +0x10: dword: указатель на данные - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx = число записанных байт (возможно, 0) @@ -4106,11 +4103,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: старший dword позиции (должен быть 0 для FAT) * +12 = +0xC: dword: сколько байт писать * +16 = +0x10: dword: указатель на данные - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx = число записанных байт (возможно, 0) @@ -4139,11 +4132,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); (должен быть 0 для FAT) * +12 = +0xC: dword: 0 (зарезервировано) * +16 = +0x10: dword: 0 (зарезервировано) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается @@ -4173,11 +4162,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +12 = +0xC: dword: 0 (зарезервировано) * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные (40 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается @@ -4203,11 +4188,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 (зарезервировано) * +12 = +0xC: dword: 0 (зарезервировано) * +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается @@ -4238,11 +4219,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 или указатель на ASCIIZ-строку с параметрами * +12 = +0xC: dword: 0 (зарезервировано) * +16 = +0x10: dword: 0 (зарезервировано) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax > 0 - программа загружена, eax содержит PID * eax < 0 - произошла ошибка, -eax содержит @@ -4272,11 +4249,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 (зарезервировано) * +12 = +0xC: dword: 0 (зарезервировано) * +16 = +0x10: dword: 0 (зарезервировано) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается @@ -4300,11 +4273,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 (зарезервировано) * +12 = +0xC: dword: 0 (зарезервировано) * +16 = +0x10: dword: 0 (зарезервировано) - * +20 = +0x14: ASCIIZ-имя папки, правила формирования имён указаны в - общем описании - или - * +20 = +0x14: db 0 - * +21 = +0x15: dd указатель на ASCIIZ-строку с именем папки + * +20 = +0x14: путь, правила формирования имён указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается @@ -4428,7 +4397,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * eax = 74 - номер функции * bl = 1 - номер подфункции * bh = номер устройства - * ecx = указатель на буфера - 64 байт + * ecx = указатель на буфера - 64 байт Возвращаемое значение: * eax = -1 для ошибки * В случае успеха в буфер записывается имя сетевого устройства diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index a96375962e..4d543d884d 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -28,7 +28,7 @@ Parameters: * Y=1 - only define window area, draw nothing * Y=3 - skinned 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. * other possible values (from 5 to 15) are reserved, function call with such Y is ignored @@ -1682,7 +1682,8 @@ Remarks: Parameters: * eax = 30 - function 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: * function does not return value @@ -1706,17 +1707,39 @@ Parameters: * eax = 30 - function number * ebx = 3 - subfunction number * ecx = pointer to a block of data: - sysdir_name rb 64 - sysdir_path rb 64 -For example: -dir_name1 db 'KolibriOS',0 - rb 64-10 -dir_path1 db 'HD0/1',0 - rb 64-6 + for cp866 encoding: +key rb 64 +path rb 64 + for UTF-16LE encoding: +key rb 64 + dw 2 +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: * function does not return value Remarks: * 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: ---------------------- 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 * +12 = +0xC: dword: size * +16 = +0x10: dword: pointer to data - * +20 = +0x14: n db: ASCIIZ-string with the filename + * +20 = +0x14: ?: path - zero terminated string or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with the filename -Specifications - in documentation on the appropriate subfunction. -Filename is case-insensitive. Russian letters must be written in -the encoding cp866 (DOS). + * +20 = +0x14: byte: 0 + * +21 = +0x15: dword: pointer to string +You may set encoding to UTF-16LE by starting the string with a byte with value 2, +otherwise will be used cp866. Case sensitivity depends on filesystem. Format of filename: -/base/number/dir1/dir2/.../dirn/file, -where /base/number identifies device, on which file is located: -one of - * /RD/1 = /RAMDISK/1 to access ramdisk - * /FD/1 = /FLOPPYDISK/1 to access first floppy drive, - /FD/2 = /FLOPPYDISK/2 to access second one - * /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices + /base/number/dir1/dir2/.../dirn/file, +where base/number identifies device, on which file is located: + * RD/1 = ramdisk + * FD/1 = first floppy drive, + FD/2 = second floppy drive + * HD0/x, HD1/x, HD2/x, HD3/x = hard drives accordingly on IDE0 (Primary Master), IDE1 (Primary Slave), IDE2 (Secondary Master), IDE3 (Secondary Slave); - x - partition number on the selected hard drive, varies from 1 - to 255 (on each hard drive the indexing starts from 1) - * /CD0/1, /CD1/1, /CD2/1, /CD3/1 to access accordingly to - CD on IDE0 (Primary Master), IDE1 (Primary Slave), - IDE2 (Secondary Master), IDE3 (Secondary Slave) - * /SYS means system folder; with the usual boot (from floppy) - is equivalent to /RD/1 + x - partition number on the selected hard drive, starts from 1 + * CD0/1, CD1/1, CD2/1, CD3/1 = same for cd + * SYS = system folder (encoding inaffected key), + second key may be set by sysfunction 30.3. Examples: - * '/rd/1/kernel.asm',0 - * '/HD0/1/kernel.asm',0 - * '/hd0/2/menuet/pics/tanzania.bmp',0 - * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0 - * '/sys/MySuperApp.ini',0 + * '/sys/example.asm',0 + * '/rd/1/example.asm',0 + * '/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. @@ -3896,11 +3914,7 @@ Format of the information structure: * +8: dword: 0 (reserved for high dword of offset) * +12 = +0xC: dword: number of bytes to read * +16 = +0x10: dword: pointer to buffer for data - * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with file name + * +20 = +0x14: path, general rules of names forming Returned value: * eax = 0 - success, otherwise file system error code * ebx = number of read bytes or -1=0xffffffff if file was not found @@ -3923,27 +3937,21 @@ Parameters: Format of the information structure: * +0: dword: 1 = subfunction number * +4: dword: index of starting block (beginning from 0) - * +8: dword: flags field: - * bit 0 (mask 1): in what format to return names, - 0=ANSI, 1=UNICODE - * other bits are reserved and must be set to 0 for the future - compatibility + * +8: dword: encoding: + * 0 = cp866 -> byte per char + * 1 = UTF-16LE -> word per char * +12 = +0xC: dword: number of blocks to read * +16 = +0x10: dword: pointer to buffer for data, buffer size - must be not less than 32 + [+12]*560 bytes - * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with file name + must be not less than 32+n(40+256*enc+8) bytes + * +20 = +0x14: path, general rules of names forming Returned value: * eax = 0 - success, otherwise file system error code * ebx = number of files, information on which was written to the buffer, or -1=0xffffffff, if folder was not found Structure of the buffer: - * +0: 32*byte: header - * +32 = +0x20: n1*byte: block with information on file 1 - * +32+n1: n2*byte: block with information on file 2 + * header (32 bytes) + * block with information on file 1 + * block with information on file 2 * ... Structure of header: * +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 for automatically creating of backup-archives as at writing this bit is usually set - * +4: byte: type of name data: - (coincides with bit 0 of flags in the information structure) - * 0 = ASCII = 1-byte representation of each character - * 1 = UNICODE = 2-byte representation of each character - * +5: 3*byte: reserved (zero) + * +4: dword: encoding: + * 0 = cp866 -> byte per char + * 1 = UTF-16LE -> word per char * +8: 4*byte: time of file creation * +12 = +0xC: 4*byte: date of file creation * +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 * +28 = +0x1C: 4*byte: date of last modification * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb) - * +40 = +0x28: 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 + * +40 = +0x28: (256*enc+8)*byte: name Time format: * +0: byte: seconds * +1: byte: minutes @@ -3995,11 +3997,10 @@ Date format: * +2: word: year * for example, 25.11.1979 is written as (in hex) 19 0B BB 07 Remarks: - * If BDFE contains ASCII name, the length of BDFE is 304 bytes, - if UNICODE name - 560 bytes. Value of length is aligned - on 16-byte bound (to accelerate processing in CPU cache). - * First character after a name is zero (ASCIIZ-string). The further - data contain garbage. + * If BDFE contains cp866 name, the length of BDFE is 304 bytes, + if UTF-16LE name - 560 bytes. Value of length is aligned + on 16-byte bound to accelerate processing in CPU cache. + * Name string is zero terminated, further data contain garbage. * If files in folder were ended before requested number was read, the function will read as many as it can, and after that return eax=6 (EOF). @@ -4027,11 +4028,7 @@ Format of the information structure: * +8: dword: 0 (reserved) * +12 = +0xC: dword: number of bytes to write * +16 = +0x10: dword: pointer to data - * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with file name + * +20 = +0x14: path, general rules of names forming Returned value: * eax = 0 - success, otherwise file system error code * 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) * +12 = +0xC: dword: number of bytes to write * +16 = +0x10: dword: pointer to data - * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with file name + * +20 = +0x14: path, general rules of names forming Returned value: * eax = 0 - success, otherwise file system error code * 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) * +12 = +0xC: dword: 0 (reserved) * +16 = +0x10: dword: 0 (reserved) - * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with file name + * +20 = +0x14: path, general rules of names forming Returned value: * eax = 0 - success, otherwise file system error code * ebx destroyed @@ -4124,11 +4113,7 @@ Format of the information structure: * +8: dword: 0 or flags (for the root folder) * +12 = +0xC: dword: 0 (reserved) * +16 = +0x10: dword: pointer to buffer for data (40 bytes) - * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with file name + * +20 = +0x14: path, general rules of names forming Returned value: * eax = 0 - success, otherwise file system error code * ebx destroyed @@ -4154,11 +4139,7 @@ Format of the information structure: * +8: dword: 0 (reserved) * +12 = +0xC: dword: 0 (reserved) * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes) - * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with file name + * +20 = +0x14: path, general rules of names forming Returned value: * eax = 0 - success, otherwise file system error code * ebx destroyed @@ -4189,11 +4170,7 @@ Format of the information structure: * +8: dword: 0 or pointer to ASCIIZ-string with parameters * +12 = +0xC: dword: 0 (reserved) * +16 = +0x10: dword: 0 (reserved) - * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with file name + * +20 = +0x14: path, general rules of names forming Returned value: * eax > 0 - program is loaded, eax contains PID * eax < 0 - an error has occured, -eax contains @@ -4222,11 +4199,7 @@ Format of the information structure: * +8: dword: 0 (reserved) * +12 = +0xC: dword: 0 (reserved) * +16 = +0x10: dword: 0 (reserved) - * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with file name + * +20 = +0x14: path, general rules of names forming Returned value: * eax = 0 - success, otherwise file system error code * ebx destroyed @@ -4250,11 +4223,7 @@ Format of the information structure: * +8: dword: 0 (reserved) * +12 = +0xC: dword: 0 (reserved) * +16 = +0x10: dword: 0 (reserved) - * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are - given in the general description - or - * +20 = +0x14: db 0 - * +21 = +0x15: dd pointer to ASCIIZ-string with folder name + * +20 = +0x14: path, general rules of names forming Returned value: * eax = 0 - success, otherwise file system error code * ebx destroyed