1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- V M S _ C O N V -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 2003-2010, 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 is part of the GNAT driver. It contains the procedure 27-- VMS_Conversion to convert a VMS command line to the equivalent command 28-- line with switches for the GNAT tools that the GNAT driver will invoke. 29-- The qualifier declarations are contained in package VMS_Data. 30 31with Table; 32with VMS_Data; use VMS_Data; 33with VMS_Cmds; use VMS_Cmds; 34 35with GNAT.OS_Lib; use GNAT.OS_Lib; 36 37package VMS_Conv is 38 39 -- A table to keep the switches on the command line 40 41 package Last_Switches is new Table.Table 42 (Table_Component_Type => String_Access, 43 Table_Index_Type => Integer, 44 Table_Low_Bound => 1, 45 Table_Initial => 20, 46 Table_Increment => 100, 47 Table_Name => "Gnatcmd.Last_Switches"); 48 49 Normal_Exit : exception; 50 -- Raise this exception for normal program termination 51 52 Error_Exit : exception; 53 -- Raise this exception if error detected 54 55 Errors : Natural := 0; 56 -- Count errors detected 57 58 Display_Command : Boolean := False; 59 -- Set true if /? switch causes display of generated command (on VMS) 60 61 ------------------- 62 -- Command Table -- 63 ------------------- 64 65 -- The command table contains an entry for each command recognized by 66 -- GNATCmd. The entries are represented by an array of records. 67 68 type Parameter_Type is 69 -- A parameter is defined as a whitespace bounded string, not beginning 70 -- with a slash. (But see note under FILES_OR_WILDCARD). 71 (File, 72 -- A required file or directory parameter 73 74 Optional_File, 75 -- An optional file or directory parameter 76 77 Other_As_Is, 78 -- A parameter that's passed through as is (not canonicalized) 79 80 Unlimited_Files, 81 -- An unlimited number of whitespace separate file or directory 82 -- parameters including wildcard specifications. 83 84 Unlimited_As_Is, 85 -- An unlimited number of whitespace separated parameters that are 86 -- passed through as is (not canonicalized). 87 88 Files_Or_Wildcard); 89 -- A comma separated list of files and/or wildcard file specifications. 90 -- A comma preceded by or followed by whitespace is considered as a 91 -- single comma character w/o whitespace. 92 93 type Parameter_Array is array (Natural range <>) of Parameter_Type; 94 type Parameter_Ref is access all Parameter_Array; 95 96 type Alternate_Command is (Comp, Ls, Kr, Pp, Prep); 97 -- Alternate command label for non VMS system use 98 99 Corresponding_To : constant array (Alternate_Command) of Command_Type := 100 (Comp => Compile, 101 Ls => List, 102 Kr => Krunch, 103 Prep => Preprocess, 104 Pp => Pretty); 105 -- Mapping of alternate commands to commands 106 107 subtype Real_Command_Type is Command_Type range Bind .. Xref; 108 109 type Command_Entry is record 110 Cname : String_Ptr; 111 -- Command name for GNAT xxx command 112 113 Usage : String_Ptr; 114 -- A usage string, used for error messages 115 116 Unixcmd : String_Ptr; 117 -- Corresponding Unix command 118 119 Unixsws : Argument_List_Access; 120 -- Switches for the Unix command 121 122 VMS_Only : Boolean; 123 -- When True, the command can only be used on VMS 124 125 Switches : Switches_Ptr; 126 -- Pointer to array of switch strings 127 128 Params : Parameter_Ref; 129 -- Describes the allowable types of parameters. 130 -- Params (1) is the type of the first parameter, etc. 131 -- An empty parameter array means this command takes no parameters. 132 133 Defext : String (1 .. 3); 134 -- Default extension. If non-blank, then this extension is supplied by 135 -- default as the extension for any file parameter which does not have 136 -- an extension already. 137 end record; 138 139 ------------------- 140 -- Switch Tables -- 141 ------------------- 142 143 -- The switch tables contain an entry for each switch recognized by the 144 -- command processor. It is initialized by procedure Initialize. 145 146 Command_List : array (Real_Command_Type) of Command_Entry; 147 148 ---------------- 149 -- Procedures -- 150 ---------------- 151 152 procedure Initialize; 153 -- Initialized the switch table Command_List 154 155 procedure Output_Version; 156 -- Output the version of this program 157 158 procedure VMS_Conversion (The_Command : out Command_Type); 159 -- Converts VMS command line to equivalent Unix command line 160 161end VMS_Conv; 162