Import of GameData MD5 hashing app.
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%402298
This commit is contained in:
		
							parent
							
								
									e0a69507a0
								
							
						
					
					
						commit
						2fc7a017e1
					
				
							
								
								
									
										74
									
								
								tools/gamedata md5/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								tools/gamedata md5/Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | ||||
| # (C)2004-2008 SourceMod Development Team
 | ||||
| # Makefile written by David "BAILOPAN" Anderson
 | ||||
| 
 | ||||
| 
 | ||||
| #####################################
 | ||||
| ### EDIT BELOW FOR OTHER PROJECTS ###
 | ||||
| #####################################
 | ||||
| 
 | ||||
| OBJECTS = main.cpp TextParsers.cpp sm_memtable.cpp md5.cpp | ||||
| 
 | ||||
| ##############################################
 | ||||
| ### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
 | ||||
| ##############################################
 | ||||
| 
 | ||||
| C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing | ||||
| C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 | ||||
| C_GCC4_FLAGS = -fvisibility=hidden | ||||
| CPP_GCC4_FLAGS = -fvisibility-inlines-hidden | ||||
| CPP = gcc-4.1 | ||||
| 
 | ||||
| BINARY = gamedatamd5 | ||||
| 
 | ||||
| INCLUDE += -I. -I../../public -I../../public/sourcepawn | ||||
| 
 | ||||
| CFLAGS += -D_LINUX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \
 | ||||
| 	-D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Wall -Werror \
 | ||||
| 	-Wno-uninitialized -mfpmath=sse -msse -DHAVE_STDINT_H -DSM_DEFAULT_THREADER -m32 | ||||
| CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti | ||||
| 
 | ||||
| ################################################
 | ||||
| ### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
 | ||||
| ################################################
 | ||||
| 
 | ||||
| ifeq "$(DEBUG)" "true" | ||||
| 	BIN_DIR = Debug | ||||
| 	CFLAGS += $(C_DEBUG_FLAGS) | ||||
| else | ||||
| 	BIN_DIR = Release | ||||
| 	CFLAGS += $(C_OPT_FLAGS) | ||||
| endif | ||||
| 
 | ||||
| GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1) | ||||
| ifeq "$(GCC_VERSION)" "4" | ||||
| 	CFLAGS += $(C_GCC4_FLAGS) | ||||
| 	CPPFLAGS += $(CPP_GCC4_FLAGS) | ||||
| endif | ||||
| 
 | ||||
| OBJ_LINUX := $(OBJECTS:%vm_engine.cpp=$(BIN_DIR)/%vm_engine.o) | ||||
| OBJ_LINUX := $(OBJ_LINUX:%.cpp=$(BIN_DIR)/%.o) | ||||
| OBJ_LINUX := $(OBJ_LINUX:%.c=$(BIN_DIR)/%.o) | ||||
| 
 | ||||
| $(BIN_DIR)/%vm_engine.o: %vm_engine.cpp | ||||
| 	$(CPP) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< | ||||
| 
 | ||||
| $(BIN_DIR)/%.o: %.cpp | ||||
| 	$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< | ||||
| 
 | ||||
| $(BIN_DIR)/%.o: %.c | ||||
| 	$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $< | ||||
| 
 | ||||
| all: | ||||
| 	mkdir -p $(BIN_DIR) | ||||
| 	$(MAKE) -f Makefile sourcemod | ||||
| 
 | ||||
| sourcemod: $(OBJ_LINUX) | ||||
| 	$(CPP) $(INCLUDE) $(OBJ_LINUX) $(LINK) -m32 -lstdc++ -o$(BIN_DIR)/$(BINARY) | ||||
| 
 | ||||
| debug: | ||||
| 	$(MAKE) -f Makefile all DEBUG=true | ||||
| 
 | ||||
| default: all | ||||
| 
 | ||||
| clean: | ||||
| 	rm -rf $(BIN_DIR)/$(BINARY) | ||||
							
								
								
									
										1082
									
								
								tools/gamedata md5/TextParsers.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1082
									
								
								tools/gamedata md5/TextParsers.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										87
									
								
								tools/gamedata md5/TextParsers.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								tools/gamedata md5/TextParsers.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,87 @@ | ||||
| /**
 | ||||
|  * vim: set ts=4 : | ||||
|  * ============================================================================= | ||||
|  * SourceMod | ||||
|  * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved. | ||||
|  * ============================================================================= | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it under | ||||
|  * the terms of the GNU General Public License, version 3.0, as published by the | ||||
|  * Free Software Foundation. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, but WITHOUT | ||||
|  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
|  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more | ||||
|  * details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License along with | ||||
|  * this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  * | ||||
|  * As a special exception, AlliedModders LLC gives you permission to link the | ||||
|  * code of this program (as well as its derivative works) to "Half-Life 2," the | ||||
|  * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software | ||||
|  * by the Valve Corporation.  You must obey the GNU General Public License in | ||||
|  * all respects for all other code used.  Additionally, AlliedModders LLC grants | ||||
|  * this exception to all derivative works.  AlliedModders LLC defines further | ||||
|  * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), | ||||
|  * or <http://www.sourcemod.net/license.php>.
 | ||||
|  * | ||||
|  * Version: $Id$ | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ | ||||
| #define _INCLUDE_SOURCEMOD_TEXTPARSERS_H_ | ||||
| 
 | ||||
| #include "ITextParsers.h" | ||||
| #include "main.h" | ||||
| 
 | ||||
| using namespace SourceMod; | ||||
| 
 | ||||
| /**
 | ||||
|  * @param void *			IN: Stream pointer | ||||
|  * @param char *			IN/OUT: Stream buffer | ||||
|  * @param size_t			IN: Maximum size of buffer | ||||
|  * @param unsigned int *	OUT: Number of bytes read (0 = end of stream) | ||||
|  * @return					True on success, false on failure | ||||
|  */ | ||||
| typedef bool (*STREAMREADER)(void *, char *, size_t, unsigned int *); | ||||
| 
 | ||||
| class TextParsers : public ITextParsers | ||||
| { | ||||
| public: | ||||
| 	TextParsers(); | ||||
| public: | ||||
| 	bool ParseFile_INI(const char *file,  | ||||
| 		ITextListener_INI *ini_listener, | ||||
| 		unsigned int *line, | ||||
| 		unsigned int *col); | ||||
| 
 | ||||
| 	SMCError ParseFile_SMC(const char *file,  | ||||
| 		ITextListener_SMC *smc_listener,  | ||||
| 		SMCStates *states); | ||||
| 
 | ||||
| 	SMCError ParseSMCFile(const char *file, | ||||
| 			ITextListener_SMC *smc_listener, | ||||
| 			SMCStates *states, | ||||
| 			char *buffer, | ||||
| 			size_t maxsize); | ||||
| 
 | ||||
| 	unsigned int GetUTF8CharBytes(const char *stream); | ||||
| 
 | ||||
| 	const char *GetSMCErrorString(SMCError err); | ||||
| 	bool IsWhitespace(const char *stream); | ||||
| private: | ||||
| 	SMCError ParseString_SMC(const char *stream,  | ||||
| 		ITextListener_SMC *smc, | ||||
| 		SMCStates *states); | ||||
| 	SMCError ParseStream_SMC(void *stream,  | ||||
| 		STREAMREADER srdr, | ||||
| 		ITextListener_SMC *smc, | ||||
| 		SMCStates *states); | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| extern TextParsers g_TextParser; | ||||
| 
 | ||||
| #endif //_INCLUDE_SOURCEMOD_TEXTPARSERS_H_
 | ||||
| 
 | ||||
							
								
								
									
										45
									
								
								tools/gamedata md5/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								tools/gamedata md5/main.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | ||||
| #include "main.h" | ||||
| #include <stdarg.h> | ||||
| 
 | ||||
| BuildMD5ableBuffer g_MD5Builder; | ||||
| 
 | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
| 	SMCStates states; | ||||
| 	SMCError error; | ||||
| 
 | ||||
| 	if (argc < 2) | ||||
| 	{ | ||||
| 		fprintf(stderr, "Usage: <file>\n"); | ||||
| 		return -1; | ||||
| 	} | ||||
| 
 | ||||
| 	error = g_TextParser.ParseFile_SMC(argv[1], &g_MD5Builder, &states); | ||||
| 
 | ||||
| 	if (error == SMCError_Okay) | ||||
| 	{ | ||||
| 		printf("MD5: %s\n", g_MD5Builder.GetMD5String()); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	fprintf(stderr, "Failed to parse file, Error %i at line %i and col %i\n", error, states.line, states.col); | ||||
| 	return -1; | ||||
| } | ||||
| 
 | ||||
| size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...) | ||||
| { | ||||
| 	va_list ap; | ||||
| 	va_start(ap, fmt); | ||||
| 	size_t len = vsnprintf(buffer, maxlength, fmt, ap); | ||||
| 	va_end(ap); | ||||
| 
 | ||||
| 	if (len >= maxlength) | ||||
| 	{ | ||||
| 		buffer[maxlength - 1] = '\0'; | ||||
| 		return (maxlength - 1); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		return len; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										88
									
								
								tools/gamedata md5/main.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								tools/gamedata md5/main.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,88 @@ | ||||
| #ifndef _INCLUDE_GAMEDATAMD5_MAIN_H_ | ||||
| #define _INCLUDE_GAMEDATAMD5_MAIN_H_ | ||||
| 
 | ||||
| #include "TextParsers.h" | ||||
| #include "sm_memtable.h" | ||||
| #include "md5.h" | ||||
| 
 | ||||
| using namespace SourceMod; | ||||
| 
 | ||||
| size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...); | ||||
| 
 | ||||
| class BuildMD5ableBuffer : public ITextListener_SMC | ||||
| { | ||||
| public: | ||||
| 
 | ||||
| 	BuildMD5ableBuffer() | ||||
| 	{ | ||||
| 		stringTable = new BaseStringTable(2048); | ||||
| 		md5[0] = 0; | ||||
| 		md5String[0] = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	~BuildMD5ableBuffer() | ||||
| 	{ | ||||
| 		delete stringTable; | ||||
| 	} | ||||
| 
 | ||||
| 	void ReadSMC_ParseStart() | ||||
| 	{ | ||||
| 		checksum = MD5(); | ||||
| 	} | ||||
| 
 | ||||
| 	SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) | ||||
| 	{ | ||||
| 		stringTable->AddString(key); | ||||
| 		stringTable->AddString(value); | ||||
| 
 | ||||
| 		return SMCResult_Continue; | ||||
| 	} | ||||
| 
 | ||||
| 	SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name) | ||||
| 	{ | ||||
| 		stringTable->AddString(name); | ||||
| 
 | ||||
| 		return SMCResult_Continue; | ||||
| 	} | ||||
| 
 | ||||
| 	void ReadSMC_ParseEnd(bool halted, bool failed) | ||||
| 	{ | ||||
| 		if (halted || failed) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		void *data = stringTable->GetMemTable()->GetAddress(0); | ||||
| 
 | ||||
| 		if (data != NULL) | ||||
| 		{ | ||||
| 			checksum.update((unsigned char *)data, stringTable->GetMemTable()->GetActualMemUsed()); | ||||
| 		} | ||||
| 
 | ||||
| 		checksum.finalize(); | ||||
| 
 | ||||
| 		checksum.hex_digest(md5String); | ||||
| 		checksum.raw_digest(md5); | ||||
| 
 | ||||
| 		stringTable->Reset(); | ||||
| 	} | ||||
| 
 | ||||
| 	unsigned char * GetMD5() | ||||
| 	{ | ||||
| 		return md5; | ||||
| 	} | ||||
| 
 | ||||
| 	unsigned char * GetMD5String() | ||||
| 	{ | ||||
| 		return (unsigned char *)&md5String[0]; | ||||
| 	} | ||||
| 
 | ||||
| private: | ||||
| 	MD5 checksum; | ||||
| 	unsigned char md5[16]; | ||||
| 	char md5String[33]; | ||||
| 	BaseStringTable *stringTable; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| #endif // _INCLUDE_GAMEDATAMD5_MAIN_H_
 | ||||
							
								
								
									
										485
									
								
								tools/gamedata md5/md5.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										485
									
								
								tools/gamedata md5/md5.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,485 @@ | ||||
| // MD5.CC - source code for the C++/object oriented translation and 
 | ||||
| //          modification of MD5.
 | ||||
| 
 | ||||
| // Translation and modification (c) 1995 by Mordechai T. Abzug 
 | ||||
| 
 | ||||
| // This translation/ modification is provided "as is," without express or 
 | ||||
| // implied warranty of any kind.
 | ||||
| 
 | ||||
| // The translator/ modifier does not claim (1) that MD5 will do what you think 
 | ||||
| // it does; (2) that this translation/ modification is accurate; or (3) that 
 | ||||
| // this software is "merchantible."  (Language for this disclaimer partially 
 | ||||
| // copied from the disclaimer below).
 | ||||
| 
 | ||||
| /* based on:
 | ||||
| 
 | ||||
|    MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm | ||||
|    MDDRIVER.C - test driver for MD2, MD4 and MD5 | ||||
| 
 | ||||
| 
 | ||||
|    Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All | ||||
| rights reserved. | ||||
| 
 | ||||
| License to copy and use this software is granted provided that it | ||||
| is identified as the "RSA Data Security, Inc. MD5 Message-Digest | ||||
| Algorithm" in all material mentioning or referencing this software | ||||
| or this function. | ||||
| 
 | ||||
| License is also granted to make and use derivative works provided | ||||
| that such works are identified as "derived from the RSA Data | ||||
| Security, Inc. MD5 Message-Digest Algorithm" in all material | ||||
| mentioning or referencing the derived work. | ||||
| 
 | ||||
| RSA Data Security, Inc. makes no representations concerning either | ||||
| the merchantability of this software or the suitability of this | ||||
| software for any particular purpose. It is provided "as is" | ||||
| without express or implied warranty of any kind. | ||||
| 
 | ||||
| These notices must be retained in any copies of any part of this | ||||
| documentation and/or software. | ||||
| 
 | ||||
|  */ | ||||
| 
 | ||||
| #include "md5.h" | ||||
| 
 | ||||
| #include <assert.h> | ||||
| #include <string.h> | ||||
| 
 | ||||
| // MD5 simple initialization method
 | ||||
| 
 | ||||
| MD5::MD5(){ | ||||
| 
 | ||||
|   init(); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // MD5 block update operation. Continues an MD5 message-digest
 | ||||
| // operation, processing another message block, and updating the
 | ||||
| // context.
 | ||||
| 
 | ||||
| void MD5::update (uint1 *input, uint4 input_length) { | ||||
| 
 | ||||
|   uint4 input_index, buffer_index; | ||||
|   uint4 buffer_space;                // how much space is left in buffer
 | ||||
| 
 | ||||
|   if (finalized){  // so we can't update!
 | ||||
|     /*cerr << "MD5::update:  Can't update a finalized digest!" << endl;*/ | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   // Compute number of bytes mod 64
 | ||||
|   buffer_index = (unsigned int)((count[0] >> 3) & 0x3F); | ||||
| 
 | ||||
|   // Update number of bits
 | ||||
|   if (  (count[0] += ((uint4) input_length << 3))<((uint4) input_length << 3) ) | ||||
|     count[1]++; | ||||
| 
 | ||||
|   count[1] += ((uint4)input_length >> 29); | ||||
| 
 | ||||
| 
 | ||||
|   buffer_space = 64 - buffer_index;  // how much space is left in buffer
 | ||||
| 
 | ||||
|   // Transform as many times as possible.
 | ||||
|   if (input_length >= buffer_space) { // ie. we have enough to fill the buffer
 | ||||
|     // fill the rest of the buffer and transform
 | ||||
|     memcpy (buffer + buffer_index, input, buffer_space); | ||||
|     transform (buffer); | ||||
| 
 | ||||
|     // now, transform each 64-byte piece of the input, bypassing the buffer
 | ||||
|     for (input_index = buffer_space; input_index + 63 < input_length;  | ||||
| 	 input_index += 64) | ||||
|       transform (input+input_index); | ||||
| 
 | ||||
|     buffer_index = 0;  // so we can buffer remaining
 | ||||
|   } | ||||
|   else | ||||
|     input_index=0;     // so we can buffer the whole input
 | ||||
| 
 | ||||
| 
 | ||||
|   // and here we do the buffering:
 | ||||
|   memcpy(buffer+buffer_index, input+input_index, input_length-input_index); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // MD5 update for files.
 | ||||
| // Like above, except that it works on files (and uses above as a primitive.)
 | ||||
| 
 | ||||
| void MD5::update(FILE *file){ | ||||
| 
 | ||||
|   unsigned char buffer[1024]; | ||||
|   int len; | ||||
| 
 | ||||
|   while ((len=fread(buffer, 1, 1024, file))) | ||||
|     update(buffer, len); | ||||
| 
 | ||||
|   fclose (file); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // MD5 finalization. Ends an MD5 message-digest operation, writing the
 | ||||
| // the message digest and zeroizing the context.
 | ||||
| 
 | ||||
| 
 | ||||
| void MD5::finalize (){ | ||||
| 
 | ||||
|   unsigned char bits[8]; | ||||
|   unsigned int index, padLen; | ||||
|   static uint1 PADDING[64]={ | ||||
|     0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | ||||
|     }; | ||||
| 
 | ||||
|   if (finalized){ | ||||
|    /* cerr << "MD5::finalize:  Already finalized this digest!" << endl;*/ | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   // Save number of bits
 | ||||
|   encode (bits, count, 8); | ||||
| 
 | ||||
|   // Pad out to 56 mod 64.
 | ||||
|   index = (uint4) ((count[0] >> 3) & 0x3f); | ||||
|   padLen = (index < 56) ? (56 - index) : (120 - index); | ||||
|   update (PADDING, padLen); | ||||
| 
 | ||||
|   // Append length (before padding)
 | ||||
|   update (bits, 8); | ||||
| 
 | ||||
|   // Store state in digest
 | ||||
|   encode (digest, state, 16); | ||||
| 
 | ||||
|   // Zeroize sensitive information
 | ||||
|   memset (buffer, 0, sizeof(*buffer)); | ||||
| 
 | ||||
|   finalized=1; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| MD5::MD5(FILE *file){ | ||||
| 
 | ||||
|   init();  // must be called be all constructors
 | ||||
|   update(file); | ||||
|   finalize (); | ||||
| } | ||||
| 
 | ||||
| unsigned char *MD5::raw_digest(){ | ||||
| 
 | ||||
|   uint1 *s = new uint1[16]; | ||||
| 
 | ||||
|   if (!finalized){ | ||||
| /*    cerr << "MD5::raw_digest:  Can't get digest if you haven't "<<
 | ||||
|       "finalized the digest!" <<endl;*/ | ||||
|     return ( (unsigned char*) ""); | ||||
|   } | ||||
| 
 | ||||
|   memcpy(s, digest, 16); | ||||
|   return s; | ||||
| } | ||||
| 
 | ||||
| unsigned char *MD5::raw_digest(unsigned char buffer[16]) | ||||
| { | ||||
| 	if (!finalized) | ||||
| 	{ | ||||
| 		return ( (unsigned char*) ""); | ||||
| 	} | ||||
| 
 | ||||
| 	 memcpy(buffer, digest, 16); | ||||
| 	 return buffer; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| char *MD5::hex_digest(){ | ||||
| 
 | ||||
|   int i; | ||||
|   char *s= new char[33]; | ||||
| 
 | ||||
|   if (!finalized){ | ||||
| /*    cerr << "MD5::hex_digest:  Can't get digest if you haven't "<<
 | ||||
|       "finalized the digest!" <<endl;*/ | ||||
|     return ""; | ||||
|   } | ||||
| 
 | ||||
|   for (i=0; i<16; i++) | ||||
|     sprintf(s+i*2, "%02x", digest[i]); | ||||
| 
 | ||||
|   s[32]='\0'; | ||||
| 
 | ||||
|   return s; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| char *MD5::hex_digest(char buffer[33]){ | ||||
| 
 | ||||
|   int i; | ||||
| 
 | ||||
|   if (!finalized) | ||||
|   { | ||||
| 	 /* cerr << "MD5::hex_digest:  Can't get digest if you haven't "<<
 | ||||
|       "finalized the digest!" <<endl;*/ | ||||
|     return ""; | ||||
|   } | ||||
| 
 | ||||
|   for (i=0; i<16; i++) | ||||
|     sprintf(buffer+i*2, "%02x", digest[i]); | ||||
| 
 | ||||
|   buffer[32]='\0'; | ||||
| 
 | ||||
|   return buffer; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // PRIVATE METHODS:
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void MD5::init(){ | ||||
|   finalized=0;  // we just started!
 | ||||
| 
 | ||||
|   // Nothing counted, so count=0
 | ||||
|   count[0] = 0; | ||||
|   count[1] = 0; | ||||
| 
 | ||||
|   // Load magic initialization constants.
 | ||||
|   state[0] = 0x67452301; | ||||
|   state[1] = 0xefcdab89; | ||||
|   state[2] = 0x98badcfe; | ||||
|   state[3] = 0x10325476; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Constants for MD5Transform routine.
 | ||||
| // Although we could use C++ style constants, defines are actually better,
 | ||||
| // since they let us easily evade scope clashes.
 | ||||
| 
 | ||||
| #define S11 7 | ||||
| #define S12 12 | ||||
| #define S13 17 | ||||
| #define S14 22 | ||||
| #define S21 5 | ||||
| #define S22 9 | ||||
| #define S23 14 | ||||
| #define S24 20 | ||||
| #define S31 4 | ||||
| #define S32 11 | ||||
| #define S33 16 | ||||
| #define S34 23 | ||||
| #define S41 6 | ||||
| #define S42 10 | ||||
| #define S43 15 | ||||
| #define S44 21 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // MD5 basic transformation. Transforms state based on block.
 | ||||
| void MD5::transform (uint1 block[64]){ | ||||
| 
 | ||||
|   uint4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; | ||||
| 
 | ||||
|   decode (x, block, 64); | ||||
| 
 | ||||
|   assert(!finalized);  // not just a user error, since the method is private
 | ||||
| 
 | ||||
|   /* Round 1 */ | ||||
|   FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ | ||||
|   FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ | ||||
|   FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ | ||||
|   FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ | ||||
|   FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ | ||||
|   FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ | ||||
|   FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ | ||||
|   FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ | ||||
|   FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ | ||||
|   FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ | ||||
|   FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ | ||||
|   FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ | ||||
|   FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ | ||||
|   FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ | ||||
|   FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ | ||||
|   FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ | ||||
| 
 | ||||
|  /* Round 2 */ | ||||
|   GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ | ||||
|   GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ | ||||
|   GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ | ||||
|   GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ | ||||
|   GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ | ||||
|   GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */ | ||||
|   GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ | ||||
|   GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ | ||||
|   GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ | ||||
|   GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ | ||||
|   GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ | ||||
|   GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ | ||||
|   GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ | ||||
|   GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ | ||||
|   GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ | ||||
|   GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ | ||||
| 
 | ||||
|   /* Round 3 */ | ||||
|   HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ | ||||
|   HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ | ||||
|   HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ | ||||
|   HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ | ||||
|   HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ | ||||
|   HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ | ||||
|   HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ | ||||
|   HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ | ||||
|   HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ | ||||
|   HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ | ||||
|   HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ | ||||
|   HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */ | ||||
|   HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ | ||||
|   HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ | ||||
|   HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ | ||||
|   HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ | ||||
| 
 | ||||
|   /* Round 4 */ | ||||
|   II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ | ||||
|   II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ | ||||
|   II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ | ||||
|   II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ | ||||
|   II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ | ||||
|   II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ | ||||
|   II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ | ||||
|   II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ | ||||
|   II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ | ||||
|   II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ | ||||
|   II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ | ||||
|   II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ | ||||
|   II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ | ||||
|   II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ | ||||
|   II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ | ||||
|   II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ | ||||
| 
 | ||||
|   state[0] += a; | ||||
|   state[1] += b; | ||||
|   state[2] += c; | ||||
|   state[3] += d; | ||||
| 
 | ||||
|   // Zeroize sensitive information.
 | ||||
|   memset ( (uint1 *) x, 0, sizeof(x)); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Encodes input (UINT4) into output (unsigned char). Assumes len is
 | ||||
| // a multiple of 4.
 | ||||
| void MD5::encode (uint1 *output, uint4 *input, uint4 len) { | ||||
| 
 | ||||
|   unsigned int i, j; | ||||
| 
 | ||||
|   for (i = 0, j = 0; j < len; i++, j += 4) { | ||||
|     output[j]   = (uint1)  (input[i] & 0xff); | ||||
|     output[j+1] = (uint1) ((input[i] >> 8) & 0xff); | ||||
|     output[j+2] = (uint1) ((input[i] >> 16) & 0xff); | ||||
|     output[j+3] = (uint1) ((input[i] >> 24) & 0xff); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Decodes input (unsigned char) into output (UINT4). Assumes len is
 | ||||
| // a multiple of 4.
 | ||||
| void MD5::decode (uint4 *output, uint1 *input, uint4 len){ | ||||
| 
 | ||||
|   unsigned int i, j; | ||||
| 
 | ||||
|   for (i = 0, j = 0; j < len; i++, j += 4) | ||||
|     output[i] = ((uint4)input[j]) | (((uint4)input[j+1]) << 8) | | ||||
|       (((uint4)input[j+2]) << 16) | (((uint4)input[j+3]) << 24); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Note: Replace "for loop" with standard memcpy if possible.
 | ||||
| void MD5::memcpy (uint1 *output, uint1 *input, uint4 len){ | ||||
| 
 | ||||
|   unsigned int i; | ||||
| 
 | ||||
|   for (i = 0; i < len; i++) | ||||
|     output[i] = input[i]; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Note: Replace "for loop" with standard memset if possible.
 | ||||
| void MD5::memset (uint1 *output, uint1 value, uint4 len){ | ||||
| 
 | ||||
|   unsigned int i; | ||||
| 
 | ||||
|   for (i = 0; i < len; i++) | ||||
|     output[i] = value; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // ROTATE_LEFT rotates x left n bits.
 | ||||
| 
 | ||||
| inline unsigned int MD5::rotate_left  (uint4 x, uint4 n){ | ||||
|   return (x << n) | (x >> (32-n))  ; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // F, G, H and I are basic MD5 functions.
 | ||||
| 
 | ||||
| inline unsigned int MD5::F            (uint4 x, uint4 y, uint4 z){ | ||||
|   return (x & y) | (~x & z); | ||||
| } | ||||
| 
 | ||||
| inline unsigned int MD5::G            (uint4 x, uint4 y, uint4 z){ | ||||
|   return (x & z) | (y & ~z); | ||||
| } | ||||
| 
 | ||||
| inline unsigned int MD5::H            (uint4 x, uint4 y, uint4 z){ | ||||
|   return x ^ y ^ z; | ||||
| } | ||||
| 
 | ||||
| inline unsigned int MD5::I            (uint4 x, uint4 y, uint4 z){ | ||||
|   return y ^ (x | ~z); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
 | ||||
| // Rotation is separate from addition to prevent recomputation.
 | ||||
| 
 | ||||
| 
 | ||||
| inline void MD5::FF(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,  | ||||
| 		    uint4  s, uint4 ac){ | ||||
|  a += F(b, c, d) + x + ac; | ||||
|  a = rotate_left (a, s) +b; | ||||
| } | ||||
| 
 | ||||
| inline void MD5::GG(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,  | ||||
| 		    uint4 s, uint4 ac){ | ||||
|  a += G(b, c, d) + x + ac; | ||||
|  a = rotate_left (a, s) +b; | ||||
| } | ||||
| 
 | ||||
| inline void MD5::HH(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,  | ||||
| 		    uint4 s, uint4 ac){ | ||||
|  a += H(b, c, d) + x + ac; | ||||
|  a = rotate_left (a, s) +b; | ||||
| } | ||||
| 
 | ||||
| inline void MD5::II(uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,  | ||||
| 			     uint4 s, uint4 ac){ | ||||
|  a += I(b, c, d) + x + ac; | ||||
|  a = rotate_left (a, s) +b; | ||||
| } | ||||
							
								
								
									
										106
									
								
								tools/gamedata md5/md5.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								tools/gamedata md5/md5.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,106 @@ | ||||
| // MD5.CC - source code for the C++/object oriented translation and 
 | ||||
| //          modification of MD5.
 | ||||
| 
 | ||||
| // Translation and modification (c) 1995 by Mordechai T. Abzug 
 | ||||
| 
 | ||||
| // This translation/ modification is provided "as is," without express or 
 | ||||
| // implied warranty of any kind.
 | ||||
| 
 | ||||
| // The translator/ modifier does not claim (1) that MD5 will do what you think 
 | ||||
| // it does; (2) that this translation/ modification is accurate; or (3) that 
 | ||||
| // this software is "merchantible."  (Language for this disclaimer partially 
 | ||||
| // copied from the disclaimer below).
 | ||||
| 
 | ||||
| /* based on:
 | ||||
| 
 | ||||
|    MD5.H - header file for MD5C.C | ||||
|    MDDRIVER.C - test driver for MD2, MD4 and MD5 | ||||
| 
 | ||||
|    Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All | ||||
| rights reserved. | ||||
| 
 | ||||
| License to copy and use this software is granted provided that it | ||||
| is identified as the "RSA Data Security, Inc. MD5 Message-Digest | ||||
| Algorithm" in all material mentioning or referencing this software | ||||
| or this function. | ||||
| 
 | ||||
| License is also granted to make and use derivative works provided | ||||
| that such works are identified as "derived from the RSA Data | ||||
| Security, Inc. MD5 Message-Digest Algorithm" in all material | ||||
| mentioning or referencing the derived work. | ||||
| 
 | ||||
| RSA Data Security, Inc. makes no representations concerning either | ||||
| the merchantability of this software or the suitability of this | ||||
| software for any particular purpose. It is provided "as is" | ||||
| without express or implied warranty of any kind. | ||||
| 
 | ||||
| These notices must be retained in any copies of any part of this | ||||
| documentation and/or software. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| //#include <fstream.h>
 | ||||
| //#include <iostream.h>
 | ||||
| 
 | ||||
| class MD5 { | ||||
| 
 | ||||
| public: | ||||
| // methods for controlled operation:
 | ||||
|   MD5              ();  // simple initializer
 | ||||
|   void  update     (unsigned char *input, unsigned int input_length); | ||||
|   void  update     (FILE *file); | ||||
|   void  finalize   (); | ||||
| 
 | ||||
| // constructors for special circumstances.  All these constructors finalize
 | ||||
| // the MD5 context.
 | ||||
|   MD5              (unsigned char *string); // digest string, finalize
 | ||||
|   MD5              (FILE *file);            // digest file, close, finalize
 | ||||
| 
 | ||||
| // methods to acquire finalized result
 | ||||
|   unsigned char    *raw_digest ();  // digest as a 16-byte binary array
 | ||||
|   unsigned char		*raw_digest(unsigned char buffer[16]); | ||||
|   char *            hex_digest ();  // digest as a 33-byte ascii-hex string
 | ||||
|   char *			hex_digest (char buffer[33]); //same as above, passing buffer
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| private: | ||||
| 
 | ||||
| // first, some types:
 | ||||
|   typedef unsigned       int uint4; // assumes integer is 4 words long
 | ||||
|   typedef unsigned short int uint2; // assumes short integer is 2 words long
 | ||||
|   typedef unsigned      char uint1; // assumes char is 1 word long
 | ||||
| 
 | ||||
| // next, the private data:
 | ||||
|   uint4 state[4]; | ||||
|   uint4 count[2];     // number of *bits*, mod 2^64
 | ||||
|   uint1 buffer[64];   // input buffer
 | ||||
|   uint1 digest[16]; | ||||
|   uint1 finalized; | ||||
| 
 | ||||
| // last, the private methods, mostly static:
 | ||||
|   void init             ();               // called by all constructors
 | ||||
|   void transform        (uint1 *buffer);  // does the real update work.  Note 
 | ||||
|                                           // that length is implied to be 64.
 | ||||
| 
 | ||||
|   static void encode    (uint1 *dest, uint4 *src, uint4 length); | ||||
|   static void decode    (uint4 *dest, uint1 *src, uint4 length); | ||||
|   static void memcpy    (uint1 *dest, uint1 *src, uint4 length); | ||||
|   static void memset    (uint1 *start, uint1 val, uint4 length); | ||||
| 
 | ||||
|   static inline uint4  rotate_left (uint4 x, uint4 n); | ||||
|   static inline uint4  F           (uint4 x, uint4 y, uint4 z); | ||||
|   static inline uint4  G           (uint4 x, uint4 y, uint4 z); | ||||
|   static inline uint4  H           (uint4 x, uint4 y, uint4 z); | ||||
|   static inline uint4  I           (uint4 x, uint4 y, uint4 z); | ||||
|   static inline void   FF  (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,  | ||||
| 			    uint4 s, uint4 ac); | ||||
|   static inline void   GG  (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,  | ||||
| 			    uint4 s, uint4 ac); | ||||
|   static inline void   HH  (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,  | ||||
| 			    uint4 s, uint4 ac); | ||||
|   static inline void   II  (uint4& a, uint4 b, uint4 c, uint4 d, uint4 x,  | ||||
| 			    uint4 s, uint4 ac); | ||||
| 
 | ||||
| }; | ||||
							
								
								
									
										20
									
								
								tools/gamedata md5/msvc9/gamedatamd5.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								tools/gamedata md5/msvc9/gamedatamd5.sln
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
|  | ||||
| Microsoft Visual Studio Solution File, Format Version 10.00 | ||||
| # Visual Studio 2008 | ||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gamedatamd5", "gamedatamd5.vcproj", "{E1C96598-E1AC-4928-8930-F8B6CD245B12}" | ||||
| EndProject | ||||
| Global | ||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| 		Debug|Win32 = Debug|Win32 | ||||
| 		Release|Win32 = Release|Win32 | ||||
| 	EndGlobalSection | ||||
| 	GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||
| 		{E1C96598-E1AC-4928-8930-F8B6CD245B12}.Debug|Win32.ActiveCfg = Debug|Win32 | ||||
| 		{E1C96598-E1AC-4928-8930-F8B6CD245B12}.Debug|Win32.Build.0 = Debug|Win32 | ||||
| 		{E1C96598-E1AC-4928-8930-F8B6CD245B12}.Release|Win32.ActiveCfg = Release|Win32 | ||||
| 		{E1C96598-E1AC-4928-8930-F8B6CD245B12}.Release|Win32.Build.0 = Release|Win32 | ||||
| 	EndGlobalSection | ||||
| 	GlobalSection(SolutionProperties) = preSolution | ||||
| 		HideSolutionNode = FALSE | ||||
| 	EndGlobalSection | ||||
| EndGlobal | ||||
							
								
								
									
										219
									
								
								tools/gamedata md5/msvc9/gamedatamd5.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								tools/gamedata md5/msvc9/gamedatamd5.vcproj
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,219 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <VisualStudioProject | ||||
| 	ProjectType="Visual C++" | ||||
| 	Version="9.00" | ||||
| 	Name="gamedatamd5" | ||||
| 	ProjectGUID="{E1C96598-E1AC-4928-8930-F8B6CD245B12}" | ||||
| 	Keyword="Win32Proj" | ||||
| 	TargetFrameworkVersion="0" | ||||
| 	> | ||||
| 	<Platforms> | ||||
| 		<Platform | ||||
| 			Name="Win32" | ||||
| 		/> | ||||
| 	</Platforms> | ||||
| 	<ToolFiles> | ||||
| 	</ToolFiles> | ||||
| 	<Configurations> | ||||
| 		<Configuration | ||||
| 			Name="Debug|Win32" | ||||
| 			OutputDirectory="Debug" | ||||
| 			IntermediateDirectory="Debug" | ||||
| 			ConfigurationType="1" | ||||
| 			CharacterSet="2" | ||||
| 			> | ||||
| 			<Tool | ||||
| 				Name="VCPreBuildEventTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCCustomBuildTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCXMLDataGeneratorTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCWebServiceProxyGeneratorTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCMIDLTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				Optimization="0" | ||||
| 				AdditionalIncludeDirectories="../../../public;../../../public/sourcepawn" | ||||
| 				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE" | ||||
| 				MinimalRebuild="true" | ||||
| 				BasicRuntimeChecks="3" | ||||
| 				RuntimeLibrary="1" | ||||
| 				UsePrecompiledHeader="0" | ||||
| 				WarningLevel="3" | ||||
| 				Detect64BitPortabilityProblems="false" | ||||
| 				DebugInformationFormat="4" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCManagedResourceCompilerTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCResourceCompilerTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCPreLinkEventTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCLinkerTool" | ||||
| 				LinkIncremental="2" | ||||
| 				GenerateDebugInformation="true" | ||||
| 				SubSystem="1" | ||||
| 				TargetMachine="1" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCALinkTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCManifestTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCXDCMakeTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCBscMakeTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCFxCopTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCAppVerifierTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCPostBuildEventTool" | ||||
| 			/> | ||||
| 		</Configuration> | ||||
| 		<Configuration | ||||
| 			Name="Release|Win32" | ||||
| 			OutputDirectory="Release" | ||||
| 			IntermediateDirectory="Release" | ||||
| 			ConfigurationType="1" | ||||
| 			> | ||||
| 			<Tool | ||||
| 				Name="VCPreBuildEventTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCCustomBuildTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCXMLDataGeneratorTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCWebServiceProxyGeneratorTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCMIDLTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				AdditionalIncludeDirectories="../../../public;../../../public/sourcepawn" | ||||
| 				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE" | ||||
| 				RuntimeLibrary="0" | ||||
| 				UsePrecompiledHeader="0" | ||||
| 				WarningLevel="3" | ||||
| 				Detect64BitPortabilityProblems="false" | ||||
| 				DebugInformationFormat="3" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCManagedResourceCompilerTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCResourceCompilerTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCPreLinkEventTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCLinkerTool" | ||||
| 				LinkIncremental="2" | ||||
| 				GenerateDebugInformation="true" | ||||
| 				SubSystem="1" | ||||
| 				OptimizeReferences="2" | ||||
| 				EnableCOMDATFolding="2" | ||||
| 				TargetMachine="1" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCALinkTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCManifestTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCXDCMakeTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCBscMakeTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCFxCopTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCAppVerifierTool" | ||||
| 			/> | ||||
| 			<Tool | ||||
| 				Name="VCPostBuildEventTool" | ||||
| 			/> | ||||
| 		</Configuration> | ||||
| 	</Configurations> | ||||
| 	<References> | ||||
| 	</References> | ||||
| 	<Files> | ||||
| 		<Filter | ||||
| 			Name="Header Files" | ||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" | ||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" | ||||
| 			> | ||||
| 			<File | ||||
| 				RelativePath="..\main.h" | ||||
| 				> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath="..\md5.h" | ||||
| 				> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath="..\sm_memtable.h" | ||||
| 				> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath="..\TextParsers.h" | ||||
| 				> | ||||
| 			</File> | ||||
| 		</Filter> | ||||
| 		<Filter | ||||
| 			Name="Resource Files" | ||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" | ||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" | ||||
| 			> | ||||
| 		</Filter> | ||||
| 		<Filter | ||||
| 			Name="Source Files" | ||||
| 			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" | ||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" | ||||
| 			> | ||||
| 			<File | ||||
| 				RelativePath="..\main.cpp" | ||||
| 				> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath="..\md5.cpp" | ||||
| 				> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath="..\sm_memtable.cpp" | ||||
| 				> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath="..\TextParsers.cpp" | ||||
| 				> | ||||
| 			</File> | ||||
| 		</Filter> | ||||
| 	</Files> | ||||
| 	<Globals> | ||||
| 	</Globals> | ||||
| </VisualStudioProject> | ||||
							
								
								
									
										112
									
								
								tools/gamedata md5/sm_memtable.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								tools/gamedata md5/sm_memtable.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,112 @@ | ||||
| /**
 | ||||
|  * vim: set ts=4 : | ||||
|  * ============================================================================= | ||||
|  * SourceMod | ||||
|  * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved. | ||||
|  * ============================================================================= | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it under | ||||
|  * the terms of the GNU General Public License, version 3.0, as published by the | ||||
|  * Free Software Foundation. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, but WITHOUT | ||||
|  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
|  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more | ||||
|  * details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License along with | ||||
|  * this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  * | ||||
|  * As a special exception, AlliedModders LLC gives you permission to link the | ||||
|  * code of this program (as well as its derivative works) to "Half-Life 2," the | ||||
|  * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software | ||||
|  * by the Valve Corporation.  You must obey the GNU General Public License in | ||||
|  * all respects for all other code used.  Additionally, AlliedModders LLC grants | ||||
|  * this exception to all derivative works.  AlliedModders LLC defines further | ||||
|  * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), | ||||
|  * or <http://www.sourcemod.net/license.php>.
 | ||||
|  * | ||||
|  * Version: $Id$ | ||||
|  */ | ||||
| 
 | ||||
| #include <string.h> | ||||
| #include <malloc.h> | ||||
| #include "sm_memtable.h" | ||||
| 
 | ||||
| BaseMemTable::BaseMemTable(unsigned int init_size) | ||||
| { | ||||
| 	membase = (unsigned char *)malloc(init_size); | ||||
| 	size = init_size; | ||||
| 	tail = 0; | ||||
| } | ||||
| 
 | ||||
| BaseMemTable::~BaseMemTable() | ||||
| { | ||||
| 	free(membase); | ||||
| 	membase = NULL; | ||||
| } | ||||
| 
 | ||||
| int BaseMemTable::CreateMem(unsigned int addsize, void **addr) | ||||
| { | ||||
| 	int idx = (int)tail; | ||||
| 
 | ||||
| 	while (tail + addsize >= size) | ||||
| 	{ | ||||
| 		size *= 2; | ||||
| 		membase = (unsigned char *)realloc(membase, size); | ||||
| 	} | ||||
| 
 | ||||
| 	tail += addsize; | ||||
| 
 | ||||
| 	if (addr) | ||||
| 	{ | ||||
| 		*addr = (void *)&membase[idx]; | ||||
| 	} | ||||
| 
 | ||||
| 	return idx; | ||||
| } | ||||
| 
 | ||||
| void *BaseMemTable::GetAddress(int index) | ||||
| { | ||||
| 	if (index < 0 || (unsigned int)index >= tail) | ||||
| 	{ | ||||
| 		return NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	return &membase[index]; | ||||
| } | ||||
| 
 | ||||
| void BaseMemTable::Reset() | ||||
| { | ||||
| 	tail = 0; | ||||
| } | ||||
| 
 | ||||
| BaseStringTable::BaseStringTable(unsigned int init_size) : m_table(init_size) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| BaseStringTable::~BaseStringTable() | ||||
| { | ||||
| } | ||||
| 
 | ||||
| int BaseStringTable::AddString(const char *string) | ||||
| { | ||||
| 	size_t len = strlen(string) + 1; | ||||
| 	int idx; | ||||
| 	char *addr; | ||||
| 
 | ||||
| 	idx = m_table.CreateMem(len, (void **)&addr); | ||||
| 	strcpy(addr, string); | ||||
| 
 | ||||
| 	return idx; | ||||
| } | ||||
| 
 | ||||
| /*const char *BaseStringTable::GetString(int str)
 | ||||
| { | ||||
| 	return (const char *)m_table.GetAddress(str); | ||||
| }*/ | ||||
| 
 | ||||
| void BaseStringTable::Reset() | ||||
| { | ||||
| 	m_table.Reset(); | ||||
| } | ||||
							
								
								
									
										114
									
								
								tools/gamedata md5/sm_memtable.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								tools/gamedata md5/sm_memtable.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,114 @@ | ||||
| /**
 | ||||
|  * vim: set ts=4 : | ||||
|  * ============================================================================= | ||||
|  * SourceMod | ||||
|  * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved. | ||||
|  * ============================================================================= | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it under | ||||
|  * the terms of the GNU General Public License, version 3.0, as published by the | ||||
|  * Free Software Foundation. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, but WITHOUT | ||||
|  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
|  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more | ||||
|  * details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License along with | ||||
|  * this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  * | ||||
|  * As a special exception, AlliedModders LLC gives you permission to link the | ||||
|  * code of this program (as well as its derivative works) to "Half-Life 2," the | ||||
|  * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software | ||||
|  * by the Valve Corporation.  You must obey the GNU General Public License in | ||||
|  * all respects for all other code used.  Additionally, AlliedModders LLC grants | ||||
|  * this exception to all derivative works.  AlliedModders LLC defines further | ||||
|  * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), | ||||
|  * or <http://www.sourcemod.net/license.php>.
 | ||||
|  * | ||||
|  * Version: $Id$ | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_ | ||||
| #define _INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_ | ||||
| 
 | ||||
| class BaseMemTable | ||||
| { | ||||
| public: | ||||
| 	BaseMemTable(unsigned int init_size); | ||||
| 	~BaseMemTable(); | ||||
| public: | ||||
| 	/**
 | ||||
| 	 * Allocates 'size' bytes of memory. | ||||
| 	 * Optionally outputs the address through 'addr'. | ||||
| 	 * Returns an index >= 0 on success, < 0 on failure. | ||||
| 	 */ | ||||
| 	int CreateMem(unsigned int size, void **addr); | ||||
| 
 | ||||
| 	/**
 | ||||
| 	 * Given an index into the memory table, returns its address. | ||||
| 	 * Returns NULL if invalid. | ||||
| 	 */ | ||||
| 	void *GetAddress(int index); | ||||
| 
 | ||||
| 	/**
 | ||||
| 	 * Scraps the memory table.  For caching purposes, the memory  | ||||
| 	 * is not freed, however subsequent calls to CreateMem() will  | ||||
| 	 * begin at the first index again. | ||||
| 	 */ | ||||
| 	void Reset(); | ||||
| 
 | ||||
| 	inline unsigned int GetMemUsage() | ||||
| 	{ | ||||
| 		return size; | ||||
| 	} | ||||
| 
 | ||||
| 	inline unsigned int GetActualMemUsed() | ||||
| 	{ | ||||
| 		return tail; | ||||
| 	} | ||||
| 
 | ||||
| private: | ||||
| 	unsigned char *membase; | ||||
| 	unsigned int size; | ||||
| 	unsigned int tail; | ||||
| }; | ||||
| 
 | ||||
| class BaseStringTable | ||||
| { | ||||
| public: | ||||
| 	BaseStringTable(unsigned int init_size); | ||||
| 	~BaseStringTable(); | ||||
| public: | ||||
| 	/** 
 | ||||
| 	 * Adds a string to the string table and returns its index. | ||||
| 	 */ | ||||
| 	int AddString(const char *string); | ||||
| 
 | ||||
| 	/**
 | ||||
| 	 * Given an index into the string table, returns the associated string. | ||||
| 	 */ | ||||
| 	inline const char *GetString(int str) | ||||
| 	{ | ||||
| 		return (const char *)m_table.GetAddress(str); | ||||
| 	} | ||||
| 
 | ||||
| 	/**
 | ||||
| 	 * Scraps the string table.  For caching purposes, the memory | ||||
| 	 * is not freed, however subsequent calls to AddString() will  | ||||
| 	 * begin at the first index again. | ||||
| 	 */ | ||||
| 	void Reset(); | ||||
| 
 | ||||
| 	/**
 | ||||
| 	 * Returns the parent BaseMemTable that this string table uses. | ||||
| 	 */ | ||||
| 	inline BaseMemTable *GetMemTable() | ||||
| 	{ | ||||
| 		return &m_table; | ||||
| 	} | ||||
| private: | ||||
| 	BaseMemTable m_table; | ||||
| }; | ||||
| 
 | ||||
| #endif //_INCLUDE_SOURCEMOD_CORE_STRINGTABLE_H_
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user