48 lines
1.7 KiB
Ada
48 lines
1.7 KiB
Ada
with Ada.Calendar.Formatting;
|
|
|
|
package Printable_Calendar is
|
|
|
|
subtype String20 is String(1 .. 20);
|
|
type Month_Rep_Type is array (Ada.Calendar.Month_Number) of String20;
|
|
|
|
type Description is record
|
|
Weekday_Rep: String20;
|
|
Month_Rep: Month_Rep_Type;
|
|
end record;
|
|
-- for internationalization, you only need to define a new description
|
|
|
|
Default_Description: constant Description :=
|
|
(Weekday_Rep =>
|
|
"Mo Tu We Th Fr Sa So",
|
|
Month_Rep =>
|
|
(" January ", " February ", " March ",
|
|
" April ", " May ", " June ",
|
|
" July ", " August ", " September ",
|
|
" October ", " November ", " December "));
|
|
|
|
type Calendar (<>) is tagged private;
|
|
|
|
-- Initialize a calendar for devices with 80- or 132-characters per row
|
|
function Init_80(Des: Description := Default_Description) return Calendar;
|
|
function Init_132(Des: Description := Default_Description) return Calendar;
|
|
|
|
-- the following procedures output to standard IO; override if neccessary
|
|
procedure New_Line(Cal: Calendar);
|
|
procedure Put_String(Cal: Calendar; S: String);
|
|
|
|
-- the following procedures do the real stuff
|
|
procedure Print_Line_Centered(Cal: Calendar'Class; Line: String);
|
|
procedure Print(Cal: Calendar'Class;
|
|
Year: Ada.Calendar.Year_Number;
|
|
Year_String: String); -- this is the main Thing
|
|
|
|
private
|
|
type Calendar is tagged record
|
|
Columns, Rows, Space_Between_Columns: Positive;
|
|
Left_Space: Natural;
|
|
|
|
Weekday_Rep: String20;
|
|
Month_Rep: Month_Rep_Type;
|
|
end record;
|
|
|
|
end Printable_Calendar;
|