mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-13 04:09:09 +00:00
1
This commit is contained in:
@@ -0,0 +1,322 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include "goldsrc_standin.h"
|
||||
|
||||
|
||||
extern int errno;
|
||||
|
||||
|
||||
static unsigned short g_InitialColor = 0xFFFF;
|
||||
static unsigned short g_LastColor = 0xFFFF;
|
||||
static unsigned short g_BadColor = 0xFFFF;
|
||||
static WORD g_BackgroundFlags = 0xFFFF;
|
||||
static bool g_bGotInitialColors = false;
|
||||
|
||||
static void GetInitialColors( )
|
||||
{
|
||||
if ( g_bGotInitialColors )
|
||||
return;
|
||||
|
||||
g_bGotInitialColors = true;
|
||||
|
||||
// Get the old background attributes.
|
||||
CONSOLE_SCREEN_BUFFER_INFO oldInfo;
|
||||
GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), &oldInfo );
|
||||
g_InitialColor = g_LastColor = oldInfo.wAttributes & (FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
|
||||
g_BackgroundFlags = oldInfo.wAttributes & (BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|BACKGROUND_INTENSITY);
|
||||
|
||||
g_BadColor = 0;
|
||||
if (g_BackgroundFlags & BACKGROUND_RED)
|
||||
g_BadColor |= FOREGROUND_RED;
|
||||
if (g_BackgroundFlags & BACKGROUND_GREEN)
|
||||
g_BadColor |= FOREGROUND_GREEN;
|
||||
if (g_BackgroundFlags & BACKGROUND_BLUE)
|
||||
g_BadColor |= FOREGROUND_BLUE;
|
||||
if (g_BackgroundFlags & BACKGROUND_INTENSITY)
|
||||
g_BadColor |= FOREGROUND_INTENSITY;
|
||||
}
|
||||
|
||||
static WORD SetConsoleTextColor( int red, int green, int blue, int intensity )
|
||||
{
|
||||
GetInitialColors();
|
||||
|
||||
WORD ret = g_LastColor;
|
||||
|
||||
g_LastColor = 0;
|
||||
if( red ) g_LastColor |= FOREGROUND_RED;
|
||||
if( green ) g_LastColor |= FOREGROUND_GREEN;
|
||||
if( blue ) g_LastColor |= FOREGROUND_BLUE;
|
||||
if( intensity ) g_LastColor |= FOREGROUND_INTENSITY;
|
||||
|
||||
// Just use the initial color if there's a match...
|
||||
if (g_LastColor == g_BadColor)
|
||||
g_LastColor = g_InitialColor;
|
||||
|
||||
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), g_LastColor | g_BackgroundFlags );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static void RestoreConsoleTextColor( WORD color )
|
||||
{
|
||||
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), color | g_BackgroundFlags );
|
||||
g_LastColor = color;
|
||||
}
|
||||
|
||||
|
||||
void Msg( const char *pMsg, ... )
|
||||
{
|
||||
va_list marker;
|
||||
va_start( marker, pMsg );
|
||||
vprintf( pMsg, marker );
|
||||
va_end( marker );
|
||||
}
|
||||
|
||||
|
||||
void Warning( const char *pMsg, ... )
|
||||
{
|
||||
WORD old = SetConsoleTextColor( 1, 1, 0, 1 );
|
||||
|
||||
va_list marker;
|
||||
va_start( marker, pMsg );
|
||||
vprintf( pMsg, marker );
|
||||
va_end( marker );
|
||||
|
||||
RestoreConsoleTextColor( old );
|
||||
}
|
||||
|
||||
|
||||
void Error (const char *error, ...)
|
||||
{
|
||||
WORD old = SetConsoleTextColor( 1, 0, 0, 1 );
|
||||
|
||||
va_list argptr;
|
||||
|
||||
printf ("\n************ ERROR ************\n");
|
||||
|
||||
va_start (argptr,error);
|
||||
vprintf (error,argptr);
|
||||
va_end (argptr);
|
||||
printf ("\n");
|
||||
|
||||
extern void PrintExitStuff();
|
||||
PrintExitStuff();
|
||||
|
||||
RestoreConsoleTextColor( old );
|
||||
|
||||
TerminateProcess( GetCurrentProcess(), 100 );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
================
|
||||
filelength
|
||||
================
|
||||
*/
|
||||
int filelength (FILE *f)
|
||||
{
|
||||
int pos;
|
||||
int end;
|
||||
|
||||
pos = ftell (f);
|
||||
fseek (f, 0, SEEK_END);
|
||||
end = ftell (f);
|
||||
fseek (f, pos, SEEK_SET);
|
||||
|
||||
return end;
|
||||
}
|
||||
|
||||
|
||||
FILE *SafeOpenWrite (char *filename)
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
f = fopen(filename, "wb");
|
||||
|
||||
if (!f)
|
||||
Error ("Error opening %s: %s",filename,strerror(errno));
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
FILE *SafeOpenRead (char *filename)
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
f = fopen(filename, "rb");
|
||||
|
||||
if (!f)
|
||||
Error ("Error opening %s: %s",filename,strerror(errno));
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
|
||||
void SafeRead (FILE *f, void *buffer, int count)
|
||||
{
|
||||
if ( fread (buffer, 1, count, f) != (size_t)count)
|
||||
Error ("File read failure");
|
||||
}
|
||||
|
||||
|
||||
void SafeWrite (FILE *f, void *buffer, int count)
|
||||
{
|
||||
if (fwrite (buffer, 1, count, f) != (size_t)count)
|
||||
Error ("File read failure");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
==============
|
||||
LoadFile
|
||||
==============
|
||||
*/
|
||||
int LoadFile (char *filename, void **bufferptr)
|
||||
{
|
||||
FILE *f;
|
||||
int length;
|
||||
void *buffer;
|
||||
|
||||
f = SafeOpenRead (filename);
|
||||
length = filelength (f);
|
||||
buffer = malloc (length+1);
|
||||
((char *)buffer)[length] = 0;
|
||||
SafeRead (f, buffer, length);
|
||||
fclose (f);
|
||||
|
||||
*bufferptr = buffer;
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
void SaveFile (char *filename, void *buffer, int count)
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
f = SafeOpenWrite (filename);
|
||||
SafeWrite (f, buffer, count);
|
||||
fclose (f);
|
||||
}
|
||||
|
||||
|
||||
#ifdef __BIG_ENDIAN__
|
||||
|
||||
short LittleShort (short l)
|
||||
{
|
||||
byte b1,b2;
|
||||
|
||||
b1 = l&255;
|
||||
b2 = (l>>8)&255;
|
||||
|
||||
return (b1<<8) + b2;
|
||||
}
|
||||
|
||||
short BigShort (short l)
|
||||
{
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
int LittleLong (int l)
|
||||
{
|
||||
byte b1,b2,b3,b4;
|
||||
|
||||
b1 = l&255;
|
||||
b2 = (l>>8)&255;
|
||||
b3 = (l>>16)&255;
|
||||
b4 = (l>>24)&255;
|
||||
|
||||
return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4;
|
||||
}
|
||||
|
||||
int BigLong (int l)
|
||||
{
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
float LittleFloat (float l)
|
||||
{
|
||||
union {byte b[4]; float f;} in, out;
|
||||
|
||||
in.f = l;
|
||||
out.b[0] = in.b[3];
|
||||
out.b[1] = in.b[2];
|
||||
out.b[2] = in.b[1];
|
||||
out.b[3] = in.b[0];
|
||||
|
||||
return out.f;
|
||||
}
|
||||
|
||||
float BigFloat (float l)
|
||||
{
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
|
||||
short BigShort (short l)
|
||||
{
|
||||
byte b1,b2;
|
||||
|
||||
b1 = l&255;
|
||||
b2 = (l>>8)&255;
|
||||
|
||||
return (b1<<8) + b2;
|
||||
}
|
||||
|
||||
short LittleShort (short l)
|
||||
{
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
int BigLong (int l)
|
||||
{
|
||||
byte b1,b2,b3,b4;
|
||||
|
||||
b1 = l&255;
|
||||
b2 = (l>>8)&255;
|
||||
b3 = (l>>16)&255;
|
||||
b4 = (l>>24)&255;
|
||||
|
||||
return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4;
|
||||
}
|
||||
|
||||
int LittleLong (int l)
|
||||
{
|
||||
return l;
|
||||
}
|
||||
|
||||
float BigFloat (float l)
|
||||
{
|
||||
union {byte b[4]; float f;} in, out;
|
||||
|
||||
in.f = l;
|
||||
out.b[0] = in.b[3];
|
||||
out.b[1] = in.b[2];
|
||||
out.b[2] = in.b[1];
|
||||
out.b[3] = in.b[0];
|
||||
|
||||
return out.f;
|
||||
}
|
||||
|
||||
float LittleFloat (float l)
|
||||
{
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user