-- Some standard types and their output
-- These are all PRIMITIVE types (meaning what?)
with ada.text_io; use ada.text_io; 
with ada.float_text_io; use ada.float_text_io; 
with ada.integer_text_io; use ada.integer_text_io; 
 
procedure types1  is 
    -- The libraries withed above handle Character, String, Float and Integer
    -- No preexisting library exists for Boolean because it is an enumerated type
    --    and so we make a library for it
    package boolean_io is new ada.text_io.enumeration_io(Boolean);
    use boolean_io;   -- We created it, now let's use it

    i: Integer := 11;
    n: Natural := 22;             -- 0 or greater: Why is this a good thing?
    p: Positive := 33;            -- Greater than 0
    f: Float := 44.44;            -- 3. and .3 not allowed.  Why?
    b: Boolean := true;  
    c: Character := 'x';
begin
    -- OUTPUT IMAGES WITH TEXT_IO
    put_line(i'img);
    put_line(n'img);            
    put_line(p'img);
    put_line(f'img);
    put_line(b'img);

    -- OUTPUT WITH SPECIFIC LIBRARIES
    put(i); new_line;
    put(n); new_line;
    put(p); new_line;

    put(f); new_line;
    put(f, fore => 5, aft => 1, exp => 0);    -- Explicit format.  Keyword parameters.
      --   fore=left, aft=right, exp=exponent digits
    new_line;
    put(f, fore => 1, aft => 6, exp => 0);    
    new_line;

    put(c); new_line;
    put(b); new_line;
end types1;

-- Output:
--| 11
--| 22
--| 33
--| 4.44400E+01
--|TRUE
--|         11
--|         22
--|         33
--| 4.44400E+01
--|   44.4
--|44.439999
--|x
--|TRUE