12410Sdlw /* 2*18452Sralph char id_fgetc[] = "@(#)fgetc_.c 1.5"; 32410Sdlw * 42410Sdlw * get a character from a logical unit bypassing formatted I/O 52410Sdlw * 62410Sdlw * calling sequence: 72410Sdlw * integer fgetc 82410Sdlw * ierror = fgetc (unit, char) 92410Sdlw * where: 102410Sdlw * char will return a character from logical unit 112410Sdlw * ierror will be 0 if successful; a system error code otherwise. 122410Sdlw */ 132410Sdlw 142410Sdlw #include "../libI77/fiodefs.h" 152410Sdlw #include "../libI77/f_errno.h" 162410Sdlw 172410Sdlw extern unit units[]; /* logical units table from iolib */ 182410Sdlw 192410Sdlw long fgetc_(u, c, clen) 202410Sdlw long *u; char *c; long clen; 212410Sdlw { 223895Sdlw int i; 233895Sdlw unit *lu; 242410Sdlw 252410Sdlw if (*u < 0 || *u >= MXUNIT) 262576Sdlw return((long)(errno=F_ERUNIT)); 273895Sdlw lu = &units[*u]; 283895Sdlw if (!lu->ufd) 292410Sdlw return((long)(errno=F_ERNOPEN)); 304110Sdlw if (lu->uwrt && ! nowreading(lu)) 314110Sdlw return((long)errno); 323895Sdlw if ((i = getc (lu->ufd)) < 0) 332410Sdlw { 343895Sdlw if (feof(lu->ufd)) 352410Sdlw return(-1L); 362410Sdlw i = errno; 373895Sdlw clearerr(lu->ufd); 382410Sdlw return((long)i); 392410Sdlw } 40*18452Sralph *c = i; 412410Sdlw return(0L); 422410Sdlw } 43