| ------------------------------------------------------------------------------ |
| -- -- |
| -- GNAT COMPILER COMPONENTS -- |
| -- -- |
| -- F N A M E . S F -- |
| -- -- |
| -- B o d y -- |
| -- -- |
| -- Copyright (C) 1992-2008, Free Software Foundation, Inc. -- |
| -- -- |
| -- GNAT is free software; you can redistribute it and/or modify it under -- |
| -- terms of the GNU General Public License as published by the Free Soft- -- |
| -- ware Foundation; either version 3, or (at your option) any later ver- -- |
| -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- |
| -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- |
| -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- |
| -- for more details. You should have received a copy of the GNU General -- |
| -- Public License distributed with GNAT; see file COPYING3. If not, go to -- |
| -- http://www.gnu.org/licenses for a complete copy of the license. -- |
| -- -- |
| -- GNAT was originally developed by the GNAT team at New York University. -- |
| -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
| -- -- |
| ------------------------------------------------------------------------------ |
| |
| with Casing; use Casing; |
| with Fname; use Fname; |
| with Fname.UF; use Fname.UF; |
| with SFN_Scan; use SFN_Scan; |
| with Osint; use Osint; |
| with Types; use Types; |
| |
| with Unchecked_Conversion; |
| |
| package body Fname.SF is |
| |
| function To_Big_String_Ptr is new Unchecked_Conversion |
| (Source_Buffer_Ptr, Big_String_Ptr); |
| |
| ---------------------- |
| -- Local Procedures -- |
| ---------------------- |
| |
| procedure Set_File_Name |
| (Typ : Character; |
| U : String; |
| F : String; |
| Index : Natural); |
| -- This is a transfer function that is called from Scan_SFN_Pragmas, |
| -- and reformats its parameters appropriately for the version of |
| -- Set_File_Name found in Fname.SF. |
| |
| procedure Set_File_Name_Pattern |
| (Pat : String; |
| Typ : Character; |
| Dot : String; |
| Cas : Character); |
| -- This is a transfer function that is called from Scan_SFN_Pragmas, |
| -- and reformats its parameters appropriately for the version of |
| -- Set_File_Name_Pattern found in Fname.SF. |
| |
| ----------------------------------- |
| -- Read_Source_File_Name_Pragmas -- |
| ----------------------------------- |
| |
| procedure Read_Source_File_Name_Pragmas is |
| Src : Source_Buffer_Ptr; |
| Hi : Source_Ptr; |
| BS : Big_String_Ptr; |
| SP : String_Ptr; |
| |
| begin |
| Name_Buffer (1 .. 8) := "gnat.adc"; |
| Name_Len := 8; |
| Read_Source_File (Name_Enter, 0, Hi, Src); |
| |
| if Src /= null then |
| BS := To_Big_String_Ptr (Src); |
| SP := BS (1 .. Natural (Hi))'Unrestricted_Access; |
| Scan_SFN_Pragmas |
| (SP.all, |
| Set_File_Name'Access, |
| Set_File_Name_Pattern'Access); |
| end if; |
| end Read_Source_File_Name_Pragmas; |
| |
| ------------------- |
| -- Set_File_Name -- |
| ------------------- |
| |
| procedure Set_File_Name |
| (Typ : Character; |
| U : String; |
| F : String; |
| Index : Natural) |
| is |
| Unm : Unit_Name_Type; |
| Fnm : File_Name_Type; |
| begin |
| Name_Buffer (1 .. U'Length) := U; |
| Name_Len := U'Length; |
| Set_Casing (All_Lower_Case); |
| Name_Buffer (Name_Len + 1) := '%'; |
| Name_Buffer (Name_Len + 2) := Typ; |
| Name_Len := Name_Len + 2; |
| Unm := Name_Find; |
| Name_Buffer (1 .. F'Length) := F; |
| Name_Len := F'Length; |
| Fnm := Name_Find; |
| Fname.UF.Set_File_Name (Unm, Fnm, Nat (Index)); |
| end Set_File_Name; |
| |
| --------------------------- |
| -- Set_File_Name_Pattern -- |
| --------------------------- |
| |
| procedure Set_File_Name_Pattern |
| (Pat : String; |
| Typ : Character; |
| Dot : String; |
| Cas : Character) |
| is |
| Ctyp : Casing_Type; |
| Patp : constant String_Ptr := new String'(Pat); |
| Dotp : constant String_Ptr := new String'(Dot); |
| |
| begin |
| if Cas = 'l' then |
| Ctyp := All_Lower_Case; |
| elsif Cas = 'u' then |
| Ctyp := All_Upper_Case; |
| else -- Cas = 'm' |
| Ctyp := Mixed_Case; |
| end if; |
| |
| Fname.UF.Set_File_Name_Pattern (Patp, Typ, Dotp, Ctyp); |
| end Set_File_Name_Pattern; |
| |
| end Fname.SF; |