(*~\Глагол\Отделы\Поле\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                            ОТДЕЛ Крестик;
(*============================================================================* 
 * НАЗНАЧЕНИЕ: крестик
 *============================================================================*)

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

ВИД
  Доступ- = ДОСТУП К Вид;   (* Крестик.Доступ <- Надел.Доступ <- Рамка.Доступ *)
                     Вид- =
  НАБОР (Надел.Вид)         (* Крестик.Вид    <- Надел.Вид    <- Рамка.Вид    *)
    надпись:Надел.РядНадпись;
    буквица:ЦЕЛ;
    отмечен+:КЛЮЧ
  КОН;
                                   (* набор-посылка к наделам, т.е. расширение Ввод.нПосылка *)
  нПосылка- = НАБОР (Ввод.нПосылка)
    крестикД-:Доступ
  КОН;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА                                                         (*(Крестик.Вид)*)
       Отрисовка(крестикД:Крестик.Доступ);
УКАЗ
  ЕСЛИ крестикД.отмечен ТО
    крестикД.надпись[1]:="х"
  ИНАЧЕ
    крестикД.надпись[1]:=" "
  КОН;
  Надел.ВыводНадписи(крестикД,крестикД.надпись,0);
  ЕСЛИ
       крестикД.состояние = Надел.состВыбран
  ТО
    Окно.ПереместитьУказку(крестикД.вс,крестикД.лк+1);
    Окно.РазмерУказки(15)
  КОН
КОН Отрисовка;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА                                                         (*(Крестик.Вид)*)
       Работа(крестикД:Крестик.Доступ);
ПЕР
  посылка:Крестик.нПосылка;
  полеД:Поле.Доступ;
УКАЗ
  крестикД.отмечен:= НЕ крестикД.отмечен;
  Отрисовка(крестикД);
                               (*--- обратная связь ---*)
            (* преобразование
                              полеД             из Рамка.Доступ в
                                    Поле.Доступ <- Рамка.Доступ               *)
              полеД:=крестикД.полеД(Поле.Доступ);

                    посылка.крестикД:=крестикД;
  полеД.Приём(полеД,посылка)
КОН Работа;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА                                           (* (Крестик.Вид <- Надел.Вид)*)(* приём посылок из вне (снаружи) *)
       Приём(наделД:Надел.Доступ;
           посылка+:Ввод.нПосылка); (* = Пустой.Вид; - абстрактный опорный набор *)
ПЕР
  крестикД:Крестик.Доступ;
УКАЗ                                                        (* преобразование
            наделД                 из Надел.Доступ в
                   Крестик.Доступ  <- Надел.Доступ <- Рамка.Доступ            *)
  крестикД:=наделД(Крестик.Доступ);
                             (* анализ многоформия (полиморфизма) у <посылка> = Пустой.Вид *)
  ДЛЯ      посылка ВИДА
  | Поле.нОтрисовка: 
        Отрисовка(крестикД)
  | Ввод.нОтМышки:
      ЕСЛИ
           посылка.события = {}
      ТО                                (* просто нажали мышку *)
        Работа(крестикД)
      КОН
  | Ввод.нОтКлавиш:
      ЕСЛИ 
           посылка.знак = ' '
      ТО
        Работа(крестикД);
           посылка.код:=0
      КОН
  | Поле.нБуквица:
      ЕСЛИ 
           посылка.буквица = крестикД.буквица
      ТО
        Работа(крестикД);
           посылка.буквица:=0
      КОН
  ИНАЧЕ
  КОН
КОН Приём;

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

КОН Крестик.
