OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [ada/] [vms_conv.ads] - Rev 20

Go to most recent revision | Compare with Previous | Blame | View Log

------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                            V M S _ C O N V                               --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 2003-2005, 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 2,  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 COPYING.  If not, write --
-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
-- Boston, MA 02110-1301, USA.                                              --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------
 
--  This package is part of the GNAT driver. It contains the procedure
--  VMS_Conversion to convert a VMS command line to the equivalent command
--  line with switches for the GNAT tools that the GNAT driver will invoke.
--  The qualifier declarations are contained in package VMS_Data.
 
with Table;
with VMS_Data; use VMS_Data;
 
with GNAT.OS_Lib; use GNAT.OS_Lib;
 
package VMS_Conv is
 
   --  A table to keep the switches on the command line
 
   package Last_Switches is new Table.Table
     (Table_Component_Type => String_Access,
      Table_Index_Type     => Integer,
      Table_Low_Bound      => 1,
      Table_Initial        => 20,
      Table_Increment      => 100,
      Table_Name           => "Gnatcmd.Last_Switches");
 
   Normal_Exit : exception;
   --  Raise this exception for normal program termination
 
   Error_Exit : exception;
   --  Raise this exception if error detected
 
   Errors : Natural := 0;
   --  Count errors detected
 
   Display_Command : Boolean := False;
   --  Set true if /? switch causes display of generated command (on VMS)
 
   -------------------
   -- Command Table --
   -------------------
 
   --  The command table contains an entry for each command recognized by
   --  GNATCmd. The entries are represented by an array of records.
 
   type Parameter_Type is
   --  A parameter is defined as a whitespace bounded string, not begining
   --   with a slash. (But see note under FILES_OR_WILDCARD).
     (File,
      --  A required file or directory parameter
 
      Optional_File,
      --  An optional file or directory parameter
 
      Other_As_Is,
      --  A parameter that's passed through as is (not canonicalized)
 
      Unlimited_Files,
      --  An unlimited number of whitespace separate file or directory
      --  parameters including wildcard specifications.
 
      Unlimited_As_Is,
      --  Un unlimited number of whitespace separated paameters that are
      --  passed through as is (not canonicalized).
 
      Files_Or_Wildcard);
      --  A comma separated list of files and/or wildcard file specifications.
      --  A comma preceded by or followed by whitespace is considered as a
      --  single comma character w/o whitespace.
 
   type Parameter_Array is array (Natural range <>) of Parameter_Type;
   type Parameter_Ref is access all Parameter_Array;
 
   type Command_Type is
     (Bind,
      Chop,
      Clean,
      Compile,
      Elim,
      Find,
      Krunch,
      Link,
      List,
      Make,
      Metric,
      Name,
      Preprocess,
      Pretty,
      Setup,
      Shared,
      Stub,
      Xref,
      Undefined);
 
   type Alternate_Command is (Comp, Ls, Kr, Pp, Prep);
   --  Alternate command label for non VMS system use
 
   Corresponding_To : constant array (Alternate_Command) of Command_Type :=
     (Comp  => Compile,
      Ls    => List,
      Kr    => Krunch,
      Prep  => Preprocess,
      Pp    => Pretty);
   --  Mapping of alternate commands to commands
 
   subtype Real_Command_Type is Command_Type range Bind .. Xref;
 
   type Command_Entry is record
      Cname : String_Ptr;
      --  Command name for GNAT xxx command
 
      Usage : String_Ptr;
      --  A usage string, used for error messages
 
      Unixcmd : String_Ptr;
      --  Corresponding Unix command
 
      Unixsws : Argument_List_Access;
      --  Switches for the Unix command
 
      VMS_Only : Boolean;
      --  When True, the command can only be used on VMS
 
      Switches : Switches_Ptr;
      --  Pointer to array of switch strings
 
      Params : Parameter_Ref;
      --  Describes the allowable types of parameters.
      --  Params (1) is the type of the first parameter, etc.
      --  An empty parameter array means this command takes no parameters.
 
      Defext : String (1 .. 3);
      --  Default extension. If non-blank, then this extension is supplied by
      --  default as the extension for any file parameter which does not have
      --  an extension already.
   end record;
 
   -------------------------
   -- Internal Structures --
   -------------------------
 
   --  The switches and commands are defined by strings in the previous
   --  section so that they are easy to modify, but internally, they are
   --  kept in a more conveniently accessible form described in this
   --  section.
 
   --  Commands, command qualifers and options have a similar common format
   --  so that searching for matching names can be done in a common manner.
 
   type Item_Id is (Id_Command, Id_Switch, Id_Option);
 
   type Translation_Type is
     (
      T_Direct,
      --  A qualifier with no options.
      --  Example: GNAT MAKE /VERBOSE
 
      T_Directories,
      --  A qualifier followed by a list of directories
      --  Example: GNAT COMPILE /SEARCH=([], [.FOO], [.BAR])
 
      T_Directory,
      --  A qualifier followed by one directory
      --  Example: GNAT LIBRARY /SET=[.VAXFLOATLIB]
 
      T_File,
      --  A qualifier followed by a filename
      --  Example: GNAT LINK /EXECUTABLE=FOO.EXE
 
      T_No_Space_File,
      --  A qualifier followed by a filename
      --  Example: GNAT MAKE /PROJECT_FILE=PRJ.GPR
 
      T_Numeric,
      --  A qualifier followed by a numeric value.
      --  Example: GNAT CHOP /FILE_NAME_MAX_LENGTH=39
 
      T_String,
      --  A qualifier followed by a quoted string. Only used by
      --  /IDENTIFICATION qualifier.
      --  Example: GNAT LINK /IDENTIFICATION="3.14a1 version"
 
      T_Options,
      --  A qualifier followed by a list of options.
      --  Example: GNAT COMPILE /REPRESENTATION_INFO=(ARRAYS,OBJECTS)
 
      T_Commands,
      --  A qualifier followed by a list. Only used for
      --  MAKE /COMPILER_QUALIFIERS /BINDER_QUALIFIERS /LINKER_QUALIFIERS
      --  (gnatmake -cargs -bargs -largs )
      --  Example: GNAT MAKE ... /LINKER_QUALIFIERS /VERBOSE FOOBAR.OBJ
 
      T_Other,
      --  A qualifier passed directly to the linker. Only used
      --  for LINK and SHARED if no other match is found.
      --  Example: GNAT LINK FOO.ALI /SYSSHR
 
      T_Alphanumplus
      --  A qualifier followed by a legal linker symbol prefix. Only used
      --  for BIND /BUILD_LIBRARY (gnatbind -Lxyz).
      --  Example: GNAT BIND /BUILD_LIBRARY=foobar
      );
 
   type Item (Id : Item_Id);
   type Item_Ptr is access all Item;
 
   type Item (Id : Item_Id) is record
      Name : String_Ptr;
      --  Name of the command, switch (with slash) or option
 
      Next : Item_Ptr;
      --  Pointer to next item on list, always has the same Id value
 
      Command : Command_Type := Undefined;
 
      Unix_String : String_Ptr := null;
      --  Corresponding Unix string. For a command, this is the unix command
      --  name and possible default switches. For a switch or option it is
      --  the unix switch string.
 
      case Id is
 
         when Id_Command =>
 
            Switches : Item_Ptr;
            --  Pointer to list of switch items for the command, linked
            --  through the Next fields with null terminating the list.
 
            Usage : String_Ptr;
            --  Usage information, used only for errors and the default
            --  list of commands output.
 
            Params : Parameter_Ref;
            --  Array of parameters
 
            Defext : String (1 .. 3);
            --  Default extension. If non-blank, then this extension is
            --  supplied by default as the extension for any file parameter
            --  which does not have an extension already.
 
         when Id_Switch =>
 
            Translation : Translation_Type;
            --  Type of switch translation. For all cases, except Options,
            --  this is the only field needed, since the Unix translation
            --  is found in Unix_String.
 
            Options : Item_Ptr;
            --  For the Options case, this field is set to point to a list
            --  of options item (for this case Unix_String is null in the
            --  main switch item). The end of the list is marked by null.
 
         when Id_Option =>
 
            null;
            --  No special fields needed, since Name and Unix_String are
            --  sufficient to completely described an option.
 
      end case;
   end record;
 
   subtype Command_Item is Item (Id_Command);
   subtype Switch_Item  is Item (Id_Switch);
   subtype Option_Item  is Item (Id_Option);
 
   -------------------
   -- Switch Tables --
   -------------------
 
   --  The switch tables contain an entry for each switch recognized by the
   --  command processor. It is initialized by procedure Initialize.
 
   Command_List : array (Real_Command_Type) of Command_Entry;
 
   ----------------
   -- Procedures --
   ----------------
 
   procedure Initialize;
   --  Initialized the switch table Command_List
 
   procedure Output_Version;
   --  Output the version of this program
 
   procedure VMS_Conversion (The_Command : out Command_Type);
   --  Converts VMS command line to equivalent Unix command line
 
end VMS_Conv;
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.