home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
zip
/
mint
/
mntlib16.lzh
/
MNTLIB16
/
WRITE.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-03
|
1KB
|
66 lines
/*
* _write: like write, but takes a long instead of an int. Written by
* Eric R. Smith and placed in the public domain.
*/
/* BUG: under TOS, CRMOD doesn't work unless RAW is on or SIGINT is
* being caught
*/
#include <osbind.h>
#include <fcntl.h>
#include <ioctl.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include "lib.h"
extern __Sigfunc _sig_handler[]; /* TOS fakes for signal handling */
long
_write(fd, buf, size)
int fd;
const void *buf;
long size;
{
unsigned char c, *foo;
unsigned flags;
long r;
extern int __mint;
if (__mint == 0 && isatty(fd)) {
r = __OPEN_INDEX(fd);
if (r < 0 || r >= __NHANDLES)
r = __NHANDLES - 1;
flags = __open_stat[r].flags;
if ((flags & RAW) || _sig_handler[SIGINT] != SIG_DFL) {
foo = (unsigned char *) buf;
r = size;
while (r-- > 0) {
c = *foo++;
if (c == '\n' && (flags & CRMOD))
_console_write_byte(fd, '\r');
_console_write_byte(fd, c);
}
return size;
}
}
r = Fwrite(fd, size, buf);
if (r < 0) {
errno = -r;
return -1;
}
return r;
}
int
write(fd, buf, size)
int fd;
const void *buf;
unsigned size;
{
return _write(fd, buf, (long)size);
}