; **************************************************************************
; FILE:COMMON.INC
; FUNCTION: COMMON ASSEMBLER INCLUDE FILE
; AUTHOR: SEAN M. KESSLER
;****************************************************************************
INCLUDE ..\COMMON\WINDOWS.INC

LPDWORD TYPEDEF NEAR PTR DWORD
NPDWORD TYPEDEF FAR PTR DWORD
NPBYTE TYPEDEF PTR BYTE

String STRUC
	String@@mnpStr       NPDWORD ?
	String@@mLengthBytes DD ?
String ENDS

Point STRUC
	Point@@x DW ?
	Point@@y DW ?
Point ENDS

PurePalette STRUC
  PurePalette@@mhPalette    HANDLE <>
  PurePalette@@mhOldPalette HANDLE <>
  PurePalette@@mPaletteData PALETTEENTRY 100h DUP (<>)
	PurePalette@@mIsInUse     DW ?
PurePalette ENDS

BitmapData STRUC
  BitmapData@@mhGlobalBitmapData  HANDLE <>
  BitmapData@@mhGlobalBitmapInfo  HANDLE <>
	BitmapData@@mlpBitmapData       LPDWORD ?
	BitmapData@@mlpBitmapInfo       PBITMAPINFO ?
	BitmapData@@mInfoDisposition    DD ?
	BitmapData@@mDataDisposition    DD ?
BitmapData ENDS

Bitmap STRUC
PBitmap TYPEDEF NEAR PTR Bitmap
PPBitmap TYPEDEF NEAR PTR PBitmap
  Bitmap@@mBitmapData       BitmapData <>
  Bitmap@@mFileName         String <>
  Bitmap@@mMaxColors        DW ?
  Bitmap@@mCurrentMode      DD ?
  Bitmap@@mBitmapFileHeader BITMAPFILEHEADER <>
  Bitmap@@mPaletteData      PurePalette <>
  Bitmap@@mBlockSize        DD ?
  Bitmap@@mhFile            HANDLE <>
  Bitmap@@mImageExtent      DD ?
  Bitmap@@mWidth            DD ?
  Bitmap@@mHeight           DD ?
Bitmap ENDS

PureVectorBitmap STRUC
PPureVectorBitmap TYPEDEF FAR PTR PureVectorBitmap
	PureVectorBitmap@@mhGlobalMemPool       DD ?
	PureVectorBitmap@@mhGlobalVectorTable   DD ?
	PureVectorBitmap@@mEntries              DD ?
	PureVectorBitmap@@mlpVectorTable        PPBitmap ?
	PureVectorBitmap@@mlpMemPool            PBitmap ?
PureVectorBitmap ENDS

getBitmapPtr MACRO npPureVector,itemIndex
LOCAL @@boundFail,@@return
	push  edi                                        ; save destination index register
	mov   edi,npPureVector                           ; move npPureVector to edi register
	movzx eax,itemIndex                              ; move itemIndex to eax register
	cmp   eax,[edi].PureVectorBitmap@@mEntries       ; check index boundary
	jge   @@boundFail                                ; handle out of bounds condition
	shl   eax,02h                                    ; multiply eax by sizeof(PTR)
	mov   edi,[edi].PureVectorBitmap@@mlpVectorTable ; dereference vector table to edi
	add   edi,eax                                    ; add in itemIndex
	mov   eax,[edi]                                  ; dereference pointer to eax
	jmp   @@return                                   ; return
@@boundFail:                                       ; boundary error sync address
	xor   eax,eax                                      ; error clears eax register
@@return:                                          ; return sync address
	pop   edi                                        ; restore detination index register
ENDM

