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

ИСПОЛЬЗУЕТ 
  Памятка,
  Надел,
  Поле,

  Окно    ИЗ "..\..\Отделы\Обмен\",
  Ввод    ИЗ "..\..\Отделы\Обмен\";

ВИД
  Доступ- = ДОСТУП К Вид;   (* Строки.Доступ <- Надел.Доступ <- Рамка.Доступ *)
                     Вид- =
  НАБОР (Надел.Вид)         (* Строки.Вид    <- Надел.Вид    <- Рамка.Вид    *)
    памяткаД :Памятка.Доступ;
                            (* строки памятки: *) 
    последняя:ЦЕЛ;
    верхняя  :ЦЕЛ;
    текущая- :ЦЕЛ;
  КОН;

(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА Отрисовка(строкиД:Строки.Доступ);
ПЕР
  памяткаД:Памятка.Доступ;
     лк,пк,
     вс,нс:ЦЕЛ;
      цвет:ЗНАК;
    строка:ЦЕЛ;     (* памятки *)
        со:ЦЕЛ;     (* строка отображения *)
УКАЗ
  лк:=строкиД.лк;
  пк:=строкиД.пк;
  вс:=строкиД.вс;
  нс:=строкиД.нс;
  памяткаД:=строкиД.памяткаД;
    строка:=строкиД.верхняя;

  ОТ со:=вс+1 ДО нс-1 ВЫП
    ЕСЛИ
         строка = строкиД.текущая
    ТО
      цвет:=Надел.цветОтметкиСтроки
    ИНАЧЕ
      цвет:=Надел.цветСтроки
    КОН;
    Окно.ЦветнойПробел(со,лк,со,пк,цвет);
 (*  Вывод.ВПрямоуг(со,лк+1,со,пк-1,памяткаД.строкиД[строка]^);*)
    Окно.ЦепьЗнаков(со,лк+1,со,пк-1,памяткаД.строкиД[строка]^); (* Вывод.ВПряиоуг() *)
    УВЕЛИЧИТЬ(строка)
  КОН;

  Окно.ЦветнойПробел(вс,лк,вс,пк,Надел.цветСтроки);
  Окно.ЦветнойПробел(нс,лк,нс,пк,Надел.цветСтроки);
  Окно.Рамка1(вс,лк,нс,пк)
КОН Отрисовка;

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

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

КОН Строки.
