//========= Copyright ?1996-2002, Valve LLC, All rights reserved. ============
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================

#ifndef PROTECTED_THINGS_H
#define PROTECTED_THINGS_H
#ifdef _WIN32
#pragma once
#endif


// This header tries to prevent people from using potentially dangerous functions
// (like the notorious non-null-terminating strncpy) and functions that will break
// VCR mode (like time, input, registry, etc).
//
// This header should be included by ALL of our source code.

// Eventually, ALL of these should be protected, but one man can only accomplish so much in
// one day AND work on features too!
#if defined( PROTECT_STRING_FUNCTIONS )
#if defined( strncpy )
#undef strncpy
#endif
#define strncpy				strncpy__HEY_YOU__USE_VSTDLIB


#if defined( _snprintf )
#undef _snprintf
#endif
#define _snprintf			snprintf__HEY_YOU__USE_VSTDLIB


#if defined( sprintf )
#undef sprintf
#endif
#define sprintf				sprintf__HEY_YOU__USE_VSTDLIB


#if defined( _vsnprintf )
#undef _vsnprintf
#endif
#define _vsnprintf			vsnprintf__HEY_YOU__USE_VSTDLIB


#if defined( strcat )
#undef strcat
#endif
#define strcat				strcat__HEY_YOU__USE_VSTDLIB
#endif


#if defined( PROTECT_FILEIO_FUNCTIONS )
#if defined( fopen )
#undef fopen
#endif
#define fopen				fopen_USE_FILESYSTEM_INSTEAD
#endif	


#if defined( PROTECTED_THINGS_ENABLE )

#if defined( GetTickCount )
#undef GetTickCount
#endif
#define GetTickCount		GetTickCount__HEY_YOU__USE_PLATFORM_LIB


#if defined( timeGetTime )
#undef timeGetTime
#endif
#define timeGetTime			timeGetTime__HEY_YOU__USE_PLATFORM_LIB


#if defined( clock )
#undef clock
#endif
#define time				time__HEY_YOU__USE_PLATFORM_LIB


#if defined( recvfrom )
#undef recvfrom
#endif
#define recvfrom			recvfrom__HEY_YOU__USE_PLATFORM_LIB


#if defined( GetCursorPos )
#undef GetCursorPos
#endif
#define GetCursorPos		GetCursorPos__HEY_YOU__USE_PLATFORM_LIB


#if defined( ScreenToClient )
#undef ScreenToClient
#endif
#define ScreenToClient		ScreenToClient__HEY_YOU__USE_PLATFORM_LIB


#if defined( GetCommandLine )
#undef GetCommandLine
#endif
#define GetCommandLine		GetCommandLine__HEY_YOU__USE_PLATFORM_LIB


#if defined( RegOpenKeyEx )
#undef RegOpenKeyEx
#endif
#define RegOpenKeyEx		RegOpenKeyEx__HEY_YOU__USE_PLATFORM_LIB


#if defined( RegOpenKey )
#undef RegOpenKey
#endif
#define RegOpenKey			RegOpenKey__HEY_YOU__USE_PLATFORM_LIB


#if defined( RegSetValueEx )
#undef RegSetValueEx
#endif
#define RegSetValueEx		RegSetValueEx__HEY_YOU__USE_PLATFORM_LIB


#if defined( RegSetValue )
#undef RegSetValue
#endif
#define RegSetValue			RegSetValue__HEY_YOU__USE_PLATFORM_LIB


#if defined( RegQueryValueEx )
#undef RegQueryValueEx
#endif		
#define RegQueryValueEx		RegQueryValueEx__HEY_YOU__USE_PLATFORM_LIB


#if defined( RegQueryValue )
#undef RegQueryValue
#endif		
#define RegQueryValue		RegQueryValue__HEY_YOU__USE_PLATFORM_LIB


#if defined( RegCreateKeyEx )
#undef RegCreateKeyEx
#endif
#define RegCreateKeyEx		RegCreateKeyEx__HEY_YOU__USE_PLATFORM_LIB


#if defined( RegCreateKey )
#undef RegCreateKey
#endif
#define RegCreateKey		RegCreateKey__HEY_YOU__USE_PLATFORM_LIB


#if defined( RegCloseKey )
#undef RegCloseKey
#endif
#define RegCloseKey			RegCloseKey__HEY_YOU__USE_PLATFORM_LIB


#if defined( GetNumberOfConsoleInputEvents )
#undef GetNumberOfConsoleInputEvents
#endif
#define GetNumberOfConsoleInputEvents	GetNumberOfConsoleInputEvents__HEY_YOU__USE_PLATFORM_LIB


#if defined( ReadConsoleInput )
#undef ReadConsoleInput
#endif
#define ReadConsoleInput	ReadConsoleInput__HEY_YOU__USE_PLATFORM_LIB


#if defined( GetAsyncKeyState )
#undef GetAsyncKeyState
#endif
#define GetAsyncKeyState	GetAsyncKeyState__HEY_YOU__USE_PLATFORM_LIB


#if defined( GetKeyState )
#undef GetKeyState
#endif
#define GetKeyState			GetKeyState__HEY_YOU__USE_PLATFORM_LIB

#endif


#endif // PROTECTED_THINGS_H
