Skip to content

Commit

Permalink
add some scanf support
Browse files Browse the repository at this point in the history
  • Loading branch information
gorlak authored and James Sarrett committed Mar 20, 2013
1 parent 0b7cf67 commit 09def5a
Show file tree
Hide file tree
Showing 3 changed files with 1,291 additions and 0 deletions.
18 changes: 18 additions & 0 deletions Console.h
Expand Up @@ -7,6 +7,24 @@

namespace Helium
{
// Scan from STDOUT
HELIUM_PLATFORM_API int Scan(const char* fmt, ...);
HELIUM_PLATFORM_API int Scan(const wchar_t* fmt, ...);
HELIUM_PLATFORM_API int ScanArgs(const char* fmt, va_list args);
HELIUM_PLATFORM_API int ScanArgs(const wchar_t* fmt, va_list args);

// Scan from C file handle
HELIUM_PLATFORM_API int FileScan(FILE* f, const char* fmt, ...);
HELIUM_PLATFORM_API int FileScan(FILE* f, const wchar_t* fmt, ...);
HELIUM_PLATFORM_API int FileScanArgs(FILE* f, const char* fmt, va_list args);
HELIUM_PLATFORM_API int FileScanArgs(FILE* f, const wchar_t* fmt, va_list args);

// Scan from string
HELIUM_PLATFORM_API int StringScan(const char* str, const char* fmt, ...);
HELIUM_PLATFORM_API int StringScan(const wchar_t* str, const wchar_t* fmt, ...);
HELIUM_PLATFORM_API int StringScanArgs(const char* str, const char* fmt, va_list args);
HELIUM_PLATFORM_API int StringScanArgs(const wchar_t* str, const wchar_t* fmt, va_list args);

// Print to STDOUT
HELIUM_PLATFORM_API int Print(const char* fmt, ...);
HELIUM_PLATFORM_API int Print(const wchar_t* fmt, ...);
Expand Down
92 changes: 92 additions & 0 deletions ConsoleWin.cpp
Expand Up @@ -3,6 +3,10 @@

#include "Platform/Assert.h"

#undef _UNICODE
#include "Platform/ConsoleWin.vsscanf.impl"
#define _UNICODE 1

#include <stdlib.h>

using namespace Helium;
Expand Down Expand Up @@ -41,6 +45,94 @@ static inline int LookupColor( ConsoleColor color )

#pragma TODO("These char overloads are really ASCII, not UTF-8. Track down some UTF-8 implementations. -Geoff")

int Helium::Scan(const char* fmt, ...)
{
char buf[1024];
fgets( buf, sizeof( buf ), stdin );

va_list args;
va_start(args, fmt);
int result = vsscanf( buf, (const unsigned char*)fmt, args );
va_end(args);
return result;
}

int Helium::Scan(const wchar_t* fmt, ...)
{
HELIUM_ASSERT( false );
return 0;
}

int Helium::ScanArgs(const char* fmt, va_list args)
{
char buf[1024];
fgets( buf, sizeof( buf ), stdin );
return vsscanf( buf, (const unsigned char*)fmt, args );
}

int Helium::ScanArgs(const wchar_t* fmt, va_list args)
{
HELIUM_ASSERT( false );
return 0;
}

int Helium::FileScan(FILE* f, const char* fmt, ...)
{
char buf[1024];
fgets( buf, sizeof( buf ), f );

va_list args;
va_start(args, fmt);
int result = vsscanf( buf, (const unsigned char*)fmt, args );
va_end(args);
return result;
}

int Helium::FileScan(FILE* f, const wchar_t* fmt, ...)
{
HELIUM_ASSERT( false );
return 0;
}

int Helium::FileScanArgs(FILE* f, const char* fmt, va_list args)
{
char buf[1024];
fgets( buf, sizeof( buf ), f );
return vsscanf( buf, (const unsigned char*)fmt, args );
}

int Helium::FileScanArgs(FILE* f, const wchar_t* fmt, va_list args)
{
HELIUM_ASSERT( false );
return 0;
}

int Helium::StringScan(const char* str, const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
int result = vsscanf(str, (const unsigned char*)fmt, args);
va_end(args);
return result;
}

int Helium::StringScan(const wchar_t* str, const wchar_t* fmt, ...)
{
HELIUM_ASSERT( false );
return 0;
}

int Helium::StringScanArgs(const char* str, const char* fmt, va_list args)
{
return vsscanf(str, (const unsigned char*)fmt, args);
}

int Helium::StringScanArgs(const wchar_t* str, const wchar_t* fmt, va_list args)
{
HELIUM_ASSERT( false );
return 0;
}

int Helium::Print(const char* fmt, ...)
{
va_list args;
Expand Down

0 comments on commit 09def5a

Please sign in to comment.