mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 16:34:07 +00:00
Upload
Digital Research
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
/***************************************************************************
|
||||
*
|
||||
* f d o p e n F u n c t i o n
|
||||
* -----------------------------
|
||||
* Copyright 1982 by Digital Research Inc. All rights reserved.
|
||||
*
|
||||
* "fdopen" associates a file which was opened by a file descriptor
|
||||
* (using "open" or "creat") with a stream.
|
||||
*
|
||||
* Calling sequence:
|
||||
* stream = fdopen( fd, mode )
|
||||
* Where:
|
||||
* stream -> stream info (FILE *) (NULLPTR returned on fail)
|
||||
* fd = small int returned by open or creat
|
||||
* mode = "r" for read-only, "w" for write, "a" for append
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include "stdio.h"
|
||||
|
||||
FILE * fdopen( fd, mode ) /* CLEAR FUNCTION ***********/
|
||||
REG WORD fd;
|
||||
REG BYTE *mode;
|
||||
{
|
||||
REG FILE *sp;
|
||||
REG WORD ii;
|
||||
/****************************/
|
||||
if( fd<0 || lseek(fd,0L,1)==FAILURE ) /* is fd valid? */
|
||||
return(NULLFILE); /* no, oh well */
|
||||
for( ii=0; /* look at _iob table */
|
||||
(sp=(&_iob[ii]))->_flag&(_IOREAD|_IOWRT); /* not marked rd/wrt */
|
||||
ii++ ) /* */
|
||||
if( ii >= MAXFILES ) /* if off end of table */
|
||||
break; /* */
|
||||
if( ii >= MAXFILES ) /* */
|
||||
return(NULLFILE); /* fail */
|
||||
if( *mode != 'r' && *mode != 'R') /* not 'r'ead mode? */
|
||||
{ /* */
|
||||
sp->_flag |= _IOWRT; /* set this flag */
|
||||
if( *mode == 'a' || /* 'a'ppend mode? */
|
||||
*mode == 'A' ) /* */
|
||||
lseek(fd,0L,2); /* its out there, seef EOF */
|
||||
} /* ************************/
|
||||
else sp->_flag |= _IOREAD; /* 'r'ead mode */
|
||||
/****************************/
|
||||
sp->_cnt = 0; /* init count */
|
||||
sp->_fd = fd; /* and file des */
|
||||
sp->_base = sp->_ptr = NULLPTR; /* and buffer pointers */
|
||||
/****************************/
|
||||
return(sp); /* return the stream ptr */
|
||||
} /****************************/
|
Reference in New Issue
Block a user