1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 #pragma ident "%Z%%M% %I% %E% SMI" 23 24 /* 25 * Copyright (c) 1988 by Sun Microsystems, Inc. 26 */ 27 28 #include <ctype.h> 29 #include <stdio.h> 30 #ifndef PRE41 31 #include <locale.h> 32 #endif 33 #include "base_conversion.h" 34 35 void 36 file_to_decimal(ppc, nmax, fortran_conventions, pd, pform, pechar, pf, pnread) 37 char **ppc; 38 int nmax; 39 int fortran_conventions; 40 decimal_record *pd; 41 enum decimal_string_form *pform; 42 char **pechar; 43 FILE *pf; 44 int *pnread; 45 46 { 47 register char *cp = *ppc; 48 register int current; 49 register int nread = 1; /* Number of characters read so far. */ 50 char *good = cp - 1; /* End of known good token. */ 51 char *cp0 = cp; 52 53 current = getc(pf); /* Initialize buffer. */ 54 *cp = current; 55 56 #define ATEOF current 57 #define CURRENT current 58 #define NEXT \ 59 if (nread < nmax) \ 60 { cp++ ; current = getc(pf) ; *cp = current ; nread++ ;} \ 61 else \ 62 { current = NULL ; } ; 63 64 #include "char_to_decimal.h" 65 #undef CURRENT 66 #undef NEXT 67 68 if (nread < nmax) { 69 while (cp >= *ppc) { /* Push back as many excess 70 * characters as possible. */ 71 if (*cp != EOF) { /* Can't push back EOF. */ 72 if (ungetc(*cp, pf) == EOF) 73 break; 74 } cp--; 75 nread--; 76 } 77 } 78 cp++; 79 *cp = 0; /* Terminating null. */ 80 *pnread = nread; 81 82 } 83