/*
   Name: stream.h
   Language: ANSI/ISO C

   Purpose: An attempt encapsulate an abstract data type (namely a stream) 
            using C.  

   Author: James Blustein <jamie@csd.uwo.ca>
   Created: 1 January 1996
   Last Modified: 30 April 1996 by James Blustein
                  using constant function pointers (thanks to Thad Smith)
   See also: stream.c
*/

#include <stdio.h>

/* Definition of opaque File_t datatype */

  typedef FILE * (f_open_func) 
                 (const char * proc, const char * fname, const char * mode);
  typedef bool   (f_close_func)
                 (const char * proc, const char * fname, FILE * handle);

typedef struct File_t {
   f_open_func  * const open;
   f_close_func * const close;
} File_t;


/* Import definition of type File from "stream.c" */
extern File_t Stream;

/* end of "stream.h" */
