1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- S W I T C H -- 6-- -- 7-- B o d y -- 8-- -- 9-- Copyright (C) 1992-2002, Free Software Foundation, Inc. -- 10-- -- 11-- GNAT is free software; you can redistribute it and/or modify it under -- 12-- terms of the GNU General Public License as published by the Free Soft- -- 13-- ware Foundation; either version 2, or (at your option) any later ver- -- 14-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- 15-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- 16-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- 17-- for more details. You should have received a copy of the GNU General -- 18-- Public License distributed with GNAT; see file COPYING. If not, write -- 19-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- 20-- MA 02111-1307, USA. -- 21-- -- 22-- GNAT was originally developed by the GNAT team at New York University. -- 23-- Extensive contributions were provided by Ada Core Technologies Inc. -- 24-- -- 25------------------------------------------------------------------------------ 26 27package body Switch is 28 29 ------------------------- 30 -- Is_Front_End_Switch -- 31 ------------------------- 32 33 function Is_Front_End_Switch (Switch_Chars : String) return Boolean is 34 Ptr : constant Positive := Switch_Chars'First; 35 36 begin 37 return Is_Switch (Switch_Chars) 38 and then 39 (Switch_Chars (Ptr + 1) = 'I' 40 or else (Switch_Chars'Length >= 5 41 and then Switch_Chars (Ptr + 1 .. Ptr + 4) = "gnat") 42 or else (Switch_Chars'Length >= 5 43 and then Switch_Chars (Ptr + 1 .. Ptr + 4) = "fRTS")); 44 end Is_Front_End_Switch; 45 46 --------------- 47 -- Is_Switch -- 48 --------------- 49 50 function Is_Switch (Switch_Chars : String) return Boolean is 51 begin 52 return Switch_Chars'Length > 1 53 and then Switch_Chars (Switch_Chars'First) = '-'; 54 end Is_Switch; 55 56 ------------------------ 57 -------------- 58 -- Scan_Nat -- 59 -------------- 60 61 procedure Scan_Nat 62 (Switch_Chars : String; 63 Max : Integer; 64 Ptr : in out Integer; 65 Result : out Nat) 66 is 67 begin 68 Result := 0; 69 70 if Ptr > Max or else Switch_Chars (Ptr) not in '0' .. '9' then 71 raise Missing_Switch_Value; 72 end if; 73 74 while Ptr <= Max and then Switch_Chars (Ptr) in '0' .. '9' loop 75 Result := Result * 10 + 76 Character'Pos (Switch_Chars (Ptr)) - Character'Pos ('0'); 77 Ptr := Ptr + 1; 78 79 if Result > Switch_Max_Value then 80 raise Bad_Switch_Value; 81 end if; 82 end loop; 83 end Scan_Nat; 84 85 -------------- 86 -- Scan_Pos -- 87 -------------- 88 89 procedure Scan_Pos 90 (Switch_Chars : String; 91 Max : Integer; 92 Ptr : in out Integer; 93 Result : out Pos) is 94 95 Temp : Nat; 96 97 begin 98 Scan_Nat (Switch_Chars, Max, Ptr, Temp); 99 100 if Temp = 0 then 101 raise Bad_Switch_Value; 102 end if; 103 104 Result := Temp; 105 end Scan_Pos; 106 107end Switch; 108