xref: /original-bsd/usr.bin/f77/libU77/fgetc_.c (revision 2301fdfb)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)fgetc_.c	5.1	06/07/85
7  */
8 
9 /*
10  * get a character from a logical unit bypassing formatted I/O
11  *
12  * calling sequence:
13  *	integer fgetc
14  *	ierror = fgetc (unit, char)
15  * where:
16  *	char will return a character from logical unit
17  *	ierror will be 0 if successful; a system error code otherwise.
18  */
19 
20 #include	"../libI77/fiodefs.h"
21 #include	"../libI77/f_errno.h"
22 
23 extern unit units[];	/* logical units table from iolib */
24 
25 long fgetc_(u, c, clen)
26 long *u; char *c; long clen;
27 {
28 	int	i;
29 	unit	*lu;
30 
31 	if (*u < 0 || *u >= MXUNIT)
32 		return((long)(errno=F_ERUNIT));
33 	lu = &units[*u];
34 	if (!lu->ufd)
35 		return((long)(errno=F_ERNOPEN));
36 	if (lu->uwrt && ! nowreading(lu))
37 		return((long)errno);
38 	if ((i = getc (lu->ufd)) < 0)
39 	{
40 		if (feof(lu->ufd))
41 			return(-1L);
42 		i = errno;
43 		clearerr(lu->ufd);
44 		return((long)i);
45 	}
46 	*c = i;
47 	return(0L);
48 }
49