
- •1.3.3. Классы
- •1.3.4. Возможность применения в специальных областях
- •2.1. Синтаксис
- •2.2. Семантика ,; V-
- •2.2.1. Подклассы
- •2.2.2. Сочленение . -
- •2.2.3. Виртуальные величины
- •4.3.2.2. Генераторы объектов ,
- •4.3.2.3. Локальный объект
- •4.3.2.4. Оперативная квалификация «
- •7. Дистанционное обращение
- •7.1.2. Семантика
- •10.8.2. Семантика
- •11.3.2. Семантика
- •1 12.1. Последовательности псевдослучайных чисел
- •14.2.1.2. Семантика-
11.3.2. Семантика
. i - '
Объект класса outfile служит для представления последовательно организованного выходного файла.
Передача образа из^текста image в файл осуществляется процедурой outimage. В случае когда длина текста image не соответствует свойствам внешнего файла, эта процедура действует по правилам, определенным при реализации языка. После передачи текста процедура заполняет image пробе- -лами и устанавливает индикатор позиции равным единице. • Процедура close вызывает один раз процедуру outimage, если указатель позиции отличается от единицы. В остальном процедура действует по схеме, приведенной в разд. П.1.2._
Процедура outchar трактует файл как непрерывный поток литер.
Остальные процедуры обеспечивают средства для «поэле ментного» вывода. Каждый элемент редактируется в неко торый подтекст image, на первую литеру этого подтекста ука зывает указатель позиции текста image, а длина подтекста равна параметру w. Указатель -позиции увеличивается на зна чение параметра т. Если элемент не умещается до конца текста image, то перед редактированием происходит обраще ние к процедуре outimage. '
Процедуры outint, outreal и outfrac определяются в терминах соответствующих процедур редактирования, принадлежащих тексту image, и имеют дополнительный параметр типа integer, который указывает длину формируемого подтекста.
Для процедуры outtext размер элемента равен длине текстового параметра. Заметим, что этот параметр вызывается по значению, т. е. (строка) является возможным фактическим параметром для этой процедуры.
Пример ■ 1:
Следующий фрагмент программы мог бы быть процедурой error для примера, приведенного в разд. 11.2.2.
procedure error; begin character c\
outtext ('столбец7)] outint (/, 4); setpos (pos — 1); с : = inchar ; 1 ' if c^V'Ac^V1 then outtext (' _засорен7);
else outtext (*_имеет_слишком_много^элементов9); if сФ"*" then begin .sysout,setpos (sysout. pos — 15);
outtext ('muaoJ) end * .
else L: if inchar^,,*" then go to L; outimage; go to next ч end error;
И.4. класс directfile
11.4.1. Определение
FILE class directfile; virtual: procedure locate, endfile,
inimage, outimage; begin integer LOC; integef procedure location; location: = LOC ;
procedure locate (/); integer /;
begin ; LOC : = г end locate;
procedure open begin ; locate (1) end open;
procedure close ;
Boolean procedure endfile ; :. ;
procedure inimage;
begin if endfile then ERROR ;....'....; locate (LOC + 1);
setpos (1); end inimage; procedure outimage;
begin ; locate (LOC + 1); image: = notext;
setpos (1) end outimage;
character procedure inchar ;
Boolean procedure lastitem ;
integer procedure inint ;
real procedure inreal ;
integer procedure infrac ;
text procedure intext ;
procedure outchar ;
text procedure FIELD ;
procedure outint ;
procedure outfix ;
procedure outreal ;
procedure outfrac ;
procedure outtext ;
end directfile; . .
i ■
■
11.4.2. Семантика
Объект класса directfile служит для представления внеш него файла, в котором отдельные образы адресуемы К0№МИ (целыми) числами —номерами, ' ■"
Переменная LOC обычно содержит порядковый номер некоторого внешнего образа. Процедура location дает доступ к текущему значению переменной LOC. Процедура locate может быть использована для присваивания этой переменной данного значения. Присваивание может сопровождаться определенными в реализации проверками и командами обращения к устройству внешней памяти, соответствующему данному файлу.
Процедура open разыскивает первый образ файла. В остальном она следует схеме, приведенной в разд. 11.1.2.
Процедура endfile вырабатывает значение true тогда и только тогда, когда текущее значение переменной LOC не указывает ни на какой образ внешнего файла. Процедура определяется конкретной реализацией.
Процедура inimage передает в текст image копию внешнего образа, на который в данный момент указывает переменная LOC (если таковой образ имеется). Затем значение переменной LOC увеличивается на единицу процедурой locate. Если файл не содержит образа с порядковым номером, равным значению LOC, то действие процедуры inimage определяется реализацией языка. В остальном эта процедура аналогична процедуре из разд. 11.2.
Процедура outimage передает копию текстового значения -переменной image на внешний файл, добавляя тем самым к файлу еще один внешний образ, порядковый номер которого равен текущему значению переменной LOC. Если файл не вмещает передаваемого текстового значения в качестве внешнего образа, то выдается сообщение об ошибке. Если файл уже содержал некоторый образ с тем же самым порядковым номером, то такой образ уничтожается. Значение переменной LOC увеличивается на единицу процедурой locate. В остальном процедура outimage аналогична процедуре из разд. 11.3.
Другие процедуры класса directfile аналогичны соответствующим процедурам из разд. 11.2. и 11.3,
11.5. класс prlntfile
11.5.1. Определение
outfile class prlntfile;
begin Integer LINES PER PAGE, SPACING, LINE;
Integer procedure line; line : = LINE;
procedure lines per page {n)\ Integer n\
begin.,..} LINES PER PAGE; = /z end;
procedure spacing (/г); integer n\ "■>'■'
begin ; SPACING : -n end ;
procedure eject (n); integer n;
begin if /z<OAn>LINES PER PAGE then ERROR;
.... ; LINE : = n end eject;
procedure open .... begin .... ; eject (I); .... end ; •■ procedure close .... begin .... ; if pos ф\
. then outimage end;
procedure outimage; . F ^ \ -
begin ; *
image: = notext; setpos (1);
■■' LINE : = LINE + SPACING;
if LINE > LINES PER PAGE then eject (1) end; " •
LINES PER PAGE:-...... ; '
SPACING: -1
end printfile; . '
W m ■
* , " II
■ * >
11.5.2. Семантика
Объект класса printfile служит для представления выходного файла, реализуемого печатающим устройством. Класс printfi e является подклассом класса outfile. Переменная image в объекте класса printfile представляет строчку (является образом строчки) на печатной странице.
.Переменная LINES PER PAGE указывает максимальное число физических строчек, которые могут быть напечатаны на каждой странице, включая пробельные строчки. В момент порождения объекта этой переменной присваивается определяемое реализацией значение. Для изменения этого зна-' чения можно воспользоваться процедурой lines per page.
Переменная SPACING указывает количество строк, про пускаемых между двумя последовательными операциями вы дачи на печать. Переменная получает значение 1 в момент порождения объекта. Ее значение можно изменить посред ством процедуры spacing. (В некоторой реализации эта про цедура может иметь побочный эффект, состоящий в измене нии значения переменной LINE.) Если переменная SPACING равна 0, то последовательные образы печатаются на одном и том же физическом месте (без протяжки бумаги)., "
Переменная LINE указывает порядковый номер строчки, подлежащей выдаче на печать, _ считая от начала текущей страницы. Значение этой переменной можцр1.11олучить
цедурой line, ■ ... .. ' ,',[ ■-
Процедура eject служит для установки печатающего устройства на строчку, указываемую параметром п. Предусматриваются следующие.два случая:
l<n<LINE:
очередной образ будет на печатан на строчке номер ri ;' • " ■ . следующей страницы;
LINE < п < LINES PER PAGE:
очередной образ будет на-
- . печатан на строчке номер п
текущей страницы.
Процедура outimage работает по правилам разд. 11.3. Кроме того, она обновляет переменную LINE и заставляет ее указывать на первую строчку следующей страницы, когда-текущая страница оказывается заполненной.
Процедуры open и close следуют правилам разд. 11.1. Кроме того, процедура open устанавливает печатающее устройство на начало страницы, a close выдает текущее значение текста image, если pos отлична от единицы.
\2. СЛУЧАЙНЫЙ ВЫБОР
*