(*~\Глагол\Отделы\Обмен\ВводВывод\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                        ОТДЕЛ НаЭкран;
(*============================================================================*)
(* НАЗНАЧЕНИЕ:                                                                *)
(*   библиотечный отдел - вывод в файл экрана (консоль ОС Windows)            *)
(*============================================================================*)

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


(*-оооооооооооооо- опережающие определения/заготовки задач -ооооооооооооооооо-*)


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Общедоступные ЗАДАЧИ ~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА^
        ВсяЦепь-(цепь-:ЦЕПЬ);
ЗАДАЧА^
        Цел4числа-(описание-:ЦЕПЬ; ц0,ц1,ц2,ц3:ШИРЦЕЛ);
ЗАДАЧА^
        Вещ4числа-(описание-:ЦЕПЬ; в0,в1,в2,в3:ШИРВЕЩ);
ЗАДАЧА^
        ВремяОтСтартаWindows-(сейчас:ЦЕЛ);
ЗАДАЧА^
        ВремяТекущее-;
ЗАДАЧА^
        ОшибкаВызоваПриложения-(Сообщение_об_ошибке-:ЦЕПЬ);
ЗАДАЧА^
        ОшибкаВпотоке-(имяФайла-,Сообщение_об_ошибке-:ЦЕПЬ);


(*=рррррррррррррррррррррррр= реализация задач =рррррррррррррррррррррррррррррр=*)


(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА Знака866(зн:ЗНАК);
(*     ЗнакЦепи
 * Печатать символ/знак <зн> в DOS-кодировке 866 в файл экрана.
 *)
ПЕР
  зн866:ЯЧЦЕЛ;
УКАЗ
  зн866:=оЗнака.ВДос(зн);
  ОС.ПисатьФ(ОС.ссылкаНаВывод,зн866,1)  (* записать в файл <ОС.ссылкаНаВывод>
                                              символ/знак в DOS-кодировке 866 *)
КОН Знака866;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       ВсяЦепь-(цепь-:ЦЕПЬ);
(*        Цепь=ЗнакиЦепи
 * Записывает всю цепочку <цепь> в файл экрана
 *  без обработки '^' - ВК -  возврат каретки/переход на новую строку.
 *)
ПЕР
  поз:ЦЕЛ;
  знак:ЗНАК;
  былаВолна:КЛЮЧ;
УКАЗ
  былаВолна:=ОТКЛ;
  ОТ поз:=0 ДО ДЛИНА(цепь)-1 ВЫП
    знак:=цепь[поз];
    ЕСЛИ
         былаВолна
    ТО
НаЭкран.Знака866(знак);
         былаВолна:=ОТКЛ
    ИНАЧЕ
      ЕСЛИ
           знак = '^'      (* без обработки '^'=ВК *)
      ТО
НаЭкран.Знака866(0DX);
НаЭкран.Знака866(0AX)
      АЕСЛИ
           знак = '~'
      ТО
         былаВолна:=ВКЛ
      ИНАЧЕ
НаЭкран.Знака866(знак)
      КОН
    КОН
  КОН
КОН ВсяЦепь;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       Цел4числа-(описание-:ЦЕПЬ;
                ц0,ц1,ц2,ц3:ШИРЦЕЛ);
(*
 * Выводит на экран текст из 4-х целых чисел,
 *                              используя заданное <описание> (см. Текст.отд)
 *)
ПЕР
  цепочкаТекста:ЦЕПЬ[200];
УКАЗ
  Текст.Из4хЦел(описание,ц0,ц1,ц2,ц3,цепочкаТекста);
             НаЭкран.ВсяЦепь(цепочкаТекста)
          (*   Вывод.Цепь(текст)  *)
КОН Цел4числа;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       Вещ4числа-(описание-:ЦЕПЬ;
                в0,в1,в2,в3:ШИРВЕЩ);
(*
 * Выводит на экран текст из 4-х вещественных чисел,
 *                              используя заданное <описание> (см. Текст.отд)
 *)
ПЕР
  цепочкаТекста:ЦЕПЬ[200];
УКАЗ
  Текст.Из4хВещ(описание,в0,в1,в2,в3,цепочкаТекста);
             НаЭкран.ВсяЦепь(цепочкаТекста);
          (*   Вывод.Цепь(текст)  *)
КОН Вещ4числа;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
(*
 * Вывод на экран (консоль Win32) времени [мсек] от старта Windows с шагом 15-16 мс,
 *                         однако замечено, что при запущенном AIMP3.exe шаг = 1 мс, хотя и не на всех компьютерах
 *               в приёмник <сейчас> в виде "часы: минуты: сек: сотые:"
 *)
ЗАДАЧА 
       ВремяОтСтартаWindows-(сейчас:ЦЕЛ);
(*
       из задачи
                  ЗАДАЧА ОбновитьПоказания(номерЧасов:ЦЕЛ);
    в приложении
                 \Глагол\ПриложенияКОС\Иное\СекундомерКОС+.отд
 *)
ПЕР
(*времяОС,*)(* время в [мс], прошедшее от запуска Windows с шагом 15-16 мс *)
  сотые,    (*           сейчас ДЕЛИТЬ 10;  *)
  секунды,  (* секунды:= сотые  ДЕЛИТЬ 100; *)
  минуты,   (*  минуты:=секунды ДЕЛИТЬ 60;  *)
  часы:ЦЕЛ; (*    часы:= минуты ДЕЛИТЬ 60;  *)
УКАЗ
  сотые  :=сейчас  ДЕЛИТЬ 10;
  секунды:= сотые  ДЕЛИТЬ 100;
  минуты :=секунды ДЕЛИТЬ 60;
     часы:=минуты  ДЕЛИТЬ 60;

НаЭкран.Цел4числа("%.2d:%.2d:%.2d.%.2d^",
     часы,
     минуты ОСТАТОК 60,
         секунды ОСТАТОК 60,
               сотые ОСТАТОК 100
              )
КОН ВремяОтСтартаWindows;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
(*
 * Вывод на экран (консоль Win32) текущего времени с шагом 15-16 мс
 *         однако замечено, что при запущенном AIMP3.exe шаг = 1 мс, хотя и не на всех компьютерах
 * из лок.переменной <сейчас> в виде "год:месяц:день: час:минута:сек:мс"
 *)
ЗАДАЧА
       ВремяТекущее-;
ПЕР
                      сейчас:ОС.нСейчас;
УКАЗ
        ОС.КоторыйЧас(сейчас);

НаЭкран.Цел4числа("%.4d-%.2d-%.2d ",
       сейчас.год,
          сейчас.месяц,
                сейчас.день,
                            0
              );
НаЭкран.Цел4числа("%.2d:%.2d:%.2d.%.2d^",
       сейчас.час,
         сейчас.минута,
             сейчас.секунда,
                 сейчас.мсекунда
              )
КОН ВремяТекущее;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       ОшибкаВызоваПриложения-(Сообщение_об_ошибке-:ЦЕПЬ);
УКАЗ
       НаЭкран.ВсяЦепь(Сообщение_об_ошибке);
       НаЭкран.ВсяЦепь("^Правильный вызов:^имяПриложения.exe имяВходногоФайла имяВыходногоФайла");
  СТОП(1)
КОН ОшибкаВызоваПриложения;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       ОшибкаВпотоке-(имяФайла-,
                      Сообщение_об_ошибке-:ЦЕПЬ);
УКАЗ
        НаЭкран.ВсяЦепь('^Файл "');
        НаЭкран.ВсяЦепь(имяФайла);
        НаЭкран.ВсяЦепь(Сообщение_об_ошибке)
КОН ОшибкаВпотоке;

КОН НаЭкран.
