forked from KolibriOS/kolibrios
80c71dc52a
git-svn-id: svn://kolibrios.org@1002 a494cfbc-eb01-0410-851d-a64ba20cac60
324 lines
6.7 KiB
PHP
324 lines
6.7 KiB
PHP
|
|
REQ_DLL_VER = 1
|
|
DLL_ENTRY = 1
|
|
|
|
HS_HORIZONTAL = 0
|
|
HS_VERTICAL = 1
|
|
HS_FDIAGONAL = 2
|
|
HS_BDIAGONAL = 3
|
|
HS_CROSS = 4
|
|
HS_DIAGCROSS = 5
|
|
|
|
SCR_PIXMAP = -1
|
|
|
|
PX_MEM_SYSTEM = 0
|
|
PX_MEM_LOCAL = 1
|
|
PX_MEM_GART = 2
|
|
|
|
PX_MEM_MASK = 3
|
|
|
|
ARGB32 = ((32 shl 24) or (2 shl 16) or 0x8888)
|
|
|
|
macro CreateHatch hatch, bkcolor, fcolor
|
|
{
|
|
pushd fcolor
|
|
pushd bkcolor
|
|
pushd hatch
|
|
call [imp_CreateHatch]
|
|
add esp, 3*4
|
|
}
|
|
|
|
macro DestroyBrush brush
|
|
{
|
|
pushd brush
|
|
call [imp_DestroyBrush]
|
|
add esp, 4
|
|
}
|
|
|
|
macro CreatePixmap width, height, format, flags
|
|
{
|
|
pushd flags
|
|
pushd format
|
|
pushd height
|
|
pushd width
|
|
call [imp_CreatePixmap]
|
|
add esp, 4*4
|
|
}
|
|
|
|
macro DestroyPixmap pixmap
|
|
{
|
|
pushd pixmap
|
|
call [imp_DestroyPixmap]
|
|
add esp, 4
|
|
};
|
|
|
|
macro LockPixmap pixmap
|
|
{
|
|
pushd pixmap
|
|
call [imp_LockPixmap]
|
|
add esp, 4
|
|
}
|
|
|
|
macro UnlockPixmap pixmap
|
|
{
|
|
pushd pixmap
|
|
call [imp_UnlockPixmap]
|
|
add esp, 4
|
|
}
|
|
|
|
macro ClearPixmap pixmap, color
|
|
{
|
|
pushd color
|
|
pushd pixmap
|
|
call [imp_ClearPixmap]
|
|
add esp, 2*4
|
|
}
|
|
|
|
macro Line pixmap, x0,y0,x1,y1,color
|
|
{
|
|
pushd color
|
|
pushd y1
|
|
pushd x1
|
|
pushd y0
|
|
pushd x0
|
|
pushd pixmap
|
|
call [imp_Line]
|
|
add esp, 6*4
|
|
};
|
|
|
|
macro DrawRect pixmap,x,y,w,h,color,border
|
|
{
|
|
pushd border
|
|
pushd color
|
|
pushd h
|
|
pushd w
|
|
pushd y
|
|
pushd x
|
|
pushd pixmap
|
|
call [imp_DrawRect]
|
|
add esp, 7*4
|
|
}
|
|
|
|
macro FillRect pixmap,x,y,w,h,brush,border
|
|
{
|
|
pushd border
|
|
pushd brush
|
|
pushd h
|
|
pushd w
|
|
pushd y
|
|
pushd x
|
|
pushd pixmap
|
|
call [imp_FillRect]
|
|
add esp, 7*4
|
|
}
|
|
|
|
macro Blit dstpix, dstx, dsty, srcpix, srcx, srcy, w, h
|
|
{
|
|
pushd h
|
|
pushd w
|
|
pushd srcy
|
|
pushd srcx
|
|
pushd srcpix
|
|
pushd dsty
|
|
pushd dstx
|
|
pushd dstpix
|
|
call [imp_Blit]
|
|
add esp, 8*4
|
|
}
|
|
|
|
macro BlitAlpha dstpix, dstx, dsty, srcpix, srcx, srcy, w, h, alpha
|
|
{
|
|
pushd alpha
|
|
pushd h
|
|
pushd w
|
|
pushd srcy
|
|
pushd srcx
|
|
pushd srcpix
|
|
pushd dsty
|
|
pushd dstx
|
|
pushd dstpix
|
|
call [imp_BlitAlpha]
|
|
add esp, 9*4
|
|
}
|
|
|
|
macro TransparentBlit dstpix, dstx, dsty, srcpix, srcx, srcy, w, h, key
|
|
{
|
|
pushd key
|
|
pushd h
|
|
pushd w
|
|
pushd srcy
|
|
pushd srcx
|
|
pushd srcpix
|
|
pushd dsty
|
|
pushd dstx
|
|
pushd dstpix
|
|
call [imp_TransparentBlit]
|
|
add esp, 9*4
|
|
}
|
|
|
|
|
|
macro fix_cwd path
|
|
{
|
|
pushd path
|
|
|
|
push '/'
|
|
push path
|
|
call _strrchr
|
|
|
|
mov byte [eax], 0
|
|
|
|
mov eax, 30
|
|
mov ebx, 1
|
|
mov ecx, [esp+8]
|
|
int 0x40
|
|
|
|
add esp, 12
|
|
}
|
|
|
|
szPxlib db '/rd/1/lib/pixlib.obj',0
|
|
|
|
szStart db 'START',0
|
|
szVersion db 'version',0
|
|
|
|
szCreatePixmap db 'CreatePixmap',0
|
|
szDestroyPixmap db 'DestroyPixmap',0
|
|
szLockPixmap db 'LockPixmap',0
|
|
szUnlockPixmap db 'UnlockPixmap',0
|
|
szGetPixmapPitch db 'GetPixmapPitch',0
|
|
|
|
szCreateHatch db 'CreateHatch',0
|
|
szCreateMonoBrush db 'CreateMonoBrush',0
|
|
szDestroyBrush db 'DestroyBrush',0
|
|
|
|
szClearPixmap db 'ClearPixmap',0
|
|
szLine db 'Line',0
|
|
szDrawRect db 'DrawRect',0
|
|
szFillRect db 'FillRect',0
|
|
szBlit db 'Blit',0
|
|
szTransparentBlit db 'TransparentBlit',0
|
|
szBlitAlpha db 'BlitAlpha',0
|
|
|
|
align 4
|
|
|
|
px_import:
|
|
|
|
imp_start dd szStart
|
|
imp_ver dd szVersion
|
|
|
|
imp_CreatePixmap dd szCreatePixmap
|
|
imp_DestroyPixmap dd szDestroyPixmap
|
|
imp_LockPixmap dd szLockPixmap
|
|
imp_UnlockPixmap dd szUnlockPixmap
|
|
imp_GetPixmapPitch dd szGetPixmapPitch
|
|
|
|
imp_CreateHatch dd szCreateHatch
|
|
imp_CreateMonoBrush dd szCreateMonoBrush
|
|
imp_DestroyBrush dd szDestroyBrush
|
|
|
|
imp_ClearPixmap dd szClearPixmap
|
|
imp_Line dd szLine
|
|
imp_DrawRect dd szDrawRect
|
|
imp_FillRect dd szFillRect
|
|
imp_Blit dd szBlit
|
|
imp_TransparentBlit dd szTransparentBlit
|
|
imp_BlitAlpha dd szBlitAlpha
|
|
|
|
dd 0
|
|
|
|
|
|
;szBlockClip db 'BlockClip',0
|
|
;szLineClip db 'LineClip',0
|
|
;imp_BlockClip dd szBlockClip
|
|
;imp_LineClip dd szLineClip
|
|
|
|
|
|
align 4
|
|
|
|
load_pxlib:
|
|
mov eax, 68
|
|
mov ebx, 19
|
|
mov ecx, szPxlib
|
|
int 0x40
|
|
test eax, eax
|
|
jz .fail
|
|
|
|
mov edx, eax
|
|
mov esi, px_import
|
|
.import_loop:
|
|
lodsd
|
|
test eax, eax
|
|
jz .import_done
|
|
push edx
|
|
.import_find:
|
|
mov ebx, [edx]
|
|
test ebx, ebx
|
|
jz .fail ;import_not_found
|
|
|
|
push eax
|
|
@@:
|
|
mov cl, [eax]
|
|
cmp cl, [ebx]
|
|
jnz .import_find_next
|
|
|
|
test cl, cl
|
|
jz .import_found
|
|
|
|
inc eax
|
|
inc ebx
|
|
jmp @b
|
|
.import_find_next:
|
|
pop eax
|
|
add edx, 8
|
|
jmp .import_find
|
|
.import_found:
|
|
pop eax
|
|
mov eax, [edx+4]
|
|
mov [esi-4], eax
|
|
pop edx
|
|
jmp .import_loop
|
|
.import_done:
|
|
|
|
cmp word [imp_ver], REQ_DLL_VER
|
|
jb .fail
|
|
cmp word [imp_ver+2], REQ_DLL_VER
|
|
ja .fail
|
|
|
|
push DLL_ENTRY
|
|
call [imp_start]
|
|
test eax, eax
|
|
jz .fail
|
|
|
|
ret
|
|
.fail:
|
|
xor eax, eax
|
|
ret
|
|
|
|
align 4
|
|
_strrchr:
|
|
push ebp
|
|
mov ebp, esp
|
|
push edi
|
|
mov edi, [8+ebp]
|
|
mov ecx, -1
|
|
xor al, al
|
|
cld
|
|
repne
|
|
scasb
|
|
not ecx
|
|
dec edi
|
|
mov al, [12+ebp]
|
|
std
|
|
repne
|
|
scasb
|
|
cld
|
|
jne .failure
|
|
lea eax, [edi+1]
|
|
pop edi
|
|
pop ebp
|
|
ret
|
|
.failure:
|
|
xor eax, eax
|
|
pop edi
|
|
pop ebp
|
|
ret
|