Subversion Repositories Kolibri OS

Rev

Rev 6790 | Rev 6800 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6790 Rev 6798
Line 1693... Line 1693...
1693
---------------------- Константы для регистров: ----------------------
1693
---------------------- Константы для регистров: ----------------------
1694
  eax - SF_GET_SYS_DATE (29)
1694
  eax - SF_GET_SYS_DATE (29)
1695
======================================================================
1695
======================================================================
1696
================ Функция 30 - работа с текущей папкой. ===============
1696
================ Функция 30 - работа с текущей папкой. ===============
1697
======================================================================
1697
======================================================================
1698
 
-
 
1699
-------- Подфункция 1 - установить текущую папку для потока. ---------
1698
-------- Подфункция 1 - установить текущую папку для потока. ---------
1700
Параметры:
1699
Параметры:
1701
  * eax = 30 - номер функции
1700
  * eax = 30 - номер функции
1702
  * ebx = 1 - номер подфункции
1701
  * ebx = 1 - номер подфункции
1703
  * ecx = указатель на строку с путём к новой текущей папке,
1702
  * ecx = указатель на строку с путём к новой текущей папке,
1704
    правила формирования строки указаны в описании функции 70.
1703
    правила формирования строки указаны в описании функции 70.
1705
Возвращаемое значение:
1704
Возвращаемое значение:
1706
  * функция не возвращает значения
1705
  * функция не возвращает значения
1707
 
-
 
-
 
1706
----------------------------------------------------------------------
1708
--------- Подфункция 2 - получить текущую папку для потока. ----------
1707
--------- Подфункция 2 - получить текущую папку для потока. ----------
1709
Параметры:
1708
Параметры:
1710
  * eax = 30 - номер функции
1709
  * eax = 30 - номер функции
1711
  * ebx = 2 - номер подфункции
1710
  * ebx = 2 - номер подфункции
1712
  * ecx = указатель на буфер
1711
  * ecx = указатель на буфер
1713
  * edx = размер буфера
1712
  * edx = размер буфера
1714
Возвращаемое значение:
1713
Возвращаемое значение:
1715
  * eax = длина имени текущей папки (включая завершающий 0)
1714
  * eax = длина строки (включая завершающий 0)
1716
Замечания:
1715
Замечания:
1717
  * Если размера буфера недостаточно для копирования всего имени,
1716
  * Если размера буфера недостаточно для копирования всего пути,
1718
    копируются только первые (edx-1) байт и в конце ставится
1717
    копируются только часть строки и в конце ставится завершающий 0.
1719
    завершающий 0.
-
 
1720
  * По умолчанию, текущая папка для потока - "/rd/1".
1718
  * По умолчанию, текущая папка для потока - "/rd/1".
1721
  * При создании процесса/потока текущая папка наследуется от
1719
  * При создании процесса/потока текущая папка наследуется от
1722
    родителя.
1720
    родителя.
1723
 
-
 
-
 
1721
----------------------------------------------------------------------
1724
---- Подфункция 3 - установить доп. системную директорию для ядра ----
1722
---- Подфункция 3 - установить доп. системную директорию для ядра ----
1725
Параметры:
1723
Параметры:
1726
  * eax = 30 - номер функции
1724
  * eax = 30 - номер функции
1727
  * ebx = 3 - номер подфункции
1725
  * ebx = 3 - номер подфункции
1728
  * ecx = указатель на блок данных:
1726
  * ecx = указатель на блок данных:
1729
    для кодировки cp866:
-
 
1730
key     rb  64
1727
key     rb  64
1731
path    rb  64
1728
path    rb  64
1732
    для кодировки UTF-16LE:
-
 
1733
key     rb  64
-
 
1734
        dw  2
-
 
1735
path    rw  31
-
 
1736
    Пример:
1729
    Пример:
1737
align 64
1730
align 64
1738
key     db  'kolibrios',0   ; ключ должен быть в нижнем регистре
1731
key     db  'kolibrios',0   ; ключ должен быть в нижнем регистре
1739
align 64
1732
align 64
1740
path    db  'HD0/1',0
1733
path    db  'HD0/1',0
Line 1741... Line 1734...
1741
 
1734
 
1742
Возвращаемое значение:
1735
Возвращаемое значение:
1743
  * функция не возвращает значения
1736
  * функция не возвращает значения
1744
Замечания:
1737
Замечания:
1745
  * Функция может быть вызвана только 1 раз за 1 сессию работы ОС.
1738
  * Функция может быть вызвана только 1 раз за 1 сессию работы ОС.
1746
  * Кодировка не влияет на символьный ключ.
-
 
-
 
1739
  * При вводе пути символьный ключ не зависит от кодировки.
1747
 
1740
----------------------------------------------------------------------
1748
----- Подфункция 4 - получить текущую папку в кодировке UTF-16LE -----
1741
--- Подфункция 4 - установить текущую папку с указанием кодировки. ---
1749
Параметры:
1742
Параметры:
1750
  * eax = 30 - номер функции
1743
  * eax = 30 - номер функции
-
 
1744
  * ebx = 4 - номер подфункции
-
 
1745
  * ecx = указатель на строку с путём к новой текущей папке
-
 
1746
  * edx = кодировка строки, подробности указаны в описании функции 80.
-
 
1747
Возвращаемое значение:
-
 
1748
  * функция не возвращает значения
-
 
1749
----------------------------------------------------------------------
-
 
1750
---- Подфункция 5 - получить текущую папку с указанием кодировки. ----
-
 
1751
Параметры:
-
 
1752
  * eax = 30 - номер функции
1751
  * ebx = 4 - номер подфункции
1753
  * ebx = 5 - номер подфункции
1752
  * ecx = указатель на буфер
1754
  * ecx = указатель на буфер
-
 
1755
  * edx = размер буфера
1753
  * edx = размер буфера
1756
  * esi = кодировка строки
1754
Возвращаемое значение:
1757
Возвращаемое значение:
1755
  * eax = количество символов в строке (включая завершающий 0)
1758
  * eax = длина строки в байтах (включая завершающий 0)
1756
Замечания:
1759
Замечания:
1757
  * Если размера буфера недостаточно для копирования всего имени,
1760
  * Если размера буфера недостаточно для копирования всего пути,
1758
    копируются только первые (edx-2) байт и в конце ставится
-
 
1759
    завершающий 0.
1761
    копируются только часть строки и в конце ставится завершающий 0.
1760
  * По умолчанию, текущая папка для потока - "/rd/1".
1762
  * По умолчанию, текущая папка для потока - "/rd/1".
1761
  * При создании процесса/потока текущая папка наследуется от
1763
  * При создании процесса/потока текущая папка наследуется от
Line 1762... Line 1764...
1762
    родителя.
1764
    родителя.
Line 3378... Line 3380...
3378
 
3380
 
3379
---------------------- Константы для регистров: ----------------------
3381
---------------------- Константы для регистров: ----------------------
3380
  eax - SF_SYS_MISC (68)
3382
  eax - SF_SYS_MISC (68)
3381
  ebx - SSF_CONTROL_DRIVER (17)
3383
  ebx - SSF_CONTROL_DRIVER (17)
3382
======================================================================
3384
======================================================================
3383
============= Функция 68, подфункция 19 - загрузить DLL. =============
3385
== Функция 68, подфункция 18 - загрузить DLL с указанием кодировки. ==
3384
======================================================================
3386
======================================================================
3385
Параметры:
3387
Параметры:
3386
  * eax = 68 - номер функции
3388
  * eax = 68 - номер функции
3387
  * ebx = 19 - номер подфункции
3389
  * ebx = 18 - номер подфункции
3388
  * ecx = указатель на строку с путём к DLL,
3390
  * ecx = указатель на строку с путём к DLL
3389
    правила формирования строки указаны в описании функции 70.
3391
  * edx = кодировка строки, подробности указаны в описании функции 80.
3390
Возвращаемое значение:
3392
Возвращаемое значение:
3391
  * eax = 0 - неудача
3393
  * eax = 0 - неудача
3392
  * иначе eax = указатель на таблицу экспорта DLL
3394
  * иначе eax = указатель на таблицу экспорта DLL
3393
Замечания:
3395
Замечания:
3394
  * Таблица экспорта представляет собой массив структур по 2 dword'а,
3396
  * Таблица экспорта представляет собой массив структур по 2 dword'а,
3395
    заканчивающийся нулём. Первый dword в структуре является
3397
    заканчивающийся нулём. Первый dword в структуре является
Line -... Line 3398...
-
 
3398
    указателем на имя функции, второй содержит адрес функции.
-
 
3399
 
-
 
3400
======================================================================
-
 
3401
============= Функция 68, подфункция 19 - загрузить DLL. =============
-
 
3402
======================================================================
-
 
3403
Параметры:
-
 
3404
  * eax = 68 - номер функции
-
 
3405
  * ebx = 19 - номер подфункции
-
 
3406
  * ecx = указатель на строку с путём к DLL,
-
 
3407
    правила формирования строки указаны в описании функции 70.
-
 
3408
Возвращаемое значение:
-
 
3409
  * eax = 0 - неудача
3396
    указателем на имя функции, второй содержит адрес функции.
3410
  * иначе eax = указатель на таблицу экспорта DLL
3397
 
3411
 
3398
---------------------- Константы для регистров: ----------------------
3412
---------------------- Константы для регистров: ----------------------
3399
  eax - SF_SYS_MISC (68)
3413
  eax - SF_SYS_MISC (68)
3400
  ebx - SSF_LOAD_DLL (19)
3414
  ebx - SSF_LOAD_DLL (19)
Line 3555... Line 3569...
3555
 
3569
 
3556
---------------------- Константы для регистров: ----------------------
3570
---------------------- Константы для регистров: ----------------------
3557
  eax - SF_SYS_MISC (68)
3571
  eax - SF_SYS_MISC (68)
3558
  ebx - SSF_SET_EXCEPTION_STATE (25)
3572
  ebx - SSF_SET_EXCEPTION_STATE (25)
3559
======================================================================
3573
======================================================================
3560
= Функция 68, подфункция 26 - освободить страницы памяти ============
3574
======= Функция 68, подфункция 26 - освободить страницы памяти =======
3561
======================================================================
3575
======================================================================
3562
Параметры:
3576
Параметры:
3563
  * eax = 68 - номер функции
3577
  * eax = 68 - номер функции
3564
  * ebx = 26 - номер подфункции
3578
  * ebx = 26 - номер подфункции
Line 3571... Line 3585...
3571
 
3585
 
3572
---------------------- Константы для регистров: ----------------------
3586
---------------------- Константы для регистров: ----------------------
3573
  eax - SF_SYS_MISC (68)
3587
  eax - SF_SYS_MISC (68)
3574
  ebx - SSF_MEM_FREE_EXT (26)
3588
  ebx - SSF_MEM_FREE_EXT (26)
3575
======================================================================
3589
======================================================================
3576
= Функция 68, подфункция 27 - загрузить файл ===================
3590
============= Функция 68, подфункция 27 - загрузить файл =============
3577
======================================================================
3591
======================================================================
3578
Параметры:
3592
Параметры:
3579
  * eax = 68 - номер функции
3593
  * eax = 68 - номер функции
3580
  * ebx = 27 - номер подфункции
3594
  * ebx = 27 - номер подфункции
Line 3588... Line 3602...
3588
 
3602
 
3589
---------------------- Константы для регистров: ----------------------
3603
---------------------- Константы для регистров: ----------------------
3590
  eax - SF_SYS_MISC (68)
3604
  eax - SF_SYS_MISC (68)
3591
  ebx - SSF_LOAD_FILE (27)
3605
  ebx - SSF_LOAD_FILE (27)
-
 
3606
======================================================================
-
 
3607
== Функция 68, подфункция 28 - загрузить файл с указанием кодировки ==
-
 
3608
======================================================================
-
 
3609
Параметры:
-
 
3610
  * eax = 68 - номер функции
-
 
3611
  * ebx = 28 - номер подфункции
-
 
3612
  * ecx = указатель на строку с путём к файлу
-
 
3613
  * edx = кодировка строки, подробности указаны в описании функции 80.
-
 
3614
Возвращаемое значение:
-
 
3615
  * eax = указатель на загруженный файл или 0
-
 
3616
  * edx = размер загруженного файла или 0
-
 
3617
Примечания:
-
 
3618
  * функция загружает и, при необходимости, распаковывает файл (kunpack)
-
 
3619
 
3592
======================================================================
3620
======================================================================
3593
======================== Функция 69 - отладка. =======================
3621
======================== Функция 69 - отладка. =======================
3594
======================================================================
3622
======================================================================
3595
Процесс может загрузить другой процесс как отлаживаемый установкой
3623
Процесс может загрузить другой процесс как отлаживаемый установкой
3596
соответствующего бита при вызове подфункции 7 функции 70.
3624
соответствующего бита при вызове подфункции 7 функции 70.
Line 3889... Line 3917...
3889
  * eax = 0 - успешно; иначе код ошибки файловой системы
3917
  * eax = 0 - успешно; иначе код ошибки файловой системы
3890
  * в зависимости от подфункции может возвращаться значение и
3918
  * в зависимости от подфункции может возвращаться значение и
3891
    в других регистрах
3919
    в других регистрах
3892
Общий формат информационной структуры:
3920
Общий формат информационной структуры:
3893
  * +0: dword: номер подфункции
3921
  * +0: dword: номер подфункции
3894
  * +4: dword: смещение в файле
3922
  * +4: dword: смещение в файле или папке
3895
  * +8: dword: старший dword смещения (должен быть 0) или поле флагов
3923
  * +8: dword: старшая часть смещения или поле флагов
3896
  * +12 = +0xC: dword: размер
3924
  * +12 = +0xC: dword: размер данных
3897
  * +16 = +0x10: dword: указатель на данные
3925
  * +16 = +0x10: dword: указатель на данные
3898
  * +20 = +0x14: ?: текстовая строка - путь к файлу, заканчивается нулём
3926
  * +20 = +0x14: ?: текстовая строка - путь к файлу, заканчивается нулём
3899
  или
3927
  или
3900
  * +20 = +0x14: byte: 0
3928
  * +20 = +0x14: byte: 0
3901
  * +21 = +0x15: dword: указатель на строку
3929
  * +21 = +0x15: dword: указатель на строку
3902
Чувствительность к регистру букв зависит от файловой системы.
3930
Чувствительность к регистру букв зависит от файловой системы.
3903
Если путь начинается не с '/', то он считается относительным.
3931
Если путь начинается не с '/', то он считается относительным.
3904
Получить или установить текущую папку можно с помощью сисфункции 30.
3932
Получить или установить текущую папку можно с помощью сисфункции 30.
3905
'../' в начале пути означает подъём на одну папку относительно текущей.
3933
'../' в пути означает подъём на одну папку относительно текущей.
3906
Можно указать кодировку строки, поместив в её начале байт со значениями:
3934
Можно указать кодировку строки, поместив в её начале байт со значениями:
3907
  * 1 = cp866
3935
  * 1 = cp866
3908
  * 2 = UTF-16LE
3936
  * 2 = UTF-16LE
3909
  * 3 = UTF-8
3937
  * 3 = UTF-8
3910
иначе будет использоваться кодировка cp866. В абсолютном пути можно
3938
иначе будет использоваться кодировка cp866. В абсолютном пути можно
3911
поместить этот байт после '/' или добавить дополнительный '/' перед ним.
3939
поместить этот байт после '/' или добавить дополнительный '/' перед ним.
-
 
3940
Также, можно использовать сисфункцию 80.
3912
Формат абсолютного пути:
3941
Формат абсолютного пути:
3913
  /base/number/dir1/dir2/.../dirn/file,
3942
  /base/number/dir1/dir2/.../dirn/file,
3914
где base/number идентифицирует устройство, на котором ищется файл:
3943
где base/number идентифицирует устройство, на котором ищется файл:
3915
  * RD/1 = рамдиск
3944
  * RD/1 = рамдиск
3916
  * FD/1 = первый флоппи-дисковод,
3945
  * FD/1 = первый флоппи-дисковод,
Line 3990... Line 4019...
3990
  * ebx = указатель на информационную структуру
4019
  * ebx = указатель на информационную структуру
3991
Формат информационной структуры:
4020
Формат информационной структуры:
3992
  * +0: dword: 1 = номер подфункции
4021
  * +0: dword: 1 = номер подфункции
3993
  * +4: dword: индекс начального блока (считая с 0)
4022
  * +4: dword: индекс начального блока (считая с 0)
3994
  * +8: dword: в какой кодировке возвращать имена:
4023
  * +8: dword: в какой кодировке возвращать имена:
3995
    0 = cp866 -> байт на символ
4024
    0 = по умолчанию
-
 
4025
    1 = cp866
3996
    1 = UTF-16LE -> 2 байта на символ
4026
    2 = UTF-16LE
-
 
4027
    3 = UTF-8
3997
  * +12 = +0xC: dword: сколько блоков читать
4028
  * +12 = +0xC: dword: сколько блоков читать
3998
  * +16 = +0x10: dword: указатель на буфер, куда будут записаны
4029
  * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные.
3999
    данные, размер буфера должен быть не меньше 32+n(40+256*enc+8) байт
-
 
4000
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4030
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4001
Возвращаемое значение:
4031
Возвращаемое значение:
4002
  * eax = 0 - успешно, иначе код ошибки файловой системы
4032
  * eax = 0 - успешно, иначе код ошибки файловой системы
4003
  * ebx = число файлов, информация о которых была записана в буфер,
4033
  * ebx = число файлов, информация о которых была записана в буфер,
4004
    или -1=0xffffffff, если папка не найдена
4034
    или -1=0xffffffff, если папка не найдена
Line 4027... Line 4057...
4027
      архивации имеют опцию, по которой архивируются только файлы
4057
      архивации имеют опцию, по которой архивируются только файлы
4028
      с установленным этим битом, после чего этот бит сбрасывается -
4058
      с установленным этим битом, после чего этот бит сбрасывается -
4029
      это может быть полезно для автоматического создания
4059
      это может быть полезно для автоматического создания
4030
      backup-архивов, ибо при записи бит обычно устанавливается
4060
      backup-архивов, ибо при записи бит обычно устанавливается
4031
      (не в Kolibri, правда)
4061
      (не в Kolibri, правда)
4032
  * +4: dword: кодировка имени:
4062
  * +4: dword: кодировка имени, соответствует полю +8 информационной структуры
4033
    * 0 = cp866 -> байт на символ
-
 
4034
    * 1 = UTF-16LE -> 2 байта на символ
-
 
4035
  * +8: 4*byte: время создания файла
4063
  * +8: 4*byte: время создания файла
4036
  * +12 = +0xC: 4*byte: дата создания файла
4064
  * +12 = +0xC: 4*byte: дата создания файла
4037
  * +16 = +0x10: 4*byte: время последнего доступа (чтение или запись)
4065
  * +16 = +0x10: 4*byte: время последнего доступа (чтение или запись)
4038
  * +20 = +0x14: 4*byte: дата последнего доступа
4066
  * +20 = +0x14: 4*byte: дата последнего доступа
4039
  * +24 = +0x18: 4*byte: время последней модификации
4067
  * +24 = +0x18: 4*byte: время последней модификации
4040
  * +28 = +0x1C: 4*byte: дата последней модификации
4068
  * +28 = +0x1C: 4*byte: дата последней модификации
4041
  * +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб)
4069
  * +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб)
4042
  * +40 = +0x28: (256*enc+8)*byte: имя
4070
  * +40 = +0x28: имя, размер в cp866 составляет 264 байта, иначе - 520 байт.
4043
Формат времени:
4071
Формат времени:
4044
  * +0: byte: секунды
4072
  * +0: byte: секунды
4045
  * +1: byte: минуты
4073
  * +1: byte: минуты
4046
  * +2: byte: часы
4074
  * +2: byte: часы
4047
  * +3: byte: зарезервировано (0)
4075
  * +3: byte: зарезервировано (0)
Line 4050... Line 4078...
4050
  * +0: byte: день
4078
  * +0: byte: день
4051
  * +1: byte: месяц
4079
  * +1: byte: месяц
4052
  * +2: word: год
4080
  * +2: word: год
4053
  * например, 25.11.1979 записывается как (в hex) 19 0B BB 07
4081
  * например, 25.11.1979 записывается как (в hex) 19 0B BB 07
4054
Замечания:
4082
Замечания:
4055
  * Если в БДВК присутствует имя в cp866, то длина БДВК составляет
4083
  * Если БДВК содержит имя в cp866, то длина БДВК составляет
4056
    304 байта, если в UTF-16LE - 560 байт. Значение длины выравнено
4084
    304 байта, иначе - 560 байт.
4057
    на целое кратное 16 байт для ускорения обработки в кэш-памяти CPU.
-
 
4058
  * Строка имени заканчивается нулём, дальнейшие данные содержат мусор.
4085
  * Строка имени заканчивается нулём, дальнейшие данные содержат мусор.
4059
  * Если файлы в папке кончились раньше, чем было прочитано
4086
  * Если файлы в папке кончились раньше, чем было прочитано
4060
    запрошенное количество, то функция прочитает, сколько сможет,
4087
    запрошенное количество, то функция прочитает, сколько сможет,
4061
    после чего вернёт eax=6 (EOF).
4088
    после чего вернёт eax=6 (EOF).
4062
  * Любая папка на диске, кроме корневой, содержит два специальных
4089
  * Любая папка на диске, кроме корневой, содержит два специальных
Line 4833... Line 4860...
4833
    вызовом подфункции 2 функции 18.
4860
    вызовом подфункции 2 функции 18.
Line 4834... Line 4861...
4834
 
4861
 
4835
---------------------- Константы для регистров: ----------------------
4862
---------------------- Константы для регистров: ----------------------
4836
  eax - SF_TERMINATE_PROCESS (-1)
4863
  eax - SF_TERMINATE_PROCESS (-1)
-
 
4864
======================================================================
-
 
4865
=== Функция 80 - работа с файловой системой с указанием кодировки. ===
-
 
4866
======================================================================
-
 
4867
Параметры:
-
 
4868
  * eax = 80
-
 
4869
  * ebx = указатель на информационную структуру
-
 
4870
Возвращаемое значение:
-
 
4871
  * eax = 0 - успешно; иначе код ошибки файловой системы
-
 
4872
  * в зависимости от подфункции может возвращаться значение и
-
 
4873
    в других регистрах
-
 
4874
Общий формат информационной структуры:
-
 
4875
  * +0: dword: номер подфункции
-
 
4876
  * +4: dword: смещение в файле или папке
-
 
4877
  * +8: dword: старшая часть смещения или поле флагов
-
 
4878
  * +12 = +0xC: dword: размер данных
-
 
4879
  * +16 = +0x10: dword: указатель на данные
-
 
4880
  * +20 = +0x14: dword: кодировка строки:
-
 
4881
    1 = cp866
-
 
4882
    2 = UTF-16LE
-
 
4883
    3 = UTF-8
-
 
4884
    0 = по умолчанию (поддерживает байт кодировки в начале строки)
-
 
4885
  * +24 = +0x18: dword: указатель на строку пути (заканчивается нулём)
-
 
4886
 
-
 
4887
В остальном полностью соответствует функции 70.
-
 
4888
 
4837
======================================================================
4889
======================================================================
4838
=========================== Список событий ===========================
4890
=========================== Список событий ===========================
4839
======================================================================
4891
======================================================================
4840
Очередное событие можно получить вызовом одной из функций 10
4892
Очередное событие можно получить вызовом одной из функций 10
4841
(ожидать события), 11 (проверить без ожидания), 23
4893
(ожидать события), 11 (проверить без ожидания), 23