135) с заголовком "My first window" ("Мое первое окно"). Вы-
сота окна будет составлять 4 строки, а ширина - 34 столбца;
оно будет расположено так, что его левый верхний угол будет
находиться в 1-ой строке и 20-ом столбце экрана (обратите
внимание, что как строки, так и столбцы нумеруются от 0).
С другой стороны, предикат
makewindow(2,7,135,"count the rows",8,20,19,34)
приведет к выдаче сообщения об ошибке
the parameters in makewindow are illegal
(некорректные параметры окна).
Действительно, разместить окно высотой 19, начиная со строки
8, невозможно (8+19>25!). Отметим, что если переменные Height
и Width связаны со значениями 10 и 20 соответственно, то фак-
тическая область экрана, выделенная под окно, составит 8
строк и 18 столбцов при условии, что это окно ограничено рам-
кой (т.е. переменная FrameAttr связана со значением, отличным
от нуля); это объясняется тем, что рамка занимает две строки
или два столбца.
Чтение и запись при работе с окнами
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Стандартные предикаты read, readint, readchar, write и n1
автоматически действуют на то окно, которое сделано послед-
ним. Так, в программе 26 сообщения будут выводиться в соот-
ветствующее окно (сначала в окно 1, а затем в окно 2), а пер-
вый вызов предиката readint будет работать с цифрами, набиты-
ми в окне 2. Как только будет нажата клавиша , окно 2
будет уничтожено при вызове предиката removewindow (уда-
лить_окно). Этот предикат уничтожает окно, активное в данный
момент, после чего изображение на экране возвращается в сос-
тояние, которое было до того, как это окно было "сделано".
После этого предикат readint будет работать с цифрами, кото-
рые вводятся через окно 1, а когда будет нажата клавиша ,
это окно будет уничтожено (будучи окном, активным в данный
момент времени). Следовательно, последний предикат readint
будет работать как обычно, т.е. воспринимать информацию, пос-
тупающую с нижней части экрана.
/* Программа 26 */
predicates
run
clauses
run:-
makewindow(1,20,7,"A blue window",2,5,10,50)
write("The characters are red"),
makewindow(2,184,7,"A light cyan window",14,55,10,20),
write("This window is light cyan and the "),
write("letters are black and blinc."),
write("Please type an integer to axit."),
readint(_),
removewindow,
readint(_),
write("Notice where the integer appears").
Окна могут перекрываться. Чтобы увидеть это, замените ко-
манды создания окон в программе 26 на команды
makewindow(1,20,7,"First",1,3,20,30)
и
makewindow(2,184,7,"Second",6,18,18,30),
соответственно.