/////////////////////////////////////////////////////////////////////////////// // stdioex.cpp // // Extensions to stdio(.h) for vsscanf and vswscanf. // // // // Copyright (c) Smartsoft, LLC 1985-2002. All Rights Reserved. // // Written by Jan Knepper // // // // Redistribution and use in source and binary forms, with or without // // modification, are permitted provided that the following conditions // // are met: // // 1. Redistributions of source code must retain the above copyright // // notice, this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // // notice, this list of conditions and the following disclaimer in the // // documentation and/or other materials provided with the distribution. // // 3. The name of the author may not be used to endorse or promote products // // derived from this software without specific prior written permission. // // // // THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND // // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE // // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF // // THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////////// #include extern "C" { #include <../src/include/scio.h> } #include "RTL/stdioex.h" static int sgetc ( void * ); static int sungetc ( int, void * ); static int swgetc ( void * ); static int swungetc ( int, void * ); #ifndef _UNICODE // _UNICODE int vsscanf ( const char *buffer, const char *format, va_list arg ) { return ( _sfmt ( ( fp_t ) sungetc, ( fp2_t ) sgetc, &buffer, format, arg ) ); } static int sgetc ( void *ptr ) { return ( ( *( *( char ** ) ptr ) ) ? *( *( char ** ) ptr )++ : EOF ); } static int sungetc ( int c, void *ptr ) { return ( ( c == EOF ) ? c : ( *--( *( char ** ) ptr ) = c ) ); } #else // _UNICODE int vswscanf ( const wchar_t *buffer, const wchar_t *format, va_list arg ) { return ( _wsfmt ( ( fp_t ) swungetc, ( fp2_t ) swgetc, &buffer, format, arg ) ); } static int sgetc ( void *ptr ) { return ( ( *( *( wchar_t ** ) ptr ) ) ? *( *( wchar_t ** ) ptr )++ : EOF ); } static int sungetc ( int c, void *ptr ) { return ( ( c == EOF ) ? c : ( *--( *( wchar_t ** ) ptr ) = c ) ); } #endif // _UNICODE