home *** CD-ROM | disk | FTP | other *** search
-
- 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;
-
-