| 1 | /* | 
|---|
| 2 | * general implementation of scanf used by scanf, sscanf, fscanf, | 
|---|
| 3 | * _cscanf, wscanf, swscanf and fwscanf | 
|---|
| 4 | * | 
|---|
| 5 | * Copyright 1996,1998 Marcus Meissner | 
|---|
| 6 | * Copyright 1996 Jukka Iivonen | 
|---|
| 7 | * Copyright 1997,2000 Uwe Bonnes | 
|---|
| 8 | * Copyright 2000 Jon Griffiths | 
|---|
| 9 | * Copyright 2002 Daniel Gudbjartsson | 
|---|
| 10 | * | 
|---|
| 11 | * This library is free software; you can redistribute it and/or | 
|---|
| 12 | * modify it under the terms of the GNU Lesser General Public | 
|---|
| 13 | * License as published by the Free Software Foundation; either | 
|---|
| 14 | * version 2.1 of the License, or (at your option) any later version. | 
|---|
| 15 | * | 
|---|
| 16 | * This library is distributed in the hope that it will be useful, | 
|---|
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|---|
| 19 | * Lesser General Public License for more details. | 
|---|
| 20 | * | 
|---|
| 21 | * You should have received a copy of the GNU Lesser General Public | 
|---|
| 22 | * License along with this library; if not, write to the Free Software | 
|---|
| 23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|---|
| 24 | */ | 
|---|
| 25 |  | 
|---|
| 26 | #include "winbase.h" | 
|---|
| 27 | #include "winternl.h" | 
|---|
| 28 | #include "msvcrt.h" | 
|---|
| 29 | #include "msvcrt/conio.h" | 
|---|
| 30 | #include "msvcrt/io.h" | 
|---|
| 31 | #include "msvcrt/stdio.h" | 
|---|
| 32 | #include "msvcrt/wctype.h" | 
|---|
| 33 | #include "wine/debug.h" | 
|---|
| 34 |  | 
|---|
| 35 | WINE_DEFAULT_DEBUG_CHANNEL(msvcrt); | 
|---|
| 36 |  | 
|---|
| 37 | /* helper function for *scanf.  Returns the value of character c in the | 
|---|
| 38 | * given base, or -1 if the given character is not a digit of the base. | 
|---|
| 39 | */ | 
|---|
| 40 | static int char2digit(char c, int base) { | 
|---|
| 41 | if ((c>='0') && (c<='9') && (c<='0'+base-1)) return (c-'0'); | 
|---|
| 42 | if (base<=10) return -1; | 
|---|
| 43 | if ((c>='A') && (c<='Z') && (c<='A'+base-11)) return (c-'A'+10); | 
|---|
| 44 | if ((c>='a') && (c<='z') && (c<='a'+base-11)) return (c-'a'+10); | 
|---|
| 45 | return -1; | 
|---|
| 46 | } | 
|---|
| 47 |  | 
|---|
| 48 | /* helper function for *wscanf.  Returns the value of character c in the | 
|---|
| 49 | * given base, or -1 if the given character is not a digit of the base. | 
|---|
| 50 | */ | 
|---|
| 51 | static int wchar2digit(MSVCRT_wchar_t c, int base) { | 
|---|
| 52 | if ((c>=L'0') && (c<=L'9') && (c<=L'0'+base-1)) return (c-L'0'); | 
|---|
| 53 | if (base<=10) return -1; | 
|---|
| 54 | if ((c>=L'A') && (c<=L'Z') && (c<=L'A'+base-11)) return (c-L'A'+10); | 
|---|
| 55 | if ((c>=L'a') && (c<=L'z') && (c<=L'a'+base-11)) return (c-L'a'+10); | 
|---|
| 56 | return -1; | 
|---|
| 57 | } | 
|---|
| 58 |  | 
|---|
| 59 |  | 
|---|
| 60 | /********************************************************************* | 
|---|
| 61 | *              fscanf (MSVCRT.@) | 
|---|
| 62 | */ | 
|---|
| 63 | #undef WIDE_SCANF | 
|---|
| 64 | #undef CONSOLE | 
|---|
| 65 | #undef STRING | 
|---|
| 66 | #include "scanf.h" | 
|---|
| 67 |  | 
|---|
| 68 | /********************************************************************* | 
|---|
| 69 | *              fwscanf (MSVCRT.@) | 
|---|
| 70 | */ | 
|---|
| 71 | #define WIDE_SCANF 1 | 
|---|
| 72 | #undef CONSOLE | 
|---|
| 73 | #undef STRING | 
|---|
| 74 | #include "scanf.h" | 
|---|
| 75 |  | 
|---|
| 76 | /********************************************************************* | 
|---|
| 77 | *              sscanf (MSVCRT.@) | 
|---|
| 78 | */ | 
|---|
| 79 | #undef WIDE_SCANF | 
|---|
| 80 | #undef CONSOLE | 
|---|
| 81 | #define STRING 1 | 
|---|
| 82 | #include "scanf.h" | 
|---|
| 83 |  | 
|---|
| 84 | /********************************************************************* | 
|---|
| 85 | *              swscanf (MSVCRT.@) | 
|---|
| 86 | */ | 
|---|
| 87 | #define WIDE_SCANF 1 | 
|---|
| 88 | #undef CONSOLE | 
|---|
| 89 | #define STRING 1 | 
|---|
| 90 | #include "scanf.h" | 
|---|
| 91 |  | 
|---|
| 92 | /********************************************************************* | 
|---|
| 93 | *              _cscanf (MSVCRT.@) | 
|---|
| 94 | */ | 
|---|
| 95 | #undef WIDE_SCANF | 
|---|
| 96 | #define CONSOLE 1 | 
|---|
| 97 | #undef STRING | 
|---|
| 98 | #include "scanf.h" | 
|---|