[an error occurred while processing this directive]

.сс

5 Расширения языка Паскаль

_______________________________________________________________

Расширения могут разбиты на несколько категорий. Это новые процедуры, функции и расширения синтаксиса языка. Дополнительные возможности использования аппаратных особенностей ПЭВМ "Агат", прежде всего графики. А также возможность использования в программах фрагментов на ассемблере.

Ниже описываются новые процедуры и функции.

5.1 Графические процедуры и функции

procedure mode(modeNumber : integer);
procedure vdu(byte1, byte2, ...byte64 : integer);
procedure plot(plotOption, x, y : integer);
function  point(xCoord, yCoord : integer) :
integer;

Все они имеют соответствующие операторы BBC Бейсика. Небольшое отличие заключается в использовании процедуры VDU, в Паскале нельзя вводить данные для VDU через ';'.

Все другие графические команды могут быть сэмулированы с помощью процедуры VDU, ниже приведена программа, описывающая их:

.сс

.ми0

program graphics(input,output);
{ Define the BBC BASIC graphics functions }

const
store_= 0;
or_= 1;
and_= 2;
eor_= 3;
not_= 4;
nop_= 5;

black= 0;
red= 1;
green= 2;
yellow= 3;
blue= 4;
magenta= 5;
cyan= 6;
white= 7;
fBlack= 8;
fRed= 9;
fGreen= 10;
fYellow= 11;
fBlue= 12;
fMagenta= 13;
fCyan= 14;
fWhite= 15;

procedure move(x, y : integer);
const
moveCode = 4;
begin
plot(moveCode, x, y)
end;

procedure draw(x, y : integer);
const
drawCode = 5;
begin
plot(drawCode, x, y)
end;

procedure colour(col : integer)
const
colourCode = 17;
begin
vdu(colourCode, col)
end;

procedure gcol(plotMode : integer; col : integer);
const
gcolCode = 18;
begin
vdu(gcolCode, plotMode, col)
end;

procedure clg;
const
clgCode = 16;
begin
vdu(clgCode)
end;

procedure cls;
const
clsCode = 12;
begin
vdu(clsCode)
end;

procedure tab(x, y : integer);
const
tabCode = 31;
begin
vdu(tabCode, x, y)
end;

begni { main }
end.

.нф

Здесь добавлена новая процедура 'tab', которой не было в Бейсике. Она перемещает курсор к указанной позиции.

Процедуры соответствующие всем кодам VDU и PLOT не приведены, так как теперь Вы сможете написать их самостоятельно.

5.2 Процедура OSCLI

procedure oscli(command : string);

Эта процедура прередает входную строку командному интерпретатору операционной системы (аналогично оператору OSCLI в Бейсике). Тип 'string' определяется как:

type string = packed array[1..len] of char;

Где len, целая константа от 2 до 255. Естественно, строку можно передать в виде:

oscli('cat')

Программа ниже, непрерывно принимает строку от пользователя и посылает ее операционной системе. Заметьте, что не надо ставить символ перевода строки в конце вводимой строки - Паскаль делает это автоматически. Не забудьте, что вызов процедуры oscli('.') приведет к ошибке, так как '.' имеет тип char. Правильным вариантом будет oscli('. ').

program oscli(input,output);

.ми0
const
len = 10;

type
subscript = 1..len;
string = packed array[subscript] of char;

var
lin : string;
ch : char;
i : integer;

begin
repeat
lin := '';{Len spaces}
write('Command: ');
i := 1;
while not eoln and (i <= len) do
begin
read(ch);
lin[i] := ch;
i := i + 1
end;
readln;
oscli(lin)
until lin = ''{Len spaces}
end.

.нф

5.3 Множество вызовов операционной системы

function adval(channel : integer) : integer;

function inkey(delay : integer) : integer;

Функции 'adval' и 'inkey' дают тот же самый результат, что и в Бейсике. Так 'inkey' может быть использована для ожидания нажатия любой клавиши или для определения состояния какой-то определенной клавиши. Для получения большей информации обратитесь к руководству "Программирование на Бейсике в среде ОС ОНИКС".

5.4 Функции преобразования строк

function ival(str : string) : integer;

function rval(str : string) : real;

Эти функции обеспечивают быстрое преобразование между строковыми и численными типами. Строка преобразуется в целое или вещественное значение в функциях 'ival' и 'rval' соответственно. Число воспринимается до первого нецифрового символа. Если строка не начинатся с цифрового символа, выдается сообщение об ошибке, например:

rval('1.23fred') возвращает значение 1.23

ival('fred1') генерирует ошибку

5.5 Процедуры работы с файлами

procedure reset(fileName : fileType; externalName : string);

procedure rewrite(fileName : fileType; externalName : string);

Эти расширенные версии стандартных процедур 'reset' и 'rewrite' позволяют назначать файлам имена файлов в текущей файловой системы. Первый параметр тотже самый, что и в стандартных вариантах. Второй параметр - имя файла в текущей файловой системе. Например:

reset(infile, 'text1');

rewrite(outfile, 'text2');

Конечно, в качестве строк могут использоваться и переменные, например:

reset(data,usersName);

Заметьте, что имеется два типа файлов:временный и постоянный. Временные файлы имеют имена типа 'pas___0', 'pas___1' и т.д. Они создаются стандартными операторами 'reset' и 'rewrite' и уничтожаются после использования.

Постоянные файлы образуются в результате использования расширенного варианта процедур 'reset' и 'rewrite', и не уничтожаются после завершения программы.

Если вместо имени файла указывается пустая строка, в качестве файла ввода/вывода используется консоль (клавиатура/экран).

При вводе с клавиатуры символ с кодом &80 воспринимается как конец файла (генерируется нажатием f0'').

.ст pascal.5b

[an error occurred while processing this directive]