home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
zip
/
mint
/
mntlib16.lzh
/
MNTLIB16
/
TEXTIO.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-03
|
1KB
|
68 lines
/*
* textio: read/write routines for text. These can be used in programs
* where read and write are used instead of the (preferred) stdio routines
* for manipulating text files, by doing something like
* #define read _text_read
* Written by Eric R. Smith and placed in the public domain.
*/
#include <stdio.h>
#include <unistd.h>
int
_text_read(fd, buf, nbytes)
int fd;
char *buf;
int nbytes;
{
char *to, *from;
int r;
_again:
r = read(fd, buf, nbytes);
if (r <= 0)
return r;
nbytes = r;
to = from = buf;
while (r-- > 0) {
if (*from == '\r') {
from++; nbytes--;
}
else
*to++ = *from++;
}
if (nbytes == 0)
goto _again;
return nbytes;
}
int
_text_write(fd, from, nbytes)
int fd;
char *from;
int nbytes;
{
char buf[BUFSIZ+2], *to, c;
int w, r, bytes_written;
bytes_written = 0;
while (bytes_written < nbytes) {
w = 0;
to = buf;
while (w < BUFSIZ && bytes_written < nbytes) {
if ((c = *from++) == '\n') {
*to++ = '\r'; *to++ = c;
w += 2;
}
else {
*to++ = c;
w++;
}
bytes_written++;
}
if ((r = write(fd, buf, w)) != w)
return (r < 0) ? r : bytes_written - (w-r);
}
return bytes_written;
}