mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 17:04:19 +00:00
Upload
Digital Research
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
/***************************************************************************
|
||||
*
|
||||
* W r i t e F u n c t i o n
|
||||
* ---------------------------
|
||||
* Copyright 1982 by Digital Research Inc. All rights reserved.
|
||||
*
|
||||
* Function "write" simulates the UNIX write system call. Any
|
||||
* arbitrary number of bytes are written to the file specified by file
|
||||
* descriptor. No special alignment of file or buffer is required.
|
||||
*
|
||||
* Calling Sequence:
|
||||
* ret = write(fd,buffer,bytes);
|
||||
* Where:
|
||||
* fd is an open file descriptor
|
||||
* buffer is the buffer address
|
||||
* bytes is the number of bytes to be written
|
||||
* ret is the number of bytes actually written
|
||||
*
|
||||
* Modifications:
|
||||
* 11-Dec-83 whf PC-DOS mods, divide out _wrtasc & _wrtbin.
|
||||
* 30-Nov-83 whf Fix _wrtbin() boundary condition bug
|
||||
* 19-Oct-83 whf Separate out _wrtchr(), _ttyout(), _lstout()
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "portab.h"
|
||||
#include "osif.h"
|
||||
#include "osiferr.h"
|
||||
#include "errno.h"
|
||||
|
||||
UWORD write(fd,buff,bytes) /* CLEAR FUNCTION ***********/
|
||||
/* */
|
||||
WORD fd; /* File descriptor */
|
||||
BYTE *buff; /* Buffer address */
|
||||
UWORD bytes; /* Number of bytes to xfer */
|
||||
/* */
|
||||
{ /****************************/
|
||||
REG FD *fp; /* File (ccb) pointer */
|
||||
EXTERN FD *_chkc(); /* fd -> fp Convertor MGL */
|
||||
UWORD _wrtchr(); /* Device write routine */
|
||||
UWORD _wrtasc(); /* Ascii write routine */
|
||||
UWORD _wrtbin(); /* Binary write routine */
|
||||
/****************************/
|
||||
if((fp=_chkc(fd)) == NULLFD) /* Get CCB address MGL */
|
||||
return(FAILURE); /* Can't: EBADF */
|
||||
/* note: bytes is unsigned */
|
||||
if(bytes == 0) /* Trying to write 0 */
|
||||
return(0); /* Yes, a wise guy! */
|
||||
/* */
|
||||
if((fp->flags & ISREAD) != 0) /* Check for readonly file */
|
||||
RETERR(FAILURE,EBADF); /* Barf if so */
|
||||
/****************************/
|
||||
if( fp->flags & (ISTTY+ISLPT+ISQUE)) /* TTY, LST or QUE File? */
|
||||
return(_wrtchr(fp,buff,bytes)); /* Yes, handle it */
|
||||
/****************************/
|
||||
if(fp->flags & ISASCII) /* If ascii file */
|
||||
return(_wrtasc(fp,buff,bytes)); /* do ascii style */
|
||||
else return(_wrtbin(fp,buff,bytes)); /* do binary style */
|
||||
} /****************************/
|
||||
Reference in New Issue
Block a user