with Ada.Characters.Handling; use Ada.Characters.Handling; package body Directions is Abbreviations : constant String := "nsewud"; procedure To_Direction(Text : in Unbounded_String; Is_Direction : out Boolean; Dir : out Direction) is Lower_Text : String := To_Lower(To_String(Text)); -- Attempt to turn "Text" into a direction. -- If successful, set "Is_Direction" True and "Dir" to the value. -- If not successful, set "Is_Direction" False and "Dir" to arbitrary value. begin if Length(Text) = 1 then -- Check if it's a one-letter abbreviation. for D in Direction'Range loop if Lower_Text(1) = Abbreviations(Direction'Pos(D) + 1) then Is_Direction := True; Dir := D; return; end if; end loop; Is_Direction := False; Dir := North; return; else -- Not a one-letter abbreviation, try a full name. for D in Direction'Range loop if Lower_Text = To_Lower(Direction'Image(D)) then Is_Direction := True; Dir := D; return; end if; end loop; Is_Direction := False; Dir := North; return; end if; end To_Direction; function To_Direction(Text : in Unbounded_String) return Direction is Is_Direction : Boolean; Dir : Direction; begin To_Direction(Text, Is_Direction, Dir); if Is_Direction then return Dir; else raise Constraint_Error; end if; end To_Direction; function Is_Direction(Text : in Unbounded_String) return Boolean is Is_Direction : Boolean; Dir : Direction; begin To_Direction(Text, Is_Direction, Dir); return Is_Direction; end Is_Direction; end Directions;
You may also see the corresponding specification. You may return to the Program Small Home Page
This hypertext format was generated by David A. Wheeler's ada2html