/******************************************************************** * wilkinson * 3.13VMS * 1995/09/25 15:41 * gopher_root1:[gopher.g2.vms2_13.object]fileio.h,v * Exp * * Paul Lindner, University of Minnesota CIS. * * Copyright 1991, 92, 93, 94 by the Regents of the University of Minnesota * see the file "Copyright" in the distribution for conditions of use. ********************************************************************* * MODULE: fileio.h * Abstration of socket/file input output routines. ********************************************************************* * Revision History: * fileio.h,v * Revision 3.13VMS 1995/09/25 15:41 wilkinson * Use __VMS instead of VMS as trigger for VMS items * - VAX C's unixio.h invokes stat.h using text library #include syntax * and this butts heads with one convolution's #define stat barf_rstat * * Revision 3.13 1995/02/06 22:12:52 lindner * Smaller max for fileio structs * * Revision 3.12 1994/10/18 21:39:06 lindner * NeXT doesn't have mmap * * Revision 3.11 1994/09/29 19:54:24 lindner * Add definition for Memory mapped I/O * * Revision 3.10 1994/08/19 16:29:37 lindner * Add definition for memory mapped I/O * * Revision 3.9 1994/07/21 17:30:44 lindner * Mods for Xenix * * Revision 3.8 1994/04/25 03:40:07 lindner * VMS socket stuff still wasn't working.. * * Revision 3.7 1994/04/22 06:42:02 lindner * better compatibility checking * * Revision 3.6 1994/04/13 04:28:23 lindner * add vms compatible.h * * Revision 3.5 1994/04/01 04:43:55 lindner * fixes for VMS includes * * Revision 3.4 1994/03/17 04:36:32 lindner * Fix for UCX * * Revision 3.3 1994/03/11 00:09:14 lindner * Fix for UCX * * Revision 3.2 1994/03/08 03:21:18 lindner * Mods for opening processes without sh * * Revision 3.1 1994/02/20 16:20:50 lindner * New object based versions of buffered io routines * * *********************************************************************/ #ifndef FILEIO_H #define FILEIO_H #include "STRstring.h" #include "boolean.h" #include "Stdlib.h" #ifdef __VMS # include #ifndef __DECC # include #else # include "unixio.h" #endif # include #else # ifdef M_XENIX # include # include # include # else # include # endif #endif /* VMS */ #include "compatible.h" struct fileio_struct { int bufindex; int bufdatasize; int bytepos; char *buf; boolean issocket; String *filename; int fd; pid_t pid; }; typedef struct fileio_struct FileIO; #define FIOBUFSIZE 4096 #define FIOMAXOFILES 64 #define FIOisSocket(a) ((a)->issocket) #define FIOgetPid(a) ((a)->pid) #define FIOgetfd(a) ((a)->fd) #define FIOgetFilename(a) (STRget((a)->filename)) #define FIOgetBufIndex(a) ((a)->bufindex) #define FIOgetBufDsize(a) ((a)->bufdatasize) #define FIOsetfd(a,b) ((a)->fd=(b)) #define FIOsetPid(a,b) ((a)->pid=(b)) #define FIOsetSocket(a,b) ((a)->issocket=(b)) #define FIOsetFilename(a,b) (STRset((a)->filename,(b))) #define FIOsetBufIndex(a,b) ((a)->bufindex = (b)) #define FIOsetBufDsize(a,b) ((a)->bufdatasize = (b)) #define FIOisMMAPable(a) (FIOgetFilename(a) != NULL) /* * Optionally use BSD memory mapped I/O */ #if defined(sun) || defined(__svr4__) # define MMAP_IO #endif /* * More elegant way of doing socket writes than ifdefs everywhere */ #if defined(__VMS) #ifdef VMS_SERVER int VMS$system(char *); # define system(a) VMS$system(a) int FIOtell(FileIO *); void FIOseek(FileIO *, int); #else int DCLsystem(/* char */); # define system(a) DCLsystem(a) #endif /** Note that Multinet already has socket_* **/ # if defined(WOLLONGONG) || defined(CMUIP) || defined(NETLIB) # define socket_write netwrite # define socket_read netread # define socket_close netclose # endif # if defined(UCX) # define socket_write write # define socket_read read # define socket_close close # endif /** Note that Wollongong is like Multinet for EPIPE handling **/ # if defined(UCX) || defined(CMUIP) || defined(NETLIB) # define FIO_NOMULTIEOF # endif #else /* Unix systems */ # define socket_write write # define socket_read read # define socket_close close #endif /** Forward Declarations **/ FileIO *FIOopenUFS(); FileIO *FIOopenfd(); FileIO *FIOopenProcess(); FileIO *FIOopenCmdline(); int FIOclose(); int FIOwriten(); int FIOwritestring(); int FIOreadbuf(); int FIOreadn(); int FIOreadline(); int FIOwaitpid(); char **FIOgetargv(); #endif .