Module: D:\SOURCE\WIN\WCOPY\picspool.cpp Group: 'DGROUP' CONST,CONST2,_DATA,_BSS Segment: _TEXT PARA 00000556 bytes #include #include #include #include "picspool.h" #define MAXBUFFERSIZE 16000 char buffer[MAXBUFFERSIZE]; LRESULT CALLBACK PicSpoolWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CREATE: return 0; case WM_QUERYOPEN: return FALSE; case WM_DESTROY: 0000 long far PicSpoolWndProc( int unsigned, int unsigned, int unsigned, long ): 0000 1e push ds 0001 58 pop ax 0002 90 nop 0003 45 inc bp 0004 55 push bp 0005 89 e5 mov bp,sp 0007 1e push ds 0008 8e d8 mov ds,ax 000a b8 12 00 mov ax,0012H 000d e8 00 00 call __STK 0010 8b 46 0c mov ax,+0cH[bp] 0013 3d 02 00 cmp ax,0002H 0016 72 2a jb L4 0018 76 07 jbe L1 001a 3d 13 00 cmp ax,0013H 001d 74 09 je L2 001f eb 0d jmp L3 PostQuitMessage(0); 0021 6a 00 L1 push 0000H 0023 9a 00 00 00 00 call far POSTQUITMESSAGE return 0; default: 0028 31 c0 L2 xor ax,ax 002a 31 d2 xor dx,dx 002c eb 1b jmp L5 return DefWindowProc(hwnd,msg,wParam,lParam); } 002e ff 76 0e L3 push +0eH[bp] 0031 50 push ax 0032 ff 76 0a push +0aH[bp] 0035 ff 76 08 push +8H[bp] 0038 ff 76 06 push +6H[bp] 003b 9a 00 00 00 00 call far DEFWINDOWPROC 0040 eb 07 jmp L5 0042 3d 01 00 L4 cmp ax,0001H 0045 74 e1 je L2 0047 eb e5 jmp L3 } 0049 1f L5 pop ds 004a 5d pop bp 004b 4d dec bp 004c ca 0a 00 retf 000aH 004f fc cld int PASCAL WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int) { char *fromFilename,*toFilename; 0050 55 WINMAIN push bp 0051 89 e5 mov bp,sp 0053 b8 86 02 mov ax,0286H 0056 e8 00 00 call __STK 0059 56 push si 005a 57 push di 005b 81 ec 60 02 sub sp,0260H fromFilename=strtok(lpCmdLine," "); 005f bb 00 00 mov bx,offset L45 0062 b9 00 00 mov cx,seg L45 0065 8b 46 06 mov ax,+6H[bp] 0068 8b 56 08 mov dx,+8H[bp] 006b e8 00 00 call strtok_ 006e 89 c7 mov di,ax 0070 89 56 cc mov -34H[bp],dx 0073 89 46 ca mov -36H[bp],ax 0076 89 d0 mov ax,dx 0078 89 56 ce mov -32H[bp],dx toFilename=strtok(0," "); 007b bb 02 00 mov bx,offset L46 007e b9 00 00 mov cx,seg L45 0081 31 d0 xor ax,dx 0083 31 d2 xor dx,dx 0085 e8 00 00 call strtok_ 0088 89 46 d0 mov -30H[bp],ax 008b 89 d6 mov si,dx if(toFilename==0) return -1; char *shortFromFilename; char *shortToFilename; { 008d 85 d2 test dx,dx 008f 75 0a jne L6 0091 85 c0 test ax,ax 0093 75 06 jne L6 0095 b8 ff ff mov ax,0ffffH 0098 e9 b2 04 jmp L44 shortFromFilename=fromFilename; 009b 89 7e ec L6 mov -14H[bp],di 009e 8b 46 cc mov ax,-34H[bp] 00a1 89 46 ee mov -12H[bp],ax char *p=fromFilename; 00a4 89 fb mov bx,di 00a6 8e c0 mov es,ax while(*p) { 00a8 26 80 3f 00 L7 cmp byte ptr es:[bx],00H 00ac 74 18 je L10 if(*p=='\\' || *p=='/') 00ae 26 80 3f 5c cmp byte ptr es:[bx],5cH 00b2 74 06 je L8 00b4 26 80 3f 2f cmp byte ptr es:[bx],2fH 00b8 75 09 jne L9 shortFromFilename=p+1; 00ba 8c 46 ee L8 mov -12H[bp],es 00bd 8d 47 01 lea ax,+1H[bx] 00c0 89 46 ec mov -14H[bp],ax p++; 00c3 43 L9 inc bx } 00c4 eb e2 jmp L7 shortToFilename=toFilename; 00c6 8b 46 d0 L10 mov ax,-30H[bp] 00c9 89 46 ea mov -16H[bp],ax 00cc 89 76 f0 mov -10H[bp],si p=toFilename; 00cf 89 c3 mov bx,ax 00d1 8e c6 mov es,si while(*p) { 00d3 26 80 3f 00 L11 cmp byte ptr es:[bx],00H 00d7 74 18 je L14 if(*p=='\\' || *p=='/') 00d9 26 80 3f 5c cmp byte ptr es:[bx],5cH 00dd 74 06 je L12 00df 26 80 3f 2f cmp byte ptr es:[bx],2fH 00e3 75 09 jne L13 shortToFilename=p+1; 00e5 8c 46 f0 L12 mov -10H[bp],es 00e8 8d 47 01 lea ax,+1H[bx] 00eb 89 46 ea mov -16H[bp],ax p++; 00ee 43 L13 inc bx } } HFILE hfFrom,hfTo; 00ef eb e2 jmp L11 hfFrom=_lopen(fromFilename,READ|OF_SHARE_COMPAT); 00f1 ff 76 ce L14 push -32H[bp] 00f4 ff 76 ca push -36H[bp] 00f7 6a 00 push 0000H 00f9 9a 00 00 00 00 call far _LOPEN 00fe 89 46 da mov -26H[bp],ax if(hfFrom==HFILE_ERROR) { 0101 3d ff ff cmp ax,0ffffH 0104 75 36 jne L15 hfFrom=_lopen(fromFilename,READ|OF_SHARE_DENY_WRITE); 0106 ff 76 ce push -32H[bp] 0109 ff 76 ca push -36H[bp] 010c 6a 20 push 0020H 010e 9a 00 00 00 00 call far _LOPEN 0113 89 46 da mov -26H[bp],ax if(hfFrom==HFILE_ERROR) { 0116 3d ff ff cmp ax,0ffffH 0119 75 21 jne L15 hfFrom=_lopen(fromFilename,READ|OF_SHARE_DENY_NONE); 011b ff 76 ce push -32H[bp] 011e ff 76 ca push -36H[bp] 0121 6a 40 push 0040H 0123 9a 00 00 00 00 call far _LOPEN 0128 89 46 da mov -26H[bp],ax if(hfFrom==HFILE_ERROR) { //give up 012b 3d ff ff cmp ax,0ffffH 012e 75 0c jne L15 return -2; } } } 0130 b8 fe ff mov ax,0fffeH 0133 8d 66 fc lea sp,-4H[bp] 0136 5f pop di 0137 5e pop si 0138 5d pop bp 0139 c2 0a 00 ret 000aH hfTo = _lopen(toFilename, WRITE|OF_SHARE_EXCLUSIVE); 013c 56 L15 push si 013d ff 76 d0 push -30H[bp] 0140 6a 11 push 0011H 0142 9a 00 00 00 00 call far _LOPEN 0147 89 46 d8 mov -28H[bp],ax if(hfTo==HFILE_ERROR) { 014a 3d ff ff cmp ax,0ffffH 014d 75 1f jne L16 hfTo = _lcreat(toFilename, 0); 014f 56 push si 0150 ff 76 d0 push -30H[bp] 0153 6a 00 push 0000H 0155 9a 00 00 00 00 call far _LCREAT 015a 89 46 d8 mov -28H[bp],ax if(hfTo==HFILE_ERROR) 015d 3d ff ff cmp ax,0ffffH 0160 75 0c jne L16 return -3; } //both files opened ok 0162 b8 fd ff mov ax,0fffdH 0165 8d 66 fc lea sp,-4H[bp] 0168 5f pop di 0169 5e pop si 016a 5d pop bp 016b c2 0a 00 ret 000aH LONG totalFileSize=_llseek(hfFrom,0,2); 016e ff 76 da L16 push -26H[bp] 0171 6a 00 push 0000H 0173 6a 00 push 0000H 0175 6a 02 push 0002H 0177 9a 00 00 00 00 call far _LLSEEK 017c 89 46 d2 mov -2eH[bp],ax 017f 89 56 d4 mov -2cH[bp],dx _llseek(hfFrom,0,0); //read configuration int sliceSize; int zapLastFF; 0182 ff 76 da push -26H[bp] 0185 6a 00 push 0000H 0187 6a 00 push 0000H 0189 6a 00 push 0000H 018b 9a 00 00 00 00 call far _LLSEEK sliceSize=GetPrivateProfileInt("General","TimeSlice",20,"picspool.ini"); 0190 68 00 00 push seg L45 0193 68 1b 00 push offset L49 0196 68 00 00 push seg L45 0199 68 11 00 push offset L48 019c 6a 14 push 0014H 019e 68 00 00 push seg L45 01a1 68 04 00 push offset L47 01a4 9a 00 00 00 00 call far GETPRIVATEPROFILEINT 01a9 89 46 f2 mov -0eH[bp],ax if(sliceSize<=0) sliceSize=20; 01ac 85 c0 test ax,ax 01ae 7f 05 jg L17 01b0 c7 46 f2 14 00 mov word ptr -0eH[bp],0014H if(sliceSize>1000) sliceSize=1000; 01b5 81 7e f2 e8 03 L17 cmp word ptr -0eH[bp],03e8H 01ba 7e 05 jle L18 01bc c7 46 f2 e8 03 mov word ptr -0eH[bp],03e8H zapLastFF=GetPrivateProfileInt("General","ZapLastFF",0,"picspool.ini"); //parse options 01c1 68 00 00 L18 push seg L45 01c4 68 3a 00 push offset L52 01c7 68 00 00 push seg L45 01ca 68 30 00 push offset L51 01cd 6a 00 push 0000H 01cf 68 00 00 push seg L45 01d2 68 23 00 push offset L50 01d5 9a 00 00 00 00 call far GETPRIVATEPROFILEINT 01da 89 46 e6 mov -1aH[bp],ax int debug=0; char *option; 01dd c7 46 e8 00 00 mov word ptr -18H[bp],0000H while((option=strtok(0," "))!=0) { 01e2 bb 42 00 L19 mov bx,offset L53 01e5 b9 00 00 mov cx,seg L45 01e8 31 c0 xor ax,ax 01ea 31 d2 xor dx,dx 01ec e8 00 00 call strtok_ 01ef 89 c7 mov di,ax 01f1 89 d6 mov si,dx 01f3 85 d2 test dx,dx 01f5 75 04 jne L20 01f7 85 c0 test ax,ax 01f9 74 52 je L24 if(lstrcmpi(option,"/d")==0 || lstrcmpi(option,"-d")==0) 01fb 52 L20 push dx 01fc 50 push ax 01fd 68 00 00 push seg L45 0200 68 44 00 push offset L54 0203 9a 00 00 00 00 call far LSTRCMPI 0208 85 c0 test ax,ax 020a 74 11 je L21 020c 56 push si 020d 57 push di 020e 68 00 00 push seg L45 0211 68 47 00 push offset L55 0214 9a 00 00 00 00 call far LSTRCMPI 0219 85 c0 test ax,ax 021b 75 07 jne L22 debug = 1; 021d c7 46 e8 01 00 L21 mov word ptr -18H[bp],0001H 0222 eb be jmp L19 else if(lstrcmpi(option,"/zaplastff")==0 || lstrcmpi(option,"-zaplastff")==0) 0224 56 L22 push si 0225 57 push di 0226 68 00 00 push seg L45 0229 68 4a 00 push offset L56 022c 9a 00 00 00 00 call far LSTRCMPI 0231 85 c0 test ax,ax 0233 74 11 je L23 0235 56 push si 0236 57 push di 0237 68 00 00 push seg L45 023a 68 55 00 push offset L57 023d 9a 00 00 00 00 call far LSTRCMPI 0242 85 c0 test ax,ax 0244 75 9c jne L19 zapLastFF = 1; } 0246 c7 46 e6 01 00 L23 mov word ptr -1aH[bp],0001H 024b eb 95 jmp L19 if(hinstPrev==NULL) { //register window class WNDCLASS wndclass; 024d 83 7e 0a 00 L24 cmp word ptr +0aH[bp],0000H 0251 75 73 jne L25 wndclass.style = 0; 0253 c7 46 9c 00 00 mov word ptr -64H[bp],0000H wndclass.lpfnWndProc = PicSpoolWndProc; 0258 c7 46 9e 00 00 mov word ptr -62H[bp],offset long far PicSpoolWndProc( int unsigned, int unsigned, int unsigned, long ) 025d c7 46 a0 00 00 mov word ptr -60H[bp],seg long far PicSpoolWndProc( int unsigned, int unsigned, int unsigned, long ) wndclass.cbClsExtra = 0; 0262 c7 46 a2 00 00 mov word ptr -5eH[bp],0000H wndclass.cbWndExtra = 0; 0267 c7 46 a4 00 00 mov word ptr -5cH[bp],0000H wndclass.hInstance = hinst; 026c 8b 46 0c mov ax,+0cH[bp] 026f 89 46 a6 mov -5aH[bp],ax wndclass.hIcon = LoadIcon(hinst,MAKEINTRESOURCE(PICSPOOL_ICON)); 0272 50 push ax 0273 6a 00 push 0000H 0275 6a 01 push 0001H 0277 9a 00 00 00 00 call far LOADICON 027c 89 46 a8 mov -58H[bp],ax wndclass.hCursor = NULL; 027f c7 46 aa 00 00 mov word ptr -56H[bp],0000H wndclass.hbrBackground = NULL; 0284 c7 46 ac 00 00 mov word ptr -54H[bp],0000H wndclass.lpszMenuName = 0; 0289 c7 46 ae 00 00 mov word ptr -52H[bp],0000H 028e c7 46 b0 00 00 mov word ptr -50H[bp],0000H wndclass.lpszClassName = "PicSpool"; 0293 c7 46 b2 60 00 mov word ptr -4eH[bp],offset L58 0298 c7 46 b4 00 00 mov word ptr -4cH[bp],seg L45 if(!RegisterClass(&wndclass)) { 029d 8d 56 9c lea dx,-64H[bp] 02a0 1e push ds 02a1 52 push dx 02a2 9a 00 00 00 00 call far REGISTERCLASS 02a7 85 c0 test ax,ax 02a9 75 1b jne L25 MessageBox(NULL,"Could not register window class",NULL,MB_OK); 02ab 50 push ax 02ac 68 00 00 push seg L45 02af 68 69 00 push offset L59 02b2 50 push ax 02b3 50 push ax 02b4 50 push ax 02b5 9a 00 00 00 00 call far MESSAGEBOX return -1; } } char windowName[512]; 02ba b8 ff ff mov ax,0ffffH 02bd 8d 66 fc lea sp,-4H[bp] 02c0 5f pop di 02c1 5e pop si 02c2 5d pop bp 02c3 c2 0a 00 ret 000aH wsprintf(windowName,"%s->%s", shortFromFilename,shortToFilename); 02c6 ff 76 f0 L25 push -10H[bp] 02c9 ff 76 ea push -16H[bp] 02cc ff 76 ee push -12H[bp] 02cf ff 76 ec push -14H[bp] 02d2 68 00 00 push seg L45 02d5 68 89 00 push offset L60 02d8 8d 96 9c fd lea dx,-264H[bp] 02dc 1e push ds 02dd 52 push dx 02de 9a 00 00 00 00 call far _wsprintf 02e3 83 c4 10 add sp,0010H HWND hwnd=CreateWindow("PicSpool", windowName, WS_BORDER|WS_CAPTION|WS_OVERLAPPED|WS_SYSMENU|WS_VISIBLE|WS_MINIMIZE, CW_USEDEFAULT,0, CW_USEDEFAULT,0, HWND_DESKTOP, NULL, hinst, 0 ); 02e6 68 00 00 push seg L45 02e9 68 90 00 push offset L61 02ec 8d 96 9c fd lea dx,-264H[bp] 02f0 1e push ds 02f1 52 push dx 02f2 68 c8 30 push 30c8H 02f5 6a 00 push 0000H 02f7 68 00 80 push 8000H 02fa 6a 00 push 0000H 02fc 68 00 80 push 8000H 02ff 6a 00 push 0000H 0301 6a 00 push 0000H 0303 6a 00 push 0000H 0305 ff 76 0c push +0cH[bp] 0308 6a 00 push 0000H 030a 6a 00 push 0000H 030c 9a 00 00 00 00 call far CREATEWINDOW 0311 89 46 d6 mov -2aH[bp],ax if(!hwnd) { 0314 85 c0 test ax,ax 0316 75 1b jne L26 MessageBox(NULL,"Could not create picspool window",NULL,MB_OK); 0318 50 push ax 0319 68 00 00 push seg L45 031c 68 99 00 push offset L62 031f 50 push ax 0320 50 push ax 0321 50 push ax 0322 9a 00 00 00 00 call far MESSAGEBOX return -1; } 0327 b8 ff ff mov ax,0ffffH 032a 8d 66 fc lea sp,-4H[bp] 032d 5f pop di 032e 5e pop si 032f 5d pop bp 0330 c2 0a 00 ret 000aH ShowWindow(hwnd,SW_SHOWMINIMIZED); 0333 50 L26 push ax 0334 6a 02 push 0002H 0336 9a 00 00 00 00 call far SHOWWINDOW unsigned bestBufferSize=512; 033b be 00 02 mov si,0200H unsigned bytesInBuffer=0; 033e c7 46 f8 00 00 mov word ptr -8H[bp],0000H LONG totalBytesWritten=0; MSG msg; for(;;) { 0343 c7 46 f4 00 00 mov word ptr -0cH[bp],0000H 0348 c7 46 f6 00 00 mov word ptr -0aH[bp],0000H if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { //message retrieved 034d 8d 46 b6 L27 lea ax,-4aH[bp] 0350 1e push ds 0351 50 push ax 0352 6a 00 push 0000H 0354 6a 00 push 0000H 0356 6a 00 push 0000H 0358 6a 01 push 0001H 035a 9a 00 00 00 00 call far PEEKMESSAGE 035f 85 c0 test ax,ax 0361 74 1e je L28 if(msg.message==WM_QUIT) break; 0363 83 7e b8 12 cmp word ptr -48H[bp],0012H 0367 0f 84 c8 01 je L43 TranslateMessage(&msg); 036b 8d 5e b6 lea bx,-4aH[bp] 036e 1e push ds 036f 53 push bx 0370 9a 00 00 00 00 call far TRANSLATEMESSAGE DispatchMessage(&msg); 0375 8d 46 b6 lea ax,-4aH[bp] 0378 1e push ds 0379 50 push ax 037a 9a 00 00 00 00 call far DISPATCHMESSAGE } else { //do some spooling 037f eb cc jmp L27 if(bytesInBuffer==0) { //fill buffer 0381 83 7e f8 00 L28 cmp word ptr -8H[bp],0000H 0385 75 5d jne L32 UINT bytesRead=_lread(hfFrom,buffer,bestBufferSize); 0387 ff 76 da push -26H[bp] 038a 1e push ds 038b 68 00 00 push offset char far buffer[] 038e 56 push si 038f 9a 00 00 00 00 call far _LREAD if(bytesRead==0) { //eof 0394 85 c0 test ax,ax 0396 75 10 jne L29 _lwrite(hfTo,buffer,0); //truncate file 0398 ff 76 d8 push -28H[bp] 039b 1e push ds 039c 68 00 00 push offset char far buffer[] 039f 50 push ax 03a0 9a 00 00 00 00 call far _LWRITE break; } 03a5 e9 8b 01 jmp L43 bytesInBuffer=bytesRead; 03a8 89 46 f8 L29 mov -8H[bp],ax if(zapLastFF && bytesInBuffer=0; i--) { 03b5 89 c3 mov bx,ax 03b7 4b L30 dec bx 03b8 85 db test bx,bx 03ba 7c 28 jl L32 if(buffer[i]=='\f') { 03bc 80 bf 00 00 0c cmp byte ptr char far buffer[][bx],0cH 03c1 75 05 jne L31 bytesInBuffer = i; 03c3 89 5e f8 mov -8H[bp],bx break; } else if(buffer[i]!=' ' && buffer[i]!='\t' && 03c6 eb 1c jmp L32 buffer[i]!='\n' && buffer[i]!='\r') { break; } } } } 03c8 80 bf 00 00 20 L31 cmp byte ptr char far buffer[][bx],20H 03cd 74 e8 je L30 03cf 80 bf 00 00 09 cmp byte ptr char far buffer[][bx],09H 03d4 74 e1 je L30 03d6 80 bf 00 00 0a cmp byte ptr char far buffer[][bx],0aH 03db 74 da je L30 03dd 80 bf 00 00 0d cmp byte ptr char far buffer[][bx],0dH 03e2 74 d3 je L30 DWORD startTime = GetTickCount(); 03e4 9a 00 00 00 00 L32 call far GETTICKCOUNT 03e9 89 46 dc mov -24H[bp],ax 03ec 89 56 e0 mov -20H[bp],dx UINT bytesWritten=_lwrite(hfTo,buffer,bytesInBuffer); 03ef ff 76 d8 push -28H[bp] 03f2 1e push ds 03f3 68 00 00 push offset char far buffer[] 03f6 ff 76 f8 push -8H[bp] 03f9 9a 00 00 00 00 call far _LWRITE 03fe 89 c7 mov di,ax 0400 89 46 de mov -22H[bp],ax DWORD endTime = GetTickCount(); 0403 9a 00 00 00 00 call far GETTICKCOUNT 0408 89 46 e2 mov -1eH[bp],ax 040b 89 56 e4 mov -1cH[bp],dx if(bytesWritten==HFILE_ERROR) break; //write error 040e 83 ff ff cmp di,0ffffH 0411 0f 84 1e 01 je L43 if(bytesWritten==0) break; //disk full? 0415 85 ff test di,di 0417 0f 84 18 01 je L43 totalBytesWritten += bytesWritten; 041b 31 c0 xor ax,ax 041d 01 7e f4 add -0cH[bp],di 0420 11 46 f6 adc -0aH[bp],ax memcpy(buffer,buffer+bytesWritten,bytesInBuffer-bytesWritten); 0423 8b 46 f8 mov ax,-8H[bp] 0426 29 f8 sub ax,di 0428 89 46 c8 mov -38H[bp],ax 042b 50 push ax 042c 8c d9 mov cx,ds 042e bb 00 00 mov bx,offset char far buffer[] 0431 01 fb add bx,di 0433 b8 00 00 mov ax,offset char far buffer[] 0436 8c da mov dx,ds 0438 e8 00 00 call memcpy_ bytesInBuffer -= bytesWritten; //adjust buffersize 043b 8b 46 c8 mov ax,-38H[bp] 043e 89 46 f8 mov -8H[bp],ax DWORD timeTaken = endTime-startTime; 0441 8b 46 e2 mov ax,-1eH[bp] 0444 2b 46 dc sub ax,-24H[bp] 0447 89 46 fa mov -6H[bp],ax 044a 8b 7e e4 mov di,-1cH[bp] 044d 1b 7e e0 sbb di,-20H[bp] if(timeTaken==0) timeTaken=1; 0450 09 f8 or ax,di 0452 75 07 jne L33 0454 c7 46 fa 01 00 mov word ptr -6H[bp],0001H 0459 31 ff xor di,di if(timeTakenMAXBUFFERSIZE) 0489 3d 80 3e cmp ax,3e80H 048c 76 03 jbe L35 bestBufferSize=MAXBUFFERSIZE; 048e be 80 3e mov si,3e80H if(bestBufferSize<16) 0491 83 fe 10 L35 cmp si,0010H 0494 73 33 jae L40 bestBufferSize=16; 0496 eb 2e jmp L39 } else if(timeTaken>sliceSize) { 0498 39 d7 L36 cmp di,dx 049a 77 07 ja L37 049c 75 2b jne L40 049e 3b 5e fa cmp bx,-6H[bp] 04a1 73 26 jae L40 bestBufferSize = (((bytesWritten*sliceSize)/timeTaken) + bestBufferSize)/2; //bestBufferSize = (bytesWritten*sliceSize)/timeTaken; //bestBufferSize = bestBufferSize/2 + 16; 04a3 31 d2 L37 xor dx,dx 04a5 8b 5e fa mov bx,-6H[bp] 04a8 89 f9 mov cx,di 04aa e8 00 00 call __U4D 04ad 31 db xor bx,bx 04af 01 f0 add ax,si 04b1 11 d3 adc bx,dx 04b3 d1 eb shr bx,1 04b5 d1 d8 rcr ax,1 04b7 89 c6 mov si,ax if(bestBufferSize>MAXBUFFERSIZE) 04b9 3d 80 3e cmp ax,3e80H 04bc 76 03 jbe L38 bestBufferSize=MAXBUFFERSIZE; 04be be 80 3e mov si,3e80H if(bestBufferSize<16) 04c1 83 fe 10 L38 cmp si,0010H 04c4 73 03 jae L40 bestBufferSize=16; } 04c6 be 10 00 L39 mov si,0010H if(debug) 04c9 83 7e e8 00 L40 cmp word ptr -18H[bp],0000H 04cd 74 1b je L41 wsprintf(windowName,"%u bytes, %ld ms", bestBufferSize, timeTaken); else 04cf 57 push di 04d0 ff 76 fa push -6H[bp] 04d3 56 push si 04d4 68 00 00 push seg L45 04d7 68 ba 00 push offset L63 04da 8d 96 9c fd lea dx,-264H[bp] 04de 1e push ds 04df 52 push dx 04e0 9a 00 00 00 00 call far _wsprintf 04e5 83 c4 0e add sp,000eH 04e8 eb 38 jmp L42 wsprintf(windowName,"%s->%s (%d%%)", shortFromFilename, shortToFilename, (int)((totalBytesWritten*100)/totalFileSize)); 04ea 8b 46 f4 L41 mov ax,-0cH[bp] 04ed 8b 56 f6 mov dx,-0aH[bp] 04f0 bb 64 00 mov bx,0064H 04f3 31 c9 xor cx,cx 04f5 e8 00 00 call __I4M 04f8 8b 5e d2 mov bx,-2eH[bp] 04fb 8b 4e d4 mov cx,-2cH[bp] 04fe e8 00 00 call __I4D 0501 50 push ax 0502 ff 76 f0 push -10H[bp] 0505 ff 76 ea push -16H[bp] 0508 ff 76 ee push -12H[bp] 050b ff 76 ec push -14H[bp] 050e 68 00 00 push seg L45 0511 68 cb 00 push offset L64 0514 8d 96 9c fd lea dx,-264H[bp] 0518 1e push ds 0519 52 push dx 051a 9a 00 00 00 00 call far _wsprintf 051f 83 c4 12 add sp,0012H SetWindowText(hwnd,windowName); 0522 ff 76 d6 L42 push -2aH[bp] 0525 8d 96 9c fd lea dx,-264H[bp] 0529 1e push ds 052a 52 push dx 052b 9a 00 00 00 00 call far SETWINDOWTEXT } } 0530 e9 1a fe jmp L27 DestroyWindow(hwnd); 0533 ff 76 d6 L43 push -2aH[bp] 0536 9a 00 00 00 00 call far DESTROYWINDOW _lclose(hfFrom); 053b ff 76 da push -26H[bp] 053e 9a 00 00 00 00 call far _LCLOSE _lclose(hfTo); 0543 ff 76 d8 push -28H[bp] 0546 9a 00 00 00 00 call far _LCLOSE return 0; 054b 31 c0 xor ax,ax } 054d 8d 66 fc L44 lea sp,-4H[bp] 0550 5f pop di 0551 5e pop si 0552 5d pop bp 0553 c2 0a 00 ret 000aH No disassembly errors ------------------------------------------------------------ Segment: _BSS WORD 00003e80 bytes No disassembly errors ------------------------------------------------------------ Segment: _TEXT PARA 000000d9 bytes 0000 20 00 L45 DB 20H,00H 0002 20 00 L46 DB 20H,00H 0004 70 69 63 73 L47 DB 70H,69H,63H,73H 0008 70 6f 6f 6c DB 70H,6fH,6fH,6cH 000c 2e 69 6e 69 DB 2eH,69H,6eH,69H 0010 00 DB 00H 0011 54 69 6d 65 L48 DB 54H,69H,6dH,65H 0015 53 6c 69 63 DB 53H,6cH,69H,63H 0019 65 00 DB 65H,00H 001b 47 65 6e 65 L49 DB 47H,65H,6eH,65H 001f 72 61 6c 00 DB 72H,61H,6cH,00H 0023 70 69 63 73 L50 DB 70H,69H,63H,73H 0027 70 6f 6f 6c DB 70H,6fH,6fH,6cH 002b 2e 69 6e 69 DB 2eH,69H,6eH,69H 002f 00 DB 00H 0030 5a 61 70 4c L51 DB 5aH,61H,70H,4cH 0034 61 73 74 46 DB 61H,73H,74H,46H 0038 46 00 DB 46H,00H 003a 47 65 6e 65 L52 DB 47H,65H,6eH,65H 003e 72 61 6c 00 DB 72H,61H,6cH,00H 0042 20 00 L53 DB 20H,00H 0044 2f 64 00 L54 DB 2fH,64H,00H 0047 2d 64 00 L55 DB 2dH,64H,00H 004a 2f 7a 61 70 L56 DB 2fH,7aH,61H,70H 004e 6c 61 73 74 DB 6cH,61H,73H,74H 0052 66 66 00 DB 66H,66H,00H 0055 2d 7a 61 70 L57 DB 2dH,7aH,61H,70H 0059 6c 61 73 74 DB 6cH,61H,73H,74H 005d 66 66 00 DB 66H,66H,00H 0060 50 69 63 53 L58 DB 50H,69H,63H,53H 0064 70 6f 6f 6c DB 70H,6fH,6fH,6cH 0068 00 DB 00H 0069 43 6f 75 6c L59 DB 43H,6fH,75H,6cH 006d 64 20 6e 6f DB 64H,20H,6eH,6fH 0071 74 20 72 65 DB 74H,20H,72H,65H 0075 67 69 73 74 DB 67H,69H,73H,74H 0079 65 72 20 77 DB 65H,72H,20H,77H 007d 69 6e 64 6f DB 69H,6eH,64H,6fH 0081 77 20 63 6c DB 77H,20H,63H,6cH 0085 61 73 73 00 DB 61H,73H,73H,00H 0089 25 73 2d 3e L60 DB 25H,73H,2dH,3eH 008d 25 73 00 DB 25H,73H,00H 0090 50 69 63 53 L61 DB 50H,69H,63H,53H 0094 70 6f 6f 6c DB 70H,6fH,6fH,6cH 0098 00 DB 00H 0099 43 6f 75 6c L62 DB 43H,6fH,75H,6cH 009d 64 20 6e 6f DB 64H,20H,6eH,6fH 00a1 74 20 63 72 DB 74H,20H,63H,72H 00a5 65 61 74 65 DB 65H,61H,74H,65H 00a9 20 70 69 63 DB 20H,70H,69H,63H 00ad 73 70 6f 6f DB 73H,70H,6fH,6fH 00b1 6c 20 77 69 DB 6cH,20H,77H,69H 00b5 6e 64 6f 77 DB 6eH,64H,6fH,77H 00b9 00 DB 00H 00ba 25 75 20 62 L63 DB 25H,75H,20H,62H 00be 79 74 65 73 DB 79H,74H,65H,73H 00c2 2c 20 25 6c DB 2cH,20H,25H,6cH 00c6 64 20 6d 73 DB 64H,20H,6dH,73H 00ca 00 DB 00H 00cb 25 73 2d 3e L64 DB 25H,73H,2dH,3eH 00cf 25 73 20 28 DB 25H,73H,20H,28H 00d3 25 64 25 25 DB 25H,64H,25H,25H 00d7 29 00 DB 29H,00H No disassembly errors ------------------------------------------------------------