Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

63 lines
2.4 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/***************************************************************************
*
* R e a d F u n c t i o n
* -------------------------
* Copyright 1982 by Digital Research Inc. All rights reserved.
*
* The read function simulates the UNIX read system call. Any
* arbitrary number of bytes may be read at any arbitrary offset in
* the file.
* The terminal handler for read has been set up to simulate some of
* the functions provided by "ioctl".
*
* Edits:
* 11-Dec-83 whf Divide into separate files, do PC-DOS I/O
*
* Calling Sequence:
* ret = read(fd,buffer,bytes);
* Where:
* ret Is the number of bytes which were actually read
* fd Is an open file descriptor
* buffer Is the buffer address
* bytes Is the number of bytes to read
*
****************************************************************************/
#include "portab.h"
#include "osif.h"
#include "osiferr.h"
#include "errno.h"
UWORD read(fd,buff,bytes) /* CLEAR FUNCTION ***********/
WORD fd; /* File descriptor */
BYTE *buff; /* -> buffer start */
UWORD bytes; /* = byte count to read */
{ /****************************/
REG FD *fp; /* -> ccb to read from */
FD *_chkc(); /* Converts fd to fp */
UWORD _ttyin(); /* Read from tty rtn */
UWORD _rdasc(); /* Read ascii rtn */
UWORD _rdbin(); /* Read binary rtn */
/****************************/
if((fp=_chkc(fd)) == NULLFD) /* File open & OK?? */
return(FAILURE); /* No: EBADF */
if((fp->flags & ATEOF) != 0) /* End of file already? */
return(0); /* Yes, quit now */
if((fp->flags & ISLPT) != 0) /* A wise guy?? */
RETERR(FAILURE,EBADF); /* A wise guy!! */
/****************************/
if((fp->flags & ISTTY) != 0) /* TTY? */
return(_ttyin(fp,buff,bytes)); /* Yes, read 1 line */
/****************************/
if(fp->flags & ISASCII) /* ASCII?? */
return(_rdasc(fp,buff,(LONG)bytes)); /* Yes, read ascii */
else return(_rdbin(fp,buff,(LONG)bytes)); /* No, read binary */
/****************************/
}
* No, read binary */
/****************************/
}
* No, read binary */
/****************************/
}