(*~\Глагол\Приложения\Иное\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                           ОТДЕЛ УниВин+;
(*============================================================================*)
(* НАЗНАЧЕНИЕ:
//         "Перекодировка текстовых файлов в УНИкод или в ВИН - Win1251=ANSI" *)
(*============================================================================*)

ИСПОЛЬЗУЕТ 
  ОС      ИЗ "..\..\Отделы\Обмен\",
 Параметр ИЗ "..\..\Отделы\Обмен\",
    Файл  ИЗ "..\..\Отделы\Обмен\",

  Пустой  ИЗ "..\..\Отделы\Иное\",

  ИзФайла ИЗ "..\..\Отделы\Обмен\ВводВывод\",
   ВФайл  ИЗ "..\..\Отделы\Обмен\ВводВывод\",
  НаЭкран ИЗ "..\..\Отделы\Обмен\ВводВывод\";


(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА Ошибка1(ц-:ЦЕПЬ);
УКАЗ
  НаЭкран.ВсяЦепь(ц);
  НаЭкран.ВсяЦепь("^ УниВин.exe ВУНИ(или ВВИН) 'входной(ые) текстовый(е) файл(ы)'");
  (*
   * Пояснение: при записи текста в поток (в т.ч. на экран)
   * знак ^ обозначает переход на новую строку и сброс данных
   *) 
  СТОП(1)
КОН Ошибка1;

(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА Ошибка2(ц1-,ц2-:ЦЕПЬ);
УКАЗ
  НаЭкран.ВсяЦепь(ц1);
  Ошибка1(ц2)
КОН Ошибка2;

(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА Перевод(ч:ИзФайла.ДкПотоку;
               п:  ВФайл.ДкПотоку; увв:КЛЮЧ);
УКАЗ
  ЕСЛИ 
           увв (* =ВКЛ, если перевод из Уни в Вин *)
  ТО
    ч.цВидЗнаков:=ИзФайла.знУни;
    п.цВидЗнаков:= ВФайл.знВин
  ИНАЧЕ (*
           увв   =ВЫКЛ, если перевод из Вин в Уни
         *)
    ч.цВидЗнаков:=ИзФайла.знВин;
    п.цВидЗнаков:= ВФайл.знУни
  КОН;
  ПОКА
       НЕ ИзФайла.Конец(ч)
  ВЫП
    ВФайл.ЗнакЦепи(п,ИзФайла.ЗнакЦепи(ч))
  КОН
КОН Перевод;

(*------------------------------------------ Главная ЗАДАЧА-------------------*)
ЗАДАЧА Голова();
ПЕР
       ч :ИзФайла.ДкПотоку;
       п :  ВФайл.ДкПотоку;

     чИмя:   Файл.ВПолного;
     путь:   Файл.ВПути;
      имя:   Файл.ВИмени;
      тип:   Файл.ВТипа;
    поиск:   Файл.нПоиск;

     увв,
     рез :КЛЮЧ;
    парам:ЦЕЛ;

 (*......................подЗадача...*)
  ЗАДАЧА НовоеИмя;
  ПЕР
    пИмяД:Пустой.ДкЦепи;        (* пИмяД:ДОСТУП К ЦЕПЬ; *)
  УКАЗ
    СОЗДАТЬ(пИмяД,поиск.имя);
    ЕСЛИ
         ОС.СледующийПоискФ(поиск)
    ТО
      НовоеИмя                (* рекурсивный вызов подЗадачи *)
    КОН;

    НаЭкран.ВсяЦепь(пИмяД^);
    НаЭкран.ВсяЦепь("^");

    Файл.РазобратьИмя(пИмяД^,путь,имя,тип);
    Файл.СобратьИмя(чИмя,путь,имя,"BAK");

    рез:=ОС.УдалитьФ(чИмя);
    рез:=ОС.ПереименоватьФ(пИмяД^,чИмя);

         ч:=      ИзФайла.Открыть(чИмя);
    ЕСЛИ
         ч=ПУСТО
    ТО
                          Ошибка2(чИмя," не открывается")
    КОН;

         п:=ВФайл.Открыть(пИмяД^);
    ЕСЛИ
         п=ПУСТО
    ТО
                  Ошибка2(пИмяД^," не открывается")
    КОН;

    Перевод(ч,п,увв);

    ИзФайла.Закрыть(ч);
      ВФайл.Закрыть(п)
  КОН НовоеИмя;

УКАЗ
       парам:=1;
  ЕСЛИ
       парам >= Параметр.всего
  ТО
    Ошибка1("Нет параметров")             (*  СТОП(1)  *)
  КОН;

    Параметр.Втекст(парам,чИмя);
  ЕСЛИ
       чИмя = "ВУНИ"            (* файл для чтения в кодировке Уникод *)
  ТО
    увв:=ОТКЛ
  АЕСЛИ
       чИмя = "ВВИН"            (* файл для чтения в кодировке Win-1251 *)
  ТО
    увв:=ВКЛ
  ИНАЧЕ
    Ошибка1("Неверный параметр")          (*  СТОП(1)  *)
  КОН;
  УВЕЛИЧИТЬ(парам);             (* парам:=2 *) 
  ЕСЛИ
       парам >= Параметр.всего
  ТО
     Ошибка1("Нет имени входного файла")  (*  СТОП(1)  *)
  КОН;

    Параметр.Втекст(парам,чИмя);
  ЕСЛИ
       НЕ ОС.ПервыйПоискФ(чИмя,поиск)
  ТО
    Ошибка2(чИмя," не найден(ы)")
  КОН;

  НовоеИмя        (* подЗадача в Голова *)

КОН Голова;

(*-SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS-*)
УКАЗ
  Голова
КОН УниВин.
