[19/77] Add a smallest_int_mode_for_size helper function
[official-gcc.git] / gcc / ada / mlib-fil.adb
blob8632ef3caa98a538ccd0f9333e02be43d2350296
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT COMPILER COMPONENTS --
4 -- --
5 -- M L I B . F I L --
6 -- --
7 -- B o d y --
8 -- --
9 -- Copyright (C) 2001-2007, AdaCore --
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 3, 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 COPYING3. If not, go to --
19 -- http://www.gnu.org/licenses for a complete copy of the license. --
20 -- --
21 -- GNAT was originally developed by the GNAT team at New York University. --
22 -- Extensive contributions were provided by Ada Core Technologies Inc. --
23 -- --
24 ------------------------------------------------------------------------------
26 -- This package provides a set of routines to deal with file extensions
28 with Ada.Strings.Fixed;
29 with MLib.Tgt;
31 package body MLib.Fil is
33 use Ada;
35 package Target renames MLib.Tgt;
37 ---------------
38 -- Append_To --
39 ---------------
41 function Append_To
42 (Filename : String;
43 Ext : String) return String
45 begin
46 if Ext'Length = 0 then
47 return Filename;
49 elsif Filename (Filename'Last) = '.' then
50 if Ext (Ext'First) = '.' then
51 return Filename & Ext (Ext'First + 1 .. Ext'Last);
53 else
54 return Filename & Ext;
55 end if;
57 else
58 if Ext (Ext'First) = '.' then
59 return Filename & Ext;
61 else
62 return Filename & '.' & Ext;
63 end if;
64 end if;
65 end Append_To;
67 ------------
68 -- Ext_To --
69 ------------
71 function Ext_To
72 (Filename : String;
73 New_Ext : String := "") return String
75 use Strings.Fixed;
77 J : constant Natural :=
78 Index (Source => Filename,
79 Pattern => ".",
80 Going => Strings.Backward);
82 begin
83 if J = 0 then
84 if New_Ext = "" then
85 return Filename;
86 else
87 return Filename & "." & New_Ext;
88 end if;
90 else
91 if New_Ext = "" then
92 return Head (Filename, J - 1);
93 else
94 return Head (Filename, J - 1) & '.' & New_Ext;
95 end if;
96 end if;
97 end Ext_To;
99 -------------
100 -- Get_Ext --
101 -------------
103 function Get_Ext (Filename : String) return String is
104 use Strings.Fixed;
106 J : constant Natural :=
107 Index (Source => Filename,
108 Pattern => ".",
109 Going => Strings.Backward);
111 begin
112 if J = 0 then
113 return "";
114 else
115 return Filename (J .. Filename'Last);
116 end if;
117 end Get_Ext;
119 ----------------
120 -- Is_Archive --
121 ----------------
123 function Is_Archive (Filename : String) return Boolean is
124 Ext : constant String := Get_Ext (Filename);
125 begin
126 return Target.Is_Archive_Ext (Ext);
127 end Is_Archive;
129 ----------
130 -- Is_C --
131 ----------
133 function Is_C (Filename : String) return Boolean is
134 Ext : constant String := Get_Ext (Filename);
135 begin
136 return Target.Is_C_Ext (Ext);
137 end Is_C;
139 ------------
140 -- Is_Obj --
141 ------------
143 function Is_Obj (Filename : String) return Boolean is
144 Ext : constant String := Get_Ext (Filename);
145 begin
146 return Target.Is_Object_Ext (Ext);
147 end Is_Obj;
149 end MLib.Fil;