Раздел 9.4 - Пакет Command_Line

Существует особый вид ввода/вывода между операционной системой и программой на Ada, когда информация вводится из командной строки, а выводится то, что называется кодом возврата. Это было просто сделать в Ada 83, но стандартные способы реализации отсутствовали. Для осуществления такого вида ввода или вывода в стандарт Ada 95 был добавлен пакет Command_Line. Операции пакета Command_Line очень похожи на argc, argv и exit в языке C.

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 может оказаться бесполезным, если операционная система отсутствует, так как в этом случае не с кем и нечем обмениваться.


К этому разделу упражнение отсутствует.

Вы можете перейти к следующему разделу.


Вы можете также:

PREVIOUS Вернуться к предыдущему разделу

OUTLINE  Вернуться к содержанию Урока 9

David A. Wheeler (dwheeler@ida.org)

Перевод: Юрий Королев   Общая редакция перевода: Г.Ю. Сисюк

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s9sf.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org