(*~\Глагол\ПриложенияLink\МПГ2008 (комп., но не раб.)\~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                                            ОТДЕЛ Настрой;
(*============================================================================* 
 * НАЗНАЧЕНИЕ: настройка работы преобразователя и машинозависимые постоянные
 *============================================================================*)

ИСПОЛЬЗУЕТ
  ОБХОД,
        (*  \Глагол\              *)
ЧэргаСлеД ИЗ "..\..\Отделы\Иное\";
 
ПОСТ
                                              (* размеры данных простых видов *)
  рЗнак-    = 1;
  рКлюч-    = 1;
  рМнож-    = 4;
  рУЦел-    = 2;
  рЦел32-   = 4;
  рВещ32-   = 4; (* про запас *)
  рБегунок- = 4; (* БЕГУНОК *)  
  рЗадача-  = 4; (* вид ЗАДАЧА *)
  рДоступ-  = 4; (* ДОСТУП и ОБХОД.Доступ *)
  рЯчейка-  = 1; (* ОБХОД.Ячейка *)
                                  (* предельные значения данных простых видов *)
  МинУЦел-   = МИН(ОБХОД.Цел16);
  МаксУЦел-  = МАКС(ОБХОД.Цел16);
  МинЦел32-  = МИН(ЦЕЛ);
  МаксЦел32- = МАКС(ЦЕЛ);
  МинВещ32-  = МИН(ВЕЩ);     (* прозапас *)
  МаксВещ32- = МАКС(ВЕЩ);     (* прозапас *)
  МаксМнож-  = МАКС(МНОЖ);
                                                (* наибольший размер названия *)
  рИмени- =32;
                                           (* настройки числового считывателя *)
  МаксЭксп-    =38; (* ограничение ВЕЩ экспоненты *)
  ВсегоЦифр16- = 8; (* наибольшее число цифр у шестнадцатеричного ЦЕЛ *)

                                                              (* виды отделов *)
  отдел-      =0;
  описание-   =1;
  приложение- =2;

ВИД
  Имя- = ЦЕПЬ[Настрой.рИмени];
  
ПЕР
  отдВид-:ЦЕЛ;
  отдИмя-:Имя;

(*----------------------------------------------------------------------------*)
ПОСТ                 (* признаки для преобразования *)
  ОтлДанные- =0;   
  
ПЕР
                     (* ключи логические*)
  клОтлДанные-:КЛЮЧ;
                     (* множество ключей преобразования *)
  настройки-  :МНОЖ;
                     (* свод настроек *)
  свод-       :ЦЕЛ;

 (* ключи для ЗАДАНО, доступ к набору с именем ключа - потомку пустого набора *)
ВИД
  ДкКлючу = ДОСТУП К (*нИмяКлюча;
                       нИмяКлюча =*) НАБОР((*Набор.Вид*)
                                             ЧэргаСлеД.нПустой)
    имя:Настрой.Имя
                                     КОН;
(*---
             набор-список звеньев с телами = ключам при вызове МПГ
  ---*)
ПЕР
  ключи:ЧэргаСлеД.нСписок;


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       УстОтдел-(имя-:Настрой.Имя; вид:ЦЕЛ);
УКАЗ
  отдИмя:=имя;
  отдВид:=вид
КОН УстОтдел;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       ДобавитьКлюч-(имя-:ЦЕПЬ);
ПЕР
              ключД:ДкКлючу;
УКАЗ
      СОЗДАТЬ(ключД);
  СПИСАТЬ(имя,ключД.имя);

  ЧэргаСлеД.ДобавитьНовЗвеноВконСписка(ключи,ключД)

КОН ДобавитьКлюч;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       ЕстьКлюч-(имя-:ЦЕПЬ):КЛЮЧ;
ПЕР
(*ключД:ДкКлючу;*)
      звеноД:ЧэргаСлеД.ДкЗвену_телоД;
УКАЗ
(*
   Обход списка с 1-го звена до N-го, т.е. пока звеноД.слеД # ПУСТО
 *)
      звеноД:=ЧэргаСлеД.Дк1муЗвену(ключи);
  ПОКА
      звеноД # ПУСТО
  ВЫП
    ЕСЛИ                                                    (* преобразование полиморфное  
             телоД         из ЧэргаСлеД.ДкПустомуНабору в
                   ДкКлючу <- ЧэргаСлеД.ДкПустомуНабору                       *)
      звеноД.телоД(ДкКлючу).имя = имя
                  (*  ключД.имя = имя  *)
    ТО
      ВОЗВРАТ ВКЛ
    КОН;
      звеноД:=звеноД.слеД
  КОН;
      ВОЗВРАТ ОТКЛ
КОН ЕстьКлюч;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       Подготовить-(настройки:МНОЖ;
                         свод:ЦЕЛ);
УКАЗ
  Настрой.настройки:=настройки;
  Настрой.свод:=свод;
  клОтлДанные:=ОтлДанные В настройки
КОН Подготовить;

(*-ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss-*)
УКАЗ
  ЧэргаСлеД.ОчиститьСписок(ключи)
КОН Настрой.
