Module: E:\source\win\scrnview\decomp.cpp Group: 'DGROUP' CONST,CONST2,_DATA,_BSS Segment: _TEXT PARA USE32 000005c4 bytes #define WIN32_LEAN_AND_MEAN #include "scrnview.hpp" #include "porttype.hpp" #include "strm.hpp" #include "decomp.hpp" #include static InStream *is=0; static uint8 *obitbuf=0; static uint32 owidth, oheight; static uint8 *cbitbuf=0; static uint32 cwidth, cheight; static uint8 *op, *cp; static void oc_framestart(uint8) { uint32 w,h; 0000 void near oc_framestart( char unsigned ): 0000 53 push ebx 0001 51 push ecx 0002 52 push edx 0003 56 push esi 0004 57 push edi 0005 55 push ebp 0006 89 e5 mov ebp,esp 0008 81 ec 0c 00 00 00 sub esp,0000000cH 000e 88 45 fc mov -4H[ebp],al is->read(&w,4); 0011 bb 04 00 00 00 mov ebx,00000004H 0016 8d 55 f8 lea edx,-8H[ebp] 0019 a1 00 00 00 00 mov eax,InStream near * near is 001e e8 00 00 00 00 call int near InStream::read( void near *, int ) is->read(&h,4); 0023 bb 04 00 00 00 mov ebx,00000004H 0028 8d 55 f4 lea edx,-0cH[ebp] 002b a1 00 00 00 00 mov eax,InStream near * near is 0030 e8 00 00 00 00 call int near InStream::read( void near *, int ) if(obitbuf==0 || owidth!=w || oheight!=h) { 0035 83 3d 00 00 00 00 00 cmp dword ptr char unsigned near * near obitbuf,00000000H 003c 74 0a je L1 003e a1 00 00 00 00 mov eax,long unsigned near owidth 0043 3b 45 f8 cmp eax,-8H[ebp] 0046 74 02 je L2 0048 eb 0a L1 jmp L3 004a a1 00 00 00 00 L2 mov eax,long unsigned near oheight 004f 3b 45 f4 cmp eax,-0cH[ebp] 0052 74 4d je L4 delete[] obitbuf; 0054 a1 00 00 00 00 L3 mov eax,char unsigned near * near obitbuf 0059 e8 00 00 00 00 call void near operator delete []( void near * ) owidth=w; 005e 8b 45 f8 mov eax,-8H[ebp] 0061 a3 00 00 00 00 mov long unsigned near owidth,eax oheight=h; 0066 8b 45 f4 mov eax,-0cH[ebp] 0069 a3 00 00 00 00 mov long unsigned near oheight,eax obitbuf=new uint8[owidth*oheight]; 006e a1 00 00 00 00 mov eax,long unsigned near owidth 0073 0f af 05 00 00 00 00 imul eax,long unsigned near oheight 007a e8 00 00 00 00 call void near * near operator new []( int unsigned ) 007f a3 00 00 00 00 mov char unsigned near * near obitbuf,eax memset(obitbuf,0,owidth*oheight); } 0084 a1 00 00 00 00 mov eax,long unsigned near owidth 0089 0f af 05 00 00 00 00 imul eax,long unsigned near oheight 0090 31 d2 xor edx,edx 0092 8b 0d 00 00 00 00 mov ecx,char unsigned near * near obitbuf 0098 89 c3 mov ebx,eax 009a 89 c8 mov eax,ecx 009c e8 00 00 00 00 call memset_ if(cbitbuf==0 || cwidth!=w || cheight!=h) { 00a1 83 3d 00 00 00 00 00 L4 cmp dword ptr char unsigned near * near cbitbuf,00000000H 00a8 74 0a je L5 00aa a1 00 00 00 00 mov eax,long unsigned near cwidth 00af 3b 45 f8 cmp eax,-8H[ebp] 00b2 74 02 je L6 00b4 eb 0a L5 jmp L7 00b6 a1 00 00 00 00 L6 mov eax,long unsigned near cheight 00bb 3b 45 f4 cmp eax,-0cH[ebp] 00be 74 30 je L8 delete[] cbitbuf; 00c0 a1 00 00 00 00 L7 mov eax,char unsigned near * near cbitbuf 00c5 e8 00 00 00 00 call void near operator delete []( void near * ) cwidth=w; 00ca 8b 45 f8 mov eax,-8H[ebp] 00cd a3 00 00 00 00 mov long unsigned near cwidth,eax cheight=h; 00d2 8b 45 f4 mov eax,-0cH[ebp] 00d5 a3 00 00 00 00 mov long unsigned near cheight,eax cbitbuf=new uint8[cwidth*cheight]; } 00da a1 00 00 00 00 mov eax,long unsigned near cwidth 00df 0f af 05 00 00 00 00 imul eax,long unsigned near cheight 00e6 e8 00 00 00 00 call void near * near operator new []( int unsigned ) 00eb a3 00 00 00 00 mov char unsigned near * near cbitbuf,eax op = obitbuf; 00f0 a1 00 00 00 00 L8 mov eax,char unsigned near * near obitbuf 00f5 a3 00 00 00 00 mov char unsigned near * near op,eax cp = cbitbuf; 00fa a1 00 00 00 00 mov eax,char unsigned near * near cbitbuf 00ff a3 00 00 00 00 mov char unsigned near * near cp,eax } 0104 89 ec mov esp,ebp 0106 5d pop ebp 0107 5f pop edi 0108 5e pop esi 0109 5a pop edx 010a 59 pop ecx 010b 5b pop ebx 010c c3 ret 010d 8d 40 00 lea eax,+0H[eax] static void skip(uint32 bytes) { 0110 void near skip( long unsigned ): 0110 53 push ebx 0111 51 push ecx 0112 52 push edx 0113 56 push esi 0114 57 push edi 0115 55 push ebp 0116 89 e5 mov ebp,esp 0118 81 ec 04 00 00 00 sub esp,00000004H 011e 89 45 fc mov -4H[ebp],eax memcpy(cp,op,bytes); 0121 8b 5d fc mov ebx,-4H[ebp] 0124 8b 15 00 00 00 00 mov edx,char unsigned near * near op 012a a1 00 00 00 00 mov eax,char unsigned near * near cp 012f e8 00 00 00 00 call memcpy_ op += bytes; 0134 8b 45 fc mov eax,-4H[ebp] 0137 01 05 00 00 00 00 add char unsigned near * near op,eax cp += bytes; 013d 8b 45 fc mov eax,-4H[ebp] 0140 01 05 00 00 00 00 add char unsigned near * near cp,eax } 0146 89 ec mov esp,ebp 0148 5d pop ebp 0149 5f pop edi 014a 5e pop esi 014b 5a pop edx 014c 59 pop ecx 014d 5b pop ebx 014e c3 ret 014f 90 nop static void oc_skip16(uint8 c) { 0150 void near oc_skip16( char unsigned ): 0150 53 push ebx 0151 51 push ecx 0152 52 push edx 0153 56 push esi 0154 57 push edi 0155 55 push ebp 0156 89 e5 mov ebp,esp 0158 81 ec 04 00 00 00 sub esp,00000004H 015e 88 45 fc mov -4H[ebp],al skip(c&0x0f); 0161 8a 45 fc mov al,-4H[ebp] 0164 24 0f and al,0fH 0166 25 ff 00 00 00 and eax,000000ffH 016b e8 00 00 00 00 call void near skip( long unsigned ) } 0170 89 ec mov esp,ebp 0172 5d pop ebp 0173 5f pop edi 0174 5e pop esi 0175 5a pop edx 0176 59 pop ecx 0177 5b pop ebx 0178 c3 ret 0179 8d 40 00 lea eax,+0H[eax] static void oc_skip256(uint8) { uint8 bytes; 017c void near oc_skip256( char unsigned ): 017c 53 push ebx 017d 51 push ecx 017e 52 push edx 017f 56 push esi 0180 57 push edi 0181 55 push ebp 0182 89 e5 mov ebp,esp 0184 81 ec 08 00 00 00 sub esp,00000008H 018a 88 45 fc mov -4H[ebp],al is->read(&bytes,1); 018d bb 01 00 00 00 mov ebx,00000001H 0192 8d 55 f8 lea edx,-8H[ebp] 0195 a1 00 00 00 00 mov eax,InStream near * near is 019a e8 00 00 00 00 call int near InStream::read( void near *, int ) skip(bytes); 019f 31 c0 xor eax,eax 01a1 8a 45 f8 mov al,-8H[ebp] 01a4 e8 00 00 00 00 call void near skip( long unsigned ) } 01a9 89 ec mov esp,ebp 01ab 5d pop ebp 01ac 5f pop edi 01ad 5e pop esi 01ae 5a pop edx 01af 59 pop ecx 01b0 5b pop ebx 01b1 c3 ret 01b2 8b c0 mov eax,eax static void oc_skip65536(uint8) { uint16 bytes; 01b4 void near oc_skip65536( char unsigned ): 01b4 53 push ebx 01b5 51 push ecx 01b6 52 push edx 01b7 56 push esi 01b8 57 push edi 01b9 55 push ebp 01ba 89 e5 mov ebp,esp 01bc 81 ec 08 00 00 00 sub esp,00000008H 01c2 88 45 fc mov -4H[ebp],al is->read(&bytes,2); 01c5 bb 02 00 00 00 mov ebx,00000002H 01ca 8d 55 f8 lea edx,-8H[ebp] 01cd a1 00 00 00 00 mov eax,InStream near * near is 01d2 e8 00 00 00 00 call int near InStream::read( void near *, int ) skip(bytes); 01d7 31 c0 xor eax,eax 01d9 66 8b 45 f8 mov ax,-8H[ebp] 01dd e8 00 00 00 00 call void near skip( long unsigned ) } 01e2 89 ec mov esp,ebp 01e4 5d pop ebp 01e5 5f pop edi 01e6 5e pop esi 01e7 5a pop edx 01e8 59 pop ecx 01e9 5b pop ebx 01ea c3 ret 01eb 90 nop static void oc_skip(uint8) { uint32 bytes; 01ec void near oc_skip( char unsigned ): 01ec 53 push ebx 01ed 51 push ecx 01ee 52 push edx 01ef 56 push esi 01f0 57 push edi 01f1 55 push ebp 01f2 89 e5 mov ebp,esp 01f4 81 ec 08 00 00 00 sub esp,00000008H 01fa 88 45 fc mov -4H[ebp],al is->read(&bytes,4); 01fd bb 04 00 00 00 mov ebx,00000004H 0202 8d 55 f8 lea edx,-8H[ebp] 0205 a1 00 00 00 00 mov eax,InStream near * near is 020a e8 00 00 00 00 call int near InStream::read( void near *, int ) skip(bytes); 020f 8b 45 f8 mov eax,-8H[ebp] 0212 e8 00 00 00 00 call void near skip( long unsigned ) } 0217 89 ec mov esp,ebp 0219 5d pop ebp 021a 5f pop edi 021b 5e pop esi 021c 5a pop edx 021d 59 pop ecx 021e 5b pop ebx 021f c3 ret static void nrd(uint32 bytes) { 0220 void near nrd( long unsigned ): 0220 53 push ebx 0221 51 push ecx 0222 52 push edx 0223 56 push esi 0224 57 push edi 0225 55 push ebp 0226 89 e5 mov ebp,esp 0228 81 ec 10 00 00 00 sub esp,00000010H 022e 89 45 fc mov -4H[ebp],eax sint32 bytesDecompressed=0; 0231 c7 45 f8 00 00 00 00 mov dword ptr -8H[ebp],00000000H while(bytesDecompressedread(); 0244 a1 00 00 00 00 mov eax,InStream near * near is 0249 e8 00 00 00 00 call int near InStream::read() 024e 89 45 f4 mov -0cH[ebp],eax if(c==255) { 0251 81 7d f4 ff 00 00 00 cmp dword ptr -0cH[ebp],000000ffH 0258 75 4c jne L10 uint8 count = (uint8)is->read(); 025a a1 00 00 00 00 mov eax,InStream near * near is 025f e8 00 00 00 00 call int near InStream::read() 0264 88 45 f0 mov -10H[ebp],al c = is->read(); 0267 a1 00 00 00 00 mov eax,InStream near * near is 026c e8 00 00 00 00 call int near InStream::read() 0271 89 45 f4 mov -0cH[ebp],eax bytesDecompressed += count; 0274 31 c0 xor eax,eax 0276 8a 45 f0 mov al,-10H[ebp] 0279 01 45 f8 add -8H[ebp],eax memset(cp,c,count); 027c 31 db xor ebx,ebx 027e 8a 5d f0 mov bl,-10H[ebp] 0281 8b 55 f4 mov edx,-0cH[ebp] 0284 a1 00 00 00 00 mov eax,char unsigned near * near cp 0289 e8 00 00 00 00 call memset_ op += count; 028e 31 c0 xor eax,eax 0290 8a 45 f0 mov al,-10H[ebp] 0293 01 05 00 00 00 00 add char unsigned near * near op,eax cp += count; 0299 31 c0 xor eax,eax 029b 8a 45 f0 mov al,-10H[ebp] 029e 01 05 00 00 00 00 add char unsigned near * near cp,eax } else { 02a4 eb 1d jmp L11 bytesDecompressed++; 02a6 8b 55 f8 L10 mov edx,-8H[ebp] 02a9 ff 45 f8 inc dword ptr -8H[ebp] op++; 02ac ff 05 00 00 00 00 inc dword ptr char unsigned near * near op *cp++ = (uint8)c; } 02b2 8b 15 00 00 00 00 mov edx,char unsigned near * near cp 02b8 ff 05 00 00 00 00 inc dword ptr char unsigned near * near cp 02be 8a 45 f4 mov al,-0cH[ebp] 02c1 88 02 mov [edx],al } 02c3 e9 70 ff ff ff L11 jmp L9 } 02c8 89 ec L12 mov esp,ebp 02ca 5d pop ebp 02cb 5f pop edi 02cc 5e pop esi 02cd 5a pop edx 02ce 59 pop ecx 02cf 5b pop ebx 02d0 c3 ret 02d1 8d 40 00 lea eax,+0H[eax] static void oc_data16(uint8 c) { 02d4 void near oc_data16( char unsigned ): 02d4 53 push ebx 02d5 51 push ecx 02d6 52 push edx 02d7 56 push esi 02d8 57 push edi 02d9 55 push ebp 02da 89 e5 mov ebp,esp 02dc 81 ec 04 00 00 00 sub esp,00000004H 02e2 88 45 fc mov -4H[ebp],al nrd(c&0x0f); 02e5 8a 45 fc mov al,-4H[ebp] 02e8 24 0f and al,0fH 02ea 25 ff 00 00 00 and eax,000000ffH 02ef e8 00 00 00 00 call void near nrd( long unsigned ) } 02f4 89 ec mov esp,ebp 02f6 5d pop ebp 02f7 5f pop edi 02f8 5e pop esi 02f9 5a pop edx 02fa 59 pop ecx 02fb 5b pop ebx 02fc c3 ret 02fd 8d 40 00 lea eax,+0H[eax] static void oc_data256(uint8) { uint8 bytes; 0300 void near oc_data256( char unsigned ): 0300 53 push ebx 0301 51 push ecx 0302 52 push edx 0303 56 push esi 0304 57 push edi 0305 55 push ebp 0306 89 e5 mov ebp,esp 0308 81 ec 08 00 00 00 sub esp,00000008H 030e 88 45 fc mov -4H[ebp],al is->read(&bytes,1); 0311 bb 01 00 00 00 mov ebx,00000001H 0316 8d 55 f8 lea edx,-8H[ebp] 0319 a1 00 00 00 00 mov eax,InStream near * near is 031e e8 00 00 00 00 call int near InStream::read( void near *, int ) nrd(bytes); 0323 31 c0 xor eax,eax 0325 8a 45 f8 mov al,-8H[ebp] 0328 e8 00 00 00 00 call void near nrd( long unsigned ) } 032d 89 ec mov esp,ebp 032f 5d pop ebp 0330 5f pop edi 0331 5e pop esi 0332 5a pop edx 0333 59 pop ecx 0334 5b pop ebx 0335 c3 ret 0336 8b c0 mov eax,eax static void oc_data65536(uint8) { uint16 bytes; 0338 void near oc_data65536( char unsigned ): 0338 53 push ebx 0339 51 push ecx 033a 52 push edx 033b 56 push esi 033c 57 push edi 033d 55 push ebp 033e 89 e5 mov ebp,esp 0340 81 ec 08 00 00 00 sub esp,00000008H 0346 88 45 fc mov -4H[ebp],al is->read(&bytes,2); 0349 bb 02 00 00 00 mov ebx,00000002H 034e 8d 55 f8 lea edx,-8H[ebp] 0351 a1 00 00 00 00 mov eax,InStream near * near is 0356 e8 00 00 00 00 call int near InStream::read( void near *, int ) nrd(bytes); 035b 31 c0 xor eax,eax 035d 66 8b 45 f8 mov ax,-8H[ebp] 0361 e8 00 00 00 00 call void near nrd( long unsigned ) } 0366 89 ec mov esp,ebp 0368 5d pop ebp 0369 5f pop edi 036a 5e pop esi 036b 5a pop edx 036c 59 pop ecx 036d 5b pop ebx 036e c3 ret 036f 90 nop static void oc_data(uint8) { uint32 bytes; 0370 void near oc_data( char unsigned ): 0370 53 push ebx 0371 51 push ecx 0372 52 push edx 0373 56 push esi 0374 57 push edi 0375 55 push ebp 0376 89 e5 mov ebp,esp 0378 81 ec 08 00 00 00 sub esp,00000008H 037e 88 45 fc mov -4H[ebp],al is->read(&bytes,4); 0381 bb 04 00 00 00 mov ebx,00000004H 0386 8d 55 f8 lea edx,-8H[ebp] 0389 a1 00 00 00 00 mov eax,InStream near * near is 038e e8 00 00 00 00 call int near InStream::read( void near *, int ) nrd(bytes); 0393 8b 45 f8 mov eax,-8H[ebp] 0396 e8 00 00 00 00 call void near nrd( long unsigned ) } 039b 89 ec mov esp,ebp 039d 5d pop ebp 039e 5f pop edi 039f 5e pop esi 03a0 5a pop edx 03a1 59 pop ecx 03a2 5b pop ebx 03a3 c3 ret static void decomp() { int c; 03a4 void near decomp(): 03a4 53 push ebx 03a5 51 push ecx 03a6 52 push edx 03a7 56 push esi 03a8 57 push edi 03a9 55 push ebp 03aa 89 e5 mov ebp,esp 03ac 81 ec 0c 00 00 00 sub esp,0000000cH while((c=is->read())>=0) { 03b2 a1 00 00 00 00 L13 mov eax,InStream near * near is 03b7 e8 00 00 00 00 call int near InStream::read() 03bc 89 45 fc mov -4H[ebp],eax 03bf 83 7d fc 00 cmp dword ptr -4H[ebp],00000000H 03c3 0f 8c 1c 01 00 00 jl L31 uint8 b=(uint8)c; 03c9 8a 45 fc mov al,-4H[ebp] 03cc 88 45 f8 mov -8H[ebp],al switch(b&0xf0) { case OC_FRAMESTART: 03cf 8a 45 f8 mov al,-8H[ebp] 03d2 24 f0 and al,0f0H 03d4 25 ff 00 00 00 and eax,000000ffH 03d9 89 45 f4 mov -0cH[ebp],eax 03dc e9 8c 00 00 00 jmp L24 oc_framestart(b); 03e1 31 c0 L14 xor eax,eax 03e3 8a 45 f8 mov al,-8H[ebp] 03e6 e8 00 00 00 00 call void near oc_framestart( char unsigned ) break; case OC_SKIP16: 03eb e9 f0 00 00 00 jmp L30 oc_skip16(b); 03f0 31 c0 L15 xor eax,eax 03f2 8a 45 f8 mov al,-8H[ebp] 03f5 e8 00 00 00 00 call void near oc_skip16( char unsigned ) break; case OC_SKIP256: 03fa e9 e1 00 00 00 jmp L30 oc_skip256(b); 03ff 31 c0 L16 xor eax,eax 0401 8a 45 f8 mov al,-8H[ebp] 0404 e8 00 00 00 00 call void near oc_skip256( char unsigned ) break; case OC_SKIP65536: 0409 e9 d2 00 00 00 jmp L30 oc_skip65536(b); 040e 31 c0 L17 xor eax,eax 0410 8a 45 f8 mov al,-8H[ebp] 0413 e8 00 00 00 00 call void near oc_skip65536( char unsigned ) break; case OC_SKIP: 0418 e9 c3 00 00 00 jmp L30 oc_skip(b); 041d 31 c0 L18 xor eax,eax 041f 8a 45 f8 mov al,-8H[ebp] 0422 e8 00 00 00 00 call void near oc_skip( char unsigned ) break; case OC_DATA16: 0427 e9 b4 00 00 00 jmp L30 oc_data16(b); 042c 31 c0 L19 xor eax,eax 042e 8a 45 f8 mov al,-8H[ebp] 0431 e8 00 00 00 00 call void near oc_data16( char unsigned ) break; case OC_DATA256: 0436 e9 a5 00 00 00 jmp L30 oc_data256(b); 043b 31 c0 L20 xor eax,eax 043d 8a 45 f8 mov al,-8H[ebp] 0440 e8 00 00 00 00 call void near oc_data256( char unsigned ) break; case OC_DATA65536: 0445 e9 96 00 00 00 jmp L30 oc_data65536(b); 044a 31 c0 L21 xor eax,eax 044c 8a 45 f8 mov al,-8H[ebp] 044f e8 00 00 00 00 call void near oc_data65536( char unsigned ) break; case OC_DATA: 0454 e9 87 00 00 00 jmp L30 oc_data(b); 0459 31 c0 L22 xor eax,eax 045b 8a 45 f8 mov al,-8H[ebp] 045e e8 00 00 00 00 call void near oc_data( char unsigned ) break; default: //Unknown operation code 0463 e9 78 00 00 00 jmp L30 return; } 0468 e9 78 00 00 00 L23 jmp L31 046d 83 7d f4 40 L24 cmp dword ptr -0cH[ebp],00000040H 0471 72 33 jb L27 0473 83 7d f4 40 cmp dword ptr -0cH[ebp],00000040H 0477 76 a4 jbe L18 0479 83 7d f4 60 cmp dword ptr -0cH[ebp],00000060H 047d 72 1f jb L26 047f 83 7d f4 60 cmp dword ptr -0cH[ebp],00000060H 0483 76 b6 jbe L20 0485 83 7d f4 70 cmp dword ptr -0cH[ebp],00000070H 0489 72 11 jb L25 048b 83 7d f4 70 cmp dword ptr -0cH[ebp],00000070H 048f 76 b9 jbe L21 0491 81 7d f4 80 00 00 00 cmp dword ptr -0cH[ebp],00000080H 0498 74 bf je L22 049a eb cc jmp L23 049c eb ca L25 jmp L23 049e 83 7d f4 50 L26 cmp dword ptr -0cH[ebp],00000050H 04a2 74 88 je L19 04a4 eb c2 jmp L23 04a6 83 7d f4 10 L27 cmp dword ptr -0cH[ebp],00000010H 04aa 72 28 jb L29 04ac 83 7d f4 10 cmp dword ptr -0cH[ebp],00000010H 04b0 0f 86 3a ff ff ff jbe L15 04b6 83 7d f4 20 cmp dword ptr -0cH[ebp],00000020H 04ba 72 16 jb L28 04bc 83 7d f4 20 cmp dword ptr -0cH[ebp],00000020H 04c0 0f 86 39 ff ff ff jbe L16 04c6 83 7d f4 30 cmp dword ptr -0cH[ebp],00000030H 04ca 0f 84 3e ff ff ff je L17 04d0 eb 96 jmp L23 04d2 eb 94 L28 jmp L23 04d4 83 7d f4 00 L29 cmp dword ptr -0cH[ebp],00000000H 04d8 0f 84 03 ff ff ff je L14 04de eb 88 jmp L23 } 04e0 e9 cd fe ff ff L30 jmp L13 } 04e5 89 ec L31 mov esp,ebp 04e7 5d pop ebp 04e8 5f pop edi 04e9 5e pop esi 04ea 5a pop edx 04eb 59 pop ecx 04ec 5b pop ebx 04ed c3 ret 04ee 8b c0 mov eax,eax void InitializeDecompressor(InStream *is) { 04f0 void near InitializeDecompressor( InStream near * ): 04f0 53 push ebx 04f1 51 push ecx 04f2 52 push edx 04f3 56 push esi 04f4 57 push edi 04f5 55 push ebp 04f6 89 e5 mov ebp,esp 04f8 81 ec 04 00 00 00 sub esp,00000004H 04fe 89 45 fc mov -4H[ebp],eax ::is = is; 0501 8b 45 fc mov eax,-4H[ebp] 0504 a3 00 00 00 00 mov InStream near * near is,eax } 0509 89 ec mov esp,ebp 050b 5d pop ebp 050c 5f pop edi 050d 5e pop esi 050e 5a pop edx 050f 59 pop ecx 0510 5b pop ebx 0511 c3 ret 0512 8b c0 mov eax,eax void FinalizeDecompressor() { 0514 void near FinalizeDecompressor(): 0514 53 push ebx 0515 51 push ecx 0516 52 push edx 0517 56 push esi 0518 57 push edi 0519 55 push ebp 051a 89 e5 mov ebp,esp 051c 81 ec 00 00 00 00 sub esp,00000000H if(obitbuf) { 0522 83 3d 00 00 00 00 00 cmp dword ptr char unsigned near * near obitbuf,00000000H 0529 74 14 je L32 delete[] obitbuf; 052b a1 00 00 00 00 mov eax,char unsigned near * near obitbuf 0530 e8 00 00 00 00 call void near operator delete []( void near * ) obitbuf = 0; } 0535 c7 05 00 00 00 00 00 00 00 00 mov dword ptr char unsigned near * near obitbuf,00000000H if(cbitbuf) { 053f 83 3d 00 00 00 00 00 L32 cmp dword ptr char unsigned near * near cbitbuf,00000000H 0546 74 14 je L33 delete[] cbitbuf; 0548 a1 00 00 00 00 mov eax,char unsigned near * near cbitbuf 054d e8 00 00 00 00 call void near operator delete []( void near * ) cbitbuf = 0; } 0552 c7 05 00 00 00 00 00 00 00 00 mov dword ptr char unsigned near * near cbitbuf,00000000H } 055c 5d L33 pop ebp 055d 5f pop edi 055e 5e pop esi 055f 5a pop edx 0560 59 pop ecx 0561 5b pop ebx 0562 c3 ret 0563 90 nop void Decompress(int *width, int *height, char **buf) { 0564 void near Decompress( int near *, int near *, char near * near * ): 0564 51 push ecx 0565 56 push esi 0566 57 push edi 0567 55 push ebp 0568 89 e5 mov ebp,esp 056a 81 ec 0c 00 00 00 sub esp,0000000cH 0570 89 45 f4 mov -0cH[ebp],eax 0573 89 55 f8 mov -8H[ebp],edx 0576 89 5d fc mov -4H[ebp],ebx cwidth = *width; 0579 8b 45 f4 mov eax,-0cH[ebp] 057c 8b 00 mov eax,[eax] 057e a3 00 00 00 00 mov long unsigned near cwidth,eax cheight = *height; 0583 8b 45 f8 mov eax,-8H[ebp] 0586 8b 00 mov eax,[eax] 0588 a3 00 00 00 00 mov long unsigned near cheight,eax cbitbuf = (uint8*)*buf; 058d 8b 45 fc mov eax,-4H[ebp] 0590 8b 00 mov eax,[eax] 0592 a3 00 00 00 00 mov char unsigned near * near cbitbuf,eax decomp(); 0597 e8 00 00 00 00 call void near decomp() *width = cwidth; 059c 8b 15 00 00 00 00 mov edx,long unsigned near cwidth 05a2 8b 45 f4 mov eax,-0cH[ebp] 05a5 89 10 mov [eax],edx *height = cheight; 05a7 8b 15 00 00 00 00 mov edx,long unsigned near cheight 05ad 8b 45 f8 mov eax,-8H[ebp] 05b0 89 10 mov [eax],edx *buf = (char*)cbitbuf; 05b2 8b 15 00 00 00 00 mov edx,char unsigned near * near cbitbuf 05b8 8b 45 fc mov eax,-4H[ebp] 05bb 89 10 mov [eax],edx } 05bd 89 ec mov esp,ebp 05bf 5d pop ebp 05c0 5f pop edi 05c1 5e pop esi 05c2 59 pop ecx 05c3 c3 ret No disassembly errors ------------------------------------------------------------ Segment: _BSS DWORD USE32 00000024 bytes No disassembly errors ------------------------------------------------------------ Segment: $$SYMBOLS BYTE USE16 000003d0 bytes 0000 0b 12 - .. 0002 00 00 00 00 00 00 DP InStream near * near is 0008 34 69 73 10 12 - 4is.. 000d 00 00 00 00 00 00 DP char unsigned near * near obitbuf 0013 35 6f 62 69 74 62 75 66 - 5obitbuf 001b 0f 12 - .. 001d 00 00 00 00 00 00 DP long unsigned near owidth 0023 1a 6f 77 69 64 74 68 10 - .owidth. 002b 12 - . 002c 00 00 00 00 00 00 DP long unsigned near oheight 0032 1a 6f 68 65 69 67 68 74 - .oheight 003a 10 12 - .. 003c 00 00 00 00 00 00 DP char unsigned near * near cbitbuf 0042 35 63 62 69 74 62 75 66 - 5cbitbuf 004a 0f 12 - .. 004c 00 00 00 00 00 00 DP long unsigned near cwidth 0052 1a 63 77 69 64 74 68 10 - .cwidth. 005a 12 - . 005b 00 00 00 00 00 00 DP long unsigned near cheight 0061 1a 63 68 65 69 67 68 74 - .cheight 0069 0b 12 - .. 006b 00 00 00 00 00 00 DP char unsigned near * near op 0071 35 6f 70 0b 12 - 5op.. 0076 00 00 00 00 00 00 DP char unsigned near * near cp 007c 35 63 70 08 32 - 5cp.2 0081 00 00 00 00 00 00 DP void near oc_framestart( char unsigned ) 0087 24 24 00 00 00 00 0d 01 - $$...... 008f 00 00 00 00 0e 09 18 00 - ........ 0097 00 00 36 00 01 30 1c 6f - ..6..0.o 009f 63 5f 66 72 61 6d 65 73 - c_frames 00a7 74 61 72 74 08 11 10 fc - tart.... 00af 1e 2e 23 30 06 11 10 f8 - ..#0.... 00b7 1a 77 06 11 10 f4 1a 68 - .w.....h 00bf 1b 24 10 01 00 00 3f 00 - .$....?. 00c7 00 00 00 00 0e 09 18 00 - ........ 00cf 00 00 37 00 01 30 1c 73 - ..7..0.s 00d7 6b 69 70 0a 11 10 fc 1a - kip..... 00df 62 79 74 65 73 20 24 50 - bytes $P 00e7 01 00 00 29 00 00 00 00 - ...).... 00ef 00 0e 09 18 00 00 00 36 - .......6 00f7 00 01 30 1c 6f 63 5f 73 - ..0.oc_s 00ff 6b 69 70 31 36 06 11 10 - kip16... 0107 fc 1e 63 21 24 7c 01 00 - ..c!$|.. 010f 00 36 00 00 00 00 00 0e - .6...... 0117 09 18 00 00 00 36 00 01 - .....6.. 011f 30 1c 6f 63 5f 73 6b 69 - 0.oc_ski 0127 70 32 35 36 08 11 10 fc - p256.... 012f 1e 2e 23 31 0a 11 10 f8 - ..#1.... 0137 1e 62 79 74 65 73 23 24 - .bytes#$ 013f b4 01 00 00 37 00 00 00 - ....7... 0147 00 00 0e 09 18 00 00 00 - ........ 014f 36 00 01 30 1c 6f 63 5f - 6..0.oc_ 0157 73 6b 69 70 36 35 35 33 - skip6553 015f 36 08 11 10 fc 1e 2e 23 - 6......# 0167 32 0a 11 10 f8 1c 62 79 - 2.....by 016f 74 65 73 1e 24 ec 01 00 - tes.$... 0177 00 34 00 00 00 00 00 0e - .4...... 017f 09 18 00 00 00 36 00 01 - .....6.. 0187 30 1c 6f 63 5f 73 6b 69 - 0.oc_ski 018f 70 08 11 10 fc 1e 2e 23 - p......# 0197 33 0a 11 10 f8 1a 62 79 - 3.....by 019f 74 65 73 0c 23 5a 02 00 - tes.#Z.. 01a7 00 4a 00 00 00 b8 01 0a - .J...... 01af 11 10 f0 1e 63 6f 75 6e - ....coun 01b7 74 0c 23 5a 02 00 00 4a - t.#Z...J 01bf 00 00 00 c4 01 0c 23 44 - ......#D 01c7 02 00 00 7f 00 00 00 d6 - ........ 01cf 01 06 11 10 f4 0c 63 0c - ......c. 01d7 23 44 02 00 00 7f 00 00 - #D...... 01df 00 e2 01 1a 24 20 02 00 - ....$ .. 01e7 00 b1 00 00 00 00 00 0e - ........ 01ef 09 18 00 00 00 37 00 01 - .....7.. 01f7 30 1c 6e 72 64 0a 11 10 - 0.nrd... 01ff fc 1a 62 79 74 65 73 16 - ..bytes. 0207 11 10 f8 19 62 79 74 65 - ....byte 020f 73 44 65 63 6f 6d 70 72 - sDecompr 0217 65 73 73 65 64 20 24 d4 - essed $. 021f 02 00 00 29 00 00 00 00 - ...).... 0227 00 0e 09 18 00 00 00 36 - .......6 022f 00 01 30 1c 6f 63 5f 64 - ..0.oc_d 0237 61 74 61 31 36 06 11 10 - ata16... 023f fc 1e 63 21 24 00 03 00 - ..c!$... 0247 00 36 00 00 00 00 00 0e - .6...... 024f 09 18 00 00 00 36 00 01 - .....6.. 0257 30 1c 6f 63 5f 64 61 74 - 0.oc_dat 025f 61 32 35 36 08 11 10 fc - a256.... 0267 1e 2e 23 34 0a 11 10 f8 - ..#4.... 026f 1e 62 79 74 65 73 23 24 - .bytes#$ 0277 38 03 00 00 37 00 00 00 - 8...7... 027f 00 00 0e 09 18 00 00 00 - ........ 0287 36 00 01 30 1c 6f 63 5f - 6..0.oc_ 028f 64 61 74 61 36 35 35 33 - data6553 0297 36 08 11 10 fc 1e 2e 23 - 6......# 029f 35 0a 11 10 f8 1c 62 79 - 5.....by 02a7 74 65 73 1e 24 70 03 00 - tes.$p.. 02af 00 34 00 00 00 00 00 0e - .4...... 02b7 09 18 00 00 00 36 00 01 - .....6.. 02bf 30 1c 6f 63 5f 64 61 74 - 0.oc_dat 02c7 61 08 11 10 fc 1e 2e 23 - a......# 02cf 36 0a 11 10 f8 1a 62 79 - 6.....by 02d7 74 65 73 0c 23 e1 03 00 - tes.#... 02df 00 8c 00 00 00 e6 02 0c - ........ 02e7 23 e1 03 00 00 8c 00 00 - #....... 02ef 00 f2 02 0c 23 c9 03 00 - ....#... 02f7 00 17 01 00 00 04 03 06 - ........ 02ff 11 10 f8 1e 62 0c 23 c9 - ....b.#. 0307 03 00 00 17 01 00 00 10 - ........ 030f 03 1b 24 a4 03 00 00 4a - ..$....J 0317 01 00 00 00 00 0e 09 18 - ........ 031f 00 00 00 22 00 00 64 65 - ..."..de 0327 63 6f 6d 70 06 11 10 fc - comp.... 032f 0c 63 2d 24 f0 04 00 00 - .c-$.... 0337 22 00 00 00 00 00 0e 09 - "....... 033f 18 00 00 00 38 00 01 30 - ....8..0 0347 1c 49 6e 69 74 69 61 6c - .Initial 034f 69 7a 65 44 65 63 6f 6d - izeDecom 0357 70 72 65 73 73 6f 72 07 - pressor. 035f 11 10 fc 34 69 73 29 24 - ...4is)$ 0367 14 05 00 00 4f 00 00 00 - ....O... 036f 00 00 0e 07 18 00 00 00 - ........ 0377 22 00 00 46 69 6e 61 6c - "..Final 037f 69 7a 65 44 65 63 6f 6d - izeDecom 0387 70 72 65 73 73 6f 72 25 - pressor% 038f 24 64 05 00 00 60 00 00 - $d...`.. 0397 00 00 00 0c 07 10 00 00 - ........ 039f 00 3c 00 03 30 1c 30 1f - .<..0.0. 03a7 30 1d 44 65 63 6f 6d 70 - 0.Decomp 03af 72 65 73 73 0a 11 10 f4 - ress.... 03b7 39 77 69 64 74 68 0b 11 - 9width.. 03bf 10 f8 39 68 65 69 67 68 - ..9heigh 03c7 74 08 11 10 fc 3b 62 75 - t....;bu 03cf 66 - f No disassembly errors ------------------------------------------------------------ Segment: $$TYPES BYTE USE16 000002c1 bytes 0000 06 13 c1 02 00 00 06 11 - ........ 0008 65 6e 75 6d 07 11 75 6e - enum..un 0010 69 6f 6e 08 11 73 74 72 - ion..str 0018 75 63 74 07 11 63 6c 61 - uct..cla 0020 73 73 0c 10 11 5f 5f 73 - ss...__s 0028 65 67 6d 65 6e 74 07 10 - egment.. 0030 10 63 68 61 72 03 10 00 - .char... 0038 03 10 10 03 10 11 03 10 - ........ 0040 01 03 10 11 06 10 03 69 - .......i 0048 6e 74 0f 10 13 75 6e 73 - nt...uns 0050 69 67 6e 65 64 20 69 6e - igned in 0058 74 03 10 03 03 10 13 03 - t....... 0060 10 23 03 10 27 03 10 30 - .#..'..0 0068 03 46 12 04 72 13 00 03 - .F..r... 0070 46 14 08 60 03 00 0c 00 - F..`.... 0078 00 00 0f 67 01 84 22 08 - ...g..". 0080 69 0d 5f 5f 69 6e 64 65 - i.__inde 0088 78 0f 67 01 84 22 04 69 - x.g..".i 0090 0d 5f 5f 64 65 6c 74 61 - .__delta 0098 09 67 01 6b 15 5f 5f 66 - .g.k.__f 00a0 6e 0a 12 00 0d 73 69 7a - n....siz 00a8 65 5f 74 0b 12 00 09 77 - e_t....w 00b0 63 68 61 72 5f 74 0a 12 - char_t.. 00b8 00 0e 73 69 6e 74 33 32 - ..sint32 00c0 0a 12 00 0f 75 69 6e 74 - ....uint 00c8 33 32 0a 12 00 0a 73 69 - 32....si 00d0 6e 74 31 36 0a 12 00 0b - nt16.... 00d8 75 69 6e 74 31 36 09 12 - uint16.. 00e0 00 07 73 69 6e 74 38 09 - ..sint8. 00e8 12 00 08 75 69 6e 74 38 - ...uint8 00f0 09 12 00 07 73 63 68 61 - ....scha 00f8 72 09 12 00 08 75 63 68 - r....uch 0100 61 72 03 46 08 04 72 12 - ar.F..r. 0108 00 03 46 22 03 46 23 0d - ..F".F#. 0110 12 04 80 32 49 6e 53 74 - ...2InSt 0118 72 65 61 6d 03 48 25 05 - ream.H%. 0120 72 26 01 0c 06 72 0c 02 - r&...r.. 0128 13 0c 04 72 13 00 03 46 - ...r...F 0130 06 05 72 0c 01 2a 04 72 - ..r..*.r 0138 0c 00 06 72 0c 02 13 0c - ...r.... 0140 04 72 0c 00 03 48 25 03 - .r...H%. 0148 48 25 05 72 2f 01 30 08 - H%.r/.0. 0150 60 0f 00 14 00 00 00 14 - `....... 0158 67 02 21 - g.! 015b 00 00 00 00 00 00 DP InStream near & near InStream::operator =( InStream const near & ) 0161 31 6f 70 65 72 61 74 6f - 1operato 0169 72 3d 13 67 02 21 - r=.g.! 016f 00 00 00 00 00 00 DP near InStream::InStream( InStream const near & ) 0175 31 49 6e 53 74 72 65 61 - 1InStrea 017d 6d 1c 67 02 93 22 10 69 - m.g..".i 0185 61 22 10 69 61 21 - a".ia! 018b 00 00 00 00 00 00 DP void near oc_framestart( char unsigned ) 0191 68 01 66 2c 65 72 72 6f - h.f,erro 0199 72 0f 67 02 21 - r.g.! 019e 00 00 00 00 00 00 DP int near InStream::read() 01a4 2e 72 65 61 64 0f 67 02 - .read.g. 01ac 21 - ! 01ad 00 00 00 00 00 00 DP int near InStream::read( void near *, int ) 01b3 2d 72 65 61 64 1c 67 02 - -read.g. 01bb 93 22 10 69 61 22 0c 69 - .".ia".i 01c3 61 21 - a! 01c5 00 00 00 00 00 00 DP void near oc_framestart( char unsigned ) 01cb 68 01 66 2c 63 6c 6f 73 - h.f,clos 01d3 65 1b 67 02 93 22 10 69 - e.g..".i 01db 61 22 08 69 61 21 - a".ia! 01e1 00 00 00 00 00 00 DP void near oc_framestart( char unsigned ) 01e7 68 01 66 2b 6f 70 65 6e - h.f+open 01ef 20 67 02 93 22 10 69 61 - g..".ia 01f7 22 04 69 61 21 - ".ia! 01fc 00 00 00 00 00 00 DP void near oc_framestart( char unsigned ) 0202 68 01 66 29 7e 49 6e 53 - h.f)~InS 020a 74 72 65 61 6d 21 67 04 - tream!g. 0212 93 22 10 69 61 22 00 69 - .".ia".i 021a 61 21 - a! 021c 00 00 00 00 00 00 DP void near oc_framestart( char unsigned ) 0222 68 01 66 28 66 69 6c 6c - h.f(fill 022a 42 75 66 66 65 72 13 67 - Buffer.g 0232 04 21 - .! 0234 00 00 00 00 00 00 DP near InStream::InStream( int ) 023a 27 49 6e 53 74 72 65 61 - 'InStrea 0242 6d 0f 67 01 84 22 10 69 - m.g..".i 024a 24 5f 5f 76 66 70 74 72 - $__vfptr 0252 0a 67 08 84 22 0c 69 0c - .g..".i. 025a 72 70 15 67 08 84 22 08 - rp.g..". 0262 69 0c 62 79 74 65 73 69 - i.bytesi 026a 6e 62 75 66 66 65 72 12 - nbuffer. 0272 67 08 84 22 04 69 0c 62 - g..".i.b 027a 75 66 66 65 72 73 69 7a - uffersiz 0282 65 0b 67 08 6b 21 62 75 - e.g.k!bu 028a 66 66 65 72 0c 12 00 25 - ffer...% 0292 49 6e 53 74 72 65 61 6d - InStream 029a 03 46 33 03 46 1e 05 72 - .F3.F..r 02a2 12 01 1e 05 72 12 01 1a - ....r... 02aa 05 72 12 01 34 03 46 0c - .r..4.F. 02b2 03 46 06 03 46 3a 07 72 - .F..F:.r 02ba 12 03 39 39 3b 02 14 - ..99;.. No disassembly errors ------------------------------------------------------------ Segment: $$TYPES BYTE USE16 00000028 bytes 0000 00 00 01 00 00 00 45 3a - ......E: 0008 5c 73 6f 75 72 63 65 5c - \source\ 0010 77 69 6e 5c 73 63 72 6e - win\scrn 0018 76 69 65 77 5c 64 65 63 - view\dec 0020 6f 6d 70 2e 63 70 70 00 - omp.cpp. No disassembly errors ------------------------------------------------------------