1------------------------------------------------------------------------------
2--                                                                          --
3--                         GNAT COMPILER COMPONENTS                         --
4--                                                                          --
5--                              O S I N T - C                               --
6--                                                                          --
7--                                 S p e c                                  --
8--                                                                          --
9--          Copyright (C) 2001-2019, 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 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------------------------------------------------------------------------------
25
26--  This package contains the low level, operating system routines used only
27--  in the GNAT compiler for command line processing and file input output.
28
29package Osint.C is
30
31   procedure Set_Output_Object_File_Name (Name : String);
32   --  Called by the subprogram processing the command line when an
33   --  output object file name is found.
34
35   function Get_Output_Object_File_Name return String;
36   --  Returns the name of the output object file as saved by a call to
37   --  Set_Output_Object_File_Name. Only valid to call if name has been set.
38
39   function More_Source_Files return Boolean;
40   --  Indicates whether more source file remain to be processed. Returns
41   --  False right away if no source files, or if all source files have
42   --  been processed.
43
44   function Next_Main_Source return File_Name_Type;
45   --  This function returns the name of the next main source file specified
46   --  on the command line. It is an error to call Next_Main_Source if no more
47   --  source files exist (i.e. Next_Main_Source may be called only if a
48   --  previous call to More_Source_Files returned True). This name is the
49   --  simple file name (without any directory information).
50
51   ------------------------------
52   -- Debug Source File Output --
53   ------------------------------
54
55   --  These routines are used by the compiler to generate the debug source
56   --  file for the Debug_Generated_Code (-gnatD switch) option. Note that
57   --  debug source file writing occurs at a completely different point in
58   --  the processing from library information output, or representation
59   --  output, so the code in the body can assume that no two of these
60   --  functions are ever used at the same time.
61
62   function Create_Debug_File (Src : File_Name_Type) return File_Name_Type;
63   --  Given the simple name of a source file, this routine creates the
64   --  corresponding debug file, and returns its full name.
65
66   procedure Write_Debug_Info (Info : String);
67   --  Writes contents of given string as next line of the current debug
68   --  source file created by the most recent call to Create_Debug_File.
69   --  Info does not contain end of line or other formatting characters.
70
71   procedure Close_Debug_File;
72   --  Close current debug file created by the most recent call to
73   --  Create_Debug_File.
74
75   function Debug_File_Eol_Length return Nat;
76   --  Returns the number of characters (1 for NL, 2 for CR/LF) written
77   --  at the end of each line by Write_Debug_Info.
78
79   --------------------------------
80   -- Representation File Output --
81   --------------------------------
82
83   --  These routines are used by the compiler to generate the representation
84   --  information to a file if this option is specified (-gnatR?s switch).
85   --  Note that the writing of this file occurs at a completely different
86   --  point in the processing from library information output, or from
87   --  debug file output, so the code in the body can assume that no two
88   --  of these functions are ever used at the same time.
89
90   --  Note: these routines are called from Repinfo, but are not called
91   --  directly, since we do not want Repinfo to depend on Osint. That
92   --  would cause a lot of unwanted junk to be dragged into ASIS. So
93   --  what we do is we have Initialize set the addresses of these three
94   --  procedures in appropriate variables in Repinfo, so that they can
95   --  be called indirectly without creating a dependence.
96
97   procedure Create_Repinfo_File (Src : String);
98   --  Given the simple name of a source file, this routine creates the
99   --  corresponding file to hold representation information. Note that the
100   --  call destroys the contents of Name_Buffer and Name_Len.
101
102   procedure Write_Repinfo_Line (Info : String);
103   --  Writes contents of given string as next line of the current debug
104   --  source file created by the most recent call to Create_Repinfo_File.
105   --  Info does not contain end of line or other formatting characters.
106
107   procedure Close_Repinfo_File;
108   --  Close current debug file created by the most recent call to
109   --  Create_Repinfo_File.
110
111   procedure Set_File_Name (Ext : String);
112   --  Sets a default file name from the main compiler source name. Ext is the
113   --  extension, e.g. "ali" for a library information file. The name is in
114   --  Name_Buffer (with length in Name_Len) on return, with
115   --  Name_Buffer (Name_Len) always set to ASCII.NUL.
116
117   --------------------------------
118   -- Library Information Output --
119   --------------------------------
120
121   --  These routines are used by the compiler to generate the library
122   --  information file for the main source file being compiled. See section
123   --  above for a discussion of how library information files are stored.
124
125   procedure Create_Output_Library_Info;
126   --  Creates the output library information file for the source file which
127   --  is currently being compiled (i.e. the file which was most recently
128   --  returned by Next_Main_Source).
129
130   procedure Open_Output_Library_Info;
131   --  Opens the output library information file for the source file which
132   --  is currently being compiled (i.e. the file which was most recently
133   --  returned by Next_Main_Source) for appending. This is used to append
134   --  the globals computed in flow analysis in gnatprove mode.
135
136   procedure Write_Library_Info (Info : String);
137   --  Writes the contents of the referenced string to the library information
138   --  file for the main source file currently being compiled (i.e. the file
139   --  which was most recently opened with a call to Read_Next_File). Info
140   --  represents a single line in the file, but does not contain any line
141   --  termination characters. The implementation of Write_Library_Info is
142   --  responsible for adding necessary end of line and end of file control
143   --  characters to the generated file.
144
145   procedure Close_Output_Library_Info;
146   --  Closes the file created by Create_Output_Library_Info, flushing any
147   --  buffers etc. from writes by Write_Library_Info.
148
149   procedure Read_Library_Info
150     (Name : out File_Name_Type;
151      Text : out Text_Buffer_Ptr);
152   --  The procedure version of Read_Library_Info is used from the compiler
153   --  to read an existing ali file associated with the main unit. If the
154   --  ALI file exists, then its file name is returned in Name, and its
155   --  text is returned in Text. If the file does not exist, then Text is
156   --  set to null.
157
158   --------------------------
159   -- C Translation Output --
160   --------------------------
161
162   --  These routines are used by the compiler when the C translation option
163   --  is activated to write *.c or *.h files to the current object directory.
164   --  Each routine exists in a C and an H form for the two kinds of files.
165   --  Only one of these files can be written at a time. Note that the files
166   --  are written via the Output package routines, using Output_FD.
167
168   procedure Create_C_File;
169   procedure Create_H_File;
170   --  Creates the *.c or *.h file for the source file which is currently
171   --  being compiled (i.e. the file which was most recently returned by
172   --  Next_Main_Source).
173
174   procedure Close_C_File;
175   procedure Close_H_File;
176   --  Closes the file created by Create_C_File or Create_H file, flushing any
177   --  buffers etc. from writes by Write_C_File and Write_H_File;
178
179   procedure Delete_C_File;
180   procedure Delete_H_File;
181   --  Deletes the .c or .h file corresponding to the source file which is
182   --  currently being compiled.
183
184   ----------------------
185   -- List File Output --
186   ----------------------
187
188   procedure Create_List_File (S : String);
189   --  Creates the file whose name is given by S. If the name starts with a
190   --  period, then the name is xxx & S, where xxx is the name of the main
191   --  source file without the extension stripped. Information is written to
192   --  this file using Write_List_File.
193
194   procedure Write_List_Info (S : String);
195   --  Writes given string to the list file created by Create_List_File
196
197   procedure Close_List_File;
198   --  Close file previously opened by Create_List_File
199
200   --------------------------------
201   -- Semantic Tree Input-Output --
202   --------------------------------
203
204   procedure Tree_Create;
205   --  Creates the tree output file for the source file which is currently
206   --  being compiled (i.e. the file which was most recently returned by
207   --  Next_Main_Source), and initializes Tree_IO.Tree_Write for output.
208
209   procedure Tree_Close;
210   --  Closes the file previously opened by Tree_Create
211
212end Osint.C;
213