xref: /csrg-svn/usr.bin/f77/libU77/fgetc_.c (revision 2410)
1*2410Sdlw /*
2*2410Sdlw char id_fgetc[] = "@(#)fgetc_.c	1.1";
3*2410Sdlw  *
4*2410Sdlw  * get a character from a logical unit bypassing formatted I/O
5*2410Sdlw  *
6*2410Sdlw  * calling sequence:
7*2410Sdlw  *	integer fgetc
8*2410Sdlw  *	ierror = fgetc (unit, char)
9*2410Sdlw  * where:
10*2410Sdlw  *	char will return a character from logical unit
11*2410Sdlw  *	ierror will be 0 if successful; a system error code otherwise.
12*2410Sdlw  */
13*2410Sdlw 
14*2410Sdlw #include	"../libI77/fiodefs.h"
15*2410Sdlw #include	"../libI77/f_errno.h"
16*2410Sdlw 
17*2410Sdlw extern unit units[];	/* logical units table from iolib */
18*2410Sdlw 
19*2410Sdlw long fgetc_(u, c, clen)
20*2410Sdlw long *u; char *c; long clen;
21*2410Sdlw {
22*2410Sdlw 	int i;
23*2410Sdlw 
24*2410Sdlw 	if (*u < 0 || *u >= MXUNIT)
25*2410Sdlw 		return((long)(errno=F_ERARG));
26*2410Sdlw 	if (!units[*u].ufd)
27*2410Sdlw 		return((long)(errno=F_ERNOPEN));
28*2410Sdlw 	if ((i = getc (units[*u].ufd)) < 0)
29*2410Sdlw 	{
30*2410Sdlw 		if (feof(units[*u].ufd))
31*2410Sdlw 			return(-1L);
32*2410Sdlw 		i = errno;
33*2410Sdlw 		clearerr(units[*u].ufd);
34*2410Sdlw 		return((long)i);
35*2410Sdlw 	}
36*2410Sdlw 	*c = i & 0177;
37*2410Sdlw 	return(0L);
38*2410Sdlw }
39