--;;; -*- mode:lisp;package:user;base:10.;fonts: cptfontb -*- 
-- $Header: /ct/interp/diriop.ada,v 1.9 84/09/27 22:15:28 alex Exp $

-- 14.2.3  Specification of the Package Direct_IO
                                                                    
 	   with IO_EXCEPTIONS;
   generic
    type ELEMENT_TYPE is  private;

   package DIRECT_IO is
     
     type FILE_TYPE is limited private;
     type FILE_MODE is (IN_FILE, INOUT_FILE, OUT_FILE);

     type COUNT is range 1 .. 1000; -- change later;
     subtype POSITIVE_COUNT is COUNT range 1 .. 100;
 
     -- File management
 
     procedure CREATE  (FILE : in out FILE_TYPE;
                         MODE : in FILE_MODE:= INOUT_FILE;
                         NAME : in STRING    := "";
                         FORM : in STRING    := "");
  
     procedure OPEN    (FILE : in out FILE_TYPE;
                        MODE : in FILE_MODE;
                        NAME : in STRING;
                        FORM : in STRING := "");
 
     procedure CLOSE   (FILE : in out FILE_TYPE);
     procedure DELETE  (FILE : in out FILE_TYPE);
     procedure RESET   (FILE : in out FILE_TYPE; MODE : in FILE_MODE);
     procedure RESET   (FILE : in out FILE_TYPE);
 
     function  MODE    (FILE : in FILE_TYPE) return FILE_MODE;
     function  NAME    (FILE : in FILE_TYPE) return STRING;
     function  FORM    (FILE : in FILE_TYPE) return STRING;
     function  IS_OPEN (FILE : in FILE_TYPE) return BOOLEAN;
 
     -- Input and output operations
 
     procedure READ    (FILE : in  FILE_TYPE; ITEM : in out ELEMENT_TYPE);
     procedure READ    (FILE : in  FILE_TYPE; ITEM : in out ELEMENT_TYPE;
			                      FROM : in  POSITIVE_COUNT);

     procedure WRITE   (FILE : in  FILE_TYPE; ITEM : in ELEMENT_TYPE);
     procedure WRITE   (FILE : in  FILE_TYPE; ITEM : in ELEMENT_TYPE;
					      TO   : in POSITIVE_COUNT);

     procedure SET_INDEX(FILE : in FILE_TYPE; TO   : in POSITIVE_COUNT);
     function  INDEX	(FILE : in FILE_TYPE) return POSITIVE_COUNT;
     function  SIZE	(FILE : in FILE_TYPE) return COUNT;

     function END_OF_FILE (FILE : in FILE_TYPE) return BOOLEAN;

     -- Exceptions
 
     STATUS_ERROR : exception renames IO_EXCEPTIONS.STATUS_ERROR; 
     MODE_ERROR   : exception renames IO_EXCEPTIONS.MODE_ERROR;
     NAME_ERROR   : exception renames IO_EXCEPTIONS.NAME_ERROR;
     USE_ERROR    : exception renames IO_EXCEPTIONS.USE_ERROR;
     DEVICE_ERROR : exception renames IO_EXCEPTIONS.DEVICE_ERROR;
     END_ERROR    : exception renames IO_EXCEPTIONS.END_ERROR;
     DATA_ERROR   : exception renames IO_EXCEPTIONS.DATA_ERROR;
 
   private
      -- implementation dependent
     type FILE_TYPE is RECORD
                         filepos : INTEGER := 0;
		       end RECORD;
   end DIRECT_IO;
