/****************************************************************************
 *                                                                          *
 *                         GNAT COMPILER COMPONENTS                         *
 *                                                                          *
 *                                 S C O S                                  *
 *                                                                          *
 *                              C Header File                               *
 *                                                                          *
 *           Copyright (C) 2014-2019, 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.      *
 *                                                                          *
 ****************************************************************************/

/* This is the C file that corresponds to the Ada package spec SCOs.  It was
   created manually from the file scos.ads.  */

#ifdef __cplusplus
extern "C" {
#endif


/* Unit table:  */

typedef Int SCO_Unit_Index;

struct SCO_Unit_Table_Entry
  {
    String_Pointer File_Name;
    Int File_Index;
    Nat Dep_Num;
    Nat From, To;
  };

typedef struct SCO_Unit_Table_Entry *SCO_Unit_Table_Type;

extern SCO_Unit_Table_Type scos__sco_unit_table__table;
#define SCO_Unit_Table scos__sco_unit_table__table

extern Int scos__sco_unit_table__min;
#define SCO_Unit_Table_Min scos__sco_unit_table__min

extern Int scos__sco_unit_table__last_val;
#define SCO_Unit_Table_Last_Val scos__sco_unit_table__last_val


/* SCOs table:  */

struct Source_Location
  {
    Line_Number_Type Line;
    Column_Number_Type Col;
  };

struct SCO_Table_Entry
  {
    struct Source_Location From, To;
    char C1, C2;
    bool Last;
    Source_Ptr Pragma_Sloc;
    Name_Id Pragma_Aspect_Name;
  };

typedef struct SCO_Table_Entry *SCO_Table_Type;

extern SCO_Table_Type scos__sco_table__table;
#define SCO_Table scos__sco_table__table

extern Int scos__sco_table__min;
#define SCO_Table_Min scos__sco_table__min

extern Int scos__sco_table__last_val;
#define SCO_Table_Last_Val scos__sco_table__last_val

#ifdef __cplusplus
}
#endif
