kolibrios-fun/programs/develop/libraries/pixlib/pixlib.inc
Sergey Semyonov (Serge) 80c71dc52a blit from system memory in PIO mode
git-svn-id: svn://kolibrios.org@1002 a494cfbc-eb01-0410-851d-a64ba20cac60
2009-01-27 00:31:09 +00:00

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