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