📄 input.c
字号:
} else if (_T('+') == ch) {
f_incwidth:
--width;
ch = INC();
}
if (!widthset || width > CVTBUFSIZE) /* must watch width */
width = CVTBUFSIZE;
/* now get integral part */
while (_ISDIGIT(ch) && width--) {
++started;
*scanptr++ = (char)ch;
ch = INC();
}
/* now check for decimal */
if (*___decimal_point == (char)ch && width--) {
ch = INC();
*scanptr++ = *___decimal_point;
while (_ISDIGIT(ch) && width--) {
++started;
*scanptr++ = (char)ch;
ch = INC();
}
}
/* now check for exponent */
if (started && (_T('e') == ch || _T('E') == ch) && width--) {
*scanptr++ = 'e';
if (_T('-') == (ch = INC())) {
*scanptr++ = '-';
goto f_incwidth2;
} else if (_T('+') == ch) {
f_incwidth2:
if (!width--)
++width;
else
ch = INC();
}
while (_ISDIGIT(ch) && width--) {
++started;
*scanptr++ = (char)ch;
ch = INC();
}
}
UN_INC(ch);
if (started)
if (!suppress) {
++count;
*scanptr = '\0';
_fassign( longone-1, pointer , floatstring);
} else /*NULL */;
else
goto error_return;
#else /* _UNICODE */
wptr = floatstring;
if (L'-' == ch) {
*wptr++ = L'-';
goto f_incwidthw;
} else if (L'+' == ch) {
f_incwidthw:
--width;
ch = INC();
}
if (!widthset || width > CVTBUFSIZE)
width = CVTBUFSIZE;
/* now get integral part */
while (_ISDIGIT(ch) && width--) {
++started;
*wptr++ = ch;
ch = INC();
}
/* now check for decimal */
/* convert decimal point to wide-char */
/* assume result is single wide-char */
mbtowc (&wdecimal, ___decimal_point, MB_CUR_MAX);
if (wdecimal == ch && width--) {
ch = INC();
*wptr++ = wdecimal;
while (_ISDIGIT(ch) && width--) {
++started;
*wptr++ = ch;
ch = INC();
}
}
/* now check for exponent */
if (started && (L'e' == ch || L'E' == ch) && width--) {
*wptr++ = L'e';
if (L'-' == (ch = INC())) {
*wptr++ = L'-';
goto f_incwidth2w;
} else if (L'+' == ch) {
f_incwidth2w:
if (!width--)
++width;
else
ch = INC();
}
while (_ISDIGIT(ch) && width--) {
++started;
*wptr++ = ch;
ch = INC();
}
}
UN_INC(ch);
if (started)
if (!suppress) {
++count;
*wptr = '\0';
{
/* convert floatstring to char string */
/* and do the conversion */
size_t cfslength;
char *cfloatstring;
cfslength =(wptr-floatstring+1)*sizeof(wchar_t);
cfloatstring = (char *)_malloc_crt (cfslength);
wcstombs (cfloatstring, floatstring, cfslength);
_fassign( longone-1, pointer , cfloatstring);
_free_crt (cfloatstring);
}
} else /*NULL */;
else
goto error_return;
#endif /* _UNICODE */
break;
default: /* either found '%' or something else */
if ((int)*format != (int)ch) {
UN_INC(ch);
goto error_return;
}
else
match--; /* % found, compensate for inc below */
if (!suppress)
arglist = arglistsave;
} /* SWITCH */
match++; /* matched a format field - set flag */
} /* WHILE (width) */
else { /* zero-width field in format string */
UN_INC(ch); /* check for input error */
goto error_return;
}
++format; /* skip to next char */
} else /* ('%' != *format) */
{
if ((int)*format++ != (int)(ch = INC()))
{
UN_INC(ch);
goto error_return;
}
#ifndef _UNICODE
if (isleadbyte(ch))
{
int ch2;
if ((int)*format++ != (ch2=INC()))
{
UN_INC(ch2);
UN_INC(ch);
goto error_return;
}
--charcount; /* only count as one character read */
}
#endif /* _UNICODE */
}
#ifndef CPRFLAG
if ( (EOF == ch) && ((*format != '%') || (*(format + 1) != 'n')) )
break;
#endif /* CPRFLAG */
} /* WHILE (*format) */
error_return:
#ifndef CPRFLAG
if (EOF == ch)
/* If any fields were matched or assigned, return count */
return ( (count || match) ? count : EOF);
else
#endif /* CPRFLAG */
return count;
}
/* _hextodec() returns a value of 0-15 and expects a char 0-9, a-f, A-F */
/* _inc() is the one place where we put the actual getc code. */
/* _whiteout() returns the first non-blank character, as defined by isspace() */
#ifndef _UNICODE
static int __cdecl _hextodec (
int chr
)
{
return _ISDIGIT(chr) ? chr : (chr & ~(_T('a') - _T('A'))) - _T('A') + 10 + _T('0');
}
#else /* _UNICODE */
static _TCHAR __cdecl _hextodec (
_TCHAR chr
)
{
if (_ISDIGIT(chr))
return chr;
if (_istlower(chr))
return (_TCHAR)(chr - _T('a') + 10 + _T('0'));
else
return (_TCHAR)(chr - _T('A') + 10 + _T('0'));
}
#endif /* _UNICODE */
#ifdef CPRFLAG
static int __cdecl _inc (
void
)
{
return(_getche_lk());
}
static int __cdecl _whiteout (
REG1 int *counter
)
{
REG2 int ch;
while((_istspace)(ch = (++*counter, _inc())));
return ch;
}
#elif defined (_UNICODE)
/*
* Manipulate wide-chars in a file.
* A wide-char is hard-coded to be two chars for efficiency.
*/
static wchar_t __cdecl _inc (
REG1 FILE *fileptr
)
{
return(_getwc_lk(fileptr));
}
static void __cdecl _un_inc (
wchar_t chr,
FILE *fileptr
)
{
if (WEOF != chr)
_ungetwc_lk(chr, fileptr);
}
static wchar_t __cdecl _whiteout (
REG1 int *counter,
REG3 FILE *fileptr
)
{
REG2 wchar_t ch;
while((iswspace)(ch = (++*counter, _inc(fileptr))));
return ch;
}
#else /* defined (_UNICODE) */
static int __cdecl _inc (
REG1 FILE *fileptr
)
{
return(_getc_lk(fileptr));
}
static void __cdecl _un_inc (
int chr,
FILE *fileptr
)
{
if (EOF != chr)
_ungetc_lk(chr, fileptr);
}
static int __cdecl _whiteout (
REG1 int *counter,
REG3 FILE *fileptr
)
{
REG2 int ch;
while((_istspace)(ch = (++*counter, _inc(fileptr))));
return ch;
}
#endif /* defined (_UNICODE) */
#else /* _WIN32 */
#if defined (_M_MPPC) || defined (_M_M68K)
#define ALLOW_RANGE /* allow "%[a-z]"-style scansets */
/* temporary work-around for compiler without 64-bit support */
#ifndef _INTEGRAL_MAX_BITS
#define _INTEGRAL_MAX_BITS 64
#endif /* _INTEGRAL_MAX_BITS */
#include <cruntime.h>
#include <stdio.h>
#include <dbgint.h>
#include <ctype.h>
#include <cvt.h>
#include <conio.h>
#include <stdarg.h>
#include <string.h>
#include <internal.h>
#include <fltintrn.h>
#include <mtdll.h>
#include <stdlib.h>
#include <nlsint.h>
#include <tchar.h>
#define HEXTODEC(chr) _hextodec(chr)
#define LEFT_BRACKET ('[' | ('a' - 'A')) /* 'lowercase' version */
#ifdef _UNICODE
static wchar_t __cdecl _hextodec(wchar_t);
#else /* _UNICODE */
static int __cdecl _hextodec(int);
#endif /* _UNICODE */
/*
* Note: CPRFLAG and _UNICODE cases are currently mutually exclusive.
*/
#ifdef CPRFLAG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -