-- { dg-do compile } | |
-- { dg-options "-Os -g" } | |
with Opt7_Pkg; | |
package body Opt7 is | |
procedure Parse (Str : String; | |
Time_Type : out time_t; | |
Abs_Time : out Time; | |
Delt_Time : out Duration) is | |
Year : Year_Number; | |
Month : Month_Number; | |
Day : Day_Number; | |
Minute : Integer := 0; | |
Idx : Integer := Str'First; | |
Ch : Character := Str (Idx); | |
Current_Time : Time; | |
begin | |
if Ch = '-' then | |
Time_Type := Absolute_Time; | |
Current_Time := Clock; | |
Day := Ada.Calendar.Day (Current_Time); | |
Month := Ada.Calendar.Month (Current_Time); | |
Year := Ada.Calendar.Year (Current_Time); | |
else | |
Time_Type := Delta_Time; | |
end if; | |
while Ch in '0' .. '9' loop | |
Minute := Minute + Character'Pos (Ch); | |
Idx := Idx + 1; | |
Ch := Str (Idx); | |
end loop; | |
if Time_Type = Absolute_Time then | |
Abs_Time := Time_Of (Year, Month, Day, Day_Duration (1)); | |
else | |
Delt_Time := Duration (Float (Minute)); | |
end if; | |
exception | |
when others => Opt7_Pkg.My_Raise_Exception; | |
end; | |
end Opt7; |