mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 08:24:18 +00:00
64 lines
2.5 KiB
C
64 lines
2.5 KiB
C
/***************************************************************************
|
||
*
|
||
* 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 */
|
||
} /****************************/
|
||
|
||
*******/
|
||
|
||
*******/
|
||
|