Subversion Repositories Kolibri OS

Rev

Rev 9976 | Rev 10002 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9976 Rev 9995
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
7
 
8
СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.7.0
8
СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.7.0
9
 
9
 
10
Номер функции помещается в регистр eax.
10
Номер функции помещается в регистр eax.
11
Вызов системной функции осуществляется командой "int 0x40".
11
Вызов системной функции осуществляется командой "int 0x40".
12
Все регистры, кроме явно указанных в возвращаемом значении,
12
Все регистры, кроме явно указанных в возвращаемом значении,
13
    включая регистр флагов eflags, сохраняются.
13
    включая регистр флагов eflags, сохраняются.
14
 
14
 
15
 
15
 
16
======================================================================
16
======================================================================
17
============== Функция 0 - определить и нарисовать окно. =============
17
============== Функция 0 - определить и нарисовать окно. =============
18
======================================================================
18
======================================================================
19
Определяет окно приложения. Рисует рамку окна, заголовок и рабочую
19
Определяет окно приложения. Рисует рамку окна, заголовок и рабочую
20
область. Для окон со скином определяет стандартные кнопки закрытия и
20
область. Для окон со скином определяет стандартные кнопки закрытия и
21
минимизации.
21
минимизации.
22
Параметры:
22
Параметры:
23
  * eax = 0 - номер функции
23
  * eax = 0 - номер функции
24
  * ebx = [координата по оси x]*65536 + [размер по оси x]
24
  * ebx = [координата по оси x]*65536 + [размер по оси x]
25
  * ecx = [координата по оси y]*65536 + [размер по оси y]
25
  * ecx = [координата по оси y]*65536 + [размер по оси y]
26
  * edx = 0xXYRRGGBB, где:
26
  * edx = 0xXYRRGGBB, где:
27
    * Y = стиль окна:
27
    * Y = стиль окна:
28
      * Y=1 - только определить область окна, ничего не рисовать
28
      * Y=1 - только определить область окна, ничего не рисовать
29
      * Y=3 - окно со скином
29
      * Y=3 - окно со скином
30
      * Y=4 - окно со скином фиксированных размеров
30
      * Y=4 - окно со скином фиксированных размеров
31
      * Y=0,2 эти стили не должны более использоваться и оставлены 
31
      * Y=0,2 эти стили не должны более использоваться и оставлены 
32
              только для совместимости со старыми приложениями
32
              только для совместимости со старыми приложениями
33
      * остальные возможные значения (от 5 до 15) зарезервированы,
33
      * остальные возможные значения (от 5 до 15) зарезервированы,
34
        вызов функции с такими Y игнорируется
34
        вызов функции с такими Y игнорируется
35
    * RR, GG, BB = соответственно красная, зеленая, синяя
35
    * RR, GG, BB = соответственно красная, зеленая, синяя
36
      составляющие цвета рабочей области окна
36
      составляющие цвета рабочей области окна
37
      (игнорируется для стиля Y=1)
37
      (игнорируется для стиля Y=1)
38
    * X = DCBA (биты)
38
    * X = DCBA (биты)
39
      * A = 1 - у окна есть заголовок
39
      * A = 1 - у окна есть заголовок
40
      * B = 1 - координаты всех графических примитивов задаются
40
      * B = 1 - координаты всех графических примитивов задаются
41
                относительно клиентской области окна
41
                относительно клиентской области окна
42
      * C = 1 - не закрашивать рабочую область при отрисовке окна
42
      * C = 1 - не закрашивать рабочую область при отрисовке окна
43
      * D = 0 - нормальная заливка рабочей области, 1 - градиентная
43
      * D = 0 - нормальная заливка рабочей области, 1 - градиентная
44
    Следующие параметры предназначены для окон типа I и II и
44
    Следующие параметры предназначены для окон типа I и II и
45
    игнорируются для стилей Y=1,3:
45
    игнорируются для стилей Y=1,3:
46
  * esi = 0xXYRRGGBB - цвет заголовка
46
  * esi = 0xXYRRGGBB - цвет заголовка
47
    * RR, GG, BB определяют сам цвет
47
    * RR, GG, BB определяют сам цвет
48
    * Y = 0 - обычное окно
48
    * Y = 0 - обычное окно
49
      Y = 1 - неперемещаемое окно (работает для всех стилей окон)
49
      Y = 1 - неперемещаемое окно (работает для всех стилей окон)
50
    * X определяет градиент заголовка: 
50
    * X определяет градиент заголовка: 
51
      X = 0 - нет градиента,
51
      X = 0 - нет градиента,
52
      X = 8 - обычный градиент,
52
      X = 8 - обычный градиент,
53
      для окон типа II X=4 - негативный градиент
53
      для окон типа II X=4 - негативный градиент
54
    * прочие значения X и Y зарезервированы
54
    * прочие значения X и Y зарезервированы
55
  * edi = адрес строки заголовка для стилей Y=3,4 (см. функцию 71.1)
55
  * edi = адрес строки заголовка для стилей Y=3,4 (см. функцию 71.1)
56
Возвращаемое значение:
56
Возвращаемое значение:
57
  * функция не возвращает значения
57
  * функция не возвращает значения
58
Замечания:
58
Замечания:
59
  * Положение и размеры окна устанавливаются при первом вызове
59
  * Положение и размеры окна устанавливаются при первом вызове
60
    этой функции и игнорируются при последующих; для изменения
60
    этой функции и игнорируются при последующих; для изменения
61
    положения и/или размеров уже созданного окна используйте
61
    положения и/или размеров уже созданного окна используйте
62
    67-ю функцию.
62
    67-ю функцию.
63
  * Для окон стилей Y=3,4 с заголовком (A=1) строка заголовка
63
  * Для окон стилей Y=3,4 с заголовком (A=1) строка заголовка
64
    устанавливается при первом вызове этой функции и игнорируется при
64
    устанавливается при первом вызове этой функции и игнорируется при
65
    последующих (точнее говоря, игнорируется после вызова
65
    последующих (точнее говоря, игнорируется после вызова
66
    подфункции 2 функции 12 - конца перерисовки);
66
    подфункции 2 функции 12 - конца перерисовки);
67
    для изменения строки заголовка уже созданного окна используйте
67
    для изменения строки заголовка уже созданного окна используйте
68
    подфункцию 1 функции 71.
68
    подфункцию 1 функции 71.
69
  * Если использовать окна соответствующих стилей, то положение
69
  * Если использовать окна соответствующих стилей, то положение
70
    и/или размеры окна могут меняться пользователем.
70
    и/или размеры окна могут меняться пользователем.
71
    Текущие положение и размеры могут быть получены вызовом функции 9.
71
    Текущие положение и размеры могут быть получены вызовом функции 9.
72
  * Окно должно умещаться на экране. Если переданные координаты
72
  * Окно должно умещаться на экране. Если переданные координаты
73
    и размеры не удовлетворяют этому условию, то соответствующая
73
    и размеры не удовлетворяют этому условию, то соответствующая
74
    координата (или, возможно, обе) считается нулем, а если и это
74
    координата (или, возможно, обе) считается нулем, а если и это
75
    не помогает, то соответствующий размер (или, возможно, оба)
75
    не помогает, то соответствующий размер (или, возможно, оба)
76
    устанавливается в размер экрана.
76
    устанавливается в размер экрана.
77
 
77
 
78
    Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые
78
    Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые
79
    в ebx,ecx. Координаты приводятся относительно левого верхнего
79
    в ebx,ecx. Координаты приводятся относительно левого верхнего
80
    угла окна, который, таким образом, задается как (0,0), координаты
80
    угла окна, который, таким образом, задается как (0,0), координаты
81
    правого нижнего угла суть (xsize,ysize).
81
    правого нижнего угла суть (xsize,ysize).
82
  * Размеры окна понимаются в смысле координат правого нижнего угла.
82
  * Размеры окна понимаются в смысле координат правого нижнего угла.
83
    Это же относится и ко всем остальным функциям.
83
    Это же относится и ко всем остальным функциям.
84
    Это означает, что реальные размеры на 1 пиксель больше.
84
    Это означает, что реальные размеры на 1 пиксель больше.
85
  * Вид окна стиля Y=1:
85
  * Вид окна стиля Y=1:
86
    * полностью определяется приложением
86
    * полностью определяется приложением
87
  * Вид окна со скином Y=3,4:
87
  * Вид окна со скином Y=3,4:
88
    * рисуется внешняя рамка шириной 1 пиксель
88
    * рисуется внешняя рамка шириной 1 пиксель
89
      цвета 'outer' из скина
89
      цвета 'outer' из скина
90
    * рисуется промежуточная рамка шириной 3 пикселя
90
    * рисуется промежуточная рамка шириной 3 пикселя
91
      цвета 'frame' из скина
91
      цвета 'frame' из скина
92
    * рисуется внутренняя рамка шириной 1 пиксель
92
    * рисуется внутренняя рамка шириной 1 пиксель
93
      цвета 'inner' из скина
93
      цвета 'inner' из скина
94
    * рисуется заголовок (по картинкам из скина) в прямоугольнике
94
    * рисуется заголовок (по картинкам из скина) в прямоугольнике
95
      (0,0) - (xsize,_skinh-1)
95
      (0,0) - (xsize,_skinh-1)
96
    * если ysize>=26, то закрашивается рабочая область окна -
96
    * если ysize>=26, то закрашивается рабочая область окна -
97
      прямоугольник с левым верхним углом (5,_skinh) и правым нижним
97
      прямоугольник с левым верхним углом (5,_skinh) и правым нижним
98
      (xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
98
      (xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
99
    * определяются две стандартные кнопки: закрытия и минимизации
99
    * определяются две стандартные кнопки: закрытия и минимизации
100
      (смотри функцию 8)
100
      (смотри функцию 8)
101
    * если A=1 и в edi (ненулевой) указатель на строку заголовка,
101
    * если A=1 и в edi (ненулевой) указатель на строку заголовка,
102
      то она выводится в заголовке в месте, определяемом скином
102
      то она выводится в заголовке в месте, определяемом скином
103
    * Значение переменной _skinh доступно как результат вызова
103
    * Значение переменной _skinh доступно как результат вызова
104
      подфункции 4 функции 48
104
      подфункции 4 функции 48
105
 
105
 
106
---------------------- Константы для регистров: ----------------------
106
---------------------- Константы для регистров: ----------------------
107
  eax - SF_CREATE_WINDOW (0)
107
  eax - SF_CREATE_WINDOW (0)
108
======================================================================
108
======================================================================
109
================= Функция 1 - поставить точку в окне. ================
109
================= Функция 1 - поставить точку в окне. ================
110
======================================================================
110
======================================================================
111
Параметры:
111
Параметры:
112
  * eax = 1 - номер функции
112
  * eax = 1 - номер функции
113
  * ebx = x-координата (относительно окна)
113
  * ebx = x-координата (относительно окна)
114
  * ecx = y-координата (относительно окна)
114
  * ecx = y-координата (относительно окна)
115
  * edx = 0x00RRGGBB - цвет точки
115
  * edx = 0x00RRGGBB - цвет точки
116
    edx = 0x01xxxxxx - инвертировать цвет точки
116
    edx = 0x01xxxxxx - инвертировать цвет точки
117
          (младшие 24 бита игнорируются)
117
          (младшие 24 бита игнорируются)
118
Возвращаемое значение:
118
Возвращаемое значение:
119
  * функция не возвращает значения
119
  * функция не возвращает значения
120
 
120
 
121
---------------------- Константы для регистров: ----------------------
121
---------------------- Константы для регистров: ----------------------
122
  eax - SF_PUT_PIXEL (1)
122
  eax - SF_PUT_PIXEL (1)
123
======================================================================
123
======================================================================
124
============== Функция 2 - получить код нажатой клавиши. =============
124
============== Функция 2 - получить код нажатой клавиши. =============
125
======================================================================
125
======================================================================
126
Забирает код нажатой клавиши из буфера.
126
Забирает код нажатой клавиши из буфера.
127
Параметры:
127
Параметры:
128
  * eax = 2 - номер функции
128
  * eax = 2 - номер функции
129
Возвращаемое значение:
129
Возвращаемое значение:
130
  * если буфер пуст, возвращается eax=1
130
  * если буфер пуст, возвращается eax=1
131
  * если буфер непуст, то возвращается al=0, ah=код нажатой клавиши,
131
  * если буфер непуст, то возвращается al=0, ah=код нажатой клавиши,
132
    биты 16-23 содержат сканкод нажатой клавиши в режиме ASCII,
132
    биты 16-23 содержат сканкод нажатой клавиши в режиме ASCII,
133
               в режиме сканкодов биты обнулены.
133
               в режиме сканкодов биты обнулены.
134
    биты 23-31 обнулены
134
    биты 23-31 обнулены
135
  * если есть "горячая клавиша", то возвращается
135
  * если есть "горячая клавиша", то возвращается
136
    al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш),
136
    al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш),
137
    старшее слово регистра eax содержит состояние управляющих клавиш
137
    старшее слово регистра eax содержит состояние управляющих клавиш
138
    в момент нажатия горячей клавиши
138
    в момент нажатия горячей клавиши
139
Замечания:
139
Замечания:
140
  * Существует общесистемный буфер нажатых клавиш размером 120 байт,
140
  * Существует общесистемный буфер нажатых клавиш размером 120 байт,
141
    организованный как очередь.
141
    организованный как очередь.
142
  * Существует ещё один общесистемный буфер на 120 "горячих клавиш".
142
  * Существует ещё один общесистемный буфер на 120 "горячих клавиш".
143
  * При вызове этой функции приложением с неактивным окном
143
  * При вызове этой функции приложением с неактивным окном
144
    считается, что буфер нажатых клавиш пуст.
144
    считается, что буфер нажатых клавиш пуст.
145
  * По умолчанию эта функция возвращает ASCII-коды; переключиться на
145
  * По умолчанию эта функция возвращает ASCII-коды; переключиться на
146
    режим сканкодов (и назад) можно с использованием функции 66.
146
    режим сканкодов (и назад) можно с использованием функции 66.
147
    Однако, горячие клавиши всегда возвращаются как сканкоды.
147
    Однако, горячие клавиши всегда возвращаются как сканкоды.
148
  * Узнать, какие комбинации клавиш соответствуют каким кодам, можно,
148
  * Узнать, какие комбинации клавиш соответствуют каким кодам, можно,
149
    запустив приложения keyascii и scancode.
149
    запустив приложения keyascii и scancode.
150
  * Сканкоды возвращаются непосредственно клавиатурой и фиксированы;
150
  * Сканкоды возвращаются непосредственно клавиатурой и фиксированы;
151
    ASCII-коды получаются с использованием таблиц преобразования,
151
    ASCII-коды получаются с использованием таблиц преобразования,
152
    которые можно установить подфункцией 2 функции 21 и прочитать
152
    которые можно установить подфункцией 2 функции 21 и прочитать
153
    подфункцией 2 функции 26.
153
    подфункцией 2 функции 26.
154
  * Как следствие, ASCII-коды учитывают текущую раскладку клавиатуры
154
  * Как следствие, ASCII-коды учитывают текущую раскладку клавиатуры
155
    (rus/en) в отличие от сканкодов.
155
    (rus/en) в отличие от сканкодов.
156
  * Поступает информация только о тех горячих клавишах, которые были
156
  * Поступает информация только о тех горячих клавишах, которые были
157
    определены этим потоком подфункцией 4 функции 66.
157
    определены этим потоком подфункцией 4 функции 66.
158
 
158
 
159
---------------------- Константы для регистров: ----------------------
159
---------------------- Константы для регистров: ----------------------
160
  eax - SF_GET_KEY (2)
160
  eax - SF_GET_KEY (2)
161
======================================================================
161
======================================================================
162
================ Функция 3 - получить системное время. ===============
162
================ Функция 3 - получить системное время. ===============
163
======================================================================
163
======================================================================
164
Параметры:
164
Параметры:
165
  * eax = 3 - номер функции
165
  * eax = 3 - номер функции
166
Возвращаемое значение:
166
Возвращаемое значение:
167
  * eax = 0x00SSMMHH, где HH:MM:SS = часы:минуты:секунды
167
  * eax = 0x00SSMMHH, где HH:MM:SS = часы:минуты:секунды
168
  * каждый элемент возвращается как BCD-число, например,
168
  * каждый элемент возвращается как BCD-число, например,
169
    для времени 23:59:59 результат будет 0x00595923
169
    для времени 23:59:59 результат будет 0x00595923
170
Замечания:
170
Замечания:
171
  * Смотри также подфункцию 9 функции 26 - получение времени
171
  * Смотри также подфункцию 9 функции 26 - получение времени
172
    с момента запуска системы; она во многих случаях удобнее,
172
    с момента запуска системы; она во многих случаях удобнее,
173
    поскольку возвращает просто DWORD-значение счетчика времени.
173
    поскольку возвращает просто DWORD-значение счетчика времени.
174
  * Системное время можно установить функцией 22.
174
  * Системное время можно установить функцией 22.
175
 
175
 
176
---------------------- Константы для регистров: ----------------------
176
---------------------- Константы для регистров: ----------------------
177
  eax - SF_GET_SYS_TIME (3)
177
  eax - SF_GET_SYS_TIME (3)
178
======================================================================
178
======================================================================
179
================ Функция 4 - нарисовать строку текста. ===============
179
================ Функция 4 - нарисовать строку текста. ===============
180
======================================================================
180
======================================================================
181
Параметры:
181
Параметры:
182
  * eax = 4 - номер функции
182
  * eax = 4 - номер функции
183
  * ebx = X*65536+Y, координаты в окне или буфере
183
  * ebx = X*65536+Y, координаты в окне или буфере
184
  * ecx = 0xXXRRGGBB, где
184
  * ecx = 0xXXRRGGBB, где
185
    * RR, GG, BB задают цвет текста
185
    * RR, GG, BB задают цвет текста
186
    * XX=ABFFCSSS (биты):
186
    * XX=ABFFCSSS (биты):
187
      * A=1 - рисуемая строка заканчивается нулём
187
      * A=1 - рисуемая строка заканчивается нулём
188
      * B=1 - закрашивать фон (цвет = edi)
188
      * B=1 - закрашивать фон (цвет = edi)
189
      * FF задает шрифт и кодировку:
189
      * FF задает шрифт и кодировку:
190
        0 = 6x9  cp866
190
        0 = 6x9  cp866
191
        1 = 8x16 cp866
191
        1 = 8x16 cp866
192
        2 = 8x16 UTF-16LE
192
        2 = 8x16 UTF-16LE
193
        3 = 8x16 UTF-8
193
        3 = 8x16 UTF-8
194
      * C=0 - рисовать в окно,
194
      * C=0 - рисовать в окно,
195
        С=1 - рисовать в буфер (edi)
195
        С=1 - рисовать в буфер (edi)
196
      * SSS = (множитель размера)-1, то-есть 0 = x1, 7 = x8
196
      * SSS = (множитель размера)-1, то-есть 0 = x1, 7 = x8
197
  * edx = указатель на начало строки
197
  * edx = указатель на начало строки
198
  * esi = для A=0 длина строки, для A=1 игнорируется
198
  * esi = для A=0 длина строки, для A=1 игнорируется
199
  * edi = если B=1 - цвет для закраски фона,
199
  * edi = если B=1 - цвет для закраски фона,
200
          если C=1 - указатель на буфер
200
          если C=1 - указатель на буфер
201
 
201
 
202
Возвращаемое значение:
202
Возвращаемое значение:
203
  * функция не возвращает значения
203
  * функция не возвращает значения
204
Замечания:
204
Замечания:
205
  * Нельзя одновременно использовать B=1 и C=1,
205
  * Нельзя одновременно использовать B=1 и C=1,
206
    поскольку в обоих случаях используется регистр edi.
206
    поскольку в обоих случаях используется регистр edi.
207
  * Если SSS=0, шрифт может сглаживаться,
207
  * Если SSS=0, шрифт может сглаживаться,
208
    в зависимости от системной настройки.
208
    в зависимости от системной настройки.
209
  * Структура буфера:
209
  * Структура буфера:
210
Xsize       dd
210
Xsize       dd
211
Ysize       dd
211
Ysize       dd
212
picture     rb  Xsize*Ysize*4  ; 32 бита
212
picture     rb  Xsize*Ysize*4  ; 32 бита
213
 
213
 
214
---------------------- Константы для регистров: ----------------------
214
---------------------- Константы для регистров: ----------------------
215
  eax - SF_DRAW_TEXT (4)
215
  eax - SF_DRAW_TEXT (4)
216
======================================================================
216
======================================================================
217
========================= Функция 5 - пауза. =========================
217
========================= Функция 5 - пауза. =========================
218
======================================================================
218
======================================================================
219
Задерживает выполнение программы на заданное время.
219
Задерживает выполнение программы на заданное время.
220
Параметры:
220
Параметры:
221
  * eax = 5 - номер функции
221
  * eax = 5 - номер функции
222
  * ebx = время в сотых долях секунды
222
  * ebx = время в сотых долях секунды
223
Возвращаемое значение:
223
Возвращаемое значение:
224
  * функция не возвращает значения
224
  * функция не возвращает значения
225
Замечания:
225
Замечания:
226
  * Передача ebx=0 не передает управление следующему процессу и
226
  * Передача ebx=0 не передает управление следующему процессу и
227
    вообще не производит никаких действий. Если действительно
227
    вообще не производит никаких действий. Если действительно
228
    требуется передать управление следующему процессу
228
    требуется передать управление следующему процессу
229
    (закончить текущий квант времени), используйте подфункцию 1
229
    (закончить текущий квант времени), используйте подфункцию 1
230
    функции 68.
230
    функции 68.
231
 
231
 
232
---------------------- Константы для регистров: ----------------------
232
---------------------- Константы для регистров: ----------------------
233
  eax - SF_SLEEP (5)
233
  eax - SF_SLEEP (5)
234
======================================================================
234
======================================================================
235
=============== Функция 7 - вывести изображение в окно. ==============
235
=============== Функция 7 - вывести изображение в окно. ==============
236
======================================================================
236
======================================================================
237
Параметры:
237
Параметры:
238
  * eax = 7 - номер функции
238
  * eax = 7 - номер функции
239
  * ebx = указатель на изображение в формате BBGGRRBBGGRR...
239
  * ebx = указатель на изображение в формате BBGGRRBBGGRR...
240
  * ecx = [размер по оси x]*65536 + [размер по оси y]
240
  * ecx = [размер по оси x]*65536 + [размер по оси y]
241
  * edx = [координата по оси x]*65536 + [координата по оси y]
241
  * edx = [координата по оси x]*65536 + [координата по оси y]
242
Возвращаемое значение:
242
Возвращаемое значение:
243
  * функция не возвращает значения
243
  * функция не возвращает значения
244
Замечания:
244
Замечания:
245
  * Координаты изображения - это координаты верхнего левого угла
245
  * Координаты изображения - это координаты верхнего левого угла
246
    изображения относительно окна.
246
    изображения относительно окна.
247
  * Размер изображения в байтах есть 3*xsize*ysize.
247
  * Размер изображения в байтах есть 3*xsize*ysize.
248
 
248
 
249
---------------------- Константы для регистров: ----------------------
249
---------------------- Константы для регистров: ----------------------
250
  eax - SF_PUT_IMAGE (7)
250
  eax - SF_PUT_IMAGE (7)
251
======================================================================
251
======================================================================
252
=============== Функция 8 - определить/удалить кнопку. ===============
252
=============== Функция 8 - определить/удалить кнопку. ===============
253
======================================================================
253
======================================================================
254
Параметры для определения кнопки:
254
Параметры для определения кнопки:
255
  * eax = 8 - номер функции
255
  * eax = 8 - номер функции
256
  * ebx = [координата по оси x]*65536 + [размер по оси x]
256
  * ebx = [координата по оси x]*65536 + [размер по оси x]
257
  * ecx = [координата по оси y]*65536 + [размер по оси y]
257
  * ecx = [координата по оси y]*65536 + [размер по оси y]
258
  * edx = 0xXYnnnnnn, где:
258
  * edx = 0xXYnnnnnn, где:
259
    * nnnnnn = идентификатор кнопки
259
    * nnnnnn = идентификатор кнопки
260
    * старший (31-й) бит edx сброшен
260
    * старший (31-й) бит edx сброшен
261
    * если 30-й бит edx установлен - не прорисовывать кнопку
261
    * если 30-й бит edx установлен - не прорисовывать кнопку
262
    * если 29-й бит edx установлен - не рисовать рамку
262
    * если 29-й бит edx установлен - не рисовать рамку
263
      при нажатии на кнопку
263
      при нажатии на кнопку
264
  * esi = 0x00RRGGBB - цвет кнопки
264
  * esi = 0x00RRGGBB - цвет кнопки
265
Параметры для удаления кнопки:
265
Параметры для удаления кнопки:
266
  * eax = 8 - номер функции
266
  * eax = 8 - номер функции
267
  * edx = 0x80nnnnnn, где nnnnnn - идентификатор кнопки
267
  * edx = 0x80nnnnnn, где nnnnnn - идентификатор кнопки
268
Возвращаемое значение:
268
Возвращаемое значение:
269
  * функция не возвращает значения
269
  * функция не возвращает значения
270
Замечания:
270
Замечания:
271
  * Размеры кнопки должны быть больше 0 и меньше 0x8000.
271
  * Размеры кнопки должны быть больше 0 и меньше 0x8000.
272
  * Для окон со скином при определении окна (вызове 0-й функции)
272
  * Для окон со скином при определении окна (вызове 0-й функции)
273
    создаются две стандартные кнопки - закрытия окна
273
    создаются две стандартные кнопки - закрытия окна
274
    с идентификатором 1 и минимизации окна с идентификатором 0xffff.
274
    с идентификатором 1 и минимизации окна с идентификатором 0xffff.
275
  * Создание двух кнопок с одинаковыми идентификаторами
275
  * Создание двух кнопок с одинаковыми идентификаторами
276
    вполне допустимо.
276
    вполне допустимо.
277
  * Кнопка с идентификатором 0xffff при нажатии интерпретируется
277
  * Кнопка с идентификатором 0xffff при нажатии интерпретируется
278
    системой как кнопка минимизации, система обрабатывает такое
278
    системой как кнопка минимизации, система обрабатывает такое
279
    нажатие самостоятельно, не обращаясь к приложению.
279
    нажатие самостоятельно, не обращаясь к приложению.
280
    В остальном это обычная кнопка.
280
    В остальном это обычная кнопка.
281
  * Общее количество кнопок для всех приложений ограничено
281
  * Общее количество кнопок для всех приложений ограничено
282
    числом 4095.
282
    числом 4095.
283
 
283
 
284
---------------------- Константы для регистров: ----------------------
284
---------------------- Константы для регистров: ----------------------
285
  eax - SF_DEFINE_BUTTON (8)
285
  eax - SF_DEFINE_BUTTON (8)
286
======================================================================
286
======================================================================
287
============= Функция 9 - информация о потоке выполнения. ============
287
============= Функция 9 - информация о потоке выполнения. ============
288
======================================================================
288
======================================================================
289
Параметры:
289
Параметры:
290
  * eax = 9 - номер функции
290
  * eax = 9 - номер функции
291
  * ebx = указатель на буфер размера 1 Кб
291
  * ebx = указатель на буфер размера 1 Кб
292
  * ecx = номер слота потока
292
  * ecx = номер слота потока
293
    ecx = -1 - получить информацию о текущем потоке
293
    ecx = -1 - получить информацию о текущем потоке
294
Возвращаемое значение:
294
Возвращаемое значение:
295
  * eax = максимальный номер слота потока
295
  * eax = максимальный номер слота потока
296
    но, если указатель в ebx недопустимый, например,
296
    но, если указатель в ebx недопустимый, например,
297
    регион [ebx, ebx + 0x4C) пересекается с памятью ядра,
297
    регион [ebx, ebx + 0x4C) пересекается с памятью ядра,
298
    то тогда функция возвращает -1
298
    то тогда функция возвращает -1
299
  * буфер, на который указывает ebx, содержит следующую информацию:
299
  * буфер, на который указывает ebx, содержит следующую информацию:
300
    * +0: dword: использование процессора (сколько тактов в секунду
300
    * +0: dword: использование процессора (сколько тактов в секунду
301
      уходит на исполнение именно этого потока)
301
      уходит на исполнение именно этого потока)
302
    * +4: word: позиция окна потока в оконном стэке
302
    * +4: word: позиция окна потока в оконном стэке
303
    * +6: word: (не имеет отношения к запрошенному потоку)
303
    * +6: word: (не имеет отношения к запрошенному потоку)
304
      номер слота потока, окно которого находится в оконном стэке
304
      номер слота потока, окно которого находится в оконном стэке
305
      в позиции ecx
305
      в позиции ecx
306
    * +8: word: зарезервировано
306
    * +8: word: зарезервировано
307
    * +10 = +0xA: 11 байт: имя процесса
307
    * +10 = +0xA: 11 байт: имя процесса
308
      (имя запущенного файла - исполняемый файл без расширения)
308
      (имя запущенного файла - исполняемый файл без расширения)
309
    * +21 = +0x15: byte: зарезервировано, этот байт не изменяется
309
    * +21 = +0x15: byte: зарезервировано, этот байт не изменяется
310
    * +22 = +0x16: dword: адрес процесса в памяти
310
    * +22 = +0x16: dword: адрес процесса в памяти
311
    * +26 = +0x1A: dword: размер используемой памяти - 1
311
    * +26 = +0x1A: dword: размер используемой памяти - 1
312
    * +30 = +0x1E: dword: идентификатор (PID/TID)
312
    * +30 = +0x1E: dword: идентификатор (PID/TID)
313
    * +34 = +0x22: dword: координата окна потока по оси x
313
    * +34 = +0x22: dword: координата окна потока по оси x
314
    * +38 = +0x26: dword: координата окна потока по оси y
314
    * +38 = +0x26: dword: координата окна потока по оси y
315
    * +42 = +0x2A: dword: размер окна потока по оси x
315
    * +42 = +0x2A: dword: размер окна потока по оси x
316
    * +46 = +0x2E: dword: размер окна потока по оси y
316
    * +46 = +0x2E: dword: размер окна потока по оси y
317
    * +50 = +0x32: word: состояние слота потока:
317
    * +50 = +0x32: word: состояние слота потока:
318
      * 0 = поток выполняется
318
      * 0 = поток выполняется
319
      * 1 = поток приостановлен
319
      * 1 = поток приостановлен
320
      * 2 = поток приостановлен в момент ожидания события
320
      * 2 = поток приостановлен в момент ожидания события
321
      * 3 = поток завершается в результате вызова функции -1 или
321
      * 3 = поток завершается в результате вызова функции -1 или
322
        насильственно как следствие вызова подфункции 2 функции 18
322
        насильственно как следствие вызова подфункции 2 функции 18
323
        или завершения работы системы
323
        или завершения работы системы
324
      * 4 = поток завершается в результате исключения
324
      * 4 = поток завершается в результате исключения
325
      * 5 = поток ожидает события
325
      * 5 = поток ожидает события
326
      * 9 = запрошенный слот свободен, вся остальная информация о
326
      * 9 = запрошенный слот свободен, вся остальная информация о
327
        слоте не имеет смысла
327
        слоте не имеет смысла
328
    * +52 = +0x34: word: зарезервировано, это слово не изменяется
328
    * +52 = +0x34: word: зарезервировано, это слово не изменяется
329
    * +54 = +0x36: dword: координата начала клиентской области
329
    * +54 = +0x36: dword: координата начала клиентской области
330
                          по оси x
330
                          по оси x
331
    * +58 = +0x3A: dword: координата начала клиентской области
331
    * +58 = +0x3A: dword: координата начала клиентской области
332
                          по оси y
332
                          по оси y
333
    * +62 = +0x3E: dword: ширина клиентской области
333
    * +62 = +0x3E: dword: ширина клиентской области
334
    * +66 = +0x42: dword: высота клиентской области
334
    * +66 = +0x42: dword: высота клиентской области
335
    * +70 = +0x46: byte: состояние окна - битовое поле
335
    * +70 = +0x46: byte: состояние окна - битовое поле
336
      * бит 0 (маска 1): окно максимизировано
336
      * бит 0 (маска 1): окно максимизировано
337
      * бит 1 (маска 2): окно минимизировано в панель задач
337
      * бит 1 (маска 2): окно минимизировано в панель задач
338
      * бит 2 (маска 4): окно свёрнуто в заголовок
338
      * бит 2 (маска 4): окно свёрнуто в заголовок
339
    * +71 = +0x47: dword: маска событий
339
    * +71 = +0x47: dword: маска событий
340
    * +75 = +0x4B: byte: режим ввода с клавиатуры(ASCII = 0; SCAN = 1)
340
    * +75 = +0x4B: byte: режим ввода с клавиатуры(ASCII = 0; SCAN = 1)
341
Замечания:
341
Замечания:
342
  * Слоты нумеруются с 1.
342
  * Слоты нумеруются с 1.
343
  * Возвращаемое значение не есть общее число потоков, поскольку
343
  * Возвращаемое значение не есть общее число потоков, поскольку
344
    бывают свободные слоты.
344
    бывают свободные слоты.
345
  * При создании процесса автоматически создается поток выполнения.
345
  * При создании процесса автоматически создается поток выполнения.
346
  * Функция выдает информацию о потоке. Каждый процесс имеет
346
  * Функция выдает информацию о потоке. Каждый процесс имеет
347
    хотя бы один поток. Один процесс может создать несколько потоков,
347
    хотя бы один поток. Один процесс может создать несколько потоков,
348
    в этом случае каждый поток получает свой слот, причем поля
348
    в этом случае каждый поток получает свой слот, причем поля
349
    +10, +22, +26 в этих слотах совпадают.
349
    +10, +22, +26 в этих слотах совпадают.
350
    Для приложений не существует общего способа определить,
350
    Для приложений не существует общего способа определить,
351
    принадлежат ли два потока одному процессу.
351
    принадлежат ли два потока одному процессу.
352
  * Активное окно - окно, находящееся на вершине оконного стэка,
352
  * Активное окно - окно, находящееся на вершине оконного стэка,
353
    оно получает сообщения о вводе с клавиатуры. Для него позиция в
353
    оно получает сообщения о вводе с клавиатуры. Для него позиция в
354
    оконном стэке совпадает с возвращаемым значением.
354
    оконном стэке совпадает с возвращаемым значением.
355
  * Слот 1 соответствует специальному потоку операционной системы,
355
  * Слот 1 соответствует специальному потоку операционной системы,
356
    для которого:
356
    для которого:
357
    * окно находится внизу оконного стэка, поля +4 и +6 содержат
357
    * окно находится внизу оконного стэка, поля +4 и +6 содержат
358
      значение 1
358
      значение 1
359
    * имя процесса - "IDLE" (дополненное пробелами)
359
    * имя процесса - "IDLE" (дополненное пробелами)
360
    * адрес процесса в памяти равен 0, размер используемой памяти
360
    * адрес процесса в памяти равен 0, размер используемой памяти
361
      16 Mb (0x1000000)
361
      16 Mb (0x1000000)
362
    * PID=1
362
    * PID=1
363
    * координаты и размеры окна, равно как и клиентской области,
363
    * координаты и размеры окна, равно как и клиентской области,
364
      условно полагаются равными 0
364
      условно полагаются равными 0
365
    * состояние слота - всегда 0 (выполняется)
365
    * состояние слота - всегда 0 (выполняется)
366
    * время выполнения складывается из времени, уходящего на
366
    * время выполнения складывается из времени, уходящего на
367
      собственно работу, и времени простоя в ожидании прерывания
367
      собственно работу, и времени простоя в ожидании прерывания
368
      (которое можно получить вызовом подфункции 4 функции 18).
368
      (которое можно получить вызовом подфункции 4 функции 18).
369
  * Слот 2 (и некоторые другие) соответствуют специальным потокам
369
  * Слот 2 (и некоторые другие) соответствуют специальным потокам
370
    операционной системы, для которых:
370
    операционной системы, для которых:
371
    * имя процесса - "OS" (дополненное пробелами)
371
    * имя процесса - "OS" (дополненное пробелами)
372
  * Обычные приложения размещаются в памяти по адресу 0
372
  * Обычные приложения размещаются в памяти по адресу 0
373
    (константа ядра std_application_base_address).
373
    (константа ядра std_application_base_address).
374
    Наложения не происходит, поскольку у каждого процесса своя
374
    Наложения не происходит, поскольку у каждого процесса своя
375
    таблица страниц.
375
    таблица страниц.
376
  * При создании потока ему назначаются слот в системной таблице и
376
  * При создании потока ему назначаются слот в системной таблице и
377
    идентификатор (Process/Thread IDentifier = PID/TID), которые для
377
    идентификатор (Process/Thread IDentifier = PID/TID), которые для
378
    заданного потока не изменяются со временем.
378
    заданного потока не изменяются со временем.
379
    После завершения потока его слот может быть заново использован
379
    После завершения потока его слот может быть заново использован
380
    для другого потока. Идентификатор потока не может быть назначен
380
    для другого потока. Идентификатор потока не может быть назначен
381
    другому потоку даже после завершения первого.
381
    другому потоку даже после завершения первого.
382
    Назначаемые новым потокам идентификаторы монотонно растут.
382
    Назначаемые новым потокам идентификаторы монотонно растут.
383
  * Если поток еще не определил свое окно вызовом функции 0, то
383
  * Если поток еще не определил свое окно вызовом функции 0, то
384
    положение и размеры этого окна полагаются нулями.
384
    положение и размеры этого окна полагаются нулями.
385
  * Координаты клиентской области окна берутся относительно окна.
385
  * Координаты клиентской области окна берутся относительно окна.
386
  * В данный момент используется только часть буфера размером
386
  * В данный момент используется только часть буфера размером
387
    76 = 0x4C байта. Тем не менее рекомендуется использовать буфер
387
    76 = 0x4C байта. Тем не менее рекомендуется использовать буфер
388
    размером 1 Кб для будущей совместимости, в будущем могут быть
388
    размером 1 Кб для будущей совместимости, в будущем могут быть
389
    добавлены некоторые поля.
389
    добавлены некоторые поля.
390
 
390
 
391
---------------------- Константы для регистров: ----------------------
391
---------------------- Константы для регистров: ----------------------
392
  eax - SF_THREAD_INFO (9)
392
  eax - SF_THREAD_INFO (9)
393
======================================================================
393
======================================================================
394
==================== Функция 10 - ожидать события. ===================
394
==================== Функция 10 - ожидать события. ===================
395
======================================================================
395
======================================================================
396
Если очередь сообщений пуста, то ждет появления сообщения в очереди.
396
Если очередь сообщений пуста, то ждет появления сообщения в очереди.
397
В таком состоянии поток не получает процессорного времени.
397
В таком состоянии поток не получает процессорного времени.
398
Затем считывает сообщение из очереди.
398
Затем считывает сообщение из очереди.
399
 
399
 
400
Параметры:
400
Параметры:
401
  * eax = 10 - номер функции
401
  * eax = 10 - номер функции
402
Возвращаемое значение:
402
Возвращаемое значение:
403
  * eax = событие (смотри список событий)
403
  * eax = событие (смотри список событий)
404
Замечания:
404
Замечания:
405
  * Учитываются только те события, которые входят в маску,
405
  * Учитываются только те события, которые входят в маску,
406
    устанавливаемую функцией 40. По умолчанию это события
406
    устанавливаемую функцией 40. По умолчанию это события
407
    перерисовки, нажатия на клавиши и на кнопки.
407
    перерисовки, нажатия на клавиши и на кнопки.
408
  * Для проверки, есть ли сообщение в очереди, используйте функцию 11.
408
  * Для проверки, есть ли сообщение в очереди, используйте функцию 11.
409
    Чтобы ждать не более определенного времени, используйте
409
    Чтобы ждать не более определенного времени, используйте
410
    функцию 23.
410
    функцию 23.
411
 
411
 
412
---------------------- Константы для регистров: ----------------------
412
---------------------- Константы для регистров: ----------------------
413
  eax - SF_WAIT_EVENT (10)
413
  eax - SF_WAIT_EVENT (10)
414
======================================================================
414
======================================================================
415
======= Функция 11 - проверить, есть ли событие, без ожидания. =======
415
======= Функция 11 - проверить, есть ли событие, без ожидания. =======
416
======================================================================
416
======================================================================
417
Если в очереди сообщений есть какое-то событие, то считывает и
417
Если в очереди сообщений есть какое-то событие, то считывает и
418
возвращает его. Если очередь пуста, возвращает нуль.
418
возвращает его. Если очередь пуста, возвращает нуль.
419
Параметры:
419
Параметры:
420
  * eax = 11 - номер функции
420
  * eax = 11 - номер функции
421
Возвращаемое значение:
421
Возвращаемое значение:
422
  * eax = 0 - очередь сообщений пуста
422
  * eax = 0 - очередь сообщений пуста
423
  * иначе eax = событие (смотри список событий)
423
  * иначе eax = событие (смотри список событий)
424
Замечания:
424
Замечания:
425
  * Учитываются только те события, которые входят в маску,
425
  * Учитываются только те события, которые входят в маску,
426
    устанавливаемую функцией 40. По умолчанию это события
426
    устанавливаемую функцией 40. По умолчанию это события
427
    перерисовки, нажатия на клавиши и на кнопки.
427
    перерисовки, нажатия на клавиши и на кнопки.
428
  * Для ожидания появления события в очереди, используйте функцию 10.
428
  * Для ожидания появления события в очереди, используйте функцию 10.
429
    Чтобы ждать не более определенного времени, используйте
429
    Чтобы ждать не более определенного времени, используйте
430
    функцию 23.
430
    функцию 23.
431
 
431
 
432
---------------------- Константы для регистров: ----------------------
432
---------------------- Константы для регистров: ----------------------
433
  eax - SF_CHECK_EVENT (11)
433
  eax - SF_CHECK_EVENT (11)
434
======================================================================
434
======================================================================
435
=========== Функция 12 - начать/закончить перерисовку окна. ==========
435
=========== Функция 12 - начать/закончить перерисовку окна. ==========
436
======================================================================
436
======================================================================
437
 
437
 
438
-------------- Подфункция 1 - начать перерисовку окна. ---------------
438
-------------- Подфункция 1 - начать перерисовку окна. ---------------
439
Параметры:
439
Параметры:
440
  * eax = 12 - номер функции
440
  * eax = 12 - номер функции
441
  * ebx = 1 - номер подфункции
441
  * ebx = 1 - номер подфункции
442
Возвращаемое значение:
442
Возвращаемое значение:
443
  * функция не возвращает значения
443
  * функция не возвращает значения
444
 
444
 
445
------------- Подфункция 2 - закончить перерисовку окна. -------------
445
------------- Подфункция 2 - закончить перерисовку окна. -------------
446
Параметры:
446
Параметры:
447
  * eax = 12 - номер функции
447
  * eax = 12 - номер функции
448
  * ebx = 2 - номер подфункции
448
  * ebx = 2 - номер подфункции
449
Возвращаемое значение:
449
Возвращаемое значение:
450
  * функция не возвращает значения
450
  * функция не возвращает значения
451
Замечания:
451
Замечания:
452
  * Функция начала перерисовки удаляет все определённые
452
  * Функция начала перерисовки удаляет все определённые
453
    функцией 8 кнопки, их следует определить повторно.
453
    функцией 8 кнопки, их следует определить повторно.
454
 
454
 
455
---------------------- Константы для регистров: ----------------------
455
---------------------- Константы для регистров: ----------------------
456
  eax - SF_REDRAW (12)
456
  eax - SF_REDRAW (12)
457
  ebx - SSF_BEGIN_DRAW (1), SSF_END_DRAW (2)
457
  ebx - SSF_BEGIN_DRAW (1), SSF_END_DRAW (2)
458
======================================================================
458
======================================================================
459
============ Функция 13 - нарисовать прямоугольник в окне. ===========
459
============ Функция 13 - нарисовать прямоугольник в окне. ===========
460
======================================================================
460
======================================================================
461
Параметры:
461
Параметры:
462
  * eax = 13 - номер функции
462
  * eax = 13 - номер функции
463
  * ebx = [координата по оси x]*65536 + [размер по оси x]
463
  * ebx = [координата по оси x]*65536 + [размер по оси x]
464
  * ecx = [координата по оси y]*65536 + [размер по оси y]
464
  * ecx = [координата по оси y]*65536 + [размер по оси y]
465
  * edx = цвет 0xRRGGBB или 0x80RRGGBB для градиентной заливки
465
  * edx = цвет 0xRRGGBB или 0x80RRGGBB для градиентной заливки
466
Возвращаемое значение:
466
Возвращаемое значение:
467
  * функция не возвращает значения
467
  * функция не возвращает значения
468
Замечания:
468
Замечания:
469
  * Под координатами понимаются координаты левого верхнего угла
469
  * Под координатами понимаются координаты левого верхнего угла
470
    прямоугольника относительно окна.
470
    прямоугольника относительно окна.
471
 
471
 
472
---------------------- Константы для регистров: ----------------------
472
---------------------- Константы для регистров: ----------------------
473
  eax - SF_DRAW_RECT (13)
473
  eax - SF_DRAW_RECT (13)
474
======================================================================
474
======================================================================
475
================ Функция 14 - получить размеры экрана. ===============
475
================ Функция 14 - получить размеры экрана. ===============
476
======================================================================
476
======================================================================
477
Параметры:
477
Параметры:
478
  * eax = 14 - номер функции
478
  * eax = 14 - номер функции
479
Возвращаемое значение:
479
Возвращаемое значение:
480
  * eax = [xsize]*65536 + [ysize], где
480
  * eax = [xsize]*65536 + [ysize], где
481
  * xsize = x-координата правого нижнего угла экрана =
481
  * xsize = x-координата правого нижнего угла экрана =
482
            размер по горизонтали - 1
482
            размер по горизонтали - 1
483
  * ysize = y-координата правого нижнего угла экрана =
483
  * ysize = y-координата правого нижнего угла экрана =
484
            размер по вертикали - 1
484
            размер по вертикали - 1
485
Замечания:
485
Замечания:
486
  * Смотри также подфункцию 5 функции 48 - получить размеры рабочей
486
  * Смотри также подфункцию 5 функции 48 - получить размеры рабочей
487
    области экрана.
487
    области экрана.
488
 
488
 
489
---------------------- Константы для регистров: ----------------------
489
---------------------- Константы для регистров: ----------------------
490
  eax - SF_GET_SCREEN_SIZE (14)
490
  eax - SF_GET_SCREEN_SIZE (14)
491
======================================================================
491
======================================================================
492
= Функция 15, подфункция 1 - установить размер фонового изображения. =
492
= Функция 15, подфункция 1 - установить размер фонового изображения. =
493
======================================================================
493
======================================================================
494
Параметры:
494
Параметры:
495
  * eax = 15 - номер функции
495
  * eax = 15 - номер функции
496
  * ebx = 1 - номер подфункции
496
  * ebx = 1 - номер подфункции
497
  * ecx = ширина изображения
497
  * ecx = ширина изображения
498
  * edx = высота изображения
498
  * edx = высота изображения
499
Возвращаемое значение:
499
Возвращаемое значение:
500
  * функция не возвращает значения
500
  * функция не возвращает значения
501
Замечания:
501
Замечания:
502
  * Вызов функции обязателен перед вызовом подфункций 2 и 5.
502
  * Вызов функции обязателен перед вызовом подфункций 2 и 5.
503
  * Для обновления экрана (после завершения серии команд, работающих с
503
  * Для обновления экрана (после завершения серии команд, работающих с
504
    фоном) вызывайте подфункцию 3 перерисовки фона.
504
    фоном) вызывайте подфункцию 3 перерисовки фона.
505
  * Есть парная функция получения размеров фонового изображения -
505
  * Есть парная функция получения размеров фонового изображения -
506
    подфункция 1 функции 39.
506
    подфункция 1 функции 39.
507
 
507
 
508
---------------------- Константы для регистров: ----------------------
508
---------------------- Константы для регистров: ----------------------
509
  eax - SF_BACKGROUND_SET (15)
509
  eax - SF_BACKGROUND_SET (15)
510
  ebx - SSF_SIZE_BG (1)
510
  ebx - SSF_SIZE_BG (1)
511
======================================================================
511
======================================================================
512
= Функция 15, подфункция 2 - поставить точку на фоновом изображении. =
512
= Функция 15, подфункция 2 - поставить точку на фоновом изображении. =
513
======================================================================
513
======================================================================
514
Параметры:
514
Параметры:
515
  * eax = 15 - номер функции
515
  * eax = 15 - номер функции
516
  * ebx = 2 - номер подфункции
516
  * ebx = 2 - номер подфункции
517
  * ecx = смещение
517
  * ecx = смещение
518
  * edx = цвет точки 0xRRGGBB
518
  * edx = цвет точки 0xRRGGBB
519
Возвращаемое значение:
519
Возвращаемое значение:
520
  * функция не возвращает значения
520
  * функция не возвращает значения
521
Замечания:
521
Замечания:
522
  * Смещение для точки с координатами (x,y) вычисляется как
522
  * Смещение для точки с координатами (x,y) вычисляется как
523
    (x+y*xsize)*3.
523
    (x+y*xsize)*3.
524
  * Если указанное смещение превышает установленный подфункцией 1
524
  * Если указанное смещение превышает установленный подфункцией 1
525
    размер, вызов игнорируется.
525
    размер, вызов игнорируется.
526
  * Для обновления экрана (после завершения серии команд, работающих с
526
  * Для обновления экрана (после завершения серии команд, работающих с
527
    фоном) вызывайте подфункцию 3 перерисовки фона.
527
    фоном) вызывайте подфункцию 3 перерисовки фона.
528
  * Есть парная функция получения точки с фонового изображения -
528
  * Есть парная функция получения точки с фонового изображения -
529
    подфункция 2 функции 39.
529
    подфункция 2 функции 39.
530
 
530
 
531
---------------------- Константы для регистров: ----------------------
531
---------------------- Константы для регистров: ----------------------
532
  eax - SF_BACKGROUND_SET (15)
532
  eax - SF_BACKGROUND_SET (15)
533
  ebx - SSF_PIXEL_BG (2)
533
  ebx - SSF_PIXEL_BG (2)
534
======================================================================
534
======================================================================
535
============ Функция 15, подфункция 3 - перерисовать фон. ============
535
============ Функция 15, подфункция 3 - перерисовать фон. ============
536
======================================================================
536
======================================================================
537
Параметры:
537
Параметры:
538
  * eax = 15 - номер функции
538
  * eax = 15 - номер функции
539
  * ebx = 3 - номер подфункции
539
  * ebx = 3 - номер подфункции
540
Возвращаемое значение:
540
Возвращаемое значение:
541
  * функция не возвращает значения
541
  * функция не возвращает значения
542
 
542
 
543
---------------------- Константы для регистров: ----------------------
543
---------------------- Константы для регистров: ----------------------
544
  eax - SF_BACKGROUND_SET (15)
544
  eax - SF_BACKGROUND_SET (15)
545
  ebx - SSF_REDRAW_BG (3)
545
  ebx - SSF_REDRAW_BG (3)
546
======================================================================
546
======================================================================
547
===== Функция 15, подфункция 4 - установить режим отрисовки фона. ====
547
===== Функция 15, подфункция 4 - установить режим отрисовки фона. ====
548
======================================================================
548
======================================================================
549
Параметры:
549
Параметры:
550
  * eax = 15 - номер функции
550
  * eax = 15 - номер функции
551
  * ebx = 4 - номер подфункции
551
  * ebx = 4 - номер подфункции
552
  * ecx = режим отрисовки:
552
  * ecx = режим отрисовки:
553
    * 1 = замостить
553
    * 1 = замостить
554
    * 2 = растянуть
554
    * 2 = растянуть
555
Возвращаемое значение:
555
Возвращаемое значение:
556
  * функция не возвращает значения
556
  * функция не возвращает значения
557
Замечания:
557
Замечания:
558
  * Для обновления экрана (после завершения серии команд, работающих с
558
  * Для обновления экрана (после завершения серии команд, работающих с
559
    фоном) вызывайте подфункцию 3 перерисовки фона.
559
    фоном) вызывайте подфункцию 3 перерисовки фона.
560
  * Есть парная команда получения режима отрисовки фона -
560
  * Есть парная команда получения режима отрисовки фона -
561
    подфункция 4 функции 39.
561
    подфункция 4 функции 39.
562
 
562
 
563
---------------------- Константы для регистров: ----------------------
563
---------------------- Константы для регистров: ----------------------
564
  eax - SF_BACKGROUND_SET (15)
564
  eax - SF_BACKGROUND_SET (15)
565
  ebx - SSF_MODE_BG (4)
565
  ebx - SSF_MODE_BG (4)
566
======================================================================
566
======================================================================
567
===== Функция 15, подфункция 5 - поместить блок пикселей на фон. =====
567
===== Функция 15, подфункция 5 - поместить блок пикселей на фон. =====
568
======================================================================
568
======================================================================
569
Параметры:
569
Параметры:
570
  * eax = 15 - номер функции
570
  * eax = 15 - номер функции
571
  * ebx = 5 - номер подфункции
571
  * ebx = 5 - номер подфункции
572
  * ecx = указатель на данные в формате BBGGRRBBGGRR...
572
  * ecx = указатель на данные в формате BBGGRRBBGGRR...
573
  * edx = смещение в данных фонового изображения
573
  * edx = смещение в данных фонового изображения
574
  * esi = размер данных в байтах = 3 * число пикселей
574
  * esi = размер данных в байтах = 3 * число пикселей
575
Возвращаемое значение:
575
Возвращаемое значение:
576
  * функция не возвращает значения
576
  * функция не возвращает значения
577
Замечания:
577
Замечания:
578
  * Проверки корректности смещения и размера не производится.
578
  * Проверки корректности смещения и размера не производится.
579
  * Цвет каждого пикселя хранится как 3-байтная величина BBGGRR.
579
  * Цвет каждого пикселя хранится как 3-байтная величина BBGGRR.
580
  * Пиксели фонового изображения записываются последовательно
580
  * Пиксели фонового изображения записываются последовательно
581
    слева направо, сверху вниз.
581
    слева направо, сверху вниз.
582
  * Смещение пикселя с координатами (x,y) есть (x+y*xsize)*3.
582
  * Смещение пикселя с координатами (x,y) есть (x+y*xsize)*3.
583
  * Для обновления экрана (после завершения серии команд, работающих с
583
  * Для обновления экрана (после завершения серии команд, работающих с
584
    фоном) вызывайте подфункцию 3 перерисовки фона.
584
    фоном) вызывайте подфункцию 3 перерисовки фона.
585
 
585
 
586
---------------------- Константы для регистров: ----------------------
586
---------------------- Константы для регистров: ----------------------
587
  eax - SF_BACKGROUND_SET (15)
587
  eax - SF_BACKGROUND_SET (15)
588
  ebx - SSF_IMAGE_BG (5)
588
  ebx - SSF_IMAGE_BG (5)
589
======================================================================
589
======================================================================
590
====================== Функция 15, подфункция 6 ======================
590
====================== Функция 15, подфункция 6 ======================
591
==== Спроецировать данные фона на адресное пространство процесса. ====
591
==== Спроецировать данные фона на адресное пространство процесса. ====
592
======================================================================
592
======================================================================
593
Параметры:
593
Параметры:
594
  * eax = 15 - номер функции
594
  * eax = 15 - номер функции
595
  * ebx = 6 - номер подфункции
595
  * ebx = 6 - номер подфункции
596
Возвращаемое значение:
596
Возвращаемое значение:
597
  * eax = указатель на данные фона, 0 при ошибке
597
  * eax = указатель на данные фона, 0 при ошибке
598
Замечания:
598
Замечания:
599
  * Спроецированные данные доступны на чтение и запись.
599
  * Спроецированные данные доступны на чтение и запись.
600
  * Размер данных фона равен 3*xsize*ysize. Изменение размеров фона
600
  * Размер данных фона равен 3*xsize*ysize. Изменение размеров фона
601
    блокируется на время работы с спроецированными данными.
601
    блокируется на время работы с спроецированными данными.
602
  * Цвет каждого пикселя хранится как 3-байтовая величина BBGGRR.
602
  * Цвет каждого пикселя хранится как 3-байтовая величина BBGGRR.
603
  * Пиксели фонового изображения записываются последовательно
603
  * Пиксели фонового изображения записываются последовательно
604
    слева направо, сверху вниз.
604
    слева направо, сверху вниз.
605
 
605
 
606
---------------------- Константы для регистров: ----------------------
606
---------------------- Константы для регистров: ----------------------
607
  eax - SF_BACKGROUND_SET (15)
607
  eax - SF_BACKGROUND_SET (15)
608
  ebx - SSF_MAP_BG (6)
608
  ebx - SSF_MAP_BG (6)
609
======================================================================
609
======================================================================
610
====================== Функция 15, подфункция 7 ======================
610
====================== Функция 15, подфункция 7 ======================
611
=== Закрыть проекцию данных фона на адресное пространство процесса. ==
611
=== Закрыть проекцию данных фона на адресное пространство процесса. ==
612
======================================================================
612
======================================================================
613
Параметры:
613
Параметры:
614
  * eax = 15 - номер функции
614
  * eax = 15 - номер функции
615
  * ebx = 7 - номер подфункции
615
  * ebx = 7 - номер подфункции
616
  * ecx = указатель на данные фона
616
  * ecx = указатель на данные фона
617
Возвращаемое значение:
617
Возвращаемое значение:
618
  * eax = 1 при успехе, 0 при ошибке
618
  * eax = 1 при успехе, 0 при ошибке
619
 
619
 
620
---------------------- Константы для регистров: ----------------------
620
---------------------- Константы для регистров: ----------------------
621
  eax - SF_BACKGROUND_SET (15)
621
  eax - SF_BACKGROUND_SET (15)
622
  ebx - SSF_UNMAP_BG (7)
622
  ebx - SSF_UNMAP_BG (7)
623
======================================================================
623
======================================================================
624
====================== Функция 15, подфункция 8 ======================
624
====================== Функция 15, подфункция 8 ======================
625
=========== Получить координаты последней отрисовки фона. ============
625
=========== Получить координаты последней отрисовки фона. ============
626
======================================================================
626
======================================================================
627
Параметры:
627
Параметры:
628
  * eax = 15 - номер функции
628
  * eax = 15 - номер функции
629
  * ebx = 8 - номер подфункции
629
  * ebx = 8 - номер подфункции
630
Возвращаемое значение:
630
Возвращаемое значение:
631
  * eax = [left]*65536 + [right]
631
  * eax = [left]*65536 + [right]
632
  * ebx = [top]*65536 + [bottom]
632
  * ebx = [top]*65536 + [bottom]
633
Замечания:
633
Замечания:
634
  * (left,top) - координаты левого верхнего угла,
634
  * (left,top) - координаты левого верхнего угла,
635
    (right,bottom) - координаты правого нижнего.
635
    (right,bottom) - координаты правого нижнего.
636
  * Для получения более достоверных сведений, необходимо вызвать
636
  * Для получения более достоверных сведений, необходимо вызвать
637
    функцию сразу после получения события:
637
    функцию сразу после получения события:
638
             5 = завершилась перерисовка фона рабочего стола
638
             5 = завершилась перерисовка фона рабочего стола
639
 
639
 
640
---------------------- Константы для регистров: ----------------------
640
---------------------- Константы для регистров: ----------------------
641
  eax - SF_BACKGROUND_SET (15)
641
  eax - SF_BACKGROUND_SET (15)
642
  ebx - SSF_LAST_DRAW (8)
642
  ebx - SSF_LAST_DRAW (8)
643
======================================================================
643
======================================================================
644
====================== Функция 15, подфункция 9 ======================
644
====================== Функция 15, подфункция 9 ======================
645
=============== Перерисовать прямоугольную часть фона. ===============
645
=============== Перерисовать прямоугольную часть фона. ===============
646
======================================================================
646
======================================================================
647
Параметры:
647
Параметры:
648
  * eax = 15 - номер функции
648
  * eax = 15 - номер функции
649
  * ebx = 9 - номер подфункции
649
  * ebx = 9 - номер подфункции
650
  * ecx = [left]*65536 + [right]
650
  * ecx = [left]*65536 + [right]
651
  * edx = [top]*65536 + [bottom]
651
  * edx = [top]*65536 + [bottom]
652
Возвращаемое значение:
652
Возвращаемое значение:
653
  * функция не возвращает значения
653
  * функция не возвращает значения
654
Замечания:
654
Замечания:
655
  * (left,top) - координаты левого верхнего угла,
655
  * (left,top) - координаты левого верхнего угла,
656
    (right,bottom) - координаты правого нижнего.
656
    (right,bottom) - координаты правого нижнего.
657
  * Если параметры установлены некорректно - фон не перерисовывается.
657
  * Если параметры установлены некорректно - фон не перерисовывается.
658
 
658
 
659
---------------------- Константы для регистров: ----------------------
659
---------------------- Константы для регистров: ----------------------
660
  eax - SF_BACKGROUND_SET (15)
660
  eax - SF_BACKGROUND_SET (15)
661
  ebx - SSF_REDRAW_RECT (9)
661
  ebx - SSF_REDRAW_RECT (9)
662
======================================================================
662
======================================================================
663
============= Функция 16 - сохранить рамдиск на дискету. =============
663
============= Функция 16 - сохранить рамдиск на дискету. =============
664
======================================================================
664
======================================================================
665
Параметры:
665
Параметры:
666
  * eax = 16 - номер функции
666
  * eax = 16 - номер функции
667
  * ebx = 1 или ebx = 2 - на какую дискету сохранять
667
  * ebx = 1 или ebx = 2 - на какую дискету сохранять
668
Возвращаемое значение:
668
Возвращаемое значение:
669
  * eax = 0 - успешно
669
  * eax = 0 - успешно
670
  * eax = 1 - ошибка
670
  * eax = 1 - ошибка
671
 
671
 
672
---------------------- Константы для регистров: ----------------------
672
---------------------- Константы для регистров: ----------------------
673
  eax - SF_RD_TO_FLOPPY (16)
673
  eax - SF_RD_TO_FLOPPY (16)
674
======================================================================
674
======================================================================
675
============== Функция 17 - получить код нажатой кнопки. =============
675
============== Функция 17 - получить код нажатой кнопки. =============
676
======================================================================
676
======================================================================
677
Забирает код нажатой кнопки из буфера.
677
Забирает код нажатой кнопки из буфера.
678
Параметры:
678
Параметры:
679
  * eax = 17 - номер функции
679
  * eax = 17 - номер функции
680
Возвращаемое значение:
680
Возвращаемое значение:
681
  * если буфер пуст, возвращается eax=1
681
  * если буфер пуст, возвращается eax=1
682
  * если буфер непуст:
682
  * если буфер непуст:
683
    * старшие 24 бита eax содержат идентификатор кнопки
683
    * старшие 24 бита eax содержат идентификатор кнопки
684
      (в частности, в ah оказывается младший байт идентификатора;
684
      (в частности, в ah оказывается младший байт идентификатора;
685
      если все кнопки имеют идентификатор, меньший 256,
685
      если все кнопки имеют идентификатор, меньший 256,
686
      то для различения достаточно ah)
686
      то для различения достаточно ah)
687
    * al = 0 - кнопка была нажата левой кнопкой мыши
687
    * al = 0 - кнопка была нажата левой кнопкой мыши
688
    * al = бит, соответствующий нажавшей кнопке мыши, если не левой
688
    * al = бит, соответствующий нажавшей кнопке мыши, если не левой
689
Замечания:
689
Замечания:
690
  * "Буфер" хранит только одну кнопку, при нажатии новой кнопки
690
  * "Буфер" хранит только одну кнопку, при нажатии новой кнопки
691
    информация о старой теряется.
691
    информация о старой теряется.
692
  * При вызове этой функции приложением с неактивным окном
692
  * При вызове этой функции приложением с неактивным окном
693
    возвращается ответ "буфер пуст".
693
    возвращается ответ "буфер пуст".
694
  * Возвращаемое значение al соответствует состоянию кнопок мыши
694
  * Возвращаемое значение al соответствует состоянию кнопок мыши
695
    в формате подфункции 2 функции 37 в момент начала нажатия
695
    в формате подфункции 2 функции 37 в момент начала нажатия
696
    на кнопку, за исключением младшего бита (соответствующего левой
696
    на кнопку, за исключением младшего бита (соответствующего левой
697
    кнопке мыши), который сбрасывается.
697
    кнопке мыши), который сбрасывается.
698
 
698
 
699
---------------------- Константы для регистров: ----------------------
699
---------------------- Константы для регистров: ----------------------
700
  eax - SF_GET_BUTTON (17)
700
  eax - SF_GET_BUTTON (17)
701
======================================================================
701
======================================================================
702
= Функция 18, подфункция 1 - сделать самым нижним окно потока. =======
702
= Функция 18, подфункция 1 - сделать самым нижним окно потока. =======
703
======================================================================
703
======================================================================
704
Параметры:
704
Параметры:
705
  * eax = 18 - номер функции
705
  * eax = 18 - номер функции
706
  * ebx = 1 - номер подфункции
706
  * ebx = 1 - номер подфункции
707
  * ecx = номер слота потока
707
  * ecx = номер слота потока
708
Возвращаемое значение:
708
Возвращаемое значение:
709
  * функция не возвращает значения
709
  * функция не возвращает значения
710
 
710
 
711
---------------------- Константы для регистров: ----------------------
711
---------------------- Константы для регистров: ----------------------
712
  eax - SF_SYSTEM (18)
712
  eax - SF_SYSTEM (18)
713
  ebx - SSF_UNFOCUS_WINDOW (1)
713
  ebx - SSF_UNFOCUS_WINDOW (1)
714
======================================================================
714
======================================================================
715
==== Функция 18, подфункция 2 - завершить процесс/поток по слоту. ====
715
==== Функция 18, подфункция 2 - завершить процесс/поток по слоту. ====
716
======================================================================
716
======================================================================
717
Параметры:
717
Параметры:
718
  * eax = 18 - номер функции
718
  * eax = 18 - номер функции
719
  * ebx = 2 - номер подфункции
719
  * ebx = 2 - номер подфункции
720
  * ecx = номер слота процесса/потока
720
  * ecx = номер слота процесса/потока
721
Возвращаемое значение:
721
Возвращаемое значение:
722
  * функция не возвращает значения
722
  * функция не возвращает значения
723
Замечания:
723
Замечания:
724
  * Нельзя завершить поток операционной системы OS/IDLE (номер слота
724
  * Нельзя завершить поток операционной системы OS/IDLE (номер слота
725
    1), можно завершить любой обычный поток/процесс.
725
    1), можно завершить любой обычный поток/процесс.
726
  * Смотри также подфункцию 18 - завершение
726
  * Смотри также подфункцию 18 - завершение
727
    процесса/потока с заданным идентификатором.
727
    процесса/потока с заданным идентификатором.
728
 
728
 
729
---------------------- Константы для регистров: ----------------------
729
---------------------- Константы для регистров: ----------------------
730
  eax - SF_SYSTEM (18)
730
  eax - SF_SYSTEM (18)
731
  ebx - SSF_TERMINATE_THREAD (2)
731
  ebx - SSF_TERMINATE_THREAD (2)
732
======================================================================
732
======================================================================
733
= Функция 18, подфункция 3 - сделать активным окно заданного потока. =
733
= Функция 18, подфункция 3 - сделать активным окно заданного потока. =
734
======================================================================
734
======================================================================
735
Параметры:
735
Параметры:
736
  * eax = 18 - номер функции
736
  * eax = 18 - номер функции
737
  * ebx = 3 - номер подфункции
737
  * ebx = 3 - номер подфункции
738
  * ecx = номер слота потока
738
  * ecx = номер слота потока
739
Возвращаемое значение:
739
Возвращаемое значение:
740
  * функция не возвращает значения
740
  * функция не возвращает значения
741
Замечания:
741
Замечания:
742
  * При указании корректного, но несуществующего слота активизируется
742
  * При указании корректного, но несуществующего слота активизируется
743
    какое-то окно.
743
    какое-то окно.
744
  * Узнать, какое окно является активным, можно вызовом подфункции 7.
744
  * Узнать, какое окно является активным, можно вызовом подфункции 7.
745
 
745
 
746
---------------------- Константы для регистров: ----------------------
746
---------------------- Константы для регистров: ----------------------
747
  eax - SF_SYSTEM (18)
747
  eax - SF_SYSTEM (18)
748
  ebx - SSF_FOCUS_WINDOW (3)
748
  ebx - SSF_FOCUS_WINDOW (3)
749
======================================================================
749
======================================================================
750
 Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду.
750
 Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду.
751
======================================================================
751
======================================================================
752
Под пустыми тактами понимается время, в которое процессор простаивает
752
Под пустыми тактами понимается время, в которое процессор простаивает
753
в ожидании прерывания (в инструкции hlt).
753
в ожидании прерывания (в инструкции hlt).
754
 
754
 
755
Параметры:
755
Параметры:
756
  * eax = 18 - номер функции
756
  * eax = 18 - номер функции
757
  * ebx = 4 - номер подфункции
757
  * ebx = 4 - номер подфункции
758
Возвращаемое значение:
758
Возвращаемое значение:
759
  * eax = значение счётчика пустых тактов в секунду
759
  * eax = значение счётчика пустых тактов в секунду
760
 
760
 
761
---------------------- Константы для регистров: ----------------------
761
---------------------- Константы для регистров: ----------------------
762
  eax - SF_SYSTEM (18)
762
  eax - SF_SYSTEM (18)
763
  ebx - SSF_GET_IDLE_COUNT (4)
763
  ebx - SSF_GET_IDLE_COUNT (4)
764
======================================================================
764
======================================================================
765
======== Функция 18, подфункция 5 - получить тактовую частоту. =======
765
======== Функция 18, подфункция 5 - получить тактовую частоту. =======
766
======================================================================
766
======================================================================
767
Параметры:
767
Параметры:
768
  * eax = 18 - номер функции
768
  * eax = 18 - номер функции
769
  * ebx = 5 - номер подфункции
769
  * ebx = 5 - номер подфункции
770
Возвращаемое значение:
770
Возвращаемое значение:
771
  * eax = тактовая частота (по модулю 2^32 тактов = 4ГГц)
771
  * eax = тактовая частота (по модулю 2^32 тактов = 4ГГц)
772
 
772
 
773
---------------------- Константы для регистров: ----------------------
773
---------------------- Константы для регистров: ----------------------
774
  eax - SF_SYSTEM (18)
774
  eax - SF_SYSTEM (18)
775
  ebx - SSF_GET_CPU_FREQUENCY (5)
775
  ebx - SSF_GET_CPU_FREQUENCY (5)
776
======================================================================
776
======================================================================
777
 Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске.
777
 Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске.
778
======================================================================
778
======================================================================
779
Параметры:
779
Параметры:
780
  * eax = 18 - номер функции
780
  * eax = 18 - номер функции
781
  * ebx = 6 - номер подфункции
781
  * ebx = 6 - номер подфункции
782
  * ecx = указатель на строку с полным именем файла
782
  * ecx = указатель на строку с полным именем файла
783
    (например, "/hd0/1/kolibri/kolibri.img")
783
    (например, "/hd0/1/kolibri/kolibri.img")
784
Возвращаемое значение:
784
Возвращаемое значение:
785
  * eax = 0 - успешно
785
  * eax = 0 - успешно
786
  * иначе eax = код ошибки файловой системы
786
  * иначе eax = код ошибки файловой системы
787
Замечания:
787
Замечания:
788
  * Все папки в указанном пути должны существовать, иначе вернётся
788
  * Все папки в указанном пути должны существовать, иначе вернётся
789
    значение 5, "файл не найден".
789
    значение 5, "файл не найден".
790
 
790
 
791
---------------------- Константы для регистров: ----------------------
791
---------------------- Константы для регистров: ----------------------
792
  eax - SF_SYSTEM (18)
792
  eax - SF_SYSTEM (18)
793
  ebx - SSF_RD_TO_HDD (6)
793
  ebx - SSF_RD_TO_HDD (6)
794
======================================================================
794
======================================================================
795
====== Функция 18, подфункция 7 - получить номер активного окна. =====
795
====== Функция 18, подфункция 7 - получить номер активного окна. =====
796
======================================================================
796
======================================================================
797
Параметры:
797
Параметры:
798
  * eax = 18 - номер функции
798
  * eax = 18 - номер функции
799
  * ebx = 7 - номер подфункции
799
  * ebx = 7 - номер подфункции
800
Возвращаемое значение:
800
Возвращаемое значение:
801
  * eax = номер активного окна (номер слота потока, окно которого
801
  * eax = номер активного окна (номер слота потока, окно которого
802
    активно)
802
    активно)
803
Замечания:
803
Замечания:
804
  * Активное окно находится вверху оконного стэка и получает
804
  * Активное окно находится вверху оконного стэка и получает
805
    сообщения обо всём вводе с клавиатуры.
805
    сообщения обо всём вводе с клавиатуры.
806
  * Сделать окно активным можно вызовом подфункции 3.
806
  * Сделать окно активным можно вызовом подфункции 3.
807
 
807
 
808
---------------------- Константы для регистров: ----------------------
808
---------------------- Константы для регистров: ----------------------
809
  eax - SF_SYSTEM (18)
809
  eax - SF_SYSTEM (18)
810
  ebx - SSF_GET_ACTIVE_WINDOW (7)
810
  ebx - SSF_GET_ACTIVE_WINDOW (7)
811
======================================================================
811
======================================================================
812
==== Функция 18, подфункция 8 - отключить/разрешить звук спикера. ====
812
==== Функция 18, подфункция 8 - отключить/разрешить звук спикера. ====
813
======================================================================
813
======================================================================
814
При отключённом звуке вызовы подфункции 55 функции 55 игнорируются.
814
При отключённом звуке вызовы подфункции 55 функции 55 игнорируются.
815
При включённом - направляются на встроенный спикер.
815
При включённом - направляются на встроенный спикер.
816
 
816
 
817
--------------- Подподфункция 1 - получить состояние. ----------------
817
--------------- Подподфункция 1 - получить состояние. ----------------
818
Параметры:
818
Параметры:
819
  * eax = 18 - номер функции
819
  * eax = 18 - номер функции
820
  * ebx = 8 - номер подфункции
820
  * ebx = 8 - номер подфункции
821
  * ecx = 1 - номер подподфункции
821
  * ecx = 1 - номер подподфункции
822
Возвращаемое значение:
822
Возвращаемое значение:
823
  * eax = 0 - звук спикера разрешён; 1 - запрещён
823
  * eax = 0 - звук спикера разрешён; 1 - запрещён
824
 
824
 
825
-------------- Подподфункция 2 - переключить состояние. --------------
825
-------------- Подподфункция 2 - переключить состояние. --------------
826
Переключает состояния разрешения/запрещения.
826
Переключает состояния разрешения/запрещения.
827
Параметры:
827
Параметры:
828
  * eax = 18 - номер функции
828
  * eax = 18 - номер функции
829
  * ebx = 8 - номер подфункции
829
  * ebx = 8 - номер подфункции
830
  * ecx = 2 - номер подподфункции
830
  * ecx = 2 - номер подподфункции
831
Возвращаемое значение:
831
Возвращаемое значение:
832
  * функция не возвращает значения
832
  * функция не возвращает значения
833
 
833
 
834
---------------------- Константы для регистров: ----------------------
834
---------------------- Константы для регистров: ----------------------
835
  eax - SF_SYSTEM (18)
835
  eax - SF_SYSTEM (18)
836
  ebx - SSF_SPEAKER (8)
836
  ebx - SSF_SPEAKER (8)
837
  ecx - SSSF_GET_STATE (1), SSSF_TOGGLE (2)
837
  ecx - SSSF_GET_STATE (1), SSSF_TOGGLE (2)
838
======================================================================
838
======================================================================
839
= Функция 18, подфункция 9 - завершение работы системы с параметром. =
839
= Функция 18, подфункция 9 - завершение работы системы с параметром. =
840
======================================================================
840
======================================================================
841
Параметры:
841
Параметры:
842
  * eax = 18 - номер функции
842
  * eax = 18 - номер функции
843
  * ebx = 9 - номер подфункции
843
  * ebx = 9 - номер подфункции
844
  * ecx = параметр:
844
  * ecx = параметр:
845
    * 2 = выключить компьютер
845
    * 2 = выключить компьютер
846
    * 3 = перезагрузить компьютер
846
    * 3 = перезагрузить компьютер
847
    * 4 = перезапустить ядро из файла kernel.mnt на рамдиске
847
    * 4 = перезапустить ядро из файла kernel.mnt на рамдиске
848
Возвращаемое значение:
848
Возвращаемое значение:
849
  * при неверном ecx регистры не меняются (т.е. eax=18)
849
  * при неверном ecx регистры не меняются (т.е. eax=18)
850
  * при правильном вызове всегда возвращается признак успеха eax=0
850
  * при правильном вызове всегда возвращается признак успеха eax=0
851
Замечания:
851
Замечания:
852
  * Не следует полагаться на возвращаемое значение при неверном
852
  * Не следует полагаться на возвращаемое значение при неверном
853
    вызове, оно может измениться в последующих версиях ядра.
853
    вызове, оно может измениться в последующих версиях ядра.
854
 
854
 
855
---------------------- Константы для регистров: ----------------------
855
---------------------- Константы для регистров: ----------------------
856
  eax - SF_SYSTEM (18)
856
  eax - SF_SYSTEM (18)
857
  ebx - SSF_SHUTDOWN (9)
857
  ebx - SSF_SHUTDOWN (9)
858
======================================================================
858
======================================================================
859
========= Функция 18, подфункция 10 - свернуть активное окно. ========
859
========= Функция 18, подфункция 10 - свернуть активное окно. ========
860
======================================================================
860
======================================================================
861
Сворачивает активное окно.
861
Сворачивает активное окно.
862
Параметры:
862
Параметры:
863
  * eax = 18 - номер функции
863
  * eax = 18 - номер функции
864
  * ebx = 10 - номер подфункции
864
  * ebx = 10 - номер подфункции
865
Возвращаемое значение:
865
Возвращаемое значение:
866
  * функция не возвращает значения
866
  * функция не возвращает значения
867
Замечания:
867
Замечания:
868
  * Минимизированное окно с точки зрения функции 9 сохраняет положение
868
  * Минимизированное окно с точки зрения функции 9 сохраняет положение
869
    и размеры.
869
    и размеры.
870
  * Восстановление окна приложения происходит при активизировании
870
  * Восстановление окна приложения происходит при активизировании
871
    подфункцией 3.
871
    подфункцией 3.
872
  * Обычно нет необходимости явно сворачивать/разворачивать своё окно:
872
  * Обычно нет необходимости явно сворачивать/разворачивать своё окно:
873
    сворачивание окна осуществляется системой при нажатии на кнопку
873
    сворачивание окна осуществляется системой при нажатии на кнопку
874
    минимизации (которая для окон со скином определяется автоматически
874
    минимизации (которая для окон со скином определяется автоматически
875
    функцией 0, для окон без скина её можно определить функцией 8),
875
    функцией 0, для окон без скина её можно определить функцией 8),
876
    восстановление - приложением @taskbar.
876
    восстановление - приложением @taskbar.
877
 
877
 
878
---------------------- Константы для регистров: ----------------------
878
---------------------- Константы для регистров: ----------------------
879
  eax - SF_SYSTEM (18)
879
  eax - SF_SYSTEM (18)
880
  ebx - SSF_MINIMIZE_WINDOW (10)
880
  ebx - SSF_MINIMIZE_WINDOW (10)
881
======================================================================
881
======================================================================
882
====================== Функция 18, подфункция 11 =====================
882
====================== Функция 18, подфункция 11 =====================
883
============= Получить информацию о дисковой подсистеме. =============
883
============= Получить информацию о дисковой подсистеме. =============
884
======================================================================
884
======================================================================
-
 
885
 
-
 
886
 !!! ВНИМАНИЕ. Данный интерфейс устарел и не должен использоваться !!!
-
 
887
 
885
Параметры:
888
Параметры:
886
  * eax = 18 - номер функции
889
  * eax = 18 - номер функции
887
  * ebx = 11 - номер подфункции
890
  * ebx = 11 - номер подфункции
888
  * ecx = тип таблицы:
891
  * ecx = тип таблицы:
889
    * 1 = короткая версия, 16 байт
892
    * 1 = короткая версия, 16 байт
890
  * edx = указатель на буфер (в приложении) для таблицы
893
  * edx = указатель на буфер (в приложении) для таблицы
891
Возвращаемое значение:
894
Возвращаемое значение:
892
  * функция не возвращает значения
895
  * функция не возвращает значения
893
Формат таблицы: короткая версия:
896
Формат таблицы: короткая версия:
894
  * +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB,
897
  * +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB,
895
    где AAAA задаёт тип первого дисковода, BBBB - второго согласно
898
    где AAAA задаёт тип первого дисковода, BBBB - второго согласно
896
    следующему списку:
899
    следующему списку:
897
    * 0 = нет дисковода
900
    * 0 = нет дисковода
898
    * 1 = 360Kb, 5.25''
901
    * 1 = 360Kb, 5.25''
899
    * 2 = 1.2Mb, 5.25''
902
    * 2 = 1.2Mb, 5.25''
900
    * 3 = 720Kb, 3.5''
903
    * 3 = 720Kb, 3.5''
901
    * 4 = 1.44Mb, 3.5''
904
    * 4 = 1.44Mb, 3.5''
902
    * 5 = 2.88Mb, 3.5'' (такие дискеты сейчас уже не используются)
905
    * 5 = 2.88Mb, 3.5'' (такие дискеты сейчас уже не используются)
903
    Например, для стандартной конфигурации из одного 1.44-дисковода
906
    Например, для стандартной конфигурации из одного 1.44-дисковода
904
    здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B:
907
    здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B:
905
    значение оказывается 24h.
908
    значение оказывается 24h.
906
 
909
 
907
  Первый контроллер IDE:
910
  Первый контроллер IDE:
908
  * +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD,
911
  * +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD,
909
    где AA соответствует контроллеру IDE0, ..., DD - IDE3:
912
    где AA соответствует контроллеру IDE0, ..., DD - IDE3:
910
    * 0 = устройство отсутствует
913
    * 0 = устройство отсутствует
911
    * 1 = жёсткий диск
914
    * 1 = жёсткий диск
912
    * 2 = CD-привод
915
    * 2 = CD-привод
913
    Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h.
916
    Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h.
914
  * +2: 4 db: число найденных разделов на жёстких дисках с
917
  * +2: 4 db: число найденных разделов на жёстких дисках с
915
    соответственно IDE0,...,IDE3.
918
    соответственно IDE0,...,IDE3.
916
 
919
 
917
  Второй контроллер IDE:
920
  Второй контроллер IDE:
918
  * +6: byte: информация о жёстких дисках и CD-приводах, AABBCCDD
921
  * +6: byte: информация о жёстких дисках и CD-приводах, AABBCCDD
919
    где AA соответствует контроллеру IDE4, ..., DD - IDE7:
922
    где AA соответствует контроллеру IDE4, ..., DD - IDE7:
920
    * 0 = устройство отсутствует
923
    * 0 = устройство отсутствует
921
    * 1 = жёсткий диск
924
    * 1 = жёсткий диск
922
    * 2 = CD-привод
925
    * 2 = CD-привод
923
    Например, в случае HD на IDE4 и CD на IDE6 здесь будет 48h.
926
    Например, в случае HD на IDE4 и CD на IDE6 здесь будет 48h.
924
  * +7: 4 db: число найденных разделов на жёстких дисках с
927
  * +7: 4 db: число найденных разделов на жёстких дисках с
925
    соответственно IDE4,...,IDE7.
928
    соответственно IDE4,...,IDE7.
926
 
929
 
927
  Третий контроллер IDE:
930
  Третий контроллер IDE:
928
  * +11: byte: информация о жёстких дисках и CD-приводах, AABBCCDD
931
  * +11: byte: информация о жёстких дисках и CD-приводах, AABBCCDD
929
    где AA соответствует контроллеру IDE8, ..., DD - IDE11:
932
    где AA соответствует контроллеру IDE8, ..., DD - IDE11:
930
    * 0 = устройство отсутствует
933
    * 0 = устройство отсутствует
931
    * 1 = жёсткий диск
934
    * 1 = жёсткий диск
932
    * 2 = CD-привод
935
    * 2 = CD-привод
933
    Например, в случае HD на IDE8 и CD на IDE10 здесь будет 48h.
936
    Например, в случае HD на IDE8 и CD на IDE10 здесь будет 48h.
934
  * +12: 4 db: число найденных разделов на жёстких дисках с
937
  * +12: 4 db: число найденных разделов на жёстких дисках с
935
    соответственно IDE8,...,IDE11.
938
    соответственно IDE8,...,IDE11.
936
 
939
 
937
    При отсутствии жёсткого диска на IDEx соответствующий байт
940
    При отсутствии жёсткого диска на IDEx соответствующий байт
938
    нулевой, при наличии показывает число распознанных разделов,
941
    нулевой, при наличии показывает число распознанных разделов,
939
    которых может и не быть (если носитель не отформатирован или
942
    которых может и не быть (если носитель не отформатирован или
940
    если файловая система не поддерживается). В текущей версии ядра
943
    если файловая система не поддерживается). В текущей версии ядра
941
    для жёстких дисков поддерживаются только FAT12/16/32, NTFS,
944
    для жёстких дисков поддерживаются только FAT12/16/32, NTFS,
942
    ext2/3/4 и XFS.
945
    ext2/3/4 и XFS.
943
 
946
 
944
Замечания:
947
Замечания:
945
  * Таблица может быть использована для получения информации
948
  * Таблица может быть использована для получения информации
946
    об имеющихся устройствах.
949
    об имеющихся устройствах.
947
 
950
 
948
---------------------- Константы для регистров: ----------------------
951
---------------------- Константы для регистров: ----------------------
949
  eax - SF_SYSTEM (18)
952
  eax - SF_SYSTEM (18)
950
  ebx - SSF_INFO_DISC_SYS (11)
953
  ebx - SSF_INFO_DISC_SYS (11)
951
======================================================================
954
======================================================================
952
========== Функция 18, подфункция 13 - получить версию ядра. =========
955
========== Функция 18, подфункция 13 - получить версию ядра. =========
953
======================================================================
956
======================================================================
954
Параметры:
957
Параметры:
955
  * eax = 18 - номер функции
958
  * eax = 18 - номер функции
956
  * ebx = 13 - номер подфункции
959
  * ebx = 13 - номер подфункции
957
  * ecx = указатель на буфер (не менее 16 байт), куда будет помещена
960
  * ecx = указатель на буфер (не менее 16 байт), куда будет помещена
958
    информация
961
    информация
959
Возвращаемое значение:
962
Возвращаемое значение:
960
  * функция не возвращает значения
963
  * функция не возвращает значения
961
    но, если указатель в ecx недопустимый, например,
964
    но, если указатель в ecx недопустимый, например,
962
    регион [ecx, ecx + 9) пересекается с памятью ядра,
965
    регион [ecx, ecx + 9) пересекается с памятью ядра,
963
    то тогда функция возвращает -1
966
    то тогда функция возвращает -1
964
Замечания:
967
Замечания:
965
  * В данный момент используется только часть буфера размером
968
  * В данный момент используется только часть буфера размером
966
    9 байт. Тем не менее рекомендуется использовать буфер
969
    9 байт. Тем не менее рекомендуется использовать буфер
967
    размером 16 байт для будущей совместимости, в будущем могут быть
970
    размером 16 байт для будущей совместимости, в будущем могут быть
968
    добавлены некоторые поля.
971
    добавлены некоторые поля.
969
Структура буфера:
972
Структура буфера:
970
db a,b,c,d для версии a.b.c.d
973
db a,b,c,d для версии a.b.c.d
971
db 0: зарезервировано
974
db 0: зарезервировано
972
dd REV - номер svn-ревизии ядра
975
dd REV - номер svn-ревизии ядра
973
Для ядра Kolibri 0.7.7.0+:
976
Для ядра Kolibri 0.7.7.0+:
974
db 0,7,7,0
977
db 0,7,7,0
975
db 0
978
db 0
976
dd 1675
979
dd 1675
977
 
980
 
978
---------------------- Константы для регистров: ----------------------
981
---------------------- Константы для регистров: ----------------------
979
  eax - SF_SYSTEM (18)
982
  eax - SF_SYSTEM (18)
980
  ebx - SSF_KERNEL_VERSION (13)
983
  ebx - SSF_KERNEL_VERSION (13)
981
======================================================================
984
======================================================================
982
====================== Функция 18, подфункция 14 =====================
985
====================== Функция 18, подфункция 14 =====================
983
======= Ожидать начала обратного хода луча развёртки монитора. =======
986
======= Ожидать начала обратного хода луча развёртки монитора. =======
984
======================================================================
987
======================================================================
985
Параметры:
988
Параметры:
986
  * eax = 18 - номер функции
989
  * eax = 18 - номер функции
987
  * ebx = 14 - номер подфункции
990
  * ebx = 14 - номер подфункции
988
Возвращаемое значение:
991
Возвращаемое значение:
989
  * eax = 0 как признак успеха
992
  * eax = 0 как признак успеха
990
Замечания:
993
Замечания:
991
  * Функция предназначена исключительно для активных
994
  * Функция предназначена исключительно для активных
992
    высокопроизводительных графических приложений; используется для
995
    высокопроизводительных графических приложений; используется для
993
    плавного вывода графики.
996
    плавного вывода графики.
994
 
997
 
995
---------------------- Константы для регистров: ----------------------
998
---------------------- Константы для регистров: ----------------------
996
  eax - SF_SYSTEM (18)
999
  eax - SF_SYSTEM (18)
997
  ebx - SSF_WAIT_RETRACE (14)
1000
  ebx - SSF_WAIT_RETRACE (14)
998
======================================================================
1001
======================================================================
999
== Функция 18, подфункция 15 - поместить курсор мыши в центр экрана. =
1002
== Функция 18, подфункция 15 - поместить курсор мыши в центр экрана. =
1000
======================================================================
1003
======================================================================
1001
Параметры:
1004
Параметры:
1002
  * eax = 18 - номер функции
1005
  * eax = 18 - номер функции
1003
  * ebx = 15 - номер подфункции
1006
  * ebx = 15 - номер подфункции
1004
Возвращаемое значение:
1007
Возвращаемое значение:
1005
  * eax = 0 как признак успеха
1008
  * eax = 0 как признак успеха
1006
 
1009
 
1007
---------------------- Константы для регистров: ----------------------
1010
---------------------- Константы для регистров: ----------------------
1008
  eax - SF_SYSTEM (18)
1011
  eax - SF_SYSTEM (18)
1009
  ebx - SSF_CURSOR_CENTER (15)
1012
  ebx - SSF_CURSOR_CENTER (15)
1010
======================================================================
1013
======================================================================
1011
====================== Функция 18, подфункция 16 =====================
1014
====================== Функция 18, подфункция 16 =====================
1012
============ Получить размер свободной оперативной памяти. ===========
1015
============ Получить размер свободной оперативной памяти. ===========
1013
======================================================================
1016
======================================================================
1014
Параметры:
1017
Параметры:
1015
  * eax = 18 - номер функции
1018
  * eax = 18 - номер функции
1016
  * ebx = 16 - номер подфункции
1019
  * ebx = 16 - номер подфункции
1017
Возвращаемое значение:
1020
Возвращаемое значение:
1018
  * eax = размер свободной памяти в килобайтах
1021
  * eax = размер свободной памяти в килобайтах
1019
 
1022
 
1020
---------------------- Константы для регистров: ----------------------
1023
---------------------- Константы для регистров: ----------------------
1021
  eax - SF_SYSTEM (18)
1024
  eax - SF_SYSTEM (18)
1022
  ebx - SSF_GET_FREE_RAM (16)
1025
  ebx - SSF_GET_FREE_RAM (16)
1023
======================================================================
1026
======================================================================
1024
====================== Функция 18, подфункция 17 =====================
1027
====================== Функция 18, подфункция 17 =====================
1025
============ Получить размер имеющейся оперативной памяти. ===========
1028
============ Получить размер имеющейся оперативной памяти. ===========
1026
======================================================================
1029
======================================================================
1027
Параметры:
1030
Параметры:
1028
  * eax = 18 - номер функции
1031
  * eax = 18 - номер функции
1029
  * ebx = 17 - номер подфункции
1032
  * ebx = 17 - номер подфункции
1030
Возвращаемое значение:
1033
Возвращаемое значение:
1031
  * eax = общий размер имеющейся памяти в килобайтах
1034
  * eax = общий размер имеющейся памяти в килобайтах
1032
 
1035
 
1033
---------------------- Константы для регистров: ----------------------
1036
---------------------- Константы для регистров: ----------------------
1034
  eax - SF_SYSTEM (18)
1037
  eax - SF_SYSTEM (18)
1035
  ebx - SSF_GET_TOTAL_RAM (17)
1038
  ebx - SSF_GET_TOTAL_RAM (17)
1036
======================================================================
1039
======================================================================
1037
====================== Функция 18, подфункция 18 =====================
1040
====================== Функция 18, подфункция 18 =====================
1038
============= Завершить процесс/поток по идентификатору. =============
1041
============= Завершить процесс/поток по идентификатору. =============
1039
======================================================================
1042
======================================================================
1040
Параметры:
1043
Параметры:
1041
  * eax = 18 - номер функции
1044
  * eax = 18 - номер функции
1042
  * ebx = 18 - номер подфункции
1045
  * ebx = 18 - номер подфункции
1043
  * ecx = идентификатор процесса/потока (PID/TID)
1046
  * ecx = идентификатор процесса/потока (PID/TID)
1044
Возвращаемое значение:
1047
Возвращаемое значение:
1045
  * eax = 0 - успешно
1048
  * eax = 0 - успешно
1046
  * eax = -1 - ошибка (процесс не найден или является системным)
1049
  * eax = -1 - ошибка (процесс не найден или является системным)
1047
Замечания:
1050
Замечания:
1048
  * Нельзя завершить поток операционной системы OS/IDLE (номер слота
1051
  * Нельзя завершить поток операционной системы OS/IDLE (номер слота
1049
    1), можно завершить любой обычный поток/процесс.
1052
    1), можно завершить любой обычный поток/процесс.
1050
  * Смотри также подфункцию 2 - завершение
1053
  * Смотри также подфункцию 2 - завершение
1051
    процесса/потока по заданному слоту.
1054
    процесса/потока по заданному слоту.
1052
 
1055
 
1053
---------------------- Константы для регистров: ----------------------
1056
---------------------- Константы для регистров: ----------------------
1054
  eax - SF_SYSTEM (18)
1057
  eax - SF_SYSTEM (18)
1055
  ebx - SSF_TERMINATE_THREAD_ID (18)
1058
  ebx - SSF_TERMINATE_THREAD_ID (18)
1056
======================================================================
1059
======================================================================
1057
=== Функция 18, подфункция 19 - получить/установить настройки мыши. ==
1060
=== Функция 18, подфункция 19 - получить/установить настройки мыши. ==
1058
======================================================================
1061
======================================================================
1059
 
1062
 
1060
------------- Подподфункция 0 - получить скорость мыши. --------------
1063
------------- Подподфункция 0 - получить скорость мыши. --------------
1061
Параметры:
1064
Параметры:
1062
  * eax = 18 - номер функции
1065
  * eax = 18 - номер функции
1063
  * ebx = 19 - номер подфункции
1066
  * ebx = 19 - номер подфункции
1064
  * ecx = 0 - номер подподфункции
1067
  * ecx = 0 - номер подподфункции
1065
Возвращаемое значение:
1068
Возвращаемое значение:
1066
  * eax = текущий делитель скорости
1069
  * eax = текущий делитель скорости
1067
 
1070
 
1068
------------ Подподфункция 1 - установить скорость мыши. -------------
1071
------------ Подподфункция 1 - установить скорость мыши. -------------
1069
Параметры:
1072
Параметры:
1070
  * eax = 18 - номер функции
1073
  * eax = 18 - номер функции
1071
  * ebx = 19 - номер подфункции
1074
  * ebx = 19 - номер подфункции
1072
  * ecx = 1 - номер подподфункции
1075
  * ecx = 1 - номер подподфункции
1073
  * edx = новое значение делителя скорости
1076
  * edx = новое значение делителя скорости
1074
Возвращаемое значение:
1077
Возвращаемое значение:
1075
  * функция не возвращает значения
1078
  * функция не возвращает значения
1076
 
1079
 
1077
Замечание: рекомендуемый делитель скорости = 4
1080
Замечание: рекомендуемый делитель скорости = 4
1078
 
1081
 
1079
---------- Подподфункция 2 - получить чувствительность мыши ----------
1082
---------- Подподфункция 2 - получить чувствительность мыши ----------
1080
Параметры:
1083
Параметры:
1081
  * eax = 18 - номер функции
1084
  * eax = 18 - номер функции
1082
  * ebx = 19 - номер подфункции
1085
  * ebx = 19 - номер подфункции
1083
  * ecx = 2 - номер подподфункции
1086
  * ecx = 2 - номер подподфункции
1084
Возвращаемое значение:
1087
Возвращаемое значение:
1085
  * eax = текущий коэффициент чувствительности
1088
  * eax = текущий коэффициент чувствительности
1086
 
1089
 
1087
--------- Подподфункция 3 - установить чувствительность мыши ---------
1090
--------- Подподфункция 3 - установить чувствительность мыши ---------
1088
Параметры:
1091
Параметры:
1089
  * eax = 18 - номер функции
1092
  * eax = 18 - номер функции
1090
  * ebx = 19 - номер подфункции
1093
  * ebx = 19 - номер подфункции
1091
  * ecx = 3 - номер подподфункции
1094
  * ecx = 3 - номер подподфункции
1092
  * edx = новое значение коэффициента чувствительности
1095
  * edx = новое значение коэффициента чувствительности
1093
Возвращаемое значение:
1096
Возвращаемое значение:
1094
  * функция не возвращает значения
1097
  * функция не возвращает значения
1095
 
1098
 
1096
Замечание: рекомендуемый коэффициент чувствительности = 3
1099
Замечание: рекомендуемый коэффициент чувствительности = 3
1097
 
1100
 
1098
-------- Подподфункция 4 - установить положение курсора мыши. --------
1101
-------- Подподфункция 4 - установить положение курсора мыши. --------
1099
Параметры:
1102
Параметры:
1100
  * eax = 18 - номер функции
1103
  * eax = 18 - номер функции
1101
  * ebx = 19 - номер подфункции
1104
  * ebx = 19 - номер подфункции
1102
  * ecx = 4 - номер подподфункции
1105
  * ecx = 4 - номер подподфункции
1103
  * edx = [координата по оси x]*65536 + [координата по оси y]
1106
  * edx = [координата по оси x]*65536 + [координата по оси y]
1104
Возвращаемое значение:
1107
Возвращаемое значение:
1105
  * функция не возвращает значения
1108
  * функция не возвращает значения
1106
 
1109
 
1107
------- Подподфункция 5 - симулировать состояние клавиш мыши. --------
1110
------- Подподфункция 5 - симулировать состояние клавиш мыши. --------
1108
Параметры:
1111
Параметры:
1109
  * eax = 18 - номер функции
1112
  * eax = 18 - номер функции
1110
  * ebx = 19 - номер подфункции
1113
  * ebx = 19 - номер подфункции
1111
  * ecx = 5 - номер подподфункции
1114
  * ecx = 5 - номер подподфункции
1112
  * edx = информация о эмулируемом состоянии кнопок мыши:
1115
  * edx = информация о эмулируемом состоянии кнопок мыши:
1113
    (соответствует возвращаемому значению подфункции 2 функции 37)
1116
    (соответствует возвращаемому значению подфункции 2 функции 37)
1114
    * бит 0 установлен = левая кнопка нажата
1117
    * бит 0 установлен = левая кнопка нажата
1115
    * бит 1 установлен = правая кнопка нажата
1118
    * бит 1 установлен = правая кнопка нажата
1116
    * бит 2 установлен = средняя кнопка нажата
1119
    * бит 2 установлен = средняя кнопка нажата
1117
    * бит 3 установлен = 4-я кнопка нажата
1120
    * бит 3 установлен = 4-я кнопка нажата
1118
    * бит 4 установлен = 5-я кнопка нажата
1121
    * бит 4 установлен = 5-я кнопка нажата
1119
Возвращаемое значение:
1122
Возвращаемое значение:
1120
  * функция не возвращает значения
1123
  * функция не возвращает значения
1121
 
1124
 
1122
-------- Подподфункция 6 - получить задержку двойного щелчка. --------
1125
-------- Подподфункция 6 - получить задержку двойного щелчка. --------
1123
Параметры:
1126
Параметры:
1124
  * eax = 18 - номер функции
1127
  * eax = 18 - номер функции
1125
  * ebx = 19 - номер подфункции
1128
  * ebx = 19 - номер подфункции
1126
  * ecx = 6 - номер подподфункции
1129
  * ecx = 6 - номер подподфункции
1127
Возвращаемое значение:
1130
Возвращаемое значение:
1128
  * eax = текущая задержка двойного щелчка (100 = секунда)
1131
  * eax = текущая задержка двойного щелчка (100 = секунда)
1129
 
1132
 
1130
------- Подподфункция 7 - установить задержку двойного щелчка. -------
1133
------- Подподфункция 7 - установить задержку двойного щелчка. -------
1131
Параметры:
1134
Параметры:
1132
  * eax = 18 - номер функции
1135
  * eax = 18 - номер функции
1133
  * ebx = 19 - номер подфункции
1136
  * ebx = 19 - номер подфункции
1134
  * ecx = 7 - номер подподфункции
1137
  * ecx = 7 - номер подподфункции
1135
  * dl  = новое значение задержки двойного щелчка (100 = секунда)
1138
  * dl  = новое значение задержки двойного щелчка (100 = секунда)
1136
Возвращаемое значение:
1139
Возвращаемое значение:
1137
  * функция не возвращает значения
1140
  * функция не возвращает значения
1138
 
1141
 
1139
Замечание: настройки мыши можно регулировать в приложении mouse_cfg.
1142
Замечание: настройки мыши можно регулировать в приложении mouse_cfg.
1140
 
1143
 
1141
---------------------- Константы для регистров: ----------------------
1144
---------------------- Константы для регистров: ----------------------
1142
  eax - SF_SYSTEM (18)
1145
  eax - SF_SYSTEM (18)
1143
  ebx - SSF_MOUSE_SETTINGS (19)
1146
  ebx - SSF_MOUSE_SETTINGS (19)
1144
  ecx - SSSF_GET_SPEED (0), SSSF_SET_SPEED (1), SSSF_GET_SPEEDUP (2),
1147
  ecx - SSSF_GET_SPEED (0), SSSF_SET_SPEED (1), SSSF_GET_SPEEDUP (2),
1145
    SSSF_SET_SPEEDUP (3), SSSF_SET_POS (4), SSSF_SET_BUTTON (5),
1148
    SSSF_SET_SPEEDUP (3), SSSF_SET_POS (4), SSSF_SET_BUTTON (5),
1146
    SSSF_GET_DOUBLE_CLICK_DELAY (6), SSSF_SET_DOUBLE_CLICK_DELAY (7)
1149
    SSSF_GET_DOUBLE_CLICK_DELAY (6), SSSF_SET_DOUBLE_CLICK_DELAY (7)
1147
======================================================================
1150
======================================================================
1148
====================== Функция 18, подфункция 20 =====================
1151
====================== Функция 18, подфункция 20 =====================
1149
============= Получить информацию об оперативной памяти. =============
1152
============= Получить информацию об оперативной памяти. =============
1150
======================================================================
1153
======================================================================
1151
Параметры:
1154
Параметры:
1152
  * eax = 18 - номер функции
1155
  * eax = 18 - номер функции
1153
  * ebx = 20 - номер подфункции
1156
  * ebx = 20 - номер подфункции
1154
  * ecx = указатель на буфер для информации (36 байт)
1157
  * ecx = указатель на буфер для информации (36 байт)
1155
Возвращаемое значение:
1158
Возвращаемое значение:
1156
  * eax = общий размер имеющейся оперативной памяти в байтах
1159
  * eax = общий размер имеющейся оперативной памяти в байтах
1157
    или -1 в случае ошибки
1160
    или -1 в случае ошибки
1158
  * буфер, на который указывает ecx, содержит следующую информацию:
1161
  * буфер, на который указывает ecx, содержит следующую информацию:
1159
    * +0: dword: общий размер имеющейся оперативной памяти в страницах
1162
    * +0: dword: общий размер имеющейся оперативной памяти в страницах
1160
    * +4:  dword: размер свободной оперативной памяти в страницах
1163
    * +4:  dword: размер свободной оперативной памяти в страницах
1161
    * +8:  dword: число страничных ошибок (исключений #PF)
1164
    * +8:  dword: число страничных ошибок (исключений #PF)
1162
                 в приложениях
1165
                 в приложениях
1163
    * +12: dword: размер кучи ядра в байтах
1166
    * +12: dword: размер кучи ядра в байтах
1164
    * +16: dword: размер свободной памяти в куче ядра в байтах
1167
    * +16: dword: размер свободной памяти в куче ядра в байтах
1165
    * +20: dword: общее количество блоков памяти в куче ядра
1168
    * +20: dword: общее количество блоков памяти в куче ядра
1166
    * +24: dword: количество свободных блоков памяти в куче ядра
1169
    * +24: dword: количество свободных блоков памяти в куче ядра
1167
    * +28: dword: размер наибольшего свободного блока в куче ядра
1170
    * +28: dword: размер наибольшего свободного блока в куче ядра
1168
                 (зарезервировано)
1171
                 (зарезервировано)
1169
    * +32: dword: размер наибольшего выделенного блока в куче ядра
1172
    * +32: dword: размер наибольшего выделенного блока в куче ядра
1170
                 (зарезервировано)
1173
                 (зарезервировано)
1171
 
1174
 
1172
---------------------- Константы для регистров: ----------------------
1175
---------------------- Константы для регистров: ----------------------
1173
  eax - SF_SYSTEM (18)
1176
  eax - SF_SYSTEM (18)
1174
  ebx - SSF_GET_RAM_INFO (20)
1177
  ebx - SSF_GET_RAM_INFO (20)
1175
======================================================================
1178
======================================================================
1176
====================== Функция 18, подфункция 21 =====================
1179
====================== Функция 18, подфункция 21 =====================
1177
======= Получить номер слота процесса/потока по идентификатору. ======
1180
======= Получить номер слота процесса/потока по идентификатору. ======
1178
======================================================================
1181
======================================================================
1179
Параметры:
1182
Параметры:
1180
  * eax = 18 - номер функции
1183
  * eax = 18 - номер функции
1181
  * ebx = 21 - номер подфункции
1184
  * ebx = 21 - номер подфункции
1182
  * ecx = идентификатор процесса/потока (PID/TID)
1185
  * ecx = идентификатор процесса/потока (PID/TID)
1183
Возвращаемое значение:
1186
Возвращаемое значение:
1184
  * eax = 0 - ошибка (неверный идентификатор)
1187
  * eax = 0 - ошибка (неверный идентификатор)
1185
  * иначе eax = номер слота
1188
  * иначе eax = номер слота
1186
 
1189
 
1187
---------------------- Константы для регистров: ----------------------
1190
---------------------- Константы для регистров: ----------------------
1188
  eax - SF_SYSTEM (18)
1191
  eax - SF_SYSTEM (18)
1189
  ebx - SSF_GET_THREAD_SLOT (21)
1192
  ebx - SSF_GET_THREAD_SLOT (21)
1190
======================================================================
1193
======================================================================
1191
 Функция 18, подфункция 22 - операции с окном другого процесса/потока.
1194
 Функция 18, подфункция 22 - операции с окном другого процесса/потока.
1192
======================================================================
1195
======================================================================
1193
Параметры:
1196
Параметры:
1194
  * eax = 18 - номер функции
1197
  * eax = 18 - номер функции
1195
  * ebx = 22 - номер подфункции
1198
  * ebx = 22 - номер подфункции
1196
  * ecx = тип операции:
1199
  * ecx = тип операции:
1197
    * 0 = минимизация окна, поток задан номером слота
1200
    * 0 = минимизация окна, поток задан номером слота
1198
    * 1 = минимизация окна, поток задан идентификатором
1201
    * 1 = минимизация окна, поток задан идентификатором
1199
    * 2 = восстановление окна, поток задан номером слота
1202
    * 2 = восстановление окна, поток задан номером слота
1200
    * 3 = восстановление окна, поток задан идентификатором
1203
    * 3 = восстановление окна, поток задан идентификатором
1201
  * edx = параметр операции (номер слота или PID/TID)
1204
  * edx = параметр операции (номер слота или PID/TID)
1202
Возвращаемое значение:
1205
Возвращаемое значение:
1203
  * eax = 0 - успешно
1206
  * eax = 0 - успешно
1204
  * eax = -1 - ошибка (неправильный параметр)
1207
  * eax = -1 - ошибка (неправильный параметр)
1205
Замечания:
1208
Замечания:
1206
  * Поток может свернуть своё окно вызовом подфункции 10.
1209
  * Поток может свернуть своё окно вызовом подфункции 10.
1207
  * Восстановление окна с одновременной активизацией осуществляется
1210
  * Восстановление окна с одновременной активизацией осуществляется
1208
    подфункции 3 (принимающей номер слота).
1211
    подфункции 3 (принимающей номер слота).
1209
 
1212
 
1210
---------------------- Константы для регистров: ----------------------
1213
---------------------- Константы для регистров: ----------------------
1211
  eax - SF_SYSTEM (18)
1214
  eax - SF_SYSTEM (18)
1212
  ebx - SSF_FOREIGN_WINDOW (22)
1215
  ebx - SSF_FOREIGN_WINDOW (22)
1213
  ecx - SSSF_MINIMIZE (0), SSSF_MINIMIZE_ID (1), SSSF_RESTORE (2),
1216
  ecx - SSSF_MINIMIZE (0), SSSF_MINIMIZE_ID (1), SSSF_RESTORE (2),
1214
    SSSF_RESTORE_ID (3)
1217
    SSSF_RESTORE_ID (3)
1215
======================================================================
1218
======================================================================
1216
======= Функция 18, подфункция 23 - минимизировать все окна. =========
1219
======= Функция 18, подфункция 23 - минимизировать все окна. =========
1217
======================================================================
1220
======================================================================
1218
Параметры:
1221
Параметры:
1219
  * eax = 18 - номер функции
1222
  * eax = 18 - номер функции
1220
  * ebx = 23 - номер подфункции
1223
  * ebx = 23 - номер подфункции
1221
Возвращаемое значение:
1224
Возвращаемое значение:
1222
  * eax = 0 - все окна были минимизированы до вызова функции
1225
  * eax = 0 - все окна были минимизированы до вызова функции
1223
  * eax = N - количество окон свернутых функцией
1226
  * eax = N - количество окон свернутых функцией
1224
Замечания:
1227
Замечания:
1225
  * Окна спец. потоков (имя начинается с символа @) не сворачиваются.
1228
  * Окна спец. потоков (имя начинается с символа @) не сворачиваются.
1226
 
1229
 
1227
---------------------- Константы для регистров: ----------------------
1230
---------------------- Константы для регистров: ----------------------
1228
  eax - SF_SYSTEM (18)
1231
  eax - SF_SYSTEM (18)
1229
  ebx - SSF_MINIMIZE_ALL (23)
1232
  ebx - SSF_MINIMIZE_ALL (23)
1230
======================================================================
1233
======================================================================
1231
===== Функция 18, подфункция 24 - установить пределы отрисовки. ======
1234
===== Функция 18, подфункция 24 - установить пределы отрисовки. ======
1232
======================================================================
1235
======================================================================
1233
Параметры:
1236
Параметры:
1234
  * eax = 18 - номер функции
1237
  * eax = 18 - номер функции
1235
  * ebx = 24 - номер подфункции
1238
  * ebx = 24 - номер подфункции
1236
  * ecx = новый размер по X
1239
  * ecx = новый размер по X
1237
  * edx = новый размер по Y
1240
  * edx = новый размер по Y
1238
Возвращаемое значение:
1241
Возвращаемое значение:
1239
  * функция не возвращает значения
1242
  * функция не возвращает значения
1240
Замечания:
1243
Замечания:
1241
  * Функция не меняет физический размер видеорежима. Она предназначена
1244
  * Функция не меняет физический размер видеорежима. Она предназначена
1242
    для нестандартных дисплеев, отображающих изображение частично.
1245
    для нестандартных дисплеев, отображающих изображение частично.
1243
  * Размеры указываемые в функции не должны превышать размеры текущего
1246
  * Размеры указываемые в функции не должны превышать размеры текущего
1244
    видеорежима, иначе функция ничего не изменит.
1247
    видеорежима, иначе функция ничего не изменит.
1245
 
1248
 
1246
---------------------- Константы для регистров: ----------------------
1249
---------------------- Константы для регистров: ----------------------
1247
  eax - SF_SYSTEM (18)
1250
  eax - SF_SYSTEM (18)
1248
  ebx - SSF_SET_SCREEN_LIMITS (24)
1251
  ebx - SSF_SET_SCREEN_LIMITS (24)
1249
======================================================================
1252
======================================================================
1250
===================== Функция 18, подфункция 25 ======================
1253
===================== Функция 18, подфункция 25 ======================
1251
======== Управление положением окна относительно других окон. ========
1254
======== Управление положением окна относительно других окон. ========
1252
======================================================================
1255
======================================================================
1253
 
1256
 
1254
------------- Подподфункция 1 - получить положение  ------------------
1257
------------- Подподфункция 1 - получить положение  ------------------
1255
Параметры:
1258
Параметры:
1256
  * eax = 18 - номер функции
1259
  * eax = 18 - номер функции
1257
  * ebx = 25 - номер подфункции
1260
  * ebx = 25 - номер подфункции
1258
  * ecx = 1 - номер подподфункции
1261
  * ecx = 1  - номер подподфункции
1259
  * edx = -1(для текущего окна) или PID приложения
1262
  * edx = -1 (для текущего окна) или PID приложения
1260
Возвращаемое значение:
1263
Возвращаемое значение:
1261
  * eax = одна из констант положения окна
1264
  * eax = одна из констант положения окна
1262
 
1265
 
1263
------------- Подподфункция 2 - установить положение  ----------------
1266
------------- Подподфункция 2 - установить положение  ----------------
1264
Параметры:
1267
Параметры:
1265
  * eax = 18 - номер функции
1268
  * eax = 18 - номер функции
1266
  * ebx = 25 - номер подфункции
1269
  * ebx = 25 - номер подфункции
1267
  * ecx = 2 - номер подподфункции
1270
  * ecx = 2  - номер подподфункции
1268
  * edx = -1(для текущего окна) или PID приложения
1271
  * edx = -1 (для текущего окна) или PID приложения
1269
  * esi = новое положение окна (одна из констант ниже)
1272
  * esi = новое положение окна (одна из констант ниже)
1270
Возвращаемое значение:
1273
Возвращаемое значение:
1271
  * eax = 0 - неудача
1274
  * eax = 0 - неудача
1272
  * eax = 1 - успех
1275
  * eax = 1 - успех
1273
 
1276
 
1274
Константы положения окна относительно других окон:
1277
Константы положения окна относительно других окон:
1275
 ZPOS_DESKTOP     = -2 - на самом заднем плане
1278
 ZPOS_DESKTOP     = -2 - на самом заднем плане
1276
 ZPOS_ALWAYS_BACK = -1 - позади всех окон
1279
 ZPOS_ALWAYS_BACK = -1 - позади всех окон
1277
 ZPOS_NORMAL      = 0  - обычное
1280
 ZPOS_NORMAL      = 0  - обычное
1278
 ZPOS_ALWAYS_TOP  = 1  - поверх всех окон
1281
 ZPOS_ALWAYS_TOP  = 1  - поверх всех окон
1279
 
1282
 
1280
---------------------- Константы для регистров: ----------------------
1283
---------------------- Константы для регистров: ----------------------
1281
  eax - SF_SYSTEM (18)
1284
  eax - SF_SYSTEM (18)
1282
  ebx - SSF_WINDOW_BEHAVIOR (25)
1285
  ebx - SSF_WINDOW_BEHAVIOR (25)
1283
  ecx - SSSF_GET_WB (1), SSSF_SET_WB (2)
1286
  ecx - SSSF_GET_WB (1), SSSF_SET_WB (2)
1284
======================================================================
1287
======================================================================
1285
==================== Функция 20 - интерфейс MIDI. ====================
1288
==================== Функция 20 - интерфейс MIDI. ====================
1286
======================================================================
1289
======================================================================
-
 
1290
 
-
 
1291
 !!! ВНИМАНИЕ. Данный интерфейс устарел и не должен использоваться !!!
1287
 
1292
 
1288
------------------------ Подфункция 1 - сброс ------------------------
1293
------------------------ Подфункция 1 - сброс ------------------------
1289
Параметры:
1294
Параметры:
1290
  * eax = 20 - номер функции
1295
  * eax = 20 - номер функции
1291
  * ebx = 1 - номер подфункции
1296
  * ebx = 1  - номер подфункции
1292
 
1297
 
1293
-------------------- Подфункция 2 - вывести байт ---------------------
1298
-------------------- Подфункция 2 - вывести байт ---------------------
1294
Параметры:
1299
Параметры:
1295
  * eax = 20 - номер функции
1300
  * eax = 20 - номер функции
1296
  * ebx = 2 - номер подфункции
1301
  * ebx = 2  - номер подфункции
1297
  * cl = байт для вывода
1302
  * cl = байт для вывода
1298
Возвращаемое значение (одинаково для обеих подфункций):
1303
Возвращаемое значение (одинаково для обеих подфункций):
1299
  * eax = 0 - успешно
1304
  * eax = 0 - успешно
1300
  * eax = 1 - не определён базовый порт
1305
  * eax = 1 - не определён базовый порт
1301
Замечания:
1306
Замечания:
1302
  * Предварительно должен быть определён базовый порт вызовом
1307
  * Предварительно должен быть определён базовый порт вызовом
1303
    подфункции 1 функции 21.
1308
    подфункции 1 функции 21.
1304
 
1309
 
1305
---------------------- Константы для регистров: ----------------------
1310
---------------------- Константы для регистров: ----------------------
1306
  eax - SF_MIDI (20)
1311
  eax - SF_MIDI (20)
1307
  ebx - SSF_RESET (1), SSF_OUTPUT (2)
1312
  ebx - SSF_RESET (1), SSF_OUTPUT (2)
1308
======================================================================
1313
======================================================================
1309
==== Функция 21, подфункция 1 - установить базовый порт MPU MIDI. ====
1314
==== Функция 21, подфункция 1 - установить базовый порт MPU MIDI. ====
1310
======================================================================
1315
======================================================================
-
 
1316
 
-
 
1317
 !!! ВНИМАНИЕ. Данный интерфейс устарел и не должен использоваться !!!
-
 
1318
 
1311
Параметры:
1319
Параметры:
1312
  * eax = 21 - номер функции
1320
  * eax = 21 - номер функции
1313
  * ebx = 1 - номер подфункции
1321
  * ebx = 1 - номер подфункции
1314
  * ecx = номер базового порта
1322
  * ecx = номер базового порта
1315
Возвращаемое значение:
1323
Возвращаемое значение:
1316
  * eax = 0 - успешно
1324
  * eax = 0 - успешно
1317
  * eax = -1 - ошибочный номер порта
1325
  * eax = -1 - ошибочный номер порта
1318
Замечания:
1326
Замечания:
1319
  * Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF.
1327
  * Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF.
1320
  * Установка базы нужна для работы функции 20.
1328
  * Установка базы нужна для работы функции 20.
1321
  * Получить установленный базовый порт можно вызовом
1329
  * Получить установленный базовый порт можно вызовом
1322
    подфункции 1 функции 26.
1330
    подфункции 1 функции 26.
1323
 
1331
 
1324
---------------------- Константы для регистров: ----------------------
1332
---------------------- Константы для регистров: ----------------------
1325
  eax - SF_SYSTEM_SET (21)
1333
  eax - SF_SYSTEM_SET (21)
1326
  ebx - SSF_MPU_MIDI_BASE (1)
1334
  ebx - SSF_MPU_MIDI_BASE (1)
1327
======================================================================
1335
======================================================================
1328
===== Функция 21, подфункция 2 - установить раскладку клавиатуры. ====
1336
===== Функция 21, подфункция 2 - установить раскладку клавиатуры. ====
1329
======================================================================
1337
======================================================================
1330
Раскладка клавиатуры используется для преобразования сканкодов,
1338
Раскладка клавиатуры используется для преобразования сканкодов,
1331
поступающих от клавиатуры, в ASCII-коды, считываемые функцией 2.
1339
поступающих от клавиатуры, в ASCII-коды, считываемые функцией 2.
1332
Параметры:
1340
Параметры:
1333
  * eax = 21 - номер функции
1341
  * eax = 21 - номер функции
1334
  * ebx = 2 - номер подфункции
1342
  * ebx = 2 - номер подфункции
1335
  * ecx = какую раскладку устанавливать:
1343
  * ecx = какую раскладку устанавливать:
1336
    * 1 = нормальную
1344
    * 1 = нормальную
1337
    * 2 = раскладку при нажатом Shift
1345
    * 2 = раскладку при нажатом Shift
1338
    * 3 = раскладку при нажатом Alt
1346
    * 3 = раскладку при нажатом Alt
1339
  * edx = указатель на раскладку - таблицу длиной 128 байт
1347
  * edx = указатель на раскладку - таблицу длиной 128 байт
1340
Или:
1348
Или:
1341
  * ecx = 9
1349
  * ecx = 9
1342
  * dx = идентификатор страны (1=eng, 2=fi, 3=ger, 4=rus)
1350
  * dx = идентификатор страны (1=eng, 2=fi, 3=ger, 4=rus)
1343
Возвращаемое значение:
1351
Возвращаемое значение:
1344
  * eax = 0 - успешно
1352
  * eax = 0 - успешно
1345
  * eax = 1 - параметр задан неверно
1353
  * eax = 1 - параметр задан неверно
1346
Замечания:
1354
Замечания:
1347
  * Если нажат Alt, то используется раскладка с Alt;
1355
  * Если нажат Alt, то используется раскладка с Alt;
1348
    если не нажат Alt, но нажат Shift, то
1356
    если не нажат Alt, но нажат Shift, то
1349
    используется раскладка с Shift;
1357
    используется раскладка с Shift;
1350
    если не нажаты Alt и Shift, но нажат Ctrl, то используется
1358
    если не нажаты Alt и Shift, но нажат Ctrl, то используется
1351
    нормальная раскладка, после чего из кода вычитается 0x60;
1359
    нормальная раскладка, после чего из кода вычитается 0x60;
1352
    если не нажата ни одна из управляющих клавиш, то используется
1360
    если не нажата ни одна из управляющих клавиш, то используется
1353
    нормальная раскладка.
1361
    нормальная раскладка.
1354
  * Получить раскладки и идентификатор страны можно с помощью
1362
  * Получить раскладки и идентификатор страны можно с помощью
1355
    подфункции 2 функции 26.
1363
    подфункции 2 функции 26.
1356
  * Идентификатор страны - глобальная системная переменная, которая
1364
  * Идентификатор страны - глобальная системная переменная, которая
1357
    самим ядром не используется; однако приложение @taskbar отображает
1365
    самим ядром не используется; однако приложение @taskbar отображает
1358
    соответствующую текущей стране иконку.
1366
    соответствующую текущей стране иконку.
1359
  * Приложение @taskbar переключает раскладки по запросу пользователя.
1367
  * Приложение @taskbar переключает раскладки по запросу пользователя.
1360
 
1368
 
1361
---------------------- Константы для регистров: ----------------------
1369
---------------------- Константы для регистров: ----------------------
1362
  eax - SF_SYSTEM_SET (21)
1370
  eax - SF_SYSTEM_SET (21)
1363
  ebx - SSF_KEYBOARD_LAYOUT (2)
1371
  ebx - SSF_KEYBOARD_LAYOUT (2)
1364
======================================================================
1372
======================================================================
1365
========= Функция 21, подфункция 5 - установить язык системы. ========
1373
========= Функция 21, подфункция 5 - установить язык системы. ========
1366
======================================================================
1374
======================================================================
1367
Параметры:
1375
Параметры:
1368
  * eax = 21 - номер функции
1376
  * eax = 21 - номер функции
1369
  * ebx = 5 - номер подфункции
1377
  * ebx = 5 - номер подфункции
1370
  * ecx = язык системы (1=eng, 2=fi, 3=ger, 4=rus)
1378
  * ecx = язык системы (1=eng, 2=fi, 3=ger, 4=rus)
1371
Возвращаемое значение:
1379
Возвращаемое значение:
1372
  * eax = 0
1380
  * eax = 0
1373
Замечания:
1381
Замечания:
1374
  * Язык системы - глобальная системная переменная, никак
1382
  * Язык системы - глобальная системная переменная, никак
1375
    не используемая самим ядром, однако приложение @taskbar рисует
1383
    не используемая самим ядром, однако приложение @taskbar рисует
1376
    соответствующую иконку.
1384
    соответствующую иконку.
1377
  * Проверок на корректность не делается, поскольку ядро эту
1385
  * Проверок на корректность не делается, поскольку ядро эту
1378
    переменную не использует.
1386
    переменную не использует.
1379
  * Получить язык системы можно вызовом подфункции 5 функции 26.
1387
  * Получить язык системы можно вызовом подфункции 5 функции 26.
1380
 
1388
 
1381
---------------------- Константы для регистров: ----------------------
1389
---------------------- Константы для регистров: ----------------------
1382
  eax - SF_SYSTEM_SET (21)
1390
  eax - SF_SYSTEM_SET (21)
1383
  ebx - SSF_SYS_LANG (5)
1391
  ebx - SSF_SYS_LANG (5)
1384
======================================================================
1392
======================================================================
1385
====================== Функция 21, подфункция 11 =====================
1393
====================== Функция 21, подфункция 11 =====================
1386
=========== Разрешить/запретить низкоуровневый доступ к HD. ==========
1394
=========== Разрешить/запретить низкоуровневый доступ к HD. ==========
1387
======================================================================
1395
======================================================================
1388
Параметры:
1396
Параметры:
1389
  * eax = 21 - номер функции
1397
  * eax = 21 - номер функции
1390
  * ebx = 11 - номер подфункции
1398
  * ebx = 11 - номер подфункции
1391
  * ecx = 0/1 - запретить/разрешить
1399
  * ecx = 0/1 - запретить/разрешить
1392
Возвращаемое значение:
1400
Возвращаемое значение:
1393
  * eax = 0
1401
  * eax = 0
1394
Замечания:
1402
Замечания:
1395
  * Используется при LBA-чтении (подфункция 8 функции 58).
1403
  * Используется при LBA-чтении (подфункция 8 функции 58).
1396
  * Текущая реализация использует только младший бит ecx.
1404
  * Текущая реализация использует только младший бит ecx.
1397
  * Получить текущее состояние можно вызовом подфункции 11 функции 26.
1405
  * Получить текущее состояние можно вызовом подфункции 11 функции 26.
1398
 
1406
 
1399
---------------------- Константы для регистров: ----------------------
1407
---------------------- Константы для регистров: ----------------------
1400
  eax - SF_SYSTEM_SET (21)
1408
  eax - SF_SYSTEM_SET (21)
1401
  ebx - SSF_ACCESS_HD_LBA (11)
1409
  ebx - SSF_ACCESS_HD_LBA (11)
1402
======================================================================
1410
======================================================================
1403
====================== Функция 21, подфункция 12 =====================
1411
====================== Функция 21, подфункция 12 =====================
1404
========== Разрешить/запретить низкоуровневый доступ к PCI. ==========
1412
========== Разрешить/запретить низкоуровневый доступ к PCI. ==========
1405
======================================================================
1413
======================================================================
1406
Параметры:
1414
Параметры:
1407
  * eax = 21 - номер функции
1415
  * eax = 21 - номер функции
1408
  * ebx = 12 - номер подфункции
1416
  * ebx = 12 - номер подфункции
1409
  * ecx = 0/1 - запретить/разрешить
1417
  * ecx = 0/1 - запретить/разрешить
1410
Возвращаемое значение:
1418
Возвращаемое значение:
1411
  * eax = 0
1419
  * eax = 0
1412
Замечания:
1420
Замечания:
1413
  * Используется при работе с шиной PCI (функция 62).
1421
  * Используется при работе с шиной PCI (функция 62).
1414
  * Текущая реализация использует только младший бит ecx.
1422
  * Текущая реализация использует только младший бит ecx.
1415
  * Получить текущее состояние можно вызовом подфункции 12 функции 26.
1423
  * Получить текущее состояние можно вызовом подфункции 12 функции 26.
1416
 
1424
 
1417
---------------------- Константы для регистров: ----------------------
1425
---------------------- Константы для регистров: ----------------------
1418
  eax - SF_SYSTEM_SET (21)
1426
  eax - SF_SYSTEM_SET (21)
1419
  ebx - SSF_ACCESS_PCI (12)
1427
  ebx - SSF_ACCESS_PCI (12)
1420
======================================================================
1428
======================================================================
1421
============ Функция 22 - установить системную дату/время. ===========
1429
============ Функция 22 - установить системную дату/время. ===========
1422
======================================================================
1430
======================================================================
1423
Параметры:
1431
Параметры:
1424
  * eax = 22 - номер функции
1432
  * eax = 22 - номер функции
1425
  * ebx = 0 - установить время
1433
  * ebx = 0 - установить время
1426
    * ecx = 0x00SSMMHH - время в двоично-десятичном коде (BCD):
1434
    * ecx = 0x00SSMMHH - время в двоично-десятичном коде (BCD):
1427
    * HH=час 00..23
1435
    * HH=час 00..23
1428
    * MM=минута 00..59
1436
    * MM=минута 00..59
1429
    * SS=секунда 00..59
1437
    * SS=секунда 00..59
1430
  * ebx = 1 - установить дату
1438
  * ebx = 1 - установить дату
1431
    * ecx = 0x00DDMMYY - дата в двоично-десятичном коде (BCD):
1439
    * ecx = 0x00DDMMYY - дата в двоично-десятичном коде (BCD):
1432
    * DD=день 01..31
1440
    * DD=день 01..31
1433
    * MM=месяц 01..12
1441
    * MM=месяц 01..12
1434
    * YY=год 00..99
1442
    * YY=год 00..99
1435
  * ebx = 2 - установить день недели
1443
  * ebx = 2 - установить день недели
1436
    * ecx = 1 для воскресенья, ..., 7 для субботы
1444
    * ecx = 1 для воскресенья, ..., 7 для субботы
1437
  * ebx = 3 - установить будильник
1445
  * ebx = 3 - установить будильник
1438
    * ecx = 0x00SSMMHH
1446
    * ecx = 0x00SSMMHH
1439
Возвращаемое значение:
1447
Возвращаемое значение:
1440
  * eax = 0 - успешно
1448
  * eax = 0 - успешно
1441
  * eax = 1 - параметр задан неверно
1449
  * eax = 1 - параметр задан неверно
1442
  * eax = 2 - CMOS-батарейки разрядились
1450
  * eax = 2 - CMOS-батарейки разрядились
1443
Замечания:
1451
Замечания:
1444
  * Ценность установки дня недели представляется сомнительной,
1452
  * Ценность установки дня недели представляется сомнительной,
1445
    поскольку он мало где используется
1453
    поскольку он мало где используется
1446
    (день недели можно рассчитать по дате).
1454
    (день недели можно рассчитать по дате).
1447
  * Будильник можно установить на срабатывание в заданное время
1455
  * Будильник можно установить на срабатывание в заданное время
1448
    каждые сутки. При этом отключить его существующими системными
1456
    каждые сутки. При этом отключить его существующими системными
1449
    функциями нельзя.
1457
    функциями нельзя.
1450
  * Срабатывание будильника заключается в генерации IRQ8.
1458
  * Срабатывание будильника заключается в генерации IRQ8.
1451
  * Вообще-то CMOS поддерживает для будильника установку значения
1459
  * Вообще-то CMOS поддерживает для будильника установку значения
1452
    0xFF в качестве одного из параметров и означает это, что
1460
    0xFF в качестве одного из параметров и означает это, что
1453
    соответствующий параметр игнорируется. Но в текущей реализации
1461
    соответствующий параметр игнорируется. Но в текущей реализации
1454
    это не пройдёт (вернётся значение 1).
1462
    это не пройдёт (вернётся значение 1).
1455
  * Будильник - глобальный системный ресурс; установка будильника
1463
  * Будильник - глобальный системный ресурс; установка будильника
1456
    автоматически отменяет предыдущую установку. Впрочем, на данный
1464
    автоматически отменяет предыдущую установку. Впрочем, на данный
1457
    момент ни одна программа его не использует.
1465
    момент ни одна программа его не использует.
1458
 
1466
 
1459
---------------------- Константы для регистров: ----------------------
1467
---------------------- Константы для регистров: ----------------------
1460
  eax - SF_SET_TIME_DATE (22)
1468
  eax - SF_SET_TIME_DATE (22)
1461
======================================================================
1469
======================================================================
1462
============== Функция 23 - ожидать события с таймаутом. =============
1470
============== Функция 23 - ожидать события с таймаутом. =============
1463
======================================================================
1471
======================================================================
1464
Если очередь сообщений пуста, ждёт появления сообщения в очереди,
1472
Если очередь сообщений пуста, ждёт появления сообщения в очереди,
1465
но не более указанного времени. Затем считывает сообщение из очереди.
1473
но не более указанного времени. Затем считывает сообщение из очереди.
1466
 
1474
 
1467
Параметры:
1475
Параметры:
1468
  * eax = 23 - номер функции
1476
  * eax = 23 - номер функции
1469
  * ebx = таймаут (в сотых долях секунды)
1477
  * ebx = таймаут (в сотых долях секунды)
1470
Возвращаемое значение:
1478
Возвращаемое значение:
1471
  * eax = 0 - очередь сообщений пуста
1479
  * eax = 0 - очередь сообщений пуста
1472
  * иначе eax = событие (смотри список событий)
1480
  * иначе eax = событие (смотри список событий)
1473
Замечания:
1481
Замечания:
1474
  * Учитываются только те события, которые входят в маску,
1482
  * Учитываются только те события, которые входят в маску,
1475
    устанавливаемую функцией 40. По умолчанию это события
1483
    устанавливаемую функцией 40. По умолчанию это события
1476
    перерисовки, нажатия на клавиши и на кнопки.
1484
    перерисовки, нажатия на клавиши и на кнопки.
1477
  * Для проверки, есть ли сообщение в очереди, используйте функцию 11.
1485
  * Для проверки, есть ли сообщение в очереди, используйте функцию 11.
1478
    Чтобы ждать сколь угодно долго, используйте функцию 10.
1486
    Чтобы ждать сколь угодно долго, используйте функцию 10.
1479
  * Передача ebx=0 приводит к моментальному возвращению eax=0.
1487
  * Передача ebx=0 приводит к моментальному возвращению eax=0.
1480
  * При текущей реализации произойдёт немедленный возврат из функции
1488
  * При текущей реализации произойдёт немедленный возврат из функции
1481
    с eax=0, если сложение ebx с текущим значением счётчика времени
1489
    с eax=0, если сложение ebx с текущим значением счётчика времени
1482
    вызовет 32-битное переполнение.
1490
    вызовет 32-битное переполнение.
1483
 
1491
 
1484
---------------------- Константы для регистров: ----------------------
1492
---------------------- Константы для регистров: ----------------------
1485
  eax - SF_WAIT_EVENT_TIMEOUT (23)
1493
  eax - SF_WAIT_EVENT_TIMEOUT (23)
1486
======================================================================
1494
======================================================================
1487
======= Функция 24, подфункция 4 - извлечь лоток привода диска. ======
1495
======= Функция 24, подфункция 4 - извлечь лоток привода диска. ======
1488
======================================================================
1496
======================================================================
-
 
1497
 
-
 
1498
 !!! ВНИМАНИЕ. Данный интерфейс устарел и не должен использоваться !!!
-
 
1499
 
1489
Параметры:
1500
Параметры:
1490
  * eax = 24 - номер функции
1501
  * eax = 24 - номер функции
1491
  * ebx = 4 - номер подфункции
1502
  * ebx = 4 - номер подфункции
1492
  * ecx = номер CD/DVD-диска
1503
  * ecx = номер CD/DVD-диска
1493
    от 0=Primary Master до 3=Secondary Slave для первого IDE контр.
1504
    от 0=Primary Master до 3=Secondary Slave для первого IDE контр.
1494
    от 4=Primary Master до 7=Secondary Slave для второго IDE контр.
1505
    от 4=Primary Master до 7=Secondary Slave для второго IDE контр.
1495
    от 8=Primary Master до 11=Secondary Slave для третьего IDE контр.
1506
    от 8=Primary Master до 11=Secondary Slave для третьего IDE контр.
1496
Возвращаемое значение:
1507
Возвращаемое значение:
1497
  * функция не возвращает значения
1508
  * функция не возвращает значения
1498
Замечания:
1509
Замечания:
1499
  * Функция поддерживается только для ATAPI-устройств (CD и DVD).
1510
  * Функция поддерживается только для ATAPI-устройств (CD и DVD).
1500
  * При извлечении лотка производится разблокировка ручного управления
1511
  * При извлечении лотка производится разблокировка ручного управления
1501
    механизмом лотка.
1512
    механизмом лотка.
1502
  * При извлечении лотка код производит очистку кэша соответствующего
1513
  * При извлечении лотка код производит очистку кэша соответствующего
1503
    устройства.
1514
    устройства.
1504
  * Примером использования функции является приложение CD_tray.
1515
  * Примером использования функции является приложение CD_tray.
1505
 
1516
 
1506
---------------------- Константы для регистров: ----------------------
1517
---------------------- Константы для регистров: ----------------------
1507
  eax - SF_CD (24)
1518
  eax - SF_CD (24)
1508
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1519
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1509
======================================================================
1520
======================================================================
1510
====== Функция 24, подфункция 5 - загрузить лоток привода диска. =====
1521
====== Функция 24, подфункция 5 - загрузить лоток привода диска. =====
1511
======================================================================
1522
======================================================================
-
 
1523
 
-
 
1524
 !!! ВНИМАНИЕ. Данный интерфейс устарел и не должен использоваться !!!
-
 
1525
 
1512
Параметры:
1526
Параметры:
1513
  * eax = 24 - номер функции
1527
  * eax = 24 - номер функции
1514
  * ebx = 5 - номер подфункции
1528
  * ebx = 5 - номер подфункции
1515
  * ecx = номер CD/DVD-диска
1529
  * ecx = номер CD/DVD-диска
1516
    от 0=Primary Master до 3=Secondary Slave для первого IDE контр.
1530
    от 0=Primary Master до 3=Secondary Slave для первого IDE контр.
1517
    от 4=Primary Master до 7=Secondary Slave для второго IDE контр.
1531
    от 4=Primary Master до 7=Secondary Slave для второго IDE контр.
1518
    от 8=Primary Master до 11=Secondary Slave для третьего IDE контр.
1532
    от 8=Primary Master до 11=Secondary Slave для третьего IDE контр.
1519
Возвращаемое значение:
1533
Возвращаемое значение:
1520
  * функция не возвращает значения
1534
  * функция не возвращает значения
1521
Замечания:
1535
Замечания:
1522
  * Функция поддерживается только для ATAPI-устройств (CD и DVD).
1536
  * Функция поддерживается только для ATAPI-устройств (CD и DVD).
1523
  * Примером использования функции является приложение CD_tray.
1537
  * Примером использования функции является приложение CD_tray.
1524
 
1538
 
1525
---------------------- Константы для регистров: ----------------------
1539
---------------------- Константы для регистров: ----------------------
1526
  eax - SF_CD (24)
1540
  eax - SF_CD (24)
1527
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1541
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1528
======================================================================
1542
======================================================================
1529
========== Функция 25 - записать область на слой фона. ===============
1543
========== Функция 25 - записать область на слой фона. ===============
1530
======================================================================
1544
======================================================================
1531
Параметры:
1545
Параметры:
1532
  * eax = 25 - номер функции
1546
  * eax = 25 - номер функции
1533
  * ebx = указатель на предварительно выделенную область памяти,
1547
  * ebx = указатель на предварительно выделенную область памяти,
1534
      где размещено исходное изображение в формате BBGGRRTTBBGGRRTT...
1548
      где размещено исходное изображение в формате BBGGRRTTBBGGRRTT...
1535
  * ecx = [размер по оси x]*65536 + [размер по оси y]
1549
  * ecx = [размер по оси x]*65536 + [размер по оси y]
1536
  * edx = [координата по оси x]*65536 + [координата по оси y]
1550
  * edx = [координата по оси x]*65536 + [координата по оси y]
1537
Возвращаемое значение:
1551
Возвращаемое значение:
1538
  * функция не возвращает значения
1552
  * функция не возвращает значения
1539
Замечания:
1553
Замечания:
1540
  * Координаты области - это координаты верхнего левого угла
1554
  * Координаты области - это координаты верхнего левого угла
1541
    области относительно экрана.
1555
    области относительно экрана.
1542
  * Размер изображения в байтах есть 4*xsize*ysize.
1556
  * Размер изображения в байтах есть 4*xsize*ysize.
1543
  * TT - байт указатель прозрачности, в настоящее время:
1557
  * TT - байт указатель прозрачности, в настоящее время:
1544
         от 1 до FF - непрозрачно, от 0 - прозрачно.
1558
         от 1 до FF - непрозрачно, от 0 - прозрачно.
1545
  * Функция размещает изображение не на фоновое изображение (ф.15),
1559
  * Функция размещает изображение не на фоновое изображение (ф.15),
1546
    а напрямую в LFB. Опции ф.15 для ф. 25 не имеют смысла.
1560
    а напрямую в LFB. Опции ф.15 для ф. 25 не имеют смысла.
1547
 
1561
 
1548
---------------------- Константы для регистров: ----------------------
1562
---------------------- Константы для регистров: ----------------------
1549
  eax - SF_SCREEN_PUT_IMAGE (25)
1563
  eax - SF_SCREEN_PUT_IMAGE (25)
1550
======================================================================
1564
======================================================================
1551
===== Функция 26, подфункция 1 - получить базовый порт MPU MIDI. =====
1565
===== Функция 26, подфункция 1 - получить базовый порт MPU MIDI. =====
1552
======================================================================
1566
======================================================================
-
 
1567
 
-
 
1568
 !!! ВНИМАНИЕ. Данный интерфейс устарел и не должен использоваться !!! 
-
 
1569
 
1553
Параметры:
1570
Параметры:
1554
  * eax = 26 - номер функции
1571
  * eax = 26 - номер функции
1555
  * ebx = 1 - номер подфункции
1572
  * ebx = 1 - номер подфункции
1556
Возвращаемое значение:
1573
Возвращаемое значение:
1557
  * eax = номер порта
1574
  * eax = номер порта
1558
Замечания:
1575
Замечания:
1559
  * Установить базовый порт можно вызовом
1576
  * Установить базовый порт можно вызовом
1560
    подфункции 1 функции 21.
1577
    подфункции 1 функции 21.
1561
 
1578
 
1562
---------------------- Константы для регистров: ----------------------
1579
---------------------- Константы для регистров: ----------------------
1563
  eax - SF_SYSTEM_GET (26)
1580
  eax - SF_SYSTEM_GET (26)
1564
  ebx - SSF_MPU_MIDI_BASE (1)
1581
  ebx - SSF_MPU_MIDI_BASE (1)
1565
======================================================================
1582
======================================================================
1566
====== Функция 26, подфункция 2 - получить раскладку клавиатуры. =====
1583
====== Функция 26, подфункция 2 - получить раскладку клавиатуры. =====
1567
======================================================================
1584
======================================================================
1568
Раскладка клавиатуры используется для преобразования сканкодов,
1585
Раскладка клавиатуры используется для преобразования сканкодов,
1569
поступающих от клавиатуры, в ASCII-коды, считываемые функцией 2.
1586
поступающих от клавиатуры, в ASCII-коды, считываемые функцией 2.
1570
Параметры:
1587
Параметры:
1571
  * eax = 26 - номер функции
1588
  * eax = 26 - номер функции
1572
  * ebx = 2 - номер подфункции
1589
  * ebx = 2 - номер подфункции
1573
  * ecx = какую раскладку получать:
1590
  * ecx = какую раскладку получать:
1574
    * 1 = нормальную
1591
    * 1 = нормальную
1575
    * 2 = раскладку при нажатом Shift
1592
    * 2 = раскладку при нажатом Shift
1576
    * 3 = раскладку при нажатом Alt
1593
    * 3 = раскладку при нажатом Alt
1577
  * edx = указатель на буфер длиной 128 байт, куда будет скопирована
1594
  * edx = указатель на буфер длиной 128 байт, куда будет скопирована
1578
    раскладка
1595
    раскладка
1579
Возвращаемое значение:
1596
Возвращаемое значение:
1580
  * функция не возвращает значения,
1597
  * функция не возвращает значения,
1581
    но, если указатель в edx недопустимый, например,
1598
    но, если указатель в edx недопустимый, например,
1582
    регион [edx, edx + 128) пересекается с памятью ядра,
1599
    регион [edx, edx + 128) пересекается с памятью ядра,
1583
    то тогда функция возвращает -1
1600
    то тогда функция возвращает -1
1584
Или:
1601
Или:
1585
  * eax = 26 - номер функции
1602
  * eax = 26 - номер функции
1586
  * ebx = 2 - номер подфункции
1603
  * ebx = 2 - номер подфункции
1587
  * ecx = 9
1604
  * ecx = 9
1588
Возвращаемое значение:
1605
Возвращаемое значение:
1589
  * eax = идентификатор страны (1=eng, 2=fi, 3=ger, 4=rus)
1606
  * eax = идентификатор страны (1=eng, 2=fi, 3=ger, 4=rus)
1590
Замечания:
1607
Замечания:
1591
  * Если нажат Alt, то используется раскладка с Alt;
1608
  * Если нажат Alt, то используется раскладка с Alt;
1592
    если не нажат Alt, но нажат Shift, то используется
1609
    если не нажат Alt, но нажат Shift, то используется
1593
    раскладка с Shift;
1610
    раскладка с Shift;
1594
    если не нажаты Alt и Shift, но нажат Ctrl, то используется
1611
    если не нажаты Alt и Shift, но нажат Ctrl, то используется
1595
    нормальная раскладка, после чего из кода вычитается 0x60;
1612
    нормальная раскладка, после чего из кода вычитается 0x60;
1596
    если не нажата ни одна из управляющих клавиш, то используется
1613
    если не нажата ни одна из управляющих клавиш, то используется
1597
    нормальная раскладка.
1614
    нормальная раскладка.
1598
  * Установить раскладки и идентификатор страны можно с помощью
1615
  * Установить раскладки и идентификатор страны можно с помощью
1599
    подфункции 2 функции 21.
1616
    подфункции 2 функции 21.
1600
  * Идентификатор страны - глобальная системная переменная, которая
1617
  * Идентификатор страны - глобальная системная переменная, которая
1601
    самим ядром не используется; однако приложение @taskbar отображает
1618
    самим ядром не используется; однако приложение @taskbar отображает
1602
    соответствующую текущей стране иконку
1619
    соответствующую текущей стране иконку
1603
    (используя описываемую функцию).
1620
    (используя описываемую функцию).
1604
  * Приложение @taskbar переключает раскладки по запросу пользователя.
1621
  * Приложение @taskbar переключает раскладки по запросу пользователя.
1605
 
1622
 
1606
---------------------- Константы для регистров: ----------------------
1623
---------------------- Константы для регистров: ----------------------
1607
  eax - SF_SYSTEM_GET (26)
1624
  eax - SF_SYSTEM_GET (26)
1608
  ebx - SSF_KEYBOARD_LAYOUT (2)
1625
  ebx - SSF_KEYBOARD_LAYOUT (2)
1609
======================================================================
1626
======================================================================
1610
========== Функция 26, подфункция 5 - получить язык системы. =========
1627
========== Функция 26, подфункция 5 - получить язык системы. =========
1611
======================================================================
1628
======================================================================
1612
Параметры:
1629
Параметры:
1613
  * eax = 26 - номер функции
1630
  * eax = 26 - номер функции
1614
  * ebx = 5 - номер подфункции
1631
  * ebx = 5 - номер подфункции
1615
Возвращаемое значение:
1632
Возвращаемое значение:
1616
  * eax = язык системы (1=eng, 2=fi, 3=ger, 4=rus)
1633
  * eax = язык системы (1=eng, 2=fi, 3=ger, 4=rus)
1617
Замечания:
1634
Замечания:
1618
  * Язык системы - глобальная системная переменная, никак
1635
  * Язык системы - глобальная системная переменная, никак
1619
    не используемая самим ядром, однако приложение @taskbar рисует
1636
    не используемая самим ядром, однако приложение @taskbar рисует
1620
    соответствующую иконку (используя описываемую функцию).
1637
    соответствующую иконку (используя описываемую функцию).
1621
  * Установить язык системы можно вызовом подфункции 5 функции 21.
1638
  * Установить язык системы можно вызовом подфункции 5 функции 21.
1622
 
1639
 
1623
---------------------- Константы для регистров: ----------------------
1640
---------------------- Константы для регистров: ----------------------
1624
  eax - SF_SYSTEM_GET (26)
1641
  eax - SF_SYSTEM_GET (26)
1625
  ebx - SSF_SYS_LANG (5)
1642
  ebx - SSF_SYS_LANG (5)
1626
======================================================================
1643
======================================================================
1627
=== Функция 26, подфункция 9 - получить значение счётчика времени. ===
1644
=== Функция 26, подфункция 9 - получить значение счётчика времени. ===
1628
======================================================================
1645
======================================================================
1629
Параметры:
1646
Параметры:
1630
  * eax = 26 - номер функции
1647
  * eax = 26 - номер функции
1631
  * ebx = 9 - номер подфункции
1648
  * ebx = 9 - номер подфункции
1632
Возвращаемое значение:
1649
Возвращаемое значение:
1633
  * eax = число сотых долей секунды, прошедших с момента
1650
  * eax = число сотых долей секунды, прошедших с момента
1634
    запуска системы
1651
    запуска системы
1635
Замечания:
1652
Замечания:
1636
  * Счётчик берётся по модулю 2^32, что соответствует немногим более
1653
  * Счётчик берётся по модулю 2^32, что соответствует немногим более
1637
    497 суток.
1654
    497 суток.
1638
  * Системное время можно получить функцией 3.
1655
  * Системное время можно получить функцией 3.
1639
 
1656
 
1640
---------------------- Константы для регистров: ----------------------
1657
---------------------- Константы для регистров: ----------------------
1641
  eax - SF_SYSTEM_GET (26)
1658
  eax - SF_SYSTEM_GET (26)
1642
  ebx - SSF_TIME_COUNT (9)
1659
  ebx - SSF_TIME_COUNT (9)
1643
======================================================================
1660
======================================================================
1644
===================== Функция 26, подфункция 10 ======================
1661
===================== Функция 26, подфункция 10 ======================
1645
========== Получить значение высокоточного счётчика времени. =========
1662
========== Получить значение высокоточного счётчика времени. =========
1646
======================================================================
1663
======================================================================
1647
Parameters:
1664
Parameters:
1648
  * eax = 26 - номер функции
1665
  * eax = 26 - номер функции
1649
  * ebx = 10 - номер подфункции
1666
  * ebx = 10 - номер подфункции
1650
Returned value:
1667
Returned value:
1651
  * edx:eax = число наносекунд с момента загрузки ядра
1668
  * edx:eax = число наносекунд с момента загрузки ядра
1652
  * eax = младшее двойное слово
1669
  * eax = младшее двойное слово
1653
  * edx = старшее двойное слово
1670
  * edx = старшее двойное слово
1654
Remarks:
1671
Remarks:
1655
  * функция использует счётчик HPET, если HPET не доступен используется
1672
  * функция использует счётчик HPET, если HPET не доступен используется
1656
    счётчик PIT. В этом случае точность будет уменьшена до 10 000 000
1673
    счётчик PIT. В этом случае точность будет уменьшена до 10 000 000
1657
    наносекунд.
1674
    наносекунд.
1658
 
1675
 
1659
---------------------- Константы для регистров: ----------------------
1676
---------------------- Константы для регистров: ----------------------
1660
  eax - SF_SYSTEM_GET (26)
1677
  eax - SF_SYSTEM_GET (26)
1661
  ebx - SSF_TIME_COUNT_PRO (10)
1678
  ebx - SSF_TIME_COUNT_PRO (10)
1662
======================================================================
1679
======================================================================
1663
====================== Функция 26, подфункция 11 =====================
1680
====================== Функция 26, подфункция 11 =====================
1664
=========== Узнать, разрешён ли низкоуровневый доступ к HD. ==========
1681
=========== Узнать, разрешён ли низкоуровневый доступ к HD. ==========
1665
======================================================================
1682
======================================================================
1666
Параметры:
1683
Параметры:
1667
  * eax = 26 - номер функции
1684
  * eax = 26 - номер функции
1668
  * ebx = 11 - номер подфункции
1685
  * ebx = 11 - номер подфункции
1669
Возвращаемое значение:
1686
Возвращаемое значение:
1670
  * eax = 0/1 - запрещён/разрешён
1687
  * eax = 0/1 - запрещён/разрешён
1671
Замечания:
1688
Замечания:
1672
  * Используется при LBA-чтении (подфункция 8 функции 58).
1689
  * Используется при LBA-чтении (подфункция 8 функции 58).
1673
  * Установить текущее состояние можно вызовом
1690
  * Установить текущее состояние можно вызовом
1674
    подфункции 11 функции 21.
1691
    подфункции 11 функции 21.
1675
 
1692
 
1676
---------------------- Константы для регистров: ----------------------
1693
---------------------- Константы для регистров: ----------------------
1677
  eax - SF_SYSTEM_GET (26)
1694
  eax - SF_SYSTEM_GET (26)
1678
  ebx - SSF_ACCESS_HD_LBA (11)
1695
  ebx - SSF_ACCESS_HD_LBA (11)
1679
======================================================================
1696
======================================================================
1680
====================== Функция 26, подфункция 12 =====================
1697
====================== Функция 26, подфункция 12 =====================
1681
========== Узнать, разрешён ли низкоуровневый доступ к PCI. ==========
1698
========== Узнать, разрешён ли низкоуровневый доступ к PCI. ==========
1682
======================================================================
1699
======================================================================
1683
Параметры:
1700
Параметры:
1684
  * eax = 26 - номер функции
1701
  * eax = 26 - номер функции
1685
  * ebx = 12 - номер подфункции
1702
  * ebx = 12 - номер подфункции
1686
Возвращаемое значение:
1703
Возвращаемое значение:
1687
  * eax = 0/1 - запрещён/разрешён
1704
  * eax = 0/1 - запрещён/разрешён
1688
Замечания:
1705
Замечания:
1689
  * Используется при работе с шиной PCI (функция 62).
1706
  * Используется при работе с шиной PCI (функция 62).
1690
  * Текущая реализация использует только младший бит ecx.
1707
  * Текущая реализация использует только младший бит ecx.
1691
  * Установить текущее состояние можно вызовом
1708
  * Установить текущее состояние можно вызовом
1692
    подфункции 12 функции 21.
1709
    подфункции 12 функции 21.
1693
 
1710
 
1694
---------------------- Константы для регистров: ----------------------
1711
---------------------- Константы для регистров: ----------------------
1695
  eax - SF_SYSTEM_GET (26)
1712
  eax - SF_SYSTEM_GET (26)
1696
  ebx - SSF_ACCESS_PCI (12)
1713
  ebx - SSF_ACCESS_PCI (12)
1697
======================================================================
1714
======================================================================
1698
================ Функция 29 - получить системную дату. ===============
1715
================ Функция 29 - получить системную дату. ===============
1699
======================================================================
1716
======================================================================
1700
Параметры:
1717
Параметры:
1701
  * eax = 29 - номер функции
1718
  * eax = 29 - номер функции
1702
Возвращаемое значение:
1719
Возвращаемое значение:
1703
  * eax = 0x00DDMMYY, где
1720
  * eax = 0x00DDMMYY, где
1704
    (используется двоично-десятичное кодирование, BCD)
1721
    (используется двоично-десятичное кодирование, BCD)
1705
  * YY = две младшие цифры года (00..99)
1722
  * YY = две младшие цифры года (00..99)
1706
  * MM = месяц (01..12)
1723
  * MM = месяц (01..12)
1707
  * DD = день (01..31)
1724
  * DD = день (01..31)
1708
Замечания:
1725
Замечания:
1709
  * Системную дату можно установить функцией 22.
1726
  * Системную дату можно установить функцией 22.
1710
 
1727
 
1711
---------------------- Константы для регистров: ----------------------
1728
---------------------- Константы для регистров: ----------------------
1712
  eax - SF_GET_SYS_DATE (29)
1729
  eax - SF_GET_SYS_DATE (29)
1713
======================================================================
1730
======================================================================
1714
================ Функция 30 - работа с текущей папкой. ===============
1731
================ Функция 30 - работа с текущей папкой. ===============
1715
======================================================================
1732
======================================================================
1716
-------- Подфункция 1 - установить текущую папку для потока. ---------
1733
-------- Подфункция 1 - установить текущую папку для потока. ---------
1717
Параметры:
1734
Параметры:
1718
  * eax = 30 - номер функции
1735
  * eax = 30 - номер функции
1719
  * ebx = 1 - номер подфункции
1736
  * ebx = 1 - номер подфункции
1720
  * ecx = указатель на строку с путём к новой текущей папке,
1737
  * ecx = указатель на строку с путём к новой текущей папке,
1721
    правила формирования строки указаны в описании функции 70.
1738
    правила формирования строки указаны в описании функции 70.
1722
Возвращаемое значение:
1739
Возвращаемое значение:
1723
  * функция не возвращает значения
1740
  * функция не возвращает значения
1724
----------------------------------------------------------------------
1741
----------------------------------------------------------------------
1725
--------- Подфункция 2 - получить текущую папку для потока. ----------
1742
--------- Подфункция 2 - получить текущую папку для потока. ----------
1726
Параметры:
1743
Параметры:
1727
  * eax = 30 - номер функции
1744
  * eax = 30 - номер функции
1728
  * ebx = 2 - номер подфункции
1745
  * ebx = 2 - номер подфункции
1729
  * ecx = указатель на буфер
1746
  * ecx = указатель на буфер
1730
  * edx = размер буфера
1747
  * edx = размер буфера
1731
Возвращаемое значение:
1748
Возвращаемое значение:
1732
  * eax = длина строки (включая завершающий 0)
1749
  * eax = длина строки (включая завершающий 0)
1733
Замечания:
1750
Замечания:
1734
  * Если размера буфера недостаточно для копирования всего пути,
1751
  * Если размера буфера недостаточно для копирования всего пути,
1735
    копируются только часть строки и в конце ставится завершающий 0.
1752
    копируются только часть строки и в конце ставится завершающий 0.
1736
  * По умолчанию, текущая папка для потока - "/rd/1".
1753
  * По умолчанию, текущая папка для потока - "/rd/1".
1737
  * При создании процесса/потока текущая папка наследуется от
1754
  * При создании процесса/потока текущая папка наследуется от
1738
    родителя.
1755
    родителя.
1739
----------------------------------------------------------------------
1756
----------------------------------------------------------------------
1740
---- Подфункция 3 - установить доп. системную директорию для ядра ----
1757
---- Подфункция 3 - установить доп. системную директорию для ядра ----
1741
Параметры:
1758
Параметры:
1742
  * eax = 30 - номер функции
1759
  * eax = 30 - номер функции
1743
  * ebx = 3 - номер подфункции
1760
  * ebx = 3 - номер подфункции
1744
  * ecx = указатель на блок данных:
1761
  * ecx = указатель на блок данных:
1745
key     rb  64
1762
key     rb  64
1746
path    rb  64
1763
path    rb  64
1747
    Пример:
1764
    Пример:
1748
align 64
1765
align 64
1749
key     db  'kolibrios',0   ; ключ должен быть в нижнем регистре
1766
key     db  'kolibrios',0   ; ключ должен быть в нижнем регистре
1750
align 64
1767
align 64
1751
path    db  'HD0/1',0
1768
path    db  'HD0/1',0
1752
 
1769
 
1753
Возвращаемое значение:
1770
Возвращаемое значение:
1754
  * функция не возвращает значения
1771
  * функция не возвращает значения
1755
Замечания:
1772
Замечания:
1756
  * Функция может быть вызвана только 1 раз за 1 сессию работы ОС.
1773
  * Функция может быть вызвана только 1 раз за 1 сессию работы ОС.
1757
  * При вводе пути символьный ключ не зависит от кодировки.
1774
  * При вводе пути символьный ключ не зависит от кодировки.
1758
----------------------------------------------------------------------
1775
----------------------------------------------------------------------
1759
--- Подфункция 4 - установить текущую папку с указанием кодировки. ---
1776
--- Подфункция 4 - установить текущую папку с указанием кодировки. ---
1760
Параметры:
1777
Параметры:
1761
  * eax = 30 - номер функции
1778
  * eax = 30 - номер функции
1762
  * ebx = 4 - номер подфункции
1779
  * ebx = 4 - номер подфункции
1763
  * ecx = указатель на строку с путём к новой текущей папке
1780
  * ecx = указатель на строку с путём к новой текущей папке
1764
  * edx = кодировка строки, подробности указаны в описании функции 80.
1781
  * edx = кодировка строки, подробности указаны в описании функции 80.
1765
Возвращаемое значение:
1782
Возвращаемое значение:
1766
  * функция не возвращает значения
1783
  * функция не возвращает значения
1767
----------------------------------------------------------------------
1784
----------------------------------------------------------------------
1768
---- Подфункция 5 - получить текущую папку с указанием кодировки. ----
1785
---- Подфункция 5 - получить текущую папку с указанием кодировки. ----
1769
Параметры:
1786
Параметры:
1770
  * eax = 30 - номер функции
1787
  * eax = 30 - номер функции
1771
  * ebx = 5 - номер подфункции
1788
  * ebx = 5 - номер подфункции
1772
  * ecx = указатель на буфер
1789
  * ecx = указатель на буфер
1773
  * edx = размер буфера
1790
  * edx = размер буфера
1774
  * esi = кодировка строки
1791
  * esi = кодировка строки
1775
Возвращаемое значение:
1792
Возвращаемое значение:
1776
  * eax = длина строки в байтах (включая завершающий 0)
1793
  * eax = длина строки в байтах (включая завершающий 0)
1777
Замечания:
1794
Замечания:
1778
  * Если размера буфера недостаточно для копирования всего пути,
1795
  * Если размера буфера недостаточно для копирования всего пути,
1779
    копируются только часть строки и в конце ставится завершающий 0.
1796
    копируются только часть строки и в конце ставится завершающий 0.
1780
  * По умолчанию, текущая папка для потока - "/rd/1".
1797
  * По умолчанию, текущая папка для потока - "/rd/1".
1781
  * При создании процесса/потока текущая папка наследуется от
1798
  * При создании процесса/потока текущая папка наследуется от
1782
    родителя.
1799
    родителя.
1783
 
1800
 
1784
---------------------- Константы для регистров: ----------------------
1801
---------------------- Константы для регистров: ----------------------
1785
  eax - SF_CURRENT_FOLDER (30)
1802
  eax - SF_CURRENT_FOLDER (30)
1786
  ebx - SSF_SET_CF (1), SSF_GET_CF (2), SSF_ADD_SYS_FOLDER (3)
1803
  ebx - SSF_SET_CF (1), SSF_GET_CF (2), SSF_ADD_SYS_FOLDER (3)
1787
======================================================================
1804
======================================================================
1788
========= Функция 34 - узнать кому принадлежит точка экрана. =========
1805
========= Функция 34 - узнать кому принадлежит точка экрана. =========
1789
======================================================================
1806
======================================================================
1790
Параметры:
1807
Параметры:
1791
  * eax = 34 - номер функции
1808
  * eax = 34 - номер функции
1792
  * ebx = x-координата (относительно экрана)
1809
  * ebx = x-координата (относительно экрана)
1793
  * ecx = y-координата (относительно экрана)
1810
  * ecx = y-координата (относительно экрана)
1794
 
1811
 
1795
Возвращаемое значение:
1812
Возвращаемое значение:
1796
  * eax = 0x000000XX - точка принадлежит слоту окна N
1813
  * eax = 0x000000XX - точка принадлежит слоту окна N
1797
    При некорректных значениях ebx и ecx функция возвращает 0
1814
    При некорректных значениях ebx и ecx функция возвращает 0
1798
  * Функция берет значения из области [_WinMapAddress]
1815
  * Функция берет значения из области [_WinMapAddress]
1799
 
1816
 
1800
---------------------- Константы для регистров: ----------------------
1817
---------------------- Константы для регистров: ----------------------
1801
  eax - SF_GET_PIXEL_OWNER (34)
1818
  eax - SF_GET_PIXEL_OWNER (34)
1802
======================================================================
1819
======================================================================
1803
============ Функция 35 - прочитать цвет точки на экране. ============
1820
============ Функция 35 - прочитать цвет точки на экране. ============
1804
======================================================================
1821
======================================================================
1805
Параметры:
1822
Параметры:
1806
  * eax = 35
1823
  * eax = 35
1807
  * ebx = y*xsize+x, где
1824
  * ebx = y*xsize+x, где
1808
  * (x,y) = координаты точки (считая от 0)
1825
  * (x,y) = координаты точки (считая от 0)
1809
  * xsize = размер экрана по горизонтали
1826
  * xsize = размер экрана по горизонтали
1810
Возвращаемое значение:
1827
Возвращаемое значение:
1811
  * eax = цвет 0x00RRGGBB
1828
  * eax = цвет 0x00RRGGBB
1812
Замечания:
1829
Замечания:
1813
  * Узнать размеры экрана можно вызовом функции 14. Обратите внимание,
1830
  * Узнать размеры экрана можно вызовом функции 14. Обратите внимание,
1814
    что она вычитает 1 из обоих размеров.
1831
    что она вычитает 1 из обоих размеров.
1815
  * К видеопамяти есть также прямой доступ (без вызовов системных
1832
  * К видеопамяти есть также прямой доступ (без вызовов системных
1816
    функций) через селектор gs. Параметры текущего видеорежима
1833
    функций) через селектор gs. Параметры текущего видеорежима
1817
    можно получить функцией 61.
1834
    можно получить функцией 61.
1818
 
1835
 
1819
---------------------- Константы для регистров: ----------------------
1836
---------------------- Константы для регистров: ----------------------
1820
  eax - SF_GET_PIXEL (35)
1837
  eax - SF_GET_PIXEL (35)
1821
======================================================================
1838
======================================================================
1822
=============== Функция 36 - прочитать область экрана. ===============
1839
=============== Функция 36 - прочитать область экрана. ===============
1823
======================================================================
1840
======================================================================
1824
Параметры:
1841
Параметры:
1825
  * eax = 36 - номер функции
1842
  * eax = 36 - номер функции
1826
  * ebx = указатель на предварительно выделенную область памяти,
1843
  * ebx = указатель на предварительно выделенную область памяти,
1827
            куда будет помещено изображение в формате BBGGRRBBGGRR...
1844
            куда будет помещено изображение в формате BBGGRRBBGGRR...
1828
  * ecx = [размер по оси x]*65536 + [размер по оси y]
1845
  * ecx = [размер по оси x]*65536 + [размер по оси y]
1829
  * edx = [координата по оси x]*65536 + [координата по оси y]
1846
  * edx = [координата по оси x]*65536 + [координата по оси y]
1830
Возвращаемое значение:
1847
Возвращаемое значение:
1831
  * функция не возвращает значения
1848
  * функция не возвращает значения
1832
Замечания:
1849
Замечания:
1833
  * Координаты области - это координаты верхнего левого угла
1850
  * Координаты области - это координаты верхнего левого угла
1834
    области относительно экрана.
1851
    области относительно экрана.
1835
  * Размер изображения в байтах есть 3*xsize*ysize.
1852
  * Размер изображения в байтах есть 3*xsize*ysize.
1836
 
1853
 
1837
---------------------- Константы для регистров: ----------------------
1854
---------------------- Константы для регистров: ----------------------
1838
  eax - SF_GET_IMAGE (36)
1855
  eax - SF_GET_IMAGE (36)
1839
======================================================================
1856
======================================================================
1840
==================== Функция 37 - работа с мышью. ====================
1857
==================== Функция 37 - работа с мышью. ====================
1841
======================================================================
1858
======================================================================
1842
 
1859
 
1843
-------------- Подфункция 0 - экранные координаты мыши ---------------
1860
-------------- Подфункция 0 - экранные координаты мыши ---------------
1844
Параметры:
1861
Параметры:
1845
  * eax = 37 - номер функции
1862
  * eax = 37 - номер функции
1846
  * ebx = 0 - номер подфункции
1863
  * ebx = 0 - номер подфункции
1847
Возвращаемое значение:
1864
Возвращаемое значение:
1848
  * eax = x*65536 + y, (x,y)=координаты курсора мыши (считая от 0)
1865
  * eax = x*65536 + y, (x,y)=координаты курсора мыши (считая от 0)
1849
 
1866
 
1850
---------- Подфункция 1 - координаты мыши относительно окна ----------
1867
---------- Подфункция 1 - координаты мыши относительно окна ----------
1851
Параметры:
1868
Параметры:
1852
  * eax = 37 - номер функции
1869
  * eax = 37 - номер функции
1853
  * ebx = 1 - номер подфункции
1870
  * ebx = 1 - номер подфункции
1854
Возвращаемое значение:
1871
Возвращаемое значение:
1855
  * eax = x*65536 + y, (x,y)=координаты курсора мыши относительно
1872
  * eax = x*65536 + y, (x,y)=координаты курсора мыши относительно
1856
    окна приложения (считая от 0)
1873
    окна приложения (считая от 0)
1857
Замечания:
1874
Замечания:
1858
  * Значение вычисляется по формуле (x-xwnd)*65536 + (y-ywnd).
1875
  * Значение вычисляется по формуле (x-xwnd)*65536 + (y-ywnd).
1859
    Если y>=ywnd, то младшее слово неотрицательно и содержит
1876
    Если y>=ywnd, то младшее слово неотрицательно и содержит
1860
    относительную y-координату, а старшее - относительную x-координату
1877
    относительную y-координату, а старшее - относительную x-координату
1861
    (правильного знака). В противном случае младшее слово отрицательно
1878
    (правильного знака). В противном случае младшее слово отрицательно
1862
    и всё равно содержит относительную y-координату,
1879
    и всё равно содержит относительную y-координату,
1863
    а к старшему слову следует прибавить 1.
1880
    а к старшему слову следует прибавить 1.
1864
 
1881
 
1865
---------------- Подфункция 2 - состояния кнопок мыши ----------------
1882
---------------- Подфункция 2 - состояния кнопок мыши ----------------
1866
Параметры:
1883
Параметры:
1867
  * eax = 37 - номер функции
1884
  * eax = 37 - номер функции
1868
  * ebx = 2 - номер подфункции
1885
  * ebx = 2 - номер подфункции
1869
Возвращаемое значение:
1886
Возвращаемое значение:
1870
  * eax = биты 0-4 соответствуют подфункции 3
1887
  * eax = биты 0-4 соответствуют подфункции 3
1871
 
1888
 
1872
----------- Подфункция 3 - состояния и события кнопок мыши -----------
1889
----------- Подфункция 3 - состояния и события кнопок мыши -----------
1873
Параметры:
1890
Параметры:
1874
  * eax = 37 - номер функции
1891
  * eax = 37 - номер функции
1875
  * ebx = 3 - номер подфункции
1892
  * ebx = 3 - номер подфункции
1876
Возвращаемое значение:
1893
Возвращаемое значение:
1877
  * eax содержит следующую информацию:
1894
  * eax содержит следующую информацию:
1878
 
1895
 
1879
состояния:
1896
состояния:
1880
  * бит 0 установлен = удерживается левая кнопка
1897
  * бит 0 установлен = удерживается левая кнопка
1881
  * бит 1 установлен = удерживается правая кнопка
1898
  * бит 1 установлен = удерживается правая кнопка
1882
  * бит 2 установлен = удерживается средняя кнопка
1899
  * бит 2 установлен = удерживается средняя кнопка
1883
  * бит 3 установлен = удерживается 4-я кнопка
1900
  * бит 3 установлен = удерживается 4-я кнопка
1884
  * бит 4 установлен = удерживается 5-я кнопка
1901
  * бит 4 установлен = удерживается 5-я кнопка
1885
 
1902
 
1886
события:
1903
события:
1887
  * бит 8 установлен  = нажата левая кнопка
1904
  * бит 8 установлен  = нажата левая кнопка
1888
  * бит 9 установлен  = нажата правая кнопка
1905
  * бит 9 установлен  = нажата правая кнопка
1889
  * бит 10 установлен = нажата средняя кнопка
1906
  * бит 10 установлен = нажата средняя кнопка
1890
 
1907
 
1891
  * бит 15 установлен = используется вертикальная прокрутка
1908
  * бит 15 установлен = используется вертикальная прокрутка
1892
 
1909
 
1893
  * бит 16 установлен = отпущена левая кнопка
1910
  * бит 16 установлен = отпущена левая кнопка
1894
  * бит 17 установлен = отпущена правая кнопка
1911
  * бит 17 установлен = отпущена правая кнопка
1895
  * бит 18 установлен = отпущена средняя кнопка
1912
  * бит 18 установлен = отпущена средняя кнопка
1896
 
1913
 
1897
  * бит 23 установлен = используется горизонтальная прокрутка
1914
  * бит 23 установлен = используется горизонтальная прокрутка
1898
 
1915
 
1899
  * бит 24 установлен = двойной щелчёк левой кнопкой
1916
  * бит 24 установлен = двойной щелчёк левой кнопкой
1900
 
1917
 
1901
------------------ Подфункция 4 - загрузить курсор -------------------
1918
------------------ Подфункция 4 - загрузить курсор -------------------
1902
Параметры:
1919
Параметры:
1903
  * eax = 37 - номер функции
1920
  * eax = 37 - номер функции
1904
  * ebx = 4 - номер подфункции
1921
  * ebx = 4 - номер подфункции
1905
  * dx = источник данных:
1922
  * dx = источник данных:
1906
  * dx = LOAD_FROM_FILE = 0 - данные в файле
1923
  * dx = LOAD_FROM_FILE = 0 - данные в файле
1907
    * ecx = указатель на полный путь к файлу курсора
1924
    * ecx = указатель на полный путь к файлу курсора
1908
    * файл курсора должен быть в формате .cur, стандартном для
1925
    * файл курсора должен быть в формате .cur, стандартном для
1909
      MS Windows, причём размером 32*32 пикселя
1926
      MS Windows, причём размером 32*32 пикселя
1910
  * dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память
1927
  * dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память
1911
    * ecx = указатель на данные файла курсора
1928
    * ecx = указатель на данные файла курсора
1912
    * формат данных такой же, как и в предыдущем случае
1929
    * формат данных такой же, как и в предыдущем случае
1913
  * dx = LOAD_INDIRECT = 2 - данные в памяти
1930
  * dx = LOAD_INDIRECT = 2 - данные в памяти
1914
    * ecx = указатель на образ курсора в формате ARGB 32*32 пикселя
1931
    * ecx = указатель на образ курсора в формате ARGB 32*32 пикселя
1915
    * edx = 0xXXYY0002, где
1932
    * edx = 0xXXYY0002, где
1916
      * XX = x-координата "горячей точки" курсора
1933
      * XX = x-координата "горячей точки" курсора
1917
      * YY = y-координата
1934
      * YY = y-координата
1918
      * 0 <= XX, YY <= 31
1935
      * 0 <= XX, YY <= 31
1919
Возвращаемое значение:
1936
Возвращаемое значение:
1920
  * eax = 0 - неудача
1937
  * eax = 0 - неудача
1921
  * иначе eax = хэндл курсора
1938
  * иначе eax = хэндл курсора
1922
 
1939
 
1923
------------------ Подфункция 5 - установить курсор ------------------
1940
------------------ Подфункция 5 - установить курсор ------------------
1924
Устанавливает новый курсор для окна текущего потока.
1941
Устанавливает новый курсор для окна текущего потока.
1925
Параметры:
1942
Параметры:
1926
  * eax = 37 - номер функции
1943
  * eax = 37 - номер функции
1927
  * ebx = 5 - номер подфункции
1944
  * ebx = 5 - номер подфункции
1928
  * ecx = хэндл курсора
1945
  * ecx = хэндл курсора
1929
Возвращаемое значение:
1946
Возвращаемое значение:
1930
  * eax = хэндл предыдущего установленного курсора
1947
  * eax = хэндл предыдущего установленного курсора
1931
Замечания:
1948
Замечания:
1932
  * Если передан некорректный хэндл, то функция восстановит курсор
1949
  * Если передан некорректный хэндл, то функция восстановит курсор
1933
    по умолчанию (стандартную стрелку). В частности, к восстановлению
1950
    по умолчанию (стандартную стрелку). В частности, к восстановлению
1934
    курсора по умолчанию приводит передача ecx=0.
1951
    курсора по умолчанию приводит передача ecx=0.
1935
 
1952
 
1936
------------------- Подфункция 6 - удалить курсор --------------------
1953
------------------- Подфункция 6 - удалить курсор --------------------
1937
Параметры:
1954
Параметры:
1938
  * eax = 37 - номер функции
1955
  * eax = 37 - номер функции
1939
  * ebx = 6 - номер подфункции
1956
  * ebx = 6 - номер подфункции
1940
  * ecx = хэндл курсора
1957
  * ecx = хэндл курсора
1941
Возвращаемое значение:
1958
Возвращаемое значение:
1942
  * eax разрушается
1959
  * eax разрушается
1943
Замечания:
1960
Замечания:
1944
  * Курсор должен был быть ранее загружен текущим потоком
1961
  * Курсор должен был быть ранее загружен текущим потоком
1945
    (вызовом подфункции 4). Функция не удаляет системные курсоры и
1962
    (вызовом подфункции 4). Функция не удаляет системные курсоры и
1946
    курсоры, загруженные другими приложениями.
1963
    курсоры, загруженные другими приложениями.
1947
  * Если удаляется активный (установленный подфункцией 5) курсор, то
1964
  * Если удаляется активный (установленный подфункцией 5) курсор, то
1948
    восстанавливается курсор по умолчанию (стандартная стрелка).
1965
    восстанавливается курсор по умолчанию (стандартная стрелка).
1949
 
1966
 
1950
------------------ Подфункция 7 - данные прокрутки -------------------
1967
------------------ Подфункция 7 - данные прокрутки -------------------
1951
Параметры:
1968
Параметры:
1952
  * eax = 37 - номер функции
1969
  * eax = 37 - номер функции
1953
  * ebx = 7 - номер подфункции
1970
  * ebx = 7 - номер подфункции
1954
Возвращаемое значение:
1971
Возвращаемое значение:
1955
  * eax = [horizontal offset]*65536 + [vertical offset]
1972
  * eax = [horizontal offset]*65536 + [vertical offset]
1956
Замечания:
1973
Замечания:
1957
  * Данные доступны только активному окну.
1974
  * Данные доступны только активному окну.
1958
  * После прочтения значения обнуляются.
1975
  * После прочтения значения обнуляются.
1959
  * Данные имеют знаковые значения.
1976
  * Данные имеют знаковые значения.
1960
 
1977
 
1961
------- Подфункция 8 - загрузить курсор с указанием кодировки. -------
1978
------- Подфункция 8 - загрузить курсор с указанием кодировки. -------
1962
Параметры:
1979
Параметры:
1963
  * eax = 37 - номер функции
1980
  * eax = 37 - номер функции
1964
  * ebx = 8 - номер подфункции
1981
  * ebx = 8 - номер подфункции
1965
  * ecx = указатель на строку с путём к файлу курсора
1982
  * ecx = указатель на строку с путём к файлу курсора
1966
  * edx = кодировка строки, подробности указаны в описании функции 80.
1983
  * edx = кодировка строки, подробности указаны в описании функции 80.
1967
Возвращаемое значение:
1984
Возвращаемое значение:
1968
  * eax = хэндл курсора, 0 - неудача
1985
  * eax = хэндл курсора, 0 - неудача
1969
 
1986
 
1970
---------------------- Константы для регистров: ----------------------
1987
---------------------- Константы для регистров: ----------------------
1971
  eax - SF_MOUSE_GET (37)
1988
  eax - SF_MOUSE_GET (37)
1972
  ebx - SSF_SCREEN_POSITION (0), SSF_WINDOW_POSITION (1),
1989
  ebx - SSF_SCREEN_POSITION (0), SSF_WINDOW_POSITION (1),
1973
    SSF_BUTTON (2), SSF_BUTTON_EXT (3), SSF_LOAD_CURSOR (4),
1990
    SSF_BUTTON (2), SSF_BUTTON_EXT (3), SSF_LOAD_CURSOR (4),
1974
    SSF_SET_CURSOR (5), SSF_DEL_CURSOR (6), SSF_SCROLL_DATA (7)
1991
    SSF_SET_CURSOR (5), SSF_DEL_CURSOR (6), SSF_SCROLL_DATA (7)
1975
======================================================================
1992
======================================================================
1976
================== Функция 38 - нарисовать отрезок. ==================
1993
================== Функция 38 - нарисовать отрезок. ==================
1977
======================================================================
1994
======================================================================
1978
Параметры:
1995
Параметры:
1979
  * eax = 38 - номер функции
1996
  * eax = 38 - номер функции
1980
  * ebx = [координата начала по оси x]*65536 +
1997
  * ebx = [координата начала по оси x]*65536 +
1981
              [координата конца по оси x]
1998
              [координата конца по оси x]
1982
  * ecx = [координата начала по оси y]*65536 +
1999
  * ecx = [координата начала по оси y]*65536 +
1983
              [координата конца по оси y]
2000
              [координата конца по оси y]
1984
  * edx = 0x00RRGGBB - цвет
2001
  * edx = 0x00RRGGBB - цвет
1985
    edx = 0x01xxxxxx - рисовать инверсный отрезок
2002
    edx = 0x01xxxxxx - рисовать инверсный отрезок
1986
          (младшие 24 бита игнорируются)
2003
          (младшие 24 бита игнорируются)
1987
Возвращаемое значение:
2004
Возвращаемое значение:
1988
  * функция не возвращает значения
2005
  * функция не возвращает значения
1989
Замечания:
2006
Замечания:
1990
  * Координаты берутся относительно окна.
2007
  * Координаты берутся относительно окна.
1991
  * Конечная точка также рисуется.
2008
  * Конечная точка также рисуется.
1992
 
2009
 
1993
---------------------- Константы для регистров: ----------------------
2010
---------------------- Константы для регистров: ----------------------
1994
  eax - SF_DRAW_LINE (38)
2011
  eax - SF_DRAW_LINE (38)
1995
======================================================================
2012
======================================================================
1996
== Функция 39, подфункция 1 - получить размер фонового изображения. ==
2013
== Функция 39, подфункция 1 - получить размер фонового изображения. ==
1997
======================================================================
2014
======================================================================
1998
Параметры:
2015
Параметры:
1999
  * eax = 39 - номер функции
2016
  * eax = 39 - номер функции
2000
  * ebx = 1 - номер подфункции
2017
  * ebx = 1 - номер подфункции
2001
Возвращаемое значение:
2018
Возвращаемое значение:
2002
  * eax = [ширина]*65536 + [высота]
2019
  * eax = [ширина]*65536 + [высота]
2003
Замечания:
2020
Замечания:
2004
  * Есть парная команда установки размеров фонового изображения -
2021
  * Есть парная команда установки размеров фонового изображения -
2005
    подфункция 1 функции 15. После которой, разумеется, следует
2022
    подфункция 1 функции 15. После которой, разумеется, следует
2006
    заново определить само изображение.
2023
    заново определить само изображение.
2007
 
2024
 
2008
---------------------- Константы для регистров: ----------------------
2025
---------------------- Константы для регистров: ----------------------
2009
  eax - SF_BACKGROUND_GET (39)
2026
  eax - SF_BACKGROUND_GET (39)
2010
======================================================================
2027
======================================================================
2011
= Функция 39, подфункция 2 - прочитать точку с фонового изображения. =
2028
= Функция 39, подфункция 2 - прочитать точку с фонового изображения. =
2012
======================================================================
2029
======================================================================
2013
Параметры:
2030
Параметры:
2014
  * eax = 39 - номер функции
2031
  * eax = 39 - номер функции
2015
  * ebx = 2 - номер подфункции
2032
  * ebx = 2 - номер подфункции
2016
  * ecx = смещение
2033
  * ecx = смещение
2017
Возвращаемое значение:
2034
Возвращаемое значение:
2018
  * eax = 0x00RRGGBB - цвет точки, если смещение допустимо
2035
  * eax = 0x00RRGGBB - цвет точки, если смещение допустимо
2019
    (меньше 0x160000-16)
2036
    (меньше 0x160000-16)
2020
  * eax = 2 - иначе
2037
  * eax = 2 - иначе
2021
Замечания:
2038
Замечания:
2022
  * Не следует полагаться на возвращаемое значение в случае неверного
2039
  * Не следует полагаться на возвращаемое значение в случае неверного
2023
    смещения, оно может измениться в следующих версиях ядра.
2040
    смещения, оно может измениться в следующих версиях ядра.
2024
  * Смещение точки с координатами (x,y) вычисляется как (x+y*xsize)*3.
2041
  * Смещение точки с координатами (x,y) вычисляется как (x+y*xsize)*3.
2025
  * Есть парная функция установки точки на фоновом изображении -
2042
  * Есть парная функция установки точки на фоновом изображении -
2026
    подфункция 2 функции 15.
2043
    подфункция 2 функции 15.
2027
 
2044
 
2028
---------------------- Константы для регистров: ----------------------
2045
---------------------- Константы для регистров: ----------------------
2029
  eax - SF_BACKGROUND_GET_RECT (39)
2046
  eax - SF_BACKGROUND_GET_RECT (39)
2030
======================================================================
2047
======================================================================
2031
== Функция 39, подфункция 3 - получить прямоугольную область фона    =
2048
== Функция 39, подфункция 3 - получить прямоугольную область фона    =
2032
======================================================================
2049
======================================================================
2033
Параметры:
2050
Параметры:
2034
  * eax = 39 - номер функции
2051
  * eax = 39 - номер функции
2035
  * ebx = 3 - номер подфункции
2052
  * ebx = 3 - номер подфункции
2036
  * ecx = [x]*65536 + [y]
2053
  * ecx = [x]*65536 + [y]
2037
  * edx = [width]*65536 + [height]
2054
  * edx = [width]*65536 + [height]
2038
  * esi = адрес буфера
2055
  * esi = адрес буфера
2039
Возвращаемое значение:
2056
Возвращаемое значение:
2040
  * eax = 0 - успех
2057
  * eax = 0 - успех
2041
  * eax = -1 - ошибка
2058
  * eax = -1 - ошибка
2042
Замечания:
2059
Замечания:
2043
  * Функция копирует указанную прямоугольную область в буфер в формате
2060
  * Функция копирует указанную прямоугольную область в буфер в формате
2044
    0x00RRGGBB
2061
    0x00RRGGBB
2045
 
2062
 
2046
---------------------- Константы для регистров: ----------------------
2063
---------------------- Константы для регистров: ----------------------
2047
  eax - SF_BACKGROUND_GET (39)
2064
  eax - SF_BACKGROUND_GET (39)
2048
======================================================================
2065
======================================================================
2049
====== Функция 39, подфункция 4 - получить режим отрисовки фона. =====
2066
====== Функция 39, подфункция 4 - получить режим отрисовки фона. =====
2050
======================================================================
2067
======================================================================
2051
Параметры:
2068
Параметры:
2052
  * eax = 39 - номер функции
2069
  * eax = 39 - номер функции
2053
  * ebx = 4 - номер подфункции
2070
  * ebx = 4 - номер подфункции
2054
Возвращаемое значение:
2071
Возвращаемое значение:
2055
  * eax = 1 - замостить
2072
  * eax = 1 - замостить
2056
  * eax = 2 - растянуть
2073
  * eax = 2 - растянуть
2057
Замечания:
2074
Замечания:
2058
  * Есть парная функция установки режима отрисовки фона -
2075
  * Есть парная функция установки режима отрисовки фона -
2059
    подфункция 4 функции 15.
2076
    подфункция 4 функции 15.
2060
 
2077
 
2061
---------------------- Константы для регистров: ----------------------
2078
---------------------- Константы для регистров: ----------------------
2062
  eax - SF_BACKGROUND_GET (39)
2079
  eax - SF_BACKGROUND_GET (39)
2063
======================================================================
2080
======================================================================
2064
======== Функция 40 - установить маску для ожидаемых событий. ========
2081
======== Функция 40 - установить маску для ожидаемых событий. ========
2065
======================================================================
2082
======================================================================
2066
Маска для ожидаемых событий влияет на функции работы с событиями 10,
2083
Маска для ожидаемых событий влияет на функции работы с событиями 10,
2067
11, 23 - они сообщают только о событиях, разрешённых этой маской.
2084
11, 23 - они сообщают только о событиях, разрешённых этой маской.
2068
Параметры:
2085
Параметры:
2069
  * eax = 40 - номер функции
2086
  * eax = 40 - номер функции
2070
  * ebx = маска: бит i соответствует событию i+1 (см. список событий)
2087
  * ebx = маска: бит i соответствует событию i+1 (см. список событий)
2071
    (установленный бит разрешает извещение о событии)
2088
    (установленный бит разрешает извещение о событии)
2072
    bit 31: фильтр активности событий мыши
2089
    bit 31: фильтр активности событий мыши
2073
    bit 31 = 0 - неактивное окно всегда получает события от мыши
2090
    bit 31 = 0 - неактивное окно всегда получает события от мыши
2074
    bit 31 = 1 - неактивное окно не получает события от мыши
2091
    bit 31 = 1 - неактивное окно не получает события от мыши
2075
    bit 30: фильтр позиции курсора
2092
    bit 30: фильтр позиции курсора
2076
    bit 30 = 0 - окно принимает события мыши, если курсор
2093
    bit 30 = 0 - окно принимает события мыши, если курсор
2077
                 за пределами окна
2094
                 за пределами окна
2078
    bit 30 = 1 - окно не принимает события мыши, если курсор
2095
    bit 30 = 1 - окно не принимает события мыши, если курсор
2079
                 за пределами окна
2096
                 за пределами окна
2080
Возвращаемое значение:
2097
Возвращаемое значение:
2081
  * eax = предыдущее значение маски
2098
  * eax = предыдущее значение маски
2082
Замечания:
2099
Замечания:
2083
  * Маска по умолчанию (7=111b) разрешает извещения о перерисовке
2100
  * Маска по умолчанию (7=111b) разрешает извещения о перерисовке
2084
    и нажатиях клавиш и кнопок.
2101
    и нажатиях клавиш и кнопок.
2085
    Этого достаточно для большинства приложений.
2102
    Этого достаточно для большинства приложений.
2086
  * События, запрещённые в маске, всё равно сохраняются, если
2103
  * События, запрещённые в маске, всё равно сохраняются, если
2087
    приходят; о них просто не извещают функции работы с событиями.
2104
    приходят; о них просто не извещают функции работы с событиями.
2088
  * Функции работы с событиями учитывают маску на момент
2105
  * Функции работы с событиями учитывают маску на момент
2089
    вызова функции, а не на момент поступления сообщения.
2106
    вызова функции, а не на момент поступления сообщения.
2090
 
2107
 
2091
---------------------- Константы для регистров: ----------------------
2108
---------------------- Константы для регистров: ----------------------
2092
  eax - SF_SET_EVENTS_MASK (40)
2109
  eax - SF_SET_EVENTS_MASK (40)
2093
======================================================================
2110
======================================================================
2094
=================== Функция 43 - ввод/вывод в порт. ==================
-
 
2095
======================================================================
-
 
2096
 
-
 
2097
------------------------ Вывод данных в порт -------------------------
-
 
2098
Параметры:
-
 
2099
  * eax = 43 - номер функции
-
 
2100
  * bl = байт для вывода
-
 
2101
  * ecx = номер порта 0xnnnn (от 0 до 0xFFFF)
-
 
2102
Возвращаемое значение:
-
 
2103
  * eax = 0 - успешно
-
 
2104
  * eax = 1 - поток не зарезервировал указанный порт
-
 
2105
 
-
 
2106
------------------------ Ввод данных из порта ------------------------
-
 
2107
Параметры:
-
 
2108
  * eax = 43 - номер функции
-
 
2109
  * ebx игнорируется
-
 
2110
  * ecx = 0x8000nnnn, где nnnn = номер порта (от 0 до 0xFFFF)
-
 
2111
Возвращаемое значение:
-
 
2112
  * eax = 0 - успешно, при этом ebx = введённый байт
-
 
2113
  * eax = 1 - поток не зарезервировал данный порт
-
 
2114
Замечания:
-
 
2115
  * Предварительно поток должен зарезервировать за собой
-
 
2116
    указанный порт функцией 46.
-
 
2117
  * Для зарезервированных портов вместо вызова этих функций
-
 
2118
    лучше использовать команды процессора in/out - это значительно
-
 
2119
    быстрее и несколько короче и проще. Из незарезервированных
-
 
2120
    портов читать всё равно нельзя.
-
 
2121
 
-
 
2122
---------------------- Константы для регистров: ----------------------
-
 
2123
  eax - SF_PORT_IN_OUT (43)
-
 
2124
======================================================================
-
 
2125
= Функция 46 - зарезервировать/освободить группу портов ввода/вывода.
2111
= Функция 46 - зарезервировать/освободить группу портов ввода/вывода.
2126
======================================================================
2112
======================================================================
2127
К зарезервированным портам можно обращаться напрямую из приложения
2113
К зарезервированным портам можно обращаться напрямую из приложения
2128
командами in/out (рекомендуемый способ) и вызовом функции 43
-
 
2129
(нерекомендуемый способ).
2114
командами in/out .
2130
Параметры:
2115
Параметры:
2131
  * eax = 46 - номер функции
2116
  * eax = 46 - номер функции
2132
  * ebx = 0 - зарезервировать, 1 - освободить
2117
  * ebx = 0 - зарезервировать, 1 - освободить
2133
  * ecx = номер начала диапазона портов
2118
  * ecx = номер начала диапазона портов
2134
  * edx = номер конца диапазона портов (включительно)
2119
  * edx = номер конца диапазона портов (включительно)
2135
Возвращаемое значение:
2120
Возвращаемое значение:
2136
  * eax = 0 - успешно
2121
  * eax = 0 - успешно
2137
  * eax = 1 - ошибка
2122
  * eax = 1 - ошибка
2138
Замечания:
2123
Замечания:
2139
  * В случае резервирования портов ошибкой считается выполнение
2124
  * В случае резервирования портов ошибкой считается выполнение
2140
    одного из условий:
2125
    одного из условий:
2141
    * начальный адрес больше конечного;
2126
    * начальный адрес больше конечного;
2142
    * указанный диапазон содержит некорректный номер порта
2127
    * указанный диапазон содержит некорректный номер порта
2143
      (корректные - от 0 до 0xFFFF);
2128
      (корректные - от 0 до 0xFFFF);
2144
    * превышено ограничение на общее число зарезервированных областей
2129
    * превышено ограничение на общее число зарезервированных областей
2145
      - допускается максимум 255;
2130
      - допускается максимум 255;
2146
    * указанный диапазон пересекается с одним из
2131
    * указанный диапазон пересекается с одним из
2147
      ранее зарезервированных
2132
      ранее зарезервированных
2148
  * В случае освобождения портов ошибкой считается попытка
2133
  * В случае освобождения портов ошибкой считается попытка
2149
    освобождения диапазона, который ранее не был целиком
2134
    освобождения диапазона, который ранее не был целиком
2150
    зарезервирован этой же функцией (с такими же значениями ecx,edx).
2135
    зарезервирован этой же функцией (с такими же значениями ecx,edx).
2151
  * При обнаружении ошибки (в обоих случаях) никаких действий
2136
  * При обнаружении ошибки (в обоих случаях) никаких действий
2152
    не производится.
2137
    не производится.
2153
  * При загрузке система резервирует за собой порты
2138
  * При загрузке система резервирует за собой порты
2154
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно).
2139
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно).
2155
  * При завершении потока автоматически освобождаются все
2140
  * При завершении потока автоматически освобождаются все
2156
    зарезервированные им порты.
2141
    зарезервированные им порты.
2157
 
2142
 
2158
---------------------- Константы для регистров: ----------------------
2143
---------------------- Константы для регистров: ----------------------
2159
  eax - SF_SET_PORTS (46)
2144
  eax - SF_SET_PORTS (46)
2160
======================================================================
2145
======================================================================
2161
================= Функция 47 - вывести число в окно. =================
2146
================= Функция 47 - вывести число в окно. =================
2162
======================================================================
2147
======================================================================
2163
Параметры:
2148
Параметры:
2164
  * eax = 47 - номер функции
2149
  * eax = 47 - номер функции
2165
  * ebx = параметры преобразования числа в текст:
2150
  * ebx = параметры преобразования числа в текст:
2166
    * bl = 0 - ecx содержит число
2151
    * bl = 0 - ecx содержит число
2167
    * bl = 1 - ecx содержит указатель на dword/qword-число
2152
    * bl = 1 - ecx содержит указатель на dword/qword-число
2168
    * bh = 0 - отображать в десятичной системе счисления
2153
    * bh = 0 - отображать в десятичной системе счисления
2169
    * bh = 1 - отображать в шестнадцатеричной системе
2154
    * bh = 1 - отображать в шестнадцатеричной системе
2170
    * bh = 2 - отображать в двоичной системе
2155
    * bh = 2 - отображать в двоичной системе
2171
    * биты 16-21 = сколько цифр отображать
2156
    * биты 16-21 = сколько цифр отображать
2172
    * биты 22-29 зарезервированы и должны быть установлены в 0
2157
    * биты 22-29 зарезервированы и должны быть установлены в 0
2173
    * бит 30 установлен = выводить qword (64-битное число);
2158
    * бит 30 установлен = выводить qword (64-битное число);
2174
                              при этом должно быть bl = 1
2159
                              при этом должно быть bl = 1
2175
    * бит 31 установлен = не выводить ведущие нули числа
2160
    * бит 31 установлен = не выводить ведущие нули числа
2176
  * ecx = число (при bl=0) или указатель (при bl=1)
2161
  * ecx = число (при bl=0) или указатель (при bl=1)
2177
  * edx = [координата по оси x]*65536 + [координата по оси y]
2162
  * edx = [координата по оси x]*65536 + [координата по оси y]
2178
  * esi = 0xXXRRGGBB, где
2163
  * esi = 0xXXRRGGBB, где
2179
    * RR, GG, BB задают цвет текста
2164
    * RR, GG, BB задают цвет текста
2180
    * XX=0B0FCSSS (биты):
2165
    * XX=0B0FCSSS (биты):
2181
      * B=1 - закрашивать фон (цвет = edi)
2166
      * B=1 - закрашивать фон (цвет = edi)
2182
      * F задает шрифт:
2167
      * F задает шрифт:
2183
        0 = 6x9
2168
        0 = 6x9
2184
        1 = 8x16
2169
        1 = 8x16
2185
      * C=0 - рисовать в окно,
2170
      * C=0 - рисовать в окно,
2186
        С=1 - рисовать в буфер (edi)
2171
        С=1 - рисовать в буфер (edi)
2187
      * SSS = (множитель размера)-1, то-есть 0 = x1, 7 = x8
2172
      * SSS = (множитель размера)-1, то-есть 0 = x1, 7 = x8
2188
Возвращаемое значение:
2173
Возвращаемое значение:
2189
  * функция не возвращает значения
2174
  * функция не возвращает значения
2190
Замечания:
2175
Замечания:
2191
  * Указанная длина не должна превосходить 60.
2176
  * Указанная длина не должна превосходить 60.
2192
  * Выводится ровно указанное количество цифр. Если число мало и
2177
  * Выводится ровно указанное количество цифр. Если число мало и
2193
    может быть записано меньшим количеством цифр, оно дополняется
2178
    может быть записано меньшим количеством цифр, оно дополняется
2194
    ведущими нулями; если число велико и не может быть записано
2179
    ведущими нулями; если число велико и не может быть записано
2195
    таким количеством цифр, "лишние" ведущие цифры обрезаются.
2180
    таким количеством цифр, "лишние" ведущие цифры обрезаются.
2196
 
2181
 
2197
---------------------- Константы для регистров: ----------------------
2182
---------------------- Константы для регистров: ----------------------
2198
  eax - SF_DRAW_NUMBER (47)
2183
  eax - SF_DRAW_NUMBER (47)
2199
======================================================================
2184
======================================================================
2200
======= Функция 48, подфункция 0 - применить настройки экрана. =======
2185
======= Функция 48, подфункция 0 - применить настройки экрана. =======
2201
======================================================================
2186
======================================================================
2202
Параметры:
2187
Параметры:
2203
  * eax = 48 - номер функции
2188
  * eax = 48 - номер функции
2204
  * ebx = 0 - номер подфункции
2189
  * ebx = 0 - номер подфункции
2205
  * ecx = 0 - зарезервировано
2190
  * ecx = 0 - зарезервировано
2206
Возвращаемое значение:
2191
Возвращаемое значение:
2207
  * функция не возвращает значения
2192
  * функция не возвращает значения
2208
Замечания:
2193
Замечания:
2209
  * Функция перерисовывает экран после изменения параметров
2194
  * Функция перерисовывает экран после изменения параметров
2210
    подфункциями 1 и 2.
2195
    подфункциями 1 и 2.
2211
  * Вызов функции без предшествующих вызовов указанных подфункций
2196
  * Вызов функции без предшествующих вызовов указанных подфункций
2212
    игнорируется.
2197
    игнорируется.
2213
  * Вызов функции с ненулевым ecx игнорируется.
2198
  * Вызов функции с ненулевым ecx игнорируется.
2214
 
2199
 
2215
---------------------- Константы для регистров: ----------------------
2200
---------------------- Константы для регистров: ----------------------
2216
  eax - SF_STYLE_SETTINGS (48)
2201
  eax - SF_STYLE_SETTINGS (48)
2217
  ebx - SSF_APPLY (0)
2202
  ebx - SSF_APPLY (0)
2218
======================================================================
2203
======================================================================
2219
========= Функция 48, подфункция 1 - установить стиль кнопок. ========
2204
========= Функция 48, подфункция 1 - установить стиль кнопок. ========
2220
======================================================================
2205
======================================================================
2221
Параметры:
2206
Параметры:
2222
  * eax = 48 - номер функции
2207
  * eax = 48 - номер функции
2223
  * ebx = 1 - номер подфункции
2208
  * ebx = 1 - номер подфункции
2224
  * ecx = тип кнопок:
2209
  * ecx = тип кнопок:
2225
    * 0 = плоские
2210
    * 0 = плоские
2226
    * 1 = объёмные
2211
    * 1 = объёмные
2227
Возвращаемое значение:
2212
Возвращаемое значение:
2228
  * функция не возвращает значения
2213
  * функция не возвращает значения
2229
Замечания:
2214
Замечания:
2230
  * После вызова описываемой функции следует перерисовать экран
2215
  * После вызова описываемой функции следует перерисовать экран
2231
    подфункцией 0.
2216
    подфункцией 0.
2232
  * Тип кнопок влияет только на их прорисовку функцией 8.
2217
  * Тип кнопок влияет только на их прорисовку функцией 8.
2233
 
2218
 
2234
---------------------- Константы для регистров: ----------------------
2219
---------------------- Константы для регистров: ----------------------
2235
  eax - SF_STYLE_SETTINGS (48)
2220
  eax - SF_STYLE_SETTINGS (48)
2236
  ebx - SSF_SET_BUTTON_STYLE (1)
2221
  ebx - SSF_SET_BUTTON_STYLE (1)
2237
======================================================================
2222
======================================================================
2238
==== Функция 48, подфункция 2 - установить стандартные цвета окон. ===
2223
==== Функция 48, подфункция 2 - установить стандартные цвета окон. ===
2239
======================================================================
2224
======================================================================
2240
Параметры:
2225
Параметры:
2241
  * eax = 48 - номер функции
2226
  * eax = 48 - номер функции
2242
  * ebx = 2 - номер подфункции
2227
  * ebx = 2 - номер подфункции
2243
  * ecx = указатель на таблицу цветов
2228
  * ecx = указатель на таблицу цветов
2244
  * edx = размер таблицы цветов
2229
  * edx = размер таблицы цветов
2245
    (должен быть 40 байт для будущей совместимости)
2230
    (должен быть 40 байт для будущей совместимости)
2246
Формат таблицы цветов указан в описании подфункции 3.
2231
Формат таблицы цветов указан в описании подфункции 3.
2247
Возвращаемое значение:
2232
Возвращаемое значение:
2248
  * функция не возвращает значения
2233
  * функция не возвращает значения
2249
Замечания:
2234
Замечания:
2250
  * После вызова описываемой функции следует перерисовать экран
2235
  * После вызова описываемой функции следует перерисовать экран
2251
    подфункцией 0.
2236
    подфункцией 0.
2252
  * Таблица стандартных цветов влияет только на приложения,
2237
  * Таблица стандартных цветов влияет только на приложения,
2253
    которые эту таблицу явным образом получают (подфункцией 3) и
2238
    которые эту таблицу явным образом получают (подфункцией 3) и
2254
    используют (указывая цвета из неё при вызовах функций рисования).
2239
    используют (указывая цвета из неё при вызовах функций рисования).
2255
  * Таблица стандартных цветов входит в скин и устанавливается заново
2240
  * Таблица стандартных цветов входит в скин и устанавливается заново
2256
    при установке скина (подфункции 8).
2241
    при установке скина (подфункции 8).
2257
  * Таблицу цветов можно просматривать/изменять интерактивно с помощью
2242
  * Таблицу цветов можно просматривать/изменять интерактивно с помощью
2258
    приложения desktop.
2243
    приложения desktop.
2259
 
2244
 
2260
---------------------- Константы для регистров: ----------------------
2245
---------------------- Константы для регистров: ----------------------
2261
  eax - SF_STYLE_SETTINGS (48)
2246
  eax - SF_STYLE_SETTINGS (48)
2262
  ebx - SSF_SET_COLORS (2)
2247
  ebx - SSF_SET_COLORS (2)
2263
======================================================================
2248
======================================================================
2264
===== Функция 48, подфункция 3 - получить стандартные цвета окон. ====
2249
===== Функция 48, подфункция 3 - получить стандартные цвета окон. ====
2265
======================================================================
2250
======================================================================
2266
Параметры:
2251
Параметры:
2267
  * eax = 48 - номер функции
2252
  * eax = 48 - номер функции
2268
  * ebx = 3 - номер подфункции
2253
  * ebx = 3 - номер подфункции
2269
  * ecx = указатель на буфер размером edx байт,
2254
  * ecx = указатель на буфер размером edx байт,
2270
    куда будет записана таблица
2255
    куда будет записана таблица
2271
  * edx = размер таблицы цветов
2256
  * edx = размер таблицы цветов
2272
    (должен быть 40 байт для будущей совместимости)
2257
    (должен быть 40 байт для будущей совместимости)
2273
Возвращаемое значение:
2258
Возвращаемое значение:
2274
  * функция не возвращает значения
2259
  * функция не возвращает значения
2275
Формат таблицы цветов: каждый элемент -
2260
Формат таблицы цветов: каждый элемент -
2276
dword-значение цвета 0x00RRGGBB
2261
dword-значение цвета 0x00RRGGBB
2277
  * +0: dword: none - зарезервировано
2262
  * +0: dword: none - зарезервировано
2278
  * +4: dword: none - зарезервировано
2263
  * +4: dword: none - зарезервировано
2279
  * +8: dword: work_dark - темный цвет рабочей области для придания
2264
  * +8: dword: work_dark - темный цвет рабочей области для придания
2280
    объемна элементам интерфейса
2265
    объемна элементам интерфейса
2281
  * +12 = +0xC: dword: work_light - светлый цвет рабочей области для
2266
  * +12 = +0xC: dword: work_light - светлый цвет рабочей области для
2282
    придания объемна элементам интерфейса
2267
    придания объемна элементам интерфейса
2283
  * +16 = +0x10: dword: grab_text - цвет текста на заголовке
2268
  * +16 = +0x10: dword: grab_text - цвет текста на заголовке
2284
  * +20 = +0x14: dword: work - цвет рабочей области
2269
  * +20 = +0x14: dword: work - цвет рабочей области
2285
  * +24 = +0x18: dword: button - цвет кнопки в рабочей области
2270
  * +24 = +0x18: dword: button - цвет кнопки в рабочей области
2286
  * +28 = +0x1C: dword: button_text - цвет текста на кнопке
2271
  * +28 = +0x1C: dword: button_text - цвет текста на кнопке
2287
    в рабочей области
2272
    в рабочей области
2288
  * +32 = +0x20: dword: work_text - цвет текста в рабочей области
2273
  * +32 = +0x20: dword: work_text - цвет текста в рабочей области
2289
  * +36 = +0x24: dword: graph - цвет графики в рабочей области
2274
  * +36 = +0x24: dword: graph - цвет графики в рабочей области
2290
Замечания:
2275
Замечания:
2291
  * Структура таблицы цветов описана в стандартном включаемом файле
2276
  * Структура таблицы цветов описана в стандартном включаемом файле
2292
    macros.inc под названием system_colors; например, можно писать:
2277
    macros.inc под названием system_colors; например, можно писать:
2293
    	sc	system_colors		; объявление переменной
2278
    	sc	system_colors		; объявление переменной
2294
    	...				; где-то надо вызвать
2279
    	...				; где-то надо вызвать
2295
    					; описываемую функцию с ecx=sc
2280
    					; описываемую функцию с ecx=sc
2296
    	mov	ecx, [sc.button_text]	; читаем цвет текста
2281
    	mov	ecx, [sc.button_text]	; читаем цвет текста
2297
    					; на кнопке в рабочей области
2282
    					; на кнопке в рабочей области
2298
  * Использование/неиспользование этих цветов - дело исключительно
2283
  * Использование/неиспользование этих цветов - дело исключительно
2299
    самой программы. Для использования нужно просто при вызове функций
2284
    самой программы. Для использования нужно просто при вызове функций
2300
    рисования указывать цвет, взятый из этой таблицы.
2285
    рисования указывать цвет, взятый из этой таблицы.
2301
  * При изменении таблицы стандартных цветов (подфункцией 2 с
2286
  * При изменении таблицы стандартных цветов (подфункцией 2 с
2302
    последующим применением изменений подфункцией 0 или
2287
    последующим применением изменений подфункцией 0 или
2303
    при установке скина подфункцией 8) всем окнам посылается сообщение
2288
    при установке скина подфункцией 8) всем окнам посылается сообщение
2304
    о необходимости перерисовки (событие с кодом 1).
2289
    о необходимости перерисовки (событие с кодом 1).
2305
  * Стандартные цвета можно просматривать/изменять интерактивно
2290
  * Стандартные цвета можно просматривать/изменять интерактивно
2306
    с помощью приложения desktop.
2291
    с помощью приложения desktop.
2307
 
2292
 
2308
---------------------- Константы для регистров: ----------------------
2293
---------------------- Константы для регистров: ----------------------
2309
  eax - SF_STYLE_SETTINGS (48)
2294
  eax - SF_STYLE_SETTINGS (48)
2310
  ebx - SSF_GET_COLORS (3)
2295
  ebx - SSF_GET_COLORS (3)
2311
======================================================================
2296
======================================================================
2312
========== Функция 48, подфункция 4 - получить высоту скина. =========
2297
========== Функция 48, подфункция 4 - получить высоту скина. =========
2313
======================================================================
2298
======================================================================
2314
Параметры:
2299
Параметры:
2315
  * eax = 48 - номер функции
2300
  * eax = 48 - номер функции
2316
  * ebx = 4 - номер подфункции
2301
  * ebx = 4 - номер подфункции
2317
Возвращаемое значение:
2302
Возвращаемое значение:
2318
  * eax = высота скина
2303
  * eax = высота скина
2319
Замечания:
2304
Замечания:
2320
  * Высотой скина по определению считается высота заголовка окон,
2305
  * Высотой скина по определению считается высота заголовка окон,
2321
    использующих скин.
2306
    использующих скин.
2322
  * Смотри также общую структуру окна в описании функции 0.
2307
  * Смотри также общую структуру окна в описании функции 0.
2323
 
2308
 
2324
---------------------- Константы для регистров: ----------------------
2309
---------------------- Константы для регистров: ----------------------
2325
  eax - SF_STYLE_SETTINGS (48)
2310
  eax - SF_STYLE_SETTINGS (48)
2326
  ebx - SSF_GET_SKIN_HEIGHT (4)
2311
  ebx - SSF_GET_SKIN_HEIGHT (4)
2327
======================================================================
2312
======================================================================
2328
===== Функция 48, подфункция 5 - получить рабочую область экрана. ====
2313
===== Функция 48, подфункция 5 - получить рабочую область экрана. ====
2329
======================================================================
2314
======================================================================
2330
Параметры:
2315
Параметры:
2331
  * eax = 48 - номер функции
2316
  * eax = 48 - номер функции
2332
  * ebx = 5 - номер подфункции
2317
  * ebx = 5 - номер подфункции
2333
Возвращаемое значение:
2318
Возвращаемое значение:
2334
  * eax = [left]*65536 + [right]
2319
  * eax = [left]*65536 + [right]
2335
  * ebx = [top]*65536 + [bottom]
2320
  * ebx = [top]*65536 + [bottom]
2336
Замечания:
2321
Замечания:
2337
  * Рабочая область экрана определяет положение и координаты
2322
  * Рабочая область экрана определяет положение и координаты
2338
    максимизированного окна.
2323
    максимизированного окна.
2339
  * Рабочая область экрана при нормальной работе есть весь экран
2324
  * Рабочая область экрана при нормальной работе есть весь экран
2340
    за вычетом панели (@taskbar).
2325
    за вычетом панели (@taskbar).
2341
  * (left,top) - координаты левого верхнего угла,
2326
  * (left,top) - координаты левого верхнего угла,
2342
    (right,bottom) - координаты правого нижнего.
2327
    (right,bottom) - координаты правого нижнего.
2343
    Таким образом, размер рабочей области по оси x определяется
2328
    Таким образом, размер рабочей области по оси x определяется
2344
    формулой right-left+1, по оси y - формулой bottom-top+1.
2329
    формулой right-left+1, по оси y - формулой bottom-top+1.
2345
  * Смотри также функцию 14,
2330
  * Смотри также функцию 14,
2346
    позволяющую определить размеры всего экрана.
2331
    позволяющую определить размеры всего экрана.
2347
  * Есть парная функция установки рабочей области - подфункция 6.
2332
  * Есть парная функция установки рабочей области - подфункция 6.
2348
 
2333
 
2349
---------------------- Константы для регистров: ----------------------
2334
---------------------- Константы для регистров: ----------------------
2350
  eax - SF_STYLE_SETTINGS (48)
2335
  eax - SF_STYLE_SETTINGS (48)
2351
  ebx - SSF_GET_SCREEN_AREA (5)
2336
  ebx - SSF_GET_SCREEN_AREA (5)
2352
======================================================================
2337
======================================================================
2353
==== Функция 48, подфункция 6 - установить рабочую область экрана. ===
2338
==== Функция 48, подфункция 6 - установить рабочую область экрана. ===
2354
======================================================================
2339
======================================================================
2355
Параметры:
2340
Параметры:
2356
  * eax = 48 - номер функции
2341
  * eax = 48 - номер функции
2357
  * ebx = 6 - номер подфункции
2342
  * ebx = 6 - номер подфункции
2358
  * ecx = [left]*65536 + [right]
2343
  * ecx = [left]*65536 + [right]
2359
  * edx = [top]*65536 + [bottom]
2344
  * edx = [top]*65536 + [bottom]
2360
Возвращаемое значение:
2345
Возвращаемое значение:
2361
  * функция не возвращает значения
2346
  * функция не возвращает значения
2362
Замечания:
2347
Замечания:
2363
  * Рабочая область экрана определяет положение и координаты
2348
  * Рабочая область экрана определяет положение и координаты
2364
    максимизированного окна.
2349
    максимизированного окна.
2365
  * Эта функция используется только приложением @taskbar,
2350
  * Эта функция используется только приложением @taskbar,
2366
    устанавливающим рабочей областью весь экран за вычетом панели.
2351
    устанавливающим рабочей областью весь экран за вычетом панели.
2367
  * (left,top) - координаты левого верхнего угла,
2352
  * (left,top) - координаты левого верхнего угла,
2368
    (right,bottom) - координаты правого нижнего.
2353
    (right,bottom) - координаты правого нижнего.
2369
    Таким образом, размер рабочей области по оси x определяется
2354
    Таким образом, размер рабочей области по оси x определяется
2370
    формулой right-left+1, по оси y - формулой bottom-right+1.
2355
    формулой right-left+1, по оси y - формулой bottom-right+1.
2371
  * Если left>=right, то x-координаты рабочей области не изменяются.
2356
  * Если left>=right, то x-координаты рабочей области не изменяются.
2372
    Если left<0, то left не устанавливается. Если right больше
2357
    Если left<0, то left не устанавливается. Если right больше
2373
    или равно ширины экрана, то right не устанавливается.
2358
    или равно ширины экрана, то right не устанавливается.
2374
    Аналогично по оси y.
2359
    Аналогично по оси y.
2375
  * Смотри также функцию 14,
2360
  * Смотри также функцию 14,
2376
    позволяющую определить размеры всего экрана.
2361
    позволяющую определить размеры всего экрана.
2377
  * Есть парная функция получения рабочей области -
2362
  * Есть парная функция получения рабочей области -
2378
    подфункция 5.
2363
    подфункция 5.
2379
  * Эта функция автоматически перерисовывает экран, по ходу дела
2364
  * Эта функция автоматически перерисовывает экран, по ходу дела
2380
    обновляет координаты и размеры максимизированных окон.
2365
    обновляет координаты и размеры максимизированных окон.
2381
    Все окна извещаются о необходимости перерисовки (событие 1).
2366
    Все окна извещаются о необходимости перерисовки (событие 1).
2382
 
2367
 
2383
---------------------- Константы для регистров: ----------------------
2368
---------------------- Константы для регистров: ----------------------
2384
  eax - SF_STYLE_SETTINGS (48)
2369
  eax - SF_STYLE_SETTINGS (48)
2385
  ebx - SSF_SET_SCREEN_AREA (6)
2370
  ebx - SSF_SET_SCREEN_AREA (6)
2386
======================================================================
2371
======================================================================
2387
====================== Функция 48, подфункция 7 ======================
2372
====================== Функция 48, подфункция 7 ======================
2388
============ Получить область скина для текста заголовка. ============
2373
============ Получить область скина для текста заголовка. ============
2389
======================================================================
2374
======================================================================
2390
Возвращает область заголовка окна со скином, предназначенную
2375
Возвращает область заголовка окна со скином, предназначенную
2391
для вывода текста заголовка.
2376
для вывода текста заголовка.
2392
Параметры:
2377
Параметры:
2393
  * eax = 48 - номер функции
2378
  * eax = 48 - номер функции
2394
  * ebx = 7 - номер подфункции
2379
  * ebx = 7 - номер подфункции
2395
Возвращаемое значение:
2380
Возвращаемое значение:
2396
  * eax = [left]*65536 + [right]
2381
  * eax = [left]*65536 + [right]
2397
  * ebx = [top]*65536 + [bottom]
2382
  * ebx = [top]*65536 + [bottom]
2398
Замечания:
2383
Замечания:
2399
  * Использование/неиспользование этой функции -
2384
  * Использование/неиспользование этой функции -
2400
    личное дело приложения.
2385
    личное дело приложения.
2401
  * Рекомендуется учитывать значения, возвращаемые этой функцией,
2386
  * Рекомендуется учитывать значения, возвращаемые этой функцией,
2402
    при выборе места для рисования текста заголовка (функцией 4) или
2387
    при выборе места для рисования текста заголовка (функцией 4) или
2403
    какого-нибудь заменителя текста заголовка
2388
    какого-нибудь заменителя текста заголовка
2404
    (по усмотрению приложения).
2389
    (по усмотрению приложения).
2405
 
2390
 
2406
---------------------- Константы для регистров: ----------------------
2391
---------------------- Константы для регистров: ----------------------
2407
  eax - SF_STYLE_SETTINGS (48)
2392
  eax - SF_STYLE_SETTINGS (48)
2408
  ebx - SSF_GET_SKIN_MARGINS (7)
2393
  ebx - SSF_GET_SKIN_MARGINS (7)
2409
======================================================================
2394
======================================================================
2410
==== Функция 48, подфункция 8 - установить используемый скин окон. ===
2395
==== Функция 48, подфункция 8 - установить используемый скин окон. ===
2411
======================================================================
2396
======================================================================
2412
Параметры:
2397
Параметры:
2413
  * eax = 48 - номер функции
2398
  * eax = 48 - номер функции
2414
  * ebx = 8 - номер подфункции
2399
  * ebx = 8 - номер подфункции
2415
  * ecx = указатель на имя файла скина
2400
  * ecx = указатель на имя файла скина
2416
Возвращаемое значение:
2401
Возвращаемое значение:
2417
  * eax = 0 - успешно
2402
  * eax = 0 - успешно
2418
  * eax = 1 - не удалось загрузить файл
2403
  * eax = 1 - не удалось загрузить файл
2419
  * eax = 2 - файл не является файлом скина
2404
  * eax = 2 - файл не является файлом скина
2420
Замечания:
2405
Замечания:
2421
  * При успешной загрузке скина все окна извещаются о необходимости
2406
  * При успешной загрузке скина все окна извещаются о необходимости
2422
    перерисовки (событие 1).
2407
    перерисовки (событие 1).
2423
  * При загрузке система считывает скин из файла default.skn
2408
  * При загрузке система считывает скин из файла default.skn
2424
    на рамдиске.
2409
    на рамдиске.
2425
  * Пользователь может изменять скин статически, создав свой
2410
  * Пользователь может изменять скин статически, создав свой
2426
    default.skn, или динамически с помощью приложения desktop.
2411
    default.skn, или динамически с помощью приложения desktop.
2427
 
2412
 
2428
---------------------- Константы для регистров: ----------------------
2413
---------------------- Константы для регистров: ----------------------
2429
  eax - SF_STYLE_SETTINGS (48)
2414
  eax - SF_STYLE_SETTINGS (48)
2430
  ebx - SSF_SET_SKIN (8)
2415
  ebx - SSF_SET_SKIN (8)
2431
======================================================================
2416
======================================================================
2432
= Функция 48, подфункция 9 - получить настройку сглаживания шрифтов. =
2417
= Функция 48, подфункция 9 - получить настройку сглаживания шрифтов. =
2433
======================================================================
2418
======================================================================
2434
Параметры:
2419
Параметры:
2435
  * eax = 48 - номер функции
2420
  * eax = 48 - номер функции
2436
  * ebx = 9 - номер подфункции
2421
  * ebx = 9 - номер подфункции
2437
Возвращаемое значение:
2422
Возвращаемое значение:
2438
  * eax = 2 - субпиксельное, 1 - обычное, 0 - выключить
2423
  * eax = 2 - субпиксельное, 1 - обычное, 0 - выключить
2439
 
2424
 
2440
---------------------- Константы для регистров: ----------------------
2425
---------------------- Константы для регистров: ----------------------
2441
  eax - SF_STYLE_SETTINGS (48)
2426
  eax - SF_STYLE_SETTINGS (48)
2442
  ebx - SSF_GET_FONT_SMOOTH (9)
2427
  ebx - SSF_GET_FONT_SMOOTH (9)
2443
======================================================================
2428
======================================================================
2444
===== Функция 48, подфункция 10 - настроить сглаживание шрифтов. =====
2429
===== Функция 48, подфункция 10 - настроить сглаживание шрифтов. =====
2445
======================================================================
2430
======================================================================
2446
Параметры:
2431
Параметры:
2447
  * eax = 48 - номер функции
2432
  * eax = 48 - номер функции
2448
  * ebx = 10 - номер подфункции
2433
  * ebx = 10 - номер подфункции
2449
  * cl  = 2 - субпиксельное, 1 - обычное, 0 - выключить
2434
  * cl  = 2 - субпиксельное, 1 - обычное, 0 - выключить
2450
 
2435
 
2451
---------------------- Константы для регистров: ----------------------
2436
---------------------- Константы для регистров: ----------------------
2452
  eax - SF_STYLE_SETTINGS (48)
2437
  eax - SF_STYLE_SETTINGS (48)
2453
  ebx - SSF_SET_FONT_SMOOTH (10)
2438
  ebx - SSF_SET_FONT_SMOOTH (10)
2454
======================================================================
2439
======================================================================
2455
======== Функция 48, подфункция 11 - получить размер шрифтов. ========
2440
======== Функция 48, подфункция 11 - получить размер шрифтов. ========
2456
======================================================================
2441
======================================================================
2457
Параметры:
2442
Параметры:
2458
  * eax = 48 - номер функции
2443
  * eax = 48 - номер функции
2459
  * ebx = 11 - номер подфункции
2444
  * ebx = 11 - номер подфункции
2460
Возвращаемое значение:
2445
Возвращаемое значение:
2461
  * eax = текущая высота шрифта в пикселях
2446
  * eax = текущая высота шрифта в пикселях
2462
 
2447
 
2463
---------------------- Константы для регистров: ----------------------
2448
---------------------- Константы для регистров: ----------------------
2464
  eax - SF_STYLE_SETTINGS (48)
2449
  eax - SF_STYLE_SETTINGS (48)
2465
  ebx - SSF_GET_FONT_SIZE (11)
2450
  ebx - SSF_GET_FONT_SIZE (11)
2466
======================================================================
2451
======================================================================
2467
======= Функция 48, подфункция 12 - установить размер шрифтов. =======
2452
======= Функция 48, подфункция 12 - установить размер шрифтов. =======
2468
======================================================================
2453
======================================================================
2469
Параметры:
2454
Параметры:
2470
  * eax = 48 - номер функции
2455
  * eax = 48 - номер функции
2471
  * ebx = 12 - номер подфункции
2456
  * ebx = 12 - номер подфункции
2472
  * cl  = новая высота шрифта в пикселях
2457
  * cl  = новая высота шрифта в пикселях
2473
 
2458
 
2474
---------------------- Константы для регистров: ----------------------
2459
---------------------- Константы для регистров: ----------------------
2475
  eax - SF_STYLE_SETTINGS (48)
2460
  eax - SF_STYLE_SETTINGS (48)
2476
  ebx - SSF_SET_FONT_SIZE (12)
2461
  ebx - SSF_SET_FONT_SIZE (12)
2477
======================================================================
2462
======================================================================
2478
= Функция 48, подфункция 13 - установить скин с указанием кодировки. =
2463
= Функция 48, подфункция 13 - установить скин с указанием кодировки. =
2479
======================================================================
2464
======================================================================
2480
Параметры:
2465
Параметры:
2481
  * eax = 48 - номер функции
2466
  * eax = 48 - номер функции
2482
  * ebx = 13 - номер подфункции
2467
  * ebx = 13 - номер подфункции
2483
  * ecx = указатель на строку с путём к файлу скина
2468
  * ecx = указатель на строку с путём к файлу скина
2484
  * edx = кодировка строки, подробности указаны в описании функции 80.
2469
  * edx = кодировка строки, подробности указаны в описании функции 80.
2485
Возвращаемое значение:
2470
Возвращаемое значение:
2486
  * eax = 0 - успешно
2471
  * eax = 0 - успешно
2487
  * eax = 1 - не удалось загрузить файл
2472
  * eax = 1 - не удалось загрузить файл
2488
  * eax = 2 - файл не является файлом скина
2473
  * eax = 2 - файл не является файлом скина
2489
Замечания:
2474
Замечания:
2490
  * При успешной загрузке скина все окна извещаются о необходимости
2475
  * При успешной загрузке скина все окна извещаются о необходимости
2491
    перерисовки (событие 1).
2476
    перерисовки (событие 1).
2492
  * При загрузке система считывает скин из файла default.skn
2477
  * При загрузке система считывает скин из файла default.skn
2493
    на рамдиске.
2478
    на рамдиске.
2494
  * Пользователь может изменять скин статически, создав свой
2479
  * Пользователь может изменять скин статически, создав свой
2495
    default.skn, или динамически с помощью приложения desktop.
2480
    default.skn, или динамически с помощью приложения desktop.
2496
 
2481
 
2497
======================================================================
2482
======================================================================
2498
============ Функция 49 - Advanced Power Management (APM). ===========
2483
============ Функция 49 - Advanced Power Management (APM). ===========
2499
======================================================================
2484
======================================================================
2500
Параметры:
2485
Параметры:
2501
  * eax = 49 - номер функции
2486
  * eax = 49 - номер функции
2502
  * dx = номер функции APM (аналог ax в спецификации)
2487
  * dx = номер функции APM (аналог ax в спецификации)
2503
  * bx, cx = параметры функции APM
2488
  * bx, cx = параметры функции APM
2504
Возвращаемое значение:
2489
Возвращаемое значение:
2505
  * 16-битные регистры ax, bx, cx, dx, si, di и флаг CF
2490
  * 16-битные регистры ax, bx, cx, dx, si, di и флаг CF
2506
    установлены в соответствии со спецификацией APM
2491
    установлены в соответствии со спецификацией APM
2507
  * старшие половины 32-битных регистров eax, ebx, ecx,
2492
  * старшие половины 32-битных регистров eax, ebx, ecx,
2508
    edx, esi, edi разрушаются
2493
    edx, esi, edi разрушаются
2509
Замечания:
2494
Замечания:
2510
  * Спецификация APM 1.2 описывается в документе
2495
  * Спецификация APM 1.2 описывается в документе
2511
    "Advanced Power Management (APM) BIOS Specification"
2496
    "Advanced Power Management (APM) BIOS Specification"
2512
    (Revision 1.2), доступном на
2497
    (Revision 1.2), доступном на
2513
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2498
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2514
    кроме того, она включена в известный Interrupt List by Ralf Brown
2499
    кроме того, она включена в известный Interrupt List by Ralf Brown
2515
    (http://www.pobox.com/~ralf/files.html,
2500
    (http://www.pobox.com/~ralf/files.html,
2516
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2501
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2517
 
2502
 
2518
---------------------- Константы для регистров: ----------------------
2503
---------------------- Константы для регистров: ----------------------
2519
  eax - SF_APM (49)
2504
  eax - SF_APM (49)
2520
======================================================================
2505
======================================================================
2521
================= Функция 50 - установка формы окна. =================
2506
================= Функция 50 - установка формы окна. =================
2522
======================================================================
2507
======================================================================
2523
Обычные окна представляют собой прямоугольники. С помощью этой функции
2508
Обычные окна представляют собой прямоугольники. С помощью этой функции
2524
окну можно придать произвольную форму. Форма задаётся набором точек
2509
окну можно придать произвольную форму. Форма задаётся набором точек
2525
внутри обрамляющего прямоугольника, принадлежащих окну. Положение и
2510
внутри обрамляющего прямоугольника, принадлежащих окну. Положение и
2526
размеры обрамляющего прямоугольника задаются функцией 0 и изменяются
2511
размеры обрамляющего прямоугольника задаются функцией 0 и изменяются
2527
функцией 67.
2512
функцией 67.
2528
 
2513
 
2529
--------------- Установка данных с информацией о форме ---------------
2514
--------------- Установка данных с информацией о форме ---------------
2530
Параметры:
2515
Параметры:
2531
  * eax = 50 - номер функции
2516
  * eax = 50 - номер функции
2532
  * ebx = 0 - номер подфункции
2517
  * ebx = 0 - номер подфункции
2533
  * ecx = указатель на данные формы (массив байт 0/1)
2518
  * ecx = указатель на данные формы (массив байт 0/1)
2534
Возвращаемое значение:
2519
Возвращаемое значение:
2535
  * функция не возвращает значения
2520
  * функция не возвращает значения
2536
 
2521
 
2537
------------------ Установка масштаба данных формы -------------------
2522
------------------ Установка масштаба данных формы -------------------
2538
Параметры:
2523
Параметры:
2539
  * eax = 50 - номер функции
2524
  * eax = 50 - номер функции
2540
  * ebx = 1 - номер подфункции
2525
  * ebx = 1 - номер подфункции
2541
  * ecx задаёт масштаб: каждый байт данных определяет
2526
  * ecx задаёт масштаб: каждый байт данных определяет
2542
    (2^scale)*(2^scale) пикселей
2527
    (2^scale)*(2^scale) пикселей
2543
Возвращаемое значение:
2528
Возвращаемое значение:
2544
  * функция не возвращает значения
2529
  * функция не возвращает значения
2545
Замечания:
2530
Замечания:
2546
  * Масштаб по умолчанию равен 0 (масштабирующий множитель 1). Если в
2531
  * Масштаб по умолчанию равен 0 (масштабирующий множитель 1). Если в
2547
    данных формы один байт соответствует одному пикселю, то масштаб
2532
    данных формы один байт соответствует одному пикселю, то масштаб
2548
    можно не устанавливать.
2533
    можно не устанавливать.
2549
  * Обозначим xsize = ширина окна (в пикселях), ysize = высота;
2534
  * Обозначим xsize = ширина окна (в пикселях), ysize = высота;
2550
    обратите внимание, что они на единицу больше, чем устанавливаемые
2535
    обратите внимание, что они на единицу больше, чем устанавливаемые
2551
    функциями 0, 67.
2536
    функциями 0, 67.
2552
  * По определению масштаба xsize и ysize должны делиться на 2^scale.
2537
  * По определению масштаба xsize и ysize должны делиться на 2^scale.
2553
  * Байт данных по смещению a должен быть 0/1 и
2538
  * Байт данных по смещению a должен быть 0/1 и
2554
    определяет принадлежность окну квадрата со стороной 2^scale
2539
    определяет принадлежность окну квадрата со стороной 2^scale
2555
    (при scale=0 получаем пиксель) и координатами левого верхнего угла
2540
    (при scale=0 получаем пиксель) и координатами левого верхнего угла
2556
    (a mod (xsize shr scale), a div (xsize shr scale))
2541
    (a mod (xsize shr scale), a div (xsize shr scale))
2557
  * Размер данных: (xsize shr scale)*(ysize shr scale).
2542
  * Размер данных: (xsize shr scale)*(ysize shr scale).
2558
  * Данные должны присутствовать в памяти и не меняться
2543
  * Данные должны присутствовать в памяти и не меняться
2559
    после установки формы.
2544
    после установки формы.
2560
  * Система просматривает данные о форме при каждой перерисовке окна
2545
  * Система просматривает данные о форме при каждой перерисовке окна
2561
    функцией 0.
2546
    функцией 0.
2562
  * Вызов подфункции 0 с нулевым указателем приводит к возврату
2547
  * Вызов подфункции 0 с нулевым указателем приводит к возврату
2563
    к прямоугольной форме.
2548
    к прямоугольной форме.
2564
 
2549
 
2565
---------------------- Константы для регистров: ----------------------
2550
---------------------- Константы для регистров: ----------------------
2566
  eax - SF_SET_WINDOW_SHAPE (50)
2551
  eax - SF_SET_WINDOW_SHAPE (50)
2567
======================================================================
2552
======================================================================
2568
===================== Функция 51 - создать поток. ====================
2553
===================== Функция 51 - создать поток. ====================
2569
======================================================================
2554
======================================================================
2570
Параметры:
2555
Параметры:
2571
  * eax = 51 - номер функции
2556
  * eax = 51 - номер функции
2572
  * ebx = 1 - единственная подфункция
2557
  * ebx = 1 - единственная подфункция
2573
  * ecx = адрес точки входа потока (начальный eip)
2558
  * ecx = адрес точки входа потока (начальный eip)
2574
  * edx = указатель стэка потока (начальный esp)
2559
  * edx = указатель стэка потока (начальный esp)
2575
Возвращаемое значение:
2560
Возвращаемое значение:
2576
  * eax = -1 - ошибка (в системе слишком много потоков)
2561
  * eax = -1 - ошибка (в системе слишком много потоков)
2577
  * иначе eax = TID - идентификатор потока
2562
  * иначе eax = TID - идентификатор потока
2578
 
2563
 
2579
---------------------- Константы для регистров: ----------------------
2564
---------------------- Константы для регистров: ----------------------
2580
  eax - SF_CREATE_THREAD (51)
2565
  eax - SF_CREATE_THREAD (51)
2581
======================================================================
2566
======================================================================
2582
====================== Функция 54, подфункция 0 ======================
2567
====================== Функция 54, подфункция 0 ======================
2583
============== Узнать количество слотов в буфере обмена. =============
2568
============== Узнать количество слотов в буфере обмена. =============
2584
======================================================================
2569
======================================================================
2585
Параметры:
2570
Параметры:
2586
  * eax = 54 - номер функции
2571
  * eax = 54 - номер функции
2587
  * ebx = 0 - номер подфункции
2572
  * ebx = 0 - номер подфункции
2588
Возвращаемое значение:
2573
Возвращаемое значение:
2589
  * eax = количество слотов в буфере
2574
  * eax = количество слотов в буфере
2590
  * eax = -1 - отсутствует область главного списка
2575
  * eax = -1 - отсутствует область главного списка
2591
 
2576
 
2592
---------------------- Константы для регистров: ----------------------
2577
---------------------- Константы для регистров: ----------------------
2593
  eax - SF_CLIPBOARD (54)
2578
  eax - SF_CLIPBOARD (54)
2594
  ebx - SSF_GET_SLOT_COUNT (0)
2579
  ebx - SSF_GET_SLOT_COUNT (0)
2595
======================================================================
2580
======================================================================
2596
====================== Функция 54, подфункция 1 ======================
2581
====================== Функция 54, подфункция 1 ======================
2597
================== Считать данные из буфера обмена. ==================
2582
================== Считать данные из буфера обмена. ==================
2598
======================================================================
2583
======================================================================
2599
Параметры:
2584
Параметры:
2600
  * eax = 54 - номер функции
2585
  * eax = 54 - номер функции
2601
  * ebx = 1 - номер подфункции
2586
  * ebx = 1 - номер подфункции
2602
  * eсx = номер слота
2587
  * eсx = номер слота
2603
Возвращаемое значение:
2588
Возвращаемое значение:
2604
  * eax = если успешно - указатель на область памяти с данными
2589
  * eax = если успешно - указатель на область памяти с данными
2605
  * eax = 1 - ошибка
2590
  * eax = 1 - ошибка
2606
  * eax = -1 - отсутствует область главного списка
2591
  * eax = -1 - отсутствует область главного списка
2607
Замечания:
2592
Замечания:
2608
  * буфер, на который указывает eax, содержит следующую информацию:
2593
  * буфер, на который указывает eax, содержит следующую информацию:
2609
    * +0: dword: общая длина данных
2594
    * +0: dword: общая длина данных
2610
    * +4: dword: определяет тип данныx:
2595
    * +4: dword: определяет тип данныx:
2611
      * 0 = Текст
2596
      * 0 = Текст
2612
      * 1 = Текст с блочным выделением
2597
      * 1 = Текст с блочным выделением
2613
      * 2 = Изображение
2598
      * 2 = Изображение
2614
      * 3 = RAW
2599
      * 3 = RAW
2615
      * 4 и выше зарезервировано
2600
      * 4 и выше зарезервировано
2616
    * +8: более детально смотрите файл clipboard_container_rus.txt
2601
    * +8: более детально смотрите файл clipboard_container_rus.txt
2617
  * Функция должна использоваться совместно с 68.11. Приложение должно
2602
  * Функция должна использоваться совместно с 68.11. Приложение должно
2618
    предварительно проинициализировать локальную кучу вызовом 68.11.
2603
    предварительно проинициализировать локальную кучу вызовом 68.11.
2619
        
2604
        
2620
---------------------- Константы для регистров: ----------------------
2605
---------------------- Константы для регистров: ----------------------
2621
  eax - SF_CLIPBOARD (54)
2606
  eax - SF_CLIPBOARD (54)
2622
  ebx - SSF_READ_CB (1)
2607
  ebx - SSF_READ_CB (1)
2623
======================================================================
2608
======================================================================
2624
====================== Функция 54, подфункция 2 ======================
2609
====================== Функция 54, подфункция 2 ======================
2625
================== Записать данные в буфер обмена. ===================
2610
================== Записать данные в буфер обмена. ===================
2626
======================================================================
2611
======================================================================
2627
Параметры:
2612
Параметры:
2628
  * eax = 54 - номер функции
2613
  * eax = 54 - номер функции
2629
  * ebx = 2 - номер подфункции
2614
  * ebx = 2 - номер подфункции
2630
  * eсx = количество копируемых байт
2615
  * eсx = количество копируемых байт
2631
  * edx = указатель на буфер под копируемые данные
2616
  * edx = указатель на буфер под копируемые данные
2632
Возвращаемое значение:
2617
Возвращаемое значение:
2633
  * eax = 0 - успешно
2618
  * eax = 0 - успешно
2634
  * eax = 1 - ошибка
2619
  * eax = 1 - ошибка
2635
  * eax = -1 - отсутствует область главного списка
2620
  * eax = -1 - отсутствует область главного списка
2636
 
2621
 
2637
---------------------- Константы для регистров: ----------------------
2622
---------------------- Константы для регистров: ----------------------
2638
  eax - SF_CLIPBOARD (54)
2623
  eax - SF_CLIPBOARD (54)
2639
  ebx - SSF_WRITE_CB (2)
2624
  ebx - SSF_WRITE_CB (2)
2640
======================================================================
2625
======================================================================
2641
====================== Функция 54, подфункция 3 ======================
2626
====================== Функция 54, подфункция 3 ======================
2642
========= Удалить последний слот с данными в буфере обмена ===========
2627
========= Удалить последний слот с данными в буфере обмена ===========
2643
======================================================================
2628
======================================================================
2644
Параметры:
2629
Параметры:
2645
  * eax = 54 - номер функции
2630
  * eax = 54 - номер функции
2646
  * ebx = 3 - номер подфункции
2631
  * ebx = 3 - номер подфункции
2647
Возвращаемое значение:
2632
Возвращаемое значение:
2648
  * eax = 0 - успешно
2633
  * eax = 0 - успешно
2649
  * eax = 1 - ошибка
2634
  * eax = 1 - ошибка
2650
  * eax = -1 - отсутствует область главного списка
2635
  * eax = -1 - отсутствует область главного списка
2651
 
2636
 
2652
---------------------- Константы для регистров: ----------------------
2637
---------------------- Константы для регистров: ----------------------
2653
  eax - SF_CLIPBOARD (54)
2638
  eax - SF_CLIPBOARD (54)
2654
  ebx - SSF_DEL_SLOT (3)
2639
  ebx - SSF_DEL_SLOT (3)
2655
======================================================================
2640
======================================================================
2656
====================== Функция 54, подфункция 4 ======================
2641
====================== Функция 54, подфункция 4 ======================
2657
=================== Аварийный сброс блокировки буфера ================
2642
=================== Аварийный сброс блокировки буфера ================
2658
======================================================================
2643
======================================================================
2659
Параметры:
2644
Параметры:
2660
  * eax = 54 - номер функции
2645
  * eax = 54 - номер функции
2661
  * ebx = 4 - номер подфункции
2646
  * ebx = 4 - номер подфункции
2662
Возвращаемое значение:
2647
Возвращаемое значение:
2663
  * eax = 0 - успешно
2648
  * eax = 0 - успешно
2664
  * eax = -1 - отсутствует область главного списка или нет блокировки
2649
  * eax = -1 - отсутствует область главного списка или нет блокировки
2665
Замечания:
2650
Замечания:
2666
  * Используется в исключительных случаях, когда зависшее или убитое
2651
  * Используется в исключительных случаях, когда зависшее или убитое
2667
    приложение заблокировало работу с буфером обмена.
2652
    приложение заблокировало работу с буфером обмена.
2668
 
2653
 
2669
---------------------- Константы для регистров: ----------------------
2654
---------------------- Константы для регистров: ----------------------
2670
  eax - SF_CLIPBOARD (54)
2655
  eax - SF_CLIPBOARD (54)
2671
  ebx - SSF_UNLOCK_BUFFER (4)
2656
  ebx - SSF_UNLOCK_BUFFER (4)
2672
======================================================================
2657
======================================================================
2673
====================== Функция 55, подфункция 55 =====================
2658
====================== Функция 55, подфункция 55 =====================
2674
========== Начать проигрывать данные на встроенном спикере. ==========
2659
========== Начать проигрывать данные на встроенном спикере. ==========
2675
======================================================================
2660
======================================================================
2676
Параметры:
2661
Параметры:
2677
  * eax = 55 - номер функции
2662
  * eax = 55 - номер функции
2678
  * ebx = 55 - номер подфункции
2663
  * ebx = 55 - номер подфункции
2679
  * esi = указатель на данные
2664
  * esi = указатель на данные
2680
Возвращаемое значение:
2665
Возвращаемое значение:
2681
  * eax = 0 - успешно
2666
  * eax = 0 - успешно
2682
  * eax = 55 - ошибка (спикер отключён или занят)
2667
  * eax = 55 - ошибка (спикер отключён или занят)
2683
Данные - это массив элементов переменной длины.
2668
Данные - это массив элементов переменной длины.
2684
Формат каждого элемента определяется первым байтом:
2669
Формат каждого элемента определяется первым байтом:
2685
  * 0 = конец данных
2670
  * 0 = конец данных
2686
  * 1..0x80 = задаёт длительность звучания в сотых долях секунды
2671
  * 1..0x80 = задаёт длительность звучания в сотых долях секунды
2687
    ноты, определяемой непосредственным значением частоты
2672
    ноты, определяемой непосредственным значением частоты
2688
    * следующее слово (2 байта) содержит делитель частоты;
2673
    * следующее слово (2 байта) содержит делитель частоты;
2689
      частота определяется как 1193180/divider
2674
      частота определяется как 1193180/divider
2690
  * 0x81 = invalid
2675
  * 0x81 = invalid
2691
  * 0x82..0xFF = нота, определяемая октавой и номером:
2676
  * 0x82..0xFF = нота, определяемая октавой и номером:
2692
    * длительность в сотых долях секунды = (первый байт)-0x81
2677
    * длительность в сотых долях секунды = (первый байт)-0x81
2693
    * присутствует ещё один байт;
2678
    * присутствует ещё один байт;
2694
    * (второй байт)=0xFF - пауза
2679
    * (второй байт)=0xFF - пауза
2695
    * иначе он имеет вид a*0x10+b, где b=номер ноты в октаве от 1
2680
    * иначе он имеет вид a*0x10+b, где b=номер ноты в октаве от 1
2696
      до 12, a=номер октавы (считая с 0)
2681
      до 12, a=номер октавы (считая с 0)
2697
Замечания:
2682
Замечания:
2698
  * Пищание спикером может быть запрещено/разрешено подфункцией 8
2683
  * Пищание спикером может быть запрещено/разрешено подфункцией 8
2699
    функции 18.
2684
    функции 18.
2700
  * Функция возвращает управление, сообщив куда следует информацию
2685
  * Функция возвращает управление, сообщив куда следует информацию
2701
    о запросе. Само проигрывание идёт независимо от программы.
2686
    о запросе. Само проигрывание идёт независимо от программы.
2702
  * Данные должны сохраняться в памяти по крайней мере
2687
  * Данные должны сохраняться в памяти по крайней мере
2703
    до конца проигрывания.
2688
    до конца проигрывания.
2704
 
2689
 
2705
---------------------- Константы для регистров: ----------------------
2690
---------------------- Константы для регистров: ----------------------
2706
  eax - SF_SPEAKER_PLAY (55)
2691
  eax - SF_SPEAKER_PLAY (55)
2707
======================================================================
2692
======================================================================
2708
======================= Функция 57 - PCI BIOS. =======================
2693
======================= Функция 57 - PCI BIOS. =======================
2709
======================================================================
2694
======================================================================
2710
Параметры:
2695
Параметры:
2711
  * eax = 57 - номер функции
2696
  * eax = 57 - номер функции
2712
  * ebp соответствует регистру al в спецификации PCI BIOS
2697
  * ebp соответствует регистру al в спецификации PCI BIOS
2713
  * остальные регистры - по спецификации PCI BIOS
2698
  * остальные регистры - по спецификации PCI BIOS
2714
Возвращаемое значение:
2699
Возвращаемое значение:
2715
  * CF не определён
2700
  * CF не определён
2716
  * остальные регистры - по спецификации PCI BIOS
2701
  * остальные регистры - по спецификации PCI BIOS
2717
Замечания:
2702
Замечания:
2718
  * Многих результатов этой функции можно также добиться вызовом
2703
  * Многих результатов этой функции можно также добиться вызовом
2719
    соответствующих подфункций функции 62.
2704
    соответствующих подфункций функции 62.
2720
  * Функция вызывает расширение PCI32 BIOS, документированное,
2705
  * Функция вызывает расширение PCI32 BIOS, документированное,
2721
    например, в http://alpha1.dyns.net/files/PCI/bios21.pdf.
2706
    например, в http://alpha1.dyns.net/files/PCI/bios21.pdf.
2722
  * Если BIOS не поддерживает это расширение, поведение функции
2707
  * Если BIOS не поддерживает это расширение, поведение функции
2723
    эмулируется (через аналоги подфункций функции 62 режима ядра).
2708
    эмулируется (через аналоги подфункций функции 62 режима ядра).
2724
 
2709
 
2725
---------------------- Константы для регистров: ----------------------
2710
---------------------- Константы для регистров: ----------------------
2726
  eax - SF_PCI_BIOS (57)
2711
  eax - SF_PCI_BIOS (57)
2727
======================================================================
2712
======================================================================
2728
=========== Функция 60 - Inter Process Communication (IPC). ==========
2713
=========== Функция 60 - Inter Process Communication (IPC). ==========
2729
======================================================================
2714
======================================================================
2730
IPC применяется для посылок сообщений от одного процесса/потока
2715
IPC применяется для посылок сообщений от одного процесса/потока
2731
другому. При этом следует предварительно договориться о том, как
2716
другому. При этом следует предварительно договориться о том, как
2732
интерпретировать конкретное сообщение.
2717
интерпретировать конкретное сообщение.
2733
 
2718
 
2734
-------- Подфункция 1 - установить область для получения IPC ---------
2719
-------- Подфункция 1 - установить область для получения IPC ---------
2735
Вызывается процессом-приёмником.
2720
Вызывается процессом-приёмником.
2736
Параметры:
2721
Параметры:
2737
  * eax = 60 - номер функции
2722
  * eax = 60 - номер функции
2738
  * ebx = 1 - номер подфункции
2723
  * ebx = 1 - номер подфункции
2739
  * ecx = указатель на буфер
2724
  * ecx = указатель на буфер
2740
  * edx = размер буфера
2725
  * edx = размер буфера
2741
Возвращаемое значение:
2726
Возвращаемое значение:
2742
  * eax = 0 - всегда успешно
2727
  * eax = 0 - всегда успешно
2743
Формат IPC-буфера:
2728
Формат IPC-буфера:
2744
  * +0: dword: если здесь не 0, то буфер считается заблокированным;
2729
  * +0: dword: если здесь не 0, то буфер считается заблокированным;
2745
    блокируйте/разблокируйте буфер, когда вы с ним активно работаете
2730
    блокируйте/разблокируйте буфер, когда вы с ним активно работаете
2746
    и вам надо, чтобы извне не изменялись данные буфера
2731
    и вам надо, чтобы извне не изменялись данные буфера
2747
    (не поступали новые сообщения)
2732
    (не поступали новые сообщения)
2748
  * +4: dword: занято места в буфере (в байтах)
2733
  * +4: dword: занято места в буфере (в байтах)
2749
  * +8: первое сообщение
2734
  * +8: первое сообщение
2750
  * +8+n: второе сообщение
2735
  * +8+n: второе сообщение
2751
  * ...
2736
  * ...
2752
Формат сообщения:
2737
Формат сообщения:
2753
  * +0: dword: PID процесса/потока, пославшего сообщение
2738
  * +0: dword: PID процесса/потока, пославшего сообщение
2754
  * +4: dword: длина сообщения (не считая этот заголовок)
2739
  * +4: dword: длина сообщения (не считая этот заголовок)
2755
  * +8: n*byte: данные сообщения
2740
  * +8: n*byte: данные сообщения
2756
 
2741
 
2757
--------------- Подфункция 2 - послать сообщение IPC. ----------------
2742
--------------- Подфункция 2 - послать сообщение IPC. ----------------
2758
Вызывается процессом-инициатором.
2743
Вызывается процессом-инициатором.
2759
Параметры:
2744
Параметры:
2760
  * eax = 60 - номер функции
2745
  * eax = 60 - номер функции
2761
  * ebx = 2 - номер подфункции
2746
  * ebx = 2 - номер подфункции
2762
  * ecx = PID приёмника
2747
  * ecx = PID приёмника
2763
  * edx = указатель на данные сообщения
2748
  * edx = указатель на данные сообщения
2764
  * esi = длина сообщения (в байтах)
2749
  * esi = длина сообщения (в байтах)
2765
Возвращаемое значение:
2750
Возвращаемое значение:
2766
  * eax = 0 - успешно
2751
  * eax = 0 - успешно
2767
  * eax = 1 - приёмник не определил буфер для IPC-сообщений
2752
  * eax = 1 - приёмник не определил буфер для IPC-сообщений
2768
    (может быть, ещё не успел, а может быть, это не тот поток,
2753
    (может быть, ещё не успел, а может быть, это не тот поток,
2769
    который нужен)
2754
    который нужен)
2770
  * eax = 2 - приёмник заблокировал IPC-буфер;
2755
  * eax = 2 - приёмник заблокировал IPC-буфер;
2771
    попробуйте немного подождать
2756
    попробуйте немного подождать
2772
  * eax = 3 - переполнение IPC-буфера приёмника
2757
  * eax = 3 - переполнение IPC-буфера приёмника
2773
  * eax = 4 - процесса/потока с таким PID не существует
2758
  * eax = 4 - процесса/потока с таким PID не существует
2774
Замечания:
2759
Замечания:
2775
  * Система сразу после записи IPC-сообщения в буфер посылает
2760
  * Система сразу после записи IPC-сообщения в буфер посылает
2776
    потоку-приёмнику событие с кодом 7 (см. коды событий).
2761
    потоку-приёмнику событие с кодом 7 (см. коды событий).
2777
 
2762
 
2778
---------------------- Константы для регистров: ----------------------
2763
---------------------- Константы для регистров: ----------------------
2779
  eax - SF_IPC (60)
2764
  eax - SF_IPC (60)
2780
  ebx - SSF_SET_AREA (1), SSF_SEND_MESSAGE (2)
2765
  ebx - SSF_SET_AREA (1), SSF_SEND_MESSAGE (2)
2781
======================================================================
2766
======================================================================
2782
=== Функция 61 - получить параметры для прямого доступа к графике. ===
2767
=== Функция 61 - получить параметры для прямого доступа к графике. ===
2783
======================================================================
2768
======================================================================
2784
Программе доступны данные графического экрана (область памяти, которая
2769
Программе доступны данные графического экрана (область памяти, которая
2785
собственно и отображает содержимое экрана) напрямую без вызовов
2770
собственно и отображает содержимое экрана) напрямую без вызовов
2786
системных функций через селектор gs:
2771
системных функций через селектор gs:
2787
	mov	eax, [gs:0]
2772
	mov	eax, [gs:0]
2788
поместит в eax первый dword буфера, содержащий информацию о цвете
2773
поместит в eax первый dword буфера, содержащий информацию о цвете
2789
левой верхней точки (и, возможно, цвета нескольких следующих).
2774
левой верхней точки (и, возможно, цвета нескольких следующих).
2790
	mov	[gs:0], eax
2775
	mov	[gs:0], eax
2791
при работе в режимах VESA c LFB
2776
при работе в режимах VESA c LFB
2792
установит цвет левой верхней точки
2777
установит цвет левой верхней точки
2793
(и возможно, цвета нескольких следующих).
2778
(и возможно, цвета нескольких следующих).
2794
Для интерпретации данных графического экрана требуется знание
2779
Для интерпретации данных графического экрана требуется знание
2795
некоторых параметров, которые возвращаются этой функцией.
2780
некоторых параметров, которые возвращаются этой функцией.
2796
Замечания:
2781
Замечания:
2797
  * Параметры графики очень редко меняются при работе системы.
2782
  * Параметры графики очень редко меняются при работе системы.
2798
  * При изменении видеорежима система перерисовывает все окна
2783
  * При изменении видеорежима система перерисовывает все окна
2799
    (событие с кодом 1) и перерисовывает фон (событие 5).
2784
    (событие с кодом 1) и перерисовывает фон (событие 5).
2800
    Эти же события происходят и в других случаях,
2785
    Эти же события происходят и в других случаях,
2801
    которые встречаются значительно чаще, чем изменение видеорежима.
2786
    которые встречаются значительно чаще, чем изменение видеорежима.
2802
  * При работе в видеорежимах с LFB селектор gs указывает на
2787
  * При работе в видеорежимах с LFB селектор gs указывает на
2803
    собственно LFB, так что чтение/запись по gs приводят
2788
    собственно LFB, так что чтение/запись по gs приводят
2804
    непосредственно к изменению содержимого экрана. При работе в
2789
    непосредственно к изменению содержимого экрана. При работе в
2805
    видеорежимах без LFB gs указывает на некоторую область данных
2790
    видеорежимах без LFB gs указывает на некоторую область данных
2806
    ядра, причём все функции вывода на экран добросовестно выполняют
2791
    ядра, причём все функции вывода на экран добросовестно выполняют
2807
    двойную работу по записи непосредственно на экран и по записи
2792
    двойную работу по записи непосредственно на экран и по записи
2808
    в этот буфер. В результате при чтении содержимого этого буфера
2793
    в этот буфер. В результате при чтении содержимого этого буфера
2809
    результаты соответствуют содержимому экрана
2794
    результаты соответствуют содержимому экрана
2810
    (с, вообще говоря, большим цветовым разрешением),
2795
    (с, вообще говоря, большим цветовым разрешением),
2811
    а запись игнорируется.
2796
    а запись игнорируется.
2812
    Исключением является режим 320*200, для которого в главном цикле
2797
    Исключением является режим 320*200, для которого в главном цикле
2813
    системного потока выполняется обновление экрана в соответствии
2798
    системного потока выполняется обновление экрана в соответствии
2814
    с движениями курсора мыши.
2799
    с движениями курсора мыши.
2815
 
2800
 
2816
------------------------- Разрешение экрана --------------------------
2801
------------------------- Разрешение экрана --------------------------
2817
Параметры:
2802
Параметры:
2818
  * eax = 61 - номер функции
2803
  * eax = 61 - номер функции
2819
  * ebx = 1 - номер подфункции
2804
  * ebx = 1 - номер подфункции
2820
Возвращаемое значение:
2805
Возвращаемое значение:
2821
  * eax = [разрешение по оси x]*65536 + [разрешение по оси y]
2806
  * eax = [разрешение по оси x]*65536 + [разрешение по оси y]
2822
Замечания:
2807
Замечания:
2823
  * Можно использовать функцию 14 с учётом того, что она возвращает
2808
  * Можно использовать функцию 14 с учётом того, что она возвращает
2824
    размеры на 1 меньше. Это полностью эквивалентный способ.
2809
    размеры на 1 меньше. Это полностью эквивалентный способ.
2825
 
2810
 
2826
------------------------ Число бит на пиксель ------------------------
2811
------------------------ Число бит на пиксель ------------------------
2827
Параметры:
2812
Параметры:
2828
  * eax = 61 - номер функции
2813
  * eax = 61 - номер функции
2829
  * ebx = 2 - номер подфункции
2814
  * ebx = 2 - номер подфункции
2830
Возвращаемое значение:
2815
Возвращаемое значение:
2831
  * eax = число бит на пиксель (24 или 32)
2816
  * eax = число бит на пиксель (24 или 32)
2832
 
2817
 
2833
------------------------ Число байт на строку ------------------------
2818
------------------------ Число байт на строку ------------------------
2834
Параметры:
2819
Параметры:
2835
  * eax = 61 - номер функции
2820
  * eax = 61 - номер функции
2836
  * ebx = 3 - номер подфункции
2821
  * ebx = 3 - номер подфункции
2837
Возвращаемое значение:
2822
Возвращаемое значение:
2838
  * eax = число байт, которое занимает одна строка развёртки
2823
  * eax = число байт, которое занимает одна строка развёртки
2839
    (горизонтальная линия на экране)
2824
    (горизонтальная линия на экране)
2840
 
2825
 
2841
---------------------- Константы для регистров: ----------------------
2826
---------------------- Константы для регистров: ----------------------
2842
  eax - SF_GET_GRAPHICAL_PARAMS (61)
2827
  eax - SF_GET_GRAPHICAL_PARAMS (61)
2843
  ebx - SSF_SCREEN_SIZE (1), SSF_BITS_PER_PIXEL (2),
2828
  ebx - SSF_SCREEN_SIZE (1), SSF_BITS_PER_PIXEL (2),
2844
    SSF_BYTES_PER_LINE (3)
2829
    SSF_BYTES_PER_LINE (3)
2845
======================================================================
2830
======================================================================
2846
===== Функция 62, подфункция 0 - получить версию PCI-интерфейса. =====
2831
===== Функция 62, подфункция 0 - получить версию PCI-интерфейса. =====
2847
======================================================================
2832
======================================================================
2848
Параметры:
2833
Параметры:
2849
  * eax = 62 - номер функции
2834
  * eax = 62 - номер функции
2850
  * bl = 0 - номер подфункции
2835
  * bl = 0 - номер подфункции
2851
Возвращаемое значение:
2836
Возвращаемое значение:
2852
  * eax = -1 - доступ к PCI запрещён; иначе
2837
  * eax = -1 - доступ к PCI запрещён; иначе
2853
  * ah.al = версия PCI-интерфейса (ah=версия, al=подверсия)
2838
  * ah.al = версия PCI-интерфейса (ah=версия, al=подверсия)
2854
  * старшее слово eax обнулено
2839
  * старшее слово eax обнулено
2855
Замечания:
2840
Замечания:
2856
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2841
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2857
    для приложений подфункцией 12 функции 21.
2842
    для приложений подфункцией 12 функции 21.
2858
  * Если PCI BIOS не поддерживается, то значение ax неопределено.
2843
  * Если PCI BIOS не поддерживается, то значение ax неопределено.
2859
 
2844
 
2860
---------------------- Константы для регистров: ----------------------
2845
---------------------- Константы для регистров: ----------------------
2861
  eax - SF_PCI (62)
2846
  eax - SF_PCI (62)
2862
  ebx - SSF_GET_VERSION (0)
2847
  ebx - SSF_GET_VERSION (0)
2863
======================================================================
2848
======================================================================
2864
==== Функция 62, подфункция 1 - получить номер последней PCI-шины. ===
2849
==== Функция 62, подфункция 1 - получить номер последней PCI-шины. ===
2865
======================================================================
2850
======================================================================
2866
Параметры:
2851
Параметры:
2867
  * eax = 62 - номер функции
2852
  * eax = 62 - номер функции
2868
  * bl = 1 - номер подфункции
2853
  * bl = 1 - номер подфункции
2869
Возвращаемое значение:
2854
Возвращаемое значение:
2870
  * eax = -1 - доступ к PCI запрещён; иначе
2855
  * eax = -1 - доступ к PCI запрещён; иначе
2871
  * al = номер последней PCI-шины; оставшиеся байты eax разрушаются
2856
  * al = номер последней PCI-шины; оставшиеся байты eax разрушаются
2872
Замечания:
2857
Замечания:
2873
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2858
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2874
    для приложений подфункцией 12 функции 21.
2859
    для приложений подфункцией 12 функции 21.
2875
  * Если PCI BIOS не поддерживается, то значение al неопределено.
2860
  * Если PCI BIOS не поддерживается, то значение al неопределено.
2876
 
2861
 
2877
---------------------- Константы для регистров: ----------------------
2862
---------------------- Константы для регистров: ----------------------
2878
  eax - SF_PCI (62)
2863
  eax - SF_PCI (62)
2879
  ebx - SSF_GET_LAST_BUS (1)
2864
  ebx - SSF_GET_LAST_BUS (1)
2880
======================================================================
2865
======================================================================
2881
====================== Функция 62, подфункция 2 ======================
2866
====================== Функция 62, подфункция 2 ======================
2882
== Получить механизм обращения к конфигурационному пространству PCI. =
2867
== Получить механизм обращения к конфигурационному пространству PCI. =
2883
======================================================================
2868
======================================================================
2884
Параметры:
2869
Параметры:
2885
  * eax = 62 - номер функции
2870
  * eax = 62 - номер функции
2886
  * bl = 2 - номер подфункции
2871
  * bl = 2 - номер подфункции
2887
Возвращаемое значение:
2872
Возвращаемое значение:
2888
  * eax = -1 - доступ к PCI запрещён; иначе
2873
  * eax = -1 - доступ к PCI запрещён; иначе
2889
  * al = механизм (1 или 2); прочие байты eax разрушаются
2874
  * al = механизм (1 или 2); прочие байты eax разрушаются
2890
Замечания:
2875
Замечания:
2891
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2876
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2892
    для приложений подфункцией 12 функции 21.
2877
    для приложений подфункцией 12 функции 21.
2893
  * Механизм обращения выбирается в соответствии
2878
  * Механизм обращения выбирается в соответствии
2894
    с характеристиками оборудования.
2879
    с характеристиками оборудования.
2895
  * Подфункции чтения и записи автоматически работают
2880
  * Подфункции чтения и записи автоматически работают
2896
    с выбранным механизмом.
2881
    с выбранным механизмом.
2897
 
2882
 
2898
---------------------- Константы для регистров: ----------------------
2883
---------------------- Константы для регистров: ----------------------
2899
  eax - SF_PCI (62)
2884
  eax - SF_PCI (62)
2900
  ebx - SSF_GET_ADRR_MODE (2)
2885
  ebx - SSF_GET_ADRR_MODE (2)
2901
======================================================================
2886
======================================================================
2902
======== Функция 62, подфункции 4,5,6 - прочитать PCI-регистр. =======
2887
======== Функция 62, подфункции 4,5,6 - прочитать PCI-регистр. =======
2903
======================================================================
2888
======================================================================
2904
Параметры:
2889
Параметры:
2905
  * eax = 62 - номер функции
2890
  * eax = 62 - номер функции
2906
  * bl = 4 - читать байт
2891
  * bl = 4 - читать байт
2907
  * bl = 5 - читать слово
2892
  * bl = 5 - читать слово
2908
  * bl = 6 - читать двойное слово
2893
  * bl = 6 - читать двойное слово
2909
  * bh = номер PCI-шины
2894
  * bh = номер PCI-шины
2910
  * ch = dddddfff, где ddddd = номер устройства на шине,
2895
  * ch = dddddfff, где ddddd = номер устройства на шине,
2911
    fff = номер функции устройства
2896
    fff = номер функции устройства
2912
  * cl = номер регистра (должен быть чётным для bl=5,
2897
  * cl = номер регистра (должен быть чётным для bl=5,
2913
    делиться на 4 для bl=6)
2898
    делиться на 4 для bl=6)
2914
Возвращаемое значение:
2899
Возвращаемое значение:
2915
  * eax = -1 - ошибка (запрещён доступ к PCI или
2900
  * eax = -1 - ошибка (запрещён доступ к PCI или
2916
    неподдерживаемые параметры); иначе
2901
    неподдерживаемые параметры); иначе
2917
  * al/ax/eax (в зависимости от запрошенного размера) содержит данные;
2902
  * al/ax/eax (в зависимости от запрошенного размера) содержит данные;
2918
    оставшаяся часть регистра eax разрушается
2903
    оставшаяся часть регистра eax разрушается
2919
Замечания:
2904
Замечания:
2920
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2905
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2921
    для приложений подфункцией 12 функции 21.
2906
    для приложений подфункцией 12 функции 21.
2922
  * Механизм доступа 2 поддерживает только 16 устройств на шине и
2907
  * Механизм доступа 2 поддерживает только 16 устройств на шине и
2923
    игнорирует номер функции. Получить механизм доступа можно вызовом
2908
    игнорирует номер функции. Получить механизм доступа можно вызовом
2924
    подфункции 2.
2909
    подфункции 2.
2925
  * Некоторые регистры стандартны и существуют для всех устройств,
2910
  * Некоторые регистры стандартны и существуют для всех устройств,
2926
    некоторые определяются конкретным устройством. Список первых
2911
    некоторые определяются конкретным устройством. Список первых
2927
    входит, например, в известный Interrupt List by Ralf Brown
2912
    входит, например, в известный Interrupt List by Ralf Brown
2928
    (http://www.pobox.com/~ralf/files.html,
2913
    (http://www.pobox.com/~ralf/files.html,
2929
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2914
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2930
    список вторых должен быть указан в документации по устройству.
2915
    список вторых должен быть указан в документации по устройству.
2931
 
2916
 
2932
---------------------- Константы для регистров: ----------------------
2917
---------------------- Константы для регистров: ----------------------
2933
  eax - SF_PCI (62)
2918
  eax - SF_PCI (62)
2934
  ebx - SSF_READ_BYTE (4), SSF_READ_WORD (5), SSF_READ_DWORD (6)
2919
  ebx - SSF_READ_BYTE (4), SSF_READ_WORD (5), SSF_READ_DWORD (6)
2935
======================================================================
2920
======================================================================
2936
======= Функция 62, подфункции 8,9,10 - записать в PCI-регистр. ======
2921
======= Функция 62, подфункции 8,9,10 - записать в PCI-регистр. ======
2937
======================================================================
2922
======================================================================
2938
Параметры:
2923
Параметры:
2939
  * eax = 62 - номер функции
2924
  * eax = 62 - номер функции
2940
  * bl = 8 - писать байт
2925
  * bl = 8 - писать байт
2941
  * bl = 9 - писать слово
2926
  * bl = 9 - писать слово
2942
  * bl = 10 - писать двойное слово
2927
  * bl = 10 - писать двойное слово
2943
  * bh = номер PCI-шины
2928
  * bh = номер PCI-шины
2944
  * ch = dddddfff, где ddddd = номер устройства на шине,
2929
  * ch = dddddfff, где ddddd = номер устройства на шине,
2945
    fff = номер функции устройства
2930
    fff = номер функции устройства
2946
  * cl = номер регистра (должен быть чётным для bl=9,
2931
  * cl = номер регистра (должен быть чётным для bl=9,
2947
    делиться на 4 для bl=10)
2932
    делиться на 4 для bl=10)
2948
  * dl/dx/edx (в зависимости от запрошенного размера) содержит
2933
  * dl/dx/edx (в зависимости от запрошенного размера) содержит
2949
    данные для записи
2934
    данные для записи
2950
Возвращаемое значение:
2935
Возвращаемое значение:
2951
  * eax = -1 - ошибка (запрещён доступ к PCI или
2936
  * eax = -1 - ошибка (запрещён доступ к PCI или
2952
    неподдерживаемые параметры)
2937
    неподдерживаемые параметры)
2953
  * eax = 0 - успешно
2938
  * eax = 0 - успешно
2954
Замечания:
2939
Замечания:
2955
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2940
  * Предварительно должен быть разрешён низкоуровневый доступ к PCI
2956
    для приложений подфункцией 12 функции 21.
2941
    для приложений подфункцией 12 функции 21.
2957
  * Механизм доступа 2 поддерживает только 16 устройств на шине и
2942
  * Механизм доступа 2 поддерживает только 16 устройств на шине и
2958
    игнорирует номер функции. Получить механизм доступа можно вызовом
2943
    игнорирует номер функции. Получить механизм доступа можно вызовом
2959
    подфункции 2.
2944
    подфункции 2.
2960
  * Некоторые регистры стандартны и существуют для всех устройств,
2945
  * Некоторые регистры стандартны и существуют для всех устройств,
2961
    некоторые определяются конкретным устройством. Список первых
2946
    некоторые определяются конкретным устройством. Список первых
2962
    входит, например, в известный Interrupt List by Ralf Brown;
2947
    входит, например, в известный Interrupt List by Ralf Brown;
2963
    список вторых должен быть указан в документации по устройству.
2948
    список вторых должен быть указан в документации по устройству.
2964
 
2949
 
2965
---------------------- Константы для регистров: ----------------------
2950
---------------------- Константы для регистров: ----------------------
2966
  eax - SF_PCI (62)
2951
  eax - SF_PCI (62)
2967
  ebx - SSF_WRITE_BYTE (8), SSF_WRITE_WORD (9), SSF_WRITE_DWORD (10)
2952
  ebx - SSF_WRITE_BYTE (8), SSF_WRITE_WORD (9), SSF_WRITE_DWORD (10)
2968
======================================================================
2953
======================================================================
2969
================ Функция 63 - работа с доской отладки. ===============
2954
================ Функция 63 - работа с доской отладки. ===============
2970
======================================================================
2955
======================================================================
2971
Доска отладки представляет собой системный буфер (на 4096 байт),
2956
Доска отладки представляет собой системный буфер (на 4096 байт),
2972
в который любая программа может записать (вообще говоря, произвольные)
2957
в который любая программа может записать (вообще говоря, произвольные)
2973
данные и из которого другая программа может эти данные прочитать.
2958
данные и из которого другая программа может эти данные прочитать.
2974
Есть соглашение, в соответствии с которым записываемые данные -
2959
Есть соглашение, в соответствии с которым записываемые данные -
2975
текстовые строки, интерпретируемые как отладочные сообщения о ходе
2960
текстовые строки, интерпретируемые как отладочные сообщения о ходе
2976
выполнения программы. Ядро в определённых ситуациях также записывает
2961
выполнения программы. Ядро в определённых ситуациях также записывает
2977
на доску отладки сведения о выполнении некоторых функций;
2962
на доску отладки сведения о выполнении некоторых функций;
2978
по соглашению сообщения ядра начинаются с префикса "K : ".
2963
по соглашению сообщения ядра начинаются с префикса "K : ".
2979
Для просмотра доски отладки создано приложение board,
2964
Для просмотра доски отладки создано приложение board,
2980
которое считывает данные из буфера и отображает их в своём окне. board
2965
которое считывает данные из буфера и отображает их в своём окне. board
2981
понимает последовательность кодов 13,10 как переход на новую строку.
2966
понимает последовательность кодов 13,10 как переход на новую строку.
2982
Символ с нулевым кодом в конце строки не обязателен, но и не мешает.
2967
Символ с нулевым кодом в конце строки не обязателен, но и не мешает.
2983
В связи с появлением отладчика ценность доски отладки несколько
2968
В связи с появлением отладчика ценность доски отладки несколько
2984
снизилась, поскольку отладчик позволяет полностью контролировать ход
2969
снизилась, поскольку отладчик позволяет полностью контролировать ход
2985
выполнения программы, причём для этого не требуется никаких усилий
2970
выполнения программы, причём для этого не требуется никаких усилий
2986
со стороны самой программы. Тем не менее во многих случаях
2971
со стороны самой программы. Тем не менее во многих случаях
2987
доска отладки продолжает оставаться полезной.
2972
доска отладки продолжает оставаться полезной.
2988
 
2973
 
2989
---------------------------- Запись байта ----------------------------
2974
---------------------------- Запись байта ----------------------------
2990
Параметры:
2975
Параметры:
2991
  * eax = 63 - номер функции
2976
  * eax = 63 - номер функции
2992
  * ebx = 1 - номер подфункции
2977
  * ebx = 1 - номер подфункции
2993
  * cl = байт данных
2978
  * cl = байт данных
2994
Возвращаемое значение:
2979
Возвращаемое значение:
2995
  * функция не возвращает значения
2980
  * функция не возвращает значения
2996
Замечания:
2981
Замечания:
2997
  * Байт записывается в буфер. Длина буфера - 512 байт.
2982
  * Байт записывается в буфер. Длина буфера - 512 байт.
2998
    При переполнении буфера все полученные данные теряются
2983
    При переполнении буфера все полученные данные теряются
2999
    и заполнение начинается снова с нуля.
2984
    и заполнение начинается снова с нуля.
3000
  * Для вывода на доску отладки более сложных объектов (строк, чисел)
2985
  * Для вывода на доску отладки более сложных объектов (строк, чисел)
3001
    достаточно этой функции, вызываемой в цикле. Можно не писать
2986
    достаточно этой функции, вызываемой в цикле. Можно не писать
3002
    вручную соответствующий код, а воспользоваться файлом debug.inc,
2987
    вручную соответствующий код, а воспользоваться файлом debug.inc,
3003
    входящим в дистрибутив.
2988
    входящим в дистрибутив.
3004
 
2989
 
3005
---------------------------- Чтение байта ----------------------------
2990
---------------------------- Чтение байта ----------------------------
3006
Забирает байт из буфера.
2991
Забирает байт из буфера.
3007
Параметры:
2992
Параметры:
3008
  * eax = 63 - номер функции
2993
  * eax = 63 - номер функции
3009
  * ebx = 2 - номер подфункции
2994
  * ebx = 2 - номер подфункции
3010
Возвращаемое значение:
2995
Возвращаемое значение:
3011
  * eax = ebx = 0 - буфер пуст
2996
  * eax = ebx = 0 - буфер пуст
3012
  * eax = байт, ebx = 1 - байт успешно прочитан
2997
  * eax = байт, ebx = 1 - байт успешно прочитан
3013
 
2998
 
3014
---------------------- Константы для регистров: ----------------------
2999
---------------------- Константы для регистров: ----------------------
3015
  eax - SF_BOARD (63)
3000
  eax - SF_BOARD (63)
3016
  ebx - SSF_DEBUG_WRITE (1), SSF_DEBUG_READ (2)
3001
  ebx - SSF_DEBUG_WRITE (1), SSF_DEBUG_READ (2)
3017
======================================================================
3002
======================================================================
3018
========== Функция 64 - перераспределить память приложения. ==========
3003
========== Функция 64 - перераспределить память приложения. ==========
3019
======================================================================
3004
======================================================================
-
 
3005
 
-
 
3006
 !!! ВНИМАНИЕ. Данный интерфейс устарел и не должен использоваться !!!
-
 
3007
 
3020
Параметры:
3008
Параметры:
3021
  * eax = 64 - номер функции
3009
  * eax = 64 - номер функции
3022
  * ebx = 1 - единственная подфункция
3010
  * ebx = 1 - единственная подфункция
3023
  * ecx = новый размер памяти
3011
  * ecx = новый размер памяти
3024
Возвращаемое значение:
3012
Возвращаемое значение:
3025
  * eax = 0 - успешно
3013
  * eax = 0 - успешно
3026
  * eax = 1 - недостаточно памяти
3014
  * eax = 1 - недостаточно памяти
3027
Замечания:
3015
Замечания:
3028
  * Есть другой способ выделения/освобождения динамической памяти -
3016
  * Есть другой способ выделения/освобождения динамической памяти -
3029
    подфункции 11, 12, 13 функции 68.
3017
    подфункции 11, 12, 13 функции 68.
3030
  * Функция не может использоваться совместно с 68.11, 68.12, 68.13.
3018
  * Функция не может использоваться совместно с 68.11, 68.12, 68.13.
3031
    Вызов функции будет игнорироваться, если приложение создаст
3019
    Вызов функции будет игнорироваться, если приложение создаст
3032
    локальную кучу вызовом 68.11.
3020
    локальную кучу вызовом 68.11.
3033
 
3021
 
3034
---------------------- Константы для регистров: ----------------------
3022
---------------------- Константы для регистров: ----------------------
3035
  eax - SF_MEMORY_RESIZE (64)
3023
  eax - SF_MEMORY_RESIZE (64)
3036
======================================================================
3024
======================================================================
3037
========= Функция 65 - вывести изображение с палитрой в окно. ========
3025
========= Функция 65 - вывести изображение с палитрой в окно. ========
3038
======================================================================
3026
======================================================================
3039
Параметры:
3027
Параметры:
3040
  * eax = 65 - номер функции
3028
  * eax = 65 - номер функции
3041
  * ebx = указатель на изображение
3029
  * ebx = указатель на изображение
3042
  * ecx = [размер по оси x]*65536 + [размер по оси y]
3030
  * ecx = [размер по оси x]*65536 + [размер по оси y]
3043
  * edx = [координата по оси x]*65536 + [координата по оси y]
3031
  * edx = [координата по оси x]*65536 + [координата по оси y]
3044
  * esi = число бит на пиксель, должно быть 1,2,4,8,9,15,16,24 или 32
3032
  * esi = число бит на пиксель, должно быть 1,2,4,8,9,15,16,24 или 32
3045
  * edi = указатель на палитру (2 в степени esi цветов 0x00RRGGBB);
3033
  * edi = указатель на палитру (2 в степени esi цветов 0x00RRGGBB);
3046
          игнорируется при esi > 8
3034
          игнорируется при esi > 8
3047
  * ebp = смещение данных каждой следующей строки изображения
3035
  * ebp = смещение данных каждой следующей строки изображения
3048
          относительно предыдущей
3036
          относительно предыдущей
3049
Возвращаемое значение:
3037
Возвращаемое значение:
3050
  * функция не возвращает значения
3038
  * функция не возвращает значения
3051
Замечания:
3039
Замечания:
3052
  * Координаты изображения - это координаты верхнего левого угла
3040
  * Координаты изображения - это координаты верхнего левого угла
3053
    изображения относительно окна.
3041
    изображения относительно окна.
3054
  * Формат изображения с 1 битом на пиксель: каждый байт изображения,
3042
  * Формат изображения с 1 битом на пиксель: каждый байт изображения,
3055
    за исключением, быть может, последних байтов строк, содержит
3043
    за исключением, быть может, последних байтов строк, содержит
3056
    информацию о цвете 8 пикселей, старший бит соответствует первому
3044
    информацию о цвете 8 пикселей, старший бит соответствует первому
3057
    пикселю.
3045
    пикселю.
3058
  * Формат изображения с 2 битами на пиксель: каждый байт изображения,
3046
  * Формат изображения с 2 битами на пиксель: каждый байт изображения,
3059
    за исключением, быть может, последних байтов строк, содержит
3047
    за исключением, быть может, последних байтов строк, содержит
3060
    информацию о цвете 4 пикселей, старшие два бита соответствуют
3048
    информацию о цвете 4 пикселей, старшие два бита соответствуют
3061
    первому пикселю.
3049
    первому пикселю.
3062
  * Формат изображения с 4 битами на пиксель: каждый байт изображения,
3050
  * Формат изображения с 4 битами на пиксель: каждый байт изображения,
3063
    за исключением последних байтов строк (если ширина изображения
3051
    за исключением последних байтов строк (если ширина изображения
3064
    нечётна), содержит информацию о цвете 2 пикселей, старшая тетрада
3052
    нечётна), содержит информацию о цвете 2 пикселей, старшая тетрада
3065
    соответствует первому пикселю.
3053
    соответствует первому пикселю.
3066
  * Формат изображения с 8 битами на пиксель: каждый байт изображения
3054
  * Формат изображения с 8 битами на пиксель: каждый байт изображения
3067
    рассматривается как индекс в палитре.
3055
    рассматривается как индекс в палитре.
3068
  * Формат изображения с 9 битами на пиксель: каждый байт изображения
3056
  * Формат изображения с 9 битами на пиксель: каждый байт изображения
3069
    (8 бит) обозначает интенсивность серого для одного пикселя, т.о.
3057
    (8 бит) обозначает интенсивность серого для одного пикселя, т.о.
3070
    этот тип изображения идентичен 8 бит на пиксель без палитры.
3058
    этот тип изображения идентичен 8 бит на пиксель без палитры.
3071
  * Формат изображения с 15 битами на пиксель: цвет каждого пикселя
3059
  * Формат изображения с 15 битами на пиксель: цвет каждого пикселя
3072
    кодируется как (в битовом представлении) 0RRRRRGGGGGBBBBB -
3060
    кодируется как (в битовом представлении) 0RRRRRGGGGGBBBBB -
3073
    по 5 пикселей на каждый цвет.
3061
    по 5 пикселей на каждый цвет.
3074
  * Формат изображения с 16 битами на пиксель: цвет каждого пикселя
3062
  * Формат изображения с 16 битами на пиксель: цвет каждого пикселя
3075
    кодируется как RRRRRGGGGGGBBBBB (схема 5+6+5).
3063
    кодируется как RRRRRGGGGGGBBBBB (схема 5+6+5).
3076
  * Формат изображения с 24 битами на пиксель: цвет каждого пикселя
3064
  * Формат изображения с 24 битами на пиксель: цвет каждого пикселя
3077
    кодируется тремя байтами - последовательно синяя, зелёная, красная
3065
    кодируется тремя байтами - последовательно синяя, зелёная, красная
3078
    составляющие цвета.
3066
    составляющие цвета.
3079
  * Формат изображения с 32 битами на пиксель: аналогично 24, только
3067
  * Формат изображения с 32 битами на пиксель: аналогично 24, только
3080
    есть ещё игнорируемый четвёртый байт.
3068
    есть ещё игнорируемый четвёртый байт.
3081
  * Вызов функции 7 эквивалентен вызову этой функции с параметрами
3069
  * Вызов функции 7 эквивалентен вызову этой функции с параметрами
3082
    esi=24, ebp=0.
3070
    esi=24, ebp=0.
3083
 
3071
 
3084
---------------------- Константы для регистров: ----------------------
3072
---------------------- Константы для регистров: ----------------------
3085
  eax - SF_PUT_IMAGE_EXT (65)
3073
  eax - SF_PUT_IMAGE_EXT (65)
3086
======================================================================
3074
======================================================================
3087
================= Функция 66 - работа с клавиатурой. =================
3075
================= Функция 66 - работа с клавиатурой. =================
3088
======================================================================
3076
======================================================================
3089
Режим ввода влияет на результаты чтения клавиш функцией 2.
3077
Режим ввода влияет на результаты чтения клавиш функцией 2.
3090
При загрузке программы для неё устанавливается ASCII-режим ввода.
3078
При загрузке программы для неё устанавливается ASCII-режим ввода.
3091
 
3079
 
3092
-------- Подфункция 1 - установить режим ввода с клавиатуры. ---------
3080
-------- Подфункция 1 - установить режим ввода с клавиатуры. ---------
3093
Параметры:
3081
Параметры:
3094
  * eax = 66 - номер функции
3082
  * eax = 66 - номер функции
3095
  * ebx = 1 - номер подфункции
3083
  * ebx = 1 - номер подфункции
3096
  * ecx = режим:
3084
  * ecx = режим:
3097
    * 0 = обычный (ASCII-символы)
3085
    * 0 = обычный (ASCII-символы)
3098
    * 1 = сканкоды
3086
    * 1 = сканкоды
3099
Возвращаемое значение:
3087
Возвращаемое значение:
3100
  * функция не возвращает значения
3088
  * функция не возвращает значения
3101
 
3089
 
3102
--------- Подфункция 2 - получить режим ввода с клавиатуры. ----------
3090
--------- Подфункция 2 - получить режим ввода с клавиатуры. ----------
3103
Параметры:
3091
Параметры:
3104
  * eax = 66 - номер функции
3092
  * eax = 66 - номер функции
3105
  * ebx = 2 - номер подфункции
3093
  * ebx = 2 - номер подфункции
3106
Возвращаемое значение:
3094
Возвращаемое значение:
3107
  * eax = текущий режим
3095
  * eax = текущий режим
3108
 
3096
 
3109
------- Подфункция 3 - получить состояние управляющих клавиш. --------
3097
------- Подфункция 3 - получить состояние управляющих клавиш. --------
3110
Параметры:
3098
Параметры:
3111
  * eax = 66 - номер функции
3099
  * eax = 66 - номер функции
3112
  * ebx = 3 - номер подфункции
3100
  * ebx = 3 - номер подфункции
3113
Возвращаемое значение:
3101
Возвращаемое значение:
3114
  * eax = битовая маска:
3102
  * eax = битовая маска:
3115
  * бит 0  (маска 1): левый Shift нажат
3103
  * бит 0  (маска 1): левый Shift нажат
3116
  * бит 1  (маска 2): правый Shift нажат
3104
  * бит 1  (маска 2): правый Shift нажат
3117
  * бит 2  (маска 4): левый Ctrl нажат
3105
  * бит 2  (маска 4): левый Ctrl нажат
3118
  * бит 3  (маска 8): правый Ctrl нажат
3106
  * бит 3  (маска 8): правый Ctrl нажат
3119
  * бит 4  (маска 0x10): левый Alt нажат
3107
  * бит 4  (маска 0x10): левый Alt нажат
3120
  * бит 5  (маска 0x20): правый Alt нажат
3108
  * бит 5  (маска 0x20): правый Alt нажат
3121
  * бит 6  (маска 0x40): CapsLock включён
3109
  * бит 6  (маска 0x40): CapsLock включён
3122
  * бит 7  (маска 0x80): NumLock включён
3110
  * бит 7  (маска 0x80): NumLock включён
3123
  * бит 8  (маска 0x100): ScrollLock включён
3111
  * бит 8  (маска 0x100): ScrollLock включён
3124
  * бит 9  (маска 0x200): левый Win нажат
3112
  * бит 9  (маска 0x200): левый Win нажат
3125
  * бит 10 (маска 0x400): правый Win нажат
3113
  * бит 10 (маска 0x400): правый Win нажат
3126
  * прочие биты сброшены
3114
  * прочие биты сброшены
3127
 
3115
 
3128
----- Подфункция 4 - установить общесистемную "горячую клавишу". -----
3116
----- Подфункция 4 - установить общесистемную "горячую клавишу". -----
3129
О нажатии "горячей клавиши" извещаются только приложения,
3117
О нажатии "горячей клавиши" извещаются только приложения,
3130
установившие её; активное приложение (к которому поступает
3118
установившие её; активное приложение (к которому поступает
3131
весь нормальный ввод) таких клавиш не получает.
3119
весь нормальный ввод) таких клавиш не получает.
3132
Извещение заключается в посылке события с кодом 2.
3120
Извещение заключается в посылке события с кодом 2.
3133
Прочитать "горячую клавишу" можно так же, как и обычную, -
3121
Прочитать "горячую клавишу" можно так же, как и обычную, -
3134
функцией 2.
3122
функцией 2.
3135
Параметры:
3123
Параметры:
3136
  * eax = 66 - номер функции
3124
  * eax = 66 - номер функции
3137
  * ebx = 4 - номер подфункции
3125
  * ebx = 4 - номер подфункции
3138
  * cl задаёт сканкод клавиши;
3126
  * cl задаёт сканкод клавиши;
3139
    используйте cl=0 для задания комбинаций типа Ctrl+Shift
3127
    используйте cl=0 для задания комбинаций типа Ctrl+Shift
3140
  * edx = 0xXYZ задаёт возможные состояния управляющих клавиш:
3128
  * edx = 0xXYZ задаёт возможные состояния управляющих клавиш:
3141
    * Z (младшие 4 бита) задаёт состояние клавиш LShift и RShift:
3129
    * Z (младшие 4 бита) задаёт состояние клавиш LShift и RShift:
3142
      * 0 = ни одна из клавиш не должна быть нажата;
3130
      * 0 = ни одна из клавиш не должна быть нажата;
3143
      * 1 = ровно одна из клавиш должна быть нажата;
3131
      * 1 = ровно одна из клавиш должна быть нажата;
3144
      * 2 = обе клавиши должны быть нажаты;
3132
      * 2 = обе клавиши должны быть нажаты;
3145
      * 3 = должна быть нажата LShift, но не RShift;
3133
      * 3 = должна быть нажата LShift, но не RShift;
3146
      * 4 = должна быть нажата RShift, но не LShift
3134
      * 4 = должна быть нажата RShift, но не LShift
3147
    * Y - аналогично для LCtrl и RCtrl;
3135
    * Y - аналогично для LCtrl и RCtrl;
3148
    * X - аналогично для LAlt и RAlt
3136
    * X - аналогично для LAlt и RAlt
3149
Возвращаемое значение:
3137
Возвращаемое значение:
3150
  * eax=0 - успешно
3138
  * eax=0 - успешно
3151
  * eax=1 - слишком много "горячих клавиш" (допускается максимум 256)
3139
  * eax=1 - слишком много "горячих клавиш" (допускается максимум 256)
3152
Замечания:
3140
Замечания:
3153
  * Горячая клавиша может срабатывать либо при нажатии,
3141
  * Горячая клавиша может срабатывать либо при нажатии,
3154
    либо при отпускании. Сканкод отпускания клавиши на 128 больше,
3142
    либо при отпускании. Сканкод отпускания клавиши на 128 больше,
3155
    чем сканкод нажатия (т.е. установлен старший бит).
3143
    чем сканкод нажатия (т.е. установлен старший бит).
3156
  * Несколько приложений могут установить одну и ту же комбинацию;
3144
  * Несколько приложений могут установить одну и ту же комбинацию;
3157
    о нажатии такой комбинации будут извещаться все такие приложения.
3145
    о нажатии такой комбинации будут извещаться все такие приложения.
3158
 
3146
 
3159
------ Подфункция 5 - удалить установленную "горячую клавишу". -------
3147
------ Подфункция 5 - удалить установленную "горячую клавишу". -------
3160
Параметры:
3148
Параметры:
3161
  * eax = 66 - номер функции
3149
  * eax = 66 - номер функции
3162
  * ebx = 5 - номер подфункции
3150
  * ebx = 5 - номер подфункции
3163
  * cl = сканкод клавиши и edx = 0xXYZ такие же, как и в подфункции 4
3151
  * cl = сканкод клавиши и edx = 0xXYZ такие же, как и в подфункции 4
3164
Возвращаемое значение:
3152
Возвращаемое значение:
3165
  * eax = 0 - успешно
3153
  * eax = 0 - успешно
3166
  * eax = 1 - нет такой горячей клавиши
3154
  * eax = 1 - нет такой горячей клавиши
3167
Замечания:
3155
Замечания:
3168
  * При завершении процесса/потока удаляются все установленные им
3156
  * При завершении процесса/потока удаляются все установленные им
3169
    горячие клавиши.
3157
    горячие клавиши.
3170
  * Вызов функции не влияет на другие приложения.
3158
  * Вызов функции не влияет на другие приложения.
3171
    Если другое приложение определило эту же комбинацию,
3159
    Если другое приложение определило эту же комбинацию,
3172
    оно по-прежнему будет получать уведомления.
3160
    оно по-прежнему будет получать уведомления.
3173
 
3161
 
3174
------------- Подфункция 6 - заблокировать обычный ввод. -------------
3162
------------- Подфункция 6 - заблокировать обычный ввод. -------------
3175
Параметры:
3163
Параметры:
3176
  * eax = 66 - номер функции
3164
  * eax = 66 - номер функции
3177
  * ebx = 6 - номер подфункции
3165
  * ebx = 6 - номер подфункции
3178
Возвращаемое значение:
3166
Возвращаемое значение:
3179
  * функция не возвращает значения
3167
  * функция не возвращает значения
3180
Замечания:
3168
Замечания:
3181
  * Блокируется обычный ввод данных с клавиатуры для установленных
3169
  * Блокируется обычный ввод данных с клавиатуры для установленных
3182
    "горячих" клавиш
3170
    "горячих" клавиш
3183
  * Для эмуляции мыши через клавиатуру, приложение MOUSEMUL
3171
  * Для эмуляции мыши через клавиатуру, приложение MOUSEMUL
3184
 
3172
 
3185
--------- Подфункция 7 - разблокировать обычный ввод. ----------------
3173
--------- Подфункция 7 - разблокировать обычный ввод. ----------------
3186
Параметры:
3174
Параметры:
3187
  * eax = 66 - номер функции
3175
  * eax = 66 - номер функции
3188
  * ebx = 7 - номер подфункции
3176
  * ebx = 7 - номер подфункции
3189
Возвращаемое значение:
3177
Возвращаемое значение:
3190
  * функция не возвращает значения
3178
  * функция не возвращает значения
3191
Замечания:
3179
Замечания:
3192
  * Разблокирование результатов ф. 66.6
3180
  * Разблокирование результатов ф. 66.6
3193
  * Для эмуляции мыши через клавиатуру, приложение MOUSEMUL
3181
  * Для эмуляции мыши через клавиатуру, приложение MOUSEMUL
3194
 
3182
 
3195
---------------------- Константы для регистров: ----------------------
3183
---------------------- Константы для регистров: ----------------------
3196
  eax - SF_KEYBOARD (66)
3184
  eax - SF_KEYBOARD (66)
3197
  ebx - SSF_SET_INPUT_MODE (1), SSF_GET_INPUT_MODE (2),
3185
  ebx - SSF_SET_INPUT_MODE (1), SSF_GET_INPUT_MODE (2),
3198
    SSF_GET_CONTROL_KEYS (3), SSF_SET_SYS_HOTKEY (4),
3186
    SSF_GET_CONTROL_KEYS (3), SSF_SET_SYS_HOTKEY (4),
3199
    SSF_DEL_SYS_HOTKEY (5),  SSF_LOCK_INPUT (6), SSF_UNLOCK_INPUT (7)
3187
    SSF_DEL_SYS_HOTKEY (5),  SSF_LOCK_INPUT (6), SSF_UNLOCK_INPUT (7)
3200
======================================================================
3188
======================================================================
3201
============ Функция 67 - изменить положение/размеры окна. ===========
3189
============ Функция 67 - изменить положение/размеры окна. ===========
3202
======================================================================
3190
======================================================================
3203
Параметры:
3191
Параметры:
3204
  * eax = 67 - номер функции
3192
  * eax = 67 - номер функции
3205
  * ebx = новая x-координата окна
3193
  * ebx = новая x-координата окна
3206
  * ecx = новая y-координата окна
3194
  * ecx = новая y-координата окна
3207
  * edx = новый x-размер окна
3195
  * edx = новый x-размер окна
3208
  * esi = новый y-размер окна
3196
  * esi = новый y-размер окна
3209
Возвращаемое значение:
3197
Возвращаемое значение:
3210
  * функция не возвращает значения
3198
  * функция не возвращает значения
3211
Замечания:
3199
Замечания:
3212
  * Значение -1 для параметра означает "не изменять"; например, для
3200
  * Значение -1 для параметра означает "не изменять"; например, для
3213
    перемещения окна без изменения размеров можно указать edx=esi=-1.
3201
    перемещения окна без изменения размеров можно указать edx=esi=-1.
3214
  * Предварительно окно должно быть определено функцией 0.
3202
  * Предварительно окно должно быть определено функцией 0.
3215
    Она же задаёт начальные координаты и размеры окна.
3203
    Она же задаёт начальные координаты и размеры окна.
3216
  * Размеры окна понимаются в смысле функции 0, т.е.
3204
  * Размеры окна понимаются в смысле функции 0, т.е.
3217
    на один пиксель меньше, чем реальные размеры.
3205
    на один пиксель меньше, чем реальные размеры.
3218
  * Вызов функции для максимизированных окон просто игнорируется.
3206
  * Вызов функции для максимизированных окон просто игнорируется.
3219
  * Для окон соответствующих стилей положение и/или размеры могут быть
3207
  * Для окон соответствующих стилей положение и/или размеры могут быть
3220
    изменены пользователем; текущие положение и размеры могут быть
3208
    изменены пользователем; текущие положение и размеры могут быть
3221
    получены вызовом функции 9.
3209
    получены вызовом функции 9.
3222
  * Функция посылает окну событие перерисовки (с кодом 1).
3210
  * Функция посылает окну событие перерисовки (с кодом 1).
3223
 
3211
 
3224
---------------------- Константы для регистров: ----------------------
3212
---------------------- Константы для регистров: ----------------------
3225
  eax - SF_CHANGE_WINDOW (67)
3213
  eax - SF_CHANGE_WINDOW (67)
3226
======================================================================
3214
======================================================================
3227
=== Функция 68, подфункция 0 - получить счётчик переключений задач. ==
3215
=== Функция 68, подфункция 0 - получить счётчик переключений задач. ==
3228
======================================================================
3216
======================================================================
3229
Параметры:
3217
Параметры:
3230
  * eax = 68 - номер функции
3218
  * eax = 68 - номер функции
3231
  * ebx = 0 - номер подфункции
3219
  * ebx = 0 - номер подфункции
3232
Возвращаемое значение:
3220
Возвращаемое значение:
3233
  * eax = число переключений задач с момента загрузки системы
3221
  * eax = число переключений задач с момента загрузки системы
3234
    (по модулю 2^32)
3222
    (по модулю 2^32)
3235
 
3223
 
3236
---------------------- Константы для регистров: ----------------------
3224
---------------------- Константы для регистров: ----------------------
3237
  eax - SF_SYS_MISC (68)
3225
  eax - SF_SYS_MISC (68)
3238
  ebx - SSF_GET_TASK_SWITCH_COUNT (0)
3226
  ebx - SSF_GET_TASK_SWITCH_COUNT (0)
3239
======================================================================
3227
======================================================================
3240
====================== Функция 68, подфункция 1 ======================
3228
====================== Функция 68, подфункция 1 ======================
3241
============ Переключиться на следующий поток выполнения. ============
3229
============ Переключиться на следующий поток выполнения. ============
3242
======================================================================
3230
======================================================================
3243
Функция завершает текущий квант времени, выделенный потоку,
3231
Функция завершает текущий квант времени, выделенный потоку,
3244
и переключается на следующий.
3232
и переключается на следующий.
3245
(Какой поток какого процесса будет следующим, предсказать нельзя).
3233
(Какой поток какого процесса будет следующим, предсказать нельзя).
3246
Позднее, когда до текущего потока дойдёт очередь,
3234
Позднее, когда до текущего потока дойдёт очередь,
3247
выполнение возобновится.
3235
выполнение возобновится.
3248
Параметры:
3236
Параметры:
3249
  * eax = 68 - номер функции
3237
  * eax = 68 - номер функции
3250
  * ebx = 1 - номер подфункции
3238
  * ebx = 1 - номер подфункции
3251
Возвращаемое значение:
3239
Возвращаемое значение:
3252
  * функция не возвращает значения
3240
  * функция не возвращает значения
3253
 
3241
 
3254
---------------------- Константы для регистров: ----------------------
3242
---------------------- Константы для регистров: ----------------------
3255
  eax - SF_SYS_MISC (68)
3243
  eax - SF_SYS_MISC (68)
3256
  ebx - SSF_SWITCH_TASK (1)
3244
  ebx - SSF_SWITCH_TASK (1)
3257
======================================================================
3245
======================================================================
3258
=============== Функция 68, подфункция 2 - кэш + rdpmc. ==============
3246
=============== Функция 68, подфункция 2 - кэш + rdpmc. ==============
3259
======================================================================
3247
======================================================================
3260
Параметры:
3248
Параметры:
3261
  * eax = 68 - номер функции
3249
  * eax = 68 - номер функции
3262
  * ebx = 2 - номер подфункции
3250
  * ebx = 2 - номер подфункции
3263
  * ecx = требуемое действие:
3251
  * ecx = требуемое действие:
3264
    * ecx = 0 - разрешить выполнение инструкции rdpmc
3252
    * ecx = 0 - разрешить выполнение инструкции rdpmc
3265
      (ReaD Performance-Monitoring Counters)
3253
      (ReaD Performance-Monitoring Counters)
3266
    * ecx = 1 - узнать, включён/выключен кэш
3254
    * ecx = 1 - узнать, включён/выключен кэш
3267
    * ecx = 2 - включить кэш
3255
    * ecx = 2 - включить кэш
3268
    * ecx = 3 - выключить кэш
3256
    * ecx = 3 - выключить кэш
3269
Возвращаемое значение:
3257
Возвращаемое значение:
3270
  * для ecx=0:
3258
  * для ecx=0:
3271
    * eax = значение cr4
3259
    * eax = значение cr4
3272
  * для ecx=1:
3260
  * для ecx=1:
3273
    * eax = (cr0 and 0x60000000):
3261
    * eax = (cr0 and 0x60000000):
3274
    * eax = 0 - кэш включён
3262
    * eax = 0 - кэш включён
3275
    * eax <> 0 - кэш выключен
3263
    * eax <> 0 - кэш выключен
3276
  * для ecx=2 и ecx=3:
3264
  * для ecx=2 и ecx=3:
3277
    * функция не возвращает значения
3265
    * функция не возвращает значения
3278
 
3266
 
3279
---------------------- Константы для регистров: ----------------------
3267
---------------------- Константы для регистров: ----------------------
3280
  eax - SF_SYS_MISC (68)
3268
  eax - SF_SYS_MISC (68)
3281
  ebx - SSF_PERFORMANCE (2)
3269
  ebx - SSF_PERFORMANCE (2)
3282
  ecx - SSSF_ALLOW_RDPMC (0), SSSF_CACHE_STATUS (1),
3270
  ecx - SSSF_ALLOW_RDPMC (0), SSSF_CACHE_STATUS (1),
3283
    SSSF_CACHE_ON (2), SSSF_CACHE_OFF (3)
3271
    SSSF_CACHE_ON (2), SSSF_CACHE_OFF (3)
3284
======================================================================
3272
======================================================================
3285
========== Функция 68, подфункция 3 - прочитать MSR-регистр. =========
3273
========== Функция 68, подфункция 3 - прочитать MSR-регистр. =========
3286
======================================================================
3274
======================================================================
3287
MSR = Model Specific Register; полный список MSR-регистров процессора
3275
MSR = Model Specific Register; полный список MSR-регистров процессора
3288
содержится в документации по процессору (например, IA-32 Intel
3276
содержится в документации по процессору (например, IA-32 Intel
3289
Architecture Software Developer's Manual, Volume 3, Appendix B);
3277
Architecture Software Developer's Manual, Volume 3, Appendix B);
3290
каждое семейство процессоров имеет своё подмножество MSR-регистров.
3278
каждое семейство процессоров имеет своё подмножество MSR-регистров.
3291
Параметры:
3279
Параметры:
3292
  * eax = 68 - номер функции
3280
  * eax = 68 - номер функции
3293
  * ebx = 3 - номер подфункции
3281
  * ebx = 3 - номер подфункции
3294
  * ecx игнорируется
3282
  * ecx игнорируется
3295
  * edx = адрес MSR
3283
  * edx = адрес MSR
3296
Возвращаемое значение:
3284
Возвращаемое значение:
3297
  * ebx:eax = старший:младший dword результата
3285
  * ebx:eax = старший:младший dword результата
3298
Замечания:
3286
Замечания:
3299
  * Указание в ecx несуществующего или нереализованного для данного
3287
  * Указание в ecx несуществующего или нереализованного для данного
3300
    процессора MSR повлечёт исключение в ядре, которое прибьёт поток.
3288
    процессора MSR повлечёт исключение в ядре, которое прибьёт поток.
3301
  * Предварительно следует определить, поддерживаются ли MSR в целом,
3289
  * Предварительно следует определить, поддерживаются ли MSR в целом,
3302
    командой cpuid. Иначе возникнет уже другое исключение в ядре,
3290
    командой cpuid. Иначе возникнет уже другое исключение в ядре,
3303
    которое всё равно прибьёт поток.
3291
    которое всё равно прибьёт поток.
3304
 
3292
 
3305
---------------------- Константы для регистров: ----------------------
3293
---------------------- Константы для регистров: ----------------------
3306
  eax - SF_SYS_MISC (68)
3294
  eax - SF_SYS_MISC (68)
3307
  ebx - SSF_READ_MSR (3)
3295
  ebx - SSF_READ_MSR (3)
3308
======================================================================
3296
======================================================================
3309
========= Функция 68, подфункция 4 - записать в MSR-регистр. =========
3297
========= Функция 68, подфункция 4 - записать в MSR-регистр. =========
3310
======================================================================
3298
======================================================================
3311
MSR = Model Specific Register; полный список MSR-регистров процессора
3299
MSR = Model Specific Register; полный список MSR-регистров процессора
3312
содержится в документации по процессору (например, IA-32 Intel
3300
содержится в документации по процессору (например, IA-32 Intel
3313
Architecture Software Developer's Manual, Volume 3, Appendix B);
3301
Architecture Software Developer's Manual, Volume 3, Appendix B);
3314
каждое семейство процессоров имеет своё подмножество MSR-регистров.
3302
каждое семейство процессоров имеет своё подмножество MSR-регистров.
3315
Параметры:
3303
Параметры:
3316
  * eax = 68 - номер функции
3304
  * eax = 68 - номер функции
3317
  * ebx = 4 - номер подфункции
3305
  * ebx = 4 - номер подфункции
3318
  * ecx игнорируется
3306
  * ecx игнорируется
3319
  * edx = адрес MSR
3307
  * edx = адрес MSR
3320
  * esi:edi = старший:младший dword
3308
  * esi:edi = старший:младший dword
3321
Возвращаемое значение:
3309
Возвращаемое значение:
3322
  * функция не возвращает значения
3310
  * функция не возвращает значения
3323
Замечания:
3311
Замечания:
3324
  * Указание в ecx несуществующего или нереализованного для данного
3312
  * Указание в ecx несуществующего или нереализованного для данного
3325
    процессора MSR повлечёт исключение в ядре, которое прибьёт поток.
3313
    процессора MSR повлечёт исключение в ядре, которое прибьёт поток.
3326
  * Предварительно следует определить, поддерживаются ли MSR в целом,
3314
  * Предварительно следует определить, поддерживаются ли MSR в целом,
3327
    командой cpuid. Иначе возникнет уже другое исключение в ядре,
3315
    командой cpuid. Иначе возникнет уже другое исключение в ядре,
3328
    которое всё равно прибьёт поток.
3316
    которое всё равно прибьёт поток.
3329
 
3317
 
3330
---------------------- Константы для регистров: ----------------------
3318
---------------------- Константы для регистров: ----------------------
3331
  eax - SF_SYS_MISC (68)
3319
  eax - SF_SYS_MISC (68)
3332
  ebx - SSF_WRITE_MSR (4)
3320
  ebx - SSF_WRITE_MSR (4)
3333
======================================================================
3321
======================================================================
3334
===== Функция 68, подфункция 11 - инициализировать кучу процесса. ====
3322
===== Функция 68, подфункция 11 - инициализировать кучу процесса. ====
3335
======================================================================
3323
======================================================================
3336
Параметры:
3324
Параметры:
3337
  * eax = 68 - номер функции
3325
  * eax = 68 - номер функции
3338
  * ebx = 11 - номер подфункции
3326
  * ebx = 11 - номер подфункции
3339
Возвращаемое значение:
3327
Возвращаемое значение:
3340
  * eax = 0 - неуспех
3328
  * eax = 0 - неуспех
3341
  * иначе размер созданной кучи
3329
  * иначе размер созданной кучи
3342
Замечания:
3330
Замечания:
3343
  * Вызов функции инициализирует кучу, из которой впоследствии можно
3331
  * Вызов функции инициализирует кучу, из которой впоследствии можно
3344
    выделять и освобождать блоки памяти подфункциями 12, 13 и 20.
3332
    выделять и освобождать блоки памяти подфункциями 12, 13 и 20.
3345
  * Если куча уже создана, функция вернёт размер существующей кучи.
3333
  * Если куча уже создана, функция вернёт размер существующей кучи.
3346
    Размер кучи равен размеру всей свободной памяти приложения.
3334
    Размер кучи равен размеру всей свободной памяти приложения.
3347
  * После создания кучи вызовы функции 64 игнорируются.
3335
  * После создания кучи вызовы функции 64 игнорируются.
3348
 
3336
 
3349
---------------------- Константы для регистров: ----------------------
3337
---------------------- Константы для регистров: ----------------------
3350
  eax - SF_SYS_MISC (68)
3338
  eax - SF_SYS_MISC (68)
3351
  ebx - SSF_HEAP_INIT (11)
3339
  ebx - SSF_HEAP_INIT (11)
3352
======================================================================
3340
======================================================================
3353
========== Функция 68, подфункция 12 - выделить блок памяти. =========
3341
========== Функция 68, подфункция 12 - выделить блок памяти. =========
3354
======================================================================
3342
======================================================================
3355
Параметры:
3343
Параметры:
3356
  * eax = 68 - номер функции
3344
  * eax = 68 - номер функции
3357
  * ebx = 12 - номер подфункции
3345
  * ebx = 12 - номер подфункции
3358
  * ecx = требуемый размер в байтах
3346
  * ecx = требуемый размер в байтах
3359
Возвращаемое значение:
3347
Возвращаемое значение:
3360
  * eax = указатель на выделенный блок
3348
  * eax = указатель на выделенный блок
3361
Замечания:
3349
Замечания:
3362
  * Функция выделяет целое число страниц (4 Кб) так, что фактический
3350
  * Функция выделяет целое число страниц (4 Кб) так, что фактический
3363
    размер выделенного блока больше или равен запрошенному.
3351
    размер выделенного блока больше или равен запрошенному.
3364
 
3352
 
3365
---------------------- Константы для регистров: ----------------------
3353
---------------------- Константы для регистров: ----------------------
3366
  eax - SF_SYS_MISC (68)
3354
  eax - SF_SYS_MISC (68)
3367
  ebx - SSF_MEM_ALLOC (12)
3355
  ebx - SSF_MEM_ALLOC (12)
3368
======================================================================
3356
======================================================================
3369
========= Функция 68, подфункция 13 - освободить блок памяти. ========
3357
========= Функция 68, подфункция 13 - освободить блок памяти. ========
3370
======================================================================
3358
======================================================================
3371
Параметры:
3359
Параметры:
3372
  * eax = 68 - номер функции
3360
  * eax = 68 - номер функции
3373
  * ebx = 13 - номер подфункции
3361
  * ebx = 13 - номер подфункции
3374
  * ecx = указатель на блок памяти
3362
  * ecx = указатель на блок памяти
3375
Возвращаемое значение:
3363
Возвращаемое значение:
3376
  * eax = 1 - успешно
3364
  * eax = 1 - успешно
3377
  * eax = 0 - неудача
3365
  * eax = 0 - неудача
3378
Замечания:
3366
Замечания:
3379
  * Блок памяти должен быть ранее выделен подфункцией 12
3367
  * Блок памяти должен быть ранее выделен подфункцией 12
3380
    или подфункцией 20.
3368
    или подфункцией 20.
3381
 
3369
 
3382
---------------------- Константы для регистров: ----------------------
3370
---------------------- Константы для регистров: ----------------------
3383
  eax - SF_SYS_MISC (68)
3371
  eax - SF_SYS_MISC (68)
3384
  ebx - SSF_MEM_FREE (13)
3372
  ebx - SSF_MEM_FREE (13)
3385
======================================================================
3373
======================================================================
3386
====================== Функция 68, подфункция 14 =====================
3374
====================== Функция 68, подфункция 14 =====================
3387
====== Ожидать получения сигнала от других приложений/драйверов. =====
3375
====== Ожидать получения сигнала от других приложений/драйверов. =====
3388
======================================================================
3376
======================================================================
3389
Параметры:
3377
Параметры:
3390
  * eax = 68 - номер функции
3378
  * eax = 68 - номер функции
3391
  * ebx = 14 - номер подфункции
3379
  * ebx = 14 - номер подфункции
3392
  * ecx = указатель на буфер для информации (24 байта)
3380
  * ecx = указатель на буфер для информации (24 байта)
3393
Возвращаемое значение:
3381
Возвращаемое значение:
3394
  * eax разрушается
3382
  * eax разрушается
3395
  * буфер, на который указывает ecx, содержит следующую информацию:
3383
  * буфер, на который указывает ecx, содержит следующую информацию:
3396
    * +0: dword: идентификатор последующих данных сигнала
3384
    * +0: dword: идентификатор последующих данных сигнала
3397
    * +4: данные принятого сигнала (20 байт), формат которых
3385
    * +4: данные принятого сигнала (20 байт), формат которых
3398
          определяется первым dword-ом
3386
          определяется первым dword-ом
3399
 
3387
 
3400
---------------------- Константы для регистров: ----------------------
3388
---------------------- Константы для регистров: ----------------------
3401
  eax - SF_SYS_MISC (68)
3389
  eax - SF_SYS_MISC (68)
3402
  ebx - SSF_WAIT_SIGNAL (14)
3390
  ebx - SSF_WAIT_SIGNAL (14)
3403
======================================================================
3391
======================================================================
3404
=========== Функция 68, подфункция 16 - загрузить драйвер. ===========
3392
=========== Функция 68, подфункция 16 - загрузить драйвер. ===========
3405
======================================================================
3393
======================================================================
3406
Параметры:
3394
Параметры:
3407
  * eax = 68 - номер функции
3395
  * eax = 68 - номер функции
3408
  * ebx = 16 - номер подфункции
3396
  * ebx = 16 - номер подфункции
3409
  * ecx = указатель на ASCIIZ-строку с именем драйвера
3397
  * ecx = указатель на ASCIIZ-строку с именем драйвера
3410
Возвращаемое значение:
3398
Возвращаемое значение:
3411
  * eax = 0 - неудача
3399
  * eax = 0 - неудача
3412
  * иначе eax = хэндл драйвера
3400
  * иначе eax = хэндл драйвера
3413
Замечания:
3401
Замечания:
3414
  * Если драйвер ещё не загружен, он загружается;
3402
  * Если драйвер ещё не загружен, он загружается;
3415
    если драйвер уже загружен, ничего не меняется.
3403
    если драйвер уже загружен, ничего не меняется.
3416
  * Имя драйвера чувствительно к регистру символов.
3404
  * Имя драйвера чувствительно к регистру символов.
3417
    Максимальная длина имени - 16 символов, включая завершающий
3405
    Максимальная длина имени - 16 символов, включая завершающий
3418
    нулевой символ, остальные символы игнорируются.
3406
    нулевой символ, остальные символы игнорируются.
3419
  * Драйвер с именем ABC загружается из файла /sys/drivers/ABC.sys.
3407
  * Драйвер с именем ABC загружается из файла /sys/drivers/ABC.sys.
3420
 
3408
 
3421
---------------------- Константы для регистров: ----------------------
3409
---------------------- Константы для регистров: ----------------------
3422
  eax - SF_SYS_MISC (68)
3410
  eax - SF_SYS_MISC (68)
3423
  ebx - SSF_LOAD_DRIVER (16)
3411
  ebx - SSF_LOAD_DRIVER (16)
3424
======================================================================
3412
======================================================================
3425
========== Функция 68, подфункция 17 - управление драйвером. =========
3413
========== Функция 68, подфункция 17 - управление драйвером. =========
3426
======================================================================
3414
======================================================================
3427
Параметры:
3415
Параметры:
3428
  * eax = 68 - номер функции
3416
  * eax = 68 - номер функции
3429
  * ebx = 17 - номер подфункции
3417
  * ebx = 17 - номер подфункции
3430
  * ecx = указатель на управляющую структуру:
3418
  * ecx = указатель на управляющую структуру:
3431
    * +0: dword: хэндл драйвера
3419
    * +0: dword: хэндл драйвера
3432
    * +4: dword: код функции драйвера
3420
    * +4: dword: код функции драйвера
3433
    * +8: dword: указатель на входные данные
3421
    * +8: dword: указатель на входные данные
3434
    * +12 = +0xC: dword: размер входных данных
3422
    * +12 = +0xC: dword: размер входных данных
3435
    * +16 = +0x10: dword: указатель на выходные данные
3423
    * +16 = +0x10: dword: указатель на выходные данные
3436
    * +20 = +0x14: dword: размер выходных данных
3424
    * +20 = +0x14: dword: размер выходных данных
3437
Возвращаемое значение:
3425
Возвращаемое значение:
3438
  * eax = определяется драйвером
3426
  * eax = определяется драйвером
3439
Замечания:
3427
Замечания:
3440
  * Коды функций и структура входных/выходных данных
3428
  * Коды функций и структура входных/выходных данных
3441
    определяются драйвером.
3429
    определяются драйвером.
3442
  * Предварительно должен быть получен хэндл драйвера подфункцией 16.
3430
  * Предварительно должен быть получен хэндл драйвера подфункцией 16.
3443
 
3431
 
3444
---------------------- Константы для регистров: ----------------------
3432
---------------------- Константы для регистров: ----------------------
3445
  eax - SF_SYS_MISC (68)
3433
  eax - SF_SYS_MISC (68)
3446
  ebx - SSF_CONTROL_DRIVER (17)
3434
  ebx - SSF_CONTROL_DRIVER (17)
3447
======================================================================
3435
======================================================================
3448
== Функция 68, подфункция 18 - загрузить DLL с указанием кодировки. ==
3436
== Функция 68, подфункция 18 - загрузить DLL с указанием кодировки. ==
3449
======================================================================
3437
======================================================================
3450
Параметры:
3438
Параметры:
3451
  * eax = 68 - номер функции
3439
  * eax = 68 - номер функции
3452
  * ebx = 18 - номер подфункции
3440
  * ebx = 18 - номер подфункции
3453
  * ecx = указатель на строку с путём к DLL
3441
  * ecx = указатель на строку с путём к DLL
3454
  * edx = кодировка строки, подробности указаны в описании функции 80.
3442
  * edx = кодировка строки, подробности указаны в описании функции 80.
3455
Возвращаемое значение:
3443
Возвращаемое значение:
3456
  * eax = 0 - неудача
3444
  * eax = 0 - неудача
3457
  * иначе eax = указатель на таблицу экспорта DLL
3445
  * иначе eax = указатель на таблицу экспорта DLL
3458
Замечания:
3446
Замечания:
3459
  * Таблица экспорта представляет собой массив структур по 2 dword'а,
3447
  * Таблица экспорта представляет собой массив структур по 2 dword'а,
3460
    заканчивающийся нулём. Первый dword в структуре является
3448
    заканчивающийся нулём. Первый dword в структуре является
3461
    указателем на имя функции, второй содержит адрес функции.
3449
    указателем на имя функции, второй содержит адрес функции.
3462
 
3450
 
3463
======================================================================
3451
======================================================================
3464
============= Функция 68, подфункция 19 - загрузить DLL. =============
3452
============= Функция 68, подфункция 19 - загрузить DLL. =============
3465
======================================================================
3453
======================================================================
3466
Параметры:
3454
Параметры:
3467
  * eax = 68 - номер функции
3455
  * eax = 68 - номер функции
3468
  * ebx = 19 - номер подфункции
3456
  * ebx = 19 - номер подфункции
3469
  * ecx = указатель на строку с путём к DLL,
3457
  * ecx = указатель на строку с путём к DLL,
3470
    правила формирования строки указаны в описании функции 70.
3458
    правила формирования строки указаны в описании функции 70.
3471
Возвращаемое значение:
3459
Возвращаемое значение:
3472
  * eax = 0 - неудача
3460
  * eax = 0 - неудача
3473
  * иначе eax = указатель на таблицу экспорта DLL
3461
  * иначе eax = указатель на таблицу экспорта DLL
3474
 
3462
 
3475
---------------------- Константы для регистров: ----------------------
3463
---------------------- Константы для регистров: ----------------------
3476
  eax - SF_SYS_MISC (68)
3464
  eax - SF_SYS_MISC (68)
3477
  ebx - SSF_LOAD_DLL (19)
3465
  ebx - SSF_LOAD_DLL (19)
3478
======================================================================
3466
======================================================================
3479
====== Функция 68, подфункция 20 - перераспределить блок памяти. =====
3467
====== Функция 68, подфункция 20 - перераспределить блок памяти. =====
3480
======================================================================
3468
======================================================================
3481
Параметры:
3469
Параметры:
3482
  * eax = 68 - номер функции
3470
  * eax = 68 - номер функции
3483
  * ebx = 20 - номер подфункции
3471
  * ebx = 20 - номер подфункции
3484
  * ecx = новый размер в байтах
3472
  * ecx = новый размер в байтах
3485
  * edx = указатель на уже выделенный блок памяти
3473
  * edx = указатель на уже выделенный блок памяти
3486
Возвращаемое значение:
3474
Возвращаемое значение:
3487
  * eax = указатель на перераспределённый блок, 0 при ошибке
3475
  * eax = указатель на перераспределённый блок, 0 при ошибке
3488
Замечания:
3476
Замечания:
3489
  * Предварительно следует инициализировать кучу процесса вызовом
3477
  * Предварительно следует инициализировать кучу процесса вызовом
3490
    подфункции 11.
3478
    подфункции 11.
3491
  * Функция выделяет целое число страниц (4 Кб) так, что фактический
3479
  * Функция выделяет целое число страниц (4 Кб) так, что фактический
3492
    размер выделенного блока больше или равен запрошенному.
3480
    размер выделенного блока больше или равен запрошенному.
3493
  * Если edx=0, то вызов функции эквивалентен выделению памяти
3481
  * Если edx=0, то вызов функции эквивалентен выделению памяти
3494
    подфункцией 12. В противном случае блок памяти по адресу edx
3482
    подфункцией 12. В противном случае блок памяти по адресу edx
3495
    должен быть ранее выделен подфункцией 12 или
3483
    должен быть ранее выделен подфункцией 12 или
3496
    описываемой подфункцией.
3484
    описываемой подфункцией.
3497
  * Если ecx=0, то функция освобождает блок памяти по адресу edx и
3485
  * Если ecx=0, то функция освобождает блок памяти по адресу edx и
3498
    возвращает 0.
3486
    возвращает 0.
3499
  * Содержимое памяти вплоть до наименьшего из старого и нового
3487
  * Содержимое памяти вплоть до наименьшего из старого и нового
3500
    размеров сохраняется.
3488
    размеров сохраняется.
3501
 
3489
 
3502
---------------------- Константы для регистров: ----------------------
3490
---------------------- Константы для регистров: ----------------------
3503
  eax - SF_SYS_MISC (68)
3491
  eax - SF_SYS_MISC (68)
3504
  ebx - SSF_MEM_REALLOC (20)
3492
  ebx - SSF_MEM_REALLOC (20)
3505
======================================================================
3493
======================================================================
3506
========= Функция 68, подфункция 21 - загрузить драйвер PE. ==========
3494
========= Функция 68, подфункция 21 - загрузить драйвер PE. ==========
3507
======================================================================
3495
======================================================================
3508
Параметры:
3496
Параметры:
3509
  * eax = 68 - номер функции
3497
  * eax = 68 - номер функции
3510
  * ebx = 21 - номер подфункции
3498
  * ebx = 21 - номер подфункции
3511
  * ecx = указатель на ASCIIZ-строку с именем драйвера
3499
  * ecx = указатель на ASCIIZ-строку с именем драйвера
3512
  * edx = указатель на командную строку
3500
  * edx = указатель на командную строку
3513
Возвращаемое значение:
3501
Возвращаемое значение:
3514
  * eax = 0 - неудача
3502
  * eax = 0 - неудача
3515
  * иначе eax = хэндл драйвера
3503
  * иначе eax = хэндл драйвера
3516
Замечания:
3504
Замечания:
3517
  * Если драйвер ещё не загружен, он загружается;
3505
  * Если драйвер ещё не загружен, он загружается;
3518
    если драйвер уже загружен, ничего не меняется.
3506
    если драйвер уже загружен, ничего не меняется.
3519
 
3507
 
3520
---------------------- Константы для регистров: ----------------------
3508
---------------------- Константы для регистров: ----------------------
3521
  eax - SF_SYS_MISC (68)
3509
  eax - SF_SYS_MISC (68)
3522
  ebx - SSF_LOAD_DRIVER_PE (21)
3510
  ebx - SSF_LOAD_DRIVER_PE (21)
3523
======================================================================
3511
======================================================================
3524
=== Функция 68, подфункция 22 - открыть именованную область памяти. ==
3512
=== Функция 68, подфункция 22 - открыть именованную область памяти. ==
3525
======================================================================
3513
======================================================================
3526
Параметры:
3514
Параметры:
3527
  * eax = 68 - номер функции
3515
  * eax = 68 - номер функции
3528
  * ebx = 22 - номер подфункции
3516
  * ebx = 22 - номер подфункции
3529
  * ecx = имя области. Максимум 31 символ, включая завершающий ноль
3517
  * ecx = имя области. Максимум 31 символ, включая завершающий ноль
3530
  * edx = размер области в байтах для SHM_CREATE и SHM_OPEN_ALWAYS
3518
  * edx = размер области в байтах для SHM_CREATE и SHM_OPEN_ALWAYS
3531
  * esi = флаги открытия и доступа:
3519
  * esi = флаги открытия и доступа:
3532
    * SHM_OPEN        = 0x00 - открыть существующую область памяти.
3520
    * SHM_OPEN        = 0x00 - открыть существующую область памяти.
3533
                          Если область с таким именем не существует,
3521
                          Если область с таким именем не существует,
3534
                          функция вернёт код ошибки 5.
3522
                          функция вернёт код ошибки 5.
3535
    * SHM_OPEN_ALWAYS = 0x04 - открыть существующую или создать новую
3523
    * SHM_OPEN_ALWAYS = 0x04 - открыть существующую или создать новую
3536
                          область памяти.
3524
                          область памяти.
3537
    * SHM_CREATE      = 0x08 - создать новую область памяти.
3525
    * SHM_CREATE      = 0x08 - создать новую область памяти.
3538
                          Если область с таким именем уже существует,
3526
                          Если область с таким именем уже существует,
3539
                          функция вернёт код ошибки 10.
3527
                          функция вернёт код ошибки 10.
3540
    * SHM_READ        = 0x00 - доступ только на чтение
3528
    * SHM_READ        = 0x00 - доступ только на чтение
3541
    * SHM_WRITE       = 0x01 - доступ на чтение и запись
3529
    * SHM_WRITE       = 0x01 - доступ на чтение и запись
3542
Возвращаемое значение:
3530
Возвращаемое значение:
3543
  * eax = указатель на область памяти, 0 при ошибке
3531
  * eax = указатель на область памяти, 0 при ошибке
3544
  * при создании новой области (SHM_CREATE или SHM_OPEN_ALWAYS):
3532
  * при создании новой области (SHM_CREATE или SHM_OPEN_ALWAYS):
3545
    edx = 0 - успех, иначе - код ошибки
3533
    edx = 0 - успех, иначе - код ошибки
3546
  * при открытии существующей области (SHM_OPEN или SHM_OPEN_ALWAYS):
3534
  * при открытии существующей области (SHM_OPEN или SHM_OPEN_ALWAYS):
3547
    edx = код ошибки (при eax=0) или размер области в байтах
3535
    edx = код ошибки (при eax=0) или размер области в байтах
3548
Коды ошибок:
3536
Коды ошибок:
3549
  * E_NOTFOUND = 5
3537
  * E_NOTFOUND = 5
3550
  * E_ACCESS = 10
3538
  * E_ACCESS = 10
3551
  * E_NOMEM = 30
3539
  * E_NOMEM = 30
3552
  * E_PARAM = 33
3540
  * E_PARAM = 33
3553
Замечания:
3541
Замечания:
3554
  * Предварительно следует инициализировать кучу процесса вызовом
3542
  * Предварительно следует инициализировать кучу процесса вызовом
3555
    подфункции 11.
3543
    подфункции 11.
3556
  * Если создаётся новая область, то флаги доступа устанавливают
3544
  * Если создаётся новая область, то флаги доступа устанавливают
3557
    максимальные права доступа для остальных процессов. Попытка
3545
    максимальные права доступа для остальных процессов. Попытка
3558
    открытия другим потоком с неразрешёнными правами провалится
3546
    открытия другим потоком с неразрешёнными правами провалится
3559
    с кодом ошибки E_ACCESS.
3547
    с кодом ошибки E_ACCESS.
3560
  * Процесс, создавший область, всегда имеет доступ на запись.
3548
  * Процесс, создавший область, всегда имеет доступ на запись.
3561
 
3549
 
3562
---------------------- Константы для регистров: ----------------------
3550
---------------------- Константы для регистров: ----------------------
3563
  eax - SF_SYS_MISC (68)
3551
  eax - SF_SYS_MISC (68)
3564
  ebx - SSF_MEM_OPEN (22)
3552
  ebx - SSF_MEM_OPEN (22)
3565
======================================================================
3553
======================================================================
3566
=== Функция 68, подфункция 23 - закрыть именованную область памяти. ==
3554
=== Функция 68, подфункция 23 - закрыть именованную область памяти. ==
3567
======================================================================
3555
======================================================================
3568
Параметры:
3556
Параметры:
3569
  * eax = 68 - номер функции
3557
  * eax = 68 - номер функции
3570
  * ebx = 23 - номер подфункции
3558
  * ebx = 23 - номер подфункции
3571
  * ecx = имя области. Максимум 31 символ, включая завершающий ноль
3559
  * ecx = имя области. Максимум 31 символ, включая завершающий ноль
3572
Возвращаемое значение:
3560
Возвращаемое значение:
3573
  * eax разрушается
3561
  * eax разрушается
3574
Замечания:
3562
Замечания:
3575
  * Область памяти физически освобождается (с забыванием всех данных
3563
  * Область памяти физически освобождается (с забыванием всех данных
3576
    и высвобождением физической памяти), когда её закроют
3564
    и высвобождением физической памяти), когда её закроют
3577
    все открывшие потоки.
3565
    все открывшие потоки.
3578
  * При завершении потока освобождаются все открытые им
3566
  * При завершении потока освобождаются все открытые им
3579
    области памяти.
3567
    области памяти.
3580
 
3568
 
3581
---------------------- Константы для регистров: ----------------------
3569
---------------------- Константы для регистров: ----------------------
3582
  eax - SF_SYS_MISC (68)
3570
  eax - SF_SYS_MISC (68)
3583
  ebx - SSF_MEM_CLOSE (23)
3571
  ebx - SSF_MEM_CLOSE (23)
3584
======================================================================
3572
======================================================================
3585
==== Функция 68, подфункция 24 - установить обработчик исключений. ===
3573
==== Функция 68, подфункция 24 - установить обработчик исключений. ===
3586
======================================================================
3574
======================================================================
3587
Параметры:
3575
Параметры:
3588
  * eax = 68 - номер функции
3576
  * eax = 68 - номер функции
3589
  * ebx = 24 - номер подфункции
3577
  * ebx = 24 - номер подфункции
3590
  * ecx = адрес нового обработчика исключений
3578
  * ecx = адрес нового обработчика исключений
3591
  * edx = маска обрабатываемых исключений
3579
  * edx = маска обрабатываемых исключений
3592
Возвращаемое значение:
3580
Возвращаемое значение:
3593
  * eax = адрес старого обработчика исключений (0, если не установлен)
3581
  * eax = адрес старого обработчика исключений (0, если не установлен)
3594
  * ebx = маска старого обработчика исключений
3582
  * ebx = маска старого обработчика исключений
3595
Замечания:
3583
Замечания:
3596
  * Номер бита в маске исключений соответствует номеру исключения по
3584
  * Номер бита в маске исключений соответствует номеру исключения по
3597
    спецификации на процессор (Intel-PC). Так, например, исключения
3585
    спецификации на процессор (Intel-PC). Так, например, исключения
3598
    FPU имеют номер 16 (#MF), а SSE - 19 (#XF).
3586
    FPU имеют номер 16 (#MF), а SSE - 19 (#XF).
3599
  * В данной реализации игнорируется запрос на перехват исключения 7
3587
  * В данной реализации игнорируется запрос на перехват исключения 7
3600
    - система обрабатывает #NM самостоятельно.
3588
    - система обрабатывает #NM самостоятельно.
3601
  * Пользовательский обработчик получает номер исключения параметром
3589
  * Пользовательский обработчик получает номер исключения параметром
3602
    в стеке. Поэтому правильный выход из обработчика: RET 4. Возврат
3590
    в стеке. Поэтому правильный выход из обработчика: RET 4. Возврат
3603
    при этом производится на команду, вызвавшую исключение.
3591
    при этом производится на команду, вызвавшую исключение.
3604
  * При передаче управления обработчику исключений сбрасывается
3592
  * При передаче управления обработчику исключений сбрасывается
3605
    соответствующий бит в маске исключений. Возникновение этого же
3593
    соответствующий бит в маске исключений. Возникновение этого же
3606
    исключения впоследствии приведёт к умолчальной обработке такового.
3594
    исключения впоследствии приведёт к умолчальной обработке такового.
3607
    А именно: к завершению работы приложения в отсутствии отладчика,
3595
    А именно: к завершению работы приложения в отсутствии отладчика,
3608
    приостановка с уведомлением отлаживающего приложения иначе.
3596
    приостановка с уведомлением отлаживающего приложения иначе.
3609
  * После завершения критических действий в обработчике пользователя
3597
  * После завершения критических действий в обработчике пользователя
3610
    восстановление бита маски данного исключения можно сделать
3598
    восстановление бита маски данного исключения можно сделать
3611
    подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также возлагается на обработчик пользователя.
3599
    подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также возлагается на обработчик пользователя.
3612
	
3600
	
3613
Внимание:
3601
Внимание:
3614
	Если пользовательский обработчик обрабатывает исключение 		переполнения стека (#SS), то должен быть установлен адрес резервного стека в заголовке программы (см. структуру APP_HEADER_01_  taskman.inc).
3602
	Если пользовательский обработчик обрабатывает исключение 		переполнения стека (#SS), то должен быть установлен адрес резервного стека в заголовке программы (см. структуру APP_HEADER_01_  taskman.inc).
3615
	В этот резервный стек будут записаны дополнительные данные (см. структуру EXCEPT_STACK  sys32.inc).
3603
	В этот резервный стек будут записаны дополнительные данные (см. структуру EXCEPT_STACK  sys32.inc).
3616
	Пользовательский бработчик,при завершении обработки этого исключения, должен дополнительно обнулить бит занятости (бит номер 0) резервного стека в поле LockAccess структуры EXCEPT_STACK.
3604
	Пользовательский бработчик,при завершении обработки этого исключения, должен дополнительно обнулить бит занятости (бит номер 0) резервного стека в поле LockAccess структуры EXCEPT_STACK.
3617
	
3605
	
3618
 
3606
 
3619
---------------------- Константы для регистров: ----------------------
3607
---------------------- Константы для регистров: ----------------------
3620
  eax - SF_SYS_MISC (68)
3608
  eax - SF_SYS_MISC (68)
3621
  ebx - SSF_SET_EXCEPTION_HANDLER (24)
3609
  ebx - SSF_SET_EXCEPTION_HANDLER (24)
3622
======================================================================
3610
======================================================================
3623
= Функция 68, подфункция 25 - изменить состояние активности сигнала. =
3611
= Функция 68, подфункция 25 - изменить состояние активности сигнала. =
3624
======================================================================
3612
======================================================================
3625
Параметры:
3613
Параметры:
3626
  * eax = 68 - номер функции
3614
  * eax = 68 - номер функции
3627
  * ebx = 25 - номер подфункции
3615
  * ebx = 25 - номер подфункции
3628
  * ecx = номер сигнала
3616
  * ecx = номер сигнала
3629
  * edx = значение устанавливаемой активности (0/1)
3617
  * edx = значение устанавливаемой активности (0/1)
3630
Возвращаемое значение:
3618
Возвращаемое значение:
3631
  * eax = -1 - задан неверный номер сигнала
3619
  * eax = -1 - задан неверный номер сигнала
3632
  * иначе eax = старое значение активности сигнала (0/1)
3620
  * иначе eax = старое значение активности сигнала (0/1)
3633
Замечания:
3621
Замечания:
3634
  * В текущей реализации изменяется только маска пользовательского
3622
  * В текущей реализации изменяется только маска пользовательского
3635
    обработчика исключений, установленного подфункцией 24. При этом
3623
    обработчика исключений, установленного подфункцией 24. При этом
3636
    номер сигнала соответствует номеру исключения.
3624
    номер сигнала соответствует номеру исключения.
3637
 
3625
 
3638
---------------------- Константы для регистров: ----------------------
3626
---------------------- Константы для регистров: ----------------------
3639
  eax - SF_SYS_MISC (68)
3627
  eax - SF_SYS_MISC (68)
3640
  ebx - SSF_SET_EXCEPTION_STATE (25)
3628
  ebx - SSF_SET_EXCEPTION_STATE (25)
3641
======================================================================
3629
======================================================================
3642
======= Функция 68, подфункция 26 - освободить страницы памяти =======
3630
======= Функция 68, подфункция 26 - освободить страницы памяти =======
3643
======================================================================
3631
======================================================================
3644
Параметры:
3632
Параметры:
3645
  * eax = 68 - номер функции
3633
  * eax = 68 - номер функции
3646
  * ebx = 26 - номер подфункции
3634
  * ebx = 26 - номер подфункции
3647
  * ecx = указатель на блок памяти выделенный подфункцией 12
3635
  * ecx = указатель на блок памяти выделенный подфункцией 12
3648
  * edx = смещение от начала блока
3636
  * edx = смещение от начала блока
3649
  * esi = размер высвобождаемого блока памяти, в байтах
3637
  * esi = размер высвобождаемого блока памяти, в байтах
3650
Примечания:
3638
Примечания:
3651
  * функция освобождает страницы с ecx+edx по ecx+edx+esi
3639
  * функция освобождает страницы с ecx+edx по ecx+edx+esi
3652
    и устанавливает виртуальную память в зарезервированное состояние.
3640
    и устанавливает виртуальную память в зарезервированное состояние.
3653
 
3641
 
3654
---------------------- Константы для регистров: ----------------------
3642
---------------------- Константы для регистров: ----------------------
3655
  eax - SF_SYS_MISC (68)
3643
  eax - SF_SYS_MISC (68)
3656
  ebx - SSF_MEM_FREE_EXT (26)
3644
  ebx - SSF_MEM_FREE_EXT (26)
3657
======================================================================
3645
======================================================================
3658
============= Функция 68, подфункция 27 - загрузить файл =============
3646
============= Функция 68, подфункция 27 - загрузить файл =============
3659
======================================================================
3647
======================================================================
3660
Параметры:
3648
Параметры:
3661
  * eax = 68 - номер функции
3649
  * eax = 68 - номер функции
3662
  * ebx = 27 - номер подфункции
3650
  * ebx = 27 - номер подфункции
3663
  * ecx = указатель на строку с путём к файлу,
3651
  * ecx = указатель на строку с путём к файлу,
3664
    правила формирования строки указаны в описании функции 70.
3652
    правила формирования строки указаны в описании функции 70.
3665
Возвращаемое значение:
3653
Возвращаемое значение:
3666
  * eax = указатель на загруженный файл или 0
3654
  * eax = указатель на загруженный файл или 0
3667
  * edx = размер загруженного файла или 0
3655
  * edx = размер загруженного файла или 0
3668
Примечания:
3656
Примечания:
3669
  * функция загружает и, при необходимости, распаковывает файл (kunpack)
3657
  * функция загружает и, при необходимости, распаковывает файл (kunpack)
3670
  * Предварительно следует инициализировать кучу процесса вызовом
3658
  * Предварительно следует инициализировать кучу процесса вызовом
3671
    подфункции 11.  
3659
    подфункции 11.  
3672
 
3660
 
3673
---------------------- Константы для регистров: ----------------------
3661
---------------------- Константы для регистров: ----------------------
3674
  eax - SF_SYS_MISC (68)
3662
  eax - SF_SYS_MISC (68)
3675
  ebx - SSF_LOAD_FILE (27)
3663
  ebx - SSF_LOAD_FILE (27)
3676
======================================================================
3664
======================================================================
3677
== Функция 68, подфункция 28 - загрузить файл с указанием кодировки ==
3665
== Функция 68, подфункция 28 - загрузить файл с указанием кодировки ==
3678
======================================================================
3666
======================================================================
3679
Параметры:
3667
Параметры:
3680
  * eax = 68 - номер функции
3668
  * eax = 68 - номер функции
3681
  * ebx = 28 - номер подфункции
3669
  * ebx = 28 - номер подфункции
3682
  * ecx = указатель на строку с путём к файлу
3670
  * ecx = указатель на строку с путём к файлу
3683
  * edx = кодировка строки, подробности указаны в описании функции 80.
3671
  * edx = кодировка строки, подробности указаны в описании функции 80.
3684
Возвращаемое значение:
3672
Возвращаемое значение:
3685
  * eax = указатель на загруженный файл или 0
3673
  * eax = указатель на загруженный файл или 0
3686
  * edx = размер загруженного файла или 0
3674
  * edx = размер загруженного файла или 0
3687
Примечания:
3675
Примечания:
3688
  * функция загружает и, при необходимости, распаковывает файл (kunpack)
3676
  * функция загружает и, при необходимости, распаковывает файл (kunpack)
3689
 
3677
 
3690
======================================================================
3678
======================================================================
3691
======== Функция 68, подфункция 29 - allocate ring memory. =========
3679
======== Функция 68, подфункция 29 - allocate ring memory. =========
3692
======================================================================
3680
======================================================================
3693
Parameters:
3681
Parameters:
3694
  * eax = 68 - function number
3682
  * eax = 68 - function number
3695
  * ebx = 29 - subfunction number
3683
  * ebx = 29 - subfunction number
3696
  * ecx = required size in bytes
3684
  * ecx = required size in bytes
3697
Returned value:
3685
Returned value:
3698
  * eax = 0 - failed
3686
  * eax = 0 - failed
3699
  * eax = pointer to the allocated ring
3687
  * eax = pointer to the allocated ring
3700
Remarks:
3688
Remarks:
3701
  * The requested size must be an exact multiple of pagesize (4 Kb)
3689
  * The requested size must be an exact multiple of pagesize (4 Kb)
3702
  * The function allocates memory in such a way that you can read and
3690
  * The function allocates memory in such a way that you can read and
3703
    write beyond the size of the allocated memory and will reach the 
3691
    write beyond the size of the allocated memory and will reach the 
3704
    beginning of the buffer again.
3692
    beginning of the buffer again.
3705
 
3693
 
3706
 
3694
 
3707
======================================================================
3695
======================================================================
3708
======== Функция 68, подфункция 31 - получить данные драйвера. =======
3696
======== Функция 68, подфункция 31 - получить данные драйвера. =======
3709
======================================================================
3697
======================================================================
3710
Параметры:
3698
Параметры:
3711
  * eax = 68 - номер функции
3699
  * eax = 68 - номер функции
3712
  * ebx = 31 - номер подфункции
3700
  * ebx = 31 - номер подфункции
3713
  * ecx = функция (1 - получить начальные значения списка,
3701
  * ecx = функция (1 - получить начальные значения списка,
3714
                   2 - получить элемент списка)
3702
                   2 - получить элемент списка)
3715
  * edx = Если ecx=2 указатель на структуру.
3703
  * edx = Если ecx=2 указатель на структуру.
3716
  * edi = Если ecx=2 указатель на память под структуру
3704
  * edi = Если ecx=2 указатель на память под структуру
3717
Возвращаемое значение:
3705
Возвращаемое значение:
3718
  * Если ecx = 1, то ebx = fd 
3706
  * Если ecx = 1, то ebx = fd 
3719
                     ecx = bk
3707
                     ecx = bk
3720
  * Если ecx = 2, то eax = 0  операция прошла успешно
3708
  * Если ecx = 2, то eax = 0  операция прошла успешно
3721
                     eax = -1 ошибка
3709
                     eax = -1 ошибка
3722
Примечания:
3710
Примечания:
3723
  * возвращаемая структура
3711
  * возвращаемая структура
3724
   data_service:
3712
   data_service:
3725
     .name:         rb 16
3713
     .name:         rb 16
3726
     .fd:           rd 1
3714
     .fd:           rd 1
3727
     .bk:           rd 1
3715
     .bk:           rd 1
3728
     .base:         rd 1
3716
     .base:         rd 1
3729
     .entry:        rd 1
3717
     .entry:        rd 1
3730
     .srv_proc:     rd 1
3718
     .srv_proc:     rd 1
3731
 
3719
 
3732
======================================================================
3720
======================================================================
3733
======================== Функция 69 - отладка. =======================
3721
======================== Функция 69 - отладка. =======================
3734
======================================================================
3722
======================================================================
3735
Процесс может загрузить другой процесс как отлаживаемый установкой
3723
Процесс может загрузить другой процесс как отлаживаемый установкой
3736
соответствующего бита при вызове подфункции 7 функции 70.
3724
соответствующего бита при вызове подфункции 7 функции 70.
3737
У процесса может быть только один отладчик; один процесс может
3725
У процесса может быть только один отладчик; один процесс может
3738
отлаживать несколько разных. Система уведомляет отладчик о событиях,
3726
отлаживать несколько разных. Система уведомляет отладчик о событиях,
3739
происходящих с отлаживаемым процессом. Сообщения записываются в буфер,
3727
происходящих с отлаживаемым процессом. Сообщения записываются в буфер,
3740
определённый подфункцией 0.
3728
определённый подфункцией 0.
3741
Формат сообщения:
3729
Формат сообщения:
3742
  * +0: dword: код сообщения
3730
  * +0: dword: код сообщения
3743
  * +4: dword: PID отлаживаемого процесса
3731
  * +4: dword: PID отлаживаемого процесса
3744
  * +8: могут присутствовать дополнительные данные,
3732
  * +8: могут присутствовать дополнительные данные,
3745
    определяемые кодом сообщения
3733
    определяемые кодом сообщения
3746
Коды сообщений:
3734
Коды сообщений:
3747
  * 1 = исключение
3735
  * 1 = исключение
3748
    * дополнительно передаётся dword-номер исключения
3736
    * дополнительно передаётся dword-номер исключения
3749
    * процесс приостановлен
3737
    * процесс приостановлен
3750
  * 2 = процесс завершился
3738
  * 2 = процесс завершился
3751
    * приходит при любом завершении: как через системную функцию -1,
3739
    * приходит при любом завершении: как через системную функцию -1,
3752
      так и при "убийстве" любым другим процессом
3740
      так и при "убийстве" любым другим процессом
3753
      (в том числе самим отладчиком)
3741
      (в том числе самим отладчиком)
3754
  * 3 = отладочное исключение int 1 = #DB
3742
  * 3 = отладочное исключение int 1 = #DB
3755
    * дополнительно передаётся dword-образ регистра DR6:
3743
    * дополнительно передаётся dword-образ регистра DR6:
3756
      * биты 0-3: выполнено условие соответствующей точки останова
3744
      * биты 0-3: выполнено условие соответствующей точки останова
3757
        (установленной подфункцией 9)
3745
        (установленной подфункцией 9)
3758
      * бит 14: исключение произошло из-за режима
3746
      * бит 14: исключение произошло из-за режима
3759
        пошаговой трассировки (установлен флаг TF)
3747
        пошаговой трассировки (установлен флаг TF)
3760
    * процесс приостановлен
3748
    * процесс приостановлен
3761
При завершении отладчика прибиваются все отлаживаемые процессы.
3749
При завершении отладчика прибиваются все отлаживаемые процессы.
3762
Если отладчик этого не хочет, он должен предварительно отключиться
3750
Если отладчик этого не хочет, он должен предварительно отключиться
3763
подфункцией 3.
3751
подфункцией 3.
3764
 
3752
 
3765
Все подфункции применимы только к процессам/потокам, запущенным
3753
Все подфункции применимы только к процессам/потокам, запущенным
3766
из текущего функцией 70 с установленным флагом отладки.
3754
из текущего функцией 70 с установленным флагом отладки.
3767
Отладка многопоточных программ пока не поддерживается.
3755
Отладка многопоточных программ пока не поддерживается.
3768
Полный список подфункций:
3756
Полный список подфункций:
3769
  * подфункция 0 - определить область данных для отладочных сообщений
3757
  * подфункция 0 - определить область данных для отладочных сообщений
3770
  * подфункция 1 - получить состояние регистров отлаживаемого потока
3758
  * подфункция 1 - получить состояние регистров отлаживаемого потока
3771
  * подфункция 2 - установить состояние регистров отлаживаемого потока
3759
  * подфункция 2 - установить состояние регистров отлаживаемого потока
3772
  * подфункция 3 - отключиться от отлаживаемого процесса
3760
  * подфункция 3 - отключиться от отлаживаемого процесса
3773
  * подфункция 4 - приостановить отлаживаемый поток
3761
  * подфункция 4 - приостановить отлаживаемый поток
3774
  * подфункция 5 - возобновить выполнение отлаживаемого потока
3762
  * подфункция 5 - возобновить выполнение отлаживаемого потока
3775
  * подфункция 6 - прочитать из памяти отлаживаемого процесса
3763
  * подфункция 6 - прочитать из памяти отлаживаемого процесса
3776
  * подфункция 7 - записать в память отлаживаемого процесса
3764
  * подфункция 7 - записать в память отлаживаемого процесса
3777
  * подфункция 8 - завершить отлаживаемый поток
3765
  * подфункция 8 - завершить отлаживаемый поток
3778
  * подфункция 9 - установить/снять аппаратную точку останова
3766
  * подфункция 9 - установить/снять аппаратную точку останова
3779
 
3767
 
3780
---------------------- Константы для регистров: ----------------------
3768
---------------------- Константы для регистров: ----------------------
3781
  eax - SF_DEBUG (69)
3769
  eax - SF_DEBUG (69)
3782
  ebx - SSF_SET_MESSAGE_AREA (0), SSF_GET_REGISTERS (1),
3770
  ebx - SSF_SET_MESSAGE_AREA (0), SSF_GET_REGISTERS (1),
3783
    SSF_SET_REGISTERS (2), SSF_DETACH (3), SSF_SUSPEND (4),
3771
    SSF_SET_REGISTERS (2), SSF_DETACH (3), SSF_SUSPEND (4),
3784
    SSF_RESUME (5), SSF_READ_MEMORY (6), SSF_WRITE_MEMORY (7),
3772
    SSF_RESUME (5), SSF_READ_MEMORY (6), SSF_WRITE_MEMORY (7),
3785
    SSF_TERMINATE (8), SSF_DEFINE_BREAKPOINT (9)
3773
    SSF_TERMINATE (8), SSF_DEFINE_BREAKPOINT (9)
3786
======================================================================
3774
======================================================================
3787
====================== Функция 69, подфункция 0 ======================
3775
====================== Функция 69, подфункция 0 ======================
3788
========= Определить область данных для отладочных сообщений. ========
3776
========= Определить область данных для отладочных сообщений. ========
3789
======================================================================
3777
======================================================================
3790
Параметры:
3778
Параметры:
3791
  * eax = 69 - номер функции
3779
  * eax = 69 - номер функции
3792
  * ebx = 0 - номер подфункции
3780
  * ebx = 0 - номер подфункции
3793
  * ecx = указатель
3781
  * ecx = указатель
3794
Формат области данных:
3782
Формат области данных:
3795
  * +0: dword: N = размер буфера (не считая этого заголовка)
3783
  * +0: dword: N = размер буфера (не считая этого заголовка)
3796
  * +4: dword: занято в буфере
3784
  * +4: dword: занято в буфере
3797
  * +8: N*byte: буфер
3785
  * +8: N*byte: буфер
3798
Возвращаемое значение:
3786
Возвращаемое значение:
3799
  * функция не возвращает значения
3787
  * функция не возвращает значения
3800
Замечания:
3788
Замечания:
3801
  * Если поле размера отрицательно, буфер считается заблокированным
3789
  * Если поле размера отрицательно, буфер считается заблокированным
3802
    и при поступлении нового сообщения система будет ждать.
3790
    и при поступлении нового сообщения система будет ждать.
3803
    Для синхронизации обрамляйте всю работу с буфером операциями
3791
    Для синхронизации обрамляйте всю работу с буфером операциями
3804
    блокировки/разблокировки
3792
    блокировки/разблокировки
3805
    	neg	[bufsize]
3793
    	neg	[bufsize]
3806
  * Данные в буфере трактуются как массив элементов переменной длины -
3794
  * Данные в буфере трактуются как массив элементов переменной длины -
3807
    сообщений. Формат сообщения указан в общем описании.
3795
    сообщений. Формат сообщения указан в общем описании.
3808
 
3796
 
3809
---------------------- Константы для регистров: ----------------------
3797
---------------------- Константы для регистров: ----------------------
3810
  eax - SF_DEBUG (69)
3798
  eax - SF_DEBUG (69)
3811
  ebx - SSF_SET_MESSAGE_AREA (0)
3799
  ebx - SSF_SET_MESSAGE_AREA (0)
3812
======================================================================
3800
======================================================================
3813
====================== Функция 69, подфункция 1 ======================
3801
====================== Функция 69, подфункция 1 ======================
3814
========= Получить состояние регистров отлаживаемого потока. =========
3802
========= Получить состояние регистров отлаживаемого потока. =========
3815
======================================================================
3803
======================================================================
3816
Параметры:
3804
Параметры:
3817
  * eax = 69 - номер функции
3805
  * eax = 69 - номер функции
3818
  * ebx = 1 - номер подфункции
3806
  * ebx = 1 - номер подфункции
3819
  * ecx = идентификатор потока
3807
  * ecx = идентификатор потока
3820
  * edx = длина структуры контекста, должно быть 0x28=40 байт
3808
  * edx = длина структуры контекста, должно быть 0x28=40 байт
3821
  * esi = указатель на структуру контекста
3809
  * esi = указатель на структуру контекста
3822
Возвращаемое значение:
3810
Возвращаемое значение:
3823
  * функция не возвращает значения
3811
  * функция не возвращает значения
3824
Формат структуры контекста: (FPU пока не поддерживается)
3812
Формат структуры контекста: (FPU пока не поддерживается)
3825
  * +0: dword: eip
3813
  * +0: dword: eip
3826
  * +4: dword: eflags
3814
  * +4: dword: eflags
3827
  * +8: dword: eax
3815
  * +8: dword: eax
3828
  * +12 = +0xC: dword: ecx
3816
  * +12 = +0xC: dword: ecx
3829
  * +16 = +0x10: dword: edx
3817
  * +16 = +0x10: dword: edx
3830
  * +20 = +0x14: dword: ebx
3818
  * +20 = +0x14: dword: ebx
3831
  * +24 = +0x18: dword: esp
3819
  * +24 = +0x18: dword: esp
3832
  * +28 = +0x1C: dword: ebp
3820
  * +28 = +0x1C: dword: ebp
3833
  * +32 = +0x20: dword: esi
3821
  * +32 = +0x20: dword: esi
3834
  * +36 = +0x24: dword: edi
3822
  * +36 = +0x24: dword: edi
3835
Замечания:
3823
Замечания:
3836
  * Если поток выполняет код 0-кольца, возвращается
3824
  * Если поток выполняет код 0-кольца, возвращается
3837
    состояние регистров 3-кольца.
3825
    состояние регистров 3-кольца.
3838
  * Процесс должен быть загружен для отладки (как указано в
3826
  * Процесс должен быть загружен для отладки (как указано в
3839
    общем описании).
3827
    общем описании).
3840
 
3828
 
3841
---------------------- Константы для регистров: ----------------------
3829
---------------------- Константы для регистров: ----------------------
3842
  eax - SF_DEBUG (69)
3830
  eax - SF_DEBUG (69)
3843
  ebx - SSF_GET_REGISTERS (1)
3831
  ebx - SSF_GET_REGISTERS (1)
3844
======================================================================
3832
======================================================================
3845
====================== Функция 69, подфункция 2 ======================
3833
====================== Функция 69, подфункция 2 ======================
3846
======== Установить состояние регистров отлаживаемого потока. ========
3834
======== Установить состояние регистров отлаживаемого потока. ========
3847
======================================================================
3835
======================================================================
3848
Параметры:
3836
Параметры:
3849
  * eax = 69 - номер функции
3837
  * eax = 69 - номер функции
3850
  * ebx = 2 - номер подфункции
3838
  * ebx = 2 - номер подфункции
3851
  * ecx = идентификатор потока
3839
  * ecx = идентификатор потока
3852
  * edx = длина структуры контекста, должно быть 0x28=40 байт
3840
  * edx = длина структуры контекста, должно быть 0x28=40 байт
3853
  * esi = указатель на структуру контекста
3841
  * esi = указатель на структуру контекста
3854
Возвращаемое значение:
3842
Возвращаемое значение:
3855
  * функция не возвращает значения
3843
  * функция не возвращает значения
3856
Формат структуры контекста указан в описании подфункции 1.
3844
Формат структуры контекста указан в описании подфункции 1.
3857
Замечания:
3845
Замечания:
3858
  * Если поток выполняет код 0-кольца, устанавливается
3846
  * Если поток выполняет код 0-кольца, устанавливается
3859
    состояние регистров 3-кольца.
3847
    состояние регистров 3-кольца.
3860
  * Процесс должен быть загружен для отладки (как указано в
3848
  * Процесс должен быть загружен для отладки (как указано в
3861
    общем описании).
3849
    общем описании).
3862
 
3850
 
3863
---------------------- Константы для регистров: ----------------------
3851
---------------------- Константы для регистров: ----------------------
3864
  eax - SF_DEBUG (69)
3852
  eax - SF_DEBUG (69)
3865
  ebx - SSF_SET_REGISTERS (2)
3853
  ebx - SSF_SET_REGISTERS (2)
3866
======================================================================
3854
======================================================================
3867
== Функция 69, подфункция 3 - отключиться от отлаживаемого процесса. =
3855
== Функция 69, подфункция 3 - отключиться от отлаживаемого процесса. =
3868
======================================================================
3856
======================================================================
3869
Параметры:
3857
Параметры:
3870
  * eax = 69 - номер функции
3858
  * eax = 69 - номер функции
3871
  * ebx = 3 - номер подфункции
3859
  * ebx = 3 - номер подфункции
3872
  * ecx = идентификатор
3860
  * ecx = идентификатор
3873
Возвращаемое значение:
3861
Возвращаемое значение:
3874
  * функция не возвращает значения
3862
  * функция не возвращает значения
3875
Замечания:
3863
Замечания:
3876
  * Если процесс был приостановлен, он возобновляет выполнение.
3864
  * Если процесс был приостановлен, он возобновляет выполнение.
3877
 
3865
 
3878
---------------------- Константы для регистров: ----------------------
3866
---------------------- Константы для регистров: ----------------------
3879
  eax - SF_DEBUG (69)
3867
  eax - SF_DEBUG (69)
3880
  ebx - SSF_DETACH (3)
3868
  ebx - SSF_DETACH (3)
3881
======================================================================
3869
======================================================================
3882
==== Функция 69, подфункция 4 - приостановить отлаживаемый поток. ====
3870
==== Функция 69, подфункция 4 - приостановить отлаживаемый поток. ====
3883
======================================================================
3871
======================================================================
3884
Параметры:
3872
Параметры:
3885
  * eax = 69 - номер процесса
3873
  * eax = 69 - номер процесса
3886
  * ebx = 4 - номер подфункции
3874
  * ebx = 4 - номер подфункции
3887
  * ecx = идентификатор
3875
  * ecx = идентификатор
3888
Возвращаемое значение:
3876
Возвращаемое значение:
3889
  * функция не возвращает значения
3877
  * функция не возвращает значения
3890
Замечания:
3878
Замечания:
3891
  * Процесс должен быть загружен для отладки (как указано в
3879
  * Процесс должен быть загружен для отладки (как указано в
3892
    общем описании).
3880
    общем описании).
3893
 
3881
 
3894
---------------------- Константы для регистров: ----------------------
3882
---------------------- Константы для регистров: ----------------------
3895
  eax - SF_DEBUG (69)
3883
  eax - SF_DEBUG (69)
3896
  ebx - SSF_SUSPEND (4)
3884
  ebx - SSF_SUSPEND (4)
3897
======================================================================
3885
======================================================================
3898
====================== Функция 69, подфункция 5 ======================
3886
====================== Функция 69, подфункция 5 ======================
3899
============ Возобновить выполнение отлаживаемого потока. ============
3887
============ Возобновить выполнение отлаживаемого потока. ============
3900
======================================================================
3888
======================================================================
3901
Параметры:
3889
Параметры:
3902
  * eax = 69 - номер функции
3890
  * eax = 69 - номер функции
3903
  * ebx = 5 - номер подфункции
3891
  * ebx = 5 - номер подфункции
3904
  * ecx = идентификатор
3892
  * ecx = идентификатор
3905
Возвращаемое значение:
3893
Возвращаемое значение:
3906
  * функция не возвращает значения
3894
  * функция не возвращает значения
3907
Замечания:
3895
Замечания:
3908
  * Процесс должен быть загружен для отладки (как указано в
3896
  * Процесс должен быть загружен для отладки (как указано в
3909
    общем описании).
3897
    общем описании).
3910
 
3898
 
3911
---------------------- Константы для регистров: ----------------------
3899
---------------------- Константы для регистров: ----------------------
3912
  eax - SF_DEBUG (69)
3900
  eax - SF_DEBUG (69)
3913
  ebx - SSF_RESUME (5)
3901
  ebx - SSF_RESUME (5)
3914
======================================================================
3902
======================================================================
3915
====================== Функция 69, подфункция 6 ======================
3903
====================== Функция 69, подфункция 6 ======================
3916
============= Прочитать из памяти отлаживаемого процесса. ============
3904
============= Прочитать из памяти отлаживаемого процесса. ============
3917
======================================================================
3905
======================================================================
3918
Параметры:
3906
Параметры:
3919
  * eax = 69 - номер функции
3907
  * eax = 69 - номер функции
3920
  * ebx = 6 - номер подфункции
3908
  * ebx = 6 - номер подфункции
3921
  * ecx = идентификатор
3909
  * ecx = идентификатор
3922
  * edx = сколько байт читать
3910
  * edx = сколько байт читать
3923
  * esi = адрес памяти отлаживаемого процесса
3911
  * esi = адрес памяти отлаживаемого процесса
3924
  * edi = указатель на буфер для данных
3912
  * edi = указатель на буфер для данных
3925
Возвращаемое значение:
3913
Возвращаемое значение:
3926
  * eax = -1 при ошибке (неверный PID или буфер)
3914
  * eax = -1 при ошибке (неверный PID или буфер)
3927
  * иначе eax = число прочитанных байт (возможно, 0,
3915
  * иначе eax = число прочитанных байт (возможно, 0,
3928
    если в esi слишком большое значение)
3916
    если в esi слишком большое значение)
3929
Замечания:
3917
Замечания:
3930
  * Процесс должен быть загружен для отладки (как указано в
3918
  * Процесс должен быть загружен для отладки (как указано в
3931
    общем описании).
3919
    общем описании).
3932
 
3920
 
3933
---------------------- Константы для регистров: ----------------------
3921
---------------------- Константы для регистров: ----------------------
3934
  eax - SF_DEBUG (69)
3922
  eax - SF_DEBUG (69)
3935
  ebx - SSF_READ_MEMORY (6)
3923
  ebx - SSF_READ_MEMORY (6)
3936
======================================================================
3924
======================================================================
3937
 Функция 69, подфункция 7 - записать в память отлаживаемого процесса.
3925
 Функция 69, подфункция 7 - записать в память отлаживаемого процесса.
3938
======================================================================
3926
======================================================================
3939
Параметры:
3927
Параметры:
3940
  * eax = 69 - номер функции
3928
  * eax = 69 - номер функции
3941
  * ebx = 7 - номер подфункции
3929
  * ebx = 7 - номер подфункции
3942
  * ecx = идентификатор
3930
  * ecx = идентификатор
3943
  * edx = сколько байт писать
3931
  * edx = сколько байт писать
3944
  * esi = адрес памяти в отлаживаемом процессе
3932
  * esi = адрес памяти в отлаживаемом процессе
3945
  * edi = указатель на данные
3933
  * edi = указатель на данные
3946
Возвращаемое значение:
3934
Возвращаемое значение:
3947
  * eax = -1 при ошибке (неверный PID или буфер)
3935
  * eax = -1 при ошибке (неверный PID или буфер)
3948
  * иначе eax = число записанных байт (возможно, 0,
3936
  * иначе eax = число записанных байт (возможно, 0,
3949
    если в esi слишком большое значение)
3937
    если в esi слишком большое значение)
3950
Замечания:
3938
Замечания:
3951
  * Процесс должен быть загружен для отладки (как указано в
3939
  * Процесс должен быть загружен для отладки (как указано в
3952
    общем описании).
3940
    общем описании).
3953
 
3941
 
3954
---------------------- Константы для регистров: ----------------------
3942
---------------------- Константы для регистров: ----------------------
3955
  eax - SF_DEBUG (69)
3943
  eax - SF_DEBUG (69)
3956
  ebx - SSF_WRITE_MEMORY (7)
3944
  ebx - SSF_WRITE_MEMORY (7)
3957
======================================================================
3945
======================================================================
3958
====== Функция 69, подфункция 8 - завершить отлаживаемый поток. ======
3946
====== Функция 69, подфункция 8 - завершить отлаживаемый поток. ======
3959
======================================================================
3947
======================================================================
3960
Параметры:
3948
Параметры:
3961
  * eax = 69 - номер функции
3949
  * eax = 69 - номер функции
3962
  * ebx = 8 - номер подфункции
3950
  * ebx = 8 - номер подфункции
3963
  * ecx = идентификатор
3951
  * ecx = идентификатор
3964
Возвращаемое значение:
3952
Возвращаемое значение:
3965
  * функция не возвращает значения
3953
  * функция не возвращает значения
3966
Замечания:
3954
Замечания:
3967
  * Процесс должен быть загружен для отладки (как указано в
3955
  * Процесс должен быть загружен для отладки (как указано в
3968
    общем описании).
3956
    общем описании).
3969
  * Функция аналогична подфункции 2 функции 18 с двумя отличиями:
3957
  * Функция аналогична подфункции 2 функции 18 с двумя отличиями:
3970
    требуется выполнение первого замечания и принимается PID,
3958
    требуется выполнение первого замечания и принимается PID,
3971
    а не номер слота.
3959
    а не номер слота.
3972
 
3960
 
3973
---------------------- Константы для регистров: ----------------------
3961
---------------------- Константы для регистров: ----------------------
3974
  eax - SF_DEBUG (69)
3962
  eax - SF_DEBUG (69)
3975
  ebx - SSF_TERMINATE (8)
3963
  ebx - SSF_TERMINATE (8)
3976
======================================================================
3964
======================================================================
3977
====================== Функция 69, подфункция 9 ======================
3965
====================== Функция 69, подфункция 9 ======================
3978
============= Установить/снять аппаратную точку останова. ============
3966
============= Установить/снять аппаратную точку останова. ============
3979
======================================================================
3967
======================================================================
3980
Параметры:
3968
Параметры:
3981
  * eax = 69 - номер функции
3969
  * eax = 69 - номер функции
3982
  * ebx = 9 - номер подфункции
3970
  * ebx = 9 - номер подфункции
3983
  * ecx = идентификатор потока
3971
  * ecx = идентификатор потока
3984
  * dl = индекс точки останова, от 0 до 3 включительно
3972
  * dl = индекс точки останова, от 0 до 3 включительно
3985
  * dh = флаги:
3973
  * dh = флаги:
3986
    * если старший бит сброшен - установить точку останова:
3974
    * если старший бит сброшен - установить точку останова:
3987
      * биты 0-1 - условие:
3975
      * биты 0-1 - условие:
3988
        * 00 = точка останова на выполнение
3976
        * 00 = точка останова на выполнение
3989
        * 01 = точка останова на запись
3977
        * 01 = точка останова на запись
3990
        * 11 = точка останова на чтение/запись
3978
        * 11 = точка останова на чтение/запись
3991
      * биты 2-3 - длина; для точек останова на исполнение должно быть
3979
      * биты 2-3 - длина; для точек останова на исполнение должно быть
3992
        00, в противном случае одно из
3980
        00, в противном случае одно из
3993
        * 00 = байт
3981
        * 00 = байт
3994
        * 01 = слово
3982
        * 01 = слово
3995
        * 11 = двойное слово
3983
        * 11 = двойное слово
3996
      * esi = адрес точки останова; должен быть выровнен
3984
      * esi = адрес точки останова; должен быть выровнен
3997
        соответственно длине (т.е. должен быть чётным для
3985
        соответственно длине (т.е. должен быть чётным для
3998
        точек останова на слово, кратен 4 для двойного слова)
3986
        точек останова на слово, кратен 4 для двойного слова)
3999
    * если старший бит установлен - сбросить точку останова
3987
    * если старший бит установлен - сбросить точку останова
4000
Возвращаемое значение:
3988
Возвращаемое значение:
4001
  * eax = 0 - успешно
3989
  * eax = 0 - успешно
4002
  * eax = 1 - ошибка во входных данных
3990
  * eax = 1 - ошибка во входных данных
4003
  * eax = 2 - (зарезервировано, никогда не возвращается
3991
  * eax = 2 - (зарезервировано, никогда не возвращается
4004
    в текущей реализации) с этим индексом уже установлена
3992
    в текущей реализации) с этим индексом уже установлена
4005
    глобальная точка останова
3993
    глобальная точка останова
4006
Замечания:
3994
Замечания:
4007
  * Процесс должен быть загружен для отладки (как указано в
3995
  * Процесс должен быть загружен для отладки (как указано в
4008
    общем описании).
3996
    общем описании).
4009
  * Аппаратные точки останова реализуются через DRx-регистры
3997
  * Аппаратные точки останова реализуются через DRx-регистры
4010
    процессора, отсюда все ограничения.
3998
    процессора, отсюда все ограничения.
4011
  * Функция может переустановить ранее установленную ей же
3999
  * Функция может переустановить ранее установленную ей же
4012
    точку останова (никак не сообщая об этом).
4000
    точку останова (никак не сообщая об этом).
4013
    Ведите список установленных точек останова в отладчике.
4001
    Ведите список установленных точек останова в отладчике.
4014
  * Срабатывание точки останова заключается в генерировании
4002
  * Срабатывание точки останова заключается в генерировании
4015
    отладочного исключения #DB, о котором система сообщает отладчику.
4003
    отладочного исключения #DB, о котором система сообщает отладчику.
4016
  * Точка останова на запись и чтение/запись срабатывает после
4004
  * Точка останова на запись и чтение/запись срабатывает после
4017
    выполнения вызвавшей её инструкции.
4005
    выполнения вызвавшей её инструкции.
4018
 
4006
 
4019
---------------------- Константы для регистров: ----------------------
4007
---------------------- Константы для регистров: ----------------------
4020
  eax - SF_DEBUG (69)
4008
  eax - SF_DEBUG (69)
4021
  ebx - SSF_DEFINE_BREAKPOINT (9)
4009
  ebx - SSF_DEFINE_BREAKPOINT (9)
4022
======================================================================
4010
======================================================================
4023
= Функция 70 - работа с файловой системой с поддержкой длинных имён. =
4011
= Функция 70 - работа с файловой системой с поддержкой длинных имён. =
4024
======================================================================
4012
======================================================================
4025
Параметры:
4013
Параметры:
4026
  * eax = 70
4014
  * eax = 70
4027
  * ebx = указатель на информационную структуру
4015
  * ebx = указатель на информационную структуру
4028
Возвращаемое значение:
4016
Возвращаемое значение:
4029
  * eax = 0 - успешно; иначе код ошибки файловой системы
4017
  * eax = 0 - успешно; иначе код ошибки файловой системы
4030
  * в зависимости от подфункции может возвращаться значение и
4018
  * в зависимости от подфункции может возвращаться значение и
4031
    в других регистрах
4019
    в других регистрах
4032
Общий формат информационной структуры:
4020
Общий формат информационной структуры:
4033
  * +0: dword: номер подфункции
4021
  * +0: dword: номер подфункции
4034
  * +4: dword: смещение в файле или папке
4022
  * +4: dword: смещение в файле или папке
4035
  * +8: dword: старшая часть смещения или поле флагов
4023
  * +8: dword: старшая часть смещения или поле флагов
4036
  * +12 = +0xC: dword: размер данных
4024
  * +12 = +0xC: dword: размер данных
4037
  * +16 = +0x10: dword: указатель на данные
4025
  * +16 = +0x10: dword: указатель на данные
4038
  * +20 = +0x14: ?: текстовая строка - путь к файлу, заканчивается нулём
4026
  * +20 = +0x14: ?: текстовая строка - путь к файлу, заканчивается нулём
4039
  или
4027
  или
4040
  * +20 = +0x14: byte: 0
4028
  * +20 = +0x14: byte: 0
4041
  * +21 = +0x15: dword: указатель на строку
4029
  * +21 = +0x15: dword: указатель на строку
4042
Чувствительность к регистру букв зависит от файловой системы.
4030
Чувствительность к регистру букв зависит от файловой системы.
4043
Если путь начинается не с '/', то он считается относительным.
4031
Если путь начинается не с '/', то он считается относительным.
4044
Получить или установить текущую папку можно с помощью сисфункции 30.
4032
Получить или установить текущую папку можно с помощью сисфункции 30.
4045
'../' в пути означает подъём на одну папку относительно текущей.
4033
'../' в пути означает подъём на одну папку относительно текущей.
4046
Можно указать кодировку строки, поместив в её начале байт со значениями:
4034
Можно указать кодировку строки, поместив в её начале байт со значениями:
4047
  * 1 = cp866
4035
  * 1 = cp866
4048
  * 2 = UTF-16LE
4036
  * 2 = UTF-16LE
4049
  * 3 = UTF-8
4037
  * 3 = UTF-8
4050
иначе будет использоваться кодировка cp866. В абсолютном пути можно
4038
иначе будет использоваться кодировка cp866. В абсолютном пути можно
4051
поместить этот байт после '/' или добавить дополнительный '/' перед ним.
4039
поместить этот байт после '/' или добавить дополнительный '/' перед ним.
4052
Также, можно использовать сисфункцию 80.
4040
Также, можно использовать сисфункцию 80.
4053
Формат абсолютного пути:
4041
Формат абсолютного пути:
4054
  /base/number/dir1/dir2/.../dirn/file,
4042
  /base/number/dir1/dir2/.../dirn/file,
4055
где base/number идентифицирует устройство, на котором ищется файл:
4043
где base/number идентифицирует устройство, на котором ищется файл:
4056
  * RD/1 = рамдиск
4044
  * RD/1 = рамдиск
4057
  * FD/1 = первый флоппи-дисковод,
4045
  * FD/1 = первый флоппи-дисковод,
4058
    FD/2 = второй флоппи-дисковод
4046
    FD/2 = второй флоппи-дисковод
4059
  * HD0/x, HD1/x, HD2/x, HD3/x = жёсткие диски соответственно на
4047
  * HD0/x, HD1/x, HD2/x, HD3/x = жёсткие диски соответственно на
4060
    IDE0 (Primary Master), IDE1 (Primary Slave),
4048
    IDE0 (Primary Master), IDE1 (Primary Slave),
4061
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
4049
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
4062
    x - номер раздела на выбранном винчестере, начиная с 1
4050
    x - номер раздела на выбранном винчестере, начиная с 1
4063
  * CD0/1, CD1/1, CD2/1, CD3/1 = аналогично для cd
4051
  * CD0/1, CD1/1, CD2/1, CD3/1 = аналогично для cd
4064
  * SYS - системная папка (является ключом, не зависит от кодировки),
4052
  * SYS - системная папка (является ключом, не зависит от кодировки),
4065
    второй ключ может быть установлен сисфункцией 30.3.
4053
    второй ключ может быть установлен сисфункцией 30.3.
4066
Примеры:
4054
Примеры:
4067
  * '/sys/example.asm',0
4055
  * '/sys/example.asm',0
4068
  * '/rd/1/example.asm',0
4056
  * '/rd/1/example.asm',0
4069
  * '/HD0/1/folder/file.txt',0
4057
  * '/HD0/1/folder/file.txt',0
4070
  * '/hd2/2/pics/tanzania.bmp',0
4058
  * '/hd2/2/pics/tanzania.bmp',0
4071
  * 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
4059
  * 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
4072
 
4060
 
4073
Доступные подфункции:
4061
Доступные подфункции:
4074
  * подфункция 0 - чтение файла
4062
  * подфункция 0 - чтение файла
4075
  * подфункция 1 - чтение папки
4063
  * подфункция 1 - чтение папки
4076
  * подфункция 2 - создание/перезапись файла
4064
  * подфункция 2 - создание/перезапись файла
4077
  * подфункция 3 - запись в существующий файл
4065
  * подфункция 3 - запись в существующий файл
4078
  * подфункция 4 - установка размера файла
4066
  * подфункция 4 - установка размера файла
4079
  * подфункция 5 - получение атрибутов файла/папки
4067
  * подфункция 5 - получение атрибутов файла/папки
4080
  * подфункция 6 - установка атрибутов файла/папки
4068
  * подфункция 6 - установка атрибутов файла/папки
4081
  * подфункция 7 - запуск программы
4069
  * подфункция 7 - запуск программы
4082
  * подфункция 8 - удаление файла/папки
4070
  * подфункция 8 - удаление файла/папки
4083
  * подфункция 9 - создание папки
4071
  * подфункция 9 - создание папки
4084
Для CD-приводов в связи с аппаратными ограничениями доступны
4072
Для CD-приводов в связи с аппаратными ограничениями доступны
4085
только подфункции 0,1,5 и 7, вызов других подфункций завершится
4073
только подфункции 0,1,5 и 7, вызов других подфункций завершится
4086
ошибкой с кодом 2.
4074
ошибкой с кодом 2.
4087
При первом обращении подфункций 0,1,5,7 к устройствам ATAPI
4075
При первом обращении подфункций 0,1,5,7 к устройствам ATAPI
4088
(CD и DVD) производится блокировка ручного управления механизмом
4076
(CD и DVD) производится блокировка ручного управления механизмом
4089
лотка. Это связано с кэшированием данных, полученных от привода.
4077
лотка. Это связано с кэшированием данных, полученных от привода.
4090
Разблокировка осуществляется при обращении подфункции 4 функции 24
4078
Разблокировка осуществляется при обращении подфункции 4 функции 24
4091
к соответствующему устройству.
4079
к соответствующему устройству.
4092
 
4080
 
4093
---------------------- Константы для регистров: ----------------------
4081
---------------------- Константы для регистров: ----------------------
4094
  eax - SF_FILE (70)
4082
  eax - SF_FILE (70)
4095
 [ebx] - SSF_READ_FILE (0), SSF_READ_FOLDER (1), SSF_CREATE_FILE (2),
4083
 [ebx] - SSF_READ_FILE (0), SSF_READ_FOLDER (1), SSF_CREATE_FILE (2),
4096
    SSF_WRITE_FILE (3), SSF_SET_END (4), SSF_GET_INFO (5),
4084
    SSF_WRITE_FILE (3), SSF_SET_END (4), SSF_GET_INFO (5),
4097
    SSF_SET_INFO (6), SSF_START_APP (7), SSF_DELETE (8),
4085
    SSF_SET_INFO (6), SSF_START_APP (7), SSF_DELETE (8),
4098
    SSF_CREATE_FOLDER (9)
4086
    SSF_CREATE_FOLDER (9)
4099
======================================================================
4087
======================================================================
4100
= Функция 70, подфункция 0 - чтение файла с поддержкой длинных имён. =
4088
= Функция 70, подфункция 0 - чтение файла с поддержкой длинных имён. =
4101
======================================================================
4089
======================================================================
4102
Параметры:
4090
Параметры:
4103
  * eax = 70 - номер функции
4091
  * eax = 70 - номер функции
4104
  * ebx = указатель на информационную структуру
4092
  * ebx = указатель на информационную структуру
4105
Формат информационной структуры:
4093
Формат информационной структуры:
4106
  * +0: dword: 0 = номер подфункции
4094
  * +0: dword: 0 = номер подфункции
4107
  * +4: dword: позиция в файле (в байтах)
4095
  * +4: dword: позиция в файле (в байтах)
4108
  * +8: dword: 0 (зарезервировано под старший dword позиции)
4096
  * +8: dword: 0 (зарезервировано под старший dword позиции)
4109
  * +12 = +0xC: dword: сколько байт читать
4097
  * +12 = +0xC: dword: сколько байт читать
4110
  * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
4098
  * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
4111
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4099
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4112
Возвращаемое значение:
4100
Возвращаемое значение:
4113
  * eax = 0 - успешно, иначе код ошибки файловой системы
4101
  * eax = 0 - успешно, иначе код ошибки файловой системы
4114
  * ebx = число прочитанных байт
4102
  * ebx = число прочитанных байт
4115
Замечания:
4103
Замечания:
4116
  * Если файл кончился раньше, чем был прочитан последний запрошенный
4104
  * Если файл кончился раньше, чем был прочитан последний запрошенный
4117
    блок, то функция прочитает, сколько сможет, после чего вернёт
4105
    блок, то функция прочитает, сколько сможет, после чего вернёт
4118
    eax=6 (EOF).
4106
    eax=6 (EOF).
4119
  * Функция не позволяет читать папки
4107
  * Функция не позволяет читать папки
4120
    (вернётся eax=10, access denied).
4108
    (вернётся eax=10, access denied).
4121
 
4109
 
4122
---------------------- Константы для регистров: ----------------------
4110
---------------------- Константы для регистров: ----------------------
4123
  eax - SF_FILE (70)
4111
  eax - SF_FILE (70)
4124
 [ebx] - SSF_READ_FILE (0)
4112
 [ebx] - SSF_READ_FILE (0)
4125
======================================================================
4113
======================================================================
4126
= Функция 70, подфункция 1 - чтение папки с поддержкой длинных имён. =
4114
= Функция 70, подфункция 1 - чтение папки с поддержкой длинных имён. =
4127
======================================================================
4115
======================================================================
4128
Параметры:
4116
Параметры:
4129
  * eax = 70 - номер функции
4117
  * eax = 70 - номер функции
4130
  * ebx = указатель на информационную структуру
4118
  * ebx = указатель на информационную структуру
4131
Формат информационной структуры:
4119
Формат информационной структуры:
4132
  * +0: dword: 1 = номер подфункции
4120
  * +0: dword: 1 = номер подфункции
4133
  * +4: dword: индекс начального блока (считая с 0)
4121
  * +4: dword: индекс начального блока (считая с 0)
4134
  * +8: dword: в какой кодировке возвращать имена:
4122
  * +8: dword: в какой кодировке возвращать имена:
4135
    0 = по умолчанию
4123
    0 = по умолчанию
4136
    1 = cp866
4124
    1 = cp866
4137
    2 = UTF-16LE
4125
    2 = UTF-16LE
4138
    3 = UTF-8
4126
    3 = UTF-8
4139
  * +12 = +0xC: dword: сколько блоков читать
4127
  * +12 = +0xC: dword: сколько блоков читать
4140
  * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные.
4128
  * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные.
4141
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4129
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4142
Возвращаемое значение:
4130
Возвращаемое значение:
4143
  * eax = 0 - успешно, иначе код ошибки файловой системы
4131
  * eax = 0 - успешно, иначе код ошибки файловой системы
4144
  * ebx = число файлов, информация о которых была записана в буфер
4132
  * ebx = число файлов, информация о которых была записана в буфер
4145
Структура буфера:
4133
Структура буфера:
4146
  * заголовок (32 байта)
4134
  * заголовок (32 байта)
4147
  * блок с информацией о файле 1
4135
  * блок с информацией о файле 1
4148
  * блок с информацией о файле 2
4136
  * блок с информацией о файле 2
4149
  * ...
4137
  * ...
4150
Структура заголовка:
4138
Структура заголовка:
4151
  * +0: dword: версия структуры (текущая версия = 1)
4139
  * +0: dword: версия структуры (текущая версия = 1)
4152
  * +4: dword: количество размещённых блоков; не больше, чем запрошено
4140
  * +4: dword: количество размещённых блоков; не больше, чем запрошено
4153
    в поле +12 информационной структуры; может быть меньше,
4141
    в поле +12 информационной структуры; может быть меньше,
4154
    если в папке кончились файлы (то же самое, что и в ebx)
4142
    если в папке кончились файлы (то же самое, что и в ebx)
4155
  * +8: dword: общее число файлов в папке
4143
  * +8: dword: общее число файлов в папке
4156
  * +12 = +0xC: 20*byte: зарезервировано (нули)
4144
  * +12 = +0xC: 20*byte: зарезервировано (нули)
4157
Структура блока данных входа каталога (БДВК):
4145
Структура блока данных входа каталога (БДВК):
4158
  * +0: dword: атрибуты файла:
4146
  * +0: dword: атрибуты файла:
4159
    * бит 0 (маска 1): файл только для чтения
4147
    * бит 0 (маска 1): файл только для чтения
4160
    * бит 1 (маска 2): файл является скрытым
4148
    * бит 1 (маска 2): файл является скрытым
4161
    * бит 2 (маска 4): файл является системным
4149
    * бит 2 (маска 4): файл является системным
4162
    * бит 3 (маска 8): это метка тома (возвращается подфункцией 5)
4150
    * бит 3 (маска 8): это метка тома (возвращается подфункцией 5)
4163
    * бит 4 (маска 0x10): это папка
4151
    * бит 4 (маска 0x10): это папка
4164
    * бит 5 (маска 0x20): файл не архивировался - многие программы
4152
    * бит 5 (маска 0x20): файл не архивировался - многие программы
4165
      архивации имеют опцию, по которой архивируются только файлы
4153
      архивации имеют опцию, по которой архивируются только файлы
4166
      с установленным этим битом, после чего этот бит сбрасывается -
4154
      с установленным этим битом, после чего этот бит сбрасывается -
4167
      это может быть полезно для автоматического создания
4155
      это может быть полезно для автоматического создания
4168
      backup-архивов, ибо при записи бит обычно устанавливается
4156
      backup-архивов, ибо при записи бит обычно устанавливается
4169
      (не в Kolibri, правда)
4157
      (не в Kolibri, правда)
4170
  * +4: dword: кодировка имени, соответствует полю +8 информационной структуры
4158
  * +4: dword: кодировка имени, соответствует полю +8 информационной структуры
4171
  * +8: 4*byte: время создания файла
4159
  * +8: 4*byte: время создания файла
4172
  * +12 = +0xC: 4*byte: дата создания файла
4160
  * +12 = +0xC: 4*byte: дата создания файла
4173
  * +16 = +0x10: 4*byte: время последнего доступа (чтение или запись)
4161
  * +16 = +0x10: 4*byte: время последнего доступа (чтение или запись)
4174
  * +20 = +0x14: 4*byte: дата последнего доступа
4162
  * +20 = +0x14: 4*byte: дата последнего доступа
4175
  * +24 = +0x18: 4*byte: время последней модификации
4163
  * +24 = +0x18: 4*byte: время последней модификации
4176
  * +28 = +0x1C: 4*byte: дата последней модификации
4164
  * +28 = +0x1C: 4*byte: дата последней модификации
4177
  * +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб)
4165
  * +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб)
4178
  * +40 = +0x28: имя, размер в cp866 составляет 264 байта, иначе - 520 байт.
4166
  * +40 = +0x28: имя, размер в cp866 составляет 264 байта, иначе - 520 байт.
4179
Формат времени:
4167
Формат времени:
4180
  * +0: byte: секунды
4168
  * +0: byte: секунды
4181
  * +1: byte: минуты
4169
  * +1: byte: минуты
4182
  * +2: byte: часы
4170
  * +2: byte: часы
4183
  * +3: byte: зарезервировано (0)
4171
  * +3: byte: зарезервировано (0)
4184
  * например, 23.59.59 записывается как (в hex) 3B 3B 17 00
4172
  * например, 23.59.59 записывается как (в hex) 3B 3B 17 00
4185
Формат даты:
4173
Формат даты:
4186
  * +0: byte: день
4174
  * +0: byte: день
4187
  * +1: byte: месяц
4175
  * +1: byte: месяц
4188
  * +2: word: год
4176
  * +2: word: год
4189
  * например, 25.11.1979 записывается как (в hex) 19 0B BB 07
4177
  * например, 25.11.1979 записывается как (в hex) 19 0B BB 07
4190
    Некоторые файловые системы ведут дату с 01.01.1980,
4178
    Некоторые файловые системы ведут дату с 01.01.1980,
4191
    например: FAT12/16/32 и exFAT
4179
    например: FAT12/16/32 и exFAT
4192
Замечания:
4180
Замечания:
4193
  * Если БДВК содержит имя в cp866, то длина БДВК составляет
4181
  * Если БДВК содержит имя в cp866, то длина БДВК составляет
4194
    304 байта, иначе - 560 байт.
4182
    304 байта, иначе - 560 байт.
4195
  * Строка имени заканчивается нулём, дальнейшие данные содержат мусор.
4183
  * Строка имени заканчивается нулём, дальнейшие данные содержат мусор.
4196
  * Если файлы в папке кончились раньше, чем было прочитано
4184
  * Если файлы в папке кончились раньше, чем было прочитано
4197
    запрошенное количество, то функция прочитает, сколько сможет,
4185
    запрошенное количество, то функция прочитает, сколько сможет,
4198
    после чего вернёт eax=6 (EOF).
4186
    после чего вернёт eax=6 (EOF).
4199
  * Любая папка на диске, кроме корневой, содержит два специальных
4187
  * Любая папка на диске, кроме корневой, содержит два специальных
4200
    входа "." и "..", идентифицирующих соответственно саму папку и
4188
    входа "." и "..", идентифицирующих соответственно саму папку и
4201
    родительскую папку.
4189
    родительскую папку.
4202
  * Функция позволяет также читать виртуальные папки "/", "/rd",
4190
  * Функция позволяет также читать виртуальные папки "/", "/rd",
4203
    "/fd", "/hd[n]", при этом атрибуты подпапок полагаются равными
4191
    "/fd", "/hd[n]", при этом атрибуты подпапок полагаются равными
4204
    0x10, а времена и даты обнулены.
4192
    0x10, а времена и даты обнулены.
4205
 
4193
 
4206
---------------------- Константы для регистров: ----------------------
4194
---------------------- Константы для регистров: ----------------------
4207
  eax - SF_FILE (70)
4195
  eax - SF_FILE (70)
4208
 [ebx] - SSF_READ_FOLDER (1)
4196
 [ebx] - SSF_READ_FOLDER (1)
4209
======================================================================
4197
======================================================================
4210
====================== Функция 70, подфункция 2 ======================
4198
====================== Функция 70, подфункция 2 ======================
4211
======== Создание/перезапись файла с поддержкой длинных имён. ========
4199
======== Создание/перезапись файла с поддержкой длинных имён. ========
4212
======================================================================
4200
======================================================================
4213
Параметры:
4201
Параметры:
4214
  * eax = 70 - номер функции
4202
  * eax = 70 - номер функции
4215
  * ebx = указатель на информационную структуру
4203
  * ebx = указатель на информационную структуру
4216
Формат информационной структуры:
4204
Формат информационной структуры:
4217
  * +0: dword: 2 = номер подфункции
4205
  * +0: dword: 2 = номер подфункции
4218
  * +4: dword: 0 (зарезервировано)
4206
  * +4: dword: 0 (зарезервировано)
4219
  * +8: dword: 0 (зарезервировано)
4207
  * +8: dword: 0 (зарезервировано)
4220
  * +12 = +0xC: dword: сколько байт писать
4208
  * +12 = +0xC: dword: сколько байт писать
4221
  * +16 = +0x10: dword: указатель на данные
4209
  * +16 = +0x10: dword: указатель на данные
4222
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4210
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4223
Возвращаемое значение:
4211
Возвращаемое значение:
4224
  * eax = 0 - успешно, иначе код ошибки файловой системы
4212
  * eax = 0 - успешно, иначе код ошибки файловой системы
4225
  * ebx = число записанных байт (возможно, 0)
4213
  * ebx = число записанных байт (возможно, 0)
4226
Замечания:
4214
Замечания:
4227
  * Если файл с таким именем не существовал, он создаётся; если
4215
  * Если файл с таким именем не существовал, он создаётся; если
4228
    существовал, то перезаписывается.
4216
    существовал, то перезаписывается.
4229
  * Если свободного места на диске недостаточно, то функция запишет,
4217
  * Если свободного места на диске недостаточно, то функция запишет,
4230
    сколько сможет, после чего вернёт код ошибки 8.
4218
    сколько сможет, после чего вернёт код ошибки 8.
4231
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4219
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4232
 
4220
 
4233
---------------------- Константы для регистров: ----------------------
4221
---------------------- Константы для регистров: ----------------------
4234
  eax - SF_FILE (70)
4222
  eax - SF_FILE (70)
4235
 [ebx] - SSF_CREATE_FILE (2)
4223
 [ebx] - SSF_CREATE_FILE (2)
4236
======================================================================
4224
======================================================================
4237
====================== Функция 70, подфункция 3 ======================
4225
====================== Функция 70, подфункция 3 ======================
4238
======== Запись в существующий файл с поддержкой длинных имён. =======
4226
======== Запись в существующий файл с поддержкой длинных имён. =======
4239
======================================================================
4227
======================================================================
4240
Параметры:
4228
Параметры:
4241
  * eax = 70 - номер функции
4229
  * eax = 70 - номер функции
4242
  * ebx = указатель на информационную структуру
4230
  * ebx = указатель на информационную структуру
4243
Формат информационной структуры:
4231
Формат информационной структуры:
4244
  * +0: dword: 3 = номер подфункции
4232
  * +0: dword: 3 = номер подфункции
4245
  * +4: dword: позиция в файле (в байтах)
4233
  * +4: dword: позиция в файле (в байтах)
4246
  * +8: dword: старший dword позиции (должен быть 0 для FAT)
4234
  * +8: dword: старший dword позиции (должен быть 0 для FAT)
4247
  * +12 = +0xC: dword: сколько байт писать
4235
  * +12 = +0xC: dword: сколько байт писать
4248
  * +16 = +0x10: dword: указатель на данные
4236
  * +16 = +0x10: dword: указатель на данные
4249
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4237
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4250
Возвращаемое значение:
4238
Возвращаемое значение:
4251
  * eax = 0 - успешно, иначе код ошибки файловой системы
4239
  * eax = 0 - успешно, иначе код ошибки файловой системы
4252
  * ebx = число записанных байт (возможно, 0)
4240
  * ebx = число записанных байт (возможно, 0)
4253
Замечания:
4241
Замечания:
4254
  * Файл должен уже существовать, иначе вернётся eax=5.
4242
  * Файл должен уже существовать, иначе вернётся eax=5.
4255
  * Единственным результатом записи 0 байт является установка в
4243
  * Единственным результатом записи 0 байт является установка в
4256
    атрибутах файла даты/времени модификации и доступа в текущую.
4244
    атрибутах файла даты/времени модификации и доступа в текущую.
4257
  * Если начальная и/или конечная позиция выходит за пределы файла
4245
  * Если начальная и/или конечная позиция выходит за пределы файла
4258
    (за исключением предыдущего случая), файл расширяется до
4246
    (за исключением предыдущего случая), файл расширяется до
4259
    необходимого размера нулевыми символами.
4247
    необходимого размера нулевыми символами.
4260
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4248
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4261
 
4249
 
4262
---------------------- Константы для регистров: ----------------------
4250
---------------------- Константы для регистров: ----------------------
4263
  eax - SF_FILE (70)
4251
  eax - SF_FILE (70)
4264
 [ebx] - SSF_WRITE_FILE (3)
4252
 [ebx] - SSF_WRITE_FILE (3)
4265
======================================================================
4253
======================================================================
4266
========= Функция 70, подфункция 4 - установка размера файла. ========
4254
========= Функция 70, подфункция 4 - установка размера файла. ========
4267
======================================================================
4255
======================================================================
4268
Параметры:
4256
Параметры:
4269
  * eax = 70 - номер функции
4257
  * eax = 70 - номер функции
4270
  * ebx = указатель на информационную структуру
4258
  * ebx = указатель на информационную структуру
4271
Формат информационной структуры:
4259
Формат информационной структуры:
4272
  * +0: dword: 4 = номер подфункции
4260
  * +0: dword: 4 = номер подфункции
4273
  * +4: dword: младший dword нового размера файла
4261
  * +4: dword: младший dword нового размера файла
4274
  * +8: dword: старший dword нового размера файла
4262
  * +8: dword: старший dword нового размера файла
4275
  * +12 = +0xC: dword: 0 (зарезервировано)
4263
  * +12 = +0xC: dword: 0 (зарезервировано)
4276
  * +16 = +0x10: dword: 0 (зарезервировано)
4264
  * +16 = +0x10: dword: 0 (зарезервировано)
4277
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4265
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4278
Возвращаемое значение:
4266
Возвращаемое значение:
4279
  * eax = 0 - успешно, иначе код ошибки файловой системы
4267
  * eax = 0 - успешно, иначе код ошибки файловой системы
4280
  * ebx разрушается
4268
  * ebx разрушается
4281
Замечания:
4269
Замечания:
4282
  * Если новый размер файла меньше старого, файл усекается.
4270
  * Если новый размер файла меньше старого, файл усекается.
4283
    Если новый размер больше старого, файл расширяется, и если
4271
    Если новый размер больше старого, файл расширяется, и если
4284
    разница в размере не больше 16 МБ, новое место очищается нулями.
4272
    разница в размере не больше 16 МБ, новое место очищается нулями.
4285
  * Если свободного места на диске недостаточно для расширения файла,
4273
  * Если свободного места на диске недостаточно для расширения файла,
4286
    то функция расширит насколько возможно, после чего вернёт
4274
    то функция расширит насколько возможно, после чего вернёт
4287
    код ошибки 8.
4275
    код ошибки 8.
4288
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4276
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4289
 
4277
 
4290
---------------------- Константы для регистров: ----------------------
4278
---------------------- Константы для регистров: ----------------------
4291
  eax - SF_FILE (70)
4279
  eax - SF_FILE (70)
4292
 [ebx] - SSF_SET_END (4)
4280
 [ebx] - SSF_SET_END (4)
4293
======================================================================
4281
======================================================================
4294
=== Функция 70, подфункция 5 - получение информации о файле/папке. ===
4282
=== Функция 70, подфункция 5 - получение информации о файле/папке. ===
4295
======================================================================
4283
======================================================================
4296
Параметры:
4284
Параметры:
4297
  * eax = 70 - номер функции
4285
  * eax = 70 - номер функции
4298
  * ebx = указатель на информационную структуру
4286
  * ebx = указатель на информационную структуру
4299
Формат информационной структуры:
4287
Формат информационной структуры:
4300
  * +0: dword: 5 = номер подфункции
4288
  * +0: dword: 5 = номер подфункции
4301
  * +4: dword: 0 (зарезервировано)
4289
  * +4: dword: 0 (зарезервировано)
4302
  * +8: dword: 0 или флаги (для корневого каталога)
4290
  * +8: dword: 0 или флаги (для корневого каталога)
4303
  * +12 = +0xC: dword: 0 (зарезервировано)
4291
  * +12 = +0xC: dword: 0 (зарезервировано)
4304
  * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
4292
  * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные
4305
                        (40 байт)
4293
                        (40 байт)
4306
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4294
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4307
Возвращаемое значение:
4295
Возвращаемое значение:
4308
  * eax = 0 - успешно, иначе код ошибки файловой системы
4296
  * eax = 0 - успешно, иначе код ошибки файловой системы
4309
  * ebx разрушается
4297
  * ebx разрушается
4310
Информация о файле возвращается в формате БДВК
4298
Информация о файле возвращается в формате БДВК
4311
(блока данных входа каталога), указанном в описании подфункции 1,
4299
(блока данных входа каталога), указанном в описании подфункции 1,
4312
но без имени файла, за исключением корневого каталога.
4300
но без имени файла, за исключением корневого каталога.
4313
Замечания:
4301
Замечания:
4314
  * Для корневого каталога возвращается размер раздела,
4302
  * Для корневого каталога возвращается размер раздела,
4315
    а при указании кодировки (не ноль), также его имя.
4303
    а при указании кодировки (не ноль), также его имя.
4316
  * Для устройства возвращается только размер.
4304
  * Для устройства возвращается только размер.
4317
 
4305
 
4318
---------------------- Константы для регистров: ----------------------
4306
---------------------- Константы для регистров: ----------------------
4319
  eax - SF_FILE (70)
4307
  eax - SF_FILE (70)
4320
 [ebx] - SSF_GET_INFO (5)
4308
 [ebx] - SSF_GET_INFO (5)
4321
======================================================================
4309
======================================================================
4322
===== Функция 70, подфункция 6 - установка атрибутов файла/папки. ====
4310
===== Функция 70, подфункция 6 - установка атрибутов файла/папки. ====
4323
======================================================================
4311
======================================================================
4324
Параметры:
4312
Параметры:
4325
  * eax = 70 - номер функции
4313
  * eax = 70 - номер функции
4326
  * ebx = указатель на информационную структуру
4314
  * ebx = указатель на информационную структуру
4327
Формат информационной структуры:
4315
Формат информационной структуры:
4328
  * +0: dword: 6 = номер подфункции
4316
  * +0: dword: 6 = номер подфункции
4329
  * +4: dword: 0 (зарезервировано)
4317
  * +4: dword: 0 (зарезервировано)
4330
  * +8: dword: 0 (зарезервировано)
4318
  * +8: dword: 0 (зарезервировано)
4331
  * +12 = +0xC: dword: 0 (зарезервировано)
4319
  * +12 = +0xC: dword: 0 (зарезервировано)
4332
  * +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта)
4320
  * +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта)
4333
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4321
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4334
Возвращаемое значение:
4322
Возвращаемое значение:
4335
  * eax = 0 - успешно, иначе код ошибки файловой системы
4323
  * eax = 0 - успешно, иначе код ошибки файловой системы
4336
  * ebx разрушается
4324
  * ebx разрушается
4337
Атрибуты файла - первые 32 байта в БДВК (блоке данных входа каталога),
4325
Атрибуты файла - первые 32 байта в БДВК (блоке данных входа каталога),
4338
формат которого указан в описании подфункции 1
4326
формат которого указан в описании подфункции 1
4339
(то есть без имени и размера файла). Атрибут файл/папка/метка тома
4327
(то есть без имени и размера файла). Атрибут файл/папка/метка тома
4340
(биты 3,4 в dword'е +0) не меняется.
4328
(биты 3,4 в dword'е +0) не меняется.
4341
Байт +4 (формат имени) игнорируется.
4329
Байт +4 (формат имени) игнорируется.
4342
Замечания:
4330
Замечания:
4343
  * Функция не поддерживает виртуальные папки типа /, /rd и
4331
  * Функция не поддерживает виртуальные папки типа /, /rd и
4344
    корневые папки типа /rd/1.
4332
    корневые папки типа /rd/1.
4345
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4333
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4346
 
4334
 
4347
---------------------- Константы для регистров: ----------------------
4335
---------------------- Константы для регистров: ----------------------
4348
  eax - SF_FILE (70)
4336
  eax - SF_FILE (70)
4349
 [ebx] - SSF_SET_INFO (6)
4337
 [ebx] - SSF_SET_INFO (6)
4350
======================================================================
4338
======================================================================
4351
============ Функция 70, подфункция 7 - запуск программы. ============
4339
============ Функция 70, подфункция 7 - запуск программы. ============
4352
======================================================================
4340
======================================================================
4353
Параметры:
4341
Параметры:
4354
  * eax = 70 - номер функции
4342
  * eax = 70 - номер функции
4355
  * ebx = указатель на информационную структуру
4343
  * ebx = указатель на информационную структуру
4356
Формат информационной структуры:
4344
Формат информационной структуры:
4357
  * +0: dword: 7 = номер подфункции
4345
  * +0: dword: 7 = номер подфункции
4358
  * +4: dword: поле флагов:
4346
  * +4: dword: поле флагов:
4359
    * бит 0: запустить процесс как отлаживаемый
4347
    * бит 0: запустить процесс как отлаживаемый
4360
    * остальные биты зарезервированы и должны быть установлены в 0
4348
    * остальные биты зарезервированы и должны быть установлены в 0
4361
  * +8: dword: 0 или указатель на ASCIIZ-строку с параметрами
4349
  * +8: dword: 0 или указатель на ASCIIZ-строку с параметрами
4362
  * +12 = +0xC: dword: 0 (зарезервировано)
4350
  * +12 = +0xC: dword: 0 (зарезервировано)
4363
  * +16 = +0x10: dword: 0 (зарезервировано)
4351
  * +16 = +0x10: dword: 0 (зарезервировано)
4364
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4352
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4365
Возвращаемое значение:
4353
Возвращаемое значение:
4366
  * eax > 0 - программа загружена, eax содержит PID
4354
  * eax > 0 - программа загружена, eax содержит PID
4367
  * eax < 0 - произошла ошибка, -eax содержит
4355
  * eax < 0 - произошла ошибка, -eax содержит
4368
    код ошибки файловой системы
4356
    код ошибки файловой системы
4369
  * ebx разрушается
4357
  * ebx разрушается
4370
Замечания:
4358
Замечания:
4371
  * Командная строка должна заканчиваться символом с кодом 0
4359
  * Командная строка должна заканчиваться символом с кодом 0
4372
    (ASCIIZ-строка); учитываются либо все символы до завершающего нуля
4360
    (ASCIIZ-строка); учитываются либо все символы до завершающего нуля
4373
    включительно, либо первые 256 символов, в зависимости от того,
4361
    включительно, либо первые 256 символов, в зависимости от того,
4374
    что меньше.
4362
    что меньше.
4375
  * Если процесс запускается как отлаживаемый, он создаётся
4363
  * Если процесс запускается как отлаживаемый, он создаётся
4376
    в замороженном состоянии; для запуска используйте
4364
    в замороженном состоянии; для запуска используйте
4377
    подфункцию 5 функции 69.
4365
    подфункцию 5 функции 69.
4378
 
4366
 
4379
---------------------- Константы для регистров: ----------------------
4367
---------------------- Константы для регистров: ----------------------
4380
  eax - SF_FILE (70)
4368
  eax - SF_FILE (70)
4381
 [ebx] - SSF_START_APP (7)
4369
 [ebx] - SSF_START_APP (7)
4382
======================================================================
4370
======================================================================
4383
========== Функция 70, подфункция 8 - удаление файла/папки. ==========
4371
========== Функция 70, подфункция 8 - удаление файла/папки. ==========
4384
======================================================================
4372
======================================================================
4385
Параметры:
4373
Параметры:
4386
  * eax = 70 - номер функции
4374
  * eax = 70 - номер функции
4387
  * ebx = указатель на информационную структуру
4375
  * ebx = указатель на информационную структуру
4388
Формат информационной структуры:
4376
Формат информационной структуры:
4389
  * +0: dword: 8 = номер подфункции
4377
  * +0: dword: 8 = номер подфункции
4390
  * +4: dword: 0 (зарезервировано)
4378
  * +4: dword: 0 (зарезервировано)
4391
  * +8: dword: 0 (зарезервировано)
4379
  * +8: dword: 0 (зарезервировано)
4392
  * +12 = +0xC: dword: 0 (зарезервировано)
4380
  * +12 = +0xC: dword: 0 (зарезервировано)
4393
  * +16 = +0x10: dword: 0 (зарезервировано)
4381
  * +16 = +0x10: dword: 0 (зарезервировано)
4394
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4382
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4395
Возвращаемое значение:
4383
Возвращаемое значение:
4396
  * eax = 0 - успешно, иначе код ошибки файловой системы
4384
  * eax = 0 - успешно, иначе код ошибки файловой системы
4397
  * ebx разрушается
4385
  * ebx разрушается
4398
Замечания:
4386
Замечания:
4399
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4387
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4400
  * Можно удалять только пустые папки (попытка удаления непустой папки
4388
  * Можно удалять только пустые папки (попытка удаления непустой папки
4401
    приведёт к ошибке с кодом 10, "доступ запрещён").
4389
    приведёт к ошибке с кодом 10, "доступ запрещён").
4402
 
4390
 
4403
---------------------- Константы для регистров: ----------------------
4391
---------------------- Константы для регистров: ----------------------
4404
  eax - SF_FILE (70)
4392
  eax - SF_FILE (70)
4405
 [ebx] - SSF_DELETE (8)
4393
 [ebx] - SSF_DELETE (8)
4406
======================================================================
4394
======================================================================
4407
============= Функция 70, подфункция 9 - создание папки. =============
4395
============= Функция 70, подфункция 9 - создание папки. =============
4408
======================================================================
4396
======================================================================
4409
Параметры:
4397
Параметры:
4410
  * eax = 70 - номер функции
4398
  * eax = 70 - номер функции
4411
  * ebx = указатель на информационную структуру
4399
  * ebx = указатель на информационную структуру
4412
Формат информационной структуры:
4400
Формат информационной структуры:
4413
  * +0: dword: 9 = номер подфункции
4401
  * +0: dword: 9 = номер подфункции
4414
  * +4: dword: 0 (зарезервировано)
4402
  * +4: dword: 0 (зарезервировано)
4415
  * +8: dword: 0 (зарезервировано)
4403
  * +8: dword: 0 (зарезервировано)
4416
  * +12 = +0xC: dword: 0 (зарезервировано)
4404
  * +12 = +0xC: dword: 0 (зарезервировано)
4417
  * +16 = +0x10: dword: 0 (зарезервировано)
4405
  * +16 = +0x10: dword: 0 (зарезервировано)
4418
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4406
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4419
Возвращаемое значение:
4407
Возвращаемое значение:
4420
  * eax = 0 - успешно, иначе код ошибки файловой системы
4408
  * eax = 0 - успешно, иначе код ошибки файловой системы
4421
  * ebx разрушается
4409
  * ebx разрушается
4422
Замечания:
4410
Замечания:
4423
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4411
  * Функция не поддерживается для CD (вернётся код ошибки 2).
4424
  * Родительская папка должна уже существовать.
4412
  * Родительская папка должна уже существовать.
4425
  * Если папка уже существует, функция завершится успешно (eax=0).
4413
  * Если папка уже существует, функция завершится успешно (eax=0).
4426
 
4414
 
4427
---------------------- Константы для регистров: ----------------------
4415
---------------------- Константы для регистров: ----------------------
4428
  eax - SF_FILE (70)
4416
  eax - SF_FILE (70)
4429
 [ebx] - SSF_CREATE_FOLDER (9)
4417
 [ebx] - SSF_CREATE_FOLDER (9)
4430
======================================================================
4418
======================================================================
4431
======= Функция 70, подфункция 10 - переименование/перемещение =======
4419
======= Функция 70, подфункция 10 - переименование/перемещение =======
4432
======================================================================
4420
======================================================================
4433
Параметры:
4421
Параметры:
4434
  * eax = 70 - номер функции
4422
  * eax = 70 - номер функции
4435
  * ebx = указатель на информационную структуру
4423
  * ebx = указатель на информационную структуру
4436
Формат информационной структуры:
4424
Формат информационной структуры:
4437
  * +0: dword: 10 = номер подфункции
4425
  * +0: dword: 10 = номер подфункции
4438
  * +4: dword: 0 (зарезервировано)
4426
  * +4: dword: 0 (зарезервировано)
4439
  * +8: dword: 0 (зарезервировано)
4427
  * +8: dword: 0 (зарезервировано)
4440
  * +12 = +0xC: dword: 0 (зарезервировано)
4428
  * +12 = +0xC: dword: 0 (зарезервировано)
4441
  * +16 = +0x10: dword: указатель на строку с новым именем/путём
4429
  * +16 = +0x10: dword: указатель на строку с новым именем/путём
4442
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4430
  * +20 = +0x14: путь, правила формирования имён указаны в общем описании
4443
Возвращаемое значение:
4431
Возвращаемое значение:
4444
  * eax = 0 - успешно, иначе код ошибки файловой системы
4432
  * eax = 0 - успешно, иначе код ошибки файловой системы
4445
  * ebx разрушается
4433
  * ebx разрушается
4446
Замечания:
4434
Замечания:
4447
  * Формирование нового пути отличается от общих правил:
4435
  * Формирование нового пути отличается от общих правил:
4448
    относительный путь относится к папке целевого файла (или папки),
4436
    относительный путь относится к папке целевого файла (или папки),
4449
    абсолютный путь считается от корня раздела.
4437
    абсолютный путь считается от корня раздела.
4450
======================================================================
4438
======================================================================
4451
========== Функция 71 - установить заголовок окна программы ==========
4439
========== Функция 71 - установить заголовок окна программы ==========
4452
======================================================================
4440
======================================================================
4453
Параметры:
4441
Параметры:
4454
  * eax = 71 - номер функции
4442
  * eax = 71 - номер функции
4455
  * ebx = 1
4443
  * ebx = 1
4456
  * ecx = адрес строки заголовка,
4444
  * ecx = адрес строки заголовка,
4457
    строка может начинаться с байта кодировки:
4445
    строка может начинаться с байта кодировки:
4458
    1 = cp866
4446
    1 = cp866
4459
    2 = UTF-16LE
4447
    2 = UTF-16LE
4460
    3 = UTF-8
4448
    3 = UTF-8
4461
  или:
4449
  или:
4462
  * ebx = 2
4450
  * ebx = 2
4463
  * ecx = адрес строки заголовка
4451
  * ecx = адрес строки заголовка
4464
  * dl  = кодировка строки
4452
  * dl  = кодировка строки
4465
Возвращаемое значение:
4453
Возвращаемое значение:
4466
  * функция не возвращает значения
4454
  * функция не возвращает значения
4467
Замечания:
4455
Замечания:
4468
  * Строка заголовка должна заканчиваться нулём.
4456
  * Строка заголовка должна заканчиваться нулём.
4469
  * Чтобы убрать заголовок, передайте NULL в ecx.
4457
  * Чтобы убрать заголовок, передайте NULL в ecx.
4470
 
4458
 
4471
---------------------- Константы для регистров: ----------------------
4459
---------------------- Константы для регистров: ----------------------
4472
  eax - SF_SET_CAPTION (71)
4460
  eax - SF_SET_CAPTION (71)
4473
======================================================================
4461
======================================================================
4474
================ Функция 72 - послать сообщение окну. ================
4462
================ Функция 72 - послать сообщение окну. ================
4475
======================================================================
4463
======================================================================
4476
 
4464
 
4477
--- Подфункция 1 - послать сообщение с параметром активному окну. ----
4465
--- Подфункция 1 - послать сообщение с параметром активному окну. ----
4478
Параметры:
4466
Параметры:
4479
  * eax = 72 - номер функции
4467
  * eax = 72 - номер функции
4480
  * ebx = 1 - номер подфункции
4468
  * ebx = 1 - номер подфункции
4481
  * ecx = код события: 2 или 3
4469
  * ecx = код события: 2 или 3
4482
  * edx = код клавиши для ecx=2, идентификатор кнопки для ecx=3
4470
  * edx = код клавиши для ecx=2, идентификатор кнопки для ecx=3
4483
Возвращаемое значение:
4471
Возвращаемое значение:
4484
  * eax = 0 - успешно
4472
  * eax = 0 - успешно
4485
  * eax = 1 - буфер заполнен
4473
  * eax = 1 - буфер заполнен
4486
 
4474
 
4487
---------------------- Константы для регистров: ----------------------
4475
---------------------- Константы для регистров: ----------------------
4488
  eax - SF_SEND_MESSAGE (72)
4476
  eax - SF_SEND_MESSAGE (72)
4489
======================================================================
4477
======================================================================
4490
===================== Функция 73 - blit bitmap  =====================
4478
===================== Функция 73 - blit bitmap  =====================
4491
======================================================================
4479
======================================================================
4492
блит - копирование битового массив
4480
блит - копирование битового массив
4493
 
4481
 
4494
Параметры:
4482
Параметры:
4495
  * eax = 73 - номер функции
4483
  * eax = 73 - номер функции
4496
 
4484
 
4497
  * ebx = ROP и опциональные флаги
4485
  * ebx = ROP и опциональные флаги
4498
     31      30 29 28       6 5  4 3   0
4486
     31      30 29 28       6 5  4 3   0
4499
     [reserved][CR][reserved][T][B][ROP]
4487
     [reserved][CR][reserved][T][B][ROP]
4500
     ROP - код растровых операций
4488
     ROP - код растровых операций
4501
        0: копировать
4489
        0: копировать
4502
     1-15: Зарезервировано
4490
     1-15: Зарезервировано
4503
     B   - блит на фоновую поверхность
4491
     B   - блит на фоновую поверхность
4504
     T   - блит с прозрачностью
4492
     T   - блит с прозрачностью
4505
     CR  - относительно клиентской области окна
4493
     CR  - относительно клиентской области окна
4506
 
4494
 
4507
  * ecx = указатель на параметры функции
4495
  * ecx = указатель на параметры функции
4508
        смещение цели и отсечение
4496
        смещение цели и отсечение
4509
     +0 signed dword: смещение по X окна, для целевого прямоугольника
4497
     +0 signed dword: смещение по X окна, для целевого прямоугольника
4510
                      верхний левый угол
4498
                      верхний левый угол
4511
     +4 signed dword: смещение по Y окна, для целевого прямоугольника
4499
     +4 signed dword: смещение по Y окна, для целевого прямоугольника
4512
                      верхний левый угол
4500
                      верхний левый угол
4513
     +8 dword:        ширина целевого прямоугольника
4501
     +8 dword:        ширина целевого прямоугольника
4514
    +12 dword:        высота целевого прямоугольника
4502
    +12 dword:        высота целевого прямоугольника
4515
 
4503
 
4516
        смещение исходника и отсечение
4504
        смещение исходника и отсечение
4517
    +16 signed dword: смещение по X bitmap, для исходного прямоугольника
4505
    +16 signed dword: смещение по X bitmap, для исходного прямоугольника
4518
                      верхний левый угол
4506
                      верхний левый угол
4519
    +20 signed dword: смещение по Y bitmap, для исходного прямоугольника
4507
    +20 signed dword: смещение по Y bitmap, для исходного прямоугольника
4520
                      верхний левый угол
4508
                      верхний левый угол
4521
    +24 dword:        ширина исходного прямоугольника
4509
    +24 dword:        ширина исходного прямоугольника
4522
    +28 dword:        высота исходного прямоугольника
4510
    +28 dword:        высота исходного прямоугольника
4523
 
4511
 
4524
    +32: dword: данные bitmap - должны быть 32bpp
4512
    +32: dword: данные bitmap - должны быть 32bpp
4525
    +36: dword: размер строки bitmap в байтах
4513
    +36: dword: размер строки bitmap в байтах
4526
 
4514
 
4527
Возвращаемое значение:
4515
Возвращаемое значение:
4528
  * функция не возвращает значения
4516
  * функция не возвращает значения
4529
 
4517
 
4530
---------------------- Константы для регистров: ----------------------
4518
---------------------- Константы для регистров: ----------------------
4531
  eax - SF_BLITTER (73)
4519
  eax - SF_BLITTER (73)
4532
======================================================================
4520
======================================================================
4533
=================== Функция 74, подфункция -1 ========================
4521
=================== Функция 74, подфункция -1 ========================
4534
=========== Получить количество активных сетевых устройств. ==========
4522
=========== Получить количество активных сетевых устройств. ==========
4535
======================================================================
4523
======================================================================
4536
Параметры:
4524
Параметры:
4537
  * eax = 74 - номер функции
4525
  * eax = 74 - номер функции
4538
  * bl = -1 - номер подфункции
4526
  * bl = -1 - номер подфункции
4539
Возвращаемое значение:
4527
Возвращаемое значение:
4540
  * eax = количество активных сетевых устройств
4528
  * eax = количество активных сетевых устройств
4541
 
4529
 
4542
---------------------- Константы для регистров: ----------------------
4530
---------------------- Константы для регистров: ----------------------
4543
  eax - SF_NETWORK_GET (74)
4531
  eax - SF_NETWORK_GET (74)
4544
   bl - SSF_DEVICE_COUNT (255)
4532
   bl - SSF_DEVICE_COUNT (255)
4545
======================================================================
4533
======================================================================
4546
==== Функция 74, подфункция 0, Получить тип сетевого устройства. =====
4534
==== Функция 74, подфункция 0, Получить тип сетевого устройства. =====
4547
======================================================================
4535
======================================================================
4548
Параметры:
4536
Параметры:
4549
  * eax = 74 - номер функции
4537
  * eax = 74 - номер функции
4550
  * bl = 0 - номер подфункции
4538
  * bl = 0 - номер подфункции
4551
  * bh = номер устройства
4539
  * bh = номер устройства
4552
Возвращаемое значение:
4540
Возвращаемое значение:
4553
  * eax = тип устройства
4541
  * eax = тип устройства
4554
 
4542
 
4555
---------------------- Константы для регистров: ----------------------
4543
---------------------- Константы для регистров: ----------------------
4556
  eax - SF_NETWORK_GET (74)
4544
  eax - SF_NETWORK_GET (74)
4557
   bl - SSF_DEVICE_TYPE (0)
4545
   bl - SSF_DEVICE_TYPE (0)
4558
======================================================================
4546
======================================================================
4559
==== Функция 74, подфункция 1, Получить имя сетевого устройства. =====
4547
==== Функция 74, подфункция 1, Получить имя сетевого устройства. =====
4560
======================================================================
4548
======================================================================
4561
Параметры:
4549
Параметры:
4562
  * eax = 74 - номер функции
4550
  * eax = 74 - номер функции
4563
  * bl = 1 - номер подфункции
4551
  * bl = 1 - номер подфункции
4564
  * bh = номер устройства
4552
  * bh = номер устройства
4565
  * ecx = указатель на буфера - 64 байт
4553
  * ecx = указатель на буфера - 64 байт
4566
Возвращаемое значение:
4554
Возвращаемое значение:
4567
  * eax = -1 для ошибки
4555
  * eax = -1 для ошибки
4568
  * В случае успеха в буфер записывается имя сетевого устройства
4556
  * В случае успеха в буфер записывается имя сетевого устройства
4569
 
4557
 
4570
---------------------- Константы для регистров: ----------------------
4558
---------------------- Константы для регистров: ----------------------
4571
  eax - SF_NETWORK_GET (74)
4559
  eax - SF_NETWORK_GET (74)
4572
   bl - SSF_DEVICE_NAME (1)
4560
   bl - SSF_DEVICE_NAME (1)
4573
======================================================================
4561
======================================================================
4574
======= Функция 74, подфункция 2, Сброс сетевого устройства. =========
4562
======= Функция 74, подфункция 2, Сброс сетевого устройства. =========
4575
======================================================================
4563
======================================================================
4576
Параметры:
4564
Параметры:
4577
  * eax = 74 - номер функции
4565
  * eax = 74 - номер функции
4578
  * bl = 2 - номер подфункции
4566
  * bl = 2 - номер подфункции
4579
  * bh = номер устройства
4567
  * bh = номер устройства
4580
Возвращаемое значение:
4568
Возвращаемое значение:
4581
  * eax = -1 для ошибки
4569
  * eax = -1 для ошибки
4582
 
4570
 
4583
---------------------- Константы для регистров: ----------------------
4571
---------------------- Константы для регистров: ----------------------
4584
  eax - SF_NETWORK_GET (74)
4572
  eax - SF_NETWORK_GET (74)
4585
   bl - SSF_RESET_DEVICE (2)
4573
   bl - SSF_RESET_DEVICE (2)
4586
======================================================================
4574
======================================================================
4587
====== Функция 74, подфункция 3, Остановить сетевое устройство. ======
4575
====== Функция 74, подфункция 3, Остановить сетевое устройство. ======
4588
======================================================================
4576
======================================================================
4589
Параметры:
4577
Параметры:
4590
  * eax = 74 - номер функции
4578
  * eax = 74 - номер функции
4591
  * bl = 3 - номер подфункции
4579
  * bl = 3 - номер подфункции
4592
  * bh = номер устройства
4580
  * bh = номер устройства
4593
Возвращаемое значение:
4581
Возвращаемое значение:
4594
  * eax = -1 для ошибки
4582
  * eax = -1 для ошибки
4595
 
4583
 
4596
---------------------- Константы для регистров: ----------------------
4584
---------------------- Константы для регистров: ----------------------
4597
  eax - SF_NETWORK_GET (74)
4585
  eax - SF_NETWORK_GET (74)
4598
   bl - SSF_STOP_DEVICE (3)
4586
   bl - SSF_STOP_DEVICE (3)
4599
======================================================================
4587
======================================================================
4600
===== Функция 74, подфункция 4, Получить указатель на устройство =====
4588
===== Функция 74, подфункция 4, Получить указатель на устройство =====
4601
======================================================================
4589
======================================================================
4602
Параметры:
4590
Параметры:
4603
  * eax = 74 - номер функции
4591
  * eax = 74 - номер функции
4604
  * bl = 4 - номер подфункции
4592
  * bl = 4 - номер подфункции
4605
  * bh = номер устройства
4593
  * bh = номер устройства
4606
Возвращаемое значение:
4594
Возвращаемое значение:
4607
  * eax = указатель, -1 для ошибки
4595
  * eax = указатель, -1 для ошибки
4608
 
4596
 
4609
---------------------- Константы для регистров: ----------------------
4597
---------------------- Константы для регистров: ----------------------
4610
  eax - SF_NETWORK_GET (74)
4598
  eax - SF_NETWORK_GET (74)
4611
   bl - SSF_DEVICE_POINTER (4)
4599
   bl - SSF_DEVICE_POINTER (4)
4612
======================================================================
4600
======================================================================
4613
=== Функция 74, подфункция 6, Получить количество посланых пакетов ===
4601
=== Функция 74, подфункция 6, Получить количество посланых пакетов ===
4614
======================================================================
4602
======================================================================
4615
Параметры:
4603
Параметры:
4616
  * eax = 74 - номер функции
4604
  * eax = 74 - номер функции
4617
  * bl = 6 - номер подфункции
4605
  * bl = 6 - номер подфункции
4618
  * bh = номер устройства
4606
  * bh = номер устройства
4619
Возвращаемое значение:
4607
Возвращаемое значение:
4620
  * eax = количество с момента старта устройства, -1 для ошибки
4608
  * eax = количество с момента старта устройства, -1 для ошибки
4621
 
4609
 
4622
---------------------- Константы для регистров: ----------------------
4610
---------------------- Константы для регистров: ----------------------
4623
  eax - SF_NETWORK_GET (74)
4611
  eax - SF_NETWORK_GET (74)
4624
   bl - SSF_TX_PACKET_COUNT (6)
4612
   bl - SSF_TX_PACKET_COUNT (6)
4625
======================================================================
4613
======================================================================
4626
=== Функция 74, подфункция 7, Получить количество принятых пакетов ===
4614
=== Функция 74, подфункция 7, Получить количество принятых пакетов ===
4627
======================================================================
4615
======================================================================
4628
Параметры:
4616
Параметры:
4629
  * eax = 74 - номер функции
4617
  * eax = 74 - номер функции
4630
  * bl = 7 - номер подфункции
4618
  * bl = 7 - номер подфункции
4631
  * bh = номер устройства
4619
  * bh = номер устройства
4632
Возвращаемое значение:
4620
Возвращаемое значение:
4633
  * eax = количество с момента старта устройства, -1 для ошибки
4621
  * eax = количество с момента старта устройства, -1 для ошибки
4634
 
4622
 
4635
---------------------- Константы для регистров: ----------------------
4623
---------------------- Константы для регистров: ----------------------
4636
  eax - SF_NETWORK_GET (74)
4624
  eax - SF_NETWORK_GET (74)
4637
   bl - SSF_RX_PACKET_COUNT (7)
4625
   bl - SSF_RX_PACKET_COUNT (7)
4638
======================================================================
4626
======================================================================
4639
==== Функция 74, подфункция 8, Получить количество посланых байт. ====
4627
==== Функция 74, подфункция 8, Получить количество посланых байт. ====
4640
======================================================================
4628
======================================================================
4641
Параметры:
4629
Параметры:
4642
  * eax = 74 - номер функции
4630
  * eax = 74 - номер функции
4643
  * bl = 8 - номер подфункции
4631
  * bl = 8 - номер подфункции
4644
  * bh = номер устройства
4632
  * bh = номер устройства
4645
Возвращаемое значение:
4633
Возвращаемое значение:
4646
  * eax = количество с момента старта устройства, -1 для ошибки
4634
  * eax = количество с момента старта устройства, -1 для ошибки
4647
  * ebx = старшая часть
4635
  * ebx = старшая часть
4648
 
4636
 
4649
---------------------- Константы для регистров: ----------------------
4637
---------------------- Константы для регистров: ----------------------
4650
  eax - SF_NETWORK_GET (74)
4638
  eax - SF_NETWORK_GET (74)
4651
   bl - SSF_TX_BYTE_COUNT (8)
4639
   bl - SSF_TX_BYTE_COUNT (8)
4652
======================================================================
4640
======================================================================
4653
==== Функция 74, подфункция 9, Получить количество принятых байт. ====
4641
==== Функция 74, подфункция 9, Получить количество принятых байт. ====
4654
======================================================================
4642
======================================================================
4655
Параметры:
4643
Параметры:
4656
  * eax = 74 - номер функции
4644
  * eax = 74 - номер функции
4657
  * bl = 9 - номер подфункции
4645
  * bl = 9 - номер подфункции
4658
  * bh = номер устройства
4646
  * bh = номер устройства
4659
Возвращаемое значение:
4647
Возвращаемое значение:
4660
  * eax = количество с момента старта устройства, -1 для ошибки
4648
  * eax = количество с момента старта устройства, -1 для ошибки
4661
  * ebx = старшая часть
4649
  * ebx = старшая часть
4662
 
4650
 
4663
---------------------- Константы для регистров: ----------------------
4651
---------------------- Константы для регистров: ----------------------
4664
  eax - SF_NETWORK_GET (74)
4652
  eax - SF_NETWORK_GET (74)
4665
   bl - SSF_RX_BYTE_COUNT (9)
4653
   bl - SSF_RX_BYTE_COUNT (9)
4666
======================================================================
4654
======================================================================
4667
======= Функция 74, подфункция 10, Получить статус соединения. =======
4655
======= Функция 74, подфункция 10, Получить статус соединения. =======
4668
======================================================================
4656
======================================================================
4669
Параметры:
4657
Параметры:
4670
  * eax = 74 - номер функции
4658
  * eax = 74 - номер функции
4671
  * bl = 10 - номер подфункции
4659
  * bl = 10 - номер подфункции
4672
  * bh = номер устройства
4660
  * bh = номер устройства
4673
Возвращаемое значение:
4661
Возвращаемое значение:
4674
  * eax = статус соединения, -1 для ошибки
4662
  * eax = статус соединения, -1 для ошибки
4675
 
4663
 
4676
Статусы:
4664
Статусы:
4677
  0 = нет соединения
4665
  0 = нет соединения
4678
  1 = неизвестное соединение
4666
  1 = неизвестное соединение
4679
  4 = 10 Мбит
4667
  4 = 10 Мбит
4680
  8 = 100 Мбит
4668
  8 = 100 Мбит
4681
  12 = 1 Гбит
4669
  12 = 1 Гбит
4682
  10b = флаг полного дуплекса
4670
  10b = флаг полного дуплекса
4683
 
4671
 
4684
---------------------- Константы для регистров: ----------------------
4672
---------------------- Константы для регистров: ----------------------
4685
  eax - SF_NETWORK_GET (74)
4673
  eax - SF_NETWORK_GET (74)
4686
   bl - SSF_LINK_STATUS (10)
4674
   bl - SSF_LINK_STATUS (10)
4687
======================================================================
4675
======================================================================
4688
== Функция 74.11, Получить количество пакетов переданных с ошибкой. ==
4676
== Функция 74.11, Получить количество пакетов переданных с ошибкой. ==
4689
======================================================================
4677
======================================================================
4690
Параметры:
4678
Параметры:
4691
  * eax = 74 - номер функции
4679
  * eax = 74 - номер функции
4692
  * bl = 11 - номер подфункции
4680
  * bl = 11 - номер подфункции
4693
  * bh = номер устройства
4681
  * bh = номер устройства
4694
Возвращаемое значение:
4682
Возвращаемое значение:
4695
  * eax = Количество ошибочных пакетов, переданных с момента запуска 
4683
  * eax = Количество ошибочных пакетов, переданных с момента запуска 
4696
          устройства, -1 при ошибке
4684
          устройства, -1 при ошибке
4697
 
4685
 
4698
---------------------- Константы для регистров: ----------------------
4686
---------------------- Константы для регистров: ----------------------
4699
  eax - SF_NETWORK_GET (74)
4687
  eax - SF_NETWORK_GET (74)
4700
   bl - SSF_TX_PACKET_ERROR_COUNT (11)
4688
   bl - SSF_TX_PACKET_ERROR_COUNT (11)
4701
======================================================================
4689
======================================================================
4702
=== Функция 74.12, Получить число пакетов отброшенных при отправке. ==
4690
=== Функция 74.12, Получить число пакетов отброшенных при отправке. ==
4703
======================================================================
4691
======================================================================
4704
Параметры:
4692
Параметры:
4705
  * eax = 74 - номер функции
4693
  * eax = 74 - номер функции
4706
  * bl = 12 - номер подфункции
4694
  * bl = 12 - номер подфункции
4707
  * bh = номер устройства
4695
  * bh = номер устройства
4708
Возвращаемое значение:
4696
Возвращаемое значение:
4709
  * eax = число отброшенных пакетов с момента запуска устройства,
4697
  * eax = число отброшенных пакетов с момента запуска устройства,
4710
    -1 при ошибке
4698
    -1 при ошибке
4711
 
4699
 
4712
---------------------- Константы для регистров: ----------------------
4700
---------------------- Константы для регистров: ----------------------
4713
  eax - SF_NETWORK_GET (74)
4701
  eax - SF_NETWORK_GET (74)
4714
   bl - SSF_TX_PACKET_DROP_COUNT (12)
4702
   bl - SSF_TX_PACKET_DROP_COUNT (12)
4715
======================================================================
4703
======================================================================
4716
=== Функция 74.13, Получить число пакетов утерянных при отправке. ====
4704
=== Функция 74.13, Получить число пакетов утерянных при отправке. ====
4717
======================================================================
4705
======================================================================
4718
Параметры:
4706
Параметры:
4719
  * eax = 74 - номер функции
4707
  * eax = 74 - номер функции
4720
  * bl = 13 - номер подфункции
4708
  * bl = 13 - номер подфункции
4721
  * bh = номер устройства
4709
  * bh = номер устройства
4722
Возвращаемое значение:
4710
Возвращаемое значение:
4723
  * eax = число утерянных пакетов с момента запуска устройства,
4711
  * eax = число утерянных пакетов с момента запуска устройства,
4724
    -1 при ошибке
4712
    -1 при ошибке
4725
 
4713
 
4726
---------------------- Константы для регистров: ----------------------
4714
---------------------- Константы для регистров: ----------------------
4727
  eax - SF_NETWORK_GET (74)
4715
  eax - SF_NETWORK_GET (74)
4728
   bl - SSF_TX_PACKET_MISS_COUNT (13)
4716
   bl - SSF_TX_PACKET_MISS_COUNT (13)
4729
 
4717
 
4730
======================================================================
4718
======================================================================
4731
==== Функция 74.14, Получить число пакетов полученных с ошибкой. =====
4719
==== Функция 74.14, Получить число пакетов полученных с ошибкой. =====
4732
======================================================================
4720
======================================================================
4733
Параметры:
4721
Параметры:
4734
  * eax = 74 - номер функции
4722
  * eax = 74 - номер функции
4735
  * bl = 14 - номер подфункции
4723
  * bl = 14 - номер подфункции
4736
  * bh = номер устройства
4724
  * bh = номер устройства
4737
Возвращаемое значение:
4725
Возвращаемое значение:
4738
  * eax = число пакетов, полученных с ошибкой с момента запуска 
4726
  * eax = число пакетов, полученных с ошибкой с момента запуска 
4739
    устройства, -1 при ошибке
4727
    устройства, -1 при ошибке
4740
	
4728
	
4741
---------------------- Константы для регистров: ----------------------
4729
---------------------- Константы для регистров: ----------------------
4742
  eax - SF_NETWORK_GET (74)
4730
  eax - SF_NETWORK_GET (74)
4743
   bl - SSF_RX_PACKET_ERROR_COUNT (14)
4731
   bl - SSF_RX_PACKET_ERROR_COUNT (14)
4744
======================================================================
4732
======================================================================
4745
== Функция 74.15, Получить число пакетов отброшенных при получении. ==
4733
== Функция 74.15, Получить число пакетов отброшенных при получении. ==
4746
======================================================================
4734
======================================================================
4747
Параметры:
4735
Параметры:
4748
  * eax = 74 - номер функции
4736
  * eax = 74 - номер функции
4749
  * bl = 15 - номер подфункции
4737
  * bl = 15 - номер подфункции
4750
  * bh = номер устройства
4738
  * bh = номер устройства
4751
Возвращаемое значение:
4739
Возвращаемое значение:
4752
  * eax = число отброшенных пакетов с момента запуска устройства, 
4740
  * eax = число отброшенных пакетов с момента запуска устройства, 
4753
    -1 при ошибке
4741
    -1 при ошибке
4754
 
4742
 
4755
---------------------- Константы для регистров: ----------------------
4743
---------------------- Константы для регистров: ----------------------
4756
  eax - SF_NETWORK_GET (74)
4744
  eax - SF_NETWORK_GET (74)
4757
   bl - SSF_RX_PACKET_DROP_COUNT (12)
4745
   bl - SSF_RX_PACKET_DROP_COUNT (12)
4758
======================================================================
4746
======================================================================
4759
=== Функция 74.16, Получить число пакетов утерянных при получении. ===
4747
=== Функция 74.16, Получить число пакетов утерянных при получении. ===
4760
======================================================================
4748
======================================================================
4761
Параметры:
4749
Параметры:
4762
  * eax = 74 - номер функции
4750
  * eax = 74 - номер функции
4763
  * bl = 16 - номер подфункции
4751
  * bl = 16 - номер подфункции
4764
  * bh = номер устройства
4752
  * bh = номер устройства
4765
Возвращаемое значение:
4753
Возвращаемое значение:
4766
  * eax = число утерянных пакетов с момента запуска устройства,
4754
  * eax = число утерянных пакетов с момента запуска устройства,
4767
    -1 при ошибке
4755
    -1 при ошибке
4768
 
4756
 
4769
---------------------- Константы для регистров: ----------------------
4757
---------------------- Константы для регистров: ----------------------
4770
  eax - SF_NETWORK_GET (74)
4758
  eax - SF_NETWORK_GET (74)
4771
   bl - SSF_RX_PACKET_MISS_COUNT (16)
4759
   bl - SSF_RX_PACKET_MISS_COUNT (16)
4772
======================================================================
4760
======================================================================
4773
============== Функция 75, подфункция 0, Открыть сокет. ==============
4761
============== Функция 75, подфункция 0, Открыть сокет. ==============
4774
======================================================================
4762
======================================================================
4775
Параметры:
4763
Параметры:
4776
  * eax = 75 - номер функции
4764
  * eax = 75 - номер функции
4777
  * bl = 0 - номер подфункции
4765
  * bl = 0 - номер подфункции
4778
  * ecx = домен
4766
  * ecx = домен
4779
  * edx = тип
4767
  * edx = тип
4780
  * esi = протокол
4768
  * esi = протокол
4781
Возвращаемое значение:
4769
Возвращаемое значение:
4782
  * eax = номер сокета, -1 для ошибки
4770
  * eax = номер сокета, -1 для ошибки
4783
  * ebx = код ошибки
4771
  * ebx = код ошибки
4784
 
4772
 
4785
---------------------- Константы для регистров: ----------------------
4773
---------------------- Константы для регистров: ----------------------
4786
  eax - SF_NETWORK_SOCKET (75)
4774
  eax - SF_NETWORK_SOCKET (75)
4787
   bl - SSF_OPEN (0)
4775
   bl - SSF_OPEN (0)
4788
======================================================================
4776
======================================================================
4789
============== Функция 75, подфункция 1, Закрыть сокет. ==============
4777
============== Функция 75, подфункция 1, Закрыть сокет. ==============
4790
======================================================================
4778
======================================================================
4791
Параметры:
4779
Параметры:
4792
  * eax = 75 - номер функции
4780
  * eax = 75 - номер функции
4793
  * bl = 1 - номер подфункции
4781
  * bl = 1 - номер подфункции
4794
  * ecx = номер сокета
4782
  * ecx = номер сокета
4795
Возвращаемое значение:
4783
Возвращаемое значение:
4796
  * eax = -1 для ошибки
4784
  * eax = -1 для ошибки
4797
  * ebx = код ошибки
4785
  * ebx = код ошибки
4798
 
4786
 
4799
---------------------- Константы для регистров: ----------------------
4787
---------------------- Константы для регистров: ----------------------
4800
  eax - SF_NETWORK_SOCKET (75)
4788
  eax - SF_NETWORK_SOCKET (75)
4801
   bl - SSF_CLOSE (1)
4789
   bl - SSF_CLOSE (1)
4802
======================================================================
4790
======================================================================
4803
============= Функция 75, подфункция 2, Bind (Привязка). =============
4791
============= Функция 75, подфункция 2, Bind (Привязка). =============
4804
======================================================================
4792
======================================================================
4805
Параметры:
4793
Параметры:
4806
  * eax = 75 - номер функции
4794
  * eax = 75 - номер функции
4807
  * bl = 2 - номер подфункции
4795
  * bl = 2 - номер подфункции
4808
  * ecx = номер сокета
4796
  * ecx = номер сокета
4809
  * edx = указатель на структуру sockaddr
4797
  * edx = указатель на структуру sockaddr
4810
  * esi = длина структуры sockaddr
4798
  * esi = длина структуры sockaddr
4811
Формат структуры SockAddr:
4799
Формат структуры SockAddr:
4812
  * +0: Word: Family
4800
  * +0: Word: Family
4813
  * +2: 14*Byte: Data
4801
  * +2: 14*Byte: Data
4814
Возвращаемое значение:
4802
Возвращаемое значение:
4815
  * eax = -1 для ошибки
4803
  * eax = -1 для ошибки
4816
  * ebx = код ошибки
4804
  * ebx = код ошибки
4817
 
4805
 
4818
---------------------- Константы для регистров: ----------------------
4806
---------------------- Константы для регистров: ----------------------
4819
  eax - SF_NETWORK_SOCKET (75)
4807
  eax - SF_NETWORK_SOCKET (75)
4820
   bl - SSF_BIND (2)
4808
   bl - SSF_BIND (2)
4821
======================================================================
4809
======================================================================
4822
============ Функция 75, подфункция 3, Listen (Слушать). =============
4810
============ Функция 75, подфункция 3, Listen (Слушать). =============
4823
======================================================================
4811
======================================================================
4824
Параметры:
4812
Параметры:
4825
  * eax = 75 - номер функции
4813
  * eax = 75 - номер функции
4826
  * bl = 3 - номер подфункции
4814
  * bl = 3 - номер подфункции
4827
  * ecx = номер сокета
4815
  * ecx = номер сокета
4828
  * edx = backlog (возвращаемый лог)
4816
  * edx = backlog (возвращаемый лог)
4829
Возвращаемое значение:
4817
Возвращаемое значение:
4830
  * eax = -1 для ошибки
4818
  * eax = -1 для ошибки
4831
  * ebx = код ошибки
4819
  * ebx = код ошибки
4832
 
4820
 
4833
---------------------- Константы для регистров: ----------------------
4821
---------------------- Константы для регистров: ----------------------
4834
  eax - SF_NETWORK_SOCKET (75)
4822
  eax - SF_NETWORK_SOCKET (75)
4835
   bl - SSF_LISTEN (3)
4823
   bl - SSF_LISTEN (3)
4836
======================================================================
4824
======================================================================
4837
========== Функция 75, подфункция 4, Connect (Соединение). ===========
4825
========== Функция 75, подфункция 4, Connect (Соединение). ===========
4838
======================================================================
4826
======================================================================
4839
Параметры:
4827
Параметры:
4840
  * eax = 75 - номер функции
4828
  * eax = 75 - номер функции
4841
  * bl = 4 - номер подфункции
4829
  * bl = 4 - номер подфункции
4842
  * ecx = номер сокета
4830
  * ecx = номер сокета
4843
  * edx = указатель на структуру sockaddr
4831
  * edx = указатель на структуру sockaddr
4844
  * esi = длина структуры sockaddr
4832
  * esi = длина структуры sockaddr
4845
Формат структуры SockAddr:
4833
Формат структуры SockAddr:
4846
  * +0: Word: Family
4834
  * +0: Word: Family
4847
  * +2: 14*Byte: Data
4835
  * +2: 14*Byte: Data
4848
Возвращаемое значение:
4836
Возвращаемое значение:
4849
  * eax = -1 для ошибки
4837
  * eax = -1 для ошибки
4850
  * ebx = код ошибки
4838
  * ebx = код ошибки
4851
 
4839
 
4852
---------------------- Константы для регистров: ----------------------
4840
---------------------- Константы для регистров: ----------------------
4853
  eax - SF_NETWORK_SOCKET (75)
4841
  eax - SF_NETWORK_SOCKET (75)
4854
   bl - SSF_CONNECT (4)
4842
   bl - SSF_CONNECT (4)
4855
======================================================================
4843
======================================================================
4856
=========== Функция 75, подфункция 5, Accept (Соглашение). ===========
4844
=========== Функция 75, подфункция 5, Accept (Соглашение). ===========
4857
======================================================================
4845
======================================================================
4858
Параметры:
4846
Параметры:
4859
  * eax = 75 - номер функции
4847
  * eax = 75 - номер функции
4860
  * bl = 5 - номер подфункции
4848
  * bl = 5 - номер подфункции
4861
  * ecx = номер сокета
4849
  * ecx = номер сокета
4862
  * edx = указатель на структуру sockaddr
4850
  * edx = указатель на структуру sockaddr
4863
  * esi = длина структуры sockaddr
4851
  * esi = длина структуры sockaddr
4864
Формат структуры SockAddr:
4852
Формат структуры SockAddr:
4865
  * +0: Word: Family
4853
  * +0: Word: Family
4866
  * +2: 14*Byte: Data
4854
  * +2: 14*Byte: Data
4867
Возвращаемое значение:
4855
Возвращаемое значение:
4868
  * eax = номер сокета из принятого сокета, -1 для ошибки
4856
  * eax = номер сокета из принятого сокета, -1 для ошибки
4869
  * ebx = код ошибки
4857
  * ebx = код ошибки
4870
 
4858
 
4871
---------------------- Константы для регистров: ----------------------
4859
---------------------- Константы для регистров: ----------------------
4872
  eax - SF_NETWORK_SOCKET (75)
4860
  eax - SF_NETWORK_SOCKET (75)
4873
   bl - SSF_ACCEPT (5)
4861
   bl - SSF_ACCEPT (5)
4874
======================================================================
4862
======================================================================
4875
============= Функция 75, подфункция 6, Send (Послать). ==============
4863
============= Функция 75, подфункция 6, Send (Послать). ==============
4876
======================================================================
4864
======================================================================
4877
Параметры:
4865
Параметры:
4878
  * eax = 75 - номер функции
4866
  * eax = 75 - номер функции
4879
  * bl = 6 - номер подфункции
4867
  * bl = 6 - номер подфункции
4880
  * ecx = номер сокета
4868
  * ecx = номер сокета
4881
  * edx = указатель на буфер
4869
  * edx = указатель на буфер
4882
  * esi = длина буфера
4870
  * esi = длина буфера
4883
  * edi = флаги
4871
  * edi = флаги
4884
Возвращаемое значение:
4872
Возвращаемое значение:
4885
  * eax = количество скопированных байтов, -1 для ошибки
4873
  * eax = количество скопированных байтов, -1 для ошибки
4886
  * ebx = код ошибки
4874
  * ebx = код ошибки
4887
 
4875
 
4888
---------------------- Константы для регистров: ----------------------
4876
---------------------- Константы для регистров: ----------------------
4889
  eax - SF_NETWORK_SOCKET (75)
4877
  eax - SF_NETWORK_SOCKET (75)
4890
   bl - SSF_SEND (6)
4878
   bl - SSF_SEND (6)
4891
======================================================================
4879
======================================================================
4892
============ Функция 75, подфункция 7, Receive (Получить). ===========
4880
============ Функция 75, подфункция 7, Receive (Получить). ===========
4893
======================================================================
4881
======================================================================
4894
Параметры:
4882
Параметры:
4895
  * eax = 75 - номер функции
4883
  * eax = 75 - номер функции
4896
  * bl = 7 - номер подфункции
4884
  * bl = 7 - номер подфункции
4897
  * ecx = номер сокета
4885
  * ecx = номер сокета
4898
  * edx = указатель на буфер
4886
  * edx = указатель на буфер
4899
  * esi = длина буфера
4887
  * esi = длина буфера
4900
  * edi = флаги
4888
  * edi = флаги
4901
Возвращаемое значение:
4889
Возвращаемое значение:
4902
  * eax = количество скопированных байтов, -1 для ошибки
4890
  * eax = количество скопированных байтов, -1 для ошибки
4903
  * ebx = код ошибки
4891
  * ebx = код ошибки
4904
 
4892
 
4905
---------------------- Константы для регистров: ----------------------
4893
---------------------- Константы для регистров: ----------------------
4906
  eax - SF_NETWORK_SOCKET (75)
4894
  eax - SF_NETWORK_SOCKET (75)
4907
   bl - SSF_RECEIVE (7)
4895
   bl - SSF_RECEIVE (7)
4908
======================================================================
4896
======================================================================
4909
=========== Функция 75, подфункция 8, Задать опции сокета. ===========
4897
=========== Функция 75, подфункция 8, Задать опции сокета. ===========
4910
======================================================================
4898
======================================================================
4911
Параметры:
4899
Параметры:
4912
  * eax = 75 - номер функции
4900
  * eax = 75 - номер функции
4913
  * bl = 8 - номер подфункции
4901
  * bl = 8 - номер подфункции
4914
  * ecx = номер сокета
4902
  * ecx = номер сокета
4915
  * edx = указатель на optstruct
4903
  * edx = указатель на optstruct
4916
Возвращаемое значение:
4904
Возвращаемое значение:
4917
  * eax = -1 для ошибки
4905
  * eax = -1 для ошибки
4918
  * ebx = код ошибки
4906
  * ebx = код ошибки
4919
Замечания:
4907
Замечания:
4920
 
4908
 
4921
  Optstruct: dd level
4909
  Optstruct: dd level
4922
             dd optionname
4910
             dd optionname
4923
             dd optlength
4911
             dd optlength
4924
             db options...
4912
             db options...
4925
 
4913
 
4926
---------------------- Константы для регистров: ----------------------
4914
---------------------- Константы для регистров: ----------------------
4927
  eax - SF_NETWORK_SOCKET (75)
4915
  eax - SF_NETWORK_SOCKET (75)
4928
   bl - SSF_SET_OPTIONS (8)
4916
   bl - SSF_SET_OPTIONS (8)
4929
======================================================================
4917
======================================================================
4930
========== Функция 75, подфункция 9, Получить опции сокета. ==========
4918
========== Функция 75, подфункция 9, Получить опции сокета. ==========
4931
======================================================================
4919
======================================================================
4932
Параметры:
4920
Параметры:
4933
  * eax = 75 - номер функции
4921
  * eax = 75 - номер функции
4934
  * bl = 9 - номер подфункции
4922
  * bl = 9 - номер подфункции
4935
  * ecx = номер сокета
4923
  * ecx = номер сокета
4936
  * edx = указатель на optstruct
4924
  * edx = указатель на optstruct
4937
Возвращаемое значение:
4925
Возвращаемое значение:
4938
  * eax = -1 для ошибки
4926
  * eax = -1 для ошибки
4939
  * ebx = код ошибки
4927
  * ebx = код ошибки
4940
Замечания:
4928
Замечания:
4941
 
4929
 
4942
  Optstruct: dd level
4930
  Optstruct: dd level
4943
             dd optionname
4931
             dd optionname
4944
             dd optlength
4932
             dd optlength
4945
             db options...
4933
             db options...
4946
 
4934
 
4947
---------------------- Константы для регистров: ----------------------
4935
---------------------- Константы для регистров: ----------------------
4948
  eax - SF_NETWORK_SOCKET (75)
4936
  eax - SF_NETWORK_SOCKET (75)
4949
   bl - SSF_GET_OPTIONS (9)
4937
   bl - SSF_GET_OPTIONS (9)
4950
======================================================================
4938
======================================================================
4951
========== Функция 75, подфункция 10, Получить парный сокет ==========
4939
========== Функция 75, подфункция 10, Получить парный сокет ==========
4952
======================================================================
4940
======================================================================
4953
Параметры:
4941
Параметры:
4954
  * eax = 75 - номер функции
4942
  * eax = 75 - номер функции
4955
  * bl = 10 - номер подфункции
4943
  * bl = 10 - номер подфункции
4956
Возвращаемое значение:
4944
Возвращаемое значение:
4957
  * eax = номер первого сокета / -1 для ошибки
4945
  * eax = номер первого сокета / -1 для ошибки
4958
  * ebx = номер второго сокета / код ошибки
4946
  * ebx = номер второго сокета / код ошибки
4959
 
4947
 
4960
---------------------- Константы для регистров: ----------------------
4948
---------------------- Константы для регистров: ----------------------
4961
  eax - SF_NETWORK_SOCKET (75)
4949
  eax - SF_NETWORK_SOCKET (75)
4962
   bl - SSF_GET_PAIR (10)
4950
   bl - SSF_GET_PAIR (10)
4963
======================================================================
4951
======================================================================
4964
=============== Функция 76, Сетевые опции и статистика. ==============
4952
=============== Функция 76, Сетевые опции и статистика. ==============
4965
======================================================================
4953
======================================================================
4966
Параметры:
4954
Параметры:
4967
  * eax = 76 - номер функции
4955
  * eax = 76 - номер функции
4968
  * верхняя часть ebx = номер протокола
4956
  * верхняя часть ebx = номер протокола
4969
  * bh = номер устройства
4957
  * bh = номер устройства
4970
  * bl = номер подфункции
4958
  * bl = номер подфункции
4971
 
4959
 
4972
Протоколы и подфункции:
4960
Протоколы и подфункции:
4973
 
4961
 
4974
0 - Ethernet:
4962
0 - Ethernet:
4975
        0 - Read MAC
4963
        0 - Read MAC
4976
 
4964
 
4977
    общие подфункции:
4965
    общие подфункции:
4978
        0 - пакетов послано
4966
        0 - пакетов послано
4979
        1 - пакетов принято
4967
        1 - пакетов принято
4980
 
4968
 
4981
1 - IPv4:
4969
1 - IPv4:
4982
        2 - Read IP
4970
        2 - Read IP
4983
        3 - Write IP
4971
        3 - Write IP
4984
        4 - Read DNS
4972
        4 - Read DNS
4985
        5 - Write DNS
4973
        5 - Write DNS
4986
        6 - Read subnet
4974
        6 - Read subnet
4987
        7 - Write subnet
4975
        7 - Write subnet
4988
        8 - Read gateway
4976
        8 - Read gateway
4989
        9 - Write gateway
4977
        9 - Write gateway
4990
 
4978
 
4991
2 - ICMP:
4979
2 - ICMP:
4992
        3 - enable/disable ICMP echo reply
4980
        3 - enable/disable ICMP echo reply
4993
 
4981
 
4994
3 - UDP
4982
3 - UDP
4995
4 - TCP
4983
4 - TCP
4996
 
4984
 
4997
5 - ARP:
4985
5 - ARP:
4998
        2 - Read # ARP entry's
4986
        2 - Read # ARP entry's
4999
        3 - Read ARP entry
4987
        3 - Read ARP entry
5000
        4 - Add static ARP entry
4988
        4 - Add static ARP entry
5001
        5 - Remove ARP entry (-1 = remove all)
4989
        5 - Remove ARP entry (-1 = remove all)
5002
        6 - Send ARP announce on specified interface
4990
        6 - Send ARP announce on specified interface
5003
        7 - Read # ARP conflicts (IP address conflicts)
4991
        7 - Read # ARP conflicts (IP address conflicts)
5004
 
4992
 
5005
---------------------- Константы для регистров: ----------------------
4993
---------------------- Константы для регистров: ----------------------
5006
  eax - SF_NETWORK_PROTOCOL (76)
4994
  eax - SF_NETWORK_PROTOCOL (76)
5007
======================================================================
4995
======================================================================
5008
============= Функция 77, подфункция 0, Создать фьютекс. =============
4996
============= Функция 77, подфункция 0, Создать фьютекс. =============
5009
======================================================================
4997
======================================================================
5010
Параметры:
4998
Параметры:
5011
  * eax = 77 - номер функции
4999
  * eax = 77 - номер функции
5012
  * ebx = 0 - номер подфункции
5000
  * ebx = 0 - номер подфункции
5013
  * ecx = указатель на контрольное значение фьютекса (dword)
5001
  * ecx = указатель на контрольное значение фьютекса (dword)
5014
Возвращаемое значение:
5002
Возвращаемое значение:
5015
  * eax = дескриптор фьютекса, 0 при ошибке
5003
  * eax = дескриптор фьютекса, 0 при ошибке
5016
 
5004
 
5017
---------------------- Константы для регистров: ----------------------
5005
---------------------- Константы для регистров: ----------------------
5018
  eax - SF_FUTEX (77)
5006
  eax - SF_FUTEX (77)
5019
  ebx - SSF_CREATE (0)
5007
  ebx - SSF_CREATE (0)
5020
======================================================================
5008
======================================================================
5021
============= Функция 77, подфункция 1, Удалить фьютекс. =============
5009
============= Функция 77, подфункция 1, Удалить фьютекс. =============
5022
======================================================================
5010
======================================================================
5023
Параметры:
5011
Параметры:
5024
  * eax = 77 - номер функции
5012
  * eax = 77 - номер функции
5025
  * ebx = 1 - номер подфункции
5013
  * ebx = 1 - номер подфункции
5026
  * ecx = дескриптор фьютекса
5014
  * ecx = дескриптор фьютекса
5027
Возвращаемое значение:
5015
Возвращаемое значение:
5028
  * eax = 0 - успешно, -1 при ошибке
5016
  * eax = 0 - успешно, -1 при ошибке
5029
Замечания:
5017
Замечания:
5030
  * Ядро автоматически удаляет фьютексы при завершении процесса.
5018
  * Ядро автоматически удаляет фьютексы при завершении процесса.
5031
 
5019
 
5032
---------------------- Константы для регистров: ----------------------
5020
---------------------- Константы для регистров: ----------------------
5033
  eax - SF_FUTEX (77)
5021
  eax - SF_FUTEX (77)
5034
  ebx - SSF_DESTROY (1)
5022
  ebx - SSF_DESTROY (1)
5035
======================================================================
5023
======================================================================
5036
================= Функция 77, подфункция 2, Ожидать. =================
5024
================= Функция 77, подфункция 2, Ожидать. =================
5037
======================================================================
5025
======================================================================
5038
Параметры:
5026
Параметры:
5039
  * eax = 77 - номер функции
5027
  * eax = 77 - номер функции
5040
  * ebx = 2 - номер подфункции
5028
  * ebx = 2 - номер подфункции
5041
  * ecx = дескриптор фьютекса
5029
  * ecx = дескриптор фьютекса
5042
  * edx = контрольное значение
5030
  * edx = контрольное значение
5043
  * esi = таймаут в сотых секунды, 0 - ждать бесконечно
5031
  * esi = таймаут в сотых секунды, 0 - ждать бесконечно
5044
Возвращаемое значение:
5032
Возвращаемое значение:
5045
  * eax = 0 - успешно, -1 - таймаут,
5033
  * eax = 0 - успешно, -1 - таймаут,
5046
        -2 - контрольное значение не соответствует
5034
        -2 - контрольное значение не соответствует
5047
 
5035
 
5048
---------------------- Константы для регистров: ----------------------
5036
---------------------- Константы для регистров: ----------------------
5049
  eax - SF_FUTEX (77)
5037
  eax - SF_FUTEX (77)
5050
  ebx - SSF_WAIT (2)
5038
  ebx - SSF_WAIT (2)
5051
======================================================================
5039
======================================================================
5052
================ Функция 77, подфункция 3, Разбудить. ================
5040
================ Функция 77, подфункция 3, Разбудить. ================
5053
======================================================================
5041
======================================================================
5054
Параметры:
5042
Параметры:
5055
  * eax = 77 - номер функции
5043
  * eax = 77 - номер функции
5056
  * ebx = 3 - номер подфункции
5044
  * ebx = 3 - номер подфункции
5057
  * ecx = дескриптор фьютекса
5045
  * ecx = дескриптор фьютекса
5058
  * edx = сколько ожидающих будить (максимум)
5046
  * edx = сколько ожидающих будить (максимум)
5059
Возвращаемое значение:
5047
Возвращаемое значение:
5060
  * eax = количество разбуженых
5048
  * eax = количество разбуженых
5061
 
5049
 
5062
---------------------- Константы для регистров: ----------------------
5050
---------------------- Константы для регистров: ----------------------
5063
  eax - SF_FUTEX (77)
5051
  eax - SF_FUTEX (77)
5064
  ebx - SSF_WAKE (3)
5052
  ebx - SSF_WAKE (3)
5065
======================================================================
5053
======================================================================
5066
======= Функция 77, подфункция 10, Прочитать из файла в буфер. =======
5054
======= Функция 77, подфункция 10, Прочитать из файла в буфер. =======
5067
======================================================================
5055
======================================================================
5068
Параметры:
5056
Параметры:
5069
  * eax = 77 - номер функции
5057
  * eax = 77 - номер функции
5070
  * ebx = 10 - номер подфункции
5058
  * ebx = 10 - номер подфункции
5071
  * ecx = дескриптор файла
5059
  * ecx = дескриптор файла
5072
  * edx = указатель на буфер, куда читать
5060
  * edx = указатель на буфер, куда читать
5073
  * esi = сколько байт прочитать
5061
  * esi = сколько байт прочитать
5074
Возвращаемое значение:
5062
Возвращаемое значение:
5075
  * eax = количество прочитанных байт
5063
  * eax = количество прочитанных байт
5076
 
5064
 
5077
---------------------- Константы для регистров: ----------------------
5065
---------------------- Константы для регистров: ----------------------
5078
  eax - SF_FUTEX (77)
5066
  eax - SF_FUTEX (77)
5079
  ebx - ...
5067
  ebx - ...
5080
======================================================================
5068
======================================================================
5081
======== Функция 77, подфункция 11, Записать из буфера в файл. =======
5069
======== Функция 77, подфункция 11, Записать из буфера в файл. =======
5082
======================================================================
5070
======================================================================
5083
Параметры:
5071
Параметры:
5084
  * eax = 77 - номер функции
5072
  * eax = 77 - номер функции
5085
  * ebx = 11 - номер подфункции
5073
  * ebx = 11 - номер подфункции
5086
  * ecx = дескриптор файла
5074
  * ecx = дескриптор файла
5087
  * edx =  указатель на буфер, откуда брать данные для записи
5075
  * edx =  указатель на буфер, откуда брать данные для записи
5088
  * esi = сколько байт записать
5076
  * esi = сколько байт записать
5089
Возвращаемое значение:
5077
Возвращаемое значение:
5090
  * eax = количество записанных байт
5078
  * eax = количество записанных байт
5091
 
5079
 
5092
---------------------- Константы для регистров: ----------------------
5080
---------------------- Константы для регистров: ----------------------
5093
  eax - SF_FUTEX (77)
5081
  eax - SF_FUTEX (77)
5094
  ebx - ...
5082
  ebx - ...
5095
======================================================================
5083
======================================================================
5096
=========== Функция 77, подфункция 13, Создать новый pipe. ===========
5084
=========== Функция 77, подфункция 13, Создать новый pipe. ===========
5097
======================================================================
5085
======================================================================
5098
Создает новый pipe. В 4 байта по адресу pipefd будет записан
5086
Создает новый pipe. В 4 байта по адресу pipefd будет записан
5099
дескриптор для чтения из канала.
5087
дескриптор для чтения из канала.
5100
В 4 байта по адресу pipefd + 4 будет записан дескриптор для записи в
5088
В 4 байта по адресу pipefd + 4 будет записан дескриптор для записи в
5101
канал.
5089
канал.
5102
Параметры:
5090
Параметры:
5103
  * eax = 77 - номер функции
5091
  * eax = 77 - номер функции
5104
  * ebx = 13 - номер подфункции
5092
  * ebx = 13 - номер подфункции
5105
  * ecx = адрес pipefd
5093
  * ecx = адрес pipefd
5106
  * edx = флаги. На данный момент если поднят O_CLOEXEC (0x40000), то
5094
  * edx = флаги. На данный момент если поднят O_CLOEXEC (0x40000), то
5107
    сисфункция завершится с ошибкой. Поэтому в качестве флагов можно
5095
    сисфункция завершится с ошибкой. Поэтому в качестве флагов можно
5108
    передать просто 0.
5096
    передать просто 0.
5109
Возвращаемое значение:
5097
Возвращаемое значение:
5110
  * eax = 0 если успех, иначе ошибка.
5098
  * eax = 0 если успех, иначе ошибка.
5111
 
5099
 
5112
---------------------- Константы для регистров: ----------------------
5100
---------------------- Константы для регистров: ----------------------
5113
  eax - SF_FUTEX (77)
5101
  eax - SF_FUTEX (77)
5114
  ebx - ...
5102
  ebx - ...
5115
======================================================================
5103
======================================================================
5116
========== Функция -1 - завершить выполнение потока/процесса =========
5104
========== Функция -1 - завершить выполнение потока/процесса =========
5117
======================================================================
5105
======================================================================
5118
Параметры:
5106
Параметры:
5119
  * eax = -1 - номер функции
5107
  * eax = -1 - номер функции
5120
Возвращаемое значение:
5108
Возвращаемое значение:
5121
  * функция не возвращает ни значения, ни управления
5109
  * функция не возвращает ни значения, ни управления
5122
Замечания:
5110
Замечания:
5123
  * Если процесс явно не создавал потоков, то у него есть только
5111
  * Если процесс явно не создавал потоков, то у него есть только
5124
    один поток, завершение которого приводит к завершению процесса.
5112
    один поток, завершение которого приводит к завершению процесса.
5125
  * Если текущий поток - последний в процессе, то его завершение
5113
  * Если текущий поток - последний в процессе, то его завершение
5126
    также приводит к завершению процесса.
5114
    также приводит к завершению процесса.
5127
  * Эта функция завершает текущий поток. Другой поток можно прибить
5115
  * Эта функция завершает текущий поток. Другой поток можно прибить
5128
    вызовом подфункции 2 функции 18.
5116
    вызовом подфункции 2 функции 18.
5129
 
5117
 
5130
---------------------- Константы для регистров: ----------------------
5118
---------------------- Константы для регистров: ----------------------
5131
  eax - SF_TERMINATE_PROCESS (-1)
5119
  eax - SF_TERMINATE_PROCESS (-1)
5132
======================================================================
5120
======================================================================
5133
=== Функция 80 - работа с файловой системой с указанием кодировки. ===
5121
=== Функция 80 - работа с файловой системой с указанием кодировки. ===
5134
======================================================================
5122
======================================================================
5135
Параметры:
5123
Параметры:
5136
  * eax = 80
5124
  * eax = 80
5137
  * ebx = указатель на информационную структуру
5125
  * ebx = указатель на информационную структуру
5138
Возвращаемое значение:
5126
Возвращаемое значение:
5139
  * eax = 0 - успешно; иначе код ошибки файловой системы
5127
  * eax = 0 - успешно; иначе код ошибки файловой системы
5140
  * в зависимости от подфункции может возвращаться значение и
5128
  * в зависимости от подфункции может возвращаться значение и
5141
    в других регистрах
5129
    в других регистрах
5142
Общий формат информационной структуры:
5130
Общий формат информационной структуры:
5143
  * +0: dword: номер подфункции
5131
  * +0: dword: номер подфункции
5144
  * +4: dword: смещение в файле или папке
5132
  * +4: dword: смещение в файле или папке
5145
  * +8: dword: старшая часть смещения или поле флагов
5133
  * +8: dword: старшая часть смещения или поле флагов
5146
  * +12 = +0xC: dword: размер данных
5134
  * +12 = +0xC: dword: размер данных
5147
  * +16 = +0x10: dword: указатель на данные
5135
  * +16 = +0x10: dword: указатель на данные
5148
  * +20 = +0x14: dword: кодировка строки:
5136
  * +20 = +0x14: dword: кодировка строки:
5149
    1 = cp866
5137
    1 = cp866
5150
    2 = UTF-16LE
5138
    2 = UTF-16LE
5151
    3 = UTF-8
5139
    3 = UTF-8
5152
    0 = по умолчанию (поддерживает байт кодировки в начале строки)
5140
    0 = по умолчанию (поддерживает байт кодировки в начале строки)
5153
  * +24 = +0x18: dword: указатель на строку пути (заканчивается нулём)
5141
  * +24 = +0x18: dword: указатель на строку пути (заканчивается нулём)
5154
 
5142
 
5155
В остальном полностью соответствует функции 70.
5143
В остальном полностью соответствует функции 70.
5156
 
5144
 
5157
======================================================================
5145
======================================================================
5158
=========================== Список событий ===========================
5146
=========================== Список событий ===========================
5159
======================================================================
5147
======================================================================
5160
Очередное событие можно получить вызовом одной из функций 10
5148
Очередное событие можно получить вызовом одной из функций 10
5161
(ожидать события), 11 (проверить без ожидания), 23
5149
(ожидать события), 11 (проверить без ожидания), 23
5162
(ожидать в течение заданного времени).
5150
(ожидать в течение заданного времени).
5163
Эти функции возвращают только те события, которые входят в маску,
5151
Эти функции возвращают только те события, которые входят в маску,
5164
устанавливаемую функцией 40. По умолчанию это первые три, чего
5152
устанавливаемую функцией 40. По умолчанию это первые три, чего
5165
вполне достаточно для многих приложений.
5153
вполне достаточно для многих приложений.
5166
Коды событий:
5154
Коды событий:
5167
  * 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)
5155
  * 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)
5168
  * 2 = нажата клавиша на клавиатуре (поступает, только когда окно
5156
  * 2 = нажата клавиша на клавиатуре (поступает, только когда окно
5169
    активно) или нажата "горячая клавиша";
5157
    активно) или нажата "горячая клавиша";
5170
    сбрасывается, когда все клавиши из буфера считаны функцией 2
5158
    сбрасывается, когда все клавиши из буфера считаны функцией 2
5171
  * 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка
5159
  * 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка
5172
    закрытия, созданная неявно функцией 0; кнопка минимизации
5160
    закрытия, созданная неявно функцией 0; кнопка минимизации
5173
    обрабатывается системой и о ней сообщения не приходит;
5161
    обрабатывается системой и о ней сообщения не приходит;
5174
    поступает, только когда окно активно; сбрасывается, когда все
5162
    поступает, только когда окно активно; сбрасывается, когда все
5175
    кнопки из буфера считаны функцией 17)
5163
    кнопки из буфера считаны функцией 17)
5176
  * 4 = зарезервировано (в текущей реализации никогда не приходит даже
5164
  * 4 = зарезервировано (в текущей реализации никогда не приходит даже
5177
    при размаскировке функцией 40)
5165
    при размаскировке функцией 40)
5178
  * 5 = завершилась перерисовка фона рабочего стола
5166
  * 5 = завершилась перерисовка фона рабочего стола
5179
  * 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши
5167
  * 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши
5180
    или перемещение; сбрасывается при прочтении)
5168
    или перемещение; сбрасывается при прочтении)
5181
  * 7 = произошло событие IPC (смотри функцию 60 - Inter Process
5169
  * 7 = произошло событие IPC (смотри функцию 60 - Inter Process
5182
    Communication; сбрасывается при прочтении)
5170
    Communication; сбрасывается при прочтении)
5183
  * 8 = произошло сетевое событие (сбрасывается при прочтении;
5171
  * 8 = произошло сетевое событие (сбрасывается при прочтении;
5184
    смотри работу с сетью)
5172
    смотри работу с сетью)
5185
  * 9 = произошло отладочное событие (сбрасывается при прочтении;
5173
  * 9 = произошло отладочное событие (сбрасывается при прочтении;
5186
    смотри отладочную подсистему)
5174
    смотри отладочную подсистему)
5187
  * 16..31 = произошло событие с соответствующим IRQ
5175
  * 16..31 = произошло событие с соответствующим IRQ
5188
    (16=IRQ0, 31=IRQ15) (сбрасывается при считывании всех данных IRQ)
5176
    (16=IRQ0, 31=IRQ15) (сбрасывается при считывании всех данных IRQ)
5189
 
5177
 
5190
======================================================================
5178
======================================================================
5191
==================== Коды ошибок файловой системы ====================
5179
==================== Коды ошибок файловой системы ====================
5192
======================================================================
5180
======================================================================
5193
  * 0 = успешно
5181
  * 0 = успешно
5194
  * 2 = функция не поддерживается для данной файловой системы
5182
  * 2 = функция не поддерживается для данной файловой системы
5195
  * 3 = неизвестная файловая система
5183
  * 3 = неизвестная файловая система
5196
  * 5 = файл не найден
5184
  * 5 = файл не найден
5197
  * 6 = файл закончился
5185
  * 6 = файл закончился
5198
  * 7 = указатель вне памяти приложения
5186
  * 7 = указатель вне памяти приложения
5199
  * 8 = диск заполнен
5187
  * 8 = диск заполнен
5200
  * 9 = ошибка файловой системы
5188
  * 9 = ошибка файловой системы
5201
  * 10 = доступ запрещён
5189
  * 10 = доступ запрещён
5202
  * 11 = ошибка устройства
5190
  * 11 = ошибка устройства
5203
  * 12 = файловой системе недостаточно оперативной памяти
5191
  * 12 = файловой системе недостаточно оперативной памяти
5204
 
5192
 
5205
При запуске программы возможны также следующие коды ошибок:
5193
При запуске программы возможны также следующие коды ошибок:
5206
  * 30 = 0x1E = недостаточно памяти
5194
  * 30 = 0x1E = недостаточно памяти
5207
  * 31 = 0x1F = файл не является исполнимым
5195
  * 31 = 0x1F = файл не является исполнимым
5208
  * 32 = 0x20 = слишком много процессов
5196
  * 32 = 0x20 = слишком много процессов
5209
>
5197
>
5210
>
5198
>