|
(*~\Глагол\Отделы\Обмен~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**) ОТДЕЛ Параметр;
(*============================================================================*
* НАЗНАЧЕНИЕ: работа с параметрами запуска приложения *
*----------------------------------------------------------------------------*
* Этот отдел предлагает средства для доступа к командной строке, которая *
* была передана программе при запуске. Имеется возможность обращаться к ней *
* как целиком, так и к каждому параметру по отдельности. *
* При этом подразумевается, что параметры разделяются в командной строке *
* пробелами, запятыми или и тем, и другим вместе. Параметры, которые должны *
* содержать пробелы или запятые, должны заключаться в кавычки. *
*============================================================================*)
ИСПОЛЬЗУЕТ
ОС,
Цепь ИЗ "..\Иное\";
ПОСТ
ДлСтроки-=300; (* максимальная длина всей командной строки *)
Запас-=30; (* наибольшее число параметров *)
ПЕР
строка-:ЦЕПЬ[ДлСтроки];
всего-:ЦЕЛ;
список:РЯД Запас ИЗ ДОСТУП К ЦЕПЬ;
(******************************************************************************)
ЗАДАЧА Текст-(номер:ЦЕЛ; текст+:ЦЕПЬ);
(* Параметр под номером <номер> переписывается в <текст>.
* Если выбран несуществующий параметр, то возвращает пустую цепочку. *)
УКАЗ
ЕСЛИ (номер < 0) ИЛИ (номер >= всего) ТО
текст[0]:=0X
ИНАЧЕ
ЕСЛИ список[номер] # ПУСТО ТО
СПИСАТЬ(список[номер]^,текст)
ИНАЧЕ
текст[0]:=0X
КОН
КОН
КОН Текст;
(******************************************************************************)
ЗАДАЧА Подготовить;
(* ASCIIZ ком. строка разбивается на отдельные параметры. *)
ПЕР
поз,н,к:ЦЕЛ;
УКАЗ
ОС.ПолучитьКомСтроку(строка);
поз:=0;
ПОКА поз < Запас ВЫП
список[поз]:=ПУСТО;
УВЕЛИЧИТЬ(поз)
КОН;
всего:=0;
поз:=0;
ПОКА всего < Запас ВЫП
ПОКА (строка[поз]=" ") И (строка[поз] # 0X) ВЫП
УВЕЛИЧИТЬ(поз)
КОН;
ЕСЛИ строка[поз]=0X ТО
ВОЗВРАТ
КОН;
н:=поз;
ПОКА (строка[поз] # 0X)
И (строка[поз] # ",")
И (строка[поз] # " ")
И (строка[поз] # '"')
И (строка[поз] # "'")
ВЫП
УВЕЛИЧИТЬ(поз)
КОН;
ЕСЛИ строка[поз]="'" ТО
УВЕЛИЧИТЬ(поз);
ПОКА (строка[поз] # 0X) И (строка[поз] # "'") ВЫП
УВЕЛИЧИТЬ(поз)
КОН
АЕСЛИ строка[поз]='"' ТО
УВЕЛИЧИТЬ(поз);
ПОКА (строка[поз] # 0X) И (строка[поз] # '"') ВЫП
УВЕЛИЧИТЬ(поз)
КОН
КОН;
к:=поз-1;
ЕСЛИ (строка[н]="'") ИЛИ (строка[н]='"') ТО
УВЕЛИЧИТЬ(н);
ЕСЛИ (строка[поз]="'") ИЛИ (строка[поз]='"') ТО
УВЕЛИЧИТЬ(поз)
КОН
КОН;
СОЗДАТЬ(список[всего],к-н+2);
Цепь.Часть(строка,список[всего]^,н,к-н+1);
ПОКА строка[поз]=" " ВЫП
УВЕЛИЧИТЬ(поз)
КОН;
ЕСЛИ строка[поз]="," ТО
УВЕЛИЧИТЬ(поз)
КОН;
УВЕЛИЧИТЬ(всего)
КОН
КОН Подготовить;
(******************************************************************************)
УКАЗ
Подготовить
КОН Параметр.
|
|