Module: E:\source\win\scrnview\comp.cpp Group: 'DGROUP' CONST,CONST2,_DATA,_BSS Segment: _TEXT PARA USE32 00000558 bytes #include #include #include "strm.hpp" #include "scrnview.hpp" #include "comp.hpp" #include "porttype.hpp" static OutStream *os=0; static char *obitbuf=0; static unsigned owidth = 0; static unsigned oheight = 0; /*void *memcmp2(const void *buf1, const void *buf2, unsigned bytes) { const char *b1=(const char*)buf1; const char *b2=(const char*)buf2; while(bytes--) { if(*b1!=*b2) return (void*)b1; b1++,b2++; } return b1; }*/ void *memcmp2(const void *buf1, const void *buf2, unsigned bytes); #pragma aux memcmp2= \ ".386p "\ " jecxz end "\ " mov ebx,ecx "\ " shr ecx,2 "\ " repe cmpsd "\ " je finishoff "\ " sub esi,4 "\ " sub edi,4 "\ " mov ecx,4 "\ " repe cmpsb "\ " je end "\ " dec esi "\ " jmp end "\ "finishoff: "\ " mov ecx,ebx "\ " and ecx,3 "\ " jecxz end "\ " repe cmpsb "\ " je end "\ " dec esi "\ "end: "\ parm [esi] [edi] [ecx] \ modify [edi ecx ebx] \ value [esi]; /*void *memcnmp2(const void *buf1, const void *buf2, unsigned bytes) { const char *b1=(const char*)buf1; const char *b2=(const char*)buf2; while(bytes--) { if(*b1==*b2) return (void*)b1; b1++,b2++; } return b1; }*/ void *memncmp2(const void *buf1, const void *buf2, unsigned bytes); #pragma aux memncmp2= \ ".386p" \ "repne cmpsb" \ "jne end"\ "dec esi"\ "end:"\ parm [esi] [edi] [ecx] \ modify [edi ecx] \ value [esi]; static void nrc(const void *src, int bytes) { //run-length compress data const uint8 *s=(const uint8*)src; 0000 void near nrc( void const near *, int ): 0000 53 push ebx 0001 51 push ecx 0002 56 push esi 0003 83 ec 10 sub esp,00000010H 0006 89 d1 mov ecx,edx 0008 ba 00 01 00 00 mov edx,00000100H uint16 last=256; 000d 89 c6 mov esi,eax uint8 count=0; 000f 30 db xor bl,bl 0011 66 89 54 24 08 mov +8H[esp],dx while(bytes--) { 0016 49 L1 dec ecx 0017 83 f9 ff cmp ecx,0ffffffffH 001a 0f 84 9b 00 00 00 je L7 uint8 c=*s++; 0020 8a 06 mov al,[esi] 0022 88 44 24 0c mov +0cH[esp],al if(count==255 || c!=last) { //flush 0026 31 c0 xor eax,eax 0028 88 d8 mov al,bl 002a 46 inc esi 002b 3d ff 00 00 00 cmp eax,000000ffH 0030 74 15 je L2 0032 31 d2 xor edx,edx 0034 31 c0 xor eax,eax 0036 8a 54 24 0c mov dl,+0cH[esp] 003a 66 8b 44 24 08 mov ax,+8H[esp] 003f 39 c2 cmp edx,eax 0041 0f 84 6d 00 00 00 je L6 if(last!=256) { 0047 31 c0 L2 xor eax,eax 0049 66 8b 44 24 08 mov ax,+8H[esp] 004e 3d 00 01 00 00 cmp eax,00000100H 0053 74 4d je L5 if(count>2 || last==255) { //escape + count + byte uint8 buf[3]; 0055 31 d2 xor edx,edx 0057 88 da mov dl,bl 0059 83 fa 02 cmp edx,00000002H 005c 7f 07 jg L3 005e 3d ff 00 00 00 cmp eax,000000ffH 0063 75 24 jne L4 buf[0] = 255; buf[1] = count; 0065 b2 ff L3 mov dl,0ffH 0067 8a 44 24 08 mov al,+8H[esp] buf[2] = (uint8)last; 006b 88 5c 24 01 mov +1H[esp],bl 006f bb 03 00 00 00 mov ebx,00000003H 0074 88 14 24 mov [esp],dl 0077 88 44 24 02 mov +2H[esp],al 007b 89 e2 mov edx,esp os->write(buf,3); 007d a1 00 00 00 00 mov eax,OutStream near * near os 0082 e8 00 00 00 00 call int near OutStream::write( void const near *, int ) } else { 0087 eb 19 jmp L5 while(count--) { 0089 fe cb L4 dec bl 008b 80 fb ff cmp bl,0ffH 008e 74 12 je L5 os->write((uint8)last); 0090 31 d2 xor edx,edx 0092 a1 00 00 00 00 mov eax,OutStream near * near os 0097 8a 54 24 08 mov dl,+8H[esp] 009b e8 00 00 00 00 call int near OutStream::write( int ) } } } count=1; 00a0 eb e7 jmp L4 00a2 30 e4 L5 xor ah,ah 00a4 8a 44 24 0c mov al,+0cH[esp] last=c; 00a8 b3 01 mov bl,01H 00aa 66 89 44 24 08 mov +8H[esp],ax } else { 00af e9 62 ff ff ff jmp L1 count++; 00b4 fe c3 L6 inc bl } } //flush 00b6 e9 5b ff ff ff jmp L1 if(count>2 || last==255) { uint8 buf[3]; 00bb 31 c0 L7 xor eax,eax 00bd 88 d8 mov al,bl 00bf 83 f8 02 cmp eax,00000002H 00c2 7f 0e jg L8 00c4 31 c0 xor eax,eax 00c6 66 8b 44 24 08 mov ax,+8H[esp] 00cb 3d ff 00 00 00 cmp eax,000000ffH 00d0 75 27 jne L9 buf[0] = 255; 00d2 b4 ff L8 mov ah,0ffH 00d4 8d 54 24 04 lea edx,+4H[esp] buf[1] = count; 00d8 88 5c 24 05 mov +5H[esp],bl 00dc 88 64 24 04 mov +4H[esp],ah buf[2] = (uint8)last; 00e0 8a 44 24 08 mov al,+8H[esp] 00e4 bb 03 00 00 00 mov ebx,00000003H 00e9 88 44 24 06 mov +6H[esp],al os->write(buf,3); 00ed a1 00 00 00 00 mov eax,OutStream near * near os 00f2 e8 00 00 00 00 call int near OutStream::write( void const near *, int ) } else { 00f7 eb 19 jmp L10 while(count--) { 00f9 fe cb L9 dec bl 00fb 80 fb ff cmp bl,0ffH 00fe 74 12 je L10 os->write((uint8)last); 0100 31 d2 xor edx,edx 0102 a1 00 00 00 00 mov eax,OutStream near * near os 0107 8a 54 24 08 mov dl,+8H[esp] 010b e8 00 00 00 00 call int near OutStream::write( int ) } } 0110 eb e7 jmp L9 } 0112 83 c4 10 L10 add esp,00000010H 0115 5e pop esi 0116 59 pop ecx 0117 5b pop ebx 0118 c3 ret 0119 8d 40 00 lea eax,+0H[eax] void compress(int width, int height, char *cbitbuf) { 011c void near compress( int, int, char near * ): 011c 51 push ecx 011d 56 push esi 011e 57 push edi 011f 55 push ebp 0120 83 ec 3c sub esp,0000003cH 0123 89 c6 mov esi,eax 0125 89 d1 mov ecx,edx 0127 89 dd mov ebp,ebx if(obitbuf==0 || width!=owidth || height!=oheight) { delete[] obitbuf; 0129 83 3d 00 00 00 00 00 cmp dword ptr char near * near obitbuf,00000000H 0130 74 10 je L11 0132 3b 05 00 00 00 00 cmp eax,int unsigned near owidth 0138 75 08 jne L11 013a 3b 0d 00 00 00 00 cmp ecx,int unsigned near oheight 0140 74 2e je L12 0142 89 cb L11 mov ebx,ecx 0144 0f af de imul ebx,esi obitbuf = new char[height*width]; owidth = width; oheight = height; 0147 a1 00 00 00 00 mov eax,char near * near obitbuf 014c e8 00 00 00 00 call void near operator delete []( void near * ) 0151 89 d8 mov eax,ebx 0153 31 d2 xor edx,edx 0155 e8 00 00 00 00 call void near * near operator new []( int unsigned ) 015a a3 00 00 00 00 mov char near * near obitbuf,eax 015f 89 35 00 00 00 00 mov int unsigned near owidth,esi memset(obitbuf,0,width*height); } { 0165 89 0d 00 00 00 00 mov int unsigned near oheight,ecx 016b e8 00 00 00 00 call memset_ os->write(OC_FRAMESTART); 0170 a1 00 00 00 00 L12 mov eax,OutStream near * near os 0175 31 d2 xor edx,edx 0177 e8 00 00 00 00 call int near OutStream::write( int ) uint32 x=width; os->write(&x,4); x=height; os->write(&x,4); } long lastoffset=0; 017c 89 74 24 04 mov +4H[esp],esi 0180 0f af f1 imul esi,ecx 0183 bb 04 00 00 00 mov ebx,00000004H 0188 8d 54 24 04 lea edx,+4H[esp] 018c a1 00 00 00 00 mov eax,OutStream near * near os 0191 89 ef mov edi,ebp 0193 e8 00 00 00 00 call int near OutStream::write( void const near *, int ) 0198 bb 04 00 00 00 mov ebx,00000004H 019d 8d 54 24 04 lea edx,+4H[esp] 01a1 a1 00 00 00 00 mov eax,OutStream near * near os 01a6 89 4c 24 04 mov +4H[esp],ecx 01aa 89 74 24 24 mov +24H[esp],esi 01ae e8 00 00 00 00 call int near OutStream::write( void const near *, int ) 01b3 8b 44 24 24 mov eax,+24H[esp] 01b7 8b 35 00 00 00 00 mov esi,char near * near obitbuf char *end=obitbuf+width*height; 01bd 31 d2 xor edx,edx 01bf 01 f0 add eax,esi char *start=(char*)memcmp2(obitbuf+lastoffset,cbitbuf+lastoffset,height*width-lastoffset); 01c1 8b 4c 24 24 mov ecx,+24H[esp] 01c5 89 44 24 20 mov +20H[esp],eax 01c9 e3 27 jcxz L14 01cb 89 cb mov ebx,ecx 01cd c1 e9 02 shr ecx,02H 01d0 f3 a7 repe cmpsd 01d2 74 12 je L13 01d4 83 ee 04 sub esi,00000004H 01d7 83 ef 04 sub edi,00000004H 01da b9 04 00 00 00 mov ecx,00000004H 01df f3 a6 repe cmpsb 01e1 74 0f je L14 01e3 4e dec esi 01e4 eb 0c jmp L14 01e6 89 d9 L13 mov ecx,ebx 01e8 83 e1 03 and ecx,00000003H 01eb e3 05 jcxz L14 01ed f3 a6 repe cmpsb 01ef 74 01 je L14 01f1 4e dec esi 01f2 8b 44 24 20 L14 mov eax,+20H[esp] 01f6 89 74 24 28 mov +28H[esp],esi 01fa 39 c6 cmp esi,eax 01fc 0f 83 0e 03 00 00 jae L42 while(startwrite((uint8)(OC_SKIP16|bytesToSkip)); 023b 8a 44 24 0c mov al,+0cH[esp] 023f 31 d2 xor edx,edx 0241 0c 10 or al,10H 0243 88 c2 mov dl,al 0245 a1 00 00 00 00 mov eax,OutStream near * near os 024a e8 00 00 00 00 call int near OutStream::write( int ) } else if(bytesToSkip<256) { 024f eb 52 jmp L20 0251 3d 00 01 00 00 L16 cmp eax,00000100H 0256 7d 11 jge L17 0258 ba 20 00 00 00 mov edx,00000020H os->write(OC_SKIP256); os->write(&bytesToSkip,1); 025d a1 00 00 00 00 mov eax,OutStream near * near os 0262 bb 01 00 00 00 mov ebx,00000001H } else if(bytesToSkip<65536) { 0267 eb 27 jmp L19 0269 3d 00 00 01 00 L17 cmp eax,00010000H 026e 7d 11 jge L18 0270 ba 30 00 00 00 mov edx,00000030H os->write(OC_SKIP65536); os->write(&bytesToSkip,2); 0275 a1 00 00 00 00 mov eax,OutStream near * near os 027a bb 02 00 00 00 mov ebx,00000002H } else { 027f eb 0f jmp L19 0281 ba 40 00 00 00 L18 mov edx,00000040H os->write(OC_SKIP); 0286 a1 00 00 00 00 mov eax,OutStream near * near os 028b bb 04 00 00 00 mov ebx,00000004H 0290 e8 00 00 00 00 L19 call int near OutStream::write( int ) 0295 8d 54 24 0c lea edx,+0cH[esp] os->write(&bytesToSkip,4); 0299 a1 00 00 00 00 mov eax,OutStream near * near os 029e e8 00 00 00 00 call int near OutStream::write( void const near *, int ) } } char *difend = (char*)memncmp2(obitbuf+currentoffset, cbitbuf+currentoffset, height*width-currentoffset); 02a3 8b 4c 24 18 L20 mov ecx,+18H[esp] 02a7 8b 1c 24 mov ebx,[esp] 02aa 8b 35 00 00 00 00 mov esi,char near * near obitbuf 02b0 29 d9 sub ecx,ebx 02b2 8d 3c 2b lea edi,[ebx+ebp] 02b5 01 de add esi,ebx 02b7 f2 a6 L21 repne cmpsb 02b9 75 01 jne L22 02bb 4e dec esi for(;;) { 02bc 8b 15 00 00 00 00 L22 mov edx,char near * near obitbuf uint32 difendoffset = difend-obitbuf; if(difend>=end-2) break; 02c2 89 f0 mov eax,esi 02c4 8b 5c 24 10 mov ebx,+10H[esp] 02c8 29 d0 sub eax,edx 02ca 39 de cmp esi,ebx 02cc 73 31 jae L24 if(obitbuf[difendoffset+1]==cbitbuf[difendoffset+1] && 02ce 01 c2 add edx,eax 02d0 8d 0c 28 lea ecx,[eax+ebp] 02d3 8a 5a 01 mov bl,+1H[edx] 02d6 3a 59 01 cmp bl,+1H[ecx] 02d9 75 08 jne L23 02db 8a 52 02 mov dl,+2H[edx] 02de 3a 51 02 cmp dl,+2H[ecx] 02e1 74 1c je L24 obitbuf[difendoffset+2]==cbitbuf[difendoffset+2]) break; difend = (char*)memncmp2(obitbuf+difendoffset+2, cbitbuf+difendoffset+2, height*width-difendoffset-2); 02e3 8b 4c 24 14 L23 mov ecx,+14H[esp] 02e7 8d 3c 28 lea edi,[eax+ebp] 02ea 8b 15 00 00 00 00 mov edx,char near * near obitbuf 02f0 83 c7 02 add edi,00000002H 02f3 29 c1 sub ecx,eax 02f5 01 d0 add eax,edx 02f7 83 e9 02 sub ecx,00000002H 02fa 8d 70 02 lea esi,+2H[eax] } 02fd eb b8 jmp L21 long bytes = difend-start; 02ff 8b 4c 24 28 L24 mov ecx,+28H[esp] 0303 29 ce sub esi,ecx 0305 89 74 24 08 mov +8H[esp],esi if(bytes<16) { 0309 83 fe 10 cmp esi,00000010H 030c 7d 16 jge L25 os->write((uint8)(OC_DATA16|bytes)); 030e 8a 44 24 08 mov al,+8H[esp] 0312 31 d2 xor edx,edx 0314 0c 50 or al,50H 0316 88 c2 mov dl,al 0318 a1 00 00 00 00 mov eax,OutStream near * near os 031d e8 00 00 00 00 call int near OutStream::write( int ) } else if(bytes<256) { 0322 eb 64 jmp L29 0324 81 fe 00 01 00 00 L25 cmp esi,00000100H 032a 7d 21 jge L26 032c ba 60 00 00 00 mov edx,00000060H os->write(OC_DATA256); 0331 a1 00 00 00 00 mov eax,OutStream near * near os 0336 e8 00 00 00 00 call int near OutStream::write( int ) os->write((uint8)bytes); 033b 31 d2 xor edx,edx 033d a1 00 00 00 00 mov eax,OutStream near * near os 0342 8a 54 24 08 mov dl,+8H[esp] 0346 e8 00 00 00 00 call int near OutStream::write( int ) } else if(bytes<65536) { 034b eb 3b jmp L29 034d 81 fe 00 00 01 00 L26 cmp esi,00010000H 0353 7d 11 jge L27 0355 ba 70 00 00 00 mov edx,00000070H os->write(OC_DATA65536); os->write(&bytes,2); 035a a1 00 00 00 00 mov eax,OutStream near * near os 035f bb 02 00 00 00 mov ebx,00000002H } else { 0364 eb 0f jmp L28 0366 ba 80 00 00 00 L27 mov edx,00000080H os->write(OC_DATA); 036b a1 00 00 00 00 mov eax,OutStream near * near os 0370 bb 04 00 00 00 mov ebx,00000004H 0375 e8 00 00 00 00 L28 call int near OutStream::write( int ) 037a 8d 54 24 08 lea edx,+8H[esp] os->write(&bytes,4); } 037e a1 00 00 00 00 mov eax,OutStream near * near os 0383 e8 00 00 00 00 call int near OutStream::write( void const near *, int ) nrc(cbitbuf+currentoffset,bytes); 0388 8b 34 24 L29 mov esi,[esp] 038b 8b 4c 24 08 mov ecx,+8H[esp] 038f ba 00 01 00 00 mov edx,00000100H 0394 30 db xor bl,bl 0396 66 89 54 24 34 mov +34H[esp],dx 039b 01 ee add esi,ebp 039d 49 L30 dec ecx 039e 83 f9 ff cmp ecx,0ffffffffH 03a1 0f 84 9e 00 00 00 je L36 03a7 8a 06 mov al,[esi] 03a9 88 44 24 38 mov +38H[esp],al 03ad 31 c0 xor eax,eax 03af 88 d8 mov al,bl 03b1 46 inc esi 03b2 3d ff 00 00 00 cmp eax,000000ffH 03b7 74 15 je L31 03b9 31 c0 xor eax,eax 03bb 31 d2 xor edx,edx 03bd 8a 44 24 38 mov al,+38H[esp] 03c1 66 8b 54 24 34 mov dx,+34H[esp] 03c6 39 d0 cmp eax,edx 03c8 0f 84 70 00 00 00 je L35 03ce 31 c0 L31 xor eax,eax 03d0 66 8b 44 24 34 mov ax,+34H[esp] 03d5 3d 00 01 00 00 cmp eax,00000100H 03da 74 50 je L34 03dc 31 d2 xor edx,edx 03de 88 da mov dl,bl 03e0 83 fa 02 cmp edx,00000002H 03e3 7f 07 jg L32 03e5 3d ff 00 00 00 cmp eax,000000ffH 03ea 75 27 jne L33 03ec b0 ff L32 mov al,0ffH 03ee 8d 54 24 30 lea edx,+30H[esp] 03f2 88 5c 24 31 mov +31H[esp],bl 03f6 88 44 24 30 mov +30H[esp],al 03fa 8a 44 24 34 mov al,+34H[esp] 03fe bb 03 00 00 00 mov ebx,00000003H 0403 88 44 24 32 mov +32H[esp],al 0407 a1 00 00 00 00 mov eax,OutStream near * near os 040c e8 00 00 00 00 call int near OutStream::write( void const near *, int ) 0411 eb 19 jmp L34 0413 fe cb L33 dec bl 0415 80 fb ff cmp bl,0ffH 0418 74 12 je L34 041a 31 d2 xor edx,edx 041c a1 00 00 00 00 mov eax,OutStream near * near os 0421 8a 54 24 34 mov dl,+34H[esp] 0425 e8 00 00 00 00 call int near OutStream::write( int ) 042a eb e7 jmp L33 042c 30 e4 L34 xor ah,ah 042e 8a 44 24 38 mov al,+38H[esp] 0432 b3 01 mov bl,01H 0434 66 89 44 24 34 mov +34H[esp],ax 0439 e9 5f ff ff ff jmp L30 043e fe c3 L35 inc bl 0440 e9 58 ff ff ff jmp L30 0445 31 c0 L36 xor eax,eax 0447 88 d8 mov al,bl 0449 83 f8 02 cmp eax,00000002H 044c 7f 0e jg L37 044e 31 c0 xor eax,eax 0450 66 8b 44 24 34 mov ax,+34H[esp] 0455 3d ff 00 00 00 cmp eax,000000ffH 045a 75 27 jne L38 045c b7 ff L37 mov bh,0ffH 045e 8a 44 24 34 mov al,+34H[esp] 0462 8d 54 24 2c lea edx,+2cH[esp] 0466 88 7c 24 2c mov +2cH[esp],bh 046a 88 5c 24 2d mov +2dH[esp],bl 046e 88 44 24 2e mov +2eH[esp],al 0472 bb 03 00 00 00 mov ebx,00000003H 0477 a1 00 00 00 00 mov eax,OutStream near * near os 047c e8 00 00 00 00 call int near OutStream::write( void const near *, int ) 0481 eb 19 jmp L39 0483 fe cb L38 dec bl 0485 80 fb ff cmp bl,0ffH 0488 74 12 je L39 048a 31 d2 xor edx,edx 048c a1 00 00 00 00 mov eax,OutStream near * near os 0491 8a 54 24 34 mov dl,+34H[esp] 0495 e8 00 00 00 00 call int near OutStream::write( int ) 049a eb e7 jmp L38 memcpy(obitbuf+currentoffset, cbitbuf+currentoffset, bytes); 049c 8b 34 24 L39 mov esi,[esp] 049f 8b 14 24 mov edx,[esp] 04a2 8b 4c 24 08 mov ecx,+8H[esp] 04a6 8b 3d 00 00 00 00 mov edi,char near * near obitbuf 04ac 01 ee add esi,ebp 04ae 01 d7 add edi,edx 04b0 57 push edi 04b1 89 c8 mov eax,ecx 04b3 c1 e9 02 shr ecx,02H 04b6 f2 a5 repne movsd 04b8 8a c8 mov cl,al 04ba 80 e1 03 and cl,03H 04bd f2 a4 repne movsb 04bf 5f pop edi lastoffset = currentoffset + bytes; start=(char*)memcmp2(obitbuf+lastoffset,cbitbuf+lastoffset,height*width-lastoffset); } 04c0 8b 5c 24 08 mov ebx,+8H[esp] 04c4 8b 4c 24 1c mov ecx,+1cH[esp] 04c8 01 da add edx,ebx 04ca 8b 35 00 00 00 00 mov esi,char near * near obitbuf 04d0 29 d1 sub ecx,edx 04d2 8d 3c 2a lea edi,[edx+ebp] 04d5 01 d6 add esi,edx 04d7 e3 27 jcxz L41 04d9 89 cb mov ebx,ecx 04db c1 e9 02 shr ecx,02H 04de f3 a7 repe cmpsd 04e0 74 12 je L40 04e2 83 ee 04 sub esi,00000004H 04e5 83 ef 04 sub edi,00000004H 04e8 b9 04 00 00 00 mov ecx,00000004H 04ed f3 a6 repe cmpsb 04ef 74 0f je L41 04f1 4e dec esi 04f2 eb 0c jmp L41 04f4 89 d9 L40 mov ecx,ebx 04f6 83 e1 03 and ecx,00000003H 04f9 e3 05 jcxz L41 04fb f3 a6 repe cmpsb 04fd 74 01 je L41 04ff 4e dec esi 0500 8b 4c 24 20 L41 mov ecx,+20H[esp] 0504 89 74 24 28 mov +28H[esp],esi 0508 39 ce cmp esi,ecx 050a 0f 82 11 fd ff ff jb L15 os->flush(); 0510 a1 00 00 00 00 L42 mov eax,OutStream near * near os 0515 e8 00 00 00 00 call int near OutStream::flush() } 051a 83 c4 3c add esp,0000003cH 051d 5d pop ebp 051e 5f pop edi 051f 5e pop esi 0520 59 pop ecx 0521 c3 ret 0522 8b c0 mov eax,eax void InitializeCompressor(OutStream *os) { 0524 void near InitializeCompressor( OutStream near * ): 0524 53 push ebx 0525 51 push ecx 0526 52 push edx 0527 89 c2 mov edx,eax if(obitbuf) 0529 8b 1d 00 00 00 00 mov ebx,char near * near obitbuf 052f 85 db test ebx,ebx 0531 74 07 je L43 delete[] obitbuf; 0533 89 d8 mov eax,ebx 0535 e8 00 00 00 00 call void near operator delete []( void near * ) obitbuf = 0; owidth = 0; oheight = 0; 053a 31 c9 L43 xor ecx,ecx ::os = os; 053c 89 15 00 00 00 00 mov OutStream near * near os,edx 0542 89 0d 00 00 00 00 mov char near * near obitbuf,ecx 0548 89 0d 00 00 00 00 mov int unsigned near owidth,ecx 054e 89 0d 00 00 00 00 mov int unsigned near oheight,ecx } 0554 5a pop edx 0555 59 pop ecx 0556 5b pop ebx 0557 c3 ret No disassembly errors ------------------------------------------------------------ Segment: _BSS DWORD USE32 00000010 bytes No disassembly errors ------------------------------------------------------------