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

ИСПОЛЬЗУЕТ
  ОБХОД,
  Ядро,
        (*  \Глагол\              *)
   Пустой ИЗ "..\..\Отделы\Иное\",  
ЧэргаСлеД ИЗ "..\..\Отделы\Иное\";
(*
  Набор   ИЗ "..\..\Отделы\Иное\";
*)

ПОСТ
  ПоколениеПГ- = 1; (* увеличить при изменении строения файлов .опг *)

ВИД
  (* простые виды *)
  УзкЦел-=ОБХОД.Цел16;
  Цел-   =ОБХОД.Цел32;
  ШирЦел-=ОБХОД.Цел32;
  Вещ-   =ОБХОД.Вещ32;
  ШирВещ-=ОБХОД.Вещ32;

ПОСТ
                                              (* размеры данных простых видов *)
  рЯчейка- = 1; (* ОБХОД.Ячейка *)
  рЗнак-   = 2;
  рКлюч-   = 1;
  рМнож-   = 4;
  рЦел8-   = 1;
  рЦел16-  = 2;
  рЦел32-  = 4;
  рЦел64-  = 8;
  рВещ32-  = 4;
  рВещ64-  = 8;
                                              (* размеры данных сложных видов *)
  рЗадача- = 4; (* вид ЗАДАЧА *)
  рДоступ- = 4; (* ДОСТУП и ОБХОД.Доступ *)
  рБегунок-= 4; (* БЕГУНОК *)  

ПОСТ
                                  (* предельные значения данных простых видов *)
  МинЗнак-  = ВЦЕЛ(МИН(ЗНАК));
  МаксЗнак- = ВЦЕЛ(МАКС(ЗНАК));
  МинЦел8-  = МИН(ОБХОД.Цел8);
  МаксЦел8- = МАКС(ОБХОД.Цел8);
  МинЦел16- = МИН(ОБХОД.Цел16);
  МаксЦел16-= МАКС(ОБХОД.Цел16);
  МинЦел32- = МИН(ОБХОД.Цел32);
  МаксЦел32-= МАКС(ОБХОД.Цел32);
  МинЦел64- = МИН(ОБХОД.Цел64);
  МаксЦел64-= МАКС(ОБХОД.Цел64);
  МинВещ32- = МИН(ОБХОД.Вещ32);
  МаксВещ32-= МАКС(ОБХОД.Вещ32);
  МинВещ64- = МИН(ОБХОД.Вещ64);
  МаксВещ64-= МАКС(ОБХОД.Вещ64);

  МинУзкЦел- = МИН(УзкЦел);
  МаксУзкЦел-= МАКС(УзкЦел);
  МинЦел-    = МИН(Цел);
  МаксЦел-   = МАКС(Цел);
  МинШирЦел- = МИН(ШирЦел);
  МаксШирЦел-= МАКС(ШирЦел);
  МинВещ-    = МИН(Вещ);
  МаксВещ-   = МАКС(Вещ);
  МинШирВещ- = МИН(ШирВещ);
  МаксШирВещ-= МАКС(ШирВещ);

  МинМнож-  = МИН(МНОЖ);
  МаксМнож- = МАКС(МНОЖ);
                                           (* настройки числового считывателя *)

  ВсегоЦифр16- =  8; (* наибольшее число цифр у шестнадцатеричного ЦЕЛ *)
  МаксЭксп-    = 38; (* ограничение Вещ32 экспоненты *)
  МаксШирЭксп- =308; (* ограничение Вещ64 экспоненты *)

                                                               (* ограничения *)
  ВсегоОтделов-    = 64; (* число отделов *)
  ВсегоВидов-      =256; (* число видов в каждом отделе *)
  ВсегоРасширений- = 10; (* уровень расширения наборов *)
  ВсегоВыборов-    =512; (* число выборов в указании ВЫБРАТЬ *)
  РазбросВыборов-  =512; (* разброс в указании ВЫБРАТЬ <= 1024 *)
                                                              (* виды отделов *)
  отдел-     =0;
  описание-  =1;
  приложение-=2;

ПЕР
  отдВид-:ЦЕЛ;
  отдИмя-:Ядро.Имя;

(******************************************************************************)
(* настройки преобразования *)
ПОСТ
  (* признаки *)
  ПровНомера-  =0;  
  ПровПереполн-=1;
  ПровПределов-=2;
  ПровПусто-   =3;    
  ПровБегунка- =4;    
  ПровНуля-    =5;    
  ДостВПусто-  =6;  
  ВклПроверить-=7;
  ОтлДанные-   =8;   
  
ПЕР
  (* ключи *)
  клПровНомера-  :КЛЮЧ;
  клПровПереполн-:КЛЮЧ;
  клПровПределов-:КЛЮЧ;
  клПровПусто-   :КЛЮЧ;
  клПровНуля-    :КЛЮЧ;
  клПровБегунка- :КЛЮЧ;
  клДостВПусто-  :КЛЮЧ;
  клВклПроверить-:КЛЮЧ;
  клОтлДанные-   :КЛЮЧ;
                   (* сразу все множество ключей *)
  настройки-:МНОЖ;
                                (* свод настроек *)
  свод-:ЦЕЛ;

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

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

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

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

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

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