home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c065 / 1.ddi / CLIB1.ZIP / SSCANF.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-07  |  3.3 KB  |  114 lines

  1. /*-----------------------------------------------------------------------*
  2.  * filename - sscanf.c
  3.  *
  4.  * function(s)
  5.  *        Get     - gets a character from a string
  6.  *        UnGet   - ungets a character from a string
  7.  *        sscanf  - gets formatted input from a string
  8.  *        vsscanf - gets formatted input from a string
  9.  *-----------------------------------------------------------------------*/
  10.  
  11. /*[]------------------------------------------------------------[]*/
  12. /*|                                                              |*/
  13. /*|     Turbo C Run Time Library - Version 3.0                   |*/
  14. /*|                                                              |*/
  15. /*|                                                              |*/
  16. /*|     Copyright (c) 1987,1988,1990 by Borland International    |*/
  17. /*|     All Rights Reserved.                                     |*/
  18. /*|                                                              |*/
  19. /*[]------------------------------------------------------------[]*/
  20.  
  21.  
  22. #include <stdarg.h>
  23. #include <stdio.h>
  24. #include <_scanf.h>
  25.  
  26. /*---------------------------------------------------------------------*
  27.  
  28. Name        Get - gets a character from a string
  29.  
  30. Usage        static    int    Get(char **strPP)
  31.  
  32. Description    gets a character from a string
  33.  
  34. Return value    the character read or -1 of the null character
  35.  
  36. *---------------------------------------------------------------------*/
  37. static int near Get(char **strPP)
  38. {
  39.     register    unsigned  char  c;
  40.  
  41.     return  ((c = *((*strPP) ++)) == 0) ? -1 : c;
  42. }
  43.  
  44.  
  45. /*---------------------------------------------------------------------*
  46.  
  47. Name        UnGet - ungets a character from a string
  48.  
  49. Usage        static    void    UnGet(char c, char **strPP)
  50.  
  51. Description    decrements a character pointer
  52.  
  53. *---------------------------------------------------------------------*/
  54. #pragma argsused
  55. static void near UnGet(char c, char **strPP)
  56. {
  57.     --(*strPP);         /* ignore c, we don't allow the string to change */
  58. }
  59.  
  60.  
  61. /*---------------------------------------------------------------------*
  62.  
  63. Name        sscanf - gets formatted input from a string
  64.  
  65. Usage        int sscanf(const char *string,
  66.                const char *format[, argument ...])
  67.  
  68. Prototype in    stdio.h
  69.  
  70. Description    gets formatted input from a string
  71.  
  72. Return value    number of fields scanned and stored.  sscanf returns EOF
  73.         if an attempt is made to read at end-of-string
  74.  
  75. *---------------------------------------------------------------------*/
  76. int cdecl sscanf(const char *buf, const char *fmt, ...)
  77. {
  78.     return  _scanner (
  79.         (int near (*)(void *))Get,
  80.         (void near (*)(int, void *))UnGet,
  81.         &buf,
  82.         fmt,
  83.         _va_ptr
  84.         );
  85. }
  86.  
  87.  
  88. /*---------------------------------------------------------------------*
  89.  
  90. Name        vsscanf - gets formatted input from a string
  91.  
  92. Usage        int vsscanf(const char *string,const char *format,
  93.                 va_list argp)
  94.  
  95. Prototype in    stdio.h
  96.  
  97. Description    gets formatted input from a string
  98.  
  99. Return value    number of fields scanned and stored.  vsscanf returns EOF
  100.         if an attempt is made to read at end-of-string
  101.  
  102. *---------------------------------------------------------------------*/
  103.  
  104. int cdecl vsscanf(const char *buf, const char *fmt, va_list ap)
  105. {
  106.     return  _scanner(
  107.         (int near (*)(void *))Get,
  108.         (void near (*)(int, void *))UnGet,
  109.         &buf,
  110.         fmt,
  111.         ap
  112.         );
  113. }
  114.