[TeamTalk 60]: [597] usarsim/Tools: Import usarsim tools

tk@edam.speech.cs.cmu.edu tk at edam.speech.cs.cmu.edu
Thu May 10 11:05:46 EDT 2007


An HTML attachment was scrubbed...
URL: http://mailman.srv.cs.cmu.edu/pipermail/teamtalk-developers/attachments/20070510/a02f074f/attachment-0001.html
-------------- next part --------------
Added: usarsim/Tools/CVS/Entries
===================================================================
--- usarsim/Tools/CVS/Entries	                        (rev 0)
+++ usarsim/Tools/CVS/Entries	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,6 @@
+D/ImageSrv////
+D/SimpleUI////
+D/Usar_UI////
+D/WSS////
+D/player////
+D/pyro////

Added: usarsim/Tools/CVS/Repository
===================================================================
--- usarsim/Tools/CVS/Repository	                        (rev 0)
+++ usarsim/Tools/CVS/Repository	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1 @@
+usarsim/Tools

Added: usarsim/Tools/CVS/Root
===================================================================
--- usarsim/Tools/CVS/Root	                        (rev 0)
+++ usarsim/Tools/CVS/Root	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1 @@
+:pserver:anonymous at usarsim.cvs.sourceforge.net:/cvsroot/usarsim

Added: usarsim/Tools/ImageSrv/CVS/Entries
===================================================================
--- usarsim/Tools/ImageSrv/CVS/Entries	                        (rev 0)
+++ usarsim/Tools/ImageSrv/CVS/Entries	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,30 @@
+/FreeImage.dll/1.1/Fri Feb 17 17:16:21 2006/-kb/
+/Hook.dll/1.1/Fri Feb 17 17:16:21 2006/-kb/
+/ImageSrv.aps/1.3/Tue Jan  9 15:04:25 2007/-kb/
+/ImageSrv.clw/1.3/Tue Jan  9 15:04:26 2007//
+/ImageSrv.cpp/1.1/Fri Feb 17 17:16:21 2006//
+/ImageSrv.dsp/1.2/Tue Jan  9 15:04:26 2007//
+/ImageSrv.dsw/1.1/Fri Feb 17 17:16:21 2006//
+/ImageSrv.h/1.1/Fri Feb 17 17:16:21 2006//
+/ImageSrv.ncb/1.3/Tue Jan  9 15:04:26 2007/-kb/
+/ImageSrv.opt/1.3/Tue Jan  9 15:04:26 2007/-kb/
+/ImageSrv.plg/1.3/Tue Jan  9 15:04:26 2007//
+/ImageSrv.rc/1.3/Mon Feb 12 17:42:29 2007//
+/ImageSrvDlg.cpp/1.4/Mon Feb 12 17:42:29 2007//
+/ImageSrvDlg.h/1.3/Tue Jan  9 15:04:27 2007//
+/Info.html/1.1/Fri Feb 17 17:16:21 2006//
+/InfoDlg.cpp/1.1/Fri Feb 17 17:16:21 2006//
+/InfoDlg.h/1.1/Fri Feb 17 17:16:21 2006//
+/ListenSocket.cpp/1.2/Tue Jan  9 15:04:27 2007//
+/ListenSocket.h/1.1/Fri Feb 17 17:16:21 2006//
+/ReadMe.txt/1.3/Tue Jan  9 15:04:27 2007//
+/StdAfx.cpp/1.1/Fri Feb 17 17:16:21 2006//
+/StdAfx.h/1.1/Fri Feb 17 17:16:21 2006//
+/VideoSocket.cpp/1.3/Tue Jan  9 15:04:27 2007//
+/VideoSocket.h/1.1/Fri Feb 17 17:16:21 2006//
+/resource.h/1.3/Mon Feb 12 17:42:30 2007//
+/webbrowser2.cpp/1.1/Fri Feb 17 17:16:21 2006//
+/webbrowser2.h/1.1/Fri Feb 17 17:16:21 2006//
+D/FreeImage////
+D/Hook////
+D/res////

Added: usarsim/Tools/ImageSrv/CVS/Repository
===================================================================
--- usarsim/Tools/ImageSrv/CVS/Repository	                        (rev 0)
+++ usarsim/Tools/ImageSrv/CVS/Repository	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1 @@
+usarsim/Tools/ImageSrv

Added: usarsim/Tools/ImageSrv/CVS/Root
===================================================================
--- usarsim/Tools/ImageSrv/CVS/Root	                        (rev 0)
+++ usarsim/Tools/ImageSrv/CVS/Root	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1 @@
+:pserver:anonymous at usarsim.cvs.sourceforge.net:/cvsroot/usarsim

Added: usarsim/Tools/ImageSrv/FreeImage/CVS/Entries
===================================================================
--- usarsim/Tools/ImageSrv/FreeImage/CVS/Entries	                        (rev 0)
+++ usarsim/Tools/ImageSrv/FreeImage/CVS/Entries	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,5 @@
+/FIIO_Mem.cpp/1.1/Fri Feb 17 17:16:21 2006//
+/FIIO_Mem.h/1.1/Fri Feb 17 17:16:21 2006//
+/FreeImage.h/1.1/Fri Feb 17 17:16:21 2006//
+/FreeImage.lib/1.1/Fri Feb 17 17:16:21 2006/-kb/
+D

Added: usarsim/Tools/ImageSrv/FreeImage/CVS/Repository
===================================================================
--- usarsim/Tools/ImageSrv/FreeImage/CVS/Repository	                        (rev 0)
+++ usarsim/Tools/ImageSrv/FreeImage/CVS/Repository	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1 @@
+usarsim/Tools/ImageSrv/FreeImage

Added: usarsim/Tools/ImageSrv/FreeImage/CVS/Root
===================================================================
--- usarsim/Tools/ImageSrv/FreeImage/CVS/Root	                        (rev 0)
+++ usarsim/Tools/ImageSrv/FreeImage/CVS/Root	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1 @@
+:pserver:anonymous at usarsim.cvs.sourceforge.net:/cvsroot/usarsim

Added: usarsim/Tools/ImageSrv/FreeImage/FIIO_Mem.cpp
===================================================================
--- usarsim/Tools/ImageSrv/FreeImage/FIIO_Mem.cpp	                        (rev 0)
+++ usarsim/Tools/ImageSrv/FreeImage/FIIO_Mem.cpp	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,146 @@
+/*--------------------------------------------------------------------------*\
+|| fiio_mem.cpp by Ryan Rubley <ryan at lostreality.org>                       ||
+||                                                                          ||
+|| (v1.02) 4-28-2004                                                        ||
+|| FreeImageIO to memory                                                    ||
+||                                                                          ||
+\*--------------------------------------------------------------------------*/
+
+#include <string.h>
+#include <stdlib.h>
+#include "fiio_mem.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+FIBITMAP *
+FreeImage_LoadFromMem(FREE_IMAGE_FORMAT fif, fiio_mem_handle *handle, int flags) {
+	FreeImageIO io;
+	SetMemIO(&io);
+	
+	if (handle && handle->data) {
+		handle->curpos = 0;
+		return FreeImage_LoadFromHandle(fif, &io, (fi_handle)handle, flags);
+	}
+
+	return NULL;
+}
+
+BOOL
+FreeImage_SaveToMem(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, fiio_mem_handle *handle, int flags) {
+	FreeImageIO io;
+	SetMemIO(&io);
+
+	if (handle) {
+		handle->filelen = 0;
+		handle->curpos = 0;
+		return FreeImage_SaveToHandle(fif, dib, &io, (fi_handle)handle, flags);
+	}
+
+	return FALSE;
+}
+
+// ----------------------------------------------------------
+
+void
+SetMemIO(FreeImageIO *io) {
+	io->read_proc  = fiio_mem_ReadProc;
+	io->seek_proc  = fiio_mem_SeekProc;
+	io->tell_proc  = fiio_mem_TellProc;
+	io->write_proc = fiio_mem_WriteProc;
+}
+
+// ----------------------------------------------------------
+
+#define FIIOMEM(member) (((fiio_mem_handle *)handle)->member)
+
+unsigned _stdcall
+fiio_mem_ReadProc(void *buffer, unsigned size, unsigned count, fi_handle handle) {
+	unsigned x;
+	for( x=0; x<count; x++ ) {
+		//if there isnt size bytes left to read, set pos to eof and return a short count
+		if( FIIOMEM(filelen)-FIIOMEM(curpos) < (long)size ) {
+			FIIOMEM(curpos) = FIIOMEM(filelen);
+			break;
+		}
+		//copy size bytes count times
+		memcpy( buffer, (char *)FIIOMEM(data) + FIIOMEM(curpos), size );
+		FIIOMEM(curpos) += size;
+		buffer = (char *)buffer + size;
+	}
+	return x;
+}
+
+unsigned _stdcall
+fiio_mem_WriteProc(void *buffer, unsigned size, unsigned count, fi_handle handle) {
+	void *newdata;
+	long newdatalen;
+	//double the data block size if we need to
+	while( FIIOMEM(curpos)+(long)(size*count) >= FIIOMEM(datalen) ) {
+		//if we are at or above 1G, we cant double without going negative
+		if( FIIOMEM(datalen) & 0x40000000 ) {
+			//max 2G
+			if( FIIOMEM(datalen) == 0x7FFFFFFF ) {
+				return 0;
+			}
+			newdatalen = 0x7FFFFFFF;
+		} else if( FIIOMEM(datalen) == 0 ) {
+			//default to 4K if nothing yet
+			newdatalen = 4096;
+		} else {
+			//double size
+			newdatalen = FIIOMEM(datalen) << 1;
+		}
+		newdata = realloc( FIIOMEM(data), newdatalen );
+		if( !newdata ) {
+			return 0;
+		}
+		FIIOMEM(data) = newdata;
+		FIIOMEM(datalen) = newdatalen;
+	}
+	memcpy( (char *)FIIOMEM(data) + FIIOMEM(curpos), buffer, size*count );
+	FIIOMEM(curpos) += size*count;
+	if( FIIOMEM(curpos) > FIIOMEM(filelen) ) {
+		FIIOMEM(filelen) = FIIOMEM(curpos);
+	}
+	return count;
+}
+
+int _stdcall
+fiio_mem_SeekProc(fi_handle handle, long offset, int origin) {
+	switch(origin) { //0 to filelen-1 are 'inside' the file
+	default:
+	case SEEK_SET: //can fseek() to 0-7FFFFFFF always
+		if( offset >= 0 ) {
+			FIIOMEM(curpos) = offset;
+			return 0;
+		}
+		break;
+
+	case SEEK_CUR:
+		if( FIIOMEM(curpos)+offset >= 0 ) {
+			FIIOMEM(curpos) += offset;
+			return 0;
+		}
+		break;
+
+	case SEEK_END:
+		if( FIIOMEM(filelen)+offset >= 0 ) {
+			FIIOMEM(curpos) = FIIOMEM(filelen)+offset;
+			return 0;
+		}
+		break;
+	}
+
+	return -1;
+}
+
+long _stdcall
+fiio_mem_TellProc(fi_handle handle) {
+	return FIIOMEM(curpos);
+}
+
+#ifdef __cplusplus
+}
+#endif

Added: usarsim/Tools/ImageSrv/FreeImage/FIIO_Mem.h
===================================================================
--- usarsim/Tools/ImageSrv/FreeImage/FIIO_Mem.h	                        (rev 0)
+++ usarsim/Tools/ImageSrv/FreeImage/FIIO_Mem.h	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,74 @@
+/*--------------------------------------------------------------------------*\
+|| fiio_mem.h by Ryan Rubley <ryan at lostreality.org>                         ||
+||                                                                          ||
+|| (v1.02) 4-28-2004                                                        ||
+|| FreeImageIO to memory                                                    ||
+||                                                                          ||
+\*--------------------------------------------------------------------------*/
+
+#ifndef _FIIO_MEM_H_
+#define _FIIO_MEM_H_
+
+#include "freeimage.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct fiio_mem_handle_s {
+	long filelen,datalen,curpos;
+	void *data;
+} fiio_mem_handle;
+
+/* it is up to the user to create a fiio_mem_handle and init datalen and data
+ * filelen will be pre-set to 0 by SaveToMem
+ * curpos will be pre-set to 0 by SaveToMem and LoadFromMem
+ * IMPORTANT: data should be set to NULL and datalen to 0,
+ *            unless the user wants to manually malloc a larger buffer
+ */
+FIBITMAP *FreeImage_LoadFromMem(FREE_IMAGE_FORMAT fif, fiio_mem_handle *handle, int flags);
+BOOL FreeImage_SaveToMem(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, fiio_mem_handle *handle, int flags);
+
+void SetMemIO(FreeImageIO *io);
+unsigned _stdcall fiio_mem_ReadProc(void *buffer, unsigned size, unsigned count, fi_handle handle);
+unsigned _stdcall fiio_mem_WriteProc(void *buffer, unsigned size, unsigned count, fi_handle handle);
+int _stdcall fiio_mem_SeekProc(fi_handle handle, long offset, int origin);
+long _stdcall fiio_mem_TellProc(fi_handle handle);
+
+/*** Example Usage ***
+
+//variables
+FIBITMAP *bitmap, *bitmap2;
+fiio_mem_handle fmh;
+
+//important initialization
+fmh.data = NULL;
+fmh.datalen = 0;
+
+//load a regular file
+bitmap = FreeImage_Load(FIF_PNG, "sample.png");
+
+//save the file to memory
+FreeImage_SaveToMem(FIF_PNG, bitmap, &fmh, 0);
+
+//at this point, fmh.data contains the entire PNG data in memory
+//fmh.datalen is the amount of space malloc'd for the image in memory,
+//but only fmh.filelen amount of that space is actually used.
+
+//its easy load an image from memory as well
+bitmap2 = FreeImage_LoadFromMem(FIF_PNG, &fmh, 0);
+//you could also have image data in memory via some other method, and just set
+//fmh.data to point to it, and set both fmh.datalen and fmh.filelen to the
+//size of that data, then FreeImage_LoadFromMem could load the image from that
+//memory
+
+//make sure to free the data since SaveToMem will cause it to be malloc'd
+free(fmh.data);
+
+*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: usarsim/Tools/ImageSrv/FreeImage/FreeImage.h
===================================================================
--- usarsim/Tools/ImageSrv/FreeImage/FreeImage.h	                        (rev 0)
+++ usarsim/Tools/ImageSrv/FreeImage/FreeImage.h	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,695 @@
+// ==========================================================
+// FreeImage 3
+//
+// Design and implementation by
+// - Floris van den Berg (flvdberg at wxs.nl)
+// - Herv\xE9 Drolon (drolon at infonie.fr)
+//
+// Contributors:
+// - Adam Gates (radad at xoasis.com)
+// - Alex Kwak
+// - Alexander Dymerets (sashad at te.net.ua)
+// - Detlev Vendt (detlev.vendt at brillit.de)
+// - Jan L. Nauta (jln at magentammt.com)
+// - Jani Kajala (janik at remedy.fi)
+// - Juergen Riecker (j.riecker at gmx.de)
+// - Karl-Heinz Bussian (khbussian at moss.de)
+// - Laurent Rocher (rocherl at club-internet.fr)
+// - Luca Piergentili (l.pierge at terra.es)
+// - Machiel ten Brinke (brinkem at uni-one.nl)
+// - Markus Loibl (markus.loibl at epost.de)
+// - Martin Weber (martweb at gmx.net)
+// - Matthias Wandel (mwandel at rim.net)
+// - Michal Novotny (michal at etc.cz)
+// - Ryan Rubley (ryan at lostreality.org)
+// - Volker G\xE4rtner (volkerg at gmx.at)
+//
+// This file is part of FreeImage 3
+//
+// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
+// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
+// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
+// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
+// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
+// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
+// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
+// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
+// THIS DISCLAIMER.
+//
+// Use at your own risk!
+// ==========================================================
+
+#ifndef FREEIMAGE_H
+#define FREEIMAGE_H
+
+// Compiler options ---------------------------------------------------------
+
+#if defined(FREEIMAGE_LIB) || !defined(WIN32)
+#define DLL_API
+#define DLL_CALLCONV
+#else
+#define WIN32_LEAN_AND_MEAN
+#define DLL_CALLCONV __stdcall
+// The following ifdef block is the standard way of creating macros which make exporting 
+// from a DLL simpler. All files within this DLL are compiled with the FREEIMAGE_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see 
+// DLL_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef FREEIMAGE_EXPORTS
+#define DLL_API __declspec(dllexport)
+#else
+#define DLL_API __declspec(dllimport)
+#endif // FREEIMAGE_EXPORTS
+#endif // FREEIMAGE_LIB || !WIN32
+
+// Some versions of gcc may have BYTE_ORDER or __BYTE_ORDER defined
+// If your big endian system isn't being detected, add an OS specific check
+#if (defined(BYTE_ORDER) && BYTE_ORDER==BIG_ENDIAN) || \
+	(defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) || \
+	defined(__APPLE__)
+#define FREEIMAGE_BIGENDIAN
+#endif // BYTE_ORDER
+
+// For C compatility --------------------------------------------------------
+
+#ifdef __cplusplus
+#define FI_DEFAULT(x)	= x
+#define FI_ENUM(x)      enum x
+#define FI_STRUCT(x)	struct x
+#else
+#define FI_DEFAULT(x)
+#define FI_ENUM(x)      typedef int x; enum x
+#define FI_STRUCT(x)	typedef struct x x; struct x
+#endif
+
+// Bitmap types -------------------------------------------------------------
+
+FI_STRUCT (FIBITMAP) { void *data; };
+FI_STRUCT (FIMULTIBITMAP) { void *data; };
+
+// Types used in the library (directly copied from Windows) -----------------
+
+#ifndef _WINDOWS_
+#define _WINDOWS_
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef NULL
+#define NULL 0
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET  0
+#define SEEK_CUR  1
+#define SEEK_END  2
+#endif
+
+typedef long BOOL;
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef unsigned long DWORD;
+typedef long LONG;
+
+#ifdef WIN32
+#pragma pack(push, 1)
+#else
+#pragma pack(1)
+#endif // WIN32
+
+typedef struct tagRGBQUAD {
+#ifdef FREEIMAGE_BIGENDIAN
+  BYTE rgbRed;
+  BYTE rgbGreen;
+  BYTE rgbBlue;
+#else
+  BYTE rgbBlue;
+  BYTE rgbGreen;
+  BYTE rgbRed;
+#endif // FREEIMAGE_BIGENDIAN
+  BYTE rgbReserved;
+} RGBQUAD;
+
+typedef struct tagRGBTRIPLE {
+#ifdef FREEIMAGE_BIGENDIAN
+  BYTE rgbtRed;
+  BYTE rgbtGreen;
+  BYTE rgbtBlue;
+#else
+  BYTE rgbtBlue;
+  BYTE rgbtGreen;
+  BYTE rgbtRed;
+#endif // FREEIMAGE_BIGENDIAN
+} RGBTRIPLE;
+
+#ifdef WIN32
+#pragma pack(pop)
+#else
+#pragma pack()
+#endif // WIN32
+
+typedef struct tagBITMAPINFOHEADER{
+  DWORD biSize;
+  LONG  biWidth; 
+  LONG  biHeight; 
+  WORD  biPlanes; 
+  WORD  biBitCount;
+  DWORD biCompression; 
+  DWORD biSizeImage; 
+  LONG  biXPelsPerMeter; 
+  LONG  biYPelsPerMeter; 
+  DWORD biClrUsed; 
+  DWORD biClrImportant;
+} BITMAPINFOHEADER, *PBITMAPINFOHEADER; 
+
+typedef struct tagBITMAPINFO { 
+  BITMAPINFOHEADER bmiHeader; 
+  RGBQUAD          bmiColors[1];
+} BITMAPINFO, *PBITMAPINFO;
+
+#endif // _WINDOWS_
+
+// Indexes for byte arrays, masks and shifts for treating pixels as words ---
+// These coincide with the order of RGBQUAD and RGBTRIPLE -------------------
+
+#ifndef FREEIMAGE_BIGENDIAN
+// Little Endian (x86 / MS Windows, Linux) : BGR(A) order
+#define FI_RGBA_RED				2
+#define FI_RGBA_GREEN			1
+#define FI_RGBA_BLUE			0
+#define FI_RGBA_ALPHA			3
+#define FI_RGBA_RED_MASK		0x00FF0000
+#define FI_RGBA_GREEN_MASK		0x0000FF00
+#define FI_RGBA_BLUE_MASK		0x000000FF
+#define FI_RGBA_ALPHA_MASK		0xFF000000
+#define FI_RGBA_RED_SHIFT		16
+#define FI_RGBA_GREEN_SHIFT		8
+#define FI_RGBA_BLUE_SHIFT		0
+#define FI_RGBA_ALPHA_SHIFT		24
+#else
+// Big Endian (PPC / Linux, MaxOSX) : RGB(A) order
+#define FI_RGBA_RED				0
+#define FI_RGBA_GREEN			1
+#define FI_RGBA_BLUE			2
+#define FI_RGBA_ALPHA			3
+#define FI_RGBA_RED_MASK		0xFF000000
+#define FI_RGBA_GREEN_MASK		0x00FF0000
+#define FI_RGBA_BLUE_MASK		0x0000FF00
+#define FI_RGBA_ALPHA_MASK		0x000000FF
+#define FI_RGBA_RED_SHIFT		24
+#define FI_RGBA_GREEN_SHIFT		16
+#define FI_RGBA_BLUE_SHIFT		8
+#define FI_RGBA_ALPHA_SHIFT		0
+#endif // FREEIMAGE_BIGENDIAN
+
+#define FI_RGBA_RGB_MASK		(FI_RGBA_RED_MASK|FI_RGBA_GREEN_MASK|FI_RGBA_BLUE_MASK)
+
+// The 16bit macros only include masks and shifts, since each color element is not byte aligned
+
+#define FI16_555_RED_MASK		0x7C00
+#define FI16_555_GREEN_MASK		0x03E0
+#define FI16_555_BLUE_MASK		0x001F
+#define FI16_555_RED_SHIFT		10
+#define FI16_555_GREEN_SHIFT	5
+#define FI16_555_BLUE_SHIFT		0
+#define FI16_565_RED_MASK		0xF800
+#define FI16_565_GREEN_MASK		0x07E0
+#define FI16_565_BLUE_MASK		0x001F
+#define FI16_565_RED_SHIFT		11
+#define FI16_565_GREEN_SHIFT	5
+#define FI16_565_BLUE_SHIFT		0
+
+// ICC profile support ------------------------------------------------------
+
+#define FIICC_DEFAULT			0x00
+#define FIICC_COLOR_IS_CMYK		0x01
+
+FI_STRUCT (FIICCPROFILE) { 
+	WORD    flags;	// info flag
+	DWORD	size;	// profile's size measured in bytes
+	void   *data;	// points to a block of contiguous memory containing the profile
+};
+
+// Important enums ----------------------------------------------------------
+
+/** I/O image format identifiers.
+*/
+FI_ENUM(FREE_IMAGE_FORMAT) {
+	FIF_UNKNOWN = -1,
+	FIF_BMP		= 0,
+	FIF_ICO		= 1,
+	FIF_JPEG	= 2,
+	FIF_JNG		= 3,
+	FIF_KOALA	= 4,
+	FIF_LBM		= 5,
+	FIF_IFF = FIF_LBM,
+	FIF_MNG		= 6,
+	FIF_PBM		= 7,
+	FIF_PBMRAW	= 8,
+	FIF_PCD		= 9,
+	FIF_PCX		= 10,
+	FIF_PGM		= 11,
+	FIF_PGMRAW	= 12,
+	FIF_PNG		= 13,
+	FIF_PPM		= 14,
+	FIF_PPMRAW	= 15,
+	FIF_RAS		= 16,
+	FIF_TARGA	= 17,
+	FIF_TIFF	= 18,
+	FIF_WBMP	= 19,
+	FIF_PSD		= 20,
+	FIF_CUT		= 21,
+	FIF_XBM		= 22,
+	FIF_XPM		= 23,
+	FIF_DDS		= 24
+};
+
+/** Image type used in FreeImage.
+*/
+FI_ENUM(FREE_IMAGE_TYPE) {
+	FIT_UNKNOWN = 0,	// unknown type
+	FIT_BITMAP  = 1,	// standard image			: 1-, 4-, 8-, 16-, 24-, 32-bit
+	FIT_UINT16	= 2,	// array of unsigned short	: unsigned 16-bit
+	FIT_INT16	= 3,	// array of short			: signed 16-bit
+	FIT_UINT32	= 4,	// array of unsigned long	: unsigned 32-bit
+	FIT_INT32	= 5,	// array of long			: signed 32-bit
+	FIT_FLOAT	= 6,	// array of float			: 32-bit IEEE floating point
+	FIT_DOUBLE	= 7,	// array of double			: 64-bit IEEE floating point
+	FIT_COMPLEX	= 8		// array of FICOMPLEX		: 2 x 64-bit IEEE floating point
+};
+
+/** Data structure for COMPLEX type (complex number)
+*/
+typedef struct tagFreeImageComplex {
+    /// real part
+	double r;
+	/// imaginary part
+    double i;
+} FICOMPLEX;
+
+/** Image color type used in FreeImage.
+*/
+FI_ENUM(FREE_IMAGE_COLOR_TYPE) {
+	FIC_MINISWHITE = 0,		// min value is white
+    FIC_MINISBLACK = 1,		// min value is black
+    FIC_RGB        = 2,		// RGB color model
+    FIC_PALETTE    = 3,		// color map indexed
+	FIC_RGBALPHA   = 4,		// RGB color model with alpha channel
+	FIC_CMYK       = 5		// CMYK color model
+};
+
+/** Color quantization algorithms.
+Constants used in FreeImage_ColorQuantize.
+*/
+FI_ENUM(FREE_IMAGE_QUANTIZE) {
+    FIQ_WUQUANT = 0,		// Xiaolin Wu color quantization algorithm
+    FIQ_NNQUANT = 1			// NeuQuant neural-net quantization algorithm by Anthony Dekker
+};
+
+/** Dithering algorithms.
+Constants used FreeImage_Dither.
+*/
+FI_ENUM(FREE_IMAGE_DITHER) {
+    FID_FS			= 0,	// Floyd & Steinberg error diffusion
+	FID_BAYER4x4	= 1,	// Bayer ordered dispersed dot dithering (order 2 dithering matrix)
+	FID_BAYER8x8	= 2,	// Bayer ordered dispersed dot dithering (order 3 dithering matrix)
+	FID_CLUSTER6x6	= 3,	// Ordered clustered dot dithering (order 3 - 6x6 matrix)
+	FID_CLUSTER8x8	= 4,	// Ordered clustered dot dithering (order 4 - 8x8 matrix)
+	FID_CLUSTER16x16= 5		// Ordered clustered dot dithering (order 8 - 16x16 matrix)
+};
+
+/** Upsampling / downsampling filters. 
+Constants used in FreeImage_Rescale.
+*/
+FI_ENUM(FREE_IMAGE_FILTER) {
+	FILTER_BOX		  = 0,	// Box, pulse, Fourier window, 1st order (constant) b-spline
+	FILTER_BICUBIC	  = 1,	// Mitchell & Netravali's two-param cubic filter
+	FILTER_BILINEAR   = 2,	// Bilinear filter
+	FILTER_BSPLINE	  = 3,	// 4th order (cubic) b-spline
+	FILTER_CATMULLROM = 4,	// Catmull-Rom spline, Overhauser spline
+	FILTER_LANCZOS3	  = 5	// Lanczos3 filter
+};
+
+/** Color channels.
+Constants used in color manipulation routines.
+*/
+FI_ENUM(FREE_IMAGE_COLOR_CHANNEL) {
+	FICC_RGB	= 0,	// Use red, green and blue channels
+	FICC_RED	= 1,	// Use red channel
+	FICC_GREEN	= 2,	// Use green channel
+	FICC_BLUE	= 3,	// Use blue channel
+	FICC_ALPHA	= 4,	// Use alpha channel
+	FICC_BLACK	= 5,	// Use black channel
+	FICC_REAL	= 6,	// Complex images: use real part
+	FICC_IMAG	= 7,	// Complex images: use imaginary part
+	FICC_MAG	= 8,	// Complex images: use magnitude
+	FICC_PHASE	= 9		// Complex images: use phase
+};
+
+// File IO routines ---------------------------------------------------------
+
+#ifndef FREEIMAGE_IO
+#define FREEIMAGE_IO
+
+typedef void* fi_handle;
+typedef unsigned (DLL_CALLCONV *FI_ReadProc) (void *buffer, unsigned size, unsigned count, fi_handle handle);
+typedef unsigned (DLL_CALLCONV *FI_WriteProc) (void *buffer, unsigned size, unsigned count, fi_handle handle);
+typedef int (DLL_CALLCONV *FI_SeekProc) (fi_handle handle, long offset, int origin);
+typedef long (DLL_CALLCONV *FI_TellProc) (fi_handle handle);
+
+#ifdef WIN32
+#pragma pack(push, 1)
+#else
+#pragma pack(1)
+#endif // WIN32
+
+FI_STRUCT(FreeImageIO) {
+	FI_ReadProc  read_proc;     // pointer to the function used to read data
+    FI_WriteProc write_proc;    // pointer to the function used to write data
+    FI_SeekProc  seek_proc;     // pointer to the function used to seek
+    FI_TellProc  tell_proc;     // pointer to the function used to aquire the current position
+};
+
+#ifdef WIN32
+#pragma pack(pop)
+#else
+#pragma pack()
+#endif // WIN32
+
+#endif // FREEIMAGE_IO
+
+// Plugin routines ----------------------------------------------------------
+
+#ifndef PLUGINS
+#define PLUGINS
+
+typedef const char *(DLL_CALLCONV *FI_FormatProc) ();
+typedef const char *(DLL_CALLCONV *FI_DescriptionProc) ();
+typedef const char *(DLL_CALLCONV *FI_ExtensionListProc) ();
+typedef const char *(DLL_CALLCONV *FI_RegExprProc) ();
+typedef void *(DLL_CALLCONV *FI_OpenProc)(FreeImageIO *io, fi_handle handle, BOOL read);
+typedef void (DLL_CALLCONV *FI_CloseProc)(FreeImageIO *io, fi_handle handle, void *data);
+typedef int (DLL_CALLCONV *FI_PageCountProc)(FreeImageIO *io, fi_handle handle, void *data);
+typedef int (DLL_CALLCONV *FI_PageCapabilityProc)(FreeImageIO *io, fi_handle handle, void *data);
+typedef FIBITMAP *(DLL_CALLCONV *FI_LoadProc)(FreeImageIO *io, fi_handle handle, int page, int flags, void *data);
+typedef BOOL (DLL_CALLCONV *FI_SaveProc)(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data);
+typedef BOOL (DLL_CALLCONV *FI_ValidateProc)(FreeImageIO *io, fi_handle handle);
+typedef const char *(DLL_CALLCONV *FI_MimeProc) ();
+typedef BOOL (DLL_CALLCONV *FI_SupportsExportBPPProc)(int bpp);
+typedef BOOL (DLL_CALLCONV *FI_SupportsExportTypeProc)(FREE_IMAGE_TYPE type);
+typedef BOOL (DLL_CALLCONV *FI_SupportsICCProfilesProc)();
+
+FI_STRUCT (Plugin) {
+	FI_FormatProc format_proc;
+	FI_DescriptionProc description_proc;
+	FI_ExtensionListProc extension_proc;
+	FI_RegExprProc regexpr_proc;
+	FI_OpenProc open_proc;
+	FI_CloseProc close_proc;
+	FI_PageCountProc pagecount_proc;
+	FI_PageCapabilityProc pagecapability_proc;
+	FI_LoadProc load_proc;
+	FI_SaveProc save_proc;
+	FI_ValidateProc validate_proc;
+	FI_MimeProc mime_proc;
+	FI_SupportsExportBPPProc supports_export_bpp_proc;
+	FI_SupportsExportTypeProc supports_export_type_proc;
+	FI_SupportsICCProfilesProc supports_icc_profiles_proc;
+};
+
+typedef void (DLL_CALLCONV *FI_InitProc)(Plugin *plugin, int format_id);
+
+#endif // PLUGINS
+
+
+// Load / Save flag constants -----------------------------------------------
+
+#define BMP_DEFAULT         0
+#define BMP_SAVE_RLE        1
+#define CUT_DEFAULT         0
+#define DDS_DEFAULT			0
+#define ICO_DEFAULT         0
+#define ICO_MAKEALPHA		1		// convert to 32bpp and create an alpha channel from the AND-mask when loading
+#define IFF_DEFAULT         0
+#define JPEG_DEFAULT        0
+#define JPEG_FAST           1
+#define JPEG_ACCURATE       2
+#define JPEG_QUALITYSUPERB  0x80
+#define JPEG_QUALITYGOOD    0x100
+#define JPEG_QUALITYNORMAL  0x200
+#define JPEG_QUALITYAVERAGE 0x400
+#define JPEG_QUALITYBAD     0x800
+#define KOALA_DEFAULT       0
+#define LBM_DEFAULT         0
+#define MNG_DEFAULT         0
+#define PCD_DEFAULT         0
+#define PCD_BASE            1		// load the bitmap sized 768 x 512
+#define PCD_BASEDIV4        2		// load the bitmap sized 384 x 256
+#define PCD_BASEDIV16       3		// load the bitmap sized 192 x 128
+#define PCX_DEFAULT         0
+#define PNG_DEFAULT         0
+#define PNG_IGNOREGAMMA		1		// avoid gamma correction
+#define PNM_DEFAULT         0
+#define PNM_SAVE_RAW        0       // If set the writer saves in RAW format (i.e. P4, P5 or P6)
+#define PNM_SAVE_ASCII      1       // If set the writer saves in ASCII format (i.e. P1, P2 or P3)
+#define PSD_DEFAULT         0
+#define RAS_DEFAULT         0
+#define TARGA_DEFAULT       0
+#define TARGA_LOAD_RGB888   1       // If set the loader converts RGB555 and ARGB8888 -> RGB888.
+#define TIFF_DEFAULT        0
+#define TIFF_CMYK			0x0001	// reads/stores tags for separated CMYK (use | to combine with compression flags)
+#define TIFF_PACKBITS       0x0100  // save using PACKBITS compression
+#define TIFF_DEFLATE        0x0200  // save using DEFLATE compression (a.k.a. ZLIB compression)
+#define TIFF_ADOBE_DEFLATE  0x0400  // save using ADOBE DEFLATE compression
+#define TIFF_NONE           0x0800  // save without any compression
+#define WBMP_DEFAULT        0
+#define XBM_DEFAULT			0
+#define XPM_DEFAULT			0
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Init / Error routines ----------------------------------------------------
+
+DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE));
+DLL_API void DLL_CALLCONV FreeImage_DeInitialise();
+
+// Version routines ---------------------------------------------------------
+
+DLL_API const char *DLL_CALLCONV FreeImage_GetVersion();
+DLL_API const char *DLL_CALLCONV FreeImage_GetCopyrightMessage();
+
+// Message output functions -------------------------------------------------
+
+DLL_API void DLL_CALLCONV FreeImage_OutputMessageProc(int fif, const char *fmt, ...);
+
+typedef void (*FreeImage_OutputMessageFunction)(FREE_IMAGE_FORMAT fif, const char *msg);
+DLL_API void DLL_CALLCONV FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf);
+
+// Allocate / Clone / Unload routines ---------------------------------------
+
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Allocate(int width, int height, int bpp, unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0));
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp FI_DEFAULT(8), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0));
+DLL_API FIBITMAP * DLL_CALLCONV FreeImage_Clone(FIBITMAP *dib);
+DLL_API void DLL_CALLCONV FreeImage_Unload(FIBITMAP *dib);
+
+// Load / Save routines -----------------------------------------------------
+
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags FI_DEFAULT(0));
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0));
+DLL_API BOOL DLL_CALLCONV FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags FI_DEFAULT(0));
+DLL_API BOOL DLL_CALLCONV FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0));
+
+// Plugin Interface ---------------------------------------------------------
+
+DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0));
+DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterExternalPlugin(const char *path, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0));
+DLL_API int DLL_CALLCONV FreeImage_GetFIFCount();
+DLL_API int DLL_CALLCONV FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable);
+DLL_API int DLL_CALLCONV FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif);
+DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFormat(const char *format);
+DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromMime(const char *mime);
+DLL_API const char *DLL_CALLCONV FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif);
+DLL_API const char *DLL_CALLCONV FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif);
+DLL_API const char *DLL_CALLCONV FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif);
+DLL_API const char * DLL_CALLCONV FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif);
+DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFilename(const char *filename);
+DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif);
+DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif);
+DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp);
+DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type);
+DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif);
+
+// Multipaging interface ----------------------------------------------------
+
+DLL_API FIMULTIBITMAP * DLL_CALLCONV FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory FI_DEFAULT(FALSE));
+DLL_API BOOL DLL_CALLCONV FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags FI_DEFAULT(0));
+DLL_API int DLL_CALLCONV FreeImage_GetPageCount(FIMULTIBITMAP *bitmap);
+DLL_API void DLL_CALLCONV FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data);
+DLL_API void DLL_CALLCONV FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data);
+DLL_API void DLL_CALLCONV FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page);
+DLL_API FIBITMAP * DLL_CALLCONV FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page);
+DLL_API void DLL_CALLCONV FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *page, BOOL changed);
+DLL_API BOOL DLL_CALLCONV FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source);
+DLL_API BOOL DLL_CALLCONV FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count);
+
+// Filetype request routines ------------------------------------------------
+
+DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileType(const char *filename, int size FI_DEFAULT(0));
+DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size FI_DEFAULT(0));
+
+// Image type request routine -----------------------------------------------
+
+DLL_API FREE_IMAGE_TYPE DLL_CALLCONV FreeImage_GetImageType(FIBITMAP *dib);
+
+// FreeImage info routines --------------------------------------------------
+
+DLL_API BOOL DLL_CALLCONV FreeImage_IsLittleEndian();
+
+// Pixel access routines ----------------------------------------------------
+
+DLL_API BYTE *DLL_CALLCONV FreeImage_GetBits(FIBITMAP *dib);
+DLL_API BYTE *DLL_CALLCONV FreeImage_GetScanLine(FIBITMAP *dib, int scanline);
+
+DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value);
+DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value);
+DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value);
+DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value);
+
+// DIB info routines --------------------------------------------------------
+
+DLL_API unsigned DLL_CALLCONV FreeImage_GetColorsUsed(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetBPP(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetWidth(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetHeight(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetLine(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetPitch(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetDIBSize(FIBITMAP *dib);
+DLL_API RGBQUAD *DLL_CALLCONV FreeImage_GetPalette(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterX(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterY(FIBITMAP *dib);
+DLL_API BITMAPINFOHEADER *DLL_CALLCONV FreeImage_GetInfoHeader(FIBITMAP *dib);
+DLL_API BITMAPINFO *DLL_CALLCONV FreeImage_GetInfo(FIBITMAP *dib);
+DLL_API FREE_IMAGE_COLOR_TYPE DLL_CALLCONV FreeImage_GetColorType(FIBITMAP *dib);
+
+DLL_API unsigned DLL_CALLCONV FreeImage_GetRedMask(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetGreenMask(FIBITMAP *dib);
+DLL_API unsigned DLL_CALLCONV FreeImage_GetBlueMask(FIBITMAP *dib);
+
+DLL_API unsigned DLL_CALLCONV FreeImage_GetTransparencyCount(FIBITMAP *dib);
+DLL_API BYTE * DLL_CALLCONV FreeImage_GetTransparencyTable(FIBITMAP *dib);
+DLL_API void DLL_CALLCONV FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled);
+DLL_API void DLL_CALLCONV FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count);
+DLL_API BOOL DLL_CALLCONV FreeImage_IsTransparent(FIBITMAP *dib);
+
+DLL_API BOOL DLL_CALLCONV FreeImage_HasBackgroundColor(FIBITMAP *dib);
+DLL_API BOOL DLL_CALLCONV FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor);
+DLL_API BOOL DLL_CALLCONV FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor);
+
+
+// ICC profile routines -----------------------------------------------------
+
+DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_GetICCProfile(FIBITMAP *dib);
+DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size);
+DLL_API void DLL_CALLCONV FreeImage_DestroyICCProfile(FIBITMAP *dib);
+
+// Line conversion routines -------------------------------------------------
+
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels);
+DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels);
+
+// Smart conversion routines ------------------------------------------------
+
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo8Bits(FIBITMAP *dib);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits555(FIBITMAP *dib);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits565(FIBITMAP *dib);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo24Bits(FIBITMAP *dib);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo32Bits(FIBITMAP *dib);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Threshold(FIBITMAP *dib, BYTE T);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm);
+
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE));
+DLL_API void DLL_CALLCONV FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE));
+
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear FI_DEFAULT(TRUE));
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear FI_DEFAULT(TRUE));
+
+
+// ZLib interface -----------------------------------------------------------
+
+DLL_API DWORD DLL_CALLCONV FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size);
+DLL_API DWORD DLL_CALLCONV FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size);
+
+// --------------------------------------------------------------------------
+// Image manipulation toolkit -----------------------------------------------
+// --------------------------------------------------------------------------
+
+// rotation and flipping
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateClassic(FIBITMAP *dib, double angle);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask);
+DLL_API BOOL DLL_CALLCONV FreeImage_FlipHorizontal(FIBITMAP *dib);
+DLL_API BOOL DLL_CALLCONV FreeImage_FlipVertical(FIBITMAP *dib);
+
+// upsampling / downsampling
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter);
+
+// color manipulation routines (point operations)
+DLL_API BOOL DLL_CALLCONV FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel);
+DLL_API BOOL DLL_CALLCONV FreeImage_AdjustGamma(FIBITMAP *dib, double gamma);
+DLL_API BOOL DLL_CALLCONV FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage);
+DLL_API BOOL DLL_CALLCONV FreeImage_AdjustContrast(FIBITMAP *dib, double percentage);
+DLL_API BOOL DLL_CALLCONV FreeImage_Invert(FIBITMAP *dib);
+DLL_API BOOL DLL_CALLCONV FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel FI_DEFAULT(FICC_BLACK));
+
+// channel processing routines
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel);
+DLL_API BOOL DLL_CALLCONV FreeImage_SetChannel(FIBITMAP *dib, FIBITMAP *dib8, FREE_IMAGE_COLOR_CHANNEL channel);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel);
+DLL_API BOOL DLL_CALLCONV FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel);
+
+// copy / paste / composite routines
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom);
+DLL_API BOOL DLL_CALLCONV FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha);
+DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg FI_DEFAULT(FALSE), RGBQUAD *appBkColor FI_DEFAULT(NULL), FIBITMAP *bg FI_DEFAULT(NULL));
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // FREEIMAGE_H

Added: usarsim/Tools/ImageSrv/FreeImage/FreeImage.lib
===================================================================
(Binary files differ)


Property changes on: usarsim/Tools/ImageSrv/FreeImage/FreeImage.lib
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: usarsim/Tools/ImageSrv/FreeImage.dll
===================================================================
(Binary files differ)


Property changes on: usarsim/Tools/ImageSrv/FreeImage.dll
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: usarsim/Tools/ImageSrv/Hook/CVS/Entries
===================================================================
--- usarsim/Tools/ImageSrv/Hook/CVS/Entries	                        (rev 0)
+++ usarsim/Tools/ImageSrv/Hook/CVS/Entries	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,10 @@
+/Hook.cpp/1.2/Tue Feb 21 21:50:29 2006//
+/Hook.dsp/1.3/Tue Jan  9 15:04:24 2007//
+/Hook.h/1.2/Tue Feb 21 21:50:29 2006//
+/Hook.plg/1.3/Tue Jan  9 15:04:25 2007//
+/ReadMe.txt/1.1/Fri Feb 17 17:16:21 2006//
+/StdAfx.cpp/1.1/Fri Feb 17 17:16:21 2006//
+/StdAfx.h/1.1/Fri Feb 17 17:16:21 2006//
+/detours.h/1.1/Fri Feb 17 17:16:21 2006//
+/detours.lib/1.1/Fri Feb 17 17:16:21 2006/-kb/
+D

Added: usarsim/Tools/ImageSrv/Hook/CVS/Repository
===================================================================
--- usarsim/Tools/ImageSrv/Hook/CVS/Repository	                        (rev 0)
+++ usarsim/Tools/ImageSrv/Hook/CVS/Repository	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1 @@
+usarsim/Tools/ImageSrv/Hook

Added: usarsim/Tools/ImageSrv/Hook/CVS/Root
===================================================================
--- usarsim/Tools/ImageSrv/Hook/CVS/Root	                        (rev 0)
+++ usarsim/Tools/ImageSrv/Hook/CVS/Root	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1 @@
+:pserver:anonymous at usarsim.cvs.sourceforge.net:/cvsroot/usarsim

Added: usarsim/Tools/ImageSrv/Hook/Hook.cpp
===================================================================
--- usarsim/Tools/ImageSrv/Hook/Hook.cpp	                        (rev 0)
+++ usarsim/Tools/ImageSrv/Hook/Hook.cpp	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,310 @@
+// Hook.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include <stdio.h>
+#include <d3d8.h>
+#include <D3dx8core.h>
+#include <wingdi.h>
+#include "detours.h"
+#include "Hook.h"
+
+#pragma data_seg("SHARED")
+IDirect3DDevice8* pDevice = NULL;
+FrameData fData = {FRAME_OK,0,0,0,0,"\0"};
+#pragma data_seg()
+#pragma comment(linker, "/section:SHARED,RWS")
+
+//#pragma warning(disable:4100)   // Trampolines don't use formal parameters.
+
+//////////////////////////////////////////////////////
+// Utilities
+//
+#define SAFERELEASE(x) if (x) { x->Release(); x = NULL; x; }
+
+BYTE lastSeq = 0;
+
+HRESULT copyFrameBuff()
+{
+	LPDIRECT3DSURFACE8 lpSurface = NULL;
+	IDirect3DSurface8* lpd3dsBackBuffer = NULL;
+	D3DSURFACE_DESC fDesc;
+    D3DLOCKED_RECT LockedRect;
+	HRESULT hr;   
+	
+	hr = pDevice->GetBackBuffer(0,D3DBACKBUFFER_TYPE_MONO, &lpd3dsBackBuffer);   
+	if (FAILED(hr)){
+		MessageBox(NULL,"couldn't get backbuffer","DLL",MB_OK);
+		return hr;
+	}
+	
+	lpd3dsBackBuffer->GetDesc(&fDesc);
+	if (fData.width!=fDesc.Width||fData.height!=fDesc.Height) {
+		fData.width = fDesc.Width;
+		fData.height = fDesc.Height;
+		if (fData.width*fData.height>640*480)
+			return E_OUTOFMEMORY;
+	}
+
+	hr = pDevice->CreateImageSurface(fData.width, fData.height, fDesc.Format, &lpSurface);
+	if (FAILED(hr)) {
+		MessageBox(NULL,"couldn't create ImageSurface","DLL",MB_OK);
+		SAFERELEASE(lpd3dsBackBuffer);
+		return hr;
+	}
+	
+	hr = D3DXLoadSurfaceFromSurface(lpSurface,NULL,NULL,lpd3dsBackBuffer,NULL,NULL,D3DX_FILTER_NONE,0);
+	if (FAILED(hr)) {
+		MessageBox(NULL,"couldn't copy surface","DLL",MB_OK);
+		SAFERELEASE(lpd3dsBackBuffer);
+		return hr;
+	}
+	SAFERELEASE(lpd3dsBackBuffer);
+
+	//D3DXSaveSurfaceToFile("test.bmp",D3DXIFF_BMP,lpSurface,NULL,NULL);
+	hr = lpSurface->LockRect(&LockedRect, NULL, D3DLOCK_READONLY);
+	if (FAILED(hr)) {
+		MessageBox(NULL,"couldn't copy surface","DLL",MB_OK);
+		SAFERELEASE(lpSurface);
+		return hr;
+	}
+
+    LPDWORD lpSrc;
+	LPBYTE lpDes = fData.data;
+	int append = (fData.width*3)%sizeof(DWORD);
+	append = append?sizeof(DWORD)-append:0;
+	fData.size = (fData.width*3+append)*fData.height;
+	// read pixels beginning with the bottom scan line
+	for (int y = fData.height - 1; y >= 0; y--)
+	{
+		// calculate address of the current source scan line
+		lpSrc = reinterpret_cast<LPDWORD>(LockedRect.pBits) + y * fData.width;
+		for (int x = 0; x < fData.width; x++)
+		{
+			// store the source pixel in the bitmap bits array
+			*reinterpret_cast<LPDWORD>(lpDes) = *lpSrc;
+			lpSrc++;        // increment source pointer by 1 DWORD
+			lpDes += 3;     // increment destination pointer by 3 bytes
+		}
+		lpDes += append; // Keep data in DWORD boundary
+	}
+
+	lpSurface->UnlockRect();
+	SAFERELEASE(lpSurface);
+	return hr;
+}
+
+//////////////////////////////////////////////////////////////// 
+// Detour Class.
+//
+class CDetour // add ": public CTarget" to enable access member variables... 
+{
+  public:
+    HRESULT WINAPI CreateDevice(UINT Adapter,
+						 D3DDEVTYPE DeviceType,
+						 HWND  hFocusWindow,
+						 DWORD BehaviorFlags,
+						 D3DPRESENT_PARAMETERS* pPresentationParameters,
+						 IDirect3DDevice8** ppReturnedDeviceInterface
+						 )
+	{
+		HRESULT hr=CreateDevice_Tramp(Adapter,DeviceType,hFocusWindow,BehaviorFlags,pPresentationParameters,ppReturnedDeviceInterface);
+		
+		pDevice=*ppReturnedDeviceInterface;
+		void * pvtbl;
+		memcpy(&pvtbl,*ppReturnedDeviceInterface,sizeof(pvtbl));
+		PBYTE tmp = (PBYTE)pvtbl+0x3c;
+	
+	    HRESULT (WINAPI CDetour::* pfDetour)(CONST RECT* pSourceRect,
+						   CONST RECT* pDestRect,
+					       HWND hDestWindowOverride,
+					       CONST RGNDATA* pDirtyRegion
+					      ) = &CDetour::Present;
+	    HRESULT (WINAPI CDetour::* pfTrampoline)(CONST RECT* pSourceRect,
+						   CONST RECT* pDestRect,
+					       HWND hDestWindowOverride,
+					       CONST RGNDATA* pDirtyRegion
+					      ) = &CDetour::Present_Tramp;
+	    
+		DetourFunctionWithEmptyTrampoline(*(PBYTE*)&pfTrampoline,
+	                                      *(PBYTE*)tmp,
+	                                      *(PBYTE*)&pfDetour);
+		return hr;
+	}
+
+	
+    HRESULT WINAPI Present(CONST RECT* pSourceRect,
+				    CONST RECT* pDestRect,
+				    HWND hDestWindowOverride,
+				    CONST RGNDATA* pDirtyRegion
+				   )
+	{
+		//TakeScreenshot(pDevice);
+		/*
+		if (!bReady) {
+			if (!FAILED(copyFrameBuff()))
+				bReady = TRUE;
+		}
+		*/
+		if (fData.sequence!=lastSeq) {
+			lastSeq = fData.sequence;
+			fData.state = FRAME_PENDING;
+			if (FAILED(copyFrameBuff()))
+				fData.state = FRAME_ERROR;
+			else
+				fData.state = FRAME_OK;
+		}
+		/*
+		// Obtain adapter number and device window
+		D3DDEVICE_CREATION_PARAMETERS dcp;
+		pDevice->GetCreationParameters(&dcp);
+		LPD3DXFONT pFont;
+		RECT rc;
+		GetClientRect(dcp.hFocusWindow, &rc);
+
+		HDC hDC = CreateCompatibleDC( NULL );
+		INT nHeight = -MulDiv( 12,(INT)GetDeviceCaps(hDC, LOGPIXELSY), 72 );
+    	HFONT hFont = CreateFont( nHeight, 0, 0, 0, FW_BOLD, FALSE,
+                          FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
+                          CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY,
+                          VARIABLE_PITCH, "Arial" );
+		
+		char str[16];
+		sprintf(str,"Frames:%d\0",fCount++);
+		D3DXCreateFont(pDevice, hFont, &pFont);
+		pFont->Begin();
+		pFont->DrawText(str,strlen(str),&rc,DT_BOTTOM,D3DCOLOR_ARGB(255,255,255,0)); 
+		pFont->End();
+		SAFERELEASE(pFont);
+		DeleteDC( hDC );
+    	DeleteObject( hFont );
+		*/
+		return Present_Tramp(pSourceRect,pDestRect,hDestWindowOverride,pDirtyRegion);
+	}
+
+    HRESULT WINAPI Present_Tramp(CONST RECT* pSourceRect,
+					      CONST RECT* pDestRect,
+				          HWND hDestWindowOverride,
+				          CONST RGNDATA* pDirtyRegion
+				         );
+
+	HRESULT WINAPI CreateDevice_Tramp(UINT Adapter,
+						 	   D3DDEVTYPE DeviceType,
+						 	   HWND  hFocusWindow,
+						 	   DWORD BehaviorFlags,
+						 	   D3DPRESENT_PARAMETERS* pPresentationParameters,
+						 	   IDirect3DDevice8** ppReturnedDeviceInterface
+						 	  );
+    // Class shouldn't have any member variables or virtual functions.
+};
+
+DETOUR_TRAMPOLINE_EMPTY(HRESULT WINAPI CDetour::Present_Tramp(CONST RECT* pSourceRect,
+												       CONST RECT* pDestRect,
+												       HWND hDestWindowOverride,
+												       CONST RGNDATA* pDirtyRegion
+												      ));
+
+DETOUR_TRAMPOLINE_EMPTY(HRESULT WINAPI CDetour::CreateDevice_Tramp(UINT Adapter,
+													  	    D3DDEVTYPE DeviceType,
+													  	    HWND  hFocusWindow,
+													  	    DWORD BehaviorFlags,
+													  	    D3DPRESENT_PARAMETERS* pPresentationParameters,
+													  	    IDirect3DDevice8** ppReturnedDeviceInterface
+													  	   ));
+// End Class
+///////////////////////////////////////////////////////////////////
+
+DETOUR_TRAMPOLINE(IDirect3D8* WINAPI Real_Direct3DCreate8(UINT SDKVersion ),
+				  Direct3DCreate8);
+
+/////////////////////////////////////////////////////////////
+// Detours
+//
+IDirect3D8* WINAPI Mine_Direct3DCreate8(
+	UINT SDKVersion
+	)
+{
+    IDirect3D8* pd3d;
+    pd3d=Real_Direct3DCreate8(SDKVersion);
+
+	void * pvtbl;
+	memcpy(&pvtbl,pd3d,sizeof(pvtbl));
+	PBYTE tmp = (PBYTE)pvtbl+0x3c;
+	
+    HRESULT (WINAPI CDetour::* pf_d_CreateDevice)(UINT Adapter,
+									 	   D3DDEVTYPE DeviceType,
+									 	   HWND  hFocusWindow,
+									 	   DWORD BehaviorFlags,
+									 	   D3DPRESENT_PARAMETERS* pPresentationParameters,
+									 	   IDirect3DDevice8** ppReturnedDeviceInterface
+									 	  ) = &CDetour::CreateDevice;
+									 	  
+    HRESULT (WINAPI CDetour::* pf_t_CreateDevice)(UINT Adapter,
+									 	   D3DDEVTYPE DeviceType,
+									 	   HWND  hFocusWindow,
+									 	   DWORD BehaviorFlags,
+									 	   D3DPRESENT_PARAMETERS* pPresentationParameters,
+									 	   IDirect3DDevice8** ppReturnedDeviceInterface
+									 	  ) = &CDetour::CreateDevice_Tramp;
+    
+	DetourFunctionWithEmptyTrampoline(*(PBYTE*)&pf_t_CreateDevice,
+                                      *(PBYTE*)tmp,
+                                      *(PBYTE*)&pf_d_CreateDevice);
+	return pd3d;
+}
+
+/////////////////////////////////////////////////////////////
+// TrampolineWith
+//
+VOID TrampolineWith(VOID)
+{
+	DetourFunctionWithTrampoline((PBYTE)Real_Direct3DCreate8,
+                                 (PBYTE)Mine_Direct3DCreate8);
+}
+
+VOID TrampolineRemove(VOID)
+{
+    DetourRemove((PBYTE)Real_Direct3DCreate8,
+          	     (PBYTE)Mine_Direct3DCreate8);
+}
+
+////////////////////////////////////////////////////////////
+// DllMain
+//
+BOOL APIENTRY DllMain( HANDLE hModule, 
+                       DWORD  ul_reason_for_call, 
+                       LPVOID lpReserved
+					 )
+{
+    switch (ul_reason_for_call)
+	{
+		case DLL_PROCESS_ATTACH:
+			TrampolineWith();
+			break;
+		case DLL_THREAD_ATTACH:
+		case DLL_THREAD_DETACH:
+			break;
+		case DLL_PROCESS_DETACH:
+			TrampolineRemove();
+			break;
+    }
+    return TRUE;
+}
+
+
+HOOK_API IDirect3DDevice8* getD3DDevice()
+{
+	return pDevice;
+}
+
+
+HOOK_API FrameData* getFrameData()
+{
+	int time=0;
+	while ((fData.state==FRAME_PENDING)&&time<100) {
+		Sleep(5);
+		time+=5;
+	}
+	if (fData.state==FRAME_OK) return &fData;
+	else return NULL;
+}

Added: usarsim/Tools/ImageSrv/Hook/Hook.dsp
===================================================================
--- usarsim/Tools/ImageSrv/Hook/Hook.dsp	                        (rev 0)
+++ usarsim/Tools/ImageSrv/Hook/Hook.dsp	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,125 @@
+# Microsoft Developer Studio Project File - Name="Hook" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Hook - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "Hook.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "Hook.mak" CFG="Hook - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "Hook - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Hook - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Hook - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HOOK_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HOOK_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 detours.lib d3dx8.lib d3d8.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /machine:I386
+
+!ELSEIF  "$(CFG)" == "Hook - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HOOK_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HOOK_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 detours.lib d3dx8.lib d3d8.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF 
+
+# Begin Target
+
+# Name "Hook - Win32 Release"
+# Name "Hook - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Hook.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\Hook.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project

Added: usarsim/Tools/ImageSrv/Hook/Hook.h
===================================================================
--- usarsim/Tools/ImageSrv/Hook/Hook.h	                        (rev 0)
+++ usarsim/Tools/ImageSrv/Hook/Hook.h	2007-05-10 15:05:45 UTC (rev 597)
@@ -0,0 +1,37 @@
+
+// The following ifdef block is the standard way of creating macros which make exporting 
+// from a DLL simpler. All files within this DLL are compiled with the HOOK_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see 
+// HOOK_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef HOOK_EXPORTS
+#define HOOK_API __declspec(dllexport)
+#else
+#define HOOK_API __declspec(dllimport)
+#endif
+
+typedef struct FrameData_t {
+	BYTE state;
+	BYTE sequence;
+	USHORT width;
+	USHORT height;
+	UINT size;
+	BYTE data[640*480*3+1];
+} FrameData;
+
+#define FRAME_PENDING 0
+#define FRAME_OK 1
+#define FRAME_ERROR 2
+
+// This class is exported from the Hook.dll
+class HOOK_API CHook {
+public:
+	CHook(void);
+	// TODO: add your methods here.
+};
+
+extern "C" {
+	HOOK_API IDirect3DDevice8* getD3DDevice(void);
+	HOOK_API FrameData* getFrameData(void);
+}

Added: usarsim/Tools/ImageSrv/Hook/Hook.plg
===================================================================

@@ Diff output truncated at 60000 characters. @@


More information about the TeamTalk-developers mailing list