Враховуючи те, що для імен можна застосовувати тільки латинські літери, всі назви параметрів подані англійською.
Умовні позначення:
<>— обов'язковий параметр;
[]— не обов'язковий параметр.
Умовні позначення:
<>— обов'язковий параметр;
[]— не обов'язковий параметр.
Опис директив (макросів):
{$<directive><switch>, <directive><switch>,..}
Місце опису директив (макросів) є довільним. Деякі директиви мають більш, ніж одне значення. Наприклад:
$I <filename.pas> та $I<switch>;
$L<switch> $L<filename.obj>.
Більшість директив має однакову форму запису, але є й вийнятки, на кшталт:
$M <value>, <value>, <value>;
$IFDEF <name>; $ELSE; $INC.
{$<directive><switch>, <directive><switch>,..}
Місце опису директив (макросів) є довільним. Деякі директиви мають більш, ніж одне значення. Наприклад:
$I <filename.pas> та $I<switch>;
$L<switch> $L<filename.obj>.
Більшість директив має однакову форму запису, але є й вийнятки, на кшталт:
$M <value>, <value>, <value>;
$IFDEF <name>; $ELSE; $INC.
Приклад:
{$A-,B-,D+,E-,F-,G-,I-,L+,N+,O-,P-,Q+,R-,S+,T-,V+,X+,Y+}
{$M 16384,0,655360}
{$I i8042.pas}
var f: File;
begin
Assign(f, 'file');
{$I-}
Reset(f, $200);
{$I+}
if IOResult<> 0 then
Rewrite(f, $200);
end.
Назва програми (ім'я головного модулю):
program <name>[(input, output)];
program <name>[(input, output)];
Приклад:
{$X+}
program t80c187;
function New: ByteBool;
begin
end;
begin
t80c187.New;
New;
end.
Підключення відкомпільованих модулів:
uses <unitNam0>, <unitNam1>,.. ;
Порядок підключення оверлейних модулів інший, та здійснюється за допомогою директиви $O.
uses <unitNam0>, <unitNam1>,.. ;
Порядок підключення оверлейних модулів інший, та здійснюється за допомогою директиви $O.
Приклад:
uses crt, dos, vbe30;
var
screen: Text;
begin
Crt.AssignCrt(screen);
AssignCrt(screen);
end.
Опис міток:
Мітка— ціле число від 0 до 9999.
label <number0>, <number1>,..;
Мітка— ціле число від 0 до 9999.
label <number0>, <number1>,..;
Приклад:
label 0, 9999;
begin
0: goto 9999;
9999: goto 0;
end.
Опис констант:
const <name0>=<value>; <name1>=<value>,.. ;
const <name0>=<value>; <name1>=<value>,.. ;
Опис статичних змінних:
const <name3>:<type>=<value>; <name4>:<type>=<value>,.. ;
Якщо статична змінна описана в процедурі або функції, то після виклику останньої стек для змінної не резервується (місце вже є в самому коді), що дозволяє заощадити час.
const <name3>:<type>=<value>; <name4>:<type>=<value>,.. ;
Якщо статична змінна описана в процедурі або функції, то після виклику останньої стек для змінної не резервується (місце вже є в самому коді), що дозволяє заощадити час.
Опис нових типів (в тому числі процедурних і функціональних), структур та об'єктів:
type <name_0>= record end; <name_1>= <type or range>; <name_2>= object[(father's name)] [private] <variables or methods> [public] <variables or methods> end;
Опис змінних:
var <name0>, <name1>,.. : <type or range>;
var <name3>, <name4>,.. : Byte absolute <segment: offset>;
var <name0>, <name1>,.. : <type or range>;
var <name3>, <name4>,.. : Byte absolute <segment: offset>;
Приклади:
type
Pointer= record
case Byte of
$00: (ofs, seg: Word);
$01: (fulladdr: LongInt);
end;
_RGBA= record
red, green, blue: Single;
alpha: Single;
end;
_VideoBuffer= array [16*12] of _RGBA;
_Beer= (BEST, BESTER, MORE);
_Element= ^_List;
_List= record
prev: _Element;
data: _Beer;
next: _Element;
end;
_SimpleProc= Procedure;
_ByteFunc= Function: Byte;
_New= object
private
right, bottom: Integer;
procedure Destroy;(*or destructor..*)
public
left, top: Integer;
width, height: Word;
procedure Create;(*or constructor..*)
procedure Free;
end;
_Newest= object(_New)
procedure Create;
procedure Free;
end;
const
CNT= $40;
svar_0: _Beer= MORE;
svar_1: Byte= 0;
svar_0_addr: Pointer= (ofs: Ofs(svar_0); seg: Seg(svar_1));
svar_1_addr: Pointer= (fulladdr: LongInt(@svar_1));
var
counter: _Beer;
temp0, temp1, temp2: 0..Byte('2');
a: array [0..0] of array [Byte] of Byte;
b: array (.0..0, Byte.) of Word;(*(.= [ .)= ]*)
intVar: Word;
proc: Procedure (const BITS: Byte);
float10: Extended;
float4: Single;
divZeroErrorAddr: LongInt absolute $0000: $0000;
mode: LongInt absolute $0040: $0049;
crtMode: LongInt absolute mode;
procedure _New.Create; assembler;
asm
end;
procedure _New.Destroy; assembler;
asm
end;
procedure _New.Free;
begin
end;
procedure _Newest.Create;
begin
inherited Create;
end;
procedure _Newest.Free;
begin
inherited Free;
end;
begin
end.
Опис процедур та функцій (конструкторів та деструкторів):
procedure <identifier> [parameters]; [directives]
function <identifier> [parameters]: <type>; [directives]
procedure <identifier> [parameters]; [directives]
function <identifier> [parameters]: <type>; [directives]
Приклад:
const
test: Word= $0001;
var
procCall: Procedure (var DATA);
temp: Byte;
procedure SwitchLowBytes(var DATA); far;
begin
temp:= Byte(Ptr(Seg(DATA), Ofs(DATA)+ 1)^);
Byte(Ptr(Seg(DATA), Ofs(DATA)+ 1)^):= Byte(Ptr(Seg(DATA), Ofs(DATA))^);
Byte(Ptr(Seg(DATA), Ofs(DATA))^):= temp;
end;
procedure switch_low_bytes(var data);
type
_bytes: array [0..1] of Byte;
begin
temp:= _bytes(data)[0];
_bytes(data)[0]:= _bytes(data)[1];
_bytes(data)[1]:= temp;
end;
begin
procCall:= SwitchLowBytes;
WriteLn(test);
procCall(test);
WriteLn(test);
switch_low_bytes(test);
WriteLn(test);
end.
У програмі повинно бути як мінімум два оператори — це begin та end. Після кожного рядка необхідно ставити «;» (це правило не стосується операторів після яких розміщено зарезервоване слово «end», «begin», «else», вбудованого асемблеру тощо).
Кількість зарезервованих слів «begin» та «end» у програмі не обов'язково повинно збігатися.
Наприклад:
begin
asm
end;
end.
unit new;
interface
implementation
end.
type
_HBrush= record
end;
begin
end.
Присвоєння значення відбувається так:
<typed address>:= <typed address>;
<typed address>:= <value>;
Після останнього «end» необхідно поставити крапку «.»
<typed address>:= <typed address>;
<typed address>:= <value>;
Після останнього «end» необхідно поставити крапку «.»
Комментариев нет:
Отправить комментарий