Параметр.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

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

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

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

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

 
 


Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com

 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы