(*~\Глагол\Отделы\Оболочка\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                        ОТДЕЛ ПолеПриложение;
(*============================================================================* 
(* НАЗНАЧЕНИЕ:  выбор  головного отдела
\\                                 для приложения Оболочка.отд                *)
 *============================================================================*)

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

ПОСТ
                (* действия *)
  дНастройки=1;

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

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

  промежуток=2;                                  (* промежуток между кнопками *)
                             колонок=42;
                                     занято = длДалее+промежуток+длОтмена;

              позДалее  = 1+(колонок-занято-1) ДЕЛИТЬ 2;

  позОтмена = позДалее+длДалее+промежуток;
ПЕР
      полеД:Поле.Доступ;
  подложкаД:Подложка.Доступ;
   памяткаД:Памятка.Доступ;

  черта1,
  черта2,
  черта3:Черта.Доступ;

  холстД:Холст.Доступ; 
  крестикД:Крестик.Доступ;
  меткаД:Метка.Доступ;

  кнопДалееД,
  кнопОтменаД,
  кнопНастройкиД:Кнопка.Доступ;

УКАЗ
  памяткаД:=Памятка.Найти("Приложение");
                                                              (* создаём поле *)
         полеД:=    Поле.Создать(0,0,17,колонок,окружениеД,ВКЛ,Приём);

                                                            (* создаём наделы *)
     подложкаД:=Подложка.Создать(0,0,0,0,"Приложение");
        холстД:=Холст.СоздатьСтроку          (3,2,-2,памяткаД);
        меткаД:=   Метка.Создать(2,2,"~Головной отдел",холстД); 

                                                             (* создаём черты *)
        черта1:=   Черта.Создать         (5,0,1,0);
      крестикД:= Крестик.Создать(7,2,"~Малый Преобразователь Глагола"); 
        черта2:=   Черта.Создать         (9,0,1,0);
кнопНастройкиД:=  Кнопка.Создать(11,12,"[ ~Настройки (М)ПГ ]",дНастройки,ОТКЛ); 
        черта3:=   Черта.Создать         (-3,0,1,0);
    кнопДалееД:=  Кнопка.Создать(-2,позДалее,ЦепьДалее,Поле.состДалее,ВКЛ); 
   кнопОтменаД:=  Кнопка.Создать(-2,позОтмена,ЦепьОтмена,Поле.состОтмена,ВКЛ); 

                                                          (* заполняем наделы *)
  крестикД.отмечен:=ПолеНастройки.ВклМалыйПГ;

                    (* добавляем наделы в порядке отрисовки и получения ввода *)
  Поле.ДобавитьНадел(полеД,подложкаД);
  Поле.ДобавитьНадел(полеД,холстД);
  Поле.ДобавитьНадел(полеД,черта1);
  Поле.ДобавитьНадел(полеД,меткаД);
  Поле.ДобавитьНадел(полеД,черта2);
  Поле.ДобавитьНадел(полеД,крестикД);
  Поле.ДобавитьНадел(полеД,черта3);
  Поле.ДобавитьНадел(полеД,кнопНастройкиД);
  Поле.ДобавитьНадел(полеД,кнопДалееД);
  Поле.ДобавитьНадел(полеД,кнопОтменаД);

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

(*..........................................................проверить <полеД> *)
    Поле.Рисовать(полеД);
  ПОВТОРЯТЬ
    Поле.Проверить(полеД);
    ЕСЛИ 
         полеД.состояние = дНастройки
    ТО
      Холст.СтрокуВПамятку(холстД);
      ПолеНастройки.ВклМалыйПГ:=крестикД.отмечен;

      ПолеНастройки.Выполнить(полеД);

      полеД.состояние:=Поле.состРабота
    КОН
  ДО полеД.состояние # Поле.состРабота;
(*..................................................восстанавливаем окружение *)
  Поле.Рисовать(окружениеД);
(*.......................................................перебрасываем данные *)
  ЕСЛИ
       полеД.состояние = Поле.состДалее
  ТО
    Холст.СтрокуВПамятку(холстД);
    ПолеНастройки.ВклМалыйПГ:=крестикД.отмечен
  КОН
КОН Выполнить;

КОН ПолеПриложение.
