3054 lines
77 KiB
Plaintext
3054 lines
77 KiB
Plaintext
;===========================================================================
|
|
;
|
|
; For WOW only
|
|
;
|
|
|
|
;===========================================================================
|
|
;
|
|
; Validation constants
|
|
;
|
|
PS_MAX equ 6
|
|
HS_MAX equ 5
|
|
BS_MAX equ 5
|
|
FW_MAX equ 1000
|
|
OUT_MAX equ 7
|
|
CLIP_MAX equ 2
|
|
QUALITY_MAX equ 2
|
|
DIB_MAX equ 1
|
|
PFILL_MIN equ 1
|
|
PFILL_MAX equ 2
|
|
EFF_MAX equ 1
|
|
OBJ_MIN equ 1
|
|
OBJ_MAX equ 2
|
|
STOCK_MAX equ 16
|
|
RGN_MIN equ 1
|
|
RGN_MAX equ 5
|
|
BK_MIN equ 1
|
|
BK_MAX equ 3 ;SHOULD let TRANSPARENT1 ROP code go through.
|
|
R2_MIN equ 1
|
|
R2_MAX equ 16
|
|
STR_MIN equ 1
|
|
STR_MAX equ 3
|
|
PFILL_MIN equ 1
|
|
PFILL_MAX equ 2
|
|
MM_MIN equ 1
|
|
MM_MAX equ 8
|
|
DIB_MAX equ 1
|
|
PR_MAX equ 4
|
|
RM_MAX equ 2
|
|
DIB_RGB_COLORS equ 0
|
|
CBM_INIT equ 4
|
|
BI_RGB equ 0
|
|
|
|
TA_VALID equ 0001fh
|
|
GLYPH_VALID equ 00003h
|
|
MAPFLG_VALID_L equ 00001h
|
|
MAPFLG_VALID_H equ 00000h
|
|
CBM_VALID_L equ 00004h
|
|
CBM_VALID_H equ 00000h
|
|
ETO_VALID equ 00007h
|
|
PC_VALID equ 00007h
|
|
|
|
CCHDEVICENAME equ 32
|
|
|
|
|
|
|
|
;special error codes
|
|
|
|
SP_ERROR equ -1
|
|
|
|
|
|
;============================================================================
|
|
;
|
|
; Special ATM hackery (See ATM HACK comments in dcman1.asm)
|
|
;
|
|
;ExternFP <LoadLibrary> TEMPLY !!!!!!!!!!! ChandanC
|
|
;ExternFP <FreeLibrary> TEMPLY !!!!!!!!!!! ChandanC
|
|
;ExternFP <GetProcAddress> TEMPLY !!!!!!!!!!! ChandanC
|
|
;
|
|
; Macro to set up stubs required for ATM's GDI patching code
|
|
;
|
|
ATM_LPFN macro gdifunc, kernfunc
|
|
IFNDEF WOW
|
|
db 09ah ; call far instruction
|
|
public gdifunc&kernfunc
|
|
gdifunc&kernfunc:
|
|
dd kernfunc
|
|
ENDIF
|
|
endm
|
|
|
|
;
|
|
; Argument types
|
|
;
|
|
IFNDEF WOW
|
|
ExternFP <IsGDIObject>
|
|
ExternFP <IsValidMetaFile>
|
|
ENDIF
|
|
|
|
P_LPSIZE equ <P_LPPOINT>
|
|
P_LPSIZE0 equ <P_LPPOINT0>
|
|
|
|
;
|
|
; Generate a GDI object validation macro.
|
|
;
|
|
; If nullok is 1, allow NULL.
|
|
; min & max are the allowed OBJ_* range.
|
|
; except, if specified, is an OBJ_* value within the range to reject.
|
|
;
|
|
_GenHGDI macro name,func
|
|
P_&name ¯o hObj,opts
|
|
_GenParm <hObj>,2,<opts>
|
|
if VLgen
|
|
IFNDEF WOW
|
|
mov bx,_P_&&hObj
|
|
lcall V&name
|
|
_gensub name
|
|
_gensub VGOT
|
|
ENDIF
|
|
endif
|
|
&endm
|
|
|
|
P_&name&0 ¯o hObj,opts
|
|
_GenParm <hObj>,2,<opts>
|
|
if VLgen
|
|
IFNDEF WOW
|
|
mov bx,_P_&&hObj
|
|
lcall V&name&0
|
|
_gensub name
|
|
_gensub VGOT
|
|
ENDIF
|
|
endif
|
|
&endm
|
|
endm
|
|
|
|
_GenHGDI <HGDIOBJ>
|
|
_GenHGDI <HPEN>
|
|
_GenHGDI <HBRUSH>
|
|
_GenHGDI <HFONT>
|
|
_GenHGDI <HPALETTE>
|
|
_GenHGDI <HBITMAP>
|
|
_GenHGDI <HRGN>
|
|
|
|
; HDC variants: HDC - Any kind of DC except a metafile DC
|
|
|
|
_GenHGDI <HDC>
|
|
|
|
; Anything including a metafile DC
|
|
|
|
_GenHGDI <HDCMETA>
|
|
|
|
P_HDCNOTMEM equ <P_HDCMETA>
|
|
|
|
; output-only DC - metafiles ok but no ICs allowed
|
|
|
|
_GenHGDI <HDCNOIC>
|
|
|
|
; output-only DC - neither metafiles nor ICs allowed
|
|
|
|
_GenHGDI <HDCNOICNOMETA>
|
|
|
|
; GetObject(): Pen, brush, font, palette, or bitmap.
|
|
;
|
|
_GenHGDI <HGDIOBJGET>
|
|
|
|
; UnrealizeObject(): Brush or palette
|
|
;
|
|
_GenHGDI <HGDIOBJUNR>
|
|
|
|
; SelectObject(): pen, brush, font, bitmap, region (no palette)
|
|
;
|
|
_GenHGDI <HGDIOBJSEL>
|
|
|
|
; Metafile handle
|
|
;
|
|
P_HMETAFILE macro hmf,opts
|
|
_GenParm <hmf>,2,<opts>
|
|
if VLgen
|
|
IFNDEF WOW
|
|
mov ax,_P_&hmf
|
|
lcall VHMETAFILE
|
|
_gensub VHMETAFILE
|
|
ENDIF
|
|
endif
|
|
endm
|
|
|
|
_GenHGDIX macro name,errtyp,lseg,min,max,except
|
|
local badobj
|
|
local objok
|
|
local trap
|
|
|
|
IFNDEF WOW
|
|
public V&name&0&lseg
|
|
V&name&0&lseg:
|
|
or bx,bx
|
|
jz objok
|
|
|
|
public V&name&lseg
|
|
V&name&lseg:
|
|
lcall VGetObjType
|
|
ifnb <except>
|
|
cmp ax,except
|
|
jz badobj
|
|
endif
|
|
ife min-max
|
|
cmp ax,min
|
|
jne badobj
|
|
errnz $-objok
|
|
else
|
|
cmp ax,min
|
|
jb badobj
|
|
cmp ax,max
|
|
ja badobj
|
|
endif
|
|
objok:
|
|
ret
|
|
badobj:
|
|
mov ax,cx
|
|
mov bx,ERR_BAD_&errtyp
|
|
ljmp Inval_Param_
|
|
ENDIF
|
|
endm ; _GenHGDIX
|
|
|
|
;
|
|
; Macro that gets expanded in each LAYER_EXPAND invocation. Includes common
|
|
; subroutines for parameter validation.
|
|
;
|
|
EXTRA_EXPAND macro lseg
|
|
|
|
ifdef genHGDIOBJ&lseg
|
|
_GenHGDIX <HGDIOBJ>,GDI_OBJECT,lseg,OBJ_PEN,OBJ_METAFILE ; DeleteObject: any kind of object
|
|
endif
|
|
|
|
ifdef genHPEN&lseg
|
|
_GenHGDIX <HPEN>,lseg,HPEN,OBJ_PEN,OBJ_PEN
|
|
endif
|
|
|
|
ifdef genHBRUSH&lseg
|
|
_GenHGDIX <HBRUSH>,HBRUSH,lseg,OBJ_BRUSH,OBJ_BRUSH
|
|
endif
|
|
|
|
ifdef genHFONT&lseg
|
|
_GenHGDIX <HFONT>,HFONT,lseg,OBJ_FONT,OBJ_FONT
|
|
endif
|
|
|
|
ifdef genHPALETTE&lseg
|
|
_GenHGDIX <HPALETTE>,HPALETTE,lseg,OBJ_PALETTE,OBJ_PALETTE
|
|
endif
|
|
|
|
ifdef genHBITMAP&lseg
|
|
_GenHGDIX <HBITMAP>,HBITMAP,lseg,OBJ_BITMAP,OBJ_BITMAP
|
|
endif
|
|
|
|
ifdef genHRGN&lseg
|
|
_GenHGDIX <HRGN>,HRGN,lseg,OBJ_RGN,OBJ_RGN
|
|
endif
|
|
|
|
; GetObject(): Pen, brush, font, palette, or bitmap.
|
|
;
|
|
ifdef genHGDIOBJGET&lseg
|
|
_GenHGDIX <HGDIOBJGET>,GDI_OBJECT,lseg,OBJ_PEN,OBJ_BITMAP
|
|
endif
|
|
|
|
; UnrealizeObject(): Brush or palette
|
|
;
|
|
ifdef genHGDIOBJUNR&lseg
|
|
_GenHGDIX <HGDIOBJUNR>,GDI_OBJECT,lseg,OBJ_BRUSH,OBJ_PALETTE,OBJ_FONT
|
|
endif
|
|
; SelectObject(): pen, brush, font, bitmap, region (no palette)
|
|
;
|
|
ifdef genHGDIOBJSEL&lseg
|
|
_GenHGDIX <HGDIOBJSEL>,GDI_OBJECT,lseg,OBJ_PEN,OBJ_RGN,OBJ_PALETTE
|
|
endif
|
|
|
|
; HDC variants: HDC - Any kind of DC except a metafile DC
|
|
|
|
ifdef genHDC&lseg
|
|
_GenHGDIX <HDC>,HDC,lseg,OBJ_DC,OBJ_METADC
|
|
endif
|
|
|
|
; Anything including a metafile DC
|
|
|
|
ifdef genHDCMETA&lseg
|
|
_GenHGDIX <HDCMETA>,HDC,lseg,OBJ_DC,OBJ_METAFILE
|
|
endif
|
|
|
|
; output-only DC - metafiles ok but no ICs allowed
|
|
|
|
ifdef genHDCNOIC&lseg
|
|
_GenHGDIX <HDCNOIC>,HDC,lseg,OBJ_DC,OBJ_METAFILE,OBJ_IC
|
|
endif
|
|
|
|
; output-only DC - neither metafiles nor ICs allowed
|
|
|
|
ifdef genHDCNOICNOMETA&lseg
|
|
_GenHGDIX <HDCNOICNOMETA>,HDC,lseg,OBJ_DC,OBJ_DC
|
|
endif
|
|
|
|
IFNDEF WOW
|
|
ifdef genVGOT&lseg
|
|
|
|
public VGetObjType&lseg
|
|
VGetObjType&lseg:
|
|
mov cx,bx
|
|
jcxz VGOTbad&lseg
|
|
beg_fault_trap VGOTtrap&lseg
|
|
mov ax,_DATA
|
|
mov es,ax
|
|
mov bx,es:[bx]
|
|
mov ax,es:[bx].ilObjType
|
|
end_fault_trap
|
|
and ah,high(not OBJ_FLAGS)
|
|
errnz low(Stock)
|
|
ret
|
|
|
|
VGOTtrap&lseg:
|
|
fault_fix_stack
|
|
VGOTbad&lseg:
|
|
xor ax,ax
|
|
ret
|
|
|
|
endif ; genVGOT&lseg
|
|
|
|
|
|
ifdef genVHMETAFILE&lseg
|
|
|
|
public VHMETAFILE&lseg
|
|
VHMETAFILE&lseg:
|
|
push ax
|
|
push ax
|
|
call IsValidMetaFile
|
|
or ax,ax
|
|
pop ax
|
|
jz @F
|
|
ret
|
|
@@:
|
|
mov bx,ERR_BAD_HMETAFILE
|
|
jmp short Inval_Param_&lseg
|
|
|
|
endif ; genVHMETAFILE&lseg
|
|
ENDIF
|
|
|
|
endm ; EXTRA_EXPAND
|
|
|
|
P_ROP equ <P_DWORD>
|
|
P_COLORREF equ <P_DWORD>
|
|
|
|
_GenLP <P_CLPLOGPALETTE>,<CLP>,1
|
|
_GenLP <P_CLPBITMAP>,<CLP>,1
|
|
_GenLP <P_LPHANDLETABLE0>,<LP0>,2
|
|
|
|
_GenLP <P_CLPBITMAPINFOHEADER>,<CLP>,1
|
|
|
|
P_CLPSTRHRSRC equ <P_CLPSTRATOM>
|
|
|
|
_GenLP <P_CLPDOCINFO>,<CLP>,1
|
|
|
|
P_CLPFACENAME equ <P_CLPSTR>
|
|
P_CLPFACENAME0 equ <P_CLPSTR0>
|
|
|
|
P_LPFNABORT0 equ <P_LPFN0>
|
|
P_LPFNMENUM equ <P_LPFN>
|
|
P_LPFNOENUM equ <P_LPFN>
|
|
P_LPFNFENUM equ <P_LPFN>
|
|
P_LPFNLENUM equ <P_LPFN>
|
|
|
|
P_intN0 equ <P_WORDMBNZ>
|
|
P_DEVCAP equ <P_int>
|
|
|
|
P_PITCHFAMILY equ <P_BYTE>
|
|
|
|
P_LPPOINTBUFFER macro p, c, opts
|
|
_DefParm <p>,4,<opts>
|
|
_DefParm <c>,2,<opts>
|
|
if VLgen
|
|
_FlsFrame
|
|
mov ax,_P_&p
|
|
mov cx,_P_&p+2
|
|
mov bx,_P_&c
|
|
shl bx,2
|
|
errnz VLcbsPOINT-4
|
|
lcall LP
|
|
_gensub LP
|
|
endif
|
|
endm
|
|
|
|
P_CLPPOINTBUFFER macro lptr, c, opts
|
|
_DefParm <lptr>,4,<opts>
|
|
_DefParm <c>,2,<opts>
|
|
if VLgen
|
|
_FlsFrame
|
|
mov ax,_P_&lptr
|
|
mov cx,_P_&lptr+2
|
|
mov bx,_P_&c
|
|
shl bx,2
|
|
errnz VLcbsPOINT-4
|
|
lcall CLP
|
|
_gensub LP
|
|
endif
|
|
endm
|
|
|
|
STRUCT <PALETTEENTRY>
|
|
F_BYTE peRed
|
|
F_BYTE peGreen
|
|
F_BYTE peBlue
|
|
F_BFLAGS peFlags, PC_VALID
|
|
ENDSTRUCT
|
|
|
|
P_LPPALENTRYBUFFER macro c, p, opts
|
|
_DefParm <c>,2,<opts>
|
|
_DefParm <p>,4,<opts>
|
|
if VLgen
|
|
_FlsFrame
|
|
mov ax,_P_&p
|
|
mov cx,_P_&p+2
|
|
mov bx,_P_&c
|
|
shl bx,2
|
|
errnz VLcbsPALETTEENTRY-4
|
|
lcall LP
|
|
_gensub LP
|
|
endif
|
|
endm
|
|
|
|
P_CLPPALENTRYBUFFER macro c, lp, opts
|
|
_DefParm <c>,2,<opts>
|
|
_DefParm <lp>,4,<opts>
|
|
if VLgen
|
|
_FlsFrame
|
|
mov ax,_P_&lp
|
|
mov cx,_P_&lp+2
|
|
mov bx,_P_&c
|
|
shl bx,2
|
|
errnz VLcbsPALETTEENTRY-4
|
|
lcall CLP
|
|
_gensub LP
|
|
endif
|
|
endm
|
|
;
|
|
; lppt - pointer to array of points: size = sum(lpcpt).
|
|
; lpcpt - pointer to array of counts of points
|
|
; ccpt - number of point counts in *lpcpt.
|
|
;
|
|
P_POLYPOLYPOINTS macro lppt, lpcpt, ccpt, opts
|
|
P_LPPOINT <lppt>,<opts>
|
|
P_LPINT <lpcpt>,<opts>
|
|
P_int <ccpt>,<opts>
|
|
endm
|
|
|
|
ifdef WOW
|
|
P_POLYPOLYLARGEPOINTS macro lppt, lpcpt, ccpt, opts
|
|
P_LPLARGEPOINT <lppt>,<opts>
|
|
P_LPDWORD <lpcpt>,<opts>
|
|
P_DWORD <ccpt>,<opts>
|
|
endm
|
|
endif
|
|
|
|
P_XY1XY2 macro x1,y1,x2,y2, opts
|
|
P_int <x1>,<opts>
|
|
P_int <y1>,<opts>
|
|
P_int <x2>,<opts>
|
|
P_int <y2>,<opts>
|
|
endm
|
|
|
|
P_LPBUFFERDW macro cb, lp, opts
|
|
P_DWORD <cb>,<opts>
|
|
P_LPBYTE <lp>,<opts>
|
|
endm
|
|
|
|
P_LPBUFFERDW0 macro cb, lp, opts
|
|
P_DWORD <cb>,<opts>
|
|
P_LPBYTE0 <lp>,<opts>
|
|
endm
|
|
|
|
P_CLPBUFFERDW macro cb, lp, opts
|
|
P_DWORD <cb>,<opts>
|
|
P_CLPBYTE <lp>,<opts>
|
|
endm
|
|
|
|
P_LPBUFFERX macro cb, pb, opts
|
|
P_int <cb>,<opts>
|
|
P_LPBYTE <pb>,<opts>
|
|
endm
|
|
|
|
ValidateHugeLP macro cch, lp, r, null
|
|
local exit
|
|
|
|
ifnb <null>
|
|
|
|
mov ax,lp
|
|
or ax,lp+2
|
|
jz exit
|
|
endif
|
|
|
|
push lp+2
|
|
push lp
|
|
push cch+2
|
|
push cch
|
|
call &r
|
|
or ax,ax
|
|
jz exit
|
|
mov cx, lp+2
|
|
mov ax, lp
|
|
mov bx,ERR_BAD_PTR
|
|
lcall Inval_Param_
|
|
exit:
|
|
endm
|
|
|
|
;----------------------------------------------------------------------------;
|
|
; This macro is used to validate the buffer length for the two APIs
|
|
; GetCharWidth and GetABCWidths. The 'size' parameter is not a part of the
|
|
; API. It is the size of each entry in the buffer. The number of entries are
|
|
; dictated by the character range passed in.
|
|
|
|
P_LPRWBUFFER macro chFirst, chLast, lpBuffer, size, opts
|
|
local exit
|
|
|
|
_GenParm <chFirst>,2,<opts>
|
|
_GenParm <chLast>,2,<opts>
|
|
_GenParm <lpBuffer>,4,<opts>
|
|
|
|
if VLgen
|
|
_FlsFrame
|
|
|
|
;; first validate that the character range is not inverted.
|
|
|
|
mov ax,_P_&chLast ;;last character in range
|
|
cmp ax,_P_&chFirst ;;should not be < than first character
|
|
jae @F ;;range is proper
|
|
|
|
;; character range is not valid.
|
|
|
|
mov bx,ERR_BAD_VALUE ;;invalid parameter error.
|
|
lcall Inval_Param_
|
|
jmp exit
|
|
|
|
@@:
|
|
|
|
;; the size of the buffer should atleast be (chLast-chFirst+1)*size
|
|
|
|
sub ax,_P_&chFirst
|
|
inc ax ;;no of entries
|
|
mov bx,size ;;size of each entry
|
|
mul bx
|
|
mov bx,ax ;;total size (ignore DX)
|
|
mov ax,_P_&lpBuffer
|
|
mov cx,_P_&lpBuffer+2
|
|
lcall LP
|
|
_gensub LP
|
|
exit:
|
|
endif
|
|
endm
|
|
|
|
;----------------------------------------------------------------------------;
|
|
P_CLPRECTBITSINFOBUFFER macro cyDst, xSrc, ySrc, nStartScan,nNumScans, lpBits, lpBitsInfo, wUsage, opts
|
|
P_VALIDATEBITSINFOBUFFER DIB_DIBTODEV, cyDst, xSrc, ySrc, nStartScan, nNumScans, lpBits, lpBitsInfo, wUsage, DIB_PTR_CLP, DIB_PTR_CLP, opts
|
|
endm
|
|
;----------------------------------------------------------------------------;
|
|
P_CLPBITSINFOBUFFER macro cscan, lpBits, lpBitsInfo, wUsage, opts
|
|
P_VALIDATEBITSINFOBUFFER DIB_PART_DIB, 0, 0, 0, 0, cscans, lpBits, lpBitsInfo, wUsage, DIB_PTR_CLP, DIB_PTR_CLP, opts
|
|
endm
|
|
;----------------------------------------------------------------------------;
|
|
P_LPBITSINFOBUFFER macro cScans, lpBits, lpBitsInfo, wUsage, opts
|
|
P_VALIDATEBITSINFOBUFFER DIB_PART_DIB, 0, 0, 0, 0, cscans, lpBits, lpBitsInfo, wUsage, DIB_PTR_LP, DIB_PTR_LP, opts
|
|
endm
|
|
|
|
;----------------------------------------------------------------------------;
|
|
;NOTE: It is assumed that this macro is only called from GetDIBits. The flag
|
|
;DIB_PTR_GETDIBITS is a special one which tells the ValidateDIBHeader routine
|
|
;to ignore the biClrUsed field.
|
|
|
|
P_LPBITSINFOBUFFER0 macro cScans, lpBits, lpBitsInfo, wUsage, opts
|
|
P_VALIDATEBITSINFOBUFFER DIB_PART_DIB, 0, 0, 0, 0, cscans, lpBits, lpBitsInfo, wUsage, DIB_PTR_LP0, DIB_PTR_GETDIBITS, opts
|
|
endm
|
|
|
|
;----------------------------------------------------------------------------;
|
|
P_CFULLLPBITSINFOBUFFER macro lpBits, lpBitsInfo, wUsage, opts
|
|
P_VALIDATEBITSINFOBUFFER DIB_FULL_DIB, 0, 0, 0, 0, 0, lpBits, lpBitsInfo, wUsage, DIB_PTR_CLP, DIB_PTR_CLP, opts
|
|
endm
|
|
|
|
;----------------------------------------------------------------------------;
|
|
P_GHPACKEDDIB macro hDIB, wUsage, opts
|
|
local exit
|
|
local errexit
|
|
|
|
;; hDIB is a global handle to a apacked DIB.
|
|
|
|
_GenParm <hDIB>,2,<opts>
|
|
_GenParm <wUsage>,2,<opts>
|
|
|
|
if VLgen
|
|
|
|
;; first validate the handle itself.
|
|
IFNDEF WOW
|
|
mov ax,_P_&hDIB
|
|
lcall GHANDLE
|
|
_gensub GHANDLE
|
|
|
|
ENDIF
|
|
;; validate wUsage
|
|
|
|
mov ax,_P_&wUsage
|
|
cmp ax,DIB_MAX
|
|
jbe @F ;; unsigned comparison to catch < 0.
|
|
mov bx,ERR_BAD_VALUE
|
|
lcall Inval_Param_
|
|
jmp exit
|
|
@@:
|
|
|
|
push si
|
|
push di ;;save
|
|
|
|
;; validate the header.
|
|
|
|
mov dx,_P_&wUsage
|
|
xor ax,ax
|
|
mov cx,_P_&hDIB ;;CX:AX has a pointer to the DIB
|
|
mov di, DIB_VALIDATE_COLOR + DIB_PTR_CLP
|
|
|
|
call ValidateDIBHeader
|
|
or ax,ax
|
|
jz @f ;;valid header
|
|
pop di
|
|
pop si ;;restore
|
|
mov bx,ERR_BAD_PTR
|
|
lcall Inval_Param_
|
|
jmp exit
|
|
|
|
@@:
|
|
|
|
;; the header has been validated. DI:SI returns the pointer past the end of
|
|
;; the DIB header and the color table. For a packed DIB this is the start of
|
|
;; the bits.
|
|
|
|
mov es,_P_&hDIB
|
|
xor bx,bx ;;es:bx-> header, di:si -> bits
|
|
mov cx, DIB_FULL_DIB+DIB_PTR_CLP
|
|
|
|
call ValidateDIBSize
|
|
pop di
|
|
pop si
|
|
or ax,ax
|
|
jz exit ;;valid size
|
|
mov bx,ERR_BAD_PTR
|
|
lcall Inval_Param_
|
|
exit:
|
|
endif
|
|
endm
|
|
;----------------------------------------------------------------------------;
|
|
P_CLPBITMAPINFOHEADER macro lpBi, opts
|
|
local exit
|
|
|
|
;; lpBi - pointer to bitmap info header which does not have a color table
|
|
|
|
_GenParm <lpBi>,4,<opts>
|
|
|
|
if VLgen
|
|
|
|
push si
|
|
push di
|
|
mov ax,word ptr _P_&lpBi
|
|
mov cx,word ptr _P_&lpBi+2
|
|
mov di, DIB_NO_COLOR + DIB_PTR_CLP
|
|
|
|
call ValidateDIBHeader
|
|
pop di
|
|
pop si
|
|
or ax,ax
|
|
jz exit
|
|
mov bx,ERR_BAD_PTR
|
|
lcall Inval_Param_
|
|
exit:
|
|
|
|
endif
|
|
endm
|
|
;----------------------------------------------------------------------------;
|
|
|
|
P_CLPDIBITMAP0 macro dwUsage, lpInitBits, lpInitInfo, wUsage, opts
|
|
local validate_dib
|
|
local no_init
|
|
local exit
|
|
local flags_ok
|
|
|
|
_DefParm <dwUsage>,4,<opts>
|
|
_DefParm <lpInitBits>,4,<opts>
|
|
_DefParm <lpInitInfo>,4,<opts>
|
|
_DefParm <wUsage>,2,<opts>
|
|
|
|
if VLgen
|
|
_FlsFrame
|
|
|
|
ifdef DEBUG
|
|
mov ax,_P_&dwUsage
|
|
mov cx,_P_&dwUsage+2
|
|
test ax,not(CBM_VALID_L)
|
|
jnz @F
|
|
test cx,not(CBM_VALID_H)
|
|
jz flags_ok
|
|
@@:
|
|
mov bx,ERR_BAD_DFLAGS
|
|
lcall Inval_Param_
|
|
flags_ok:
|
|
|
|
endif ;DEBUG
|
|
|
|
;; the rest of the validation depends on the value of dwUsage.
|
|
|
|
cmp word ptr _P_&dwUsage+2,0
|
|
jne no_init
|
|
mov ax, word ptr _P_&dwUsage
|
|
cmp ax,CBM_INIT
|
|
je validate_dib
|
|
|
|
no_init:
|
|
mov ax,_P_&lpInitBits
|
|
mov cx,_P_&lpInitBits+2
|
|
xor bx,bx
|
|
lcall CLP0
|
|
_gensub LP
|
|
|
|
mov ax,_P_&lpInitInfo
|
|
mov cx,_P_&lpInitInfo+2
|
|
xor bx,bx
|
|
lcall CLP0
|
|
|
|
mov ax,_P_&wUsage
|
|
cmp ax,DIB_MAX
|
|
jbe @F ;; unsigned comparison to catch < 0.
|
|
mov bx,ERR_BAD_VALUE
|
|
lcall Inval_Param_
|
|
@@:
|
|
jmp exit
|
|
|
|
validate_dib:
|
|
|
|
;; validate the bitmap info header first. Validate the color table size too.
|
|
|
|
push si
|
|
push di
|
|
mov ax,word ptr _P_&lpInitInfo
|
|
mov cx,word ptr _P_&lpInitInfo+2
|
|
mov dx,_P_&wUsage
|
|
mov di, DIB_VALIDATE_COLOR + DIB_PTR_CLP
|
|
|
|
call ValidateDIBHeader
|
|
or ax,ax
|
|
jz @f
|
|
pop di
|
|
pop si
|
|
mov bx,ERR_BAD_PTR
|
|
lcall Inval_Param_
|
|
jmp exit
|
|
@@:
|
|
|
|
;; now validate the size of the bitsbuffer. Use complete height
|
|
|
|
mov si, word ptr _P_&lpInitBits
|
|
mov di, word ptr _P_&lpInitBits+2
|
|
les bx,_P_&lpInitInfo
|
|
mov cx, DIB_FULL_DIB+DIB_PTR_CLP
|
|
|
|
call ValidateDIBSize
|
|
pop di
|
|
pop si
|
|
or ax,ax
|
|
jz exit
|
|
mov bx,ERR_BAD_PTR
|
|
lcall Inval_Param_
|
|
exit:
|
|
endif
|
|
endm
|
|
;----------------------------------------------------------------------------;
|
|
|
|
P_CLPBITBUFFER0 macro cx, cy, cPlanes, cBitsPixel, lpBits, opts
|
|
P_int <cx>,<opts>
|
|
P_int <cy>,<opts>
|
|
P_int <cPlanes>,<opts>
|
|
P_int <cBitsPixel>,<opts>
|
|
P_CLPBYTE0 <lpBits>,<opts>
|
|
endm
|
|
|
|
P_CLPETOBUF macro lpsz, cch, lpdx, opts
|
|
P_CLPBUFFER0 <lpsz>,<cch>,<opts>
|
|
P_CLPINT0 <lpdx>,<opts>
|
|
endm
|
|
|
|
P_TEXTEXTEX macro lpsz, cch, nMaxExt, lpnFit, lpDx, opts
|
|
P_CLPBUFFER <lpsz>,<cch>,<opts>
|
|
P_int <nMaxExt>,<opts>
|
|
P_LPINT0 <lpnFit>,<opts>
|
|
P_LPINT0 <lpDX>,<opts>
|
|
endm
|
|
;
|
|
; GDI structures
|
|
;
|
|
_DefSimpleF F_LBCOLOR,4
|
|
_DefSimpleF F_CLPBITS,4
|
|
_DefSimpleF F_DWSIZE,4
|
|
_DefSimpleF F_COMPRESS,4
|
|
_DefSimpleF F_DIBSIZE0,4
|
|
|
|
_DefSimpleF F_HMF,2
|
|
_DefSimpleF F_VALUE,2
|
|
_DefSimpleF F_WMBZ,2
|
|
_DefSimpleF F_WSIZE,2
|
|
_DefSimpleF F_CONST,2
|
|
_DefSimpleF F_BITCOUNT,2
|
|
_DefSimpleF F_RVALUE,2
|
|
_DefSimpleF F_short,2
|
|
_DefSimpleF F_VERSION,2
|
|
|
|
_DefSimpleF F_PITCHFAMILY,1
|
|
_DefSimpleF F_BVALUE,1
|
|
_DefSimpleF F_BFLAGS,1
|
|
|
|
STRUCT <RGBQUAD>
|
|
F_BYTE rgbBlue
|
|
F_BYTE rgbGreen
|
|
F_BYTE rgbRed
|
|
F_BYTE rgbReserved
|
|
ENDSTRUCT
|
|
|
|
STRUCT <RGBTRIPLE>
|
|
F_BYTE rgbtBlue
|
|
F_BYTE rgbtGreen
|
|
F_BYTE rgbtRed
|
|
ENDSTRUCT
|
|
|
|
STRUCT <LOGBRUSH>
|
|
F_VALUE lbStyle, BS_MAX
|
|
F_LBCOLOR lbColor
|
|
F_VALUE lbHatch, HS_MAX
|
|
ENDSTRUCT
|
|
|
|
_GenLP <P_CLPLOGBRUSH>,<CLP>,%VLcbsLOGBRUSH
|
|
_GenLP <P_CLPLOGBRUSH0>,<CLP0>,%VLcbsLOGBRUSH
|
|
_GenLP <P_LPLOGBRUSH>,<LP>,%VLcbsLOGBRUSH
|
|
_GenLP <P_LPLOGBRUSH0>,<LP0>,%VLcbsLOGBRUSH
|
|
|
|
STRUCT <LOGFONT>
|
|
F_int lfHeight
|
|
F_int lfWidth
|
|
F_int lfEscapement
|
|
F_int lfOrientation
|
|
F_VALUE lfWeight, FW_MAX
|
|
F_BYTE lfItalic
|
|
F_BYTE lfUnderline
|
|
F_BYTE lfStrikeOut
|
|
F_BYTE lfCharSet
|
|
F_BVALUE lfOutPrecision, OUT_MAX
|
|
F_BVALUE lfClipPrecision, CLIP_MAX
|
|
F_BVALUE lfQuality, QUALITY_MAX
|
|
F_PITCHFAMILY lfPitchAndFamily
|
|
F_BYTE lfFaceName ;var-length field
|
|
ENDSTRUCT
|
|
|
|
_GenLP <P_CLPLOGFONT>,<CLP>,%VLcbsLOGFONT
|
|
_GenLP <P_CLPLOGFONT0>,<CLP0>,%VLcbsLOGFONT
|
|
_GenLP <P_LPLOGFONT>,<LP>,%VLcbsLOGFONT
|
|
_GenLP <P_LPLOGFONT0>,<LP0>,%VLcbsLOGFONT
|
|
|
|
STRUCT <LOGPEN>
|
|
F_VALUE lopnStyle, PS_MAX
|
|
F_POINT lopnWidth
|
|
F_DWORD lopnColor
|
|
ENDSTRUCT
|
|
|
|
_GenLP <P_CLPLOGPEN>,<CLP>,%VLcbsLOGPEN
|
|
_GenLP <P_CLPLOGPEN0>,<CLP0>,%VLcbsLOGPEN
|
|
_GenLP <P_LPLOGPEN>,<LP>,%VLcbsLOGPEN
|
|
_GenLP <P_LPLOGPEN0>,<LP0>,%VLcbsLOGPEN
|
|
|
|
STRUCT <METAFILEPICT>
|
|
F_RVALUE nMapMode, MM_MIN, MM_MAX
|
|
F_int xExt
|
|
F_int yExt
|
|
F_HMF hMF
|
|
ENDSTRUCT
|
|
|
|
_GenLP <P_CLPMETAFILEPICT>,<CLP>,%VLcbsMETAFILEPICT
|
|
_GenLP <P_CLPMETAFILEPICT0>,<CLP0>,%VLcbsMETAFILEPICT
|
|
_GenLP <P_LPMETAFILEPICT>,<LP>,%VLcbsMETAFILEPICT
|
|
_GenLP <P_LPMETAFILEPICT0>,<LP0>,%VLcbsMETAFILEPICT
|
|
|
|
STRUCT <TEXTMETRIC> ;currently used only for output
|
|
F_int tmHeight
|
|
F_int tmAscent
|
|
F_int tmDescent
|
|
F_int tmInternalLeading
|
|
F_int tmExternalLeading
|
|
F_int tmAveCharWidth
|
|
F_int tmMaxCharWidth
|
|
F_int tmWeight
|
|
F_BYTE tmItalic
|
|
F_BYTE tmUnderlined
|
|
F_BYTE tmStruckOut
|
|
F_BYTE tmFirstChar
|
|
F_BYTE tmLastChar
|
|
F_BYTE tmDefaultChar
|
|
F_BYTE tmBreakChar
|
|
F_BYTE tmPitchAndFamily
|
|
F_BYTE tmCharSet
|
|
F_int tmOverhang
|
|
F_int tmDigitizedAspectX
|
|
F_int tmDigitizedAspectY
|
|
ENDSTRUCT
|
|
|
|
_GenLP <P_CLPTEXTMETRIC>,<CLP>,%VLcbsTEXTMETRIC
|
|
_GenLP <P_CLPTEXTMETRIC0>,<CLP0>,%VLcbsTEXTMETRIC
|
|
_GenLP <P_LPTEXTMETRIC>,<LP>,%VLcbsTEXTMETRIC
|
|
_GenLP <P_LPTEXTMETRIC0>,<LP0>,%VLcbsTEXTMETRIC
|
|
|
|
; OutlineTextMetrics return buffer
|
|
;
|
|
P_LPETM0 macro cch, lpch, opts
|
|
|
|
_DefParm <cch>,2,<opts>
|
|
_DefParm <lpch>,4,<opts>
|
|
|
|
if VLgen
|
|
_FlsFrame
|
|
mov ax,_P_&lpch
|
|
mov cx,_P_&lpch+2
|
|
mov bx,_P_&cch
|
|
lcall LP0
|
|
_gensub LP
|
|
endif
|
|
endm
|
|
|
|
; GetGlyphOutline return buffer.
|
|
;
|
|
|
|
P_LPGGO0 macro cch, lpch, opts
|
|
|
|
_DefParm <cch>,4,<opts>
|
|
_DefParm <lpch>,4,<opts>
|
|
|
|
if VLgen
|
|
_FlsFrame
|
|
|
|
;; The buffer should be atleast of the given size.
|
|
|
|
ValidateHugeLP _P_&cch, _P_&lpch, IsBadHugeWritePtr, NULL
|
|
|
|
endif
|
|
endm
|
|
|
|
|
|
; GetFontData return buffer
|
|
;
|
|
|
|
P_LPFDATA0 macro lpch, cch, opts
|
|
|
|
_DefParm <lpch>,4,<opts>
|
|
_DefParm <cch>,4,<opts>
|
|
|
|
if VLgen
|
|
_FlsFrame
|
|
|
|
ValidateHugeLP _P_&cch, _P_&lpch, IsBadHugeWritePtr, NULL
|
|
|
|
endif
|
|
endm
|
|
|
|
;---------------------------------------------------------------------------;
|
|
; hugw pointer validation routine.
|
|
|
|
|
|
STRUCT <GLYPHMETRICS> ;only used for output
|
|
F_WORD gmBlackBoxX
|
|
F_WORD gmBlackBoxY
|
|
F_POINT gmptGlyphOrigin
|
|
F_short gmCellIncX
|
|
F_short gmCellIncY
|
|
ENDSTRUCT
|
|
|
|
_GenLP <P_CLPGLYPHMETRICS>,<CLP>,%VLcbsGLYPHMETRICS
|
|
_GenLP <P_CLPGLYPHMETRICS0>,<CLP0>,%VLcbsGLYPHMETRICS
|
|
_GenLP <P_LPGLYPHMETRICS>,<LP>,%VLcbsGLYPHMETRICS
|
|
_GenLP <P_LPGLYPHMETRICS0>,<LP0>,%VLcbsGLYPHMETRICS
|
|
|
|
STRUCT METARECORD
|
|
F_DWORD rdSize
|
|
F_WORD rdFunction
|
|
F_WORD rdParm ;var. length field
|
|
ENDSTRUCT
|
|
|
|
_GenLP <P_CLPMETARECORD>,<CLP>,%VLcbsMETARECORD
|
|
_GenLP <P_CLPMETARECORD>,<CLP0>,%VLcbsMETARECORD
|
|
_GenLP <P_LPMETARECORD>,<LP>,%VLcbsMETARECORD
|
|
_GenLP <P_LPMETARECORD>,<LP0>,%VLcbsMETARECORD
|
|
|
|
;-------------------------------
|
|
; special-case macro definitions
|
|
|
|
|
|
STRUCT <BITMAP>
|
|
F_intMBZ bmType
|
|
F_int bmWidth
|
|
F_int bmHeight
|
|
F_int bmWidthBytes
|
|
F_BYTE bmPlanes
|
|
F_BYTE bmBitsPixel
|
|
F_CLPBITS bmBits
|
|
ENDSTRUCT
|
|
|
|
P_CLPBITMAP macro lp, opts
|
|
_GenParm <lp>,4,<opts>
|
|
if VLgen
|
|
mov ax,_P_&lp
|
|
mov cx,_P_&lp+2
|
|
mov bx,VLcbsBITMAP
|
|
lcall CLP
|
|
_gensub LP
|
|
|
|
les bx,_P_&lp ; Accept bmBits == NULL
|
|
mov ax,es:[bx]._F_bmBits
|
|
mov cx,es:[bx]._F_bmBits+2
|
|
or ax,cx
|
|
jz @F
|
|
xor ax,ax
|
|
mov al,es:[bx]._F_bmPlanes ;bmPlanes
|
|
mul word ptr es:[bx]._F_bmHeight
|
|
mul word ptr es:[bx]._F_bmWidthBytes
|
|
xchg ax,dx
|
|
mov ax,es:[bx]._F_bmBits
|
|
mov bx,dx ;bx = size
|
|
lcall CLP
|
|
_gensub LP
|
|
@@:
|
|
endif
|
|
endm
|
|
|
|
STRUCT <BITMAPCOREHEADER>
|
|
F_DWSIZE bcSize
|
|
F_WORD bcWidth
|
|
F_WORD bcHeight
|
|
F_CONST bcPlanes, 1
|
|
F_BITCOUNT bcBitCount
|
|
ENDSTRUCT
|
|
|
|
STRUCT <BITMAPINFOHEADER>
|
|
F_DWSIZE biSize
|
|
F_WORD biWidthLo
|
|
F_WMBZ biWidthHi
|
|
F_WORD biHeightLo
|
|
F_WMBZ biHeightHi
|
|
F_CONST biPlanes, 1
|
|
F_BITCOUNT biBitCount
|
|
F_COMPRESS biCompression
|
|
F_DIBSIZE0 biSizeImage
|
|
F_DWORD biXPelsPerMeter
|
|
F_DWORD biYPelsPerMeter
|
|
F_DWORD biClrUsed
|
|
F_DWORD biClrImportant
|
|
ENDSTRUCT
|
|
;----------------------------------------------------------------------------;
|
|
P_VALIDATEBITSINFOBUFFER macro fn, yE, xS, yS, nStart, n, lpBits, lpBi, wUse, rBits, rBi, opts
|
|
local exit
|
|
local total_clip
|
|
|
|
;; NOTE: The first 4 parameters are defined only when fn & DIB_RECT_DIB is
|
|
;; TRUE (they are 0 otherwise).
|
|
;; The 5th parameter is undefined if fn & DIB_FULL_DIB is TRUE.
|
|
|
|
;; yE - yExtent in DIB (only when fn & DIB_RECT_DIB is TRUE)
|
|
;; xS - xStart in DIB (only when fn & DIB_RECT_DIB is TRUE)
|
|
;; yS - yStart in DIB (only when fn & DIB_RECT_DIB is TRUE)
|
|
;; nStart - start DIB scan (only when fn & DIB_RECT_DIB is TRUE)
|
|
;;
|
|
;; n - numScans parameter. If fn & DIB_FULL_DIB is TRUE, n is not defined.
|
|
;; lpBits - pointer to the bits
|
|
;; lpBi - pointer to bitmap info
|
|
;; wUse - the wUsage parameter
|
|
;; rBits - routine to validate length of lpBits buffer
|
|
;; rBi - routine to validate length of lpBi buffer.
|
|
;; opts - optional parameters
|
|
|
|
if fn and DIB_RECT_DIB
|
|
_DefParm <yE>,2,<opts>
|
|
_DefParm <xS>,2,<opts>
|
|
_DefParm <yS>,2,<opts>
|
|
_DefParm <nStart>,2,<opts>
|
|
endif
|
|
|
|
if fn and DIB_PART_DIB
|
|
_DefParm <n>,2,<opts>
|
|
endif
|
|
|
|
_DefParm <lpBits>,4,<opts>
|
|
_DefParm <lpBi>,4,<opts>
|
|
_DefParm <wUsage>,2,<opts>
|
|
|
|
if VLgen
|
|
_FlsFrame
|
|
|
|
;; validate wUsage
|
|
|
|
mov ax,_P_&wUsage
|
|
cmp ax,DIB_MAX
|
|
jbe @F ;; unsigned comparison to catch < 0.
|
|
mov bx,ERR_BAD_VALUE
|
|
lcall Inval_Param_
|
|
@@:
|
|
|
|
|
|
push si
|
|
push di
|
|
|
|
;; validate the bitmap info header first. Validate the color table size too.
|
|
|
|
mov ax,word ptr _P_&lpBi
|
|
mov cx,word ptr _P_&lpBi+2
|
|
mov dx,_P_&wUsage
|
|
mov di, DIB_VALIDATE_COLOR
|
|
or di, rBi
|
|
|
|
call ValidateDIBHeader
|
|
or ax,ax
|
|
jz @f
|
|
pop di
|
|
pop si
|
|
mov bx,ERR_BAD_PTR
|
|
lcall Inval_Param_
|
|
jmp exit
|
|
@@:
|
|
|
|
;; now validate the size of the bitsbuffer.
|
|
|
|
mov si, word ptr _P_&lpBits
|
|
mov di, word ptr _P_&lpBits+2
|
|
les bx,_P_&lpBi
|
|
|
|
if fn and DIB_PART_DIB
|
|
|
|
mov dx,_P_&n
|
|
|
|
endif
|
|
|
|
if fn and DIB_RECT_DIB
|
|
|
|
;; for a call which specifies a rectangular area in the DIB (SetDIBitsToDevice),
|
|
;; compute the size of the DIB that will actually be validated.
|
|
;;
|
|
;; The cases are:
|
|
;;
|
|
;; (1) If (yS > (nStart + n) : The DIB RECT will be totally clipped. Do not
|
|
;; validate the DIB size in this case.
|
|
;; (2) If (yS + yE) < nStart : The DIB rect will totally be clipped. Do not
|
|
;; validate the DIB size in this case.
|
|
;; (3) Else, compute the min of (yS+yE-nStart) and (n) and use it to validate
|
|
;; the size of the DIB buffer.
|
|
|
|
mov dx, _P_&yS
|
|
mov cx, _P_&nStart
|
|
add cx, _P_&n
|
|
cmp dx, cx
|
|
ja total_clip ;; case (1)
|
|
add dx, _P_&yE
|
|
cmp dx, _P_&nStart
|
|
jb total_clip ;; case (2)
|
|
sub dx, _P_&nStart
|
|
cmp dx, _P_&n ;; compute min in case (3)
|
|
jb @f ;; (yS+yE-nStart) is < n
|
|
mov dx, _P_&n ;; validate only n scans
|
|
jmp short @f
|
|
|
|
total_clip:
|
|
pop di
|
|
pop si ;; will not validate DIB size
|
|
jmp short exit
|
|
|
|
@@:
|
|
endif
|
|
|
|
mov cx, fn
|
|
or cx, rBits
|
|
|
|
call ValidateDIBSize
|
|
pop di
|
|
pop si
|
|
or ax,ax
|
|
jz exit
|
|
mov bx,ERR_BAD_PTR
|
|
lcall Inval_Param_
|
|
exit:
|
|
|
|
|
|
endif
|
|
endm
|
|
|
|
;----------------------------------------------------------------------------;
|
|
|
|
STRUCT <LOGPALETTE> ;fixed-size portion of struct.
|
|
F_VERSION palVersion
|
|
F_WORD wEntries
|
|
ENDSTRUCT
|
|
|
|
P_CLPLOGPALETTE macro lp, opts
|
|
_GenParm <lp>,4,<opts>
|
|
if VLgen
|
|
mov ax,_P_&lp
|
|
mov cx,_P_&lp+2
|
|
mov bx,VLcbsLOGPALETTE
|
|
lcall CLP
|
|
_gensub LP
|
|
|
|
les bx,_P_&lp
|
|
mov cx,es
|
|
|
|
mov ax,VLcbsPALETTEENTRY
|
|
mul word ptr es:[bx]._F_wEntries ; ax = size of all palette entries
|
|
add ax,VLcbsLOGPALETTE ; ax = total size of struct
|
|
xchg ax,bx
|
|
|
|
lcall CLP
|
|
_gensub LP
|
|
endif
|
|
endm
|
|
|
|
STRUCT DEVMODE ;fixed-size fields
|
|
F_RGCH dmDeviceName, CCHDEVICENAME
|
|
F_VERSION dmSpecVersion
|
|
F_WORD dmDriverVersion ;value assigned by driver developer
|
|
F_WSIZE dmSize ;size of DEVMODE struct.
|
|
F_WORD dmDriverExtra ;size of dmDriverData field.
|
|
F_DWORD dmFields
|
|
F_RVALUE dmOrientation, DMORIENT_PORTRAIT, DMORIENT_LANDSCAPE
|
|
F_RVALUE dmPaperSize, DMPAPER_FIRST, DMPAPER_LAST
|
|
F_short dmPaperLength
|
|
F_short dmPaperWidth
|
|
F_short dmScale
|
|
F_short dmCopies
|
|
F_RVALUE dmDefaultSource, DMBIN_FIRST, DMBIN_LAST
|
|
F_RVALUE dmPrintQuality, DMPRINT_FIRST, DMPRINT_LAST ;** range -4 to -1
|
|
F_RVALUE dmColor, DMCOLOR_FIRST, DMCOLOR_LAST ;** range 1-2
|
|
F_RVALUE dmDuplex, DMDUP_FIRST, DMDUP_LAST ;** range 1-3
|
|
ENDSTRUCT
|
|
|
|
P_CLPDEVMODE0 macro lp, opts
|
|
local dmexit
|
|
local dmbad
|
|
local dmbad1
|
|
|
|
_GenParm <lp>,4,<opts>
|
|
if VLgen
|
|
mov ax,_P_&lp
|
|
mov cx,_P_&lp+2
|
|
mov bx,ax
|
|
or bx,cx
|
|
jz dmexit ;allow NULL pointer
|
|
|
|
mov bx,VLcbsDEVMODE
|
|
lcall CLP ;verify fixed-size fields
|
|
_gensub LP
|
|
|
|
les bx,_P_&lp
|
|
mov ax,es:[bx]._F_dmDriverExtra
|
|
or ax,ax
|
|
jz dmexit ;if 0 extra bytes, we're done
|
|
|
|
add ax,VLcbsDEVMODE
|
|
xchg ax,bx ;bx=size of DEVMODE+extra bytes
|
|
mov cx,es
|
|
|
|
;; MICROGRAFIX draw uses CreateDC to load one of thier format conversion DLLs.
|
|
;; The pass in a DevMode structure which is either a private structure, or
|
|
;; has a bogus value in the _F_dmDriverExtra field. We need to loosen the
|
|
;; validation and turn an invalid DevMode detection into a warning.
|
|
|
|
beg_fault_trap dmbad
|
|
mov es,cx
|
|
or bx,bx ; cb == 0?
|
|
jz dmexit ; yes: just check selector
|
|
dec bx
|
|
add bx,ax
|
|
jc dmbad1 ; check 16 bit overflow
|
|
mov bl,es:[bx] ; check read permission, limit
|
|
end_fault_trap
|
|
jmp short dmexit ; structure is valid
|
|
|
|
dmbad:
|
|
fault_fix_stack
|
|
dmbad1:
|
|
mov bx,ERR_BAD_PTR or ERR_WARNING
|
|
lcall Inval_Param_
|
|
|
|
dmexit:
|
|
endif
|
|
endm
|
|
|
|
|
|
;----------------------------------------------------------------------------;
|
|
; P A R A M E T E R V A L I D A T I O N R O U T I N E S ;
|
|
;----------------------------------------------------------------------------;
|
|
|
|
; DIB validation flag constants. Do not change these constants without
|
|
; changing them in GDI.API.
|
|
|
|
DIB_RGB_COLORS equ 0
|
|
DIB_VALIDATE_COLOR equ 1
|
|
DIB_VALIDATE_RW equ 2
|
|
DIB_PTR0 equ 4
|
|
DIB_FULL_DIB equ 8
|
|
DIB_FULL_COLOR equ 16
|
|
DIB_RECT_DIB equ 32
|
|
DIB_PART_DIB equ 64
|
|
|
|
; derived DIB flag constants
|
|
|
|
DIB_PTR_CLP equ 0
|
|
DIB_NO_COLOR equ 0
|
|
DIB_PTR_LP equ DIB_VALIDATE_RW
|
|
DIB_PTR_CLP0 equ DIB_PTR0
|
|
DIB_PTR_LP0 equ DIB_VALIDATE_RW+DIB_PTR0
|
|
ERR_BAD_PTR equ 07007h
|
|
DIB_DIBTODEV equ DIB_PART_DIB+DIB_RECT_DIB
|
|
DIB_PTR_GETDIBITS equ DIB_VALIDATE_RW+DIB_FULL_COLOR
|
|
NO_COLOR_TABLE equ 9
|
|
|
|
BITMAP struc
|
|
bmType DW ?
|
|
bmWidth DW ?
|
|
bmHeight DW ?
|
|
bmWidthBytes DW ?
|
|
bmPlanes DB ?
|
|
bmBitsPixel DB ?
|
|
bmBits DD ?
|
|
BITMAP ends
|
|
|
|
RGBTRIPLE struc
|
|
rgbBlue db ?
|
|
rgbGreen db ?
|
|
rgbRed db ?
|
|
RGBTRIPLE ends
|
|
|
|
RGBQUAD struc
|
|
rgbqBlue db ?
|
|
rgbqGreen db ?
|
|
rgbqRed db ?
|
|
rgbqReserved db ?
|
|
RGBQUAD ends
|
|
|
|
; structures for defining DIBs
|
|
BITMAPCOREHEADER struc
|
|
bcSize dd ?
|
|
bcWidth dw ?
|
|
bcHeight dw ?
|
|
bcPlanes dw ?
|
|
bcBitCount dw ?
|
|
BITMAPCOREHEADER ends
|
|
|
|
BITMAPINFOHEADER struc
|
|
biSize dd ?
|
|
biWidth dd ?
|
|
biHeight dd ?
|
|
biPlanes dw ?
|
|
biBitCount dw ?
|
|
|
|
biCompression dd ?
|
|
biSizeImage dd ?
|
|
biXPelsPerMeter dd ?
|
|
biYPelsPerMeter dd ?
|
|
biClrUsed dd ?
|
|
biClrImportant dd ?
|
|
BITMAPINFOHEADER ends
|
|
|
|
BITMAPINFO struc
|
|
bmiHeader db (SIZE BITMAPINFOHEADER) DUP (?)
|
|
bmiColors db ? ; array of RGBQUADs
|
|
BITMAPINFO ends
|
|
|
|
BITMAPCOREINFO struc
|
|
bmciHeader db (SIZE BITMAPCOREHEADER) DUP (?)
|
|
bmciColors db ? ; array of RGBTRIPLEs
|
|
BITMAPCOREINFO ends
|
|
|
|
BITMAPFILEHEADER struc
|
|
bfType dw ?
|
|
bfSize dd ?
|
|
bfReserved1 dw ?
|
|
bfReserved2 dw ?
|
|
bfOffBits dd ?
|
|
BITMAPFILEHEADER ends
|
|
|
|
externFP IsBadReadPtr ;(KERNEL)
|
|
externFP IsBadWritePtr ;(KERNEL)
|
|
externFP IsBadHugeReadPtr ;(KERNEL)
|
|
externFP IsBadHugeWritePtr ;(KERNEL)
|
|
|
|
;createseg _TEXT,TEXT,BYTE,PUBLIC,CODE
|
|
createseg _TEXT,TEXT,WORD,PUBLIC,CODE
|
|
sBegin TEXT
|
|
;----------------------------------------------------------------------------;
|
|
; ValidateDIBHeader: ;
|
|
; ;
|
|
; This routine validates the DIB header: ;
|
|
; ;
|
|
; Entry: ;
|
|
; CX:AX -- pointer to DIB header (either core or info header) ;
|
|
; DX: -- wUsage parameter ;
|
|
; DI: -- Flags: ;
|
|
; BIT0 - (DIB_VALIDATE_COLOR) set if no color table validatio ;
|
|
; to be done. ;
|
|
; BIT1 - (DIB_VALIDATE_RW) set if R-W validation to be done. ;
|
|
; BIT2 _ (DIB_PTR0) set if NULL pointer OK ;
|
|
; BIT3 _ (DIB_FULL_DIB) set if complete DIB (not used here);
|
|
; BIT4 - (DIB_FULL_COLOR) ignore biClrUsed if set. ;
|
|
; Returns: ;
|
|
; AX = 0 if valid header. ;
|
|
; DI:SI: will point just past the end of the buffer. ;
|
|
; ;
|
|
; Uses: ;
|
|
; Free to use AX,BX,CX,DX,SI,DI and ES. ;
|
|
; ;
|
|
;----------------------------------------------------------------------------;
|
|
|
|
public ValidateDIBHeader
|
|
ValidateDIBHeader proc near
|
|
|
|
|
|
; the header must atleast be the size of COREHEADER.
|
|
|
|
mov bx,SIZE BitmapCoreHeader
|
|
push cx
|
|
push ax ;save the pointer to header
|
|
call DIB_Validate_Pointer ;is it a valid pointer ?
|
|
or ax,ax
|
|
pop ax
|
|
pop cx ;restore pointer
|
|
jz VDH_cont ;base size ok
|
|
jmp VDH_bad_header ;invalid size
|
|
|
|
VDH_cont:
|
|
|
|
; now it is safe to load the pointer to the header and validate the actual
|
|
; size.
|
|
|
|
mov es,cx
|
|
mov bx,ax ;es:bx -> dib header
|
|
mov si,word ptr es:[bx].biSize ;load and keep the size
|
|
mov cx, SIZE RGBTriple ;assume COREHEADER.
|
|
cmp si,SIZE BitmapCoreHeader ;COREHEADER ?
|
|
jz VDH_core ;it is a core header
|
|
mov cx, SIZE RGBQuad ;assume INFOHEADER
|
|
cmp si, SIZE BitmapInfoHeader ;is it an info header ?
|
|
jnz VDH_bad_header ;header is not right.
|
|
|
|
; we have a new header. Make sure that some of the fields that the code
|
|
; expects to be 0 are 0.
|
|
|
|
cmp word ptr es:[bx].biWidth+2,0
|
|
jne VDH_bad_header ;invalid
|
|
mov ax,word ptr es:[bx].biHeight+2
|
|
test ax,ax ;is it a negative number ?
|
|
js VDH_get_bit_count ;yes, must be a top-down dib.
|
|
jnz VDH_bad_header ;it it is not signed, it should be 0.
|
|
|
|
VDH_get_bit_count:
|
|
cmp es:[bx].biPlanes,1
|
|
jne VDH_bad_header ;no.
|
|
mov ax,es:[bx].biBitCount ;load the bits per pel
|
|
jmp short VDH_check_color ;validate color
|
|
|
|
VDH_core:
|
|
cmp es:[bx].bcPlanes,1
|
|
jne VDH_bad_header ;no.
|
|
mov ax,es:[bx].bcBitCount ;load the bits per pel
|
|
|
|
VDH_check_color:
|
|
|
|
; if the bits per pel is >= NO_COLOR_TABLE, we do not have a color table in
|
|
; the DIB.
|
|
|
|
cmp ax,NO_COLOR_TABLE
|
|
jae VDH_no_color_table
|
|
|
|
; if color table validation is not needed, we can return if the header is
|
|
; a core header (we have validated size) or validate the size of the
|
|
; basic header and return.
|
|
|
|
test di, DIB_VALIDATE_COLOR ;color validation needed ?
|
|
jnz VDH_validate_color ;yes.
|
|
|
|
VDH_no_color_table:
|
|
|
|
; color table validation is not needed. We are done if this is a core header.
|
|
|
|
cmp si, SIZE BitmapCoreHeader ;core header ?
|
|
jz VDH_return_OK ;is, validation done. valid.
|
|
mov ax,bx ;get offset
|
|
mov bx,si ;get base header size
|
|
jmp short VDH_validate_size ;validate the total size
|
|
|
|
VDH_bad_header:
|
|
|
|
mov ax,1 ;return from here with error
|
|
jmp short VDH_return ;error return
|
|
|
|
|
|
VDH_validate_color:
|
|
cmp dx,DIB_RGB_COLORS ;is the usage RGB values
|
|
jz VDH_color_entry_size_in_cx ;cx has size of each entry
|
|
mov cx,2 ;size per entry for palettes
|
|
|
|
VDH_color_entry_size_in_cx:
|
|
mov dx,ax ;get the bit count in dx
|
|
|
|
; if DIB_FULL_COLOR bit is set, we will ignore the value if biClrUsed.
|
|
|
|
test di,DIB_FULL_COLOR ;validate complete color table ?
|
|
jnz VDH_get_num_colors ;yes.
|
|
|
|
; check out the biClrUsed value.
|
|
|
|
cmp si, SIZE BitmapInfoHeader ;is this an info header ?
|
|
jnz VDH_get_num_colors ;no.
|
|
mov ax,word ptr es:[bx].biClrUsed ;is this specified ?
|
|
or ax,ax
|
|
jnz VDH_num_colors_got ;yes. ax has num colors
|
|
|
|
VDH_get_num_colors:
|
|
xchg dx,cx
|
|
mov ax,1
|
|
shl ax,cl ;number of color entries in ax
|
|
xchg dx,cx
|
|
|
|
VDH_num_colors_got:
|
|
mul cx ;cx had size of each entry
|
|
add ax,si ;add size of header
|
|
xchg ax,bx ;size in bx, offset in ax
|
|
|
|
VDH_validate_size:
|
|
mov cx,es ;cx:ax has ptr, bx has size
|
|
|
|
; store the pointer past the header in DI:SI
|
|
|
|
mov di,cx
|
|
mov si,ax
|
|
add si,bx ;past the end. Assume no wrap
|
|
call DIB_Validate_Pointer ;validate pointer
|
|
jmp short VDH_return ;ax has status
|
|
|
|
VDH_return_OK:
|
|
xor ax,ax ;valid return
|
|
|
|
VDH_return:
|
|
ret
|
|
|
|
ValidateDIBHeader endp
|
|
|
|
|
|
;----------------------------------------------------------------------------;
|
|
; ValidateDIBSize: ;
|
|
; ;
|
|
; Validates the size of the DIB bits. ;
|
|
; ;
|
|
; Entry: ;
|
|
; DI:SI -- pointer to DIB bits (either core or info header) ;
|
|
; ES:BX -- pointer to DIB header (already validated) ;
|
|
; DX: -- num scans. ;
|
|
; CX: -- Flags: ;
|
|
; BIT1 - (DIB_VALIDATE_RW) set if R-W validation to be done. ;
|
|
; BIT2 _ (DIB_PTR0) set if NULL pointer OK ;
|
|
; BIT3 - (DIB_FULL_DIB) set if full DIB bit size to be ;
|
|
; validated. ;
|
|
; Returns: ;
|
|
; AX = 0 if valid header. ;
|
|
; ;
|
|
; Uses: ;
|
|
; Free to use AX,BX,CX,DX,SI,DI and ES. ;
|
|
; ;
|
|
; Assumes: ;
|
|
; Caller has done a PUSH SI/PUSH DI on the frame. ;
|
|
;----------------------------------------------------------------------------;
|
|
public ValidateDIBSize
|
|
ValidateDIBSize proc near
|
|
|
|
push cx ;save
|
|
cmp word ptr es:[bx].biSize, SIZE BitmapInfoHeader
|
|
jz VDB_info ;info header
|
|
mov cx,es:[bx].bcBitCount ;get the bit count
|
|
mov ax,es:[bx].bcWidth ;and width in pels
|
|
jmp short VDB_get_scan_size ;calculate scan size
|
|
|
|
VDB_info:
|
|
cmp word ptr es:[bx].biCompression+2,0
|
|
jnz VDB_check_size_image
|
|
cmp word ptr es:[bx].biCompression, BI_RGB
|
|
jz VDB_not_rle ;not an RLE DIB
|
|
|
|
VDB_check_size_image:
|
|
mov ax,word ptr es:[bx].biSizeImage
|
|
mov cx,ax
|
|
or cx,word ptr es:[bx].biSizeImage+2
|
|
jz VDB_unknown_size ;unknown size
|
|
pop cx ;restore saved cx
|
|
mov dx,word ptr es:[bx].biSizeImage+2
|
|
jmp short VDB_validate_size ;size is in dx:ax
|
|
|
|
VDB_unknown_size:
|
|
mov ax,1 ;validate for 1byte
|
|
cwd
|
|
pop cx ;restore flags
|
|
jmp short VDB_validate_size
|
|
|
|
VDB_not_rle:
|
|
; calculate the size of the scan. Assume that the width is a word
|
|
|
|
mov cx,es:[bx].biBitCount
|
|
mov ax,word ptr es:[bx].biWidth
|
|
|
|
VDB_get_scan_size:
|
|
|
|
push dx ;save
|
|
mul cx ;dx:ax = num of bits
|
|
add ax,31
|
|
adc dx,0
|
|
and ax, NOT 31 ;round up to multiple of 32
|
|
ror dx,3 ;get ls 3 bits into upper byte
|
|
and dh,0e0h ;keep the ms 3 bits
|
|
shr ax,3 ;ignore ls 3 bits
|
|
or ah,dh ;ax = num bytes per scan
|
|
pop dx
|
|
|
|
VDB_scan_width_in_ax:
|
|
|
|
pop cx ;restore flags
|
|
xchg cx,dx ;get flags into dx, scan in cx
|
|
|
|
push di ;save
|
|
mov di,word ptr es:[bx].bcHeight ;assume core header
|
|
cmp word ptr es:[bx].biSize, SIZE BitmapCoreHeader
|
|
jz VDB_total_scans_in_di ;di has total height of DIB
|
|
mov di,word ptr es:[bx].biHeight ;get low word of height
|
|
|
|
VDB_total_scans_in_di:
|
|
mov bx,di ;get total height in BX
|
|
pop di ;restore
|
|
test dx,DIB_FULL_DIB ;is full DIB to be validated ?
|
|
jnz VDB_num_scans_in_bx ;yes, bx has num scans.
|
|
|
|
; when we are validating partial DIBs, we want to make sure that the
|
|
; numScan parameter passed in (now in cx) is not greater than the total
|
|
; height. If it is, we will simply validate for the full DIB.
|
|
|
|
cmp cx,bx ;is numScan > total scans ?
|
|
ja VDB_num_scans_in_bx ;yes, invalid numScans. Use total scans
|
|
mov bx,cx ;use numScans
|
|
|
|
VDB_num_scans_in_bx:
|
|
push dx ;save flags
|
|
mul bx ;dx:ax has size
|
|
pop cx ;get the flags in cx
|
|
|
|
VDB_validate_size:
|
|
|
|
; dx:ax has size of the buffer. di:si is the ptr, cx has flags.
|
|
|
|
call DIB_Validate_Huge_Pointer
|
|
ret
|
|
|
|
ValidateDIBSize endp
|
|
|
|
|
|
;----------------------------------------------------------------------------;
|
|
; DIB_Validate_Pointer: ;
|
|
; ;
|
|
; Validates the size and access of a pointer. ;
|
|
; ;
|
|
; Entry: ;
|
|
; CX:AX -- pointer to be validate ;
|
|
; BX: -- size of buffer ;
|
|
; DI: -- flags: ;
|
|
; BIT1 - (DIB_VALIDATE_RW) set if R-W validation to be done. ;
|
|
; BIT2 _ (DIB_PTR0) set if NULL pointer OK ;
|
|
; ;
|
|
; Uses: None ;
|
|
; returns AX = 0 if valid. ;
|
|
; ;
|
|
;----------------------------------------------------------------------------;
|
|
|
|
public DIB_Validate_Pointer
|
|
DIB_Validate_Pointer proc near
|
|
|
|
test di,DIB_PTR0 ;NULL pointer allowed ?
|
|
jz DBP_not_null ;no.
|
|
push ax ;save
|
|
or ax,cx ;is the pointer NULL ?
|
|
pop ax ;restore
|
|
jz DBP_return_ok ;pointer is NULL and is valid
|
|
|
|
DBP_not_null:
|
|
|
|
push cx
|
|
push ax
|
|
push bx
|
|
test di, DIB_VALIDATE_RW ;read/write validation ?
|
|
jnz DBP_rw_validation ;yes.
|
|
|
|
; do read only validation:
|
|
|
|
call IsBadReadPtr
|
|
jmp short DBP_return
|
|
|
|
DBP_rw_validation:
|
|
call IsBadWritePtr
|
|
jmp short DBP_return
|
|
|
|
DBP_return_ok:
|
|
xor ax,ax ;valid pointer
|
|
|
|
DBP_return:
|
|
ret
|
|
|
|
DIB_Validate_Pointer endp
|
|
|
|
|
|
;----------------------------------------------------------------------------;
|
|
; DIB_Validate_Huge_Pointer: ;
|
|
; ;
|
|
; Validates the size and access of a pointer. ;
|
|
; ;
|
|
; Entry: ;
|
|
; DI:SI -- pointer to be validate ;
|
|
; DX:AX -- size of buffer ;
|
|
; CX: -- flags: ;
|
|
; BIT1 - (DIB_VALIDATE_RW) set if R-W validation to be done. ;
|
|
; BIT2 _ (DIB_PTR0) set if NULL pointer OK ;
|
|
; ;
|
|
; Uses: None ;
|
|
; returns AX = 0 if valid. ;
|
|
; ;
|
|
;----------------------------------------------------------------------------;
|
|
|
|
public DIB_Validate_Huge_Pointer
|
|
DIB_Validate_Huge_Pointer proc near
|
|
|
|
test cx,DIB_PTR0 ;NULL pointer allowed ?
|
|
jz DBPH_not_null ;no.
|
|
push si ;save
|
|
or si,di ;is the pointer NULL ?
|
|
pop si ;restore
|
|
jz DBPH_return_ok ;pointer is NULL and is valid
|
|
|
|
DBPH_not_null:
|
|
|
|
push di
|
|
push si ;ds:si is pointer to bits
|
|
push dx
|
|
push ax ;dx:ax is the dword size
|
|
test cx, DIB_VALIDATE_RW ;read/write validation ?
|
|
jnz DBPH_rw_validation ;yes.
|
|
|
|
; do read only validation:
|
|
|
|
call IsBadHugeReadPtr
|
|
jmp short DBPH_return
|
|
|
|
DBPH_rw_validation:
|
|
|
|
call IsBadHugeWritePtr
|
|
jmp short DBPH_return
|
|
|
|
DBPH_return_ok:
|
|
xor ax,ax ;valid pointer
|
|
|
|
DBPH_return:
|
|
ret
|
|
|
|
DIB_Validate_Huge_Pointer endp
|
|
|
|
sEnd TEXT
|
|
|
|
;=======================================================================
|
|
;
|
|
; API Descriptions
|
|
;
|
|
; in PALETTE.ASM
|
|
API void, AnimatePalette, TEXT, <ASM>
|
|
P_HPALETTE hPal ; validated by VALID? (3.0 and 3.1)
|
|
P_WORD wStartIndex
|
|
P_CLPPALENTRYBUFFER nEntries,lpPalColors ; **
|
|
|
|
; in PALETTE.ASM
|
|
API HPALETTE, CreatePalette, TEXT, <ASM>
|
|
P_CLPLOGPALETTE lpLogPal ;**
|
|
|
|
; in PALETTE.ASM
|
|
API WORD, GetPaletteEntries, TEXT, <ASM>
|
|
P_HPALETTE hPalette ;validated by VALID? (3.0 and 3.1)
|
|
P_WORD wStartIndex
|
|
P_LPPALENTRYBUFFER wEntries, lpPalColors ; buffer filled in DEBUG Win 3.1
|
|
|
|
; in PALETTE.ASM
|
|
API WORD, GetNearestPaletteIndex, TEXT, <ASM>
|
|
P_HPALETTE hPalette ;validated by VALID? (3.0 and 3.1)
|
|
P_DWORD color
|
|
|
|
; in PALETTE.ASM
|
|
API WORD, GetSystemPaletteEntries, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_WORD wStartIndex
|
|
P_LPPALENTRYBUFFER wEntries,lpPalColors ;buffer filled in DEBUG Win 3.1
|
|
|
|
; in PALETTE.ASM
|
|
API WORD, GetSystemPaletteUse, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
|
|
; in PALETTE.ASM
|
|
API BOOL, ResizePalette, TEXT, <ASM>
|
|
P_HPALETTE hPalette ;validated by VALID? (3.0 and 3.1)
|
|
P_WORD nNumEntries
|
|
|
|
; in PALETTE.ASM
|
|
API WORD, SetPaletteEntries, TEXT, <ASM>
|
|
P_HPALETTE hPalette ;validated by VALID? (3.0 and 3.1)
|
|
P_WORD wStartIndex
|
|
P_CLPPALENTRYBUFFER wEntries, lpPalColors
|
|
|
|
; in PALETTE.ASM
|
|
API WORD, SetSystemPaletteUse, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_WORD wUsage
|
|
|
|
; in PALETTE.ASM
|
|
API int, UpdateColors, TEXT, <ASM>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1)
|
|
|
|
; in PRNTCTL.C (new for Win 3.1)
|
|
API int, AbortDoc, TEXT
|
|
P_HDCMETA hdc ; validated by Valid()
|
|
APIERR
|
|
mov ax, SP_ERROR ;General escape error
|
|
APIEND
|
|
|
|
; in PRNTCTL.C (New for Win 3.1)
|
|
API int, EndPage, TEXT
|
|
P_HDCMETA hdc ; Checked by Valid(). Encapsulates ENDPAGE escape
|
|
APIERR
|
|
mov ax, SP_ERROR ;General escape error
|
|
APIEND
|
|
|
|
; in PRNTCTL.C (New for Win 3.1)
|
|
API int, EndDoc, TEXT
|
|
P_HDCMETA hdc ; Checked by Valid(). Encapsulates NEWFRAME escape
|
|
APIERR
|
|
mov ax, SP_ERROR ;General escape error
|
|
APIEND
|
|
|
|
STRUCT <DOCINFO>
|
|
F_int cbSize
|
|
F_CLPSTR lpszDocName
|
|
F_CLPSTR0 lpszOutput
|
|
ENDSTRUCT
|
|
|
|
_GenLP <P_CLPDOCINFO>,<CLP>,%VLcbsDOCINFO
|
|
|
|
; in PRNTCTL.C (new for 3.1)
|
|
API int, StartDoc, TEXT
|
|
P_HDCMETA hdc ;checked by Valid()
|
|
P_CLPDOCINFO lpDocInfo
|
|
APIERR
|
|
mov ax, SP_ERROR ;General escape error
|
|
APIEND
|
|
|
|
; in PRNTCTL.C (new for 3.1)
|
|
API int, StartPage, TEXT
|
|
P_HDCMETA hdc ;checked by Valid(). Null error return
|
|
|
|
; in PRNTCTL.C (new for 3.1)
|
|
API int, SetAbortProc, TEXT
|
|
P_HDCMETA hdc
|
|
P_LPFNABORT0 lpProc ;**
|
|
APIERR
|
|
mov ax, SP_ERROR ;General escape error
|
|
APIEND
|
|
|
|
; in DCMAN1.ASM
|
|
API HDC, CreateCompatibleDC, TEXT, <ASM>
|
|
P_HDC0 hdc ; 0 => use screen DC
|
|
|
|
; in DCMAN1.ASM
|
|
API HDC, CreateIC ,TEXT, <ASM,FUNNYFRAME,NODATA> ;nogen
|
|
P_CLPSTR lpDriverName
|
|
P_CLPSTR0 lpDeviceName
|
|
P_CLPSTR0 lpOutput
|
|
P_DWORD lpInitData ; Driver-dependent data or NULL
|
|
APIEND
|
|
|
|
|
|
; in DCMAN1.ASM
|
|
API HDC, CreateDC, TEXT, <ASM,FUNNYFRAME,NODATA> ;nogen
|
|
;
|
|
; START of special ATM hackery.
|
|
;
|
|
jmp short SkipATMHackery
|
|
;
|
|
; Addresses of certain kernel functions patched by ATM loader.
|
|
;
|
|
;ATM_LPFN CreateDC_lpfn, LoadLibrary
|
|
;ATM_LPFN CreateDC_lpfn, GetProcAddress
|
|
;ATM_LPFN CreateDC_lpfn, FreeLibrary
|
|
;
|
|
; InternalCreateDC() hook that gets patched by ATM
|
|
;
|
|
;public ATMInternalCreateDC
|
|
;ATMInternalCreateDC:
|
|
;
|
|
; Old Windows prolog code that will be properly
|
|
; recognized by the ATM installation code...
|
|
;
|
|
; mov ax,_DATA
|
|
; inc bp
|
|
; push bp
|
|
; mov bp,sp
|
|
; push ds ; push ds and pop it off.
|
|
; pop ds ; (we need to pop DS rather than
|
|
; ; something fast like pop AX because
|
|
; ; ATM doesn't preserve DS itself)
|
|
; pop bp ; Take down the frame completely.
|
|
; dec bp
|
|
;ExternNP InternalCreateDC ; (in dcman1.asm)
|
|
; jmp InternalCreateDC ; now go to the real code
|
|
SkipATMHackery:
|
|
;
|
|
; END of special ATM hackery
|
|
;
|
|
P_CLPSTR lpDriverName
|
|
P_CLPSTR0 lpDeviceName ; can be NULL if lpDriverName is "DISPLAY"
|
|
P_CLPSTR0 lpOutput ; can be NULL if lpDriverName is "DISPLAY"
|
|
P_CLPDEVMODE0 lpInitData ; ** points to DEVMODE struct.
|
|
|
|
; in DCMAN2.ASM
|
|
API BOOL, DeleteDC, TEXT, <ASM,ATMFRAMEDS>
|
|
P_HDC hdc ; Validated by VALIDDEBUG? (3.1), VALID? (3.0)
|
|
APIEND
|
|
ATM_LPFN DeleteDC_lpfn, FreeLibrary
|
|
|
|
; in DCMAN2.ASM
|
|
API BOOL, RestoreDC, TEXT, <ASM>
|
|
P_HDCMETA hdc
|
|
P_int level ;number of DC on context stack or -1
|
|
|
|
; in DCMAN2.ASM
|
|
API int, SaveDC, TEXT, <ASM>
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1)
|
|
|
|
; in RESETDC.C
|
|
API BOOL, RESETDC, TEXT
|
|
P_HDC hdc
|
|
P_CLPDEVMODE0 lpInitData ; ** points to DEVMODE struct.
|
|
|
|
; in OBJDEL.ASM
|
|
API BOOL, DeleteObject, TEXT, <ASM>
|
|
P_HGDIOBJ hObject ; ** Validated by VALID? (3.0 and 3.1)
|
|
; object shouldn't be selected into a DC
|
|
; Pens, brushes, fonts, bitmaps &
|
|
; palettes and regions.
|
|
; in OBJMAN.ASM
|
|
API HPEN, CreatePen, TEXT, <ASM>
|
|
P_VALUE style, PS_MAX ; ** range 0-6
|
|
P_int cx
|
|
P_COLORREF color ; ** DWORD
|
|
|
|
; in OBJMAN.ASM
|
|
API HPEN, CreatePenIndirect, TEXT, <ASM>
|
|
P_CLPLOGPEN lpLogPen ; **
|
|
|
|
; in OBJMAN.ASM
|
|
API HBRUSH, CreateSolidBrush, TEXT, <ASM, NOGEN>
|
|
P_COLORREF color
|
|
|
|
; in OBJMAN.ASM
|
|
API HBRUSH, CreateHatchBrush, TEXT, <ASM>
|
|
P_VALUE nIndex, HS_MAX ; ** range 0-5
|
|
P_COLORREF color ;
|
|
|
|
; in OBJMAN.ASM
|
|
API HBRUSH, CreatePatternBrush, TEXT, <ASM>
|
|
P_HBITMAP hBitmap ;
|
|
|
|
; in OBJMAN.ASM
|
|
API HBRUSH, CreateBrushIndirect, TEXT, <ASM>
|
|
P_CLPLOGBRUSH lpLogBrush ; **
|
|
|
|
; in OBJMAN.ASM
|
|
API HBITMAP, CreateBitmap, TEXT, <ASM> ;<FUNNYFRAME> in 3.0
|
|
P_CLPBITBUFFER0 cx, cy, bPlanes, bBitC, lpBits ; ** buffer size
|
|
;determined by bitmap attributes
|
|
;cx and cy are int. values
|
|
;bPlanes and bBitC are BYTE values
|
|
|
|
; in OBJMAN.ASM
|
|
API HBITMAP, CreateBitmapIndirect, TEXT, <ASM> ;<FUNNYFRAME> in 3.0
|
|
P_CLPBITMAP lpBitmap ; **
|
|
|
|
; in OBJMAN.ASM
|
|
API HBITMAP, CreateCompatibleBitmap, TEXT, <ASM, FUNNYFRAME,NODATA> ;nogen
|
|
P_HDC hdc ; validated by VALID? (3.0 and 3.1) in CompatibleBitmap
|
|
P_int cx
|
|
P_int cy
|
|
|
|
; in OBJMAN.ASM
|
|
API HBITMAP, CreateDiscardableBitmap, TEXT, <ASM,FUNNYFRAME,NODATA> ;nogen
|
|
P_HDC hdc ; validated by VALID? (3.0 and 3.1) in CompatibleBitmap
|
|
P_int cx
|
|
P_int cy
|
|
|
|
; in OBJMAN.ASM
|
|
API HFONT, CreateFont, TEXT, <ASM>
|
|
P_int cy
|
|
P_int cx
|
|
P_int nEscapement
|
|
P_int nOrientation
|
|
P_VALUE nWeight, FW_MAX ;** range 0-1000
|
|
P_BYTE cItalic
|
|
P_BYTE cUnderline
|
|
P_BYTE cStrikeOut
|
|
P_BYTE cCharSet
|
|
P_BVALUE cOutPrecis, OUT_MAX ;** range 0-3
|
|
P_BVALUE cClipPrecis, CLIP_MAX ;** range 0-2
|
|
P_BVALUE cQuality, QUALITY_MAX ;** range 0-2
|
|
P_PITCHFAMILY cPitchAndFamily ;** BYTE. Flags in upper and lower nibbles
|
|
P_CLPFACENAME0 lpFaceName ;** null-terminated string length
|
|
;not > LF_FACESIZE
|
|
|
|
; in OBJMAN.ASM
|
|
API HFONT, CreateFontIndirect, TEXT, <ASM>
|
|
P_CLPLOGFONT lpLogFont ;**
|
|
|
|
; in OBJMAN.ASM
|
|
API HBRUSH, CreateDIBPatternBrush, TEXT, <ASM>
|
|
P_GHPACKEDDIB hPackedDIB, wUsage
|
|
|
|
; in OBJMAN.ASM
|
|
API DWORD, SetBitmapDimension, TEXT, <ASM>
|
|
P_HBITMAP hBitmap ; validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in FONTASC.ASM
|
|
ifdef DBCS
|
|
API int, GetFontAssocStatus, TEXT, <ASM>
|
|
P_HDCMETA hdc ; validated by VALID?
|
|
endif ;DBCS
|
|
|
|
; in WIN32.C
|
|
API BOOL, SetBitmapDimensionEx, TEXT
|
|
P_HBITMAP hBitmap
|
|
P_int x
|
|
P_int y
|
|
P_LPSIZE0 lpSize
|
|
|
|
; in OBJMAN.ASM
|
|
API DWORD, GetBitmapDimension, TEXT, <ASM>
|
|
P_HBITMAP hBitmap ;validated by VALID? (3.0 and 3.1)
|
|
|
|
; in WIN32.C
|
|
API BOOL, GetBitmapDimensionEx, TEXT
|
|
P_HBITMAP hBitmap
|
|
P_LPSIZE lpDimension
|
|
|
|
; in OBJMAN.ASM
|
|
API int, SetTextJustification, TEXT, <ASM>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_int nBreakExtra
|
|
P_int nBreakCount
|
|
|
|
; in OBJMAN.ASM
|
|
API int, SetTextCharacterExtra, TEXT, <ASM>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_int nCharExtra
|
|
|
|
; in METAREC.C
|
|
API GHANDLE, CopyMetaFile, TEXT
|
|
P_GHANDLE hMeta ;checked by IsValidMetaFile()
|
|
P_CLPSTR0 lpFileName ;0 => use memory metafile
|
|
|
|
; in METAREC.C
|
|
API HDC, CreateMetaFile, TEXT
|
|
P_CLPSTR0 lpFileName ;0 => return memory metafile DC
|
|
|
|
; in METAREC.C
|
|
API GHANDLE, CloseMetaFile, TEXT
|
|
P_HDCMETA hdc
|
|
|
|
|
|
; in METAPLAY.ASM
|
|
API BOOL, DeleteMetaFile, TEXT, <ASM,FUNNYFRAME> ; is NODATA
|
|
P_HMETAFILE hMF
|
|
|
|
; in METAPLAY.ASM
|
|
API BOOL, PlayMetaFile, TEXT, <ASM, ATMFRAMEDS>
|
|
P_HDCMETA hdc ;validated by Valid() (3.1 only)
|
|
P_HMETAFILE hMF
|
|
|
|
; in METAPLAY.ASM
|
|
API GHANDLE, GetMetaFile, TEXT, <ASM>
|
|
P_CLPSTR lpFileName
|
|
|
|
|
|
; in META.C
|
|
API void, PlayMetaFileRecord, TEXT
|
|
P_HDCMETA hdc ;validated by Valid() (3.1 only)
|
|
P_LPHANDLETABLE0 lpHT
|
|
P_CLPMETARECORD lpMR
|
|
P_WORD nhandles
|
|
|
|
; in META.C
|
|
API BOOL, EnumMetaFile, TEXT
|
|
P_HDCMETA0 hdc ; NULL DC is OK. Checked by Valid() (3.0 and 3.1)
|
|
P_HMETAFILE hMF
|
|
P_LPFNMENUM lpfnEnum ; **
|
|
P_DWORD lpClientData ; CLPVOID0 ?, but often just contains data
|
|
|
|
; in METAREC.C
|
|
API GHANDLE, GetMetaFileBits, TEXT
|
|
P_HMETAFILE hMF
|
|
|
|
; in METAREC.C
|
|
API HANDLE, SetMetaFileBits, TEXT
|
|
P_HMETAFILE hMem ; just returns hMem
|
|
|
|
; in METAREC.C
|
|
API HANDLE, SetMetaFileBitsBetter, TEXT
|
|
P_HMETAFILE hMem ; just returns hMem, new for 3.1
|
|
|
|
; in XLATE.ASM
|
|
API BOOL, DPtoLP, TEXT, <ASM, FUNNYFRAME,NODATA> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by DPXlate
|
|
P_LPPOINTBUFFER lpPoints, nCount ;**
|
|
|
|
; in XLATE.ASM
|
|
API BOOL, LPtoDP, TEXT, <ASM, FUNNYFRAME,NODATA> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) in DPXlate
|
|
P_LPPOINTBUFFER lpPoints, nCount
|
|
|
|
; in ARC.ASM
|
|
API HRGN, CreateEllipticRgnIndirect, TEXT, <ASM>
|
|
P_CLPRECT lpRect
|
|
|
|
; in ARC.ASM
|
|
API HRGN, CreateEllipticRgn, TEXT, <ASM, NOGEN>
|
|
P_XY1XY2 x1,y1,x2,y2 ;X2-X1 and Y2-Y1 under 32,767 units
|
|
|
|
; in ARC.ASM
|
|
API HRGN, CreatePolygonRgn, TEXT, <ASM>
|
|
P_CLPPOINTBUFFER lpPoints, nCount ;**
|
|
P_RVALUE nPolyFillMode, PFILL_MIN, PFILL_MAX ;** range 1-2
|
|
|
|
; in ARC.ASM
|
|
API HRGN, CreatePolyPolygonRgn, TEXT, <ASM>
|
|
P_POLYPOLYPOINTS lpPoints, lpPolyCounts, nCount ;**lpPolyCounts is a buffer
|
|
;of nCount Integers. lpPoints
|
|
;is a buffer of POINTS. Size of
|
|
;lpPoints det. by sum of all
|
|
;integers in lpPolyCounts
|
|
P_RVALUE nPolyFillMode, PFILL_MIN, PFILL_MAX ;** range 1-2
|
|
|
|
; in ARC.ASM
|
|
API HRGN, CreateRoundRectRgn, TEXT, <ASM, NOGEN>
|
|
P_XY1XY2 x1,y1,x2,y2 ;X2-X1 and Y2-Y1 under 32,767 units
|
|
P_int x3
|
|
P_int y3
|
|
|
|
; in ARC.ASM
|
|
API BOOL, Ellipse, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_XY1XY2 x1,y1,x2,y2
|
|
|
|
; in ARC.ASM
|
|
API BOOL, Arc, TEXT, <ASM>
|
|
P_HDCNOIC hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_XY1XY2 x1,y1,x2,y2
|
|
P_int x3
|
|
P_int y3
|
|
P_int x4
|
|
P_int y4
|
|
|
|
; in ARC.ASM
|
|
API BOOL, Pie, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_XY1XY2 x1,y1,x2,y2
|
|
P_int x3
|
|
P_int y3
|
|
P_int x4
|
|
P_int y4
|
|
|
|
; in ARC.ASM
|
|
API BOOL, Chord, TEXT, <ASM>
|
|
P_HDCNOIC hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_XY1XY2 x1,y1,x2,y2 ; ** X2-X1 and Y2-Y1 under 32,767 units
|
|
P_int x3
|
|
P_int y3
|
|
P_int x4
|
|
P_int y4
|
|
|
|
; in ARC.ASM
|
|
API BOOL, RoundRect, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_XY1XY2 x1,y1,x2,y2
|
|
P_int x3
|
|
P_int y3
|
|
|
|
; in RECT.C
|
|
API BOOL, Rectangle, TEXT, <RECT>
|
|
P_HDCNOIC hdc ;validated by Valid() (3.0 and 3.1) in RectangleBody
|
|
P_XY1XY2 x1,y1,x2,y2
|
|
|
|
; in FLOOD.ASM
|
|
API BOOL, FloodFill, TEXT, <ASM> ; calls ExtFloodFill
|
|
P_HDCNOIC hdc
|
|
P_int x
|
|
P_int y
|
|
P_COLORREF color
|
|
|
|
; in FLOOD.ASM
|
|
API BOOL, ExtFloodFill, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
P_COLORREF color
|
|
P_UVALUE fillType, EFF_MAX ;** range 0-1
|
|
|
|
P_LPESCPARMS macro code, cb, lp, opts
|
|
_DefParm <code>,2,<opts>
|
|
_DefParm <cb>,2,<opts>
|
|
_DefParm <lp>,4,<opts>
|
|
if VLgen
|
|
_FlsFrame
|
|
mov ax,_P_&lp
|
|
mov cx,_P_&lp+2
|
|
mov bx,_P_&cb
|
|
lcall CLP0
|
|
_gensub LP
|
|
endif
|
|
endm
|
|
|
|
; in ESC.ASM
|
|
API int, Escape, TEXT, <ASM, ATMFRAMEDS>
|
|
P_HDCNOTMEM hdc ; ** not mem. DC. VALID? (3.0 and 3.1)
|
|
P_LPESCPARMS code, cbInData, lpInData
|
|
P_LPVOID0 lpOutData
|
|
APIERR
|
|
mov ax,SP_ERROR ;General escape error
|
|
APIEND
|
|
|
|
; in ENUMOBJE.ASM
|
|
API int, EnumObjects, TEXT, <ASM>
|
|
P_HDC hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_RVALUE nObjectType, OBJ_MIN, OBJ_MAX ; ** range 1-2
|
|
P_LPFNOENUM lpCallBack ; **
|
|
P_DWORD lpClientData ; CLPVOID0 ?, but often just contains data
|
|
|
|
; in ENUMFONT.ASM
|
|
API int, EnumFonts, TEXT, <ASM,ATMFRAMEDS>
|
|
P_HDC hdc ; validated by VALID? (3.0 and 3.1) in RectStuff
|
|
P_CLPFACENAME0 lpFaceName
|
|
P_LPFNFENUM lpFontFunc ; **
|
|
P_DWORD lpData ; CLPVOID0 ?, but often just contains data
|
|
|
|
; in ENUMFONT.ASM (new for Win 3.1)
|
|
API int EnumFontFamilies, TEXT, <ASM>
|
|
P_HDC hdc ; validated by VALID?
|
|
P_CLPFACENAME0 lpFaceName
|
|
P_LPFNFENUM lpFontFunc ;
|
|
P_DWORD lpData ; CLPVOID0 ?, but often just contains data
|
|
|
|
; in GETSTUFF.ASM
|
|
API DWORD, GetCurrentPosition, TEXT, <ASM,FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) in GSV
|
|
|
|
; in WIN32.C
|
|
API BOOL GetCurrentPositionEx, TEXT, <FUNNYFRAME, NODATA, DEBUGONLY> ;nogen
|
|
P_HDC hdc
|
|
P_LPPOINT lpPoint
|
|
|
|
; in GETSTUFF.ASM
|
|
API DWORD, GetDCOrg, TEXT, <ASM,FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) in GSV
|
|
|
|
; in GETSTUFF.ASM
|
|
API DWORD, GetBrushOrg, TEXT, <ASM,FUNNYFRAME,NODATA,DEBUGONLY> ; nogen
|
|
P_HDC hdc ; validated by VALID? (3.0 and 3.1) in GSV
|
|
|
|
; in WIN32.C
|
|
API BOOL, GetBrushOrgEx, TEXT, <FUNNYFRAME, NODATA, DEBUGONLY> ; nogen
|
|
P_HDC hdc
|
|
P_LPPOINT lpPoint
|
|
|
|
; in GETSTUFF.ASM
|
|
API DWORD, GetBkColor, TEXT, <ASM, FUNNYFRAME,NODATA,DEBUGONLY> ; nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in GETSTUFF.ASM
|
|
API int, GetBkMode, TEXT, <ASM,FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in GETSTUFF.ASM
|
|
API DWORD, GetTextColor, TEXT, <ASM,FUNNYFRAME,NODATA,DEBUGONLY>;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in GETSTUFF.ASM
|
|
API WORD, GetTextAlign, TEXT, <ASM, FUNNYFRAME,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in GETSTUFF.ASM
|
|
API int, GetROP2, TEXT, <ASM, FUNNYFRAME, NODATA, DEBUGONLY>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in GETSTUFF.ASM
|
|
API int, GetStretchBltMode, TEXT, <ASM, FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in GETSTUFF.ASM
|
|
API int, GetPolyFillMode, TEXT, <ASM, FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in GETSTUFF.ASM
|
|
API int, GetMapMode, TEXT, <ASM, FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in GETSTUFF.ASM
|
|
API DWORD, GetWindowOrg, TEXT, <ASM, FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
;in WIN32.C
|
|
API BOOL, GetWindowOrgEx, TEXT, <FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc
|
|
P_LPPOINT lpPoint
|
|
|
|
; in GETSTUFF.ASM
|
|
API DWORD, GetWindowExt, TEXT, <ASM, FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in WIN32.C
|
|
API BOOL, GetWindowExtEx, TEXT, <FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc
|
|
P_LPSIZE lpSize
|
|
|
|
; in GETSTUFF.ASM
|
|
API DWORD, GetViewportOrg, TEXT, <ASM, FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in WIN32.C
|
|
API BOOL, GetViewportOrgEx, TEXT, <FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc
|
|
P_LPPOINT lpPoint
|
|
|
|
; in WIN32.C
|
|
API BOOL, GetViewportExtEx, TEXT, <FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc
|
|
P_LPSIZE lpSize
|
|
|
|
; in GETSTUFF.ASM
|
|
API DWORD, GetViewportExt, TEXT, <ASM, FUNNYFRAME,NODATA,DEBUGONLY> ;nogen
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1) by GSV
|
|
|
|
; in CHARWID.ASM
|
|
API BOOL, GetCharWidth, TEXT, <ASM, ATMFRAMEDS>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_LPRWBUFFER chFirst, chLast, lpBuffer, 2 ;** size dictated by
|
|
;char. range. Each entry in
|
|
;buffer is 2 bytes. Buffer
|
|
;filled in DEBUG Win 3.1 only
|
|
;lpBuffer is an int. buffer
|
|
; in SETPIXEL.ASM
|
|
API DWORD, GetPixel, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in SETPIXEL.ASM
|
|
API DWORD, SetPixel, TEXT, <ASM>
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
P_COLORREF color
|
|
APIERR
|
|
mov ax, -1
|
|
cwd
|
|
APIEND
|
|
|
|
; in STOCK.ASM
|
|
API HANDLE, GetStockObject, TEXT, <ASM>
|
|
P_VALUE nIndex, STOCK_MAX ; ** range 0-16
|
|
|
|
; in GDIINQ1.ASM
|
|
API LONG, GetBitmapBits, TEXT, <ASM, FUNNYFRAME,NODATA>
|
|
P_HBITMAP hBitmap ;validated by VALID? (3.0 and 3.1)
|
|
P_LPBUFFERDW dwCount, lpBits ;** buffer size a DWORD
|
|
;buffer filled in DEBUG Win 3.1
|
|
|
|
; in GDIINQ1.ASM
|
|
API int, GetDeviceCaps, TEXT, <ASM>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_DEVCAP nIndex ;** valid int. indices even-numbered
|
|
;ranges 0-44, 88-90, 104-108.
|
|
|
|
; in GDIINQ1.ASM
|
|
API LONG, SetBitmapBits, TEXT, <ASM, FUNNYFRAME,NODATA> ;nogen
|
|
P_HBITMAP hBitmap ; validated by VALID? (3.0 and 3.1) in BitmapBits
|
|
P_CLPBUFFERDW dwCount, lpBits ;** buffer size a DWORD
|
|
;buffer filled in DEBUG Win 3.1
|
|
|
|
; in GDIINQ2.ASM
|
|
API int, GetObject, TEXT, <ASM>
|
|
P_HGDIOBJGET hObject ;** Validated by VALID? (3.0 and 3.1)
|
|
; pens, brushes, fonts, bitmaps &
|
|
; palettes.
|
|
P_LPBUFFERX nCount, lpObject ;** nCount occurs before lpBits
|
|
;buffer filled in DEBUG Win 3.1
|
|
|
|
; in FASPECT.ASM
|
|
API DWORD, GetAspectRatioFilter, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
|
|
; in WIN32.C
|
|
API BOOL, GetAspectRatioFilterEx, TEXT
|
|
P_HDC hdc
|
|
P_LPSIZE lpSize
|
|
|
|
; in FASPECT.ASM
|
|
API DWORD, SetMapperFlags, TEXT, <ASM>
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1) in WordSet
|
|
P_DFLAGS dwFlag, MAPFLG_VALID_L, MAPFLG_VALID_H ; ** only bit #1 is recognized
|
|
|
|
; in XFORMMAN.ASM
|
|
API DWORD, GetNearestColor, TEXT, <ASM>
|
|
P_HDC hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_COLORREF color
|
|
|
|
; in XFORMMAN.ASM
|
|
API DWORD, OffsetViewportOrg, TEXT, <ASM, FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in OffsetOrg
|
|
P_int x
|
|
P_int y
|
|
|
|
; in WIN32.C
|
|
API BOOL, OffsetViewportOrgEx, TEXT, <FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc
|
|
P_int x
|
|
P_int y
|
|
P_LPPOINT0 lpPoint
|
|
|
|
; in XFORMMAN.ASM
|
|
API DWORD, OffsetWindowOrg, TEXT, <ASM, FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in OffsetOrg
|
|
P_int x
|
|
P_int y
|
|
|
|
; in WIN32.C
|
|
API BOOL, OffsetWindowOrgEx, TEXT, <FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc
|
|
P_int x
|
|
P_int y
|
|
P_LPPOINT0 lpPoint
|
|
|
|
; in XFORMMAN.ASM
|
|
API int, SetMapMode, TEXT, <ASM>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_RVALUE nMapMode, MM_MIN, MM_MAX ;** range 1-8
|
|
|
|
; in XFORMMAN.ASM
|
|
API DWORD, SetWindowExt, TEXT, <ASM,FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in SetWinViewExt
|
|
P_int x
|
|
P_int y
|
|
|
|
; in WIN32.C
|
|
API BOOL SetWindowExtEx, TEXT, <FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc
|
|
P_int x
|
|
P_int y
|
|
P_LPSIZE0 lpSize
|
|
|
|
; in XFORMMAN.ASM
|
|
API DWORD, SetViewportExt, TEXT, <ASM,FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in SetWinViewExt
|
|
P_int x
|
|
P_int y
|
|
|
|
; in WIN32.C
|
|
API BOOL, SetViewportExtEx, TEXT, <FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc
|
|
P_int x
|
|
P_int y
|
|
P_LPSIZE0 lpSize
|
|
|
|
; in XFORMMAN.ASM
|
|
API DWORD, ScaleViewportExt, TEXT, <ASM,FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in ScaleExt
|
|
P_int xNum
|
|
P_intN0 XDenom ;calls MulDiv
|
|
P_int yNum
|
|
P_intN0 YDenom ;calls MulDiv
|
|
|
|
; in WIN32.C
|
|
API BOOL, ScaleViewportExtEx, TEXT, <FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in ScaleExt
|
|
P_int xNum
|
|
P_intN0 XDenom ;calls MulDiv
|
|
P_int yNum
|
|
P_intN0 YDenom ;calls MulDiv
|
|
P_LPSIZE0 lpSize
|
|
|
|
; in XFORMMAN.ASM
|
|
API DWORD, ScaleWindowExt, TEXT, <ASM,FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in ScaleExt
|
|
P_int xNum
|
|
P_intN0 XDenom ;calls MulDiv
|
|
P_int yNum
|
|
P_intN0 YDenom ;calls MulDiv
|
|
|
|
; in WIN32.C
|
|
API BOOL, ScaleWindowExtEx, TEXT, <FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in ScaleExt
|
|
P_int xNum
|
|
P_intN0 XDenom ;calls MulDiv
|
|
P_int yNum
|
|
P_intN0 YDenom ;calls MulDiv
|
|
P_LPSIZE0 lpSize
|
|
|
|
; in CLIPMAN.ASM
|
|
API int, GetRgnBox, TEXT, <ASM>
|
|
P_HRGN hrgn ;validated by VALID? (3.0 and 3.1)
|
|
P_LPRECT lpRect ;buffer filled in DEBUG Win 3.1
|
|
|
|
; in GETTEXTE.ASM
|
|
API DWORD, GetTextExtent, TEXT, <ASM, ATMFRAMEDS>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_CLPBUFFER lpString, nCount
|
|
|
|
; win WIN32.C
|
|
API BOOL, GetTextExtentPoint, TEXT
|
|
P_HDC hdc
|
|
P_CLPBUFFER lpString, nCount
|
|
P_LPSIZE lpSize
|
|
|
|
; in TEXTATTS.ASM
|
|
API int, GetTextCharacterExtra, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
|
|
; in GETTEXTF.ASM
|
|
API int, GetTextFace, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_LPBUFFERX lpFaceName, nBytes ;nBytes occurs before lpFaceName
|
|
;buffer filled in DEBUG Win 3.1
|
|
APIERR
|
|
E_SETEMPTY lpFaceName, nBytes
|
|
APIEND
|
|
|
|
; in GETTEXTM.ASM
|
|
API BOOL, GetTextMetrics, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_LPTEXTMETRIC lptm ;**buffer filled in DEBUG Win 3.1
|
|
|
|
; in ENVIRON.ASM
|
|
API int, GetEnvironment, TEXT, <ASM>
|
|
P_CLPSTR lpPortName ; ** converted to atom after
|
|
; stripping off colons
|
|
P_LPBUFFER0 lpEnviron, nBytes ; NULL => return env. block size
|
|
; buffer filled in DEBUG Win 3.1
|
|
APIERR
|
|
E_SETEMPTY lpEnviron, nBytes
|
|
APIEND
|
|
|
|
|
|
; in ENVIRON.ASM
|
|
API int, SetEnvironment, TEXT, <ASM>
|
|
P_CLPSTR lpPortName ; converted to atom after stripping off ":"s
|
|
P_CLPBUFFER lpEnviron, wCount ; buffer filled in DEBUG Win 3.1
|
|
|
|
; in ADDFONTR.ASM
|
|
API int, AddFontResource, TEXT, <ASM>
|
|
P_CLPSTRHRSRC lpFileName ; ** null-terminated filename or handle to
|
|
; loaded resource handle in LOWORD
|
|
|
|
; in DELFONT.ASM
|
|
API BOOL, RemoveFontResource, TEXT, <ASM>
|
|
P_CLPSTRHRSRC lpFileName ; ** null-terminated filename or handle to
|
|
; loaded resource handle in LOWORD
|
|
|
|
; in FONTENG2.ASM (new for Win 3.1)
|
|
API BOOL, CreateScalableFontResource, TEXT, <ASM>
|
|
F_VALUE fEmbed, 1
|
|
P_CLPSTR lpResFileName
|
|
P_CLPSTR lpFntFileName
|
|
P_CLPSTR0 lpCurrentPath
|
|
|
|
STRUCT <MAT2>
|
|
F_WORD fract1
|
|
F_int value1
|
|
F_WORD fract2
|
|
F_int value2
|
|
F_WORD fract2
|
|
F_int value4
|
|
F_WORD fract4
|
|
F_int value4
|
|
ENDSTRUCT
|
|
|
|
_GenLP <P_LPMAT2>,<LP>,%VLcbsMAT2
|
|
|
|
; in FONTENG2.ASM (new for Win 3.1)
|
|
API DWORD, GetGlyphOutline, TEXT, <ASM>
|
|
P_HDC hdc ; validated by VALID?
|
|
P_WORD cch
|
|
P_FLAGS wFlags, GLYPH_VALID ; ** 0,1,2
|
|
P_LPGLYPHMETRICS lpMetrics
|
|
P_LPGGO0 cbBuffer, lpPoints
|
|
P_LPMAT2 lpXForm
|
|
APIERR
|
|
mov ax,-1
|
|
cwd
|
|
APIEND
|
|
|
|
|
|
; in FONTENG2.ASM (new for Win 3.1)
|
|
API DWORD, GetFontData, TEXT, <ASM>
|
|
P_HDC hdc ; validated by VALID?
|
|
P_DWORD dwTable
|
|
P_DWORD dwOffset
|
|
P_LPFDATA0 lpBuffer, cbBuffer
|
|
APIERR
|
|
mov ax,-1
|
|
cwd
|
|
APIEND
|
|
|
|
; in FONTENG2.ASM (new for Win 3.1)
|
|
API BOOL, GetCharABCWidths, TEXT, <ASM>
|
|
P_HDC hdc ; validated by VALID?
|
|
P_LPRWBUFFER chFirst, chLast, lpBuffer, 6 ;size dictated by
|
|
;char. range. Buffer filled
|
|
;in DEBUG Win 3.1 only
|
|
;Each entry in lpBuffer is
|
|
;of 6 bytes.
|
|
|
|
; in FONTENG2.ASM (new for Win 3.1)
|
|
API BOOL GetOutlineTextMetrics, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID?
|
|
P_LPETM0 cb, lpBuffer ;** NULL ptr. is valid
|
|
;Buffer filled in DEBUG Win 3.1
|
|
|
|
STRUCT <KERNINGPAIR>
|
|
F_WORD wFirst
|
|
F_WORD wSecond
|
|
F_int iKernAmount
|
|
ENDSTRUCT
|
|
|
|
P_LPKERNINGPAIRS0 macro ckp, lpkp
|
|
_DefParm <ckp>,2,<opts>
|
|
_DefParm <lpkp>,4,<opts>
|
|
if VLgen
|
|
_FlsFrame
|
|
mov ax,VLcbsKERNINGPAIR ; bx = ckp * sizeof(KERNINGPAIR)
|
|
mul word ptr _P_&ckp
|
|
xchg ax,bx
|
|
mov ax,_P_&lpkp ; cx:ax = lpkp
|
|
mov cx,_P_&lpkp+2
|
|
lcall LP0
|
|
endif
|
|
endm
|
|
|
|
|
|
API int GetKerningPairs, TEXT
|
|
P_HDC hdc
|
|
P_LPKERNINGPAIRS0 ckp, lpkp
|
|
|
|
; in OUTMAN.ASM
|
|
API BOOL, LineTo, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in OUTMAN.ASM
|
|
API DWORD, MoveTo, TEXT, <ASM>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in DPXlate
|
|
P_int x
|
|
P_int y
|
|
|
|
; in WIN32.C
|
|
API BOOL, MoveToEx, TEXT
|
|
P_HDCMETA hdc
|
|
P_int x
|
|
P_int y
|
|
P_LPPOINT0 lpPoint
|
|
|
|
; in OUTMAN.ASM
|
|
API BOOL, Polyline, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_CLPPOINTBUFFER lpPoints, nCount
|
|
|
|
; in LINEDDA.ASM
|
|
API void, LineDDA, TEXT, <ASM, FUNNYFRAME>
|
|
P_XY1XY2 x1,y1,x2,y2 ; overflow problem here too?
|
|
P_LPFNLENUM lpFontFunc ; **
|
|
P_DWORD lpData ; CLPVOID0 ?, but often just contains data
|
|
|
|
; in MULDIV.ASM
|
|
API int, MulDiv, TEXT, <ASM, NOGEN>
|
|
P_int a
|
|
P_int b
|
|
P_intN0 c ;** MulDiv checks for overflow
|
|
|
|
; in POLYGON.ASM
|
|
API BOOL, Polygon, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_CLPPOINTBUFFER lpPoints, nCount
|
|
|
|
; in POLYGON.ASM
|
|
API BOOL, PolyPolygon, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_POLYPOLYPOINTS lpPoints, lpPolyCounts, nCount ;lpPolyCounts is a buffer
|
|
;of nCount Integers. lpPoints
|
|
;is a buffer of POINTS. Size of
|
|
;lpPoints det. by sum of all
|
|
;integers in lpPolyCounts
|
|
|
|
ifdef WOW
|
|
API BOOL, PolyPolylineWOW, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_POLYPOLYLARGEPOINTS lpPoints, lpPolyCounts, nCount
|
|
endif
|
|
|
|
; in PATBL.ASM
|
|
API BOOL, StretchBlt, TEXT, <ASM>
|
|
P_HDCNOIC hdcDst ; validated by VALID? (3.0 and 3.1)
|
|
P_int xDst
|
|
P_int yDst
|
|
P_int cxDst
|
|
P_int cyDst
|
|
P_HDC hdcSrc ; validated by VALID? (3.0 and 3.1)
|
|
P_int xSrc
|
|
P_int ySrc
|
|
P_int cxSrc
|
|
P_int cySrc
|
|
P_ROP rop
|
|
|
|
; in PATBL.ASM
|
|
API BOOL, BitBlt, TEXT, <ASM>
|
|
P_HDCNOIC hdcDst ; validated by VALID? (3.0 and 3.1)
|
|
P_int xDst
|
|
P_int yDst
|
|
P_int cxDst
|
|
P_int cyDst
|
|
P_HDC0 hdcSrc ; ** hSrcDC Used only if higher 2 bits of each
|
|
P_int cxSrc ; nibble of HIWORD(rop) != lower 2 bis of
|
|
P_int cySrc ; same nibble. Validated by VALID? (3.1 only)
|
|
P_ROP rop ; XSrc and YSrc are int. values.
|
|
|
|
; in PATBL.ASM
|
|
API BOOL, PatBlt, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
P_int cx
|
|
P_int cy
|
|
P_ROP rop ; ** Only HIWORD used. LOWORD carried
|
|
; around for 1.x driver compatiblity
|
|
|
|
; in GETPOBJ.ASM
|
|
API DWORD, SetBrushOrg, TEXT, <ASM>
|
|
P_HDC hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in GETPOBJ.ASM
|
|
API BOOL, UnrealizeObject, TEXT, <ASM>
|
|
P_HGDIOBJUNR hObject ;** brush or palette
|
|
;cannot be selected into any DC
|
|
|
|
; in CLIPMAN.ASM
|
|
API int, ExcludeClipRect, TEXT, <ASM, FUNNYFRAME,NODATA>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in RectStuff
|
|
P_XY1XY2 x1,y1,x2,y2
|
|
|
|
; in CLIPMAN.ASM
|
|
API int, GetClipBox, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_LPRECT lpRect ;buffer filled in DEBUG Win 3.1
|
|
|
|
; in CLIPMAN.ASM
|
|
API int, IntersectClipRect, TEXT, <ASM, FUNNYFRAME,NODATA> ; nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in RectStuff
|
|
P_XY1XY2 x1,y1,x2,y2
|
|
|
|
; in CLIPMAN.ASM
|
|
API int, SelectClipRgn, TEXT, <ASM>
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_HRGN0 hrgn ; validated by VALID? (3.0), VALIDDEBUG? (3.1)
|
|
|
|
; in RG.ASM
|
|
API HRGN, CreateRectRgnIndirect, TEXT, <ASM>
|
|
P_CLPRECT lpRect
|
|
|
|
; in RG.ASM
|
|
API BOOL, EqualRgn, TEXT, <ASM>
|
|
P_HRGN hrgn1 ;validated by VALID? (3.0 and 3.1) in RectStuff
|
|
P_HRGN hrgn2 ;validated by VALID? (3.0 and 3.1) in RectStuff
|
|
|
|
; in RG.ASM
|
|
API BOOL, RectInRegion, TEXT, <ASM, FUNNYFRAME> ;nogen
|
|
P_HRGN hrgn ;validated by VALID? (3.0), ValidDebug? (3.1) StuffInRegion
|
|
P_CLPRECT lpRect
|
|
|
|
; in RG.ASM
|
|
API BOOL, RectVisible, TEXT, <ASM, FUNNYFRAME> ; nogen
|
|
P_HDC hdc ;validated by VALID? (3.0), ValidDebug? (3.1) StuffVisible
|
|
P_CLPRECT lpRect
|
|
|
|
; in RG.ASM
|
|
API int, OffsetRgn, TEXT, <ASM>
|
|
P_HRGN hrgn ;validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in RG.ASM
|
|
API int, OffsetClipRgn, TEXT, <ASM>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in REGION.ASM
|
|
API HRGN, CreateRectRgn, TEXT, <ASM, NOGEN>
|
|
P_XY1XY2 x1,y1,x2,y2 ; X2-X1 and Y2-Y1 under 32,767 units
|
|
|
|
; in REGION.ASM
|
|
API int, CombineRgn, TEXT, <ASM>
|
|
P_HRGN hrgnDst ;validated by VALID? (3.0 and 3.1)
|
|
P_HRGN hrgnSrc1 ;validated by VALID? (3.0 and 3.1)
|
|
P_HRGN0 hrgnSrc2 ;validated by VALID? (3.0 and 3.1)
|
|
; Can be NULL if code is RGN_COPY
|
|
P_RVALUE code, RGN_MIN, RGN_MAX ;** range 1-5
|
|
|
|
; in REGION.ASM
|
|
API void, SetRectRgn, TEXT, <ASM>
|
|
P_HRGN hrgn ; validated by VALID? (3.0 and 3.1)
|
|
P_XY1XY2 x1,y1,x2,y2
|
|
|
|
; in RGOUT.C
|
|
API BOOL, FillRgn, TEXT
|
|
P_HDCNOIC hdc ; Checked by Valid()
|
|
P_HRGN hrgn ; Checked by Valid()
|
|
P_HBRUSH hBrush ; Checked by Valid()
|
|
|
|
; in RG.ASM
|
|
API BOOL, PtInRegion, TEXT, <ASM>
|
|
P_HRGN hrgn ;checked by Valid() (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in RGOUT.C
|
|
API BOOL, PaintRgn, TEXT
|
|
P_HDCNOIC hdc ;checked by Valid() (3.0 and 3.1)
|
|
P_HRGN hrgn ;checked by Valid() (3.0 and 3.1)
|
|
|
|
; in RG.ASM
|
|
API BOOL, PtVisible, TEXT, <ASM>
|
|
P_HDC hdc ;validated by Valid() (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in RGOUT.C
|
|
API BOOL, FrameRgn, TEXT
|
|
P_HDCNOIC hdc ; Checked by Valid()
|
|
P_HRGN hrgn ; Checked by Valid()
|
|
P_HBRUSH hBrush ; Checked by Valid()
|
|
P_int cx
|
|
P_int cy
|
|
|
|
; in RGOUTZ.ASM
|
|
API BOOL, InvertRgn, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_HRGN hrgn ;validated by VALID? (3.0 and 3.1)
|
|
|
|
; in OBJSEL.ASM
|
|
API HANDLE, SelectObject, TEXT, <ASM, ATMFRAMEDS>
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_HGDIOBJSEL hObj ; ** validated by VALID? (3.0 and 3.1)
|
|
; only pens, brushes, fonts, bitmaps &
|
|
; regions (no palettes)
|
|
|
|
; in COLOR.ASM
|
|
API DWORD, SetTextColor, TEXT, <ASM>
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_COLORREF color
|
|
|
|
; in COLOR.ASM
|
|
API DWORD, SetBkColor, TEXT, <ASM>
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_COLORREF color
|
|
APIERR
|
|
mov dh,80h ;; return 0x8000:0x0000
|
|
APIEND
|
|
|
|
; in NEWXFORM.ASM
|
|
API int, SetBkMode, TEXT, <ASM,FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1) in WordSet
|
|
P_RVALUE nBkMode, BK_MIN, BK_MAX ; range 1-2
|
|
|
|
; in NEWXFORM.ASM
|
|
API WORD, SetTextAlign, TEXT, <ASM,FUNNYFRAME> ;nogen
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1) in WordSet
|
|
P_FLAGS wFlags, TA_VALID ; **
|
|
|
|
; in NEWXFORM.ASM
|
|
API int, SetROP2, TEXT, <ASM, FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ; validated by VALID? (3.0 and 3.1) in WordSet
|
|
P_RVALUE nDrawMode, R2_MIN,R2_MAX ; ** range 1-16
|
|
|
|
; in NEWXFORM.ASM
|
|
API int, SetStretchBltMode, TEXT, <ASM, FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in WordSet
|
|
P_RVALUE nStrMode, STR_MIN, STR_MAX ;** range 1-3
|
|
|
|
; in NEWXFORM.ASM
|
|
API int, SetPolyFillMode, TEXT, <ASM,FUNNYFRAME,NODATA> ;nogen
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1) in WordSet
|
|
P_RVALUE nPolyFillMode,PFILL_MIN, PFILL_MAX ; ** range 1-2
|
|
|
|
; in NEWXFORM.ASM
|
|
API DWORD, SetWindowOrg, TEXT, <ASM>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in WIN32.C
|
|
API BOOL, SetWindowOrgEx, TEXT
|
|
P_HDCMETA hdc
|
|
P_int x
|
|
P_int y
|
|
P_LPPOINT0 lpPoint
|
|
|
|
; in NEWXFORM.ASM
|
|
API DWORD, SetViewportOrg, TEXT, <ASM>
|
|
P_HDCMETA hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_int x
|
|
P_int y
|
|
|
|
; in WIN32.C
|
|
API BOOL, SetViewportOrgEx, TEXT
|
|
P_HDCMETA hdc
|
|
P_int x
|
|
P_int y
|
|
P_LPPOINT0 lpPoint
|
|
|
|
;----------------------------------------------------------------------------;
|
|
; D I B V A L I D A T I O N R O U T I N E S ;
|
|
;----------------------------------------------------------------------------;
|
|
; NOTES: ;
|
|
; ;
|
|
; (1). The size of a color table entry is sizeof RGB_TRIPLE for a core DIB ;
|
|
; header and RGB_QUAD for a info DIB header. However, if wUsage ;
|
|
; indicates a npalette usage, the size per entry is 2 bytes. ;
|
|
; ;
|
|
; (2). The lpInfoHeader paramater in CreateDIBitmap may not have a color ;
|
|
; table in the header. ;
|
|
; ;
|
|
; (3). For SetDIBits/GetDIBits and SetDIBitsToDevice, a 'numScans' parameter ;
|
|
; specifies the size of the DIBits. The buffer may not contain the ;
|
|
; complete DIB. ;
|
|
; ;
|
|
; However, in the case of StretchDIBits, the entire DIB buffer should ;
|
|
; be present and the height of the DIB should be picked up from the ;
|
|
; associated header. Likewise, if an initializer DIB is provided in the ;
|
|
; CreateDIBitmap call, it has to have a complete DIB buffer. ;
|
|
; ;
|
|
; (4). SetDIBitsToDevice specifies a rectangle in the DIB. This is the only ;
|
|
; part of the DIB that will be accessed. The validation code should ;
|
|
; figure out the amount of the DIB buffer that will need to ve accessed ;
|
|
; and validate that the buffer is big enough for it. ;
|
|
; ;
|
|
; (5). If the DIB is RLE compressed and the biSizeImage field is non zero, ;
|
|
; we will use that size to validate the length of the DIB buffer. ;
|
|
; ;
|
|
; (6). The validation code will not validate the bits per pixel and the ;
|
|
; biCompression fields. This is to allow expansion of these fields in ;
|
|
; the future. The validation code for these would instead be done in ;
|
|
; the DIB simulation code. ;
|
|
;----------------------------------------------------------------------------;
|
|
|
|
; in DIBITM.ASM
|
|
API int, SetDIBits, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_HANDLE hBitmap ;validated by VALID? (3.1 only)
|
|
;must not be selected into a DC
|
|
P_WORD nStartScan
|
|
P_CLPBITSINFOBUFFER nNumScans, lpBits, lpBitsInfo, wUsage
|
|
;** lpBits size depends on number of
|
|
;scans and info. in lpBitsInfo
|
|
;lpBitsInfo points to BITMAPINFO
|
|
;or BITMAPCOREINFO
|
|
|
|
; in DIBITM.ASM
|
|
API HBITMAP, CreateDIBitmap, TEXT, <ASM>
|
|
P_HDCNOIC hdc ; validated by VALID? (3.0 and 3.1)
|
|
P_CLPBITMAPINFOHEADER lpInfoHeader ; ** ptr. to BITMAPINFOHEADER or BITMAPCOREHEADER
|
|
P_CLPDIBITMAP0 dwUsage, lpInitBits, lpInitInfo, wUsage
|
|
; ** lpInitBits NULL if
|
|
; dwUsage is not CBM_INIT
|
|
; Size of lpInitBits depends
|
|
; on fields in info. block
|
|
; lpInitInfo points to BITMAPINFO
|
|
; or BITMAPCOREINFO
|
|
|
|
; in DIBITM.ASM
|
|
API int, SetDIBitsToDevice, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_WORD xDst
|
|
P_WORD yDst
|
|
P_WORD cxDst
|
|
P_CLPRECTBITSINFOBUFFER cyDst, xSrc, ySrc, nStartScan,nNumScans, lpBits, lpBitsInfo, wUsage
|
|
;** lpBits size depends on number of
|
|
;scans and info. in lpBitsInfo
|
|
;lpBitsInfo points to BITMAPINFO
|
|
;or BITMAPCOREINFO
|
|
|
|
; in DIBITM.ASM
|
|
API int, GetDIBits, TEXT, <ASM>
|
|
P_HDC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_HANDLE hBitmap ;validated by VALID? (3.1 only)
|
|
P_WORD nStartScan
|
|
P_LPBITSINFOBUFFER0 nNumScans, lpBits, lpBitsInfo, wUsage
|
|
;**lpBits
|
|
;can be NULL.
|
|
;buffer size depends on number of
|
|
;scans and info. in lpBitsInfo
|
|
;lpBitsInfo is a ptr. to
|
|
;BITMAPINFO or BITMAPCOREINFO
|
|
|
|
; in DIBSTRCH.ASM
|
|
API int, StretchDIBits, TEXT, <ASM>
|
|
P_HDCNOIC hdc ;validated by VALID? (3.0 and 3.1)
|
|
P_WORD xDst
|
|
P_WORD yDst
|
|
P_WORD cxDst
|
|
P_WORD cyDst
|
|
P_WORD xSrc
|
|
P_WORD ySrc
|
|
P_WORD cxSrc
|
|
P_WORD cySrc
|
|
P_CFULLLPBITSINFOBUFFER lpBits, lpBitsInfo, wUsage
|
|
;** lpBits size depends on height
|
|
;and info. in lpBitsInfo
|
|
;lpBitsInfo points to BITMAPINFO
|
|
;or BITMAPCOREINFO
|
|
P_ROP rop
|
|
|
|
;----------------------------------------------------------------------------;
|
|
; in TEXTOUT.C
|
|
API BOOL, ExtTextOut, TEXT, <ATMFRAMEDS>
|
|
P_HDCNOIC hdc ; checked by Valid()
|
|
P_int x
|
|
P_int y
|
|
P_FLAGS flags, ETO_VALID ; ** (1,2,4)
|
|
P_CLPRECT0 lprc
|
|
P_CLPETOBUF lpString, nCount, lpDx ;lpDx is NULL or has nCount integers
|
|
|
|
|
|
; in TEXTOUT.C
|
|
API BOOL, TextOut, TEXT
|
|
P_HDCNOIC hdc
|
|
P_int X
|
|
P_int Y
|
|
P_CLPBUFFER lpString, nCount
|