(*~\Глагол\Отделы\Обмен\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                          ОТДЕЛ Параметр;
(*============================================================================*)
(* НАЗНАЧЕНИЕ: работа с параметрами запуска приложения                        *)
(*----------------------------------------------------------------------------*)
(*    Этот отдел предлагает средства для доступа к командной строке, которая  *)
(* была передана программе при запуске. Имеется возможность обращаться к ней  *)
(* как целиком, так и к каждому параметру по отдельности.                     *)
(*    Причём подразумевается, что параметры разделяются в командной строке    *)
(* пробелами, запятыми или и тем, и другим вместе. Параметры, которые должны  *)
(* содержать пробелы или запятые, должны заключаться в кавычки.               *)
(*============================================================================*)

ИСПОЛЬЗУЕТ
  ОС,
        (*  \Глагол\               *)
  Пустой  ИЗ "..\..\Отделы\Иное\",
 оЦепи    ИЗ "..\..\Отделы\Иное\";

ПОСТ
  ДлКомСтроки- = 300; (* максимальная длина всей командной строки *)
  Запас-       = 30;  (* наибольшее число параметров *)

ПЕР
  строка-:ЦЕПЬ[Параметр.ДлКомСтроки];
  всего- :ЦЕЛ;
(*
  рДоступов :РЯД Параметр.Запас ИЗ ДОСТУП К ЦЕПЬ;            (* оЦепи.Доступ; *)
*)
  рДоступов :РЯД Параметр.Запас ИЗ Пустой.ДкЦепи;


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~общедоступная ЗАДАЧА~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА
       Втекст-(номер:ЦЕЛ; текст+:ЦЕПЬ);
(*
 * Параметр под номером <номер> переписывается в цепочку <текст>.
 * Если выбран несуществующий параметр, то задача возвращает пустую цепочку.
 *)
УКАЗ
  ЕСЛИ
       (номер < 0) ИЛИ (номер >= Параметр.всего)
  ТО
    текст[0]:=0X
  ИНАЧЕ
    ЕСЛИ
              рДоступов[номер] # ПУСТО
    ТО
      СПИСАТЬ(рДоступов[номер]^,текст)
    ИНАЧЕ
      текст[0]:=0X
    КОН
  КОН
КОН Втекст;

(*-----------------------------------------локальная ЗАДАЧА-------------------*)
ЗАДАЧА ПодготовитьПараметрыКомСтроки; 
                (* ASCIIZ командная строка разбивается на отдельные параметры *)
ПЕР
  поз,н,к:ЦЕЛ;
УКАЗ
  ОС.ПолучитьКомСтроку(Параметр.строка);
       поз:=0;
  ПОКА
       поз < Параметр.Запас
  ВЫП
    рДоступов[поз]:=ПУСТО;
    УВЕЛИЧИТЬ(поз)
  КОН;
       Параметр.всего:=0;
                  поз:=0;
  ПОКА
       Параметр.всего < Параметр.Запас
  ВЫП
    ПОКА
         (Параметр.строка[поз]=" ")
        И 
         (Параметр.строка[поз] # 0X)
    ВЫП
      УВЕЛИЧИТЬ(поз)
    КОН;
    ЕСЛИ
         Параметр.строка[поз]=0X
    ТО
      ВОЗВРАТ
    КОН;
              н:=поз;
    ПОКА
         (Параметр.строка[поз] # 0X)
        И
         (Параметр.строка[поз] # ",")
        И
         (Параметр.строка[поз] # " ")
        И
         (Параметр.строка[поз] # '"')
        И
         (Параметр.строка[поз] # "'")
    ВЫП
      УВЕЛИЧИТЬ(поз)
    КОН;
    ЕСЛИ
         Параметр.строка[поз]="'"
    ТО
      УВЕЛИЧИТЬ(поз);
      ПОКА
           (Параметр.строка[поз] # 0X)
          И 
           (Параметр.строка[поз] # "'")
      ВЫП
        УВЕЛИЧИТЬ(поз)
      КОН
    АЕСЛИ
            Параметр.строка[поз]='"'
    ТО
      УВЕЛИЧИТЬ(поз);
      ПОКА
           (Параметр.строка[поз] # 0X)
          И
           (Параметр.строка[поз] # '"')
      ВЫП
         УВЕЛИЧИТЬ(поз)
      КОН
    КОН;
    к:=поз-1;
    ЕСЛИ
         (Параметр.строка[н]="'")
        ИЛИ
         (Параметр.строка[н]='"')
    ТО
      УВЕЛИЧИТЬ(н);
      ЕСЛИ
           (Параметр.строка[поз]="'")
          ИЛИ
           (Параметр.строка[поз]='"')
      ТО
        УВЕЛИЧИТЬ(поз)
      КОН
    КОН;
                       СОЗДАТЬ(рДоступов[Параметр.всего],   к-н+2);
            (* откуда:ЦЕПЬ     куда:ЦЕПЬ *)
   оЦепи.Часть(Параметр.строка,рДоступов[Параметр.всего]^,н,к-н+1);
    ПОКА
         Параметр.строка[поз]=" "
    ВЫП
      УВЕЛИЧИТЬ(поз)
    КОН;
    ЕСЛИ
         Параметр.строка[поз]=","
    ТО
      УВЕЛИЧИТЬ(поз)
    КОН;
      УВЕЛИЧИТЬ(Параметр.всего)
  КОН
КОН ПодготовитьПараметрыКомСтроки;

(*-ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss-*)
УКАЗ
    ПодготовитьПараметрыКомСтроки
КОН Параметр.
