with Ada.Calendar; use Ada.Calendar; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with GNAT.Calendar; use GNAT.Calendar; package body Opt70_Pkg is type Enum is (None, Zero, Space); type Sec_Number is mod 2 ** 64; function Image (N : Sec_Number; Pad : Enum; Length : Natural) return String; function Image (N : Natural; Pad : Enum; Length: Natural) return String is begin return Image (Sec_Number (N), Pad, Length); end; function Image (N : Sec_Number; Pad : Enum; Length : Natural) return String is function Pad_Char return String is begin case Pad is when None => return ""; when Zero => return "00"; when Space => return " "; end case; end; NI : constant String := Sec_Number'Image (N); NIP : constant String := Pad_Char & NI (2 .. NI'Last); begin return NIP (NIP'Last - Length + 1 .. NIP'Last); end; function Image (Date : Ada.Calendar.Time; S : String) return String is Result : Unbounded_String := Null_Unbounded_String; Year : Year_Number; Month : Month_Number; Day : Day_Number; Hour : Hour_Number; Minute : Minute_Number; Second : Second_Number; Sub_Second : Second_Duration; begin Split (Date, Year, Month, Day, Hour, Minute, Second, Sub_Second); case S (S'First + 1) is when 'S' => Result := Result & Image (Second, Zero, 2); when 'y' => Result := Result & Image (Sec_Number (1), Zero, 2); when others => null; end case; return To_String (Result); end; end Opt70_Pkg;