Copyright (C) А.Гавва V-0.4w май 2004

4. Спецификация пакета Standard.

Пакет Standard всегда находится в области видимости, поэтому все описания этого пакета всегда непосредственно доступны.


package Standard is
pragma Pure(Standard);

    type Boolean is (False, True);

    -- предопределенные знаки операций сравнения для этого типа следующие:
    --    function "="  (Left, Right : Boolean) return Boolean;
    --    function "/=" (Left, Right : Boolean) return Boolean;
    --    function "<"  (Left, Right : Boolean) return Boolean;
    --    function "<=" (Left, Right : Boolean) return Boolean;
    --    function ">"  (Left, Right : Boolean) return Boolean;
    --    function ">=" (Left, Right : Boolean) return Boolean;
    --
    -- предопределенные знаки логических операций для этого типа следующие:
    --    function "and"  (Left, Right : Boolean) return Boolean;
    --    function "or"   (Left, Right : Boolean) return Boolean;
    --    function "xor"  (Left, Right : Boolean) return Boolean;
    --    function "not"  (Right : Boolean) return Boolean;



    type Integer is range Определяется_Реализацией;

    subtype Natural  is Integer range 0 .. Integer'Last;
    subtype Positive is Integer range 1 .. Integer'Last;

    -- предопределенные знаки операций для этого типа следующие:
    --    function "="  (Left, Right : Integer'Base) return Boolean;
    --    function "/=" (Left, Right : Integer'Base) return Boolean;
    --    function "<"  (Left, Right : Integer'Base) return Boolean;
    --    function "<=" (Left, Right : Integer'Base) return Boolean;
    --    function ">=" (Left, Right : Integer'Base) return Boolean;
    --    function ">"  (Left, Right : Integer'Base) return Boolean;
    --
    --    function "+"   (Right : Integer'Base) return Integer'Base;
    --    function "-"   (Right : Integer'Base) return Integer'Base;
    --    function "abs" (Right : Integer'Base) return Integer'Base;
    --
    --    function "+"   (Left, Right : Integer'Base) return Integer'Base;
    --    function "-"   (Left, Right : Integer'Base) return Integer'Base;
    --    function "*"   (Left, Right : Integer'Base) return Integer'Base;
    --    function "/"   (Left, Right : Integer'Base) return Integer'Base;
    --    function "rem" (Left, Right : Integer'Base) return Integer'Base;
    --    function "mod" (Left, Right : Integer'Base) return Integer'Base;
    --
    --    function "**" (Left: Integer'Base; Right: Natural) return Integer'Base;




    type Float           is digits Определяется_Реализацией;

    -- предопределенные знаки операций для этого типа следующие:
    --    function "="  (Left, Right : Float) return Boolean;
    --    function "/=" (Left, Right : Float) return Boolean;
    --    function "<"  (Left, Right : Float) return Boolean;
    --    function "<=" (Left, Right : Float) return Boolean;
    --    function ">=" (Left, Right : Float) return Boolean;
    --    function ">"  (Left, Right : Float) return Boolean;
    --
    --    function "+"   (Right : Float) return Float;
    --    function "-"   (Right : Float) return Float;
    --    function "abs" (Right : Float) return Float;
    --
    --    function "+"   (Left, Right : Float) return Float;
    --    function "-"   (Left, Right : Float) return Float;
    --    function "*"   (Left, Right : Float) return Float;
    --    function "/"   (Left, Right : Float) return Float;
    --
    --    function "**" (Left: Float; Right: Integer'Base) return Float;
    --
    --
    -- дополнительные знаки операций предопределены для корневых численных типов
    -- Root_Integer и Root_Real
    --
    --    function "*" (Left : Root_Integer; Right : Root_Real) return Root_Real;
    --    function "*" (Left : Root_Real; Right : Root_Integer) return Root_Real;
    --    function "/" (Left : Root_Real; Right : Root_Integer) return Root_Real;
    --
    --
    -- тип Universal_Fixed - является предопределенным
    -- для него предопределены только следующие знаки операций:
    --
    --    function "*" (Left : Universal_Fixed; Right : Universal_Fixed)
    --                                return Universal_Fixed;
    --    function "/" (Left : Universal_Fixed; Right : Universal_Fixed)
    --                                return Universal_Fixed;




    -- Описание символьного типа Character основано
    -- на множестве символов описанных стандартом  ISO 8859-1.
    --
    -- Символьные литералы которые соответствуют
    -- позициям управляющих символов отсутствуют.
    -- Они описываются идентификаторами
    -- которые записаны в нижнем регистре.

    type Character is

   (nul,  soh,  stx,  etx,   eot,  enq,  ack,  bel,   --   0 (16#00#) .. (16#07#)
    bs,   ht,   lf,   vt,    ff,   cr,   so,   si,    --   8 (16#08#) .. (16#0F#)

    dle,  dc1,  dc2,  dc3,   dc4,  nak,  syn,  etb,   --  16 (16#10#) .. (16#17#)
    can,  em,   sub,  esc,   fs,   gs,   rs,   us,    --  24 (16#18#) .. (16#1F#)

    ' ',  '!',  '"', '#',   '$',  '%',  '&',  ''',    --  32 (16#20#) .. (16#27#)
    '(',  ')',  '*',  '+',   ',',  '-',  '.',  '/',   --  40 (16#28#) .. (16#2F#)

    '0',  '1',  '2',  '3',   '4',  '5',  '6',  '7',   --  48 (16#30#) .. (16#37#)
    '8',  '9',  ':',  ';',   '<',  '=',  '>',  '?',   --  56 (16#38#) .. (16#3F#)

    '@',  'A',  'B',  'C',   'D',  'E',  'F',  'G',   --  64 (16#40#) .. (16#47#)
    'H',  'I',  'J',  'K',   'L',  'M',  'N',  'O',   --  72 (16#48#) .. (16#4F#)

    'P',  'Q',  'R',  'S',   'T',  'U',  'V',  'W',   --  80 (16#50#) .. (16#57#)
    'X',  'Y',  'Z',  '[',   '\',  ']',  '^',  '_',   --  88 (16#58#) .. (16#5F#)

    '`',  'a',  'b',  'c',   'd',  'e',  'f',  'g',   --  96 (16#60#) .. (16#67#)
    'h',  'i',  'j',  'k',   'l',  'm',  'n',  'o',   -- 104 (16#68#) .. (16#6F#)

    'p',  'q',  'r',  's',   't',  'u',  'v',  'w',   -- 112 (16#70#) .. (16#77#)
    'x',  'y',  'z',  '{',   '|',  '}',  '~',  del,   -- 120 (16#78#) .. (16#7F#)

     reserved_128,   reserved_129,  bph,  nbh,        -- 128 (16#80#) .. (16#83#)
     reserved_132,   nel,     ssa,  esa,              -- 132 (16#84#) .. (16#87#)

     hts,  htj,  vts,  pld,   plu,  ri,   ss2,  ss3,  -- 136 (16#88#) .. (16#8F#)

     dcs,  pu1,  pu2,  sts,   cch,  mw,   spa,  epa,  -- 144 (16#90#) .. (16#97#)

     sos, reserved_153, sci, csi,                     -- 152 (16#98#) .. (16#9B#)
     st,   osc,  pm,   apc,                           -- 156 (16#9C#) .. (16#9F#)

   ... );



    -- Описание символьного типа Wide_Character основано
    -- на множестве символов описанных стандартом  ISO 10646 BMP.
    --
    -- Первые 256 символьных позиций соответствуют содержимому
    -- символьного типа Character

    type Wide_Character is (nul, soh ... FFFE, FFFF);


    -- Пакет ASCII считается устаревшим

    package ASCII is

        --  Управляющие символы:

        NUL   : constant Character := Character'Val (16#00#);
        SOH   : constant Character := Character'Val (16#01#);
        STX   : constant Character := Character'Val (16#02#);
        ETX   : constant Character := Character'Val (16#03#);
        EOT   : constant Character := Character'Val (16#04#);
        ENQ   : constant Character := Character'Val (16#05#);
        ACK   : constant Character := Character'Val (16#06#);
        BEL   : constant Character := Character'Val (16#07#);
        BS    : constant Character := Character'Val (16#08#);
        HT    : constant Character := Character'Val (16#09#);
        LF    : constant Character := Character'Val (16#0A#);
        VT    : constant Character := Character'Val (16#0B#);
        FF    : constant Character := Character'Val (16#0C#);
        CR    : constant Character := Character'Val (16#0D#);
        SO    : constant Character := Character'Val (16#0E#);
        SI    : constant Character := Character'Val (16#0F#);
        DLE   : constant Character := Character'Val (16#10#);
        DC1   : constant Character := Character'Val (16#11#);
        DC2   : constant Character := Character'Val (16#12#);
        DC3   : constant Character := Character'Val (16#13#);
        DC4   : constant Character := Character'Val (16#14#);
        NAK   : constant Character := Character'Val (16#15#);
        SYN   : constant Character := Character'Val (16#16#);
        ETB   : constant Character := Character'Val (16#17#);
        CAN   : constant Character := Character'Val (16#18#);
        EM    : constant Character := Character'Val (16#19#);
        SUB   : constant Character := Character'Val (16#1A#);
        ESC   : constant Character := Character'Val (16#1B#);
        FS    : constant Character := Character'Val (16#1C#);
        GS    : constant Character := Character'Val (16#1D#);
        RS    : constant Character := Character'Val (16#1E#);
        US    : constant Character := Character'Val (16#1F#);
        DEL   : constant Character := Character'Val (16#7F#);

        -- Остальные символы:

        Exclam     : constant Character := '!';
        Quotation  : constant Character := '"';
        Sharp      : constant Character := '#';
        Dollar     : constant Character := '$';
        Percent    : constant Character := '%';
        Ampersand  : constant Character := '&';
        Colon      : constant Character := ':';
        Semicolon  : constant Character := ';';
        Query      : constant Character := '?';
        At_Sign    : constant Character := '@';
        L_Bracket  : constant Character := '[';
        Back_Slash : constant Character := '\';
        R_Bracket  : constant Character := ']';
        Circumflex : constant Character := '^';
        Underline  : constant Character := '_';
        Grave      : constant Character := '`';
        L_Brace    : constant Character := '{';
        Bar        : constant Character := '|';
        R_Brace    : constant Character := '}';
        Tilde      : constant Character := '~';

        -- Буквы нижнего регистра:

        LC_A : constant Character := 'a';
        LC_B : constant Character := 'b';
        LC_C : constant Character := 'c';
        LC_D : constant Character := 'd';
        LC_E : constant Character := 'e';
        LC_F : constant Character := 'f';
        LC_G : constant Character := 'g';
        LC_H : constant Character := 'h';
        LC_I : constant Character := 'i';
        LC_J : constant Character := 'j';
        LC_K : constant Character := 'k';
        LC_L : constant Character := 'l';
        LC_M : constant Character := 'm';
        LC_N : constant Character := 'n';
        LC_O : constant Character := 'o';
        LC_P : constant Character := 'p';
        LC_Q : constant Character := 'q';
        LC_R : constant Character := 'r';
        LC_S : constant Character := 's';
        LC_T : constant Character := 't';
        LC_U : constant Character := 'u';
        LC_V : constant Character := 'v';
        LC_W : constant Character := 'w';
        LC_X : constant Character := 'x';
        LC_Y : constant Character := 'y';
        LC_Z : constant Character := 'z';

    end ASCII;



    -- Предопределенные строковые типы:

    type String is array (Positive range <>) of Character;
    pragma Pack (String);

    -- предопределенные знаки операций для этого типа следующие:
    --    function "="  (Left, Right : String) return Boolean;
    --    function "/=" (Left, Right : String) return Boolean;
    --    function "<"  (Left, Right : String) return Boolean;
    --    function "<=" (Left, Right : String) return Boolean;
    --    function ">"  (Left, Right : String) return Boolean;
    --    function ">=" (Left, Right : String) return Boolean;
    --
    --    function "&" (Left : String,    Right : String)    return String;
    --    function "&" (Left : Character, Right : String)    return String;
    --    function "&" (Left : String,    Right : Character) return String;
    --    function "&" (Left : Character, Right : Character) return String;

    type Wide_String is array (Positive range <>) of Wide_Character;
    pragma Pack (Wide_String);

    -- для типа Wide_String предопределены такие же знаки операций
    -- что и для типа String



    type Duration is delta Определяется_Реализацией
        range Определяется_Реализацией;

    -- для типа Duration предопределены такие же знаки операций
    -- что и для любого вещественного типа с фиксированной точкой.



    -- Предопределенные исключения:

    Constraint_Error : exception;
    Program_Error    : exception;
    Storage_Error    : exception;
    Tasking_Error    : exception;

end Standard;


Copyright (C) А.Гавва V-0.4w май 2004