|
|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1197 (0x4ad)
Types: TextFile
Notes: UNIX file
Names: »fgets.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
└─⟦f4b8d8c84⟧ UNIX Filesystem
└─⟦this⟧ »unimenu/src/menu/fgets.c«
/*
* @(#)fgets.c 1.1 15:34:37 4/6/85";
*
* replace some of the stdio stuff
* getc()
* ungetc()
* fgets()
*
* NOTE: these functions only approximate their stdio counterparts
* they only work on one file at a time. This saves us an unbelievable
* amount of code. They also use file descriptors NOT FILE *.
*/
#define BUFSIZ 512
#define EOF -1
static char Inbuf[BUFSIZ] = {0};
static int Incnt = 0;
static int Insiz = 0;
static char *Inptr = 0;
clribuf()
{
Incnt = Insiz = 0;
Inptr = Inbuf;
}
getc(fd)
int fd;
{
if ( Incnt >= Insiz )
{
Incnt = 0;
Inptr = Inbuf;
Insiz = read(fd, Inbuf, BUFSIZ);
if ( Insiz <= 0 )
return ( EOF );
}
Incnt++;
return ( (int) *Inptr++ );
}
ungetc(c)
char c;
{
if ( Incnt > 0 )
{
Incnt--;
*(--Inptr) = c;
}
else
{
Inbuf[0] = c;
Incnt = 0;
Insiz = 1;
}
}
char *fgets(str, max, fd)
char *str;
int max;
int fd;
{
char *buf;
char i;
buf = str;
while ( --max > 0 ) /* read max - 1 chars */
{
i = getc(fd);
if (i == EOF )
break;
*buf++ = i;
if ( i == '\n' ) /* fgets keeps the newline */
break;
}
*buf = '\0';
if ( buf == str ) /* nothing read returns NULL */
return ((char *) 0);
return ( str );
}