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