home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / fname.ads < prev    next >
Text File  |  1996-09-28  |  7KB  |  137 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                                F N A M E                                 --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.16 $                             --
  10. --                                                                          --
  11. --        Copyright (c) 1992,1993,1994,1995 NYU, All Rights Reserved        --
  12. --                                                                          --
  13. -- The GNAT library is free software; you can redistribute it and/or modify --
  14. -- it under terms of the GNU Library General Public License as published by --
  15. -- the Free Software  Foundation; either version 2, or (at your option) any --
  16. -- later version.  The GNAT library is distributed in the hope that it will --
  17. -- be useful, but WITHOUT ANY WARRANTY;  without even  the implied warranty --
  18. -- of MERCHANTABILITY  or  FITNESS FOR  A PARTICULAR PURPOSE.  See the  GNU --
  19. -- Library  General  Public  License for  more  details.  You  should  have --
  20. -- received  a copy of the GNU  Library  General Public License  along with --
  21. -- the GNAT library;  see the file  COPYING.LIB.  If not, write to the Free --
  22. -- Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.        --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. --  This package defines the association between source file names and
  27. --  unit names as defined in package Uname.
  28.  
  29. with Types; use Types;
  30.  
  31. package Fname is
  32.  
  33.    --  Note: this package spec does not depend on the Uname spec in the Ada
  34.    --  sense, but the comments and description of the semantics do depend on
  35.    --  the conventions established by Uname, which explains the "with Uname".
  36.  
  37.    ---------------------------
  38.    -- File Name Conventions --
  39.    ---------------------------
  40.  
  41.    --  GNAT requires that there be a one to one correspondence between source
  42.    --  file names (as used in the Osint package interface) and unit names as
  43.    --  defined by the Uname package. This correspondence is defined by the
  44.    --  two subprograms defined here in the Fname package.
  45.  
  46.    --  The body of this package is potentially system dependent, since file
  47.    --  naming conventions do differ from operating system to operating system.
  48.    --  However, the code in the body of Fname does not typically require any
  49.    --  operating system interface, and furthermore, we choose a convention
  50.    --  that is likely to be widely implementable, and certainly is one that
  51.    --  can be shared between Unix, DOS, NT, Mac OS and OS/2.
  52.  
  53.    --  Since we do expect this convention to be followed widely, and since
  54.    --  Osint depends on the convention, it is described here in the Spec.
  55.    --  However, no unit (other than Osint) in any way depends on the choices
  56.    --  described here.
  57.  
  58.    --  Unit names are the Ada names, with all lower case letters (except for
  59.    --  the use of upper case letters for encoding and for internal names,
  60.    --  see package Namet for further details), and a suffix that is either
  61.    --  that is either %b or %s for bodies and specs respectively. This is the
  62.    --  convention described and implemented in package Uname.
  63.  
  64.    --  Source file names are obtained by taking the decoded unit name (i.e.
  65.    --  with Uhh and Whhhh sequences decoded to the ESC sequence or literal
  66.    --  upper half character), excluding the %b or %s, and replacing the
  67.    --  periods with minus signs. The extension is either .ads for a spec,
  68.    --  or .adb for a body (or subunit).
  69.  
  70.    --  Examples of these rules are:
  71.  
  72.    --    Unit                           Unit name           File name
  73.  
  74.    --    Packge_Scan (spec)             packge_scan%s      packge_scan.ads
  75.    --    Packge_Scan (body)             packge_scan%b      packge_scan.adb
  76.    --    Scn.Nlit (subunit)             scn.nlit%b         scn-nlit.adb
  77.    --    Child.Pkg (child unit spec)    child.pkg%s        child-pkg.ads
  78.    --    Child.Pkg (child unit body)    child.pkg%b        child-pkg.adb
  79.    --    Xyz.Arg.Lms (child subunit)    xyz.arg.lms%b      xyz-arg-lms.adb
  80.    --    Accent?d (spec)                accentUc1d         accent?d.ads
  81.  
  82.    --  In the last example, ? stands for the graphic character that is
  83.    --  displayed for the character UC_A_Acute (i.e. an upper case accented A).
  84.  
  85.    --  Note that the file name does *not* include the directory name. The
  86.    --  management of directories is provided by Osint, and full file names
  87.    --  are used only for error message purposes within GNAT itself.
  88.  
  89.    -------------------------
  90.    -- File Name Crunching --
  91.    -------------------------
  92.  
  93.    --  The rules described above give the file names that are generated if
  94.    --  there is no restriction on the length of file names. However, the
  95.    --  Get_File_Name routine will, if necessary according to the value in
  96.    --  Opt.Maximum_File_Name_Length, crunch these file names down to this
  97.    --  maximum value. For details of the crunching algorithm, see Krunch.
  98.  
  99.    -----------------
  100.    -- Subprograms --
  101.    -----------------
  102.  
  103.    type Expected_Unit_Type is (Expect_Body, Expect_Spec, Unknown);
  104.    --  Return value from Get_Expected_Unit_Type
  105.  
  106.    function Get_Expected_Unit_Type
  107.      (Fname : File_Name_Type)
  108.       return  Expected_Unit_Type;
  109.    --  If possible, determine whether the given file name corresponds to a unit
  110.    --  that is a spec or body (e.g. by examining the extension). If this cannot
  111.    --  be determined with the file naming conventions in use, then the returned
  112.    --  value is set to Unknown.
  113.  
  114.    function Get_File_Name (Uname : Unit_Name_Type) return File_Name_Type;
  115.    --  This function returns the file name that corresponds to a given unit
  116.    --  name. The caller is responsible for ensuring that the unit name meets
  117.    --  the requirements given in package Uname and described above.
  118.  
  119.    function Is_Language_Defined_Unit (Fname : File_Name_Type) return Boolean;
  120.    --  This function determines if the given file name (which must be a simple
  121.    --  file name with no directory information) is the file name for one of
  122.    --  the predefined library units.
  123.  
  124.    function Is_File_Name (Name : Name_Id) return Boolean;
  125.    --  Returns True if Name is the name of an ada source file (i.e. it abides
  126.    --  to gnat file naming conventions).
  127.  
  128.    function File_Name_Of_Spec (Name : Name_Id) return File_Name_Type;
  129.    --  Returns the file name that corresponds to the spec of a given unit
  130.    --  name. Name does not end in "%s". If it does use Get_File_Name above.
  131.  
  132.    function File_Name_Of_Body (Name : Name_Id) return File_Name_Type;
  133.    --  Returns the file name that corresponds to the body of a given unit
  134.    --  name. Name does not end in "%b". If it does use Get_File_Name above.
  135.  
  136. end Fname;
  137.