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

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

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

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

(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА
       Отрисовка(точкаД:Точка.Доступ);
ПЕР
  строка:ЦЕЛ;
  надпись:Надел.РядНадпись;
УКАЗ
  ОТ строка:=0 ДО точкаД.строчек-1 ВЫП

      надпись:="( ) ";
    ЕСЛИ
         строка = точкаД.текущая
    ТО
      надпись[1]:=0B7X
    ИНАЧЕ
      надпись[1]:=" "
    КОН;

    оЦепи.ДобавитьВКонец(надпись,точкаД.надписиД[строка]);
    Надел.ВыводНадписи(точкаД,надпись,строка)
  КОН;
  ЕСЛИ
       точкаД.состояние = Надел.состВыбран
  ТО
    Окно.ПереместитьУказку(точкаД.вс+точкаД.указка,точкаД.лк+1);
    Окно.РазмерУказки(15)
  КОН
КОН Отрисовка;

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

                        (*--- обратная связь ---*)
                                                            (* преобразование
                  полеД                              из Рамка.Доступ в
                        Поле.Доступ  <- Надел.Доступ <- Рамка.Доступ          *)
    полеД:=точкаД.полеД(Поле.Доступ);

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

(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА                                             (* (Точка.Вид <- Надел.Вид)*)(* приём посылок из вне (снаружи) *)
       Приём(наделД:Надел.Доступ;
           посылка+:Ввод.нПосылка); (* = Пустой.Вид; - абстрактный опорный набор *)
ПЕР
  строка:ЦЕЛ;
  точкаД:Точка.Доступ;
УКАЗ                                                        (* преобразование
          наделД               из Надел.Доступ в
                 Точка.Доступ  <- Надел.Доступ <- Рамка.Доступ                *)
  точкаД:=наделД(Точка.Доступ);
                             (* анализ многоформия (полиморфизма) у <посылка> = Пустой.Вид *)
  ДЛЯ      посылка ВИДА
  | Поле.нОтрисовка:
      Отрисовка(точкаД)                                  (* локальная задача *)
  | Ввод.нОтМышки:
      ЕСЛИ
           посылка.события = {}
      ТО                          (* просто нажали мышку *)
        точкаД.текущая:=посылка.с;
        точкаД.указка :=посылка.с;
        Работа(точкаД);                                 (* локальная задача *)
      КОН
  | Ввод.нОтКлавиш:
      ВЫБРАТЬ
           посылка.код
      ИЗ      
(* <- ^ *) | 25H,26H:
             ЕСЛИ
                         точкаД.указка > 0
             ТО
               УМЕНЬШИТЬ(точкаД.указка);
               Отрисовка(точкаД);                       (* локальная задача *)
               посылка.код:=0
             КОН
(* -> V *) | 27H,28H:
             ЕСЛИ
                  точкаД.указка < точкаД.строчек-1
             ТО
               УВЕЛИЧИТЬ(точкаД.указка);
               Отрисовка(точкаД);                       (* локальная задача *)
               посылка.код:=0
             КОН
(* " " *)  | 20H:
             точкаД.текущая:=точкаД.указка;
             Работа(точкаД);                            (* локальная задача *)
             посылка.код:=0
      ИНАЧЕ
      КОН
  | Поле.нБуквица:
      ОТ строка:=0 ДО точкаД.строчек-1 ВЫП
        ЕСЛИ
           посылка.буквица = точкаД.буквицыД[строка]
        ТО
           посылка.буквица:=0;
          точкаД.текущая:=строка;
          точкаД.указка:=строка;
          Работа(точкаД);                               (* локальная задача *)
          ВОЗВРАТ
        КОН
      КОН
  ИНАЧЕ
  КОН
КОН Приём;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       Создать-(верх,лево:ЦЕЛ;
                 надписи-:РЯД ИЗ Надел.РядНадпись):Точка.Доступ;
ПЕР
  точкаД:Точка.Доступ;
                          строчек,
  строка:ЦЕЛ;
  длина,
  колонок:ЦЕЛ;
УКАЗ
  СОЗДАТЬ(точкаД);
                          строчек:=РАЗМЕР(надписи);
  СОЗДАТЬ(точкаД.надписиД,строчек);
  СОЗДАТЬ(точкаД.буквицыД,строчек);

  точкаД.строчек:=строчек;
  колонок:=0;

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

КОН Точка.
