Subversion Repositories Kolibri OS

Rev

Rev 7107 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6613 leency 1
Компилятор языка программирования Oberon-07/11 для i386
2
		Windows/Linux/KolibriOS.
3
------------------------------------------------------------------------------
4
 
5
	Состав программы
6
 
7
1.	Compiler.kex (KolibriOS) - исполняемый файл компилятора.
8
	Вход - текстовые файлы модулей с расширением ".ob07", кодировка ANSI
9
	или UTF-8 с BOM-сигнатурой.
10
	Выход - исполняемый файл формата PE, ELF или MENUET01/MS COFF.
11
	Параметры:
12
	1) имя главного модуля
13
	2) тип приложения и платформа
14
		"con" - Windows console
15
		"gui" - Windows GUI
16
		"dll" - Windows DLL
17
		"elf" - Linux
18
		"kos" - KolibriOS
19
		"obj" - KolibriOS DLL
7209 akron1 20
		"kem" - KolibriOS с адресом загрузки 0x10000 для возможного
21
			исполнения в эмуляторе
6613 leency 22
	3) размер стэка в мегабайтах, необязательный параметр, по умолчанию -
23
	1 Мб, для ELF игнорируется. Если 2-й параметр = "obj" (KolibriOS DLL),
24
	то 3-й параметр задается шестнадцатиричным числом
25
	(0x00000001 .. 0xffffffff) и определяет версию программы,
26
	по умолчанию - 0x00010000 (v1.0).
27
	Например:
28
		"C:\oberon-07\example.ob07" con 1
29
		"C:\oberon-07\example.ob07" obj 0x00020005 (* v2.5 *)
30
	В случае успешной компиляции, компилятор передает код завершения 0,
31
	иначе 1. При работе компилятора в KolibriOS, код завершения не
32
	передается. Сообщения компилятора выводятся на консоль (Windows,
33
	KolibriOS), в терминал (Linux).
34
2.	Папка Lib - библиотека модулей
35
 
36
------------------------------------------------------------------------------
37
	Отличия от оригинала
38
 
39
1.	Расширен псевдомодуль SYSTEM
40
2.	Разрешен символ "_" в идентификаторах
41
3.	Добавлены системные флаги
42
4.	Оператор CASE реализован в соответствии с синтаксисом и семантикой
43
	данного оператора в языке Oberon (Revision 1.10.90)
44
5.	Расширен набор стандартных процедур
45
6.	Семантика охраны/проверки типа уточнена для нулевого указателя
46
7.	Семантика DIV и MOD уточнена для отрицательных чисел
47
8.	Добавлены однострочные комментарии (начинаются с пары символов "//")
48
9.	Разрешен экспорт переменных типов ARRAY и RECORD (только для чтения)
7107 akron1 49
10.	Разрешено наследование от типа-указателя
50
11.	Добавлены псевдонимы типов (TYPE A = B)
6613 leency 51
 
52
------------------------------------------------------------------------------
53
	Особенности реализации
54
 
55
1.	Основные типы
56
 
57
	  Тип		   Диапазон значений		   Размер, байт
58
 
59
	INTEGER       -2147483648 .. 2147483647 		4
60
	REAL	      1.40E-45 .. 3.34E+38			4
61
	LONGREAL      4.94E-324 .. 1.70E+308			8
62
	CHAR	      символ ASCII (0X .. 0FFX) 		1
63
	BOOLEAN       FALSE, TRUE				1
64
	SET	      множество из целых чисел {0 .. 31}	4
65
 
66
2.	Максимальная длина идентификаторов - 255 символов
67
3.	Максимальная длина строковых констант - 255 символов
68
4.	Максимальная длина строк исходного кода - 511 символов
69
5.	Максимальная размерность открытых массивов - 5
70
6.	Максимальное количество объявленных типов-записей - 2047
71
7.	Процедура NEW заполняет нулями выделенный блок памяти
72
8.	Глобальные и локальные переменные инициализируются нулями
73
9.	В отличие от многих Oberon-реализаций, сборщик мусора и динамическая
74
	модульность отсутствуют
75
 
76
------------------------------------------------------------------------------
77
	Псевдомодуль SYSTEM
78
 
79
  Псевдомодуль SYSTEM содержит низкоуровневые и небезопасные процедуры,
80
ошибки при использовании процедур псевдомодуля SYSTEM могут привести к
81
повреждению данных времени выполнения и аварийному завершению программы.
82
 
83
	PROCEDURE ADR(v: любой тип): INTEGER
84
		v - переменная, процедура или строковая константа;
85
		возвращает адрес v
86
 
87
	PROCEDURE SIZE(T): INTEGER
88
		возвращает размер типа T
89
 
90
	PROCEDURE TYPEID(T): INTEGER
91
		T - тип-запись или тип-указатель,
92
		возвращает номер типа в таблице типов-записей
93
 
94
	PROCEDURE INF(T): T
95
		T - REAL или LONGREAL,
96
		возвращает специальное вещественное значение "бесконечность"
97
 
98
	PROCEDURE GET(a: INTEGER;
7107 akron1 99
		VAR v: любой основной тип, PROCEDURE, POINTER)
6613 leency 100
		v := Память[a]
101
 
102
	PROCEDURE PUT(a: INTEGER; x: любой основной тип, PROCEDURE, POINTER)
103
		Память[a] := x
104
 
105
	PROCEDURE MOVE(Source, Dest, n: INTEGER)
106
		Копирует n байт памяти из Source в Dest,
107
		области Source и Dest не должны перекрываться
108
 
7107 akron1 109
	PROCEDURE COPY(VAR Source: любой тип; VAR Dest: любой тип; n: INTEGER)
110
		Копирует n байт памяти из Source в Dest.
111
		Эквивалентно
112
		SYSTEM.MOVE(SYSTEM.ADR(Source), SYSTEM.ADR(Dest), n)
113
 
6613 leency 114
	PROCEDURE CODE(s: ARRAY OF CHAR)
115
		Вставка машинного кода
116
		s - строковая константа шестнадцатиричных цифр
117
		количество цифр должно быть четным
118
		например: SYSTEM.CODE("B801000000") (* mov eax, 1 *)
119
 
120
  Также в модуле SYSTEM определен тип CARD16 (2 байта). Для типа CARD16 не
121
допускаются никакие явные операции, за исключением присваивания.
122
Преобразования CARD16 -> INTEGER и INTEGER -> CARD16 могут быть реализованы
123
так:
124
 
125
	PROCEDURE Card16ToInt(w: SYSTEM.CARD16): INTEGER;
126
	VAR i: INTEGER;
127
	BEGIN
128
	  SYSTEM.PUT(SYSTEM.ADR(i), w)
129
	  RETURN i
130
	END Card16ToInt;
131
 
132
	PROCEDURE IntToCard16(i: INTEGER): SYSTEM.CARD16;
133
	VAR w: SYSTEM.CARD16;
134
	BEGIN
135
	  SYSTEM.GET(SYSTEM.ADR(i), w)
136
	  RETURN w
137
	END IntToCard16;
138
 
139
  Функции псевдомодуля SYSTEM нельзя использовать в константных выражениях.
140
 
141
------------------------------------------------------------------------------
142
	Системные флаги
143
 
144
  При объявлении процедурных типов и глобальных процедур, после ключевого
145
слова PROCEDURE может быть указан флаг соглашения вызова: [stdcall], [cdecl]
146
или [winapi]. Например:
147
 
148
	PROCEDURE [cdecl] MyProc(x, y, z: INTEGER): INTEGER;
149
 
150
  Если указан флаг [winapi], то принимается соглашение stdcall и
151
процедуру-функцию можно вызвать как собственно процедуру, вне выражения.
152
Флаг [winapi] доступен только для платформы Windows.
153
  При объявлении типов-записей, после ключевого слова RECORD может быть
154
указан флаг [noalign] или [union]. Флаг [noalign] означает отсутствие
155
выравнивания полей записи, а флаг [union] означает, что смещения всех полей
156
записи равны нулю, при этом размер записи равен размеру наибольшего поля.
157
Записи RECORD [union] ... END соответствуют объединениям (union) в языке C.
158
Записи с системными флагами не могут иметь базового типа и не могут быть
159
базовыми типами для других записей.
160
  Для использования системных флагов, требуется импортировать SYSTEM.
161
 
162
------------------------------------------------------------------------------
163
	Оператор CASE
164
 
165
  Синтаксис оператора CASE:
166
 
167
	CaseStatement =
168
		CASE Expression OF Сase {"|" Сase}
169
			[ELSE StatementSequence] END.
170
	Case = [CaseLabelList ":" StatementSequence].
171
	CaseLabelList = CaseLabels {"," CaseLabels}.
172
	CaseLabels = ConstExpression [".." ConstExpression].
173
 
174
  Например:
175
 
176
	CASE x OF
177
	|-1:	DoSomething1
178
	| 1:	DoSomething2
179
	| 0:	DoSomething3
180
	ELSE
181
		DoSomething4
182
	END
183
 
184
  В метках вариантов можно использовать константные выражения, ветка ELSE
185
необязательна. Если не выполнен ни один вариант и ELSE отсутствует, то
186
программа прерывается с ошибкой времени выполнения.
187
 
188
------------------------------------------------------------------------------
189
	Проверка и охрана типа нулевого указателя
190
 
191
  Оригинальное сообщение о языке не определяет поведение программы при
192
выполнении охраны p(T) и проверки типа p IS T при p = NIL. Во многих
193
Oberon-реализациях выполнение такой операции приводит к ошибке времени
194
выполнения. В данной реализации охрана типа нулевого указателя не приводит к
195
ошибке, а проверка типа дает результат FALSE. В ряде случаев это позволяет
196
значительно сократить частоту применения охраны типа.
197
 
198
------------------------------------------------------------------------------
199
	Дополнительные стандартные процедуры
200
 
201
	DISPOSE(VAR v: любой_указатель)
202
		Освобождает память, выделенную процедурой NEW для
203
		динамической переменной v^, и присваивает переменной v
204
		значение NIL.
205
 
206
	LSR(x, n: INTEGER): INTEGER
207
		Логический сдвиг x на n бит вправо.
208
 
7107 akron1 209
	MIN(a, b: INTEGER): INTEGER
210
		Минимум из двух значений.
211
 
212
	MAX(a, b: INTEGER): INTEGER
213
		Максимум из двух значений.
214
 
6613 leency 215
	BITS(x: INTEGER): SET
216
		Интерпретирует x как значение типа SET.
217
		Выполняется на этапе компиляции.
218
 
219
	LENGTH(s: ARRAY OF CHAR): INTEGER
220
		Длина 0X-завершенной строки s, без учета символа 0X.
221
		Если символ 0X отсутствует, функция возвращает длину
222
		массива s.
223
 
224
------------------------------------------------------------------------------
225
	DIV и MOD
226
 
227
	 x	   y	  x DIV y   x MOD y
228
 
229
	 5	   3	     1	       2
230
	-5	   3	    -2	       1
231
	 5	  -3	    -2	      -1
232
	-5	  -3	     1	      -2
233
 
234
------------------------------------------------------------------------------
235
	Скрытые параметры процедур
236
 
237
  Некоторые процедуры могут иметь скрытые параметры, они отсутствуют в списке
238
формальных параметров, но учитываются компилятором при трансляции вызовов.
239
Это возможно в следующих случаях:
240
 
241
1.	Процедура имеет формальный параметр открытый массив:
242
		PROCEDURE Proc(x: ARRAY OF ARRAY OF LONGREAL);
243
	Вызов транслируется так:
244
		Proc(SYSTEM.ADR(x), LEN(x), LEN(x[0])
245
2.	Процедура имеет формальный параметр-переменную типа RECORD:
246
		PROCEDURE Proc(VAR x: Rec);
247
	Вызов транслируется так:
248
		Proc(SYSTEM.TYPEID(Rec), SYSTEM.ADR(x))
249
3.	Процедура является вложенной, глубина вложения k,
250
	для глобальных процедур k = 0:
251
		PROCEDURE Proc(p1, ..., pn);
252
	Вызов транслируется так:
253
		Proc(base(k - 1), base(k - 2), ..., base(0), p1, ..., pn),
254
	где base(m) - адрес базы кадра стэка охватывающей процедуры глубины
255
	вложения m (используется для доступа к локальным переменным
256
	охватывающей процедуры)
257
 
258
------------------------------------------------------------------------------
259
	Модуль RTL
260
 
261
  Все программы неявно используют модуль RTL. Компилятор транслирует
262
некоторые операции (проверка и охрана типа, сравнение строк, сообщения об
263
ошибках времени выполнения и др.) как вызовы процедур этого модуля. Не
264
следует явно вызывать эти процедуры, за исключением процедуры SetClose:
265
 
266
	PROCEDURE SetClose(proc: PROC), где TYPE PROC = PROCEDURE
267
 
268
SetClose назначает процедуру proc (без параметров) вызываемой при выгрузке
269
dll-библиотеки (Windows), если приложение компилируется как Windows DLL. Для
270
прочих типов приложений и платформ вызов процедуры SetClose не влияет на
271
поведение программы.
272
  Сообщения об ошибках времени выполнения выводятся в диалоговых окнах
273
(Windows), в терминал (Linux), на доску отладки (KolibriOS).
274
 
275
------------------------------------------------------------------------------
276
	Модуль API
277
 
278
  Существуют три реализации модуля API: для Windows, Linux и KolibriOS. Как и
279
модуль RTL, модуль API не предназначен для прямого использования. Он
280
обеспечивает кроссплатформенность компилятора.
281
 
282
------------------------------------------------------------------------------
283
	Генерация исполняемых файлов DLL
284
 
285
  Разрешается экспортировать только процедуры. Для этого, процедура должна
286
находиться в главном модуле программы, и ее имя должно быть отмечено символом
287
экспорта ("*"). KolibriOS DLL всегда экспортируют идентификаторы "version"
288
(версия программы) и "lib_init" - адрес процедуры инициализации DLL:
289
 
290
	PROCEDURE [stdcall] lib_init(): INTEGER
291
 
292
Эта процедура должна быть вызвана перед использованием DLL.
293
Процедура всегда возвращает 1.
294
  В настоящее время генерация DLL для Linux не реализована.
295
 
296
==============================================================================
297
==============================================================================
298
 
299
	Библиотека (KolibriOS)
300
 
301
------------------------------------------------------------------------------
302
MODULE Out - консольный вывод
303
 
304
	PROCEDURE Open
305
		формально открывает консольный вывод
306
 
307
	PROCEDURE Int(x, width: INTEGER)
308
		вывод целого числа x;
309
		width - количество знакомест, используемых для вывода
310
 
311
	PROCEDURE Real(x: LONGREAL; width: INTEGER)
312
		вывод вещественного числа x в плавающем формате;
313
		width - количество знакомест, используемых для вывода
314
 
315
	PROCEDURE Char(x: CHAR)
316
		вывод символа x
317
 
318
	PROCEDURE FixReal(x: LONGREAL; width, p: INTEGER)
319
		вывод вещественного числа x в фиксированном формате;
320
		width - количество знакомест, используемых для вывода;
321
		p - количество знаков после десятичной точки
322
 
323
	PROCEDURE Ln
324
		переход на следующую строку
325
 
326
	PROCEDURE String(s: ARRAY OF CHAR)
327
		вывод строки s
328
 
329
------------------------------------------------------------------------------
330
MODULE In - консольный ввод
331
 
332
	VAR Done: BOOLEAN
333
		принимает значение TRUE в случае успешного выполнения
334
		операции ввода, иначе FALSE
335
 
336
	PROCEDURE Open
337
		формально открывает консольный ввод,
338
		также присваивает переменной Done значение TRUE
339
 
340
	PROCEDURE Int(VAR x: INTEGER)
341
		ввод числа типа INTEGER
342
 
343
	PROCEDURE Char(VAR x: CHAR)
344
		ввод символа
345
 
346
	PROCEDURE Real(VAR x: REAL)
347
		ввод числа типа REAL
348
 
349
	PROCEDURE LongReal(VAR x: LONGREAL)
350
		ввод числа типа LONGREAL
351
 
352
	PROCEDURE String(VAR s: ARRAY OF CHAR)
353
		ввод строки
354
 
355
	PROCEDURE Ln
356
		ожидание нажатия ENTER
357
 
358
------------------------------------------------------------------------------
359
MODULE Console - дополнительные процедуры консольного вывода
360
 
361
	CONST
362
 
363
	Следующие константы определяют цвет консольного вывода
364
 
365
		Black = 0      Blue = 1 	  Green = 2
366
		Cyan = 3       Red = 4		  Magenta = 5
367
		Brown = 6      LightGray = 7	  DarkGray = 8
368
		LightBlue = 9  LightGreen = 10	  LightCyan = 11
369
		LightRed = 12  LightMagenta = 13  Yellow = 14
370
		White = 15
371
 
372
	PROCEDURE Cls
373
		очистка окна консоли
374
 
375
	PROCEDURE SetColor(FColor, BColor: INTEGER)
376
		установка цвета консольного вывода: FColor - цвет текста,
377
		BColor - цвет фона, возможные значения - вышеперечисленные
378
		константы
379
 
380
	PROCEDURE SetCursor(x, y: INTEGER)
381
		установка курсора консоли в позицию (x, y)
382
 
383
	PROCEDURE GetCursor(VAR x, y: INTEGER)
384
		записывает в параметры текущие координаты курсора консоли
385
 
386
	PROCEDURE GetCursorX(): INTEGER
387
		возвращает текущую x-координату курсора консоли
388
 
389
	PROCEDURE GetCursorY(): INTEGER
390
		возвращает текущую y-координату курсора консоли
391
 
392
------------------------------------------------------------------------------
393
MODULE ConsoleLib - обертка библиотеки console.obj
394
 
395
------------------------------------------------------------------------------
396
MODULE Math - математические функции
397
 
398
	CONST
399
 
400
		pi = 3.141592653589793D+00
401
		e  = 2.718281828459045D+00
402
 
403
	VAR
404
 
405
		Inf, nInf: LONGREAL
406
			положительная и отрицательная бесконечность
407
 
408
	PROCEDURE IsNan(x: LONGREAL): BOOLEAN
409
		возвращает TRUE, если x - не число
410
 
411
	PROCEDURE IsInf(x: LONGREAL): BOOLEAN
412
		возвращает TRUE, если x - бесконечность
413
 
414
	PROCEDURE sqrt(x: LONGREAL): LONGREAL
415
		квадратный корень x
416
 
417
	PROCEDURE exp(x: LONGREAL): LONGREAL
418
		экспонента x
419
 
420
	PROCEDURE ln(x: LONGREAL): LONGREAL
421
		натуральный логарифм x
422
 
423
	PROCEDURE sin(x: LONGREAL): LONGREAL
424
		синус x
425
 
426
	PROCEDURE cos(x: LONGREAL): LONGREAL
427
		косинус x
428
 
429
	PROCEDURE tan(x: LONGREAL): LONGREAL
430
		тангенс x
431
 
432
	PROCEDURE arcsin(x: LONGREAL): LONGREAL
433
		арксинус x
434
 
435
	PROCEDURE arccos(x: LONGREAL): LONGREAL
436
		арккосинус x
437
 
438
	PROCEDURE arctan(x: LONGREAL): LONGREAL
439
		арктангенс x
440
 
441
	PROCEDURE arctan2(y, x: LONGREAL): LONGREAL
442
		арктангенс y/x
443
 
444
	PROCEDURE power(base, exponent: LONGREAL): LONGREAL
445
		возведение числа base в степень exponent
446
 
447
	PROCEDURE log(base, x: LONGREAL): LONGREAL
448
		логарифм x по основанию base
449
 
450
	PROCEDURE sinh(x: LONGREAL): LONGREAL
451
		гиперболический синус x
452
 
453
	PROCEDURE cosh(x: LONGREAL): LONGREAL
454
		гиперболический косинус x
455
 
456
	PROCEDURE tanh(x: LONGREAL): LONGREAL
457
		гиперболический тангенс x
458
 
459
	PROCEDURE arcsinh(x: LONGREAL): LONGREAL
460
		обратный гиперболический синус x
461
 
462
	PROCEDURE arccosh(x: LONGREAL): LONGREAL
463
		обратный гиперболический косинус x
464
 
465
	PROCEDURE arctanh(x: LONGREAL): LONGREAL
466
		обратный гиперболический тангенс x
467
 
468
	PROCEDURE round(x: LONGREAL): LONGREAL
469
		округление x до ближайшего целого
470
 
471
	PROCEDURE frac(x: LONGREAL): LONGREAL;
472
		дробная часть числа x
473
 
474
	PROCEDURE floor(x: LONGREAL): LONGREAL
475
		наибольшее целое число (представление как LONGREAL),
476
		не больше x: floor(1.2) = 1.0
477
 
478
	PROCEDURE ceil(x: LONGREAL): LONGREAL
479
		наименьшее целое число (представление как LONGREAL),
480
		не меньше x: ceil(1.2) = 2.0
481
 
482
	PROCEDURE sgn(x: LONGREAL): INTEGER
483
		если x > 0 возвращает 1
484
		если x < 0 возвращает -1
485
		если x = 0 возвращает 0
486
 
487
------------------------------------------------------------------------------
488
MODULE Debug - вывод на доску отладки
489
	Интерфейс как модуль Out
490
 
491
	PROCEDURE Open
492
		открывает доску отладки
493
 
494
------------------------------------------------------------------------------
495
MODULE File - работа с файловой системой
496
 
497
	TYPE
498
 
499
		FNAME = ARRAY 520 OF CHAR
500
 
501
		FS = POINTER TO rFS
502
 
503
		rFS = RECORD (* информационная структура файла *)
504
			subfunc, pos, hpos, bytes, buffer: INTEGER;
505
			name: FNAME
506
		END
507
 
508
		FD = POINTER TO rFD
509
 
510
		rFD = RECORD (* структура блока данных входа каталога *)
511
			attr: INTEGER;
512
			ntyp: CHAR;
513
			reserved: ARRAY 3 OF CHAR;
514
			time_create, date_create,
515
			time_access, date_access,
516
			time_modif,  date_modif,
517
			size, hsize: INTEGER;
518
			name: FNAME
519
		END
520
 
521
	CONST
522
 
523
		SEEK_BEG = 0
524
		SEEK_CUR = 1
525
		SEEK_END = 2
526
 
527
	PROCEDURE Load(FName: ARRAY OF CHAR; VAR size: INTEGER): INTEGER;
528
		Загружает в память файл с именем FName, записывает в параметр
529
		size размер файла, возвращает адрес загруженного файла
530
		или 0 (ошибка). При необходимости, распаковывает
531
		файл (kunpack).
532
 
533
	PROCEDURE GetFileInfo(FName: ARRAY OF CHAR; VAR Info: rFD): BOOLEAN
534
		Записывает структуру блока данных входа каталога для файла
535
		или папки с именем FName в параметр Info.
536
		При ошибке возвращает FALSE.
537
 
538
	PROCEDURE Exists(FName: ARRAY OF CHAR): BOOLEAN
539
		возвращает TRUE, если файл с именем FName существует
540
 
541
	PROCEDURE Close(VAR F: FS)
542
		освобождает память, выделенную для информационной структуры
543
		файла F и присваивает F значение NIL
544
 
545
	PROCEDURE Open(FName: ARRAY OF CHAR): FS
546
		возвращает указатель на информационную структуру файла с
547
		именем FName, при ошибке возвращает NIL
548
 
549
	PROCEDURE Delete(FName: ARRAY OF CHAR): BOOLEAN
550
		удаляет файл с именем FName, при ошибке возвращает FALSE
551
 
552
	PROCEDURE Seek(F: FS; Offset, Origin: INTEGER): INTEGER
553
		устанавливает позицию чтения-записи файла F на Offset,
554
		относительно Origin = (SEEK_BEG - начало файла,
555
		SEEK_CUR - текущая позиция, SEEK_END - конец файла),
556
		возвращает позицию относительно начала файла, например:
557
			Seek(F, 0, SEEK_END)
558
		устанавливает позицию на конец файла и возвращает длину
559
		файла; при ошибке возвращает -1
560
 
561
	PROCEDURE Read(F: FS; Buffer, Count: INTEGER): INTEGER
562
		Читает данные из файла в память. F - указатель на
563
		информационную структуру файла, Buffer - адрес области
564
		памяти, Count - количество байт, которое требуется прочитать
565
		из файла; возвращает количество байт, которое было прочитано
566
		и соответствующим образом изменяет позицию чтения/записи в
567
		информационной структуре F.
568
 
569
	PROCEDURE Write(F: FS; Buffer, Count: INTEGER): INTEGER
570
		Записывает данные из памяти в файл. F - указатель на
571
		информационную структуру файла, Buffer - адрес области
572
		памяти, Count - количество байт, которое требуется записать
573
		в файл; возвращает количество байт, которое было записано и
574
		соответствующим образом изменяет позицию чтения/записи в
575
		информационной структуре F.
576
 
577
	PROCEDURE Create(FName: ARRAY OF CHAR): FS
578
		создает новый файл с именем FName (полное имя), возвращает
579
		указатель на информационную структуру файла,
580
		при ошибке возвращает NIL
581
 
582
	PROCEDURE CreateDir(DirName: ARRAY OF CHAR): BOOLEAN
583
		создает папку с именем DirName, все промежуточные папки
584
		должны существовать, при ошибке возвращает FALSE
585
 
586
	PROCEDURE DeleteDir(DirName: ARRAY OF CHAR): BOOLEAN
587
		удаляет пустую папку с именем DirName,
588
		при ошибке возвращает FALSE
589
 
590
	PROCEDURE DirExists(DirName: ARRAY OF CHAR): BOOLEAN
591
		возвращает TRUE, если папка с именем DirName существует
592
 
593
------------------------------------------------------------------------------
594
MODULE Read - чтение основных типов данных из файла F
595
 
596
	Процедуры возвращают TRUE в случае успешной операции чтения и
597
	соответствующим образом изменяют позицию чтения/записи в
598
	информационной структуре F
599
 
600
	PROCEDURE Char(F: File.FS; VAR x: CHAR): BOOLEAN
601
 
602
	PROCEDURE Int(F: File.FS; VAR x: INTEGER): BOOLEAN
603
 
604
	PROCEDURE Real(F: File.FS; VAR x: REAL): BOOLEAN
605
 
606
	PROCEDURE LongReal(F: File.FS; VAR x: LONGREAL): BOOLEAN
607
 
608
	PROCEDURE Boolean(F: File.FS; VAR x: BOOLEAN): BOOLEAN
609
 
610
	PROCEDURE Set(F: File.FS; VAR x: SET): BOOLEAN
611
 
612
	PROCEDURE Card16(F: File.FS; VAR x: SYSTEM.CARD16): BOOLEAN
613
 
614
------------------------------------------------------------------------------
615
MODULE Write - запись основных типов данных в файл F
616
 
617
	Процедуры возвращают TRUE в случае успешной операции записи и
618
	соответствующим образом изменяют позицию чтения/записи в
619
	информационной структуре F
620
 
621
	PROCEDURE Char(F: File.FS; x: CHAR): BOOLEAN
622
 
623
	PROCEDURE Int(F: File.FS; x: INTEGER): BOOLEAN
624
 
625
	PROCEDURE Real(F: File.FS; x: REAL): BOOLEAN
626
 
627
	PROCEDURE LongReal(F: File.FS; x: LONGREAL): BOOLEAN
628
 
629
	PROCEDURE Boolean(F: File.FS; x: BOOLEAN): BOOLEAN
630
 
631
	PROCEDURE Set(F: File.FS; x: SET): BOOLEAN
632
 
633
	PROCEDURE Card16(F: File.FS; x: SYSTEM.CARD16): BOOLEAN
634
 
635
------------------------------------------------------------------------------
636
MODULE DateTime - дата, время
637
 
638
	CONST ERR = -7.0D5
639
 
640
	PROCEDURE Now(VAR Year, Month, Day, Hour, Min, Sec: INTEGER)
641
		записывает в параметры компоненты текущей системной даты и
642
		времени
643
 
644
	PROCEDURE Encode(Year, Month, Day, Hour, Min, Sec: INTEGER): LONGREAL
645
		возвращает дату, полученную из компонентов
646
		Year, Month, Day, Hour, Min, Sec;
647
		при ошибке возвращает константу ERR = -7.0D5
648
 
649
	PROCEDURE Decode(Date: LONGREAL; VAR Year, Month, Day,
650
				Hour, Min, Sec: INTEGER): BOOLEAN
651
		извлекает компоненты
652
		Year, Month, Day, Hour, Min, Sec из даты Date;
653
		при ошибке возвращает FALSE
654
 
655
------------------------------------------------------------------------------
656
MODULE Args - параметры программы
657
 
658
	VAR argc: INTEGER
659
		количество параметров программы, включая имя
660
		исполняемого файла
661
 
662
	PROCEDURE GetArg(n: INTEGER; VAR s: ARRAY OF CHAR)
663
		записывает в строку s n-й параметр программы,
664
		нумерация параметров от 0 до argc - 1,
665
		нулевой параметр -- имя исполняемого файла
666
 
667
------------------------------------------------------------------------------
668
MODULE KOSAPI
669
 
670
	PROCEDURE sysfunc1(arg1: INTEGER): INTEGER
671
	PROCEDURE sysfunc2(arg1, arg2: INTEGER): INTEGER
672
	...
673
	PROCEDURE sysfunc7(arg1, arg2, ..., arg7: INTEGER): INTEGER
674
		Обертки для функций API ядра KolibriOS.
675
		arg1 .. arg7 соответствуют регистрам
676
			eax, ebx, ecx, edx, esi, edi, ebp;
677
		возвращают значение регистра eax после системного вызова.
678
 
679
	PROCEDURE sysfunc22(arg1, arg2: INTEGER; VAR res2: INTEGER): INTEGER
680
		Обертка для функций API ядра KolibriOS.
681
		arg1 - регистр eax, arg2 - регистр ebx,
682
		res2 - значение регистра ebx после системного вызова;
683
		возвращает значение регистра eax после системного вызова.
684
 
685
	PROCEDURE malloc(size: INTEGER): INTEGER
686
		Выделяет блок памяти.
687
		size - размер блока в байтах,
688
		возвращает адрес выделенного блока
689
 
690
	PROCEDURE free(ptr: INTEGER): INTEGER
691
		Освобождает ранее выделенный блок памяти с адресом ptr,
692
		возвращает 0
693
 
694
	PROCEDURE realloc(ptr, size: INTEGER): INTEGER
695
		Перераспределяет блок памяти,
696
		ptr - адрес ранее выделенного блока,
697
		size - новый размер,
698
		возвращает указатель на перераспределенный блок,
699
 
700
 
701
	PROCEDURE GetCommandLine(): INTEGER
702
		Возвращает адрес строки параметров
703
 
704
	PROCEDURE GetName(): INTEGER
705
		Возвращает адрес строки с именем программы
706
 
707
	PROCEDURE LoadLib(name: ARRAY OF CHAR): INTEGER
708
		Загружает DLL с полным именем name. Возвращает адрес таблицы
709
		экспорта. При ошибке возвращает 0.
710
 
711
	PROCEDURE GetProcAdr(name: ARRAY OF CHAR; lib: INTEGER): INTEGER
712
		name - имя процедуры
713
		lib - адрес таблицы экспорта DLL
714
		Возвращает адрес процедуры. При ошибке возвращает 0.
715
 
716
------------------------------------------------------------------------------
717
MODULE ColorDlg - работа с диалогом "Color Dialog"
718
 
719
	TYPE
720
 
721
		Dialog = POINTER TO RECORD (* структура диалога *)
722
		    status: INTEGER   (* состояние диалога:
723
 
724
					 1 - пользователь нажал OK
725
					 2 - диалог открыт	     *)
726
 
727
		    color:  INTEGER   (* выбранный цвет *)
728
		END
729
 
730
	PROCEDURE Create(draw_window: DRAW_WINDOW): Dialog
731
		создать диалог
732
		draw_window - процедура перерисовки основного окна
733
		(TYPE DRAW_WINDOW = PROCEDURE);
734
		процедура возвращает указатель на структуру диалога
735
 
736
	PROCEDURE Show(cd: Dialog)
737
		показать диалог
738
		cd - указатель на структуру диалога, который был создан ранее
739
		процедурой Create
740
 
741
	PROCEDURE Destroy(VAR cd: Dialog)
742
		уничтожить диалог
743
		cd - указатель на структуру диалога
744
 
745
------------------------------------------------------------------------------
746
MODULE OpenDlg - работа с диалогом "Open Dialog"
747
 
748
	TYPE
749
 
750
		Dialog = POINTER TO RECORD (* структура диалога *)
751
		    status:   INTEGER  (* состояние диалога:
752
 
753
					  1 - пользователь нажал OK
754
					  2 - диалог открыт	      *)
755
 
756
		    FileName: ARRAY 4096 OF CHAR (* имя выбранного файла *)
757
		    FilePath: ARRAY 4096 OF CHAR (* полное имя выбранного
758
						    файла		 *)
759
		END
760
 
761
	PROCEDURE Create(draw_window: DRAW_WINDOW; type: INTEGER; def_path,
762
			filter: ARRAY OF CHAR): Dialog
763
		создать диалог
764
		draw_window - процедура перерисовки основного окна
765
			(TYPE DRAW_WINDOW = PROCEDURE)
766
		type -	тип диалога
767
 
768
			1 - сохранить
769
			2 - выбрать папку
770
		def_path - путь по умолчанию, папка def_path будет открыта
771
			при первом запуске диалога
772
		filter - в строке записано перечисление расширений файлов,
773
			которые будут показаны в диалоговом окне, расширения
774
			разделяются символом "|", например: "ASM|TXT|INI"
775
		процедура возвращает указатель на структуру диалога
776
 
777
	PROCEDURE Show(od: Dialog; Width, Height: INTEGER)
778
		показать диалог
779
		od - указатель на структуру диалога, который был создан ранее
780
		     процедурой Create
781
		Width и Height - ширина и высота диалогового окна
782
 
783
	PROCEDURE Destroy(VAR od: Dialog)
784
		уничтожить диалог
785
		od - указатель на структуру диалога
786
 
787
------------------------------------------------------------------------------
788
MODULE kfonts - работа с kf-шрифтами
789
 
790
	CONST
791
 
792
		bold		=   1
793
		italic		=   2
794
		underline	=   4
795
		strike_through	=   8
796
		smoothing	=  16
797
		bpp32		=  32
798
 
799
	TYPE
800
 
801
		TFont = POINTER TO TFont_desc (* указатель на шрифт *)
802
 
803
	PROCEDURE LoadFont(file_name: ARRAY OF CHAR): TFont
804
		загрузить шрифт из файла
805
		file_name   имя kf-файла
806
		рез-т:	    указатель на шрифт/NIL (ошибка)
807
 
808
	PROCEDURE SetSize(Font: TFont; font_size: INTEGER): BOOLEAN
809
		установить размер шрифта
810
		Font	    указатель на шрифт
811
		font_size   размер шрифта
812
		рез-т:	    TRUE/FALSE (ошибка)
813
 
814
	PROCEDURE Enabled(Font: TFont; font_size: INTEGER): BOOLEAN
815
		проверить, есть ли шрифт, заданного размера
816
		Font	    указатель на шрифт
817
		font_size   размер шрифта
818
		рез-т:	    TRUE/FALSE (шрифта нет)
819
 
820
	PROCEDURE Destroy(VAR Font: TFont)
821
		выгрузить шрифт, освободить динамическую память
822
		Font	    указатель на шрифт
823
		Присваивает переменной Font значение NIL
824
 
825
	PROCEDURE TextHeight(Font: TFont): INTEGER
826
		получить высоту строки текста
827
		Font	    указатель на шрифт
828
		рез-т:	    высота строки текста в пикселях
829
 
830
	PROCEDURE TextWidth(Font: TFont;
831
		    str, length, params: INTEGER): INTEGER
832
		получить ширину строки текста
833
		Font	    указатель на шрифт
834
		str	    адрес строки текста в кодировке Win-1251
835
		length	    количество символов в строке или -1, если строка
836
			    завершается нулем
837
		params	    параметры-флаги см. ниже
838
		рез-т:	    ширина строки текста в пикселях
839
 
840
	PROCEDURE TextOut(Font: TFont;
841
		    canvas, x, y, str, length, color, params: INTEGER)
842
		вывести текст в буфер
843
		для вывода буфера в окно, использовать ф.65 или
844
		ф.7 (если буфер 24-битный)
845
		Font	    указатель на шрифт
846
		canvas	    адрес графического буфера
847
			    структура буфера:
848
			      Xsize	  dd
849
			      Ysize	  dd
850
			      picture	  rb  Xsize * Ysize * 4 (32 бита)
851
					      или Xsize * Ysize * 3 (24 бита)
852
		x, y	    координаты текста относительно левого верхнего
853
			    угла буфера
854
		str	    адрес строки текста в кодировке Win-1251
855
		length	    количество символов в строке или -1, если строка
856
			    завершается нулем
857
		color	    цвет текста 0x00RRGGBB
858
		params	    параметры-флаги:
859
			       1   жирный
860
			       2   курсив
861
			       4   подчеркнутый
862
			       8   перечеркнутый
863
			      16   применить сглаживание
864
			      32   вывод в 32-битный буфер
865
			    возможно использование флагов в любых сочетаниях
866
------------------------------------------------------------------------------
867
MODULE RasterWorks - обертка библиотеки Rasterworks.obj
868
------------------------------------------------------------------------------
869
MODULE libimg - обертка библиотеки libimg.obj
7107 akron1 870
------------------------------------------------------------------------------
871
MODULE NetDevices - обертка для ф.74 (работа с сетевыми устройствами)
6613 leency 872
------------------------------------------------------------------------------