Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1568 → Rev 1569

/programs/develop/libraries/libs-dev/libimg/libimg.asm
38,6 → 38,7
include 'tga/tga.asm'
include 'z80/z80.asm'
include 'ico_cur/ico_cur.asm'
include 'pcx/pcx.asm'
 
;;================================================================================================;;
proc lib_init ;///////////////////////////////////////////////////////////////////////////////////;;
1690,6 → 1691,7
.png dd img.is.png, img.decode.png, img.encode.png
.jpg dd img.is.jpg, img.decode.jpg, img.encode.jpg
.tga dd img.is.tga, img.decode.tga, img.encode.tga
.pcx dd img.is.pcx, img.decode.pcx, img.encode.pcx
.z80 dd img.is.z80, img.decode.z80, img.encode.z80 ;this must be the last entry as there are no
;signatures in z80 screens at all
dd 0
/programs/develop/libraries/libs-dev/libimg/pcx/pcx.asm
0,0 → 1,232
;;================================================================================================;;
;;//// pcx.asm //// (c) dunkaist, 2010 ///////////////////////////////////////////////////////////;;
;;================================================================================================;;
;; ;;
;; This file is part of Common development libraries (Libs-Dev). ;;
;; ;;
;; Libs-Dev is free software: you can redistribute it and/or modify it under the terms of the GNU ;;
;; Lesser General Public License as published by the Free Software Foundation, either version 2.1 ;;
;; of the License, or (at your option) any later version. ;;
;; ;;
;; Libs-Dev is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without ;;
;; even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;
;; Lesser General Public License for more details. ;;
;; ;;
;; You should have received a copy of the GNU Lesser General Public License along with Libs-Dev. ;;
;; If not, see <http://www.gnu.org/licenses/>. ;;
;; ;;
;;================================================================================================;;
 
include 'pcx.inc'
;include '../../../../system/board/trunk/debug.inc'
 
;;================================================================================================;;
proc img.is.pcx _data, _length ;//////////////////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Determine if raw data could be decoded (is in Targa format) ;;
;;------------------------------------------------------------------------------------------------;;
;> _data = raw data as read from file/stream ;;
;> _length = data length ;;
;;------------------------------------------------------------------------------------------------;;
;< eax = false / true ;;
;;================================================================================================;;
 
push ecx edi
xor eax, eax
 
mov edi, [_data]
 
cmp [edi+pcx_header.magic_number], 10
jne .is_not_pcx
cmp [edi+pcx_header.version], 5
jne .is_not_pcx
cmp [edi+pcx_header.encoding], 1
jne .is_not_pcx
; cmp [esi+pcx_header.reserved], 1
; jne .is_not_pcx
 
add edi, pcx_header.filler
xor al, al
mov ecx, 58
cld
repe scasb
test ecx, ecx
jnz .is_not_pcx
 
.is_pcx:
;pusha
;dps 'is_pcx'
;newline
;popa
inc eax
pop edi ecx
ret
 
.is_not_pcx:
;pusha
;dps 'is_not_pcx'
;newline
;popa
pop edi ecx
ret
 
endp
 
;;================================================================================================;;
proc img.decode.pcx _data, _length, _options ;////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Decode data into image if it contains correctly formed raw data in Targa format ;;
;;------------------------------------------------------------------------------------------------;;
;> _data = raw data as read from file/stream ;;
;> _length = data length ;;
;;------------------------------------------------------------------------------------------------;;
;< eax = 0 (error) or pointer to image ;;
;;================================================================================================;;
locals
; IMGwidth dd ?
; IMGheight dd ?
; IMGbpp dd ?
buf rb 1
nplanes rd 1
xsize rw 1
ysize rw 1
stxsize rw 1
stysize rw 1
total_bpl rd 1
line_begin rd 1
retvalue rd 1
 
endl
 
pusha
 
mov esi, [_data]
 
xor eax, eax
mov al, byte[esi+pcx_header.nplanes]
mov [nplanes], eax
mul word[esi+pcx_header.bpl]
mov [total_bpl], eax
 
movzx eax, word[esi+pcx_header.xmax]
inc ax
sub ax, word[esi+pcx_header.xmin]
mov [xsize], ax
 
movzx ebx, word[esi+pcx_header.ymax]
inc bx
sub bx, word[esi+pcx_header.ymin]
mov [ysize], bx
 
stdcall img.create, eax, ebx, Image.bpp24
mov [retvalue], eax
test eax, eax
jz .quit
 
movzx ebx, [xsize]
movzx ecx, [ysize]
mov edx, [eax+Image.Data]
 
rol ebx, 16
or ebx, ecx
xor ebx, [edx]
mov [eax+Image.Checksum], ebx
 
 
mov esi, [_data]
add esi, 128
mov edi, [retvalue]
mov edi, [edi+Image.Data]
add edi, 2
mov [line_begin], edi
mov ebx, [total_bpl]
 
.begin:
mov eax, [_data]
mov ax, word[eax+pcx_header.bpl]
.decode:
mov dl, byte[esi]
inc esi
mov [buf], dl
and dl, 0xC0
cmp dl, 0xC0
jne @f
mov dl, byte[buf]
and dl, 0x3F
mov dh, [esi]
inc esi
 
.write_sequence:
mov [edi], dh
dec ax
dec ebx
add edi, [nplanes]
dec dl
test dl, dl
jnz .write_sequence
 
test ax, ax
jz .end_color_line
jmp .decode
@@:
mov dl, byte[buf]
mov [edi], dl
add edi, [nplanes]
dec ebx
dec ax
jz .end_color_line
jmp .decode
 
.end_color_line:
test ebx, ebx
jz .end_full_line
dec [line_begin]
mov edi, [line_begin]
jmp .begin
 
.end_full_line:
dec word[ysize]
jz .quit
mov ebx, [total_bpl]
add edi, 2
mov [line_begin], edi
jmp .begin
 
.quit:
popa
mov eax, [retvalue]
ret
endp
 
;;================================================================================================;;
proc img.encode.pcx _img, _p_length, _options ;///////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Encode image into raw data in Targa format ;;
;;------------------------------------------------------------------------------------------------;;
;> _img = pointer to image ;;
;;------------------------------------------------------------------------------------------------;;
;< eax = 0 (error) or pointer to encoded data ;;
;< _p_length = encoded data length ;;
;;================================================================================================;;
xor eax, eax
ret
endp
 
 
;;================================================================================================;;
;;////////////////////////////////////////////////////////////////////////////////////////////////;;
;;================================================================================================;;
;! Below are private procs you should never call directly from your code ;;
;;================================================================================================;;
;;////////////////////////////////////////////////////////////////////////////////////////////////;;
;;================================================================================================;;
 
;;================================================================================================;;
;;////////////////////////////////////////////////////////////////////////////////////////////////;;
;;================================================================================================;;
;! Below is private data you should never use directly from your code ;;
;;================================================================================================;;
;;////////////////////////////////////////////////////////////////////////////////////////////////;;
;;================================================================================================;;
 
;
/programs/develop/libraries/libs-dev/libimg/pcx/pcx.inc
0,0 → 1,37
;;================================================================================================;;
;;//// pcx.inc //// (c) dunkaist, 2010 ///////////////////////////////////////////////////////////;;
;;================================================================================================;;
;; ;;
;; This file is part of Common development libraries (Libs-Dev). ;;
;; ;;
;; Libs-Dev is free software: you can redistribute it and/or modify it under the terms of the GNU ;;
;; Lesser General Public License as published by the Free Software Foundation, either version 2.1 ;;
;; of the License, or (at your option) any later version. ;;
;; ;;
;; Libs-Dev is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without ;;
;; even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;
;; Lesser General Public License for more details. ;;
;; ;;
;; You should have received a copy of the GNU Lesser General Public License along with Libs-Dev. ;;
;; If not, see <http://www.gnu.org/licenses/>. ;;
;; ;;
;;================================================================================================;;
 
struct pcx_header
magic_number rb 1
version rb 1
encoding rb 1
bpp rb 1
xmin rw 1
ymin rw 1
xmax rw 1
ymax rw 1
hres rw 1
vres rw 1
colormap rb 48
reserved rb 1
nplanes rb 1
bpl rw 1
palette_info rw 1
filler rb 58
ends