xref: /csrg-svn/usr.bin/f77/libU77/getc_.c (revision 4109)
12411Sdlw /*
2*4109Sdlw char id_getc[] = "@(#)getc_.c	1.3";
32411Sdlw  *
42411Sdlw  * get a character from the standard input
52411Sdlw  *
62411Sdlw  * calling sequence:
72411Sdlw  *	integer getc
82411Sdlw  *	ierror = getc (char)
92411Sdlw  * where:
102411Sdlw  *	char will be read from the standard input, usually the terminal
112411Sdlw  *	ierror will be 0 if successful; a system error code otherwise.
122411Sdlw  */
132411Sdlw 
142411Sdlw #include	"../libI77/f_errno.h"
152411Sdlw #include	"../libI77/fiodefs.h"
162411Sdlw 
172411Sdlw extern unit units[];	/* logical units table from iolib */
182411Sdlw 
192411Sdlw long getc_(c, clen)
202411Sdlw char *c; long clen;
212411Sdlw {
223896Sdlw 	int	i;
233896Sdlw 	unit	*lu;
242411Sdlw 
253896Sdlw 	lu = &units[STDIN];
263896Sdlw 	if (!lu->ufd)
272411Sdlw 		return((long)(errno=F_ERNOPEN));
28*4109Sdlw 	if (lu->uwrt && ! nowreading(lu))
29*4109Sdlw 		return((long)errno);
303896Sdlw 	if ((i = getc (lu->ufd)) < 0)
312411Sdlw 	{
323896Sdlw 		if (feof(lu->ufd))
332411Sdlw 			return(-1L);
342411Sdlw 		i = errno;
353896Sdlw 		clearerr(lu->ufd);
362411Sdlw 		return((long)i);
372411Sdlw 	}
382411Sdlw 	*c = i & 0177;
392411Sdlw 	return(0L);
402411Sdlw }
41