亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? _scanfi.c

?? MMI層OBJ不能完全編譯
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*****************************************************************************/
/*  _SCANFI.C v2.54                                                          */
/*  Copyright (c) 1995-2004 Texas Instruments Incorporated                   */
/*****************************************************************************/

/*****************************************************************************/
/*    This file contains the main routines that all three variations of the  */
/*    scanf function use.  The main function in the file is _scanfi, and     */
/*    the other functions here are called by it.                             */
/*                                                                           */
/* FUNCTIONS:                                                                */
/*    _scanfi        -  The main scanf handling routine                      */
/*    _sget_conv     -  Read the format flags into the _SFIELD pointer sfield*/
/*    _sget_scanset  -  Read in the scanset from the format statement        */
/*    _sproc_int     -  Read an integer string into a temporary string       */
/*    _sproc_float   -  Read a float string into a temporary string          */
/*    _sproc_str     -  Copy a string from the input source to a temporary   */
/*                      string                                               */
/*    _sproc_lb      -  Process the %[ conversion                            */
/*    _sset_arg      -  Assign the converted value to the next argument      */
/*****************************************************************************/
#include <stdio.h>
#include "format.h"
#include <stdarg.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <limits.h>

#ifdef LLONG_MAX
_CODE_ACCESS long long strtoll(const char *_st, char **_endptr, int _base);
_CODE_ACCESS unsigned long long strtoull(const char *_st, char **_endptr,
					 int _base);
#endif

_CODE_ACCESS long double strtold(const char *st, char **endptr);

static int _sget_conv(char **_format, _SFIELD *sfield);
static int _sget_scanset(_SFIELD *sfield, char **_format);
static int _sproc_int(int w_counter, int (*_inpchar)(void **inp),
                       void (*_uninpchar)(void **inp, char outchar),
                       char *tmpptr, char conv, void **inp, int *num_read);
static int _sproc_float(int w_counter, int (*_inpchar)(void **inp),
                         void (*_uninpchar)(void **inp, char outchar),
                         char *tmpptr, char conv, void **inp, int *num_read);
static int _sproc_str(int w_counter, int (*_inpchar)(void **inp),
                       void (*_uninpchar)(void **inp, char outchar),
                       char *tmpptr, char conv, void **inp, int *num_read);
static int _sproc_lb(int (*_inpchar)(void **inp),
                      void (*_uninpchar)(void **inp, char outchar),
                      char *tmpptr, _SFIELD *sfield, void **inp, int *num_read);
static void _sset_arg(_SFIELD *sfield, va_list *_ap, char *tmpbuf);

/*****************************************************************************/
/* _SCANFI  -  The main scanf handling routine                               */
/*                                                                           */
/*    This function parses all non-conversion characters in the format       */
/*    string, passes control to the appropriate function when a '%' is       */
/*    encountered, then calls _SSET_ARG, which assignes the result to the    */
/*    next argument.                                                         */
/*                                                                           */
/*****************************************************************************/
int _scanfi(void *inp, const char *_format, va_list _ap, 
            int (*_chkmbc)(void **inp, char **_format, int *num_read),
            int (*_inpchar)(void **inp), 
            void (*_uninpchar)(void **inp, char outchar))
{
#ifdef ENABLE_SCANF
   /*------------------------------------------------------------------------*/
   /* Local variables                                                        */
   /*------------------------------------------------------------------------*/
   _SFIELD  sfield;
   char     tmpbuf[256],
           *tmpptr,
           *f_ptr        = (char *)_format;
   int      num_assigned =  0,
            inchar,
            num_read     =  0,
            stat         =  0;

   /*------------------------------------------------------------------------*/
   /* If the first character in the format string is a white space character */
   /* parse the format string until a non-white space character is found.    */
   /* Do the same for the input, but put the first non-white space character */
   /* back onto the input stream when finished.                              */
   /*------------------------------------------------------------------------*/
   if (isspace(*f_ptr))
   {
      for(;isspace(*f_ptr);f_ptr++);

      inchar = _inpchar(&inp);
      if(inchar == EOF) return EOF;
      num_read++;

      for(;isspace(inchar); inchar = _inpchar(&inp), num_read++);

      _uninpchar(&inp, inchar);
      num_read--;

      if(inchar == EOF) return EOF;
   }

   while(1)
   {
      /*---------------------------------------------------------------------*/
      /* Initialize sfield                                                   */
      /*---------------------------------------------------------------------*/
      memset(&sfield, 0, sizeof(_SFIELD));
      sfield.fwidth = -1;

      /*---------------------------------------------------------------------*/
      /* Call _chkmbc to compare the format string to the input.  If a       */
      /* mismatch occurs, return an EOF, if the end of the format string     */
      /* is reached, return the number of arguments assigned.  Otherwise     */
      /* a '%' has been encountered, so call _sget_conv to process it.       */
      /*---------------------------------------------------------------------*/
      switch(_chkmbc(&inp, &f_ptr, &num_read))
      {
         case  EOF   : return (EOF);
   
         case  0     : return (num_assigned);
   
         case  1     :  _sget_conv(&f_ptr, &sfield);
   
      }
   
      tmpptr = tmpbuf;

      /*---------------------------------------------------------------------*/
      /* Unless the conversion specifier is a [, c, or n, skip to the next   */
      /* non-white space character in the input.                             */
      /*---------------------------------------------------------------------*/
      if (sfield.conv != '[' && sfield.conv != 'c' && sfield.conv != 'n')
      {
         inchar = _inpchar(&inp);
         num_read++;
    
         for(;isspace(inchar); inchar = _inpchar(&inp), num_read++);
    
         _uninpchar(&inp, inchar);
         num_read--;

         /*---------------------------------------------------------------*/
         /* If we've encountered the end of the stream AND we haven't     */
         /* matched anything yet, return EOF.                             */
         /*---------------------------------------------------------------*/
         if(inchar == EOF && num_read == 0) return EOF;
      }
      else
      {
         /*---------------------------------------------------------------*/
         /* If we've encountered the end of the stream AND we haven't     */
         /* matched anything yet, return EOF.                             */
         /*---------------------------------------------------------------*/
         inchar = _inpchar(&inp);
         _uninpchar(&inp, inchar);
         if(inchar == EOF && num_read == 0) return EOF;
      }

      /*---------------------------------------------------------------------*/
      /* The flags have been set in sfield, so process the conversion by     */
      /* calling the appropriate function.                                   */
      /*---------------------------------------------------------------------*/
      switch(sfield.conv)
      {
         case  'X'   :  sfield.conv = 'x';
         case  'i'   :
         case  'p'   :  
         case  'x'   :
         case  'u'   :
         case  'o'   :
         case  'd'   :  stat = _sproc_int(sfield.fwidth, _inpchar, _uninpchar, 
                                         tmpptr, sfield.conv, &inp, &num_read); 
                        break;
         case  'f'   :
         case  'e'   :
         case  'E'   :
         case  'g'   :
         case  'G'   :  stat = _sproc_float(sfield.fwidth, _inpchar, _uninpchar,
                                     tmpptr, sfield.conv, &inp, &num_read);
                        break;

         case  'c'   :  
         case  's'   : {
                          char *stptr = (sfield.flags & _SFSTAR) ?
                                         NULL : va_arg(_ap, char*);

                          stat = _sproc_str(sfield.fwidth, _inpchar, _uninpchar,
                                     stptr, sfield.conv, &inp, &num_read);
                       }
                       stat = (stat != EOF);
                       if (!(sfield.flags & _SFSTAR) && stat) num_assigned++;
                       break;

         case  '['   :  stat = _sproc_lb(_inpchar, _uninpchar, tmpptr, &sfield,
                                         &inp, &num_read);

      }

      stat = (stat != EOF);

      /*---------------------------------------------------------------------*/
      /* Now, call the function to handle the actual assignment, or if there */
      /* is no assignment to take place, process it here.                    */
      /*---------------------------------------------------------------------*/
      switch(sfield.conv)
      {
         case  'i'   :
         case  'd'   :  
         case  'x'   :
         case  'u'   :
         case  'o'   :  
         case  'p'   : 
         case  'e'   :
         case  'f'   :
         case  'g'   :
         case  'E'   :
         case  'G'   :  _sset_arg(&sfield, &_ap, tmpbuf);
                        if ((!(sfield.flags & _SFSTAR)) && stat) num_assigned++;
                        break;
 
         case  'n'   :  if (!(sfield.flags & _SFSTAR))
                           switch(sfield.flags & (_MFH | _MFL | _MFLL))
                           {
                              case  _MFH  :  *(va_arg(_ap, short int*)) =
                                             (short int)num_read;
                                             break;
 
                              case _MFL   :  *(va_arg(_ap, long int*)) =
                                             (long int)num_read;
                                             break;
#ifdef LLONG_MAX
                              case _MFLL  :  *(va_arg(_ap, long long int*)) =
                                             (long long int)num_read;
                                             break;
#endif
                              default     :  *(va_arg(_ap, int*)) =
                                             num_read;
                                             break;
                           }
                        break;

         case  '%'   :  inchar = _inpchar(&inp);
                        if (inchar != '%') return (EOF);
                        else num_read++;
                        break;
                              
         case  '['   :  if ((!(sfield.flags & _SFSTAR)) && stat)
                        {
                           strcpy(va_arg(_ap, char *), tmpbuf);
                           num_assigned++;
                        }
      }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久9999亚洲精品| 丝袜美腿亚洲一区二区图片| 亚洲线精品一区二区三区八戒| 日韩精品1区2区3区| 成人av网站在线| 日韩欧美国产不卡| 亚洲电影一区二区三区| 国产iv一区二区三区| 欧美一级在线免费| 亚洲成a天堂v人片| 一本久久综合亚洲鲁鲁五月天| 日韩国产成人精品| 91网站最新地址| 久久久久久久久久久电影| 日产国产高清一区二区三区| 色综合久久久久| 国产精品网曝门| 国产精品自拍在线| 91精品国产色综合久久ai换脸 | 亚洲男同性恋视频| 国产精品系列在线播放| 欧美成人精品1314www| 亚洲不卡一区二区三区| 欧美四级电影网| 亚洲蜜桃精久久久久久久| 成人av电影在线| 欧美国产97人人爽人人喊| 国产成人自拍网| 国产日韩欧美一区二区三区乱码| 看片网站欧美日韩| 日韩一区二区免费在线电影| 天堂久久久久va久久久久| 欧美日韩中文国产| 日日夜夜免费精品| 91精品国产综合久久久蜜臀图片| 亚洲高清久久久| 欧美一级片在线| 日本午夜精品一区二区三区电影| 欧美性受xxxx黑人xyx性爽| 亚洲国产成人av网| 制服丝袜亚洲色图| 九九九精品视频| 久久久国产午夜精品| 成人免费高清在线观看| 国产精品黄色在线观看| 91成人免费电影| 日本va欧美va欧美va精品| 精品伦理精品一区| 成人福利视频网站| 亚洲成精国产精品女| 日韩精品一区二区在线观看| 国产一区二区女| 国产精品久久久久久久久晋中 | 日韩一区二区三区四区| 美女视频网站久久| 国产欧美日韩激情| 欧洲一区二区av| 美女视频一区在线观看| 中文字幕一区二区三区视频| 欧美综合视频在线观看| 青娱乐精品视频在线| 中文子幕无线码一区tr| 精品婷婷伊人一区三区三| 精品伊人久久久久7777人| 中国av一区二区三区| 欧美日韩一区二区在线视频| 国产精品一区二区在线播放| 亚洲乱码一区二区三区在线观看| 3d动漫精品啪啪1区2区免费| 国产精品一级黄| 视频在线观看一区二区三区| 中文字幕成人网| 日韩一区二区三区视频在线| 99久久婷婷国产| 韩日av一区二区| 午夜一区二区三区在线观看| 久久精品无码一区二区三区| 欧美在线视频你懂得| 国产精品资源站在线| 亚洲成人av在线电影| 国产精品电影院| 精品国产凹凸成av人导航| 欧美调教femdomvk| 成人中文字幕在线| 久久国产精品第一页| 一区二区三区免费观看| 国产三级欧美三级日产三级99| 欧美日韩国产在线播放网站| 成人午夜又粗又硬又大| 麻豆成人免费电影| 午夜精品福利一区二区三区av | 天堂一区二区在线| 亚洲免费看黄网站| 亚洲国产精品精华液ab| 日韩你懂的在线观看| 欧美性猛交xxxxxx富婆| 成人h动漫精品一区二| 激情五月婷婷综合| 免费看欧美美女黄的网站| 一个色在线综合| 国产精品国产自产拍在线| 国产视频一区二区在线| 欧美mv和日韩mv国产网站| 91精品一区二区三区久久久久久 | 国产精品18久久久久久久久久久久| 午夜欧美电影在线观看| 亚洲影院免费观看| 亚洲精品第一国产综合野| 国产精品无人区| 中文字幕国产精品一区二区| 国产女人aaa级久久久级| 久久综合色婷婷| 久久综合久久久久88| 精品人在线二区三区| 精品久久久网站| 久久午夜羞羞影院免费观看| 日韩欧美成人激情| 精品少妇一区二区三区免费观看 | 欧美一激情一区二区三区| 欧美三级一区二区| 欧美福利视频一区| 在线不卡中文字幕| 日韩欧美在线1卡| 久久网这里都是精品| 国产人妖乱国产精品人妖| 国产欧美一区二区精品秋霞影院| 国产亚洲1区2区3区| 国产精品毛片a∨一区二区三区 | 久久综合九色综合久久久精品综合 | 久久99精品国产91久久来源| 激情综合网最新| 成人高清免费在线播放| 在线精品视频免费播放| 欧美日韩亚洲综合一区| 91麻豆精品国产91久久久久久 | 欧美国产日韩精品免费观看| 国产精品久久看| 亚洲男人的天堂一区二区| 亚洲国产精品久久艾草纯爱| 久久福利资源站| 成人激情综合网站| 欧美日韩高清影院| 久久久国产精品麻豆| 一区二区三区四区在线播放 | 成人在线一区二区三区| 色吊一区二区三区| 日韩一区二区在线看片| 中日韩免费视频中文字幕| 亚洲成人三级小说| 国产精品99久久不卡二区| 色一区在线观看| 欧美变态tickling挠脚心| 亚洲欧洲av一区二区三区久久| 午夜欧美视频在线观看| 国产激情一区二区三区四区| 欧美性三三影院| 欧美精彩视频一区二区三区| 亚洲第一狼人社区| 成人免费视频视频在线观看免费| 欧美日韩美女一区二区| 国产欧美一区二区精品性色超碰| 无码av免费一区二区三区试看| 国产激情91久久精品导航 | 在线观看成人小视频| 久久女同性恋中文字幕| 一区二区视频在线| 风间由美性色一区二区三区| 欧美人成免费网站| 国产精品美女久久久久久| 日韩高清一区二区| 91黄视频在线观看| 国产精品国产a级| 国内精品久久久久影院薰衣草| 91黄色免费版| 亚洲天堂网中文字| 粉嫩av一区二区三区| 精品电影一区二区| 日韩国产精品久久| 欧美日韩一级片在线观看| 亚洲日本在线观看| 从欧美一区二区三区| www国产精品av| 久久99精品久久久久久| 日韩欧美aaaaaa| 麻豆一区二区在线| 91精品久久久久久久91蜜桃| 亚洲午夜三级在线| 一本大道久久a久久精品综合| 国产精品色哟哟| 成人亚洲一区二区一| 久久久综合九色合综国产精品| 久久99精品一区二区三区三区| 日韩一级高清毛片| 日韩成人一区二区三区在线观看| 色屁屁一区二区| 亚洲一区在线视频| 欧美日韩黄色一区二区| 午夜精品久久久久久久久久| 在线成人av影院| 久久精品免费观看|