logo search
TurboProlog / Документация / TOM_1

Простой редактор полей

В программе CH18EX09.PRO предикат readkey используется для построе-

ния простого редактора полей, описанного с помощью предиката scr.

Во время работы программы клавиши стрелка влево и стрелка вправо ис-

пользуются для перемещения курсора в пределах поля при его редактирова-

нии. В программе на эти клавиши можно ссылаться как на объекты left и

right соответственно. Клавиша F10 используется для завершения редактиро-

вания (и следовательно для внесения выполненных изменений). Клавиша Esc

используется для прекращения редактирования, при этом внесенные изменения

игнорируются. Если нажать на любую другую клавишу, то компьютер издает

звуковой сигнал.

Если программа CH18EX08.PRO записана на диске в файл с именем

EX08PT01.PRO, то описание readkey может быть легко включено в программу

CH18EX09.PRO с помощью директивы компилятора include.

/* Program CH18EX09.PRO. */

include "CH18PT01.pro" /* CH18EX08.PRO, excluding the goal */

domains

row, col, length = integer

field = f(row, col, length)

position = pos(row, col)

predicates

scr(field, position, key)

goal

Row=10, Col=10, Length=30, cursor(Row, Col),

makewindow(1, 23, 1, "Пример редактора", 0, 0, 25, 80),

write("Редактируйте текст. Используйте клавиши управления

курсором"),

readkey(Key),

field_attr(Row, Col, Length, 112),

scr(f(Row, Col, Length), pos(Row, Col), Key), nl, nl,

field_str(Row, Col, Length, Contents),

write("Редактируйте содержимое: ", Contents).

clauses

scr(_, _, esc) :- !, fail.

scr(_, _, fkey(10)) :- !.

scr(f(Row, Col, L), pos(R, C), char(Ch)) :-

scr_char(R, C, Ch), C1=C+1, C1<Col+L, cursor(R, C1),

readkey(Key), scr(f(Row, Col, L), pos(R, C1), Key).

scr(f(Row, Col, L), pos(R, C), right) :-

C1=C+1, C1<Col+L, cursor(R, C1), readkey(Key),

scr(f(Row, Col, L), pos(R, C1), Key).

scr(f(Row, Col, L), pos(R, C), left) :-

C1=C-1, C1>=Col, cursor(R, C1), readkey(Key),

scr(f(Row, Col, L), pos(R, C1), Key).

scr(Field, Pos, _) :-

beep, readkey(Key), scr(Field, Pos, Key).

В качестве упражнения дополните программу CH18EX09.PRO. новыми пре-

дикатами, расширяющими возможности редактора полей за счет функций insert

(вставить) и delete (удалить), позволяющих сдвигать часть поля справа на-

лево.