home *** CD-ROM | disk | FTP | other *** search
-
- option casemap:none
- .486p
- .model flat,stdcall
-
- public Decode_Small
- public GetDecodeSmallFuncSize
-
- Decode_Small PROTO :DWORD, :DWORD, :DWORD
- GetDecodeSmallFuncSize PROTO
-
- include Codec_0_EntryPoints.inc
- .data
- db 'Codec0',0
-
- .code
- _DecodeSmall:
- Decode_Small proc stdcall uses ebx esi edi lpvSource:DWORD, lpvDest:DWORD, lpvExtra:DWORD
-
- mov esi,lpvSource
- cmp ([esi]+CODEC_0_HEADER.dwSignature),CODEC_0_SIGNATURE
- jnz _ret_error
-
- mov edi,lpvDest
- mov ecx,([esi]+CODEC_0_HEADER.dwDecodedSize)
- add esi,size CODEC_0_HEADER
-
- push ecx ; save for return value
-
- ; fast movs (dwords then remaining bytes)
- mov eax,ecx
- sar ecx,2
- rep movsd
- add ecx,eax
- and ecx,3
- rep movsb
-
- pop eax ; eax=decoded size
- ret
-
- _ret_error:
- xor eax,eax
- ret
- Decode_Small endp
- _DecodeSmall_e:
-
- GetDecodeSmallFuncSize proc stdcall
- mov eax,offset _DecodeSmall_e-offset _DecodeSmall
- ret
- GetDecodeSmallFuncSize endp
-
- END