-- pragma Ada_2012; with ada.text_io; procedure colors is use ada.text_io; -- Use can be in declaration section -- Enumeration type definition type Color is (red, blue, green, yellow, orange, black, purple); type Days is (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); subtype Week_Days is Days range Monday .. Friday; -- Create (at compile time) a new package for IO of colors -- Uses generic package Enumeration_IO in Text_IO. -- Red is a NEWly created LITERAL in the language -- A literal is a sequence of characters that represents itself -- Examples: 5, true, 2.1, true, 'a', "A" -- vs Expressions. Examples: 2+3, 2<3, 1+1.1, not false, 'a', "A"& "B" package Color_IO is new Ada.Text_IO.Enumeration_IO(Color); use Color_IO; -- We package Days_IO is new Ada.Text_IO.Enumeration_IO(Days); use Days_IO; -- We -- c: Color := Monday; -- Doesn't work: strongly typed -- c: Color := 1; -- Compile error c: Color; begin put("Enter your favorite color: "); Color_IO.get(c); put("Your favorite color is " ); put(c); new_line; put("The next color is" & Color'Succ(c)'img ); new_line; put_line("I like " & c'img & "too!"); if c = red then put("You're a red kind of person"); end if; -- if c > Color'Val(Color'Pos(Color'First) + Color'Size/2) -- if c > Color'Val(Color'Pos(Color'First) + -- (Color'Pos(Color'Last) - Color'Pos(Color'First))/2) if c > yellow then put("You're a large color type of person"); else put("You're a small color type of person"); end if; exception when Data_Error => put_line("Invalid Color! Valid colors are:"); for somecolor in Color loop -- for somecolor in Color'Range loop put_line(Color'Image(somecolor)); end loop; end colors;