Command_Line предоставляет несколько подпрограмм для получения ввода от операционной системы. В пакете описана функция с именем Argument_Count, которая возвращает количество переданных параметров (ноль или больше). Также существует функция Argument, которая принимает номер аргумента (индекс) и возвращает его значение, как переменную типа String. Также в пакете имеется функция Command_Name, которая возвращает имя программы, как String; некоторые операционные системы не поддерживают этого.
Command_Line предоставляет подпрограммы для выдачи кода возврата Status_Code, принадлежащего какому-либо целому типу, операционной системе. Существует два предопределенных кода возврата: Success и Failure. Код возврата можно установить с помощью процедуры Set_Status; когда программа завершится, последнее значение, установленное процедурой Set_Status будет передано операционной системе.
Ниже приводится описание Command_Line (из RM, раздел A.15):
package Ada.Command_Line is
function Argument_Count return Natural;
function Argument (Number : in Positive) return String;
function Command_Name return String;
type Exit_Status is implementation-defined integer type;
Success : constant Exit_Status;
Failure : constant Exit_Status;
procedure Set_Exit_Status (Code : in Exit_Status);
-- ...
end Ada.Command_Line;
Вот пример использования Command_Line; Программа Show принимает в качестве аргументов список файлов и печатает их содержимое, используя пробел в качестве разделителя.
with Ada.Command_Line, Text_IO, Ada.Strings.Unbounded, Ustrings;
use Ada.Command_Line, Text_IO, Ada.Strings.Unbounded, Ustrings;
procedure Show is
-- Выбираем каждый аргумент из коммандной строки и отображаем
-- каждый файл с выделением.
procedure Show_File(Filename : String) is
-- Открываем "Filename" и отображаем его с выделением.
File : File_Type;
Input : Unbounded_String;
begin
Put("Printing file ");
Put_Line(Filename);
Open(File, In_File, Filename);
while (not End_Of_File(File)) loop
Get_Line(File, Input);
Put(' '); -- выделение.
Put_Line(Input);
end loop;
Close(File);
end Show_File;
begin -- procedure Show
if Argument_Count = 0 then
Put_Line(Current_Error, "Error - No file names given.");
Set_Exit_Status(Failure);
else
-- Открываем каждый из файлов и отображаем его.
for Arg in 1 .. Argument_Count loop
Show_File(Argument(Arg));
end loop;
end if;
end Show;
Пакет Command_Line может оказаться бесполезным, если операционная система отсутствует, так как в этом случае не с кем и нечем обмениваться.
К этому разделу упражнение отсутствует.
Вы можете перейти к следующему разделу.
|
|
|
|---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s9sf.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк