mirror of
https://github.com/AntKrotov/oberon-07-compiler.git
synced 2026-10-05 09:45:47 +00:00
Add files via upload
This commit is contained in:
1 parent
af884a94db
commit
ed80828452
5 files changed
+1365
No files matched your search
+353
@@ -0,0 +1,353 @@
|
|||||||
|
Компилятор языка программирования Oberon-07/16 для i386
|
||||||
|
Windows/KolibriOS.
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Параметры командной строки
|
||||||
|
|
||||||
|
Compiler.exe (Windows), Compiler.kex (KolibriOS) - исполняемый файл
|
||||||
|
компилятора.
|
||||||
|
Вход - текстовые файлы модулей с расширением ".ob07", кодировка ANSI или
|
||||||
|
UTF-8 с BOM-сигнатурой.
|
||||||
|
Выход - листинг программы на языке ассемблера fasm.
|
||||||
|
Параметры:
|
||||||
|
1) имя главного модуля
|
||||||
|
2) имя результирующего файла
|
||||||
|
3) тип приложения и платформа
|
||||||
|
"con" - Windows console
|
||||||
|
"gui" - Windows GUI
|
||||||
|
"dll" - Windows DLL
|
||||||
|
"kos" - KolibriOS
|
||||||
|
"obj" - KolibriOS DLL
|
||||||
|
4) размер стэка в мегабайтах, необязательный параметр, по умолчанию - 1 Мб.
|
||||||
|
|
||||||
|
Если 3-й параметр = "obj" (KolibriOS DLL), то 4-й параметр задается в
|
||||||
|
формате x.y и определяет версию программы, по умолчанию - 1.0 (v1.0).
|
||||||
|
Например:
|
||||||
|
|
||||||
|
Compiler.exe "C:\oberon-07\example.ob07" "C:\oberon-07\example.asm" con
|
||||||
|
Compiler.kex "/tmp0/1/example.ob07" "/tmp0/1/example.asm" obj 2.5 (* v2.5 *)
|
||||||
|
|
||||||
|
В случае успешной компиляции, компилятор передает код завершения 0, иначе 1.
|
||||||
|
При работе компилятора в KolibriOS, код завершения не передается.
|
||||||
|
|
||||||
|
В файле Compiler.ini можно задать путь к ассеблеру Fasm. Если путь задан
|
||||||
|
правильно, то после завершения трансляции, компилятор автоматически вызовет
|
||||||
|
fasm для ассемблирования листинга.
|
||||||
|
|
||||||
|
Пример файла Compiler.ini:
|
||||||
|
|
||||||
|
_fasm_win "С:\fasmw172\fasm.exe"
|
||||||
|
_fasm_kos "/rd/1/develop/fasm"
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Отличия от оригинала
|
||||||
|
|
||||||
|
1. Расширен псевдомодуль SYSTEM
|
||||||
|
2. В идентификаторах допускается символ "_"
|
||||||
|
3. Добавлены системные флаги
|
||||||
|
4. Усовершенствован оператор CASE (добавлены константные выражения в
|
||||||
|
метках вариантов и необязательная ветка ELSE)
|
||||||
|
5. Расширен набор стандартных процедур
|
||||||
|
6. Семантика охраны/проверки типа уточнена для нулевого указателя
|
||||||
|
7. Семантика DIV и MOD уточнена для отрицательных чисел
|
||||||
|
8. Добавлены однострочные комментарии (начинаются с пары символов "//")
|
||||||
|
9. Разрешено наследование от типа-указателя
|
||||||
|
10. Добавлен синтаксис для импорта процедур из внешних библиотек
|
||||||
|
11. "Строки" можно заключать также в одиночные кавычки: 'строка'
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Особенности реализации
|
||||||
|
|
||||||
|
1. Основные типы
|
||||||
|
|
||||||
|
Тип Диапазон значений Размер, байт
|
||||||
|
|
||||||
|
INTEGER -2147483648 .. 2147483647 4
|
||||||
|
REAL 4.94E-324 .. 1.70E+308 8
|
||||||
|
CHAR символ ASCII (0X .. 0FFX) 1
|
||||||
|
BOOLEAN FALSE, TRUE 1
|
||||||
|
SET множество из целых чисел {0 .. 31} 4
|
||||||
|
BYTE 0 .. 255 1
|
||||||
|
|
||||||
|
2. Максимальная длина идентификаторов - 1024 символов
|
||||||
|
3. Максимальная длина строковых констант - 1024 символов
|
||||||
|
4. Максимальная размерность открытых массивов - 5
|
||||||
|
5. Максимальное количество объявленных типов-записей - 2047
|
||||||
|
6. Процедура NEW заполняет нулями выделенный блок памяти
|
||||||
|
7. Глобальные и локальные переменные инициализируются нулями
|
||||||
|
8. В отличие от многих Oberon-реализаций, сборщик мусора и динамическая
|
||||||
|
модульность отсутствуют
|
||||||
|
9. Тип BYTE в выражениях всегда приводится к INTEGER
|
||||||
|
10. Контроль переполнения значений выражений не производится
|
||||||
|
11. Ошибки времени выполнения:
|
||||||
|
|
||||||
|
- ASSERT(x), при x = FALSE
|
||||||
|
- разыменование нулевого указателя
|
||||||
|
- целочисленное деление на 0
|
||||||
|
- вызов процедуры через процедурную переменную с нулевым значением
|
||||||
|
- ошибка охраны типа
|
||||||
|
- нарушение границ массива
|
||||||
|
- непредусмотренное значение выражения в операторе CASE
|
||||||
|
- ошибка копирования массивов v := x, если LEN(v) < LEN(x)
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Псевдомодуль SYSTEM
|
||||||
|
|
||||||
|
Псевдомодуль SYSTEM содержит низкоуровневые и небезопасные процедуры,
|
||||||
|
ошибки при использовании процедур псевдомодуля SYSTEM могут привести к
|
||||||
|
повреждению данных времени выполнения и аварийному завершению программы.
|
||||||
|
|
||||||
|
PROCEDURE ADR(v: любой тип): INTEGER
|
||||||
|
v - переменная или процедура;
|
||||||
|
возвращает адрес v
|
||||||
|
|
||||||
|
PROCEDURE SADR(x: строковая константа): INTEGER
|
||||||
|
возвращает адрес x
|
||||||
|
|
||||||
|
PROCEDURE SIZE(T): INTEGER
|
||||||
|
возвращает размер типа T
|
||||||
|
|
||||||
|
PROCEDURE TYPEID(T): INTEGER
|
||||||
|
T - тип-запись или тип-указатель,
|
||||||
|
возвращает номер типа в таблице типов-записей
|
||||||
|
|
||||||
|
PROCEDURE INF(): REAL
|
||||||
|
возвращает специальное вещественное значение "бесконечность"
|
||||||
|
|
||||||
|
PROCEDURE GET(a: INTEGER;
|
||||||
|
VAR v: любой основной тип, PROCEDURE, POINTER)
|
||||||
|
v := Память[a]
|
||||||
|
|
||||||
|
PROCEDURE PUT(a: INTEGER; x: любой основной тип, PROCEDURE, POINTER)
|
||||||
|
Память[a] := x;
|
||||||
|
Если x: BYTE, то значение x будет расширено до 32 бит,
|
||||||
|
для записи байтов использовать SYSTEM.PUT8
|
||||||
|
|
||||||
|
PROCEDURE PUT8(a: INTEGER; x: INTEGER, BYTE)
|
||||||
|
Память[a] := младший байт (x)
|
||||||
|
|
||||||
|
PROCEDURE MOVE(Source, Dest, n: INTEGER)
|
||||||
|
Копирует n байт памяти из Source в Dest,
|
||||||
|
области Source и Dest не должны перекрываться
|
||||||
|
|
||||||
|
PROCEDURE COPY(VAR Source: любой тип; VAR Dest: любой тип; n: INTEGER)
|
||||||
|
Копирует n байт памяти из Source в Dest.
|
||||||
|
Эквивалентно
|
||||||
|
SYSTEM.MOVE(SYSTEM.ADR(Source), SYSTEM.ADR(Dest), n)
|
||||||
|
|
||||||
|
PROCEDURE CODE(byte1, byte2,... : INTEGER)
|
||||||
|
Вставка машинного кода,
|
||||||
|
byte1, byte2 ... - константы в диапазоне 0..255,
|
||||||
|
например:
|
||||||
|
SYSTEM.CODE(08BH, 045H, 008H) (* mov eax, dword [ebp + 08h] *)
|
||||||
|
|
||||||
|
Также в модуле SYSTEM определен тип CARD16 (2 байта). Для типа CARD16 не
|
||||||
|
допускаются никакие явные операции, за исключением присваивания.
|
||||||
|
Преобразования CARD16 -> INTEGER и INTEGER -> CARD16 могут быть реализованы
|
||||||
|
так:
|
||||||
|
|
||||||
|
PROCEDURE Card16ToInt (w: SYSTEM.CARD16): INTEGER;
|
||||||
|
VAR i: INTEGER;
|
||||||
|
BEGIN
|
||||||
|
SYSTEM.PUT(SYSTEM.ADR(i), w)
|
||||||
|
RETURN i
|
||||||
|
END Card16ToInt;
|
||||||
|
|
||||||
|
PROCEDURE IntToCard16 (i: INTEGER): SYSTEM.CARD16;
|
||||||
|
VAR w: SYSTEM.CARD16;
|
||||||
|
BEGIN
|
||||||
|
SYSTEM.GET(SYSTEM.ADR(i), w)
|
||||||
|
RETURN w
|
||||||
|
END IntToCard16;
|
||||||
|
|
||||||
|
Функции псевдомодуля SYSTEM нельзя использовать в константных выражениях.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Системные флаги
|
||||||
|
|
||||||
|
При объявлении процедурных типов и глобальных процедур, после ключевого
|
||||||
|
слова PROCEDURE может быть указан флаг соглашения вызова: [stdcall], [cdecl],
|
||||||
|
[winapi] или [kosapi]. Например:
|
||||||
|
|
||||||
|
PROCEDURE [cdecl] MyProc (x, y, z: INTEGER): INTEGER;
|
||||||
|
|
||||||
|
Если указан флаг [winapi] или [kosapi], то принимается соглашение stdcall и
|
||||||
|
процедуру-функцию можно вызвать как собственно процедуру, вне выражения.
|
||||||
|
При объявлении типов-записей, после ключевого слова RECORD может быть
|
||||||
|
указан флаг [noalign]. Флаг [noalign] означает отсутствие выравнивания полей
|
||||||
|
записи. Записи с системным флагом не могут иметь базовый тип и не могут быть
|
||||||
|
базовыми типами для других записей.
|
||||||
|
Для использования системных флагов, требуется импортировать SYSTEM.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Оператор CASE
|
||||||
|
|
||||||
|
Синтаксис оператора CASE:
|
||||||
|
|
||||||
|
CaseStatement =
|
||||||
|
CASE Expression OF Сase {"|" Сase}
|
||||||
|
[ELSE StatementSequence] END.
|
||||||
|
Case = [CaseLabelList ":" StatementSequence].
|
||||||
|
CaseLabelList = CaseLabels {"," CaseLabels}.
|
||||||
|
CaseLabels = ConstExpression [".." ConstExpression].
|
||||||
|
|
||||||
|
Например:
|
||||||
|
|
||||||
|
CASE x OF
|
||||||
|
|-1: DoSomething1
|
||||||
|
| 1: DoSomething2
|
||||||
|
| 0: DoSomething3
|
||||||
|
ELSE
|
||||||
|
DoSomething4
|
||||||
|
END
|
||||||
|
|
||||||
|
В метках вариантов можно использовать константные выражения, ветка ELSE
|
||||||
|
необязательна. Если не выполнен ни один вариант и ELSE отсутствует, то
|
||||||
|
программа прерывается с ошибкой времени выполнения.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Проверка и охрана типа нулевого указателя
|
||||||
|
|
||||||
|
Оригинальное сообщение о языке не определяет поведение программы при
|
||||||
|
выполнении охраны p(T) и проверки типа p IS T при p = NIL. Во многих
|
||||||
|
Oberon-реализациях выполнение такой операции приводит к ошибке времени
|
||||||
|
выполнения. В данной реализации охрана типа нулевого указателя не приводит к
|
||||||
|
ошибке, а проверка типа дает результат FALSE. В ряде случаев это позволяет
|
||||||
|
значительно сократить частоту применения охраны типа.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Дополнительные стандартные процедуры
|
||||||
|
|
||||||
|
DISPOSE(VAR v: любой_указатель)
|
||||||
|
Освобождает память, выделенную процедурой NEW для
|
||||||
|
динамической переменной v^, и присваивает переменной v
|
||||||
|
значение NIL.
|
||||||
|
|
||||||
|
COPY(x: ARRAY OF CHAR; VAR v: ARRAY OF CHAR);
|
||||||
|
v := x;
|
||||||
|
Если LEN(v) < LEN(x), то строка x будет скопирована
|
||||||
|
не полностью
|
||||||
|
|
||||||
|
LSR(x, n: INTEGER): INTEGER
|
||||||
|
Логический сдвиг x на n бит вправо.
|
||||||
|
|
||||||
|
MIN(a, b: INTEGER): INTEGER
|
||||||
|
Минимум из двух значений.
|
||||||
|
|
||||||
|
MAX(a, b: INTEGER): INTEGER
|
||||||
|
Максимум из двух значений.
|
||||||
|
|
||||||
|
BITS(x: INTEGER): SET
|
||||||
|
Интерпретирует x как значение типа SET.
|
||||||
|
Выполняется на этапе компиляции.
|
||||||
|
|
||||||
|
LENGTH(s: ARRAY OF CHAR): INTEGER
|
||||||
|
Длина 0X-завершенной строки s, без учета символа 0X.
|
||||||
|
Если символ 0X отсутствует, функция возвращает длину
|
||||||
|
массива s.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
DIV и MOD
|
||||||
|
|
||||||
|
x y x DIV y x MOD y
|
||||||
|
|
||||||
|
5 3 1 2
|
||||||
|
-5 3 -2 1
|
||||||
|
5 -3 -2 -1
|
||||||
|
-5 -3 1 -2
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Импортированные процедуры
|
||||||
|
|
||||||
|
Синтаксис импорта:
|
||||||
|
|
||||||
|
PROCEDURE [callconv, "library", "function"] proc_name (FormalParam): Type;
|
||||||
|
|
||||||
|
- callconv -- соглашение вызова (stdcall, cdecl, winapi, kosapi)
|
||||||
|
- "library" -- имя файла динамической библиотеки
|
||||||
|
- "function" -- имя импортируемой процедуры
|
||||||
|
|
||||||
|
например:
|
||||||
|
|
||||||
|
PROCEDURE [winapi, "kernel32.dll", "ExitProcess"] exit (code: INTEGER);
|
||||||
|
|
||||||
|
PROCEDURE [stdcall, "Console.obj", "con_exit"] exit (bCloseWindow: BOOLEAN);
|
||||||
|
|
||||||
|
Объявления импортированных процедур должны располагаться в глобальной
|
||||||
|
области видимости модуля после объявления переменных, вместе с объявлением
|
||||||
|
"обычных" процедур, от которых импортированные отличаются только отсутствием
|
||||||
|
тела процедуры. В остальном, к таким процедурам применимы те же правила:
|
||||||
|
их можно вызвать, присвоить процедурной переменной или получить адрес.
|
||||||
|
|
||||||
|
Так как импортированная процедура всегда имеет явное указание соглашения
|
||||||
|
вызова, то совместимый процедурный тип тоже должен быть объявлен с указанием
|
||||||
|
соглашения вызова:
|
||||||
|
|
||||||
|
VAR
|
||||||
|
ExitProcess: PROCEDURE [winapi] (code: INTEGER);
|
||||||
|
con_exit: PROCEDURE [stdcall] (bCloseWindow: BOOLEAN);
|
||||||
|
|
||||||
|
В KolibriOS импортировать процедуры можно только из библиотек, размещенных
|
||||||
|
в /rd/1/lib. Импортировать и вызывать функции инициализации библиотек
|
||||||
|
(lib_init, START) при этом не нужно.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Скрытые параметры процедур
|
||||||
|
|
||||||
|
Некоторые процедуры могут иметь скрытые параметры, они отсутствуют в списке
|
||||||
|
формальных параметров, но учитываются компилятором при трансляции вызовов.
|
||||||
|
Это возможно в следующих случаях:
|
||||||
|
|
||||||
|
1. Процедура имеет формальный параметр открытый массив:
|
||||||
|
PROCEDURE Proc (x: ARRAY OF ARRAY OF REAL);
|
||||||
|
Вызов транслируется так:
|
||||||
|
Proc(LEN(x), LEN(x[0]), SYSTEM.ADR(x))
|
||||||
|
2. Процедура имеет формальный параметр-переменную типа RECORD:
|
||||||
|
PROCEDURE Proc (VAR x: Rec);
|
||||||
|
Вызов транслируется так:
|
||||||
|
Proc(SYSTEM.TYPEID(Rec), SYSTEM.ADR(x))
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Модуль RTL
|
||||||
|
|
||||||
|
Все программы неявно используют модуль RTL. Компилятор транслирует
|
||||||
|
некоторые операции (проверка и охрана типа, сравнение строк, сообщения об
|
||||||
|
ошибках времени выполнения и др.) как вызовы процедур этого модуля. Не
|
||||||
|
следует явно вызывать эти процедуры, за исключением процедуры SetDll,
|
||||||
|
если приложение компилируется как Windows DLL:
|
||||||
|
|
||||||
|
PROCEDURE SetDll
|
||||||
|
(process_detach, thread_detach, thread_attach: DLL_ENTRY);
|
||||||
|
где TYPE DLL_ENTRY =
|
||||||
|
PROCEDURE [stdcall] (hinstDLL, fdwReason, lpvReserved: INTEGER);
|
||||||
|
|
||||||
|
SetDll назначает процедуры process_detach, thread_detach, thread_attach
|
||||||
|
вызываемыми при
|
||||||
|
- выгрузке dll-библиотеки (process_detach)
|
||||||
|
- создании нового потока (thread_attach)
|
||||||
|
- уничтожении потока (thread_detach)
|
||||||
|
|
||||||
|
Для прочих типов приложений, вызов процедуры SetDll не влияет на
|
||||||
|
поведение программы.
|
||||||
|
Сообщения об ошибках времени выполнения выводятся в диалоговых окнах
|
||||||
|
(Windows), на доску отладки (KolibriOS).
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Модуль API
|
||||||
|
|
||||||
|
Существуют две реализации модуля API: для Windows и для KolibriOS. Как и
|
||||||
|
модуль RTL, модуль API не предназначен для прямого использования. Он
|
||||||
|
обеспечивает кроссплатформенность компилятора.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Генерация исполняемых файлов DLL
|
||||||
|
|
||||||
|
Разрешается экспортировать только процедуры. Для этого, процедура должна
|
||||||
|
находиться в главном модуле программы, и ее имя должно быть отмечено символом
|
||||||
|
экспорта ("*"). KolibriOS DLL всегда экспортируют идентификаторы "version"
|
||||||
|
(версия программы) и "lib_init" - адрес процедуры инициализации DLL:
|
||||||
|
|
||||||
|
PROCEDURE [stdcall] lib_init (): INTEGER
|
||||||
|
|
||||||
|
Эта процедура должна быть вызвана перед использованием DLL.
|
||||||
|
Процедура всегда возвращает 1.
|
||||||
+107
@@ -0,0 +1,107 @@
|
|||||||
|
1 пропущен символ 'H' или 'X' в конце шестнадцатиричного числа
|
||||||
|
2 пропущен порядок вещественного числа
|
||||||
|
3 незакрытая строка
|
||||||
|
4 недопустимый символ
|
||||||
|
5 слишком длинная строка
|
||||||
|
6 слишком длинный идентификатор
|
||||||
|
7 слишком длинное число
|
||||||
|
8 слишком большое целое число
|
||||||
|
9 слишком большое целое число (* hex *)
|
||||||
|
10 слишком большая символьная константа (* hex *)
|
||||||
|
11 вещественное переполнение
|
||||||
|
12 переполнение порядка вещественного числа
|
||||||
|
|
||||||
|
21 ожидалось 'MODULE'
|
||||||
|
22 ожидался идентификатор
|
||||||
|
23 имя модуля не совпадает с именем файла
|
||||||
|
24 ожидалась ';'
|
||||||
|
25 идентификатор не совпадает с именем модуля
|
||||||
|
26 ожидалась '.'
|
||||||
|
27 ожидалось 'END'
|
||||||
|
28 ожидалось ',', ';' или ':='
|
||||||
|
29 модуль не найден или ошибка доступа
|
||||||
|
30 идентификатор переопределен
|
||||||
|
31 циклический импорт
|
||||||
|
32 ожидалось '='
|
||||||
|
33 ожидалась ')'
|
||||||
|
34 синтаксическая ошибка в выражении
|
||||||
|
35 ожидалась '}'
|
||||||
|
36 несовместимость по выражению (унарн.)
|
||||||
|
37 несовместимость по выражению
|
||||||
|
38 ожидалось 'RETURN'
|
||||||
|
39 целочисленное переполнение
|
||||||
|
40 вещественное переполнение
|
||||||
|
41 недостаточно вещественных регистров, упростите выражение
|
||||||
|
42 значение константы должно быть в диапазоне 0..255
|
||||||
|
43 требуется значение типа INTEGER
|
||||||
|
44 нарушение границ диапазона элементов множества (SET)
|
||||||
|
45 деление на нуль
|
||||||
|
46 целочисленное деление на нуль
|
||||||
|
47 ожидалось 'OF' или ','
|
||||||
|
48 неопределенный идентификатор
|
||||||
|
49 ожидался тип
|
||||||
|
50 рекурсивное определение типа
|
||||||
|
51 длина массива должна быть больше нуля
|
||||||
|
52 ожидался идентификатор типа-записи или типа-указателя
|
||||||
|
53 ожидалось ':'
|
||||||
|
54 требуется импорт модуля SYSTEM
|
||||||
|
55 тип-указатель не доопределен
|
||||||
|
56 значение операнда вне границ диапазона элементов множества (SET)
|
||||||
|
57 ожидалось 'TO'
|
||||||
|
58 ожидался тип-запись
|
||||||
|
59 процедура, не возвращающая результат, не допустима в выражении
|
||||||
|
60 идентификатор не совпадает с именем процедуры
|
||||||
|
61 нельзя экспортировать локальный идентификатор
|
||||||
|
62 ожидалось константное выражение
|
||||||
|
63 ожидалось stdcall, cdecl, winapi или kosapi
|
||||||
|
64 ожидалась '('
|
||||||
|
65 ожидалась ','
|
||||||
|
66 несовместимый параметр
|
||||||
|
67 ожидалось 'OF'
|
||||||
|
68 ожидался идентификатор типа
|
||||||
|
69 тип результата не может быть массивом или записью
|
||||||
|
70 процедура не возвращает результат
|
||||||
|
71 ожидалась ']'
|
||||||
|
72 требуется выражение типа BOOLEAN
|
||||||
|
73 требуется запись или указатель
|
||||||
|
74 поле записи не найдено
|
||||||
|
75 требуется массив
|
||||||
|
76 требуется выражение типа INTEGER
|
||||||
|
77 требуется указатель
|
||||||
|
78 охрана/проверка типа не применима
|
||||||
|
79 требуется тип
|
||||||
|
80 требуется тип-запись
|
||||||
|
81 требуется тип-указатель
|
||||||
|
82 охрана/проверка типа не применима (недопустимый тип)
|
||||||
|
83 нарушение границ массива
|
||||||
|
84 слишком большая размерность открытого массива
|
||||||
|
85 нельзя использовать локальную процедуру
|
||||||
|
86 требуется процедура
|
||||||
|
87 несовместимое выражение (RETURN)
|
||||||
|
88 ожидалось 'THEN'
|
||||||
|
89 ожидалось 'DO'
|
||||||
|
90 ожидалось 'UNTIL'
|
||||||
|
91 несовместимость по присваиванию
|
||||||
|
92 вызов функции вне выражения
|
||||||
|
93 требуется переменная
|
||||||
|
94 переменная доступна только для чтения
|
||||||
|
95 недопустимый тип выражения CASE
|
||||||
|
96 ожидалось ':='
|
||||||
|
97 требуется переменная типа INTEGER
|
||||||
|
98 шаг цикла FOR равен нулю
|
||||||
|
99 несовместимая метка
|
||||||
|
100 метка дублирована
|
||||||
|
101 слишком много типов-записей
|
||||||
|
102 ожидалась метка
|
||||||
|
103 неправильный диапазон CASE
|
||||||
|
104 слишком большой размер типа
|
||||||
|
105 доступ к промежуточным переменным запрещен
|
||||||
|
106 ожидался уточненный идентификатор
|
||||||
|
107 слишком большой аргумент CHR
|
||||||
|
108 требуется переменная или процедура
|
||||||
|
109 функции модуля SYSTEM недопустимы в константных выражениях
|
||||||
|
110 ожидалось noalign
|
||||||
|
111 запись [noalign] не может иметь базовый тип
|
||||||
|
112 запись [noalign] не может быть базовым типом
|
||||||
|
113 результат процедуры [winapi] или [kosapi] не может быть REAL
|
||||||
|
114 идентификаторы lib_init и version зарезервированы
|
||||||
+563
@@ -0,0 +1,563 @@
|
|||||||
|
==============================================================================
|
||||||
|
|
||||||
|
Библиотека (KolibriOS)
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Out - консольный вывод
|
||||||
|
|
||||||
|
PROCEDURE Open
|
||||||
|
формально открывает консольный вывод
|
||||||
|
|
||||||
|
PROCEDURE Int(x, width: INTEGER)
|
||||||
|
вывод целого числа x;
|
||||||
|
width - количество знакомест, используемых для вывода
|
||||||
|
|
||||||
|
PROCEDURE Real(x: REAL; width: INTEGER)
|
||||||
|
вывод вещественного числа x в плавающем формате;
|
||||||
|
width - количество знакомест, используемых для вывода
|
||||||
|
|
||||||
|
PROCEDURE Char(x: CHAR)
|
||||||
|
вывод символа x
|
||||||
|
|
||||||
|
PROCEDURE FixReal(x: REAL; width, p: INTEGER)
|
||||||
|
вывод вещественного числа x в фиксированном формате;
|
||||||
|
width - количество знакомест, используемых для вывода;
|
||||||
|
p - количество знаков после десятичной точки
|
||||||
|
|
||||||
|
PROCEDURE Ln
|
||||||
|
переход на следующую строку
|
||||||
|
|
||||||
|
PROCEDURE String(s: ARRAY OF CHAR)
|
||||||
|
вывод строки s
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE In - консольный ввод
|
||||||
|
|
||||||
|
VAR Done: BOOLEAN
|
||||||
|
принимает значение TRUE в случае успешного выполнения
|
||||||
|
операции ввода, иначе FALSE
|
||||||
|
|
||||||
|
PROCEDURE Open
|
||||||
|
формально открывает консольный ввод,
|
||||||
|
также присваивает переменной Done значение TRUE
|
||||||
|
|
||||||
|
PROCEDURE Int(VAR x: INTEGER)
|
||||||
|
ввод числа типа INTEGER
|
||||||
|
|
||||||
|
PROCEDURE Char(VAR x: CHAR)
|
||||||
|
ввод символа
|
||||||
|
|
||||||
|
PROCEDURE Real(VAR x: REAL)
|
||||||
|
ввод числа типа REAL
|
||||||
|
|
||||||
|
PROCEDURE String(VAR s: ARRAY OF CHAR)
|
||||||
|
ввод строки
|
||||||
|
|
||||||
|
PROCEDURE Ln
|
||||||
|
ожидание нажатия ENTER
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Console - дополнительные процедуры консольного вывода
|
||||||
|
|
||||||
|
CONST
|
||||||
|
|
||||||
|
Следующие константы определяют цвет консольного вывода
|
||||||
|
|
||||||
|
Black = 0 Blue = 1 Green = 2
|
||||||
|
Cyan = 3 Red = 4 Magenta = 5
|
||||||
|
Brown = 6 LightGray = 7 DarkGray = 8
|
||||||
|
LightBlue = 9 LightGreen = 10 LightCyan = 11
|
||||||
|
LightRed = 12 LightMagenta = 13 Yellow = 14
|
||||||
|
White = 15
|
||||||
|
|
||||||
|
PROCEDURE Cls
|
||||||
|
очистка окна консоли
|
||||||
|
|
||||||
|
PROCEDURE SetColor(FColor, BColor: INTEGER)
|
||||||
|
установка цвета консольного вывода: FColor - цвет текста,
|
||||||
|
BColor - цвет фона, возможные значения - вышеперечисленные
|
||||||
|
константы
|
||||||
|
|
||||||
|
PROCEDURE SetCursor(x, y: INTEGER)
|
||||||
|
установка курсора консоли в позицию (x, y)
|
||||||
|
|
||||||
|
PROCEDURE GetCursor(VAR x, y: INTEGER)
|
||||||
|
записывает в параметры текущие координаты курсора консоли
|
||||||
|
|
||||||
|
PROCEDURE GetCursorX(): INTEGER
|
||||||
|
возвращает текущую x-координату курсора консоли
|
||||||
|
|
||||||
|
PROCEDURE GetCursorY(): INTEGER
|
||||||
|
возвращает текущую y-координату курсора консоли
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE ConsoleLib - обертка библиотеки console.obj
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Math - математические функции
|
||||||
|
|
||||||
|
CONST
|
||||||
|
|
||||||
|
pi = 3.141592653589793D+00
|
||||||
|
e = 2.718281828459045D+00
|
||||||
|
|
||||||
|
|
||||||
|
PROCEDURE IsNan(x: REAL): BOOLEAN
|
||||||
|
возвращает TRUE, если x - не число
|
||||||
|
|
||||||
|
PROCEDURE IsInf(x: REAL): BOOLEAN
|
||||||
|
возвращает TRUE, если x - бесконечность
|
||||||
|
|
||||||
|
PROCEDURE sqrt(x: REAL): REAL
|
||||||
|
квадратный корень x
|
||||||
|
|
||||||
|
PROCEDURE exp(x: REAL): REAL
|
||||||
|
экспонента x
|
||||||
|
|
||||||
|
PROCEDURE ln(x: REAL): REAL
|
||||||
|
натуральный логарифм x
|
||||||
|
|
||||||
|
PROCEDURE sin(x: REAL): REAL
|
||||||
|
синус x
|
||||||
|
|
||||||
|
PROCEDURE cos(x: REAL): REAL
|
||||||
|
косинус x
|
||||||
|
|
||||||
|
PROCEDURE tan(x: REAL): REAL
|
||||||
|
тангенс x
|
||||||
|
|
||||||
|
PROCEDURE arcsin(x: REAL): REAL
|
||||||
|
арксинус x
|
||||||
|
|
||||||
|
PROCEDURE arccos(x: REAL): REAL
|
||||||
|
арккосинус x
|
||||||
|
|
||||||
|
PROCEDURE arctan(x: REAL): REAL
|
||||||
|
арктангенс x
|
||||||
|
|
||||||
|
PROCEDURE arctan2(y, x: REAL): REAL
|
||||||
|
арктангенс y/x
|
||||||
|
|
||||||
|
PROCEDURE power(base, exponent: REAL): REAL
|
||||||
|
возведение числа base в степень exponent
|
||||||
|
|
||||||
|
PROCEDURE log(base, x: REAL): REAL
|
||||||
|
логарифм x по основанию base
|
||||||
|
|
||||||
|
PROCEDURE sinh(x: REAL): REAL
|
||||||
|
гиперболический синус x
|
||||||
|
|
||||||
|
PROCEDURE cosh(x: REAL): REAL
|
||||||
|
гиперболический косинус x
|
||||||
|
|
||||||
|
PROCEDURE tanh(x: REAL): REAL
|
||||||
|
гиперболический тангенс x
|
||||||
|
|
||||||
|
PROCEDURE arcsinh(x: REAL): REAL
|
||||||
|
обратный гиперболический синус x
|
||||||
|
|
||||||
|
PROCEDURE arccosh(x: REAL): REAL
|
||||||
|
обратный гиперболический косинус x
|
||||||
|
|
||||||
|
PROCEDURE arctanh(x: REAL): REAL
|
||||||
|
обратный гиперболический тангенс x
|
||||||
|
|
||||||
|
PROCEDURE round(x: REAL): REAL
|
||||||
|
округление x до ближайшего целого
|
||||||
|
|
||||||
|
PROCEDURE frac(x: REAL): REAL;
|
||||||
|
дробная часть числа x
|
||||||
|
|
||||||
|
PROCEDURE floor(x: REAL): REAL
|
||||||
|
наибольшее целое число (представление как REAL),
|
||||||
|
не больше x: floor(1.2) = 1.0
|
||||||
|
|
||||||
|
PROCEDURE ceil(x: REAL): REAL
|
||||||
|
наименьшее целое число (представление как REAL),
|
||||||
|
не меньше x: ceil(1.2) = 2.0
|
||||||
|
|
||||||
|
PROCEDURE sgn(x: REAL): INTEGER
|
||||||
|
если x > 0 возвращает 1
|
||||||
|
если x < 0 возвращает -1
|
||||||
|
если x = 0 возвращает 0
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Debug - вывод на доску отладки
|
||||||
|
Интерфейс как модуль Out
|
||||||
|
|
||||||
|
PROCEDURE Open
|
||||||
|
открывает доску отладки
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE File - работа с файловой системой
|
||||||
|
|
||||||
|
TYPE
|
||||||
|
|
||||||
|
FNAME = ARRAY 520 OF CHAR
|
||||||
|
|
||||||
|
FS = POINTER TO rFS
|
||||||
|
|
||||||
|
rFS = RECORD (* информационная структура файла *)
|
||||||
|
subfunc, pos, hpos, bytes, buffer: INTEGER;
|
||||||
|
name: FNAME
|
||||||
|
END
|
||||||
|
|
||||||
|
FD = POINTER TO rFD
|
||||||
|
|
||||||
|
rFD = RECORD (* структура блока данных входа каталога *)
|
||||||
|
attr: INTEGER;
|
||||||
|
ntyp: CHAR;
|
||||||
|
reserved: ARRAY 3 OF CHAR;
|
||||||
|
time_create, date_create,
|
||||||
|
time_access, date_access,
|
||||||
|
time_modif, date_modif,
|
||||||
|
size, hsize: INTEGER;
|
||||||
|
name: FNAME
|
||||||
|
END
|
||||||
|
|
||||||
|
CONST
|
||||||
|
|
||||||
|
SEEK_BEG = 0
|
||||||
|
SEEK_CUR = 1
|
||||||
|
SEEK_END = 2
|
||||||
|
|
||||||
|
PROCEDURE Load(FName: ARRAY OF CHAR; VAR size: INTEGER): INTEGER;
|
||||||
|
Загружает в память файл с именем FName, записывает в параметр
|
||||||
|
size размер файла, возвращает адрес загруженного файла
|
||||||
|
или 0 (ошибка). При необходимости, распаковывает
|
||||||
|
файл (kunpack).
|
||||||
|
|
||||||
|
PROCEDURE GetFileInfo(FName: ARRAY OF CHAR; VAR Info: rFD): BOOLEAN
|
||||||
|
Записывает структуру блока данных входа каталога для файла
|
||||||
|
или папки с именем FName в параметр Info.
|
||||||
|
При ошибке возвращает FALSE.
|
||||||
|
|
||||||
|
PROCEDURE Exists(FName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
возвращает TRUE, если файл с именем FName существует
|
||||||
|
|
||||||
|
PROCEDURE Close(VAR F: FS)
|
||||||
|
освобождает память, выделенную для информационной структуры
|
||||||
|
файла F и присваивает F значение NIL
|
||||||
|
|
||||||
|
PROCEDURE Open(FName: ARRAY OF CHAR): FS
|
||||||
|
возвращает указатель на информационную структуру файла с
|
||||||
|
именем FName, при ошибке возвращает NIL
|
||||||
|
|
||||||
|
PROCEDURE Delete(FName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
удаляет файл с именем FName, при ошибке возвращает FALSE
|
||||||
|
|
||||||
|
PROCEDURE Seek(F: FS; Offset, Origin: INTEGER): INTEGER
|
||||||
|
устанавливает позицию чтения-записи файла F на Offset,
|
||||||
|
относительно Origin = (SEEK_BEG - начало файла,
|
||||||
|
SEEK_CUR - текущая позиция, SEEK_END - конец файла),
|
||||||
|
возвращает позицию относительно начала файла, например:
|
||||||
|
Seek(F, 0, SEEK_END)
|
||||||
|
устанавливает позицию на конец файла и возвращает длину
|
||||||
|
файла; при ошибке возвращает -1
|
||||||
|
|
||||||
|
PROCEDURE Read(F: FS; Buffer, Count: INTEGER): INTEGER
|
||||||
|
Читает данные из файла в память. F - указатель на
|
||||||
|
информационную структуру файла, Buffer - адрес области
|
||||||
|
памяти, Count - количество байт, которое требуется прочитать
|
||||||
|
из файла; возвращает количество байт, которое было прочитано
|
||||||
|
и соответствующим образом изменяет позицию чтения/записи в
|
||||||
|
информационной структуре F.
|
||||||
|
|
||||||
|
PROCEDURE Write(F: FS; Buffer, Count: INTEGER): INTEGER
|
||||||
|
Записывает данные из памяти в файл. F - указатель на
|
||||||
|
информационную структуру файла, Buffer - адрес области
|
||||||
|
памяти, Count - количество байт, которое требуется записать
|
||||||
|
в файл; возвращает количество байт, которое было записано и
|
||||||
|
соответствующим образом изменяет позицию чтения/записи в
|
||||||
|
информационной структуре F.
|
||||||
|
|
||||||
|
PROCEDURE Create(FName: ARRAY OF CHAR): FS
|
||||||
|
создает новый файл с именем FName (полное имя), возвращает
|
||||||
|
указатель на информационную структуру файла,
|
||||||
|
при ошибке возвращает NIL
|
||||||
|
|
||||||
|
PROCEDURE CreateDir(DirName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
создает папку с именем DirName, все промежуточные папки
|
||||||
|
должны существовать, при ошибке возвращает FALSE
|
||||||
|
|
||||||
|
PROCEDURE DeleteDir(DirName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
удаляет пустую папку с именем DirName,
|
||||||
|
при ошибке возвращает FALSE
|
||||||
|
|
||||||
|
PROCEDURE DirExists(DirName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
возвращает TRUE, если папка с именем DirName существует
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Read - чтение основных типов данных из файла F
|
||||||
|
|
||||||
|
Процедуры возвращают TRUE в случае успешной операции чтения и
|
||||||
|
соответствующим образом изменяют позицию чтения/записи в
|
||||||
|
информационной структуре F
|
||||||
|
|
||||||
|
PROCEDURE Char(F: File.FS; VAR x: CHAR): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Int(F: File.FS; VAR x: INTEGER): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Real(F: File.FS; VAR x: REAL): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Boolean(F: File.FS; VAR x: BOOLEAN): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Set(F: File.FS; VAR x: SET): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Card16(F: File.FS; VAR x: SYSTEM.CARD16): BOOLEAN
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Write - запись основных типов данных в файл F
|
||||||
|
|
||||||
|
Процедуры возвращают TRUE в случае успешной операции записи и
|
||||||
|
соответствующим образом изменяют позицию чтения/записи в
|
||||||
|
информационной структуре F
|
||||||
|
|
||||||
|
PROCEDURE Char(F: File.FS; x: CHAR): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Int(F: File.FS; x: INTEGER): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Real(F: File.FS; x: REAL): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Boolean(F: File.FS; x: BOOLEAN): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Set(F: File.FS; x: SET): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Card16(F: File.FS; x: SYSTEM.CARD16): BOOLEAN
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE DateTime - дата, время
|
||||||
|
|
||||||
|
CONST ERR = -7.0E5
|
||||||
|
|
||||||
|
PROCEDURE Now(VAR Year, Month, Day, Hour, Min, Sec: INTEGER)
|
||||||
|
записывает в параметры компоненты текущей системной даты и
|
||||||
|
времени
|
||||||
|
|
||||||
|
PROCEDURE Encode(Year, Month, Day, Hour, Min, Sec: INTEGER): REAL
|
||||||
|
возвращает дату, полученную из компонентов
|
||||||
|
Year, Month, Day, Hour, Min, Sec;
|
||||||
|
при ошибке возвращает константу ERR = -7.0D5
|
||||||
|
|
||||||
|
PROCEDURE Decode(Date: REAL; VAR Year, Month, Day,
|
||||||
|
Hour, Min, Sec: INTEGER): BOOLEAN
|
||||||
|
извлекает компоненты
|
||||||
|
Year, Month, Day, Hour, Min, Sec из даты Date;
|
||||||
|
при ошибке возвращает FALSE
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Args - параметры программы
|
||||||
|
|
||||||
|
VAR argc: INTEGER
|
||||||
|
количество параметров программы, включая имя
|
||||||
|
исполняемого файла
|
||||||
|
|
||||||
|
PROCEDURE GetArg(n: INTEGER; VAR s: ARRAY OF CHAR)
|
||||||
|
записывает в строку s n-й параметр программы,
|
||||||
|
нумерация параметров от 0 до argc - 1,
|
||||||
|
нулевой параметр -- имя исполняемого файла
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE KOSAPI
|
||||||
|
|
||||||
|
PROCEDURE sysfunc1(arg1: INTEGER): INTEGER
|
||||||
|
PROCEDURE sysfunc2(arg1, arg2: INTEGER): INTEGER
|
||||||
|
...
|
||||||
|
PROCEDURE sysfunc7(arg1, arg2, ..., arg7: INTEGER): INTEGER
|
||||||
|
Обертки для функций API ядра KolibriOS.
|
||||||
|
arg1 .. arg7 соответствуют регистрам
|
||||||
|
eax, ebx, ecx, edx, esi, edi, ebp;
|
||||||
|
возвращают значение регистра eax после системного вызова.
|
||||||
|
|
||||||
|
PROCEDURE sysfunc22(arg1, arg2: INTEGER; VAR res2: INTEGER): INTEGER
|
||||||
|
Обертка для функций API ядра KolibriOS.
|
||||||
|
arg1 - регистр eax, arg2 - регистр ebx,
|
||||||
|
res2 - значение регистра ebx после системного вызова;
|
||||||
|
возвращает значение регистра eax после системного вызова.
|
||||||
|
|
||||||
|
PROCEDURE malloc(size: INTEGER): INTEGER
|
||||||
|
Выделяет блок памяти.
|
||||||
|
size - размер блока в байтах,
|
||||||
|
возвращает адрес выделенного блока
|
||||||
|
|
||||||
|
PROCEDURE free(ptr: INTEGER): INTEGER
|
||||||
|
Освобождает ранее выделенный блок памяти с адресом ptr,
|
||||||
|
возвращает 0
|
||||||
|
|
||||||
|
PROCEDURE realloc(ptr, size: INTEGER): INTEGER
|
||||||
|
Перераспределяет блок памяти,
|
||||||
|
ptr - адрес ранее выделенного блока,
|
||||||
|
size - новый размер,
|
||||||
|
возвращает указатель на перераспределенный блок,
|
||||||
|
0 при ошибке
|
||||||
|
|
||||||
|
PROCEDURE GetCommandLine(): INTEGER
|
||||||
|
Возвращает адрес строки параметров
|
||||||
|
|
||||||
|
PROCEDURE GetName(): INTEGER
|
||||||
|
Возвращает адрес строки с именем программы
|
||||||
|
|
||||||
|
PROCEDURE LoadLib(name: ARRAY OF CHAR): INTEGER
|
||||||
|
Загружает DLL с полным именем name. Возвращает адрес таблицы
|
||||||
|
экспорта. При ошибке возвращает 0.
|
||||||
|
|
||||||
|
PROCEDURE GetProcAdr(name: ARRAY OF CHAR; lib: INTEGER): INTEGER
|
||||||
|
name - имя процедуры
|
||||||
|
lib - адрес таблицы экспорта DLL
|
||||||
|
Возвращает адрес процедуры. При ошибке возвращает 0.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE ColorDlg - работа с диалогом "Color Dialog"
|
||||||
|
|
||||||
|
TYPE
|
||||||
|
|
||||||
|
Dialog = POINTER TO RECORD (* структура диалога *)
|
||||||
|
status: INTEGER (* состояние диалога:
|
||||||
|
0 - пользователь нажал Cancel
|
||||||
|
1 - пользователь нажал OK
|
||||||
|
2 - диалог открыт *)
|
||||||
|
|
||||||
|
color: INTEGER (* выбранный цвет *)
|
||||||
|
END
|
||||||
|
|
||||||
|
PROCEDURE Create(draw_window: DRAW_WINDOW): Dialog
|
||||||
|
создать диалог
|
||||||
|
draw_window - процедура перерисовки основного окна
|
||||||
|
(TYPE DRAW_WINDOW = PROCEDURE);
|
||||||
|
процедура возвращает указатель на структуру диалога
|
||||||
|
|
||||||
|
PROCEDURE Show(cd: Dialog)
|
||||||
|
показать диалог
|
||||||
|
cd - указатель на структуру диалога, который был создан ранее
|
||||||
|
процедурой Create
|
||||||
|
|
||||||
|
PROCEDURE Destroy(VAR cd: Dialog)
|
||||||
|
уничтожить диалог
|
||||||
|
cd - указатель на структуру диалога
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE OpenDlg - работа с диалогом "Open Dialog"
|
||||||
|
|
||||||
|
TYPE
|
||||||
|
|
||||||
|
Dialog = POINTER TO RECORD (* структура диалога *)
|
||||||
|
status: INTEGER (* состояние диалога:
|
||||||
|
0 - пользователь нажал Cancel
|
||||||
|
1 - пользователь нажал OK
|
||||||
|
2 - диалог открыт *)
|
||||||
|
|
||||||
|
FileName: ARRAY 4096 OF CHAR (* имя выбранного файла *)
|
||||||
|
FilePath: ARRAY 4096 OF CHAR (* полное имя выбранного
|
||||||
|
файла *)
|
||||||
|
END
|
||||||
|
|
||||||
|
PROCEDURE Create(draw_window: DRAW_WINDOW; type: INTEGER; def_path,
|
||||||
|
filter: ARRAY OF CHAR): Dialog
|
||||||
|
создать диалог
|
||||||
|
draw_window - процедура перерисовки основного окна
|
||||||
|
(TYPE DRAW_WINDOW = PROCEDURE)
|
||||||
|
type - тип диалога
|
||||||
|
0 - открыть
|
||||||
|
1 - сохранить
|
||||||
|
2 - выбрать папку
|
||||||
|
def_path - путь по умолчанию, папка def_path будет открыта
|
||||||
|
при первом запуске диалога
|
||||||
|
filter - в строке записано перечисление расширений файлов,
|
||||||
|
которые будут показаны в диалоговом окне, расширения
|
||||||
|
разделяются символом "|", например: "ASM|TXT|INI"
|
||||||
|
процедура возвращает указатель на структуру диалога
|
||||||
|
|
||||||
|
PROCEDURE Show(od: Dialog; Width, Height: INTEGER)
|
||||||
|
показать диалог
|
||||||
|
od - указатель на структуру диалога, который был создан ранее
|
||||||
|
процедурой Create
|
||||||
|
Width и Height - ширина и высота диалогового окна
|
||||||
|
|
||||||
|
PROCEDURE Destroy(VAR od: Dialog)
|
||||||
|
уничтожить диалог
|
||||||
|
od - указатель на структуру диалога
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE kfonts - работа с kf-шрифтами
|
||||||
|
|
||||||
|
CONST
|
||||||
|
|
||||||
|
bold = 1
|
||||||
|
italic = 2
|
||||||
|
underline = 4
|
||||||
|
strike_through = 8
|
||||||
|
smoothing = 16
|
||||||
|
bpp32 = 32
|
||||||
|
|
||||||
|
TYPE
|
||||||
|
|
||||||
|
TFont = POINTER TO TFont_desc (* указатель на шрифт *)
|
||||||
|
|
||||||
|
PROCEDURE LoadFont(file_name: ARRAY OF CHAR): TFont
|
||||||
|
загрузить шрифт из файла
|
||||||
|
file_name имя kf-файла
|
||||||
|
рез-т: указатель на шрифт/NIL (ошибка)
|
||||||
|
|
||||||
|
PROCEDURE SetSize(Font: TFont; font_size: INTEGER): BOOLEAN
|
||||||
|
установить размер шрифта
|
||||||
|
Font указатель на шрифт
|
||||||
|
font_size размер шрифта
|
||||||
|
рез-т: TRUE/FALSE (ошибка)
|
||||||
|
|
||||||
|
PROCEDURE Enabled(Font: TFont; font_size: INTEGER): BOOLEAN
|
||||||
|
проверить, есть ли шрифт, заданного размера
|
||||||
|
Font указатель на шрифт
|
||||||
|
font_size размер шрифта
|
||||||
|
рез-т: TRUE/FALSE (шрифта нет)
|
||||||
|
|
||||||
|
PROCEDURE Destroy(VAR Font: TFont)
|
||||||
|
выгрузить шрифт, освободить динамическую память
|
||||||
|
Font указатель на шрифт
|
||||||
|
Присваивает переменной Font значение NIL
|
||||||
|
|
||||||
|
PROCEDURE TextHeight(Font: TFont): INTEGER
|
||||||
|
получить высоту строки текста
|
||||||
|
Font указатель на шрифт
|
||||||
|
рез-т: высота строки текста в пикселях
|
||||||
|
|
||||||
|
PROCEDURE TextWidth(Font: TFont;
|
||||||
|
str, length, params: INTEGER): INTEGER
|
||||||
|
получить ширину строки текста
|
||||||
|
Font указатель на шрифт
|
||||||
|
str адрес строки текста в кодировке Win-1251
|
||||||
|
length количество символов в строке или -1, если строка
|
||||||
|
завершается нулем
|
||||||
|
params параметры-флаги см. ниже
|
||||||
|
рез-т: ширина строки текста в пикселях
|
||||||
|
|
||||||
|
PROCEDURE TextOut(Font: TFont;
|
||||||
|
canvas, x, y, str, length, color, params: INTEGER)
|
||||||
|
вывести текст в буфер
|
||||||
|
для вывода буфера в окно, использовать ф.65 или
|
||||||
|
ф.7 (если буфер 24-битный)
|
||||||
|
Font указатель на шрифт
|
||||||
|
canvas адрес графического буфера
|
||||||
|
структура буфера:
|
||||||
|
Xsize dd
|
||||||
|
Ysize dd
|
||||||
|
picture rb Xsize * Ysize * 4 (32 бита)
|
||||||
|
или Xsize * Ysize * 3 (24 бита)
|
||||||
|
x, y координаты текста относительно левого верхнего
|
||||||
|
угла буфера
|
||||||
|
str адрес строки текста в кодировке Win-1251
|
||||||
|
length количество символов в строке или -1, если строка
|
||||||
|
завершается нулем
|
||||||
|
color цвет текста 0x00RRGGBB
|
||||||
|
params параметры-флаги:
|
||||||
|
1 жирный
|
||||||
|
2 курсив
|
||||||
|
4 подчеркнутый
|
||||||
|
8 перечеркнутый
|
||||||
|
16 применить сглаживание
|
||||||
|
32 вывод в 32-битный буфер
|
||||||
|
возможно использование флагов в любых сочетаниях
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE RasterWorks - обертка библиотеки Rasterworks.obj
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE libimg - обертка библиотеки libimg.obj
|
||||||
|
------------------------------------------------------------------------------
|
||||||
Binary file not shown.
+342
@@ -0,0 +1,342 @@
|
|||||||
|
==============================================================================
|
||||||
|
|
||||||
|
Библиотека (Windows)
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Out - консольный вывод
|
||||||
|
|
||||||
|
PROCEDURE Open
|
||||||
|
открывает консольный вывод
|
||||||
|
|
||||||
|
PROCEDURE Int(x, width: INTEGER)
|
||||||
|
вывод целого числа x;
|
||||||
|
width - количество знакомест, используемых для вывода
|
||||||
|
|
||||||
|
PROCEDURE Real(x: REAL; width: INTEGER)
|
||||||
|
вывод вещественного числа x в плавающем формате;
|
||||||
|
width - количество знакомест, используемых для вывода
|
||||||
|
|
||||||
|
PROCEDURE Char(x: CHAR)
|
||||||
|
вывод символа x
|
||||||
|
|
||||||
|
PROCEDURE FixReal(x: REAL; width, p: INTEGER)
|
||||||
|
вывод вещественного числа x в фиксированном формате;
|
||||||
|
width - количество знакомест, используемых для вывода;
|
||||||
|
p - количество знаков после десятичной точки
|
||||||
|
|
||||||
|
PROCEDURE Ln
|
||||||
|
переход на следующую строку
|
||||||
|
|
||||||
|
PROCEDURE String(s: ARRAY OF CHAR)
|
||||||
|
вывод строки s
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE In - консольный ввод
|
||||||
|
|
||||||
|
VAR Done: BOOLEAN
|
||||||
|
принимает значение TRUE в случае успешного выполнения
|
||||||
|
операции ввода и FALSE в противном случае
|
||||||
|
|
||||||
|
PROCEDURE Open
|
||||||
|
открывает консольный ввод,
|
||||||
|
также присваивает переменной Done значение TRUE
|
||||||
|
|
||||||
|
PROCEDURE Int(VAR x: INTEGER)
|
||||||
|
ввод числа типа INTEGER
|
||||||
|
|
||||||
|
PROCEDURE Char(VAR x: CHAR)
|
||||||
|
ввод символа
|
||||||
|
|
||||||
|
PROCEDURE Real(VAR x: REAL)
|
||||||
|
ввод числа типа REAL
|
||||||
|
|
||||||
|
PROCEDURE String(VAR s: ARRAY OF CHAR)
|
||||||
|
ввод строки
|
||||||
|
|
||||||
|
PROCEDURE Ln
|
||||||
|
ожидание нажатия ENTER
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Console - дополнительные процедуры консольного вывода
|
||||||
|
|
||||||
|
CONST
|
||||||
|
|
||||||
|
Следующие константы определяют цвет консольного вывода
|
||||||
|
|
||||||
|
Black = 0 Blue = 1 Green = 2
|
||||||
|
Cyan = 3 Red = 4 Magenta = 5
|
||||||
|
Brown = 6 LightGray = 7 DarkGray = 8
|
||||||
|
LightBlue = 9 LightGreen = 10 LightCyan = 11
|
||||||
|
LightRed = 12 LightMagenta = 13 Yellow = 14
|
||||||
|
White = 15
|
||||||
|
|
||||||
|
PROCEDURE Cls
|
||||||
|
очистка окна консоли
|
||||||
|
|
||||||
|
PROCEDURE SetColor(FColor, BColor: INTEGER)
|
||||||
|
установка цвета консольного вывода: FColor - цвет текста,
|
||||||
|
BColor - цвет фона, возможные значения - вышеперечисленные
|
||||||
|
константы
|
||||||
|
|
||||||
|
PROCEDURE SetCursor(x, y: INTEGER)
|
||||||
|
установка курсора консоли в позицию (x, y)
|
||||||
|
|
||||||
|
PROCEDURE GetCursor(VAR x, y: INTEGER)
|
||||||
|
записывает в параметры текущие координаты курсора консоли
|
||||||
|
|
||||||
|
PROCEDURE GetCursorX(): INTEGER
|
||||||
|
возвращает текущую x-координату курсора консоли
|
||||||
|
|
||||||
|
PROCEDURE GetCursorY(): INTEGER
|
||||||
|
возвращает текущую y-координату курсора консоли
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Math - математические функции
|
||||||
|
|
||||||
|
CONST
|
||||||
|
|
||||||
|
pi = 3.141592653589793D+00
|
||||||
|
e = 2.718281828459045D+00
|
||||||
|
|
||||||
|
PROCEDURE IsNan(x: REAL): BOOLEAN
|
||||||
|
возвращает TRUE, если x - не число
|
||||||
|
|
||||||
|
PROCEDURE IsInf(x: REAL): BOOLEAN
|
||||||
|
возвращает TRUE, если x - бесконечность
|
||||||
|
|
||||||
|
PROCEDURE sqrt(x: REAL): REAL
|
||||||
|
квадратный корень x
|
||||||
|
|
||||||
|
PROCEDURE exp(x: REAL): REAL
|
||||||
|
экспонента x
|
||||||
|
|
||||||
|
PROCEDURE ln(x: REAL): REAL
|
||||||
|
натуральный логарифм x
|
||||||
|
|
||||||
|
PROCEDURE sin(x: REAL): REAL
|
||||||
|
синус x
|
||||||
|
|
||||||
|
PROCEDURE cos(x: REAL): REAL
|
||||||
|
косинус x
|
||||||
|
|
||||||
|
PROCEDURE tan(x: REAL): REAL
|
||||||
|
тангенс x
|
||||||
|
|
||||||
|
PROCEDURE arcsin(x: REAL): REAL
|
||||||
|
арксинус x
|
||||||
|
|
||||||
|
PROCEDURE arccos(x: REAL): REAL
|
||||||
|
арккосинус x
|
||||||
|
|
||||||
|
PROCEDURE arctan(x: REAL): REAL
|
||||||
|
арктангенс x
|
||||||
|
|
||||||
|
PROCEDURE arctan2(y, x: REAL): REAL
|
||||||
|
арктангенс y/x
|
||||||
|
|
||||||
|
PROCEDURE power(base, exponent: REAL): REAL
|
||||||
|
возведение числа base в степень exponent
|
||||||
|
|
||||||
|
PROCEDURE log(base, x: REAL): REAL
|
||||||
|
логарифм x по основанию base
|
||||||
|
|
||||||
|
PROCEDURE sinh(x: REAL): REAL
|
||||||
|
гиперболический синус x
|
||||||
|
|
||||||
|
PROCEDURE cosh(x: REAL): REAL
|
||||||
|
гиперболический косинус x
|
||||||
|
|
||||||
|
PROCEDURE tanh(x: REAL): REAL
|
||||||
|
гиперболический тангенс x
|
||||||
|
|
||||||
|
PROCEDURE arcsinh(x: REAL): REAL
|
||||||
|
обратный гиперболический синус x
|
||||||
|
|
||||||
|
PROCEDURE arccosh(x: REAL): REAL
|
||||||
|
обратный гиперболический косинус x
|
||||||
|
|
||||||
|
PROCEDURE arctanh(x: REAL): REAL
|
||||||
|
обратный гиперболический тангенс x
|
||||||
|
|
||||||
|
PROCEDURE round(x: REAL): REAL
|
||||||
|
округление x до ближайшего целого
|
||||||
|
|
||||||
|
PROCEDURE frac(x: REAL): REAL;
|
||||||
|
дробная часть числа x
|
||||||
|
|
||||||
|
PROCEDURE floor(x: REAL): REAL
|
||||||
|
наибольшее целое число (представление как REAL),
|
||||||
|
не больше x: floor(1.2) = 1.0
|
||||||
|
|
||||||
|
PROCEDURE ceil(x: REAL): REAL
|
||||||
|
наименьшее целое число (представление как REAL),
|
||||||
|
не меньше x: ceil(1.2) = 2.0
|
||||||
|
|
||||||
|
PROCEDURE sgn(x: REAL): INTEGER
|
||||||
|
если x > 0 возвращает 1
|
||||||
|
если x < 0 возвращает -1
|
||||||
|
если x = 0 возвращает 0
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE File - работа с файлами
|
||||||
|
|
||||||
|
CONST
|
||||||
|
|
||||||
|
OPEN_R = 0
|
||||||
|
OPEN_W = 1
|
||||||
|
OPEN_RW = 2
|
||||||
|
|
||||||
|
SEEK_BEG = 0
|
||||||
|
SEEK_CUR = 1
|
||||||
|
SEEK_END = 2
|
||||||
|
|
||||||
|
PROCEDURE Create(FName: ARRAY OF CHAR): INTEGER
|
||||||
|
создает новый файл с именем FName (полное имя с путем),
|
||||||
|
открывет файл для записи и возвращает идентификатор файла
|
||||||
|
(целое число), в случае ошибки, возвращает -1
|
||||||
|
|
||||||
|
PROCEDURE Open(FName: ARRAY OF CHAR; Mode: INTEGER): INTEGER
|
||||||
|
открывает существующий файл с именем FName (полное имя с
|
||||||
|
путем) в режиме Mode = (OPEN_R (только чтение), OPEN_W
|
||||||
|
(только запись), OPEN_RW (чтение и запись)), возвращает
|
||||||
|
идентификатор файла (целое число), в случае ошибки,
|
||||||
|
возвращает -1
|
||||||
|
|
||||||
|
PROCEDURE Read(F, Buffer, Count: INTEGER): INTEGER
|
||||||
|
Читает данные из файла в память. F - числовой идентификатор
|
||||||
|
файла, Buffer - адрес области памяти, Count - количество байт,
|
||||||
|
которое требуется прочитать из файла; возвращает количество
|
||||||
|
байт, которое было прочитано из файла
|
||||||
|
|
||||||
|
PROCEDURE Write(F, Buffer, Count: INTEGER): INTEGER
|
||||||
|
Записывает данные из памяти в файл. F - числовой идентификатор
|
||||||
|
файла, Buffer - адрес области памяти, Count - количество байт,
|
||||||
|
которое требуется записать в файл; возвращает количество байт,
|
||||||
|
которое было записано в файл
|
||||||
|
|
||||||
|
PROCEDURE Seek(F, Offset, Origin: INTEGER): INTEGER
|
||||||
|
устанавливает позицию чтения-записи файла с идентификатором F
|
||||||
|
на Offset, относительно Origin = (SEEK_BEG - начало файла,
|
||||||
|
SEEK_CUR - текущая позиция, SEEK_END - конец файла),
|
||||||
|
возвращает позицию относительно начала файла, например:
|
||||||
|
Seek(F, 0, 2) - устанавливает позицию на конец файла и
|
||||||
|
возвращает длину файла; при ошибке возвращает -1
|
||||||
|
|
||||||
|
PROCEDURE Close(F: INTEGER)
|
||||||
|
закрывает ранее открытый файл с идентификатором F
|
||||||
|
|
||||||
|
PROCEDURE Delete(FName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
удаляет файл с именем FName (полное имя с путем),
|
||||||
|
возвращает TRUE, если файл успешно удален
|
||||||
|
|
||||||
|
PROCEDURE Exists(FName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
возвращает TRUE, если файл с именем FName (полное имя)
|
||||||
|
существует
|
||||||
|
|
||||||
|
PROCEDURE Load(FName: ARRAY OF CHAR; VAR Size: INTEGER): INTEGER
|
||||||
|
загружает в память существующий файл с именем FName (полное имя с
|
||||||
|
путем), возвращает адрес памяти, куда был загружен файл,
|
||||||
|
записывает размер файла в параметр Size;
|
||||||
|
при ошибке возвращает 0
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Read - чтение основных типов данных из файла F
|
||||||
|
|
||||||
|
Процедуры возвращают TRUE в случае успешной операции чтения
|
||||||
|
|
||||||
|
PROCEDURE Char(F: INTEGER; VAR x: CHAR): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Int(F: INTEGER; VAR x: INTEGER): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Real(F: INTEGER; VAR x: REAL): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Boolean(F: INTEGER; VAR x: BOOLEAN): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Set(F: INTEGER; VAR x: SET): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Card16(F: INTEGER; VAR x: SYSTEM.CARD16): BOOLEAN
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Write - запись основных типов данных в файл F
|
||||||
|
|
||||||
|
Процедуры возвращают TRUE в случае успешной операции записи
|
||||||
|
|
||||||
|
PROCEDURE Char(F: INTEGER; x: CHAR): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Int(F: INTEGER; x: INTEGER): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Real(F: INTEGER; x: REAL): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Boolean(F: INTEGER; x: BOOLEAN): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Set(F: INTEGER; x: SET): BOOLEAN
|
||||||
|
|
||||||
|
PROCEDURE Card16(F: INTEGER; x: SYSTEM.CARD16): BOOLEAN
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Dir - работа с папками
|
||||||
|
|
||||||
|
PROCEDURE Create(DirName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
создает папку с именем DirName, все промежуточные папки
|
||||||
|
должны существовать
|
||||||
|
|
||||||
|
PROCEDURE Remove(DirName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
удаляет пустую папку с именем DirName
|
||||||
|
|
||||||
|
PROCEDURE Exists(DirName: ARRAY OF CHAR): BOOLEAN
|
||||||
|
возвращает TRUE, если папка с именем DirName существует
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE DateTime - дата, время
|
||||||
|
|
||||||
|
CONST ERR = -7.0E5
|
||||||
|
|
||||||
|
PROCEDURE Now(VAR Year, Month, Day, Hour, Min, Sec, MSec: INTEGER)
|
||||||
|
возвращает в параметрах компоненты текущей системной даты и
|
||||||
|
времени
|
||||||
|
|
||||||
|
PROCEDURE NowEncode(): REAL;
|
||||||
|
возвращает текущую системную дату и
|
||||||
|
время (представление REAL)
|
||||||
|
|
||||||
|
PROCEDURE Encode(Year, Month, Day,
|
||||||
|
Hour, Min, Sec, MSec: INTEGER): REAL
|
||||||
|
возвращает дату, полученную из компонентов
|
||||||
|
Year, Month, Day, Hour, Min, Sec, MSec;
|
||||||
|
при ошибке возвращает константу ERR = -7.0D5
|
||||||
|
|
||||||
|
PROCEDURE Decode(Date: REAL; VAR Year, Month, Day,
|
||||||
|
Hour, Min, Sec, MSec: INTEGER): BOOLEAN
|
||||||
|
извлекает компоненты
|
||||||
|
Year, Month, Day, Hour, Min, Sec, MSec из даты Date;
|
||||||
|
при ошибке возвращает FALSE
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Args - параметры программы
|
||||||
|
|
||||||
|
VAR argc: INTEGER
|
||||||
|
количество параметров программы, включая имя
|
||||||
|
исполняемого файла
|
||||||
|
|
||||||
|
PROCEDURE GetArg(n: INTEGER; VAR s: ARRAY OF CHAR)
|
||||||
|
записывает в строку s n-й параметр программы,
|
||||||
|
нумерация параметров от 0 до argc - 1,
|
||||||
|
нулевой параметр -- имя исполняемого файла
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE Utils - разное
|
||||||
|
|
||||||
|
PROCEDURE Utf8To16(source: ARRAY OF CHAR;
|
||||||
|
VAR dest: ARRAY OF CHAR): INTEGER;
|
||||||
|
преобразует символы строки source из кодировки UTF-8 в
|
||||||
|
кодировку UTF-16, результат записывает в строку dest,
|
||||||
|
возвращает количество 16-битных символов, записанных в dest
|
||||||
|
|
||||||
|
PROCEDURE PutSeed(seed: INTEGER)
|
||||||
|
Инициализация генератора случайных чисел целым числом seed
|
||||||
|
|
||||||
|
PROCEDURE Rnd(range: INTEGER): INTEGER
|
||||||
|
Целые случайные числа в диапазоне 0 <= x < range
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
MODULE WINAPI - привязки к некоторым API-функциям Windows
|
||||||
Reference in new issue
Block a user