(*~\Глагол\Отделы\Поле\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                         ОТДЕЛ ПолеСВосклицанием;
(*============================================================================* 
 * НАЗНАЧЕНИЕ: вывод записки
 *============================================================================*)

ИСПОЛЬЗУЕТ
  Надел,
  Подложка,
  Записка,
  Кнопка,
  Черта,
  Поле,
        (*  \Глагол\               *)
  Ввод    ИЗ "..\..\Отделы\Обмен\";

(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА                                                            (*(Поле.Вид)*)
       Приём(полеД:Поле.Доступ;
          посылка+:Ввод.нПосылка); (* = Пустой.Вид; - абстрактный опорный набор *)
(*
 * получить и обработать управляющие послания
 *)
УКАЗ      (*
           * полеД:Поле.Доступ - НЕ надо преобразовывать
           *)
                             (* анализ многоформия (полиморфизма) у <посылка> = Пустой.Вид *)
  ДЛЯ     посылка ВИДА
  | Ввод.нОтКлавиш:
      ЕСЛИ
         (посылка.код = 1BH) (* Esc *)
        ИЛИ
         (посылка.код = 79H) (* F10 *)
      ТО
             полеД.состояние:=Поле.состДалее;
          посылка.код:=0
      КОН
  | Кнопка.нПосылка:
             полеД.состояние:=посылка.кнопкаД.действие
  ИНАЧЕ
  КОН             
КОН Приём;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА                                                            (*(Поле.Вид)*)
       Выполнить-(                         (* Цель:  осуществить вывод текста *)
(*============================================================================*)
(* До: *)   
    заголовок-:ЦЕПЬ;                       (* заголовок подложки     *)
        строк :ЦЕЛ;                        (* желаемая высота текста *)
      колонок :ЦЕЛ;                        (* желаемая ширина текста *)
   окружениеД :Поле.Доступ;                (* окружающее поле        *)
        текст-:ЦЕПЬ                        (* выводимый текст        *)
                 );
(*============================================================================*)
ПОСТ
                                     (* цепочка для кнопки *)
    ЦепьДалее="[ Далее ]";
                               (* длина цепочек для кнопки *)
  ДлЦепиДалее=ДЛИНА(ЦепьДалее);
ПЕР
       полеД:    Поле.Доступ;
   подложкаД:Подложка.Доступ;
    запискаД: Записка.Доступ;
      чертаД:   Черта.Доступ;
  кнопДалееД:  Кнопка.Доступ;

УКАЗ
                           (* вычисление местоположения кнопок *)
  ЕСЛИ
        ДлЦепиДалее > колонок
  ТО
    колонок:=ДлЦепиДалее
  КОН;

(* создаём поле *)

  полеД:=Поле.Создать(0,0,строк+4,колонок+4,окружениеД,ВКЛ,Приём (* посылок для <полеД> *) );

(* создаём наделы *)

  подложкаД :=Подложка.Создать (0,0,0,0,заголовок);
  запискаД  := Записка.Создать (1,2,-3,-2,текст);
  чертаД    :=   Черта.Создать (-3,0,1,0);
  кнопДалееД:=  Кнопка.Создать (-2,1+(колонок-ДлЦепиДалее+1) ДЕЛИТЬ 2,ЦепьДалее,Поле.состДалее,ВКЛ); 

(* добавляем наделы в порядке отрисовки и получения ввода *)

  Поле.ДобавитьНадел(полеД,подложкаД);
  Поле.ДобавитьНадел(полеД,запискаД);
  Поле.ДобавитьНадел(полеД,чертаД);
  Поле.ДобавитьНадел(полеД,кнопДалееД);

(* основная работа *)

    Поле.Рисовать(полеД);
  ПОВТОРЯТЬ
    Поле.Проверить(полеД)
  ДО полеД.состояние # Поле.состРабота;
                                    (* восстанавливаем окружение *)
    Поле.Рисовать(окружениеД)
КОН Выполнить;

КОН ПолеСВосклицанием.
