1 with Ada
.Calendar
; use Ada
.Calendar
;
2 with Ada
.Strings
.Unbounded
; use Ada
.Strings
.Unbounded
;
3 with GNAT
.Calendar
; use GNAT
.Calendar
;
5 package body Opt70_Pkg
is
7 type Enum
is (None
, Zero
, Space
);
9 type Sec_Number
is mod 2 ** 64;
11 function Image
(N
: Sec_Number
; Pad
: Enum
; Length
: Natural) return String;
13 function Image
(N
: Natural; Pad
: Enum
; Length
: Natural) return String is
15 return Image
(Sec_Number
(N
), Pad
, Length
);
18 function Image
(N
: Sec_Number
; Pad
: Enum
; Length
: Natural) return String is
20 function Pad_Char
return String is
23 when None
=> return "";
24 when Zero
=> return "00";
25 when Space
=> return " ";
29 NI
: constant String := Sec_Number
'Image (N
);
30 NIP
: constant String := Pad_Char
& NI
(2 .. NI
'Last);
33 return NIP
(NIP
'Last - Length
+ 1 .. NIP
'Last);
36 function Image
(Date
: Ada
.Calendar
.Time
; S
: String) return String is
37 Result
: Unbounded_String
:= Null_Unbounded_String
;
42 Minute
: Minute_Number
;
43 Second
: Second_Number
;
44 Sub_Second
: Second_Duration
;
46 Split
(Date
, Year
, Month
, Day
, Hour
, Minute
, Second
, Sub_Second
);
47 case S
(S
'First + 1) is
48 when 'S' => Result
:= Result
& Image
(Second
, Zero
, 2);
49 when 'y' => Result
:= Result
& Image
(Sec_Number
(1), Zero
, 2);
52 return To_String
(Result
);