summaryrefslogtreecommitdiff
path: root/3dc/win95/platform.h
diff options
context:
space:
mode:
Diffstat (limited to '3dc/win95/platform.h')
-rw-r--r--3dc/win95/platform.h939
1 files changed, 939 insertions, 0 deletions
diff --git a/3dc/win95/platform.h b/3dc/win95/platform.h
new file mode 100644
index 0000000..7cab03d
--- /dev/null
+++ b/3dc/win95/platform.h
@@ -0,0 +1,939 @@
+#ifndef PLATFORM_INCLUDED
+
+/*
+
+ Platform Specific Header Include
+
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ Minimise header files to
+ speed compiles...
+*/
+
+#define WIN32_LEAN_AND_MEAN
+
+/*
+ Standard windows functionality
+*/
+
+#include <windows.h>
+#include <windowsx.h>
+#include <winuser.h>
+#include <mmsystem.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+/*
+ DirectX functionality
+*/
+
+#include "ddraw.h"
+#include "d3d.h"
+#include "dsound.h"
+#include "dplay.h"
+#include "dinput.h"
+#include "dplobby.h"
+//#include "fastfile.h"
+
+
+#define platform_pc Yes
+
+#define Saturn No
+
+#define Hardware2dTextureClipping No
+
+
+/*
+
+ Types
+
+*/
+
+typedef RECT RECT_AVP;
+
+
+/* Watcom C 64-bit values */
+
+typedef struct LONGLONGCH {
+
+ unsigned int lo32;
+ int hi32;
+
+} LONGLONGCH;
+
+
+/*
+
+ Sine and Cosine
+
+*/
+
+#define GetSin(a) sine[a]
+#define GetCos(a) cosine[a]
+
+/*
+ Available processor types
+*/
+
+typedef enum {
+
+ PType_OffBottomOfScale,
+ PType_486,
+ PType_Pentium,
+ PType_P6,
+ PType_PentiumMMX,
+ PType_Klamath,
+ PType_OffTopOfScale
+
+} PROCESSORTYPES;
+
+
+/*
+
+ VGA Palette Entry
+
+*/
+
+typedef struct vgapaletteentry {
+
+ unsigned char vga_r;
+ unsigned char vga_g;
+ unsigned char vga_b;
+
+} VGAPALETTEENTRY;
+
+
+extern void LoadAndChangeToPalette(char*);
+
+/*
+ Video mode decsription (to be filled
+ in by DirectDraw callback).
+*/
+
+typedef struct videomodeinfo {
+
+ int Width; /* in pixels */
+ int Height; /* in pixels */
+ int ColourDepth; /* in bits per pixel */
+
+} VIDEOMODEINFO;
+
+/*
+ Maximum number of display modes
+ that could be detected on unknown
+ hardware.
+*/
+
+#define MaxAvailableVideoModes 100
+
+/*
+ #defines, structures etc for
+ textprint system
+*/
+
+#define MaxMsgChars 100
+#define MaxMessages 20
+
+/* Font description */
+
+#define CharWidth 8 /* In PIXELS, not bytes */
+#define CharHeight 10 /* In PIXELS, not bytes */
+#define CharVertSep (CharHeight + 0) /* In PIXELS, not bytes */
+
+#define FontStart 33 // random squiggle in standard ASCII
+#define FontEnd 127 // different random squiggle in standard ASCII
+
+#define FontInvisValue 0x00 // value to be colour keyed out of font blit
+
+typedef struct printqueueitem {
+
+ char text[MaxMsgChars];
+ int text_length;
+ int x;
+ int y;
+
+} PRINTQUEUEITEM;
+
+
+
+/* KJL 12:30:05 9/9/97 - new keyboard, mouse etc. enum */
+enum KEY_ID
+{
+ KEY_ESCAPE,
+
+ KEY_0,
+ KEY_1,
+ KEY_2,
+ KEY_3,
+ KEY_4,
+ KEY_5,
+ KEY_6,
+ KEY_7,
+ KEY_8,
+ KEY_9,
+
+ KEY_A,
+ KEY_B,
+ KEY_C,
+ KEY_D,
+ KEY_E,
+ KEY_F,
+ KEY_G,
+ KEY_H,
+ KEY_I,
+ KEY_J,
+ KEY_K,
+ KEY_L,
+ KEY_M,
+ KEY_N,
+ KEY_O,
+ KEY_P,
+ KEY_Q,
+ KEY_R,
+ KEY_S,
+ KEY_T,
+ KEY_U,
+ KEY_V,
+ KEY_W,
+ KEY_X,
+ KEY_Y,
+ KEY_Z,
+
+ KEY_LEFT,
+ KEY_RIGHT,
+ KEY_UP,
+ KEY_DOWN,
+ KEY_CR,
+ KEY_TAB,
+ KEY_INS,
+ KEY_DEL,
+ KEY_END,
+ KEY_HOME,
+ KEY_PAGEUP,
+ KEY_PAGEDOWN,
+ KEY_BACKSPACE,
+ KEY_COMMA,
+ KEY_FSTOP,
+ KEY_SPACE,
+
+ KEY_LEFTSHIFT,
+ KEY_RIGHTSHIFT,
+ KEY_LEFTALT,
+ KEY_RIGHTALT,
+ KEY_LEFTCTRL,
+ KEY_RIGHTCTRL,
+
+ KEY_CAPS,
+ KEY_NUMLOCK,
+ KEY_SCROLLOK,
+
+ KEY_NUMPAD0,
+ KEY_NUMPAD1,
+ KEY_NUMPAD2,
+ KEY_NUMPAD3,
+ KEY_NUMPAD4,
+ KEY_NUMPAD5,
+ KEY_NUMPAD6,
+ KEY_NUMPAD7,
+ KEY_NUMPAD8,
+ KEY_NUMPAD9,
+ KEY_NUMPADSUB,
+ KEY_NUMPADADD,
+ KEY_NUMPADDEL,
+ KEY_NUMPADENTER,
+ KEY_NUMPADDIVIDE,
+ KEY_NUMPADMULTIPLY,
+
+ KEY_LBRACKET,
+ KEY_RBRACKET,
+ KEY_SEMICOLON,
+ KEY_APOSTROPHE,
+ KEY_GRAVE,
+ KEY_BACKSLASH,
+ KEY_SLASH,
+ KEY_CAPITAL,
+ KEY_MINUS,
+ KEY_EQUALS,
+ KEY_LWIN,
+ KEY_RWIN,
+ KEY_APPS,
+
+
+ KEY_F1,
+ KEY_F2,
+ KEY_F3,
+ KEY_F4,
+ KEY_F5,
+ KEY_F6,
+ KEY_F7,
+ KEY_F8,
+ KEY_F9,
+ KEY_F10,
+ KEY_F11,
+ KEY_F12,
+
+ KEY_JOYSTICK_BUTTON_1,
+ KEY_JOYSTICK_BUTTON_2,
+ KEY_JOYSTICK_BUTTON_3,
+ KEY_JOYSTICK_BUTTON_4,
+ KEY_JOYSTICK_BUTTON_5,
+ KEY_JOYSTICK_BUTTON_6,
+ KEY_JOYSTICK_BUTTON_7,
+ KEY_JOYSTICK_BUTTON_8,
+ KEY_JOYSTICK_BUTTON_9,
+ KEY_JOYSTICK_BUTTON_10,
+ KEY_JOYSTICK_BUTTON_11,
+ KEY_JOYSTICK_BUTTON_12,
+ KEY_JOYSTICK_BUTTON_13,
+ KEY_JOYSTICK_BUTTON_14,
+ KEY_JOYSTICK_BUTTON_15,
+ KEY_JOYSTICK_BUTTON_16,
+
+ KEY_LMOUSE,
+ KEY_MMOUSE,
+ KEY_RMOUSE,
+
+ KEY_MOUSEBUTTON4,
+ KEY_MOUSEWHEELUP,
+ KEY_MOUSEWHEELDOWN,
+
+ // Dutch
+ KEY_ORDINAL,
+ KEY_LESSTHAN,
+ KEY_PLUS,
+
+ // French
+ KEY_RIGHTBRACKET,
+ KEY_ASTERISK,
+ KEY_DOLLAR,
+ KEY_U_GRAVE,
+ KEY_EXCLAMATION,
+ KEY_COLON,
+
+ // German
+ KEY_BETA,
+ KEY_A_UMLAUT,
+ KEY_O_UMLAUT,
+ KEY_U_UMLAUT,
+ KEY_HASH,
+
+ // Spanish
+ KEY_UPSIDEDOWNEXCLAMATION,
+ KEY_C_CEDILLA,
+ KEY_N_TILDE,
+
+ // accents & diacritics
+ KEY_DIACRITIC_GRAVE,
+ KEY_DIACRITIC_ACUTE,
+ KEY_DIACRITIC_CARET,
+ KEY_DIACRITIC_UMLAUT,
+
+
+ KEY_VOID=255, // used to indicate a blank spot in the key config
+ MAX_NUMBER_OF_INPUT_KEYS,
+
+};
+/*
+ Mouse handler modes (velocity mode is for
+ interfacing to input functions that need
+ to read the mouse velocity, e.g. WeRequest
+ functions, while poistion mode is for menus
+ and similar problems).
+
+ The initial mode is defined as a compiled in
+ global in game.c
+*/
+
+typedef enum {
+
+ MouseVelocityMode,
+ MousePositionMode
+
+} MOUSEMODES;
+
+
+/* Defines for the purpose of familiarity of name only */
+
+#define LeftButton 0x0001
+#define RightButton 0x0002
+#define MiddleButton 0x0004
+
+
+
+
+/*
+ Video Modes
+*/
+
+typedef enum {
+
+ VideoMode_DX_320x200x8,
+ VideoMode_DX_320x200x8T,
+ VideoMode_DX_320x200x15,
+ VideoMode_DX_320x240x8,
+
+ VideoMode_DX_640x480x8,
+ VideoMode_DX_640x480x8T,
+ VideoMode_DX_640x480x15,
+ VideoMode_DX_640x480x24,
+
+ VideoMode_DX_800x600x8,
+ VideoMode_DX_800x600x8T,
+ VideoMode_DX_800x600x15,
+ VideoMode_DX_800x600x24,
+
+ VideoMode_DX_1024x768x8,
+ VideoMode_DX_1024x768x8T,
+ VideoMode_DX_1024x768x15,
+ VideoMode_DX_1024x768x24,
+
+ VideoMode_DX_1280x1024x8,
+ VideoMode_DX_1280x1024x8T,
+ VideoMode_DX_1280x1024x15,
+ VideoMode_DX_1280x1024x24,
+
+ VideoMode_DX_1600x1200x8,
+ VideoMode_DX_1600x1200x8T,
+ VideoMode_DX_1600x1200x15,
+ VideoMode_DX_1600x1200x24,
+
+ MaxVideoModes
+
+} VIDEOMODES;
+
+
+#define MaxScreenWidth 1600 /* Don't get this wrong! */
+
+
+/*
+ Max no of palettes -- at present there is NO
+ code for palette switching and ALL palette
+ calls within the DirectDraw interface system
+ run on palette 0
+*/
+
+#define MaxPalettes 4
+
+/*
+
+ Video Mode Types
+
+*/
+
+typedef enum {
+
+ VideoModeType_8,
+ VideoModeType_15,
+ VideoModeType_24,
+ VideoModeType_8T
+
+} VIDEOMODETYPES;
+
+
+/*
+ Windows modes
+*/
+
+typedef enum {
+
+ WindowModeFullScreen,
+ WindowModeSubWindow
+
+} WINDOWMODES;
+
+typedef struct WinScaleXY {
+
+ float x;
+ float y;
+
+} WINSCALEXY;
+
+
+/*
+ Dubious hack for dubious
+ aspects of DirectDraw initialisation
+*/
+
+typedef enum {
+
+ /* Default */
+ NoRestartRequired,
+ /*
+ Characteristic of driver which
+ will not support changing to a different
+ bit depth without rebooting
+ */
+ RestartDisplayModeNotAvailable,
+ /*
+ Characteristic of ModeX emulation leading
+ to no video memory being available because
+ of the need to cooperate with a large existing
+ GDI surface which cannot be reduced without a
+ reboot
+ */
+ RestartOutOfVidMemForPrimary
+
+} VIDEORESTARTMODES;
+
+/*
+ Load modes for putting an image
+ in a DirectDraw surface --- either
+ do or do not deallocate the
+ system memory image, but always
+ keep the DirectDraw one
+*/
+
+typedef enum {
+
+ LoadModeDirectDrawOnly,
+ LoadModeFull
+
+} IMAGELOADMODES;
+
+
+/*
+ Direct3D driver modes
+*/
+
+typedef enum {
+
+ D3DSoftwareRGBDriver,
+ D3DSoftwareRampDriver,
+ D3DHardwareRGBDriver
+
+} D3DMODES;
+
+/*
+ Software scan draw request modes
+*/
+
+typedef enum {
+
+ RequestScanDrawDirectDraw,
+ RequestScanDrawSoftwareRGB,
+ RequestScanDrawRamp,
+ RequestScanDrawDefault
+
+} SOFTWARESCANDRAWREQUESTMODES;
+
+/*
+ Rasterisation request modes
+*/
+
+typedef enum {
+
+ RequestSoftwareRasterisation,
+ RequestDefaultRasterisation
+
+} RASTERREQUESTMODES;
+
+
+/*
+ Actual scan draw mode
+*/
+
+typedef enum {
+
+ ScanDrawDirectDraw,
+ ScanDrawD3DRamp,
+ ScanDrawD3DSoftwareRGB,
+ ScanDrawD3DHardwareRGB
+
+} SCANDRAWMODES;
+
+
+/*
+ Z buffering request modes
+*/
+
+typedef enum {
+
+ RequestZBufferNever,
+ RequestZBufferAlways,
+ RequestZBufferDefault
+
+} ZBUFFERREQUESTMODES;
+
+/*
+ Z buffering modes
+*/
+
+typedef enum {
+
+ ZBufferOn,
+ ZBufferWriteOnly,
+ ZBufferOff
+
+} ZBUFFERMODES;
+
+/*
+ Request modes for DirectX
+ memory usage
+*/
+
+typedef enum {
+
+ RequestSystemMemoryAlways,
+ RequestDefaultMemoryAllocation
+
+} DXMEMORYREQUESTMODES;
+
+
+/*
+ DirectX memory usage modes
+*/
+
+typedef enum {
+
+ SystemMemoryPreferred,
+ VideoMemoryPreferred
+
+} DXMEMORYMODES;
+
+/*
+
+ .BMP File header
+
+*/
+
+/*
+ Pack the header to 1 byte alignment so that the
+ loader works (John's code, still under test).
+*/
+
+#ifdef __WATCOMC__
+#pragma pack (1)
+#endif
+
+typedef struct bmpheader {
+
+ unsigned short BMP_ID; /* Contains 'BM' */
+ int BMP_Size;
+
+ short BMP_Null1;
+ short BMP_Null2;
+
+ int BMP_Image; /* Byte offset of image start relative to offset 14 */
+ int BMP_HeadSize; /* Size of header (40 for Windows, 12 for OS/2) */
+ int BMP_Width; /* Width of image in pixels */
+ int BMP_Height; /* Height of image in pixels */
+
+ short BMP_Planes; /* Number of image planes (must be 1) */
+ short BMP_Bits; /* Number of bits per pixel (1,4,8 or 24) */
+
+ int BMP_Comp; /* Compression type */
+ int BMP_CSize; /* Size in bytes of compressed image */
+ int BMP_Hres; /* Horizontal resolution in pixels/meter */
+ int BMP_Vres; /* Vertical resolution in pixels/meter */
+ int BMP_Colours; /* Number of colours used, below (N) */
+ int BMP_ImpCols; /* Number of important colours */
+
+} BMPHEADER;
+
+#ifdef __WATCOMC__
+#pragma pack (4)
+#endif
+
+/*
+ Types of texture files that can be
+ requested from the main D3D texture
+ loader.
+*/
+
+typedef enum {
+
+ TextureTypePGM,
+ TextureTypePPM
+
+} TEXTUREFILETYPE;
+
+/*
+ Windows initialisation modes.
+ See InitialiseWindowsSystem
+ in the default win_proj.cpp
+ for a full description.
+*/
+
+typedef enum {
+
+ WinInitFull,
+ WinInitChange
+
+} WININITMODES;
+
+/*
+
+ Triangle Array Limits etc.
+
+*/
+
+#define maxarrtriangles 7 /* Could be 6 if all shape data in triangles */
+#define trianglesize (1 + 1 + 1 + 1 + (6 * 3) + 1) /* largest, could be 5*3 if no 3d texturing */
+#define pta_max 9 /* Could be 8 if all shape data in triangles */
+
+/* header + xy + terminator */
+#define item_polygon_trianglesize (1 + 1 + 1 + 1 + (2 * 3) + 1)
+/* header + xyi + terminator */
+#define item_gouraudpolygon_trianglesize (1 + 1 + 1 + 1 + (3 * 3) + 1)
+/* header + xyuv + terminator */
+#define item_2dtexturedpolygon_trianglesize (1 + 1 + 1 + 1 + (4 * 3) + 1)
+/* header + xyuvi + terminator */
+#define item_gouraud2dtexturedpolygon_trianglesize (1 + 1 + 1 + 1 + (5 * 3) + 1)
+/* header + xyuvw + terminator */
+#define item_3dtexturedpolygon_trianglesize (1 + 1 + 1 + 1 + (5 * 3) + 1)
+/* header + xyuvwi + terminator */
+#define item_gouraud3dtexturedpolygon_trianglesize (1 + 1 + 1 + 1 + (6 * 3) + 1)
+
+/*
+
+ Vertex sizes
+
+ For copying vertices from item list polygons to triangles
+
+ e.g.
+
+ Vertex 2 (x component) of the quad would be (for Item_Polygon)
+
+ q[2 * i_poly_vsize + i_vstart + ix]
+
+ WARNING: If the item format changes these MUST be updated
+
+*/
+
+#define vstart 4
+
+#define poly_vsize 2
+#define gpoly_vsize 3
+#define t2poly_vsize 4
+#define gt2poly_vsize 5
+#define t3poly_vsize 5
+#define gt3poly_vsize 6
+
+
+
+/*
+
+ Triangle Array Structure
+
+*/
+
+typedef struct trianglearray {
+
+ int TA_NumTriangles;
+ int *TA_ItemPtr;
+ int *TA_TriangleArray[maxarrtriangles];
+
+} TRIANGLEARRAY;
+
+/*
+ Function prototypes
+*/
+
+/*
+ Windows functionality. Note current
+ DirectInput functions are also here since
+ they are really part of the Win32 multimedia
+ library.
+*/
+
+long GetWindowsTickCount(void);
+void CheckForWindowsMessages(void);
+BOOL ExitWindowsSystem(void);
+BOOL InitialiseWindowsSystem(HANDLE hInstance, int nCmdShow, int WinInitMode);
+void KeyboardHandlerKeyDown(WPARAM wParam);
+void KeyboardHandlerKeyUp(WPARAM wParam);
+void MouseVelocityHandler(UINT message, LPARAM lParam);
+void MousePositionHandler(UINT message, LPARAM lParam);
+int ReadJoystick(void);
+int CheckForJoystick(void);
+BOOL SpawnRasterThread();
+BOOL WaitForRasterThread();
+
+
+/* DirectDraw */
+void finiObjects(void);
+void GenerateDirectDrawSurface(void);
+void LockSurfaceAndGetBufferPointer(void);
+void UnlockSurface(void);
+void finiObjects(void);
+void ColourFillBackBuffer(int FillColour);
+void ColourFillBackBufferQuad(int FillColour, int LeftX,
+ int TopY, int RightX, int BotY);
+void FlipBuffers(void);
+void BlitToBackBuffer(void* lpBackground, RECT* destRectPtr, RECT* srcRectPtr);
+void BlitToBackBufferWithoutTearing(void* lpBackground, RECT* destRectPtr, RECT* srcRectPtr);
+void BlitWin95Char(int x, int y, unsigned char toprint);
+void ReleaseDDSurface(void* DDSurface);
+BOOL InitialiseDirectDrawObject(void);
+BOOL ChangeDirectDrawObject(void);
+BOOL CheckForVideoModes(int TestVideoMode);
+void finiObjectsExceptDD(void);
+BOOL TestMemoryAccess(void);
+int ChangePalette (unsigned char* NewPalette);
+int GetAvailableVideoMemory(void);
+void HandleVideoModeRestarts(HINSTANCE hInstance, int nCmdShow);
+void* MakeBackdropSurface(void);
+void ReleaseBackdropSurface(void);
+void LockBackdropSurface(void);
+void UnlockBackdropSurface(void);
+void ComposeBackdropBackBuffer(void);
+int GetSingleColourForPrimary(int Colour);
+
+/*
+ DirectX functionality only available in
+ C++ under Watcom at present
+*/
+#ifdef __cplusplus
+HRESULT CALLBACK EnumDisplayModesCallback(LPDDSURFACEDESC pddsd, LPVOID Context);
+BOOL FAR PASCAL EnumDDObjectsCallback(GUID FAR* lpGUID, LPSTR lpDriverDesc,
+ LPSTR lpDriverName, LPVOID lpContext);
+#if triplebuffer
+/*
+ must be WINAPI to support Windows FAR PASCAL
+ calling convention. Must be HRESULT to support
+ enumeration return value. NOTE THIS FUNCTION
+ DOESN'T WORK (DOCS WRONG) AND TRIPLE BUFFERING
+ HAS BEEN REMOVED ANYWAY 'COS IT'S USELESS...
+*/
+HRESULT WINAPI InitTripleBuffers(LPDIRECTDRAWSURFACE lpdd,
+ LPDDSURFACEDESC lpsd, LPVOID lpc);
+#endif
+#endif
+
+/* Direct 3D Immediate Mode Rasterisation Module */
+BOOL InitialiseDirect3DImmediateMode(void);
+BOOL LockExecuteBuffer(void);
+BOOL UnlockExecuteBufferAndPrepareForUse(void);
+BOOL BeginD3DScene(void);
+BOOL EndD3DScene(void);
+BOOL ExecuteBuffer(void);
+BOOL RenderD3DScene(void);
+void ReleaseDirect3D(void);
+void WritePolygonToExecuteBuffer(int* itemptr);
+void WriteGouraudPolygonToExecuteBuffer(int* itemptr);
+void Write2dTexturedPolygonToExecuteBuffer(int* itemptr);
+void WriteGouraud2dTexturedPolygonToExecuteBuffer(int* itemptr);
+void Write3dTexturedPolygonToExecuteBuffer(int* itemptr);
+void WriteGouraud3dTexturedPolygonToExecuteBuffer(int* itemptr);
+void WriteBackdrop2dTexturedPolygonToExecuteBuffer(int* itemptr);
+void WriteBackdrop3dTexturedPolygonToExecuteBuffer(int* itemptr);
+void WriteEndCodeToExecuteBuffer(void);
+void ReleaseD3DTexture(void* D3DTexture);
+void ReleaseDirect3DNotDD(void);
+void ReleaseDirect3DNotDDOrImages(void);
+BOOL SetExecuteBufferDefaults(void);
+void SelectD3DDriverAndDrawMode(void);
+#if SUPPORT_MMX
+void SelectMMXOptions(void);
+#endif
+BOOL TestInitD3DObject(void);
+
+#if SupportZBuffering
+BOOL CreateD3DZBuffer(void);
+void FlushD3DZBuffer(void);
+void WriteZBPolygonToExecuteBuffer(int* itemptr);
+void WriteZBGouraudPolygonToExecuteBuffer(int* itemptr);
+void WriteZB2dTexturedPolygonToExecuteBuffer(int* itemptr);
+void WriteZBGouraud2dTexturedPolygonToExecuteBuffer(int* itemptr);
+void WriteZB3dTexturedPolygonToExecuteBuffer(int* itemptr);
+void WriteZBGouraud3dTexturedPolygonToExecuteBuffer(int* itemptr);
+#endif
+
+#ifdef __cplusplus
+HRESULT WINAPI DeviceEnumerator(LPGUID lpGuid,
+ LPSTR lpDeviceDescription, LPSTR lpDeviceName,
+ LPD3DDEVICEDESC lpHWDesc, LPD3DDEVICEDESC lpHELDesc, LPVOID lpContext);
+HRESULT CALLBACK TextureFormatsEnumerator
+ (LPDDSURFACEDESC lpDDSD, LPVOID lpContext);
+#endif
+
+/* KJL 11:28:31 9/9/97 - Direct Input prototypes */
+BOOL InitialiseDirectInput(void);
+void ReleaseDirectInput(void);
+BOOL InitialiseDirectKeyboard();
+void DirectReadKeyboard(void);
+void ReleaseDirectKeyboard(void);
+BOOL InitialiseDirectMouse();
+void DirectReadMouse(void);
+void ReleaseDirectMouse(void);
+
+/*
+ Internal
+*/
+#ifdef AVP_DEBUG_VERSION
+int textprint(const char* t, ...);
+#else
+#define textprint(ignore)
+#endif
+
+
+void MakePaletteShades(VGAPALETTEENTRY *vga_palptr, int hue, int pal_shades_per_hue);
+void ConvertToDDPalette(unsigned char* src, unsigned char* dst, int length, int flags);
+int textprintXY(int x, int y, const char* t, ...);
+void LoadSystemFonts(char* fname);
+void DisplayWin95String(int x, int y, unsigned char *buffer);
+void WriteStringToTextBuffer(int x, int y, unsigned char *buffer);
+void FlushTextprintBuffer(void);
+void InitPrintQueue(void);
+void InitJoysticks(void);
+void ReadJoysticks(void);
+int ChangeDisplayModes(HINSTANCE hInst, int nCmd,
+ int NewVideoMode, int NewWindowMode,
+ int NewZBufferMode, int NewRasterisationMode,
+ int NewSoftwareScanDrawMode, int NewDXMemoryMode);
+int DeallocateAllImages(void);
+int MinimizeAllImages(void);
+int RestoreAllImages(void);
+void ConvertDDToInternalPalette(unsigned char* src, unsigned char* dst, int length);
+PROCESSORTYPES ReadProcessorType(void);
+
+/* EXTERNS FOR GLOBALS GO HERE !!!!!! */
+extern DDCAPS direct_draw_caps;
+
+/*
+
+ Jake's image functions
+
+*/
+
+void * CopyD3DTexture(struct imageheader *iheader);
+
+#ifdef MaxImageGroups
+
+ #if (MaxImageGroups > 1)
+
+ void SetCurrentImageGroup(unsigned int group);
+ int DeallocateCurrentImages(void);
+
+ #endif /* MaxImageGroups > 1 */
+
+#endif /* defined(MaxImageGroups) */
+
+
+/*
+ Project callbacks
+*/
+
+void ExitGame(void);
+
+void ProjectSpecificBufferFlipPostProcessing();
+
+void ProjectSpecificItemListPostProcessing();
+
+#if optimiseflip
+void ProcessProjectWhileWaitingToBeFlippable();
+#endif
+
+#ifdef __cplusplus
+};
+#endif
+
+#define PLATFORM_INCLUDED
+
+#endif