File : osint-c.ads


   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-2015, 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 
  29 package 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.
 115 
 116    --------------------------------
 117    -- Library Information Output --
 118    --------------------------------
 119 
 120    --  These routines are used by the compiler to generate the library
 121    --  information file for the main source file being compiled. See section
 122    --  above for a discussion of how library information files are stored.
 123 
 124    procedure Create_Output_Library_Info;
 125    --  Creates the output library information file for the source file which
 126    --  is currently being compiled (i.e. the file which was most recently
 127    --  returned by Next_Main_Source).
 128 
 129    procedure Open_Output_Library_Info;
 130    --  Opens the output library information file for the source file which
 131    --  is currently being compiled (i.e. the file which was most recently
 132    --  returned by Next_Main_Source) for appending. This is used to append
 133    --  the globals computed in flow analysis in gnatprove mode.
 134 
 135    procedure Write_Library_Info (Info : String);
 136    --  Writes the contents of the referenced string to the library information
 137    --  file for the main source file currently being compiled (i.e. the file
 138    --  which was most recently opened with a call to Read_Next_File). Info
 139    --  represents a single line in the file, but does not contain any line
 140    --  termination characters. The implementation of Write_Library_Info is
 141    --  responsible for adding necessary end of line and end of file control
 142    --  characters to the generated file.
 143 
 144    procedure Close_Output_Library_Info;
 145    --  Closes the file created by Create_Output_Library_Info, flushing any
 146    --  buffers etc. from writes by Write_Library_Info.
 147 
 148    procedure Read_Library_Info
 149      (Name : out File_Name_Type;
 150       Text : out Text_Buffer_Ptr);
 151    --  The procedure version of Read_Library_Info is used from the compiler
 152    --  to read an existing ali file associated with the main unit. If the
 153    --  ALI file exists, then its file name is returned in Name, and its
 154    --  text is returned in Text. If the file does not exist, then Text is
 155    --  set to null.
 156 
 157    --------------------------
 158    -- C Translation Output --
 159    --------------------------
 160 
 161    --  These routines are used by the compiler when the C translation option
 162    --  is activated to write *.c or *.h files to the current object directory.
 163    --  Each routine exists in a C and an H form for the two kinds of files.
 164    --  Only one of these files can be written at a time. Note that the files
 165    --  are written via the Output package routines, using Output_FD.
 166 
 167    procedure Create_C_File;
 168    procedure Create_H_File;
 169    --  Creates the *.c or *.h file for the source file which is currently
 170    --  being compiled (i.e. the file which was most recently returned by
 171    --  Next_Main_Source).
 172 
 173    procedure Close_C_File;
 174    procedure Close_H_File;
 175    --  Closes the file created by Create_C_File or Create_H file, flushing any
 176    --  buffers etc. from writes by Write_C_File and Write_H_File;
 177 
 178    procedure Delete_C_File;
 179    procedure Delete_H_File;
 180    --  Deletes the .c or .h file corresponding to the source file which is
 181    --  currently being compiled.
 182 
 183    ----------------------
 184    -- List File Output --
 185    ----------------------
 186 
 187    procedure Create_List_File (S : String);
 188    --  Creates the file whose name is given by S. If the name starts with a
 189    --  period, then the name is xxx & S, where xxx is the name of the main
 190    --  source file without the extension stripped. Information is written to
 191    --  this file using Write_List_File.
 192 
 193    procedure Write_List_Info (S : String);
 194    --  Writes given string to the list file created by Create_List_File
 195 
 196    procedure Close_List_File;
 197    --  Close file previously opened by Create_List_File
 198 
 199    --------------------------------
 200    -- Semantic Tree Input-Output --
 201    --------------------------------
 202 
 203    procedure Tree_Create;
 204    --  Creates the tree output file for the source file which is currently
 205    --  being compiled (i.e. the file which was most recently returned by
 206    --  Next_Main_Source), and initializes Tree_IO.Tree_Write for output.
 207 
 208    procedure Tree_Close;
 209    --  Closes the file previously opened by Tree_Create
 210 
 211 end Osint.C;