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 / s-ficobl.ads < prev    next >
Text File  |  1996-09-28  |  7KB  |  147 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT RUN-TIME COMPONENTS                         --
  4. --                                                                          --
  5. --              S Y S T E M . F I L E _ C O N T R O L _ B L O C K           --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.4 $                              --
  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 contains the declaration of the basic file control block
  27. --  shared between Text_IO, Sequential_IO, Direct_IO and Streams.Stream_IO.
  28. --  The actual control blocks are derived from this block by extension. The
  29. --  control block is itself derived from Ada.Streams.Root_Stream_Type which
  30. --  facilitates implementation of Stream_IO.Stream and Text_Streams.Stream.
  31.  
  32. with Ada.Streams;
  33.  
  34. package System.File_Control_Block is
  35.  
  36.    -----------------------------
  37.    --  Ada File Control Block --
  38.    -----------------------------
  39.  
  40.    --  The Ada file control block is an abstract extension of the root
  41.    --  stream type. This allows a file to be treated directly as a stream
  42.    --  for the purposes of Stream_IO, or stream operations on a text file.
  43.    --  The individual I/O packages extend this type with package specific
  44.    --  fields to create the concrete types to which the routines in this
  45.    --  package can be applied.
  46.  
  47.    --  The type File_Type in the individual packages is an access to the
  48.    --  extended file control block. The value is null if the file is not
  49.    --  open, and a pointer to the control block if the file is open.
  50.  
  51.    type Pstring is access all String;
  52.    --  Used to hold name and form strings
  53.  
  54.    type File_Mode is (In_File, Inout_File, Out_File, Append_File);
  55.    --  File mode (union of file modes permitted by individual packages,
  56.    --  the types File_Mode in the individual packages are declared to
  57.    --  allow easy conversion to and from this general type.
  58.  
  59.    type Shared_Status_Type is (Yes, No, None);
  60.    --  This type is used to define the sharing status of a file. The default
  61.    --  setting of None is used if no "shared=xxx" appears in the form string
  62.    --  when a file is created or opened. For a file with Shared_Status set to
  63.    --  None, Use_Error will be raised if any other file is opened or created
  64.    --  with the same full name. Yes/No are set in response to the presence
  65.    --  of "shared=yes" or "shared=no" in the form string. In either case it
  66.    --  is permissible to have multiple files opened with the same full name.
  67.    --  All files opened simultaneously with "shared=yes" will share the same
  68.    --  stream with the semantics specified in the RM for file sharing. All
  69.    --  files opened with "shared=no" will have their own stream.
  70.  
  71.    type AFCB;
  72.    type AFCB_Ptr is access all AFCB'Class;
  73.  
  74.    type AFCB is abstract new Ada.Streams.Root_Stream_Type with record
  75.  
  76.       Stream : Address;
  77.       --  The file descriptor
  78.  
  79.       Name : Pstring;
  80.       --  A pointer to the file name. The file name is null for temporary
  81.       --  files, and also for standard files (stdin, stdout, stderr). The
  82.       --  name is always null-terminated if it is non-null.
  83.  
  84.       Form : Pstring;
  85.       --  A pointer to the form string. This is the string used in the
  86.       --  fopen call, and must be supplied by the caller (there are no
  87.       --  defaults at this level). The string is always null-terminated.
  88.  
  89.       Mode : File_Mode;
  90.       --  The file mode. No checks are made that the mode is consistent
  91.       --  with the form used to fopen the file.
  92.  
  93.       Is_Regular_File : Boolean;
  94.       --  A flag indicating if the file is a regular file
  95.  
  96.       Is_Temporary_File : Boolean;
  97.       --  A flag set only for temporary files (i.e. files created using the
  98.       --  Create function with a null name parameter, using tmpfile).
  99.  
  100.       Is_System_File : Boolean;
  101.       --  A flag set only for system files (stdin, stdout, stderr)
  102.  
  103.       Is_Text_File : Boolean;
  104.       --  A flag set if the file was opened in text mode
  105.  
  106.       Shared_Status : Shared_Status_Type;
  107.       --  Indicates sharing status of file, see description of type above
  108.  
  109.       Access_Method : Character;
  110.       --  Set to 'Q', 'S', 'T, 'D' for Sequential_IO, Stream_IO, Text_IO
  111.       --  Direct_IO file (used to validate file sharing request).
  112.  
  113.       Next : AFCB_Ptr;
  114.       Prev : AFCB_Ptr;
  115.       --  All open files are kept on a doubly linked chain, with these
  116.       --  pointers used to maintain the next and previous pointers.
  117.  
  118.    end record;
  119.  
  120.    ----------------------------------
  121.    -- Primitive Operations of AFCB --
  122.    ----------------------------------
  123.  
  124.    --  Note that we inherit the abstract operations Read and Write from
  125.    --  the base type. These must be overridden by the individual file
  126.    --  access methods to provide Stream Read/Write access.
  127.  
  128.    function AFCB_Allocate (Control_Block : AFCB) return AFCB_Ptr is abstract;
  129.    --  Given a control block, allocate space for a control block of the same
  130.    --  type on the heap, and return the pointer to this allocated block. Note
  131.    --  that the argument Control_Block is not used other than as the argument
  132.    --  that controls which version of AFCB_Allocate is called.
  133.  
  134.    procedure AFCB_Close (File : access AFCB) is abstract;
  135.    --  Performs any specialized close actions on a file before the file is
  136.    --  actually closed at the system level. This is called by Close, and
  137.    --  the reason we need the primitive operation is for the automatic
  138.    --  close operations done as part of finalization.
  139.  
  140.    procedure AFCB_Free (File : access AFCB) is abstract;
  141.    --  Frees the AFCB referenced by the given parameter. It is not necessary
  142.    --  to free the strings referenced by the Form and Name fields, but if the
  143.    --  extension has any other heap objects, they must be freed as well. This
  144.    --  procedure must be overridden by each individual file package.
  145.  
  146. end System.File_Control_Block;
  147.