(*~\Глагол\Отделы\Иное\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                              ОТДЕЛ оЗнака;
(*============================================================================*)
(* НАЗНАЧЕНИЕ:                                                                *)
(*             обработка знаков - распознавание и преобразование знаков       *)
(*           с участием задачи  оБуквы.Известная(знак) из отдела  оБуквы.отд  *)
(*============================================================================*)

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

ПЕР             (* таблицы преобразования для знаков с кодами от 080X до 0FFX *)
  рИзДос,
  рИзВин:РЯД 129 ИЗ ЗНАК;


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


(*-------------------------------------Общедоступные ЗАДАЧИ-------------------*)
ЗАДАЧА^
        Цифра-(знак:ЗНАК):КЛЮЧ;          (* ВКЛ, если <знак> является цифрой. *)
ЗАДАЧА^
        БукваЦифра-(знак:ЗНАК):КЛЮЧ;
ЗАДАЧА^
        ВСлове-(знак:ЗНАК):КЛЮЧ;   (* ВКЛ, если <знак> является знаком слова. *)

<*ЕСЛИ НЕ ЗАДАНО("МПГ") ТО*> (* ПГ *)
ЗАДАЧА^
        ВДос-(знак:ЗНАК):ЯЧЦЕЛ;          (* Переводит <знак> в Дос-код знака. *)
ЗАДАЧА^
        ВВин-(знак:ЗНАК):ЯЧЦЕЛ;          (* Переводит <знак> в Вин-код знака. *)
ЗАДАЧА^
        ИзДос-(код:ЯЧЦЕЛ):ЗНАК;          (* Переводит Дос-<код> знака в ЗНАК. *)
ЗАДАЧА^
        ИзВин-(код:ЯЧЦЕЛ):ЗНАК;          (* Переводит Вин-<код> знака в ЗНАК. *)
<*ИНАЧЕ*>                    (* Малый ПГ*)
ЗАДАЧА^
        ВДос-(знак:ЗНАК):ЦЕЛ;            (* Переводит <знак> в Дос-код знака. *)
ЗАДАЧА^
        ВВин-(знак:ЗНАК):ЦЕЛ;            (* Переводит <знак> в Вин-код знака. *)
ЗАДАЧА^
        ИзДос-(код:ЦЕЛ):ЗНАК;            (* Переводит Дос-<код> знака в ЗНАК. *)
ЗАДАЧА^
        ИзВин-(код:ЦЕЛ):ЗНАК;            (* Переводит Вин-<код> знака в ЗНАК. *)
<*КОН*>


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


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       Цифра-(знак:ЗНАК):КЛЮЧ;            (* ВКЛ, если <знак> является цифрой *)
УКАЗ 
  ВОЗВРАТ (знак >= "0") И (знак <= "9")
КОН Цифра;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       БукваЦифра-(знак:ЗНАК):КЛЮЧ;
(*
 * ВКЛ, если <знак> является буквой или цифрой.
 *)
УКАЗ 
  ВОЗВРАТ оБуквы.Известная(знак) ИЛИ оЗнака.Цифра(знак)
КОН БукваЦифра;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       ВСлове-(знак:ЗНАК):КЛЮЧ;     (* ВКЛ, если <знак> является знаком слова *)
УКАЗ 
  ВОЗВРАТ оБуквы.Известная(знак) ИЛИ оЗнака.Цифра(знак) ИЛИ (знак = "_")
КОН ВСлове;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
<*ЕСЛИ НЕ ЗАДАНО("МПГ") ТО*>
ЗАДАЧА
       ВДос-(знак:ЗНАК):ЯЧЦЕЛ;            (* Переводит <знак> в Дос-код знака *)
ПЕР
       н:ЦЕЛ;
УКАЗ 
       н:=ВЦЕЛ(знак);
  ЕСЛИ
       н < 128
  ТО
    ВОЗВРАТ УЗК(УЗК(н))       (* :ЯЧЦЕЛ; *)
  КОН;
  ОТ н:=0 ДО 127 ВЫП
    ЕСЛИ 
         знак = рИзДос[н]
    ТО
      ВОЗВРАТ УЗК(УЗК(н-80H)) (* :ЯЧЦЕЛ; *)
    КОН
  КОН;
  ВОЗВРАТ 0
КОН ВДос;

<*ИНАЧЕ*>                    (* Малый ПГ*)
ЗАДАЧА
       ВДос-(знак:ЗНАК):ЦЕЛ;              (* Переводит <знак> в Дос-код знака *)
ПЕР
       н:ЦЕЛ;
УКАЗ 
       н:=ВЦЕЛ(знак);
  ЕСЛИ
       н < 128
  ТО
      ВОЗВРАТ н          (* :ЦЕЛ; *)
  КОН;
  ОТ н:=0 ДО 127 ВЫП
    ЕСЛИ
         знак = рИзДос[н]
    ТО
      ВОЗВРАТ (н-80H)    (* :ЦЕЛ; *)
    КОН
  КОН;
      ВОЗВРАТ 0
КОН ВДос;
<*КОН*>

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
<*ЕСЛИ НЕ ЗАДАНО("МПГ") ТО*>
ЗАДАЧА
       ВВин-(знак:ЗНАК):ЯЧЦЕЛ;            (* Переводит <знак> в Вин-код знака *)
ПЕР
       н:ЦЕЛ;
УКАЗ 
       н:=ВЦЕЛ(знак);
  ЕСЛИ
       н < 128
  ТО
    ВОЗВРАТ УЗК(УЗК(н))       (* :ЯЧЦЕЛ; *)
  КОН;
  ОТ н:=0 ДО 127 ВЫП
    ЕСЛИ 
         знак = рИзВин[н]
    ТО
      ВОЗВРАТ УЗК(УЗК(н-80H)) (* :ЯЧЦЕЛ; *)
    КОН
  КОН;
  ВОЗВРАТ 0
КОН ВВин;

<*ИНАЧЕ*>                    (* Малый ПГ*)
ЗАДАЧА
       ВВин-(знак:ЗНАК):ЦЕЛ;              (* Переводит <знак> в Вин-код знака *)
ПЕР
       н:ЦЕЛ;
УКАЗ 
       н:=ВЦЕЛ(знак);
  ЕСЛИ
       н < 128
  ТО
      ВОЗВРАТ н          (* :ЦЕЛ; *)
  КОН;
  ОТ н:=0 ДО 127 ВЫП
    ЕСЛИ
         знак = рИзВин[н]
    ТО
      ВОЗВРАТ (н-80H)    (* :ЦЕЛ; *)
    КОН
  КОН;
      ВОЗВРАТ 0
КОН ВВин;
<*КОН*>

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
<*ЕСЛИ НЕ ЗАДАНО("МПГ") ТО*>
ЗАДАЧА
       ИзДос-(код:ЯЧЦЕЛ):ЗНАК;            (* Переводит Дос-<код> знака в ЗНАК *)
УКАЗ 
  ЕСЛИ
       код >= 0
  ТО
    ВОЗВРАТ ВЗНАК(код)
  КОН;
  ВОЗВРАТ рИзДос[код+80H]
КОН ИзДос;

<*ИНАЧЕ*>
ЗАДАЧА
       ИзДос-(код:ЦЕЛ):ЗНАК;              (* Переводит Дос-<код> знака в знак *)
УКАЗ 
  ЕСЛИ
       код >= 0
  ТО
    ВОЗВРАТ ВЗНАК(код)
  КОН;
  ВОЗВРАТ рИзДос[код+80H]
КОН ИзДос;
<*КОН*>

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
<*ЕСЛИ НЕ ЗАДАНО("МПГ") ТО*>
ЗАДАЧА
       ИзВин-(код:ЯЧЦЕЛ):ЗНАК;            (* Переводит Вин-<код> знака в знак *)
УКАЗ 
  ЕСЛИ
       код >= 0
  ТО
    ВОЗВРАТ ВЗНАК(код)
  КОН;
  ВОЗВРАТ рИзВин[код+80H]
КОН ИзВин;

<*ИНАЧЕ*>                    (* Малый ПГ*)
ЗАДАЧА
       ИзВин-(код:ЦЕЛ):ЗНАК;              (* Переводит Вин-<код> знака в знак *)
УКАЗ 
  ЕСЛИ
       код >= 0
  ТО
    ВОЗВРАТ ВЗНАК(код)
  КОН;
  ВОЗВРАТ рИзВин[код+80H]
КОН ИзВин;
<*КОН*>

(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА ПодготовитьТаблПреобразования;
УКАЗ
<*ЕСЛИ НЕ ЗАДАНО("МПГ") ТО*>
  рИзДос:='#0410#0411#0412#0413#0414#0415#0416#0417#0418#0419#041A#041B#041C#041D#041E#041F#0420#0421#0422#0423#0424#0425#0426#0427#0428#0429#042A#042B#042C#042D#042E#042F#0430#0431#0432#0433#0434#0435#0436#0437#0438#0439#043A#043B#043C#043D#043E#043F#2591#2592#2593#2502#2524#2561#2562#2556#2555#2563#2551#2557#255D#255C#255B#2510#2514#2534#252C#251C#2500#253C#255E#255F#255A#2554#2569#2566#2560#2550#256C#2567#2568#2564#2565#2559#2558#2552#2553#256B#256A#2518#250C#2588#2584#258C#2590#2580#0440#0441#0442#0443#0444#0445#0446#0447#0448#0449#044A#044B#044C#044D#044E#044F#0401#0451#0404#0454#0407#0457#040E#045E#00B0#2219#00B7#221A#2116#00A4#25A0#00A0';
  рИзВин:='#0402#0403#201A#0453#201E#2026#2020#2021#20AC#2030#0409#2039#040A#040C#040B#040F#0452#2018#2019#201C#201D#2022#2013#2014#0098#2122#0459#203A#045A#045C#045B#045F#00A0#040E#045E#0408#00A4#0490#00A6#00A7#0401#00A9#0404#00AB#00AC#00AD#00AE#0407#00B0#00B1#0406#0456#0491#00B5#00B6#00B7#0451#2116#0454#00BB#0458#0405#0455#0457#0410#0411#0412#0413#0414#0415#0416#0417#0418#0419#041A#041B#041C#041D#041E#041F#0420#0421#0422#0423#0424#0425#0426#0427#0428#0429#042A#042B#042C#042D#042E#042F#0430#0431#0432#0433#0434#0435#0436#0437#0438#0439#043A#043B#043C#043D#043E#043F#0440#0441#0442#0443#0444#0445#0446#0447#0448#0449#044A#044B#044C#044D#044E#044F'
<*ИНАЧЕ*>                    (* Малый ПГ*)
<*КОН*>
КОН ПодготовитьТаблПреобразования;

(*-ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss-*)
УКАЗ
  ПодготовитьТаблПреобразования
КОН оЗнака.
