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 6/7/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: }