28,7 → 28,7 |
* Y=1 - только определить область окна, ничего не рисовать |
* Y=3 - окно со скином |
* Y=4 - окно со скином фиксированных размеров |
* Y=0,2 эти стили являются устаревшими и не должны более использоваться, |
* Y=0,2 эти стили являются устаревшими и не должны более использоваться, |
они оставлены для совместимости со старыми приложениями |
* остальные возможные значения (от 5 до 15) зарезервированы, |
вызов функции с такими Y игнорируется |
1257,7 → 1257,7 |
* eax = 1 - успех |
|
Константы положения окна относительно других окон: |
ZPOS_DESKTOP = -2 - на самом заднем плане |
ZPOS_DESKTOP = -2 - на самом заднем плане |
ZPOS_ALWAYS_BACK = -1 - позади всех окон |
ZPOS_NORMAL = 0 - обычное |
ZPOS_ALWAYS_TOP = 1 - поверх всех окон |
1632,7 → 1632,7 |
Returned value: |
* edx:eax = число наносекунд с момента загрузки ядра |
* eax = младшее двойное слово |
* edx = старшее двойное слово |
* edx = старшее двойное слово |
Remarks: |
* функция использует счётчик HPET, если HPET не доступен используется |
счётчик PIT. В этом случае точность будет уменьшена до 10 000 000 |
1700,7 → 1700,8 |
Параметры: |
* eax = 30 - номер функции |
* ebx = 1 - номер подфункции |
* ecx = указатель на ASCIIZ-строку с путём к новой текущей папке |
* ecx = указатель на строку с путём к новой текущей папке, |
правила формирования строки указаны в описании функции 70. |
Возвращаемое значение: |
* функция не возвращает значения |
|
1725,18 → 1726,41 |
* 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) |
ebx - SSF_SET_CF (1), SSF_GET_CF (2), SSF_ADD_SYS_FOLDER (3) |
2494,7 → 2518,7 |
* eax = 54 - номер функции |
* ebx = 0 - номер подфункции |
Возвращаемое значение: |
* eax = количество слотов в буфере |
* eax = количество слотов в буфере |
* eax = -1 - отсутствует область главного списка |
|
---------------------- Константы для регистров: ---------------------- |
3869,36 → 3893,32 |
* +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 |
* +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 |
Формат информационной структуры: |
* +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 |
это может быть полезно для автоматического создания |
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 |
* +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 |
* +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 |
родительскую папку. |
* Функция позволяет также читать виртуальные папки "/", "/rd", |
"/fd", "/hd[n]", при этом атрибуты подпапок полагаются равными |
0x10, а времена и даты обнулены. Альтернативный способ получения |
информации об оборудовании - подфункция 11 функции 18. |
0x10, а времена и даты обнулены. |
|
---------------------- Константы для регистров: ---------------------- |
eax - SF_FILE (70) |
4075,11 → 4076,7 |
* +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 |
* +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 |
(должен быть 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 |
* +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 |
* +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 |
* +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 |
* +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 |
* +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 |
* eax = 74 - номер функции |
* bl = 1 - номер подфункции |
* bh = номер устройства |
* ecx = указатель на буфера - 64 байт |
* ecx = указатель на буфера - 64 байт |
Возвращаемое значение: |
* eax = -1 для ошибки |
* В случае успеха в буфер записывается имя сетевого устройства |