; ************************************************************************** ; 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