[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]