Subversion Repositories Kolibri OS

Rev

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