1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- P R J . U T I L -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 2001-2003 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 27-- Utilities for use in processing project files 28 29with Types; use Types; 30 31with GNAT.OS_Lib; use GNAT.OS_Lib; 32 33package Prj.Util is 34 35 function Executable_Of 36 (Project : Project_Id; Main : Name_Id) return Name_Id; 37 -- Return the value of the attribute Builder'Executable for file Main in 38 -- the project Project, if it exists. If there is no attribute Executable 39 -- for Main, remove the suffix from Main; then, if the attribute 40 -- Executable_Suffix is specified, add this suffix, otherwise add the 41 -- standard executable suffix for the platform. 42 43 function Value_Of 44 (Variable : Variable_Value; 45 Default : String) 46 return String; 47 -- Get the value of a single string variable. If Variable is 48 -- Nil_Variable_Value, is a string list or is defaulted, return Default. 49 50 function Value_Of 51 (Index : Name_Id; 52 In_Array : Array_Element_Id) 53 return Name_Id; 54 -- Get a single string array component. Returns No_Name if there is no 55 -- component Index, if In_Array is null, or if the component is a String 56 -- list. Depending on the attribute (only attributes may be associative 57 -- arrays) the index may or may not be case sensitive. If the index is not 58 -- case sensitive, it is first set to lower case before the search in the 59 -- associative array. 60 61 function Value_Of 62 (Index : Name_Id; 63 In_Array : Array_Element_Id) 64 return Variable_Value; 65 -- Get a string array component (single String or String list). 66 -- Returns Nil_Variable_Value if there is no component Index 67 -- or if In_Array is null. 68 -- 69 -- Depending on the attribute (only attributes may be associative arrays) 70 -- the index may or may not be case sensitive. If the index is not 71 -- case sensitive, it is first set to lower case before the search 72 -- in the associative array. 73 74 function Value_Of 75 (Name : Name_Id; 76 Attribute_Or_Array_Name : Name_Id; 77 In_Package : Package_Id) 78 return Variable_Value; 79 -- In a specific package, 80 -- - if there exists an array Attribute_Or_Array_Name with an index 81 -- Name, returns the corresponding component (depending on the 82 -- attribute, the index may or may not be case sensitive, see previous 83 -- function), 84 -- - otherwise if there is a single attribute Attribute_Or_Array_Name, 85 -- returns this attribute, 86 -- - otherwise, returns Nil_Variable_Value. 87 -- If In_Package is null, returns Nil_Variable_Value. 88 89 function Value_Of 90 (Index : Name_Id; 91 In_Array : Name_Id; 92 In_Arrays : Array_Id) 93 return Name_Id; 94 -- Get a string array component in an array of an array list. 95 -- Returns No_Name if there is no component Index, if In_Arrays is null, if 96 -- In_Array is not found in In_Arrays or if the component is a String list. 97 98 function Value_Of 99 (Name : Name_Id; 100 In_Arrays : Array_Id) 101 return Array_Element_Id; 102 -- Returns a specified array in an array list. Returns No_Array_Element 103 -- if In_Arrays is null or if Name is not the name of an array in 104 -- In_Arrays. The caller must ensure that Name is in lower case. 105 106 function Value_Of 107 (Name : Name_Id; 108 In_Packages : Package_Id) 109 return Package_Id; 110 -- Returns a specified package in a package list. Returns No_Package 111 -- if In_Packages is null or if Name is not the name of a package in 112 -- Package_List. The caller must ensure that Name is in lower case. 113 114 function Value_Of 115 (Variable_Name : Name_Id; 116 In_Variables : Variable_Id) 117 return Variable_Value; 118 -- Returns a specified variable in a variable list. Returns null if 119 -- In_Variables is null or if Variable_Name is not the name of a 120 -- variable in In_Variables. Caller must ensure that Name is lower case. 121 122 procedure Write_Str 123 (S : String; 124 Max_Length : Positive; 125 Separator : Character); 126 -- Output string S using Output.Write_Str. If S is too long to fit in 127 -- one line of Max_Length, cut it in several lines, using Separator as 128 -- the last character of each line, if possible. 129 130 type Text_File is limited private; 131 -- Represents a text file. Default is invalid text file. 132 133 function Is_Valid (File : Text_File) return Boolean; 134 -- Returns True if File designates an open text file that 135 -- has not yet been closed. 136 137 procedure Open (File : out Text_File; Name : String); 138 -- Open a text file. If this procedure fails, File is invalid. 139 140 function End_Of_File (File : Text_File) return Boolean; 141 -- Returns True if the end of the text file File has been 142 -- reached. Fails if File is invalid. 143 144 procedure Get_Line 145 (File : Text_File; 146 Line : out String; 147 Last : out Natural); 148 -- Reads a line from an open text file. Fails if File is invalid. 149 150 procedure Close (File : in out Text_File); 151 -- Close an open text file. File becomes invalid. 152 -- Fails if File is already invalid. 153 154private 155 156 type Text_File_Data is record 157 FD : File_Descriptor := Invalid_FD; 158 Buffer : String (1 .. 1_000); 159 Buffer_Len : Natural; 160 Cursor : Natural := 0; 161 End_Of_File_Reached : Boolean := False; 162 end record; 163 164 type Text_File is access Text_File_Data; 165 166end Prj.Util; 167