Module: D:\SOURCE\WORK\KEEPZ\keepz.cpp Group: 'DGROUP' CONST,CONST2,_DATA,_BSS Segment: keepz_TEXT PARA 0000058d bytes #define STRICT #include struct KZ_Data { WNDPROC oldWndProc; int subs; HWND sub[20]; }; static KZ_Data * __loadds GetKZ_Data(HWND hwnd) { 0000 KZ_Data far * far GetKZ_Data( HWND__ const near * ): 0000 45 inc bp 0001 55 push bp 0002 89 e5 mov bp,sp 0004 1e push ds 0005 50 push ax 0006 b8 00 00 mov ax,seg L42 0009 8e d8 mov ds,ax 000b 58 pop ax 000c 53 push bx 000d 51 push cx 000e 56 push si 000f 57 push di 0010 81 ec 0c 00 sub sp,000cH 0014 89 46 f4 mov -0cH[bp],ax HGLOBAL hglob=(HGLOBAL)GetProp(hwnd,"KZ_Data"); 0017 8b 46 f4 mov ax,-0cH[bp] 001a 50 push ax 001b b8 00 00 mov ax,seg L43 001e ba 00 00 mov dx,offset L43 0021 50 push ax 0022 52 push dx 0023 9a 00 00 00 00 call far GETPROP 0028 89 46 f2 mov -0eH[bp],ax if(hglob==0) return 0; 002b 83 7e f2 00 cmp word ptr -0eH[bp],0000H 002f 75 0c jne L1 0031 c7 46 ee 00 00 mov word ptr -12H[bp],0000H 0036 c7 46 f0 00 00 mov word ptr -10H[bp],0000H 003b eb 1f jmp L2 void FAR *ptr = GlobalLock(hglob); 003d 8b 46 f2 L1 mov ax,-0eH[bp] 0040 50 push ax 0041 9a 00 00 00 00 call far GLOBALLOCK 0046 89 c3 mov bx,ax 0048 89 d0 mov ax,dx 004a 89 5e ea mov -16H[bp],bx 004d 89 46 ec mov -14H[bp],ax return (KZ_Data *)ptr; 0050 8b 46 ea mov ax,-16H[bp] 0053 89 46 ee mov -12H[bp],ax 0056 8b 46 ec mov ax,-14H[bp] 0059 89 46 f0 mov -10H[bp],ax } 005c 8b 46 ee L2 mov ax,-12H[bp] 005f 8b 56 f0 mov dx,-10H[bp] 0062 8d 66 f6 lea sp,-0aH[bp] 0065 5f pop di 0066 5e pop si 0067 59 pop cx 0068 5b pop bx 0069 1f pop ds 006a 5d pop bp 006b 4d dec bp 006c cb retf 006d fc cld static void __loadds ReleaseKZ_Data(HWND hwnd) { 006e void far ReleaseKZ_Data( HWND__ const near * ): 006e 45 inc bp 006f 55 push bp 0070 89 e5 mov bp,sp 0072 1e push ds 0073 50 push ax 0074 b8 00 00 mov ax,seg L42 0077 8e d8 mov ds,ax 0079 58 pop ax 007a 53 push bx 007b 51 push cx 007c 52 push dx 007d 56 push si 007e 57 push di 007f 81 ec 04 00 sub sp,0004H 0083 89 46 f2 mov -0eH[bp],ax HGLOBAL hglob=(HGLOBAL)GetProp(hwnd,"KZ_Data"); 0086 8b 46 f2 mov ax,-0eH[bp] 0089 50 push ax 008a b8 00 00 mov ax,seg L43 008d ba 08 00 mov dx,offset L44 0090 50 push ax 0091 52 push dx 0092 9a 00 00 00 00 call far GETPROP 0097 89 46 f0 mov -10H[bp],ax if(hglob==0) return; 009a 83 7e f0 00 cmp word ptr -10H[bp],0000H 009e 74 09 je L3 GlobalUnlock(hglob); 00a0 8b 46 f0 mov ax,-10H[bp] 00a3 50 push ax 00a4 9a 00 00 00 00 call far GLOBALUNLOCK } 00a9 8d 66 f4 L3 lea sp,-0cH[bp] 00ac 5f pop di 00ad 5e pop si 00ae 5a pop dx 00af 59 pop cx 00b0 5b pop bx 00b1 1f pop ds 00b2 5d pop bp 00b3 4d dec bp 00b4 cb retf 00b5 fc cld static void __loadds DestroyKZ_Data(HWND hwnd) { 00b6 void far DestroyKZ_Data( HWND__ const near * ): 00b6 45 inc bp 00b7 55 push bp 00b8 89 e5 mov bp,sp 00ba 1e push ds 00bb 50 push ax 00bc b8 00 00 mov ax,seg L42 00bf 8e d8 mov ds,ax 00c1 58 pop ax 00c2 53 push bx 00c3 51 push cx 00c4 52 push dx 00c5 56 push si 00c6 57 push di 00c7 81 ec 04 00 sub sp,0004H 00cb 89 46 f2 mov -0eH[bp],ax HGLOBAL hglob=(HGLOBAL)GetProp(hwnd,"KZ_Data"); 00ce 8b 46 f2 mov ax,-0eH[bp] 00d1 50 push ax 00d2 b8 00 00 mov ax,seg L43 00d5 ba 10 00 mov dx,offset L45 00d8 50 push ax 00d9 52 push dx 00da 9a 00 00 00 00 call far GETPROP 00df 89 46 f0 mov -10H[bp],ax if(hglob==0) return; 00e2 83 7e f0 00 cmp word ptr -10H[bp],0000H 00e6 74 09 je L4 GlobalFree(hglob); 00e8 8b 46 f0 mov ax,-10H[bp] 00eb 50 push ax 00ec 9a 00 00 00 00 call far GLOBALFREE } 00f1 8d 66 f4 L4 lea sp,-0cH[bp] 00f4 5f pop di 00f5 5e pop si 00f6 5a pop dx 00f7 59 pop cx 00f8 5b pop bx 00f9 1f pop ds 00fa 5d pop bp 00fb 4d dec bp 00fc cb retf 00fd fc cld static KZ_Data *CreateKZ_Data(HWND hwnd) { 00fe KZ_Data far * far CreateKZ_Data( HWND__ const near * ): 00fe 45 inc bp 00ff 55 push bp 0100 89 e5 mov bp,sp 0102 53 push bx 0103 51 push cx 0104 56 push si 0105 57 push di 0106 81 ec 10 00 sub sp,0010H 010a 89 46 f6 mov -0aH[bp],ax HGLOBAL hglob = GlobalAlloc(GMEM_MOVEABLE,sizeof(KZ_Data)); 010d b8 02 00 mov ax,0002H 0110 50 push ax 0111 31 c0 xor ax,ax 0113 50 push ax 0114 b8 2e 00 mov ax,002eH 0117 50 push ax 0118 9a 00 00 00 00 call far GLOBALALLOC 011d 89 46 f4 mov -0cH[bp],ax if(hglob==0) return 0; 0120 83 7e f4 00 cmp word ptr -0cH[bp],0000H 0124 75 0d jne L5 0126 c7 46 f0 00 00 mov word ptr -10H[bp],0000H 012b c7 46 f2 00 00 mov word ptr -0eH[bp],0000H 0130 e9 a3 00 jmp L8 void FAR *ptr = GlobalLock(hglob); 0133 8b 46 f4 L5 mov ax,-0cH[bp] 0136 50 push ax 0137 9a 00 00 00 00 call far GLOBALLOCK 013c 89 c3 mov bx,ax 013e 89 d0 mov ax,dx 0140 89 5e ec mov -14H[bp],bx 0143 89 46 ee mov -12H[bp],ax if(ptr==0) { 0146 8b 4e ec mov cx,-14H[bp] 0149 8b 56 ee mov dx,-12H[bp] 014c 31 db xor bx,bx 014e 31 c0 xor ax,ax 0150 39 c2 cmp dx,ax 0152 75 19 jne L6 0154 39 d9 cmp cx,bx 0156 75 15 jne L6 GlobalFree(hglob); 0158 8b 46 f4 mov ax,-0cH[bp] 015b 50 push ax 015c 9a 00 00 00 00 call far GLOBALFREE return 0; } 0161 c7 46 f0 00 00 mov word ptr -10H[bp],0000H 0166 c7 46 f2 00 00 mov word ptr -0eH[bp],0000H 016b eb 69 jmp L8 if(!SetProp(hwnd,"KZ_Data",hglob)) { 016d 8b 46 f6 L6 mov ax,-0aH[bp] 0170 50 push ax 0171 b8 00 00 mov ax,seg L43 0174 ba 18 00 mov dx,offset L46 0177 50 push ax 0178 52 push dx 0179 8b 46 f4 mov ax,-0cH[bp] 017c 50 push ax 017d 9a 00 00 00 00 call far SETPROP 0182 85 c0 test ax,ax 0184 75 1e jne L7 GlobalUnlock(hglob); 0186 8b 46 f4 mov ax,-0cH[bp] 0189 50 push ax 018a 9a 00 00 00 00 call far GLOBALUNLOCK GlobalFree(hglob); 018f 8b 46 f4 mov ax,-0cH[bp] 0192 50 push ax 0193 9a 00 00 00 00 call far GLOBALFREE return 0; } 0198 c7 46 f0 00 00 mov word ptr -10H[bp],0000H 019d c7 46 f2 00 00 mov word ptr -0eH[bp],0000H 01a2 eb 32 jmp L8 KZ_Data *p=(KZ_Data *)ptr; 01a4 8b 5e ec L7 mov bx,-14H[bp] 01a7 89 5e e8 mov -18H[bp],bx 01aa 8b 5e ee mov bx,-12H[bp] 01ad 89 5e ea mov -16H[bp],bx p->oldWndProc=0; 01b0 c4 5e e8 les bx,dword ptr -18H[bp] 01b3 26 c7 07 00 00 mov word ptr es:[bx],0000H 01b8 c4 5e e8 les bx,dword ptr -18H[bp] 01bb 26 c7 47 02 00 00 mov word ptr es:+2H[bx],0000H p->subs=0; 01c1 c4 5e e8 les bx,dword ptr -18H[bp] 01c4 26 c7 47 04 00 00 mov word ptr es:+4H[bx],0000H return p; 01ca 8b 5e e8 mov bx,-18H[bp] 01cd 89 5e f0 mov -10H[bp],bx 01d0 8b 5e ea mov bx,-16H[bp] 01d3 89 5e f2 mov -0eH[bp],bx } 01d6 8b 46 f0 L8 mov ax,-10H[bp] 01d9 8b 56 f2 mov dx,-0eH[bp] 01dc 8d 66 f8 lea sp,-8H[bp] 01df 5f pop di 01e0 5e pop si 01e1 59 pop cx 01e2 5b pop bx 01e3 5d pop bp 01e4 4d dec bp 01e5 cb retf LONG CALLBACK KZ_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { 01e6 long far KZ_WndProc( HWND__ const near *, int unsigned, int unsigned, long ): 01e6 1e push ds 01e7 58 pop ax 01e8 90 nop 01e9 45 inc bp 01ea 55 push bp 01eb 89 e5 mov bp,sp 01ed 1e push ds 01ee 8e d8 mov ds,ax 01f0 56 push si 01f1 57 push di 01f2 81 ec 24 00 sub sp,0024H if(msg==WM_ACTIVATE) { 01f6 83 7e 0c 06 cmp word ptr +0cH[bp],0006H 01fa 74 03 je L9 01fc e9 5b 01 jmp L29 KZ_Data *p=GetKZ_Data(hWnd); 01ff 8b 46 0e L9 mov ax,+0eH[bp] 0202 0e push cs 0203 e8 00 00 call KZ_Data far * far GetKZ_Data( HWND__ const near * ) 0206 89 c3 mov bx,ax 0208 89 d0 mov ax,dx 020a 89 5e f6 mov -0aH[bp],bx 020d 89 46 f8 mov -8H[bp],ax if(!p) goto def; 0210 8b 4e f6 mov cx,-0aH[bp] 0213 8b 56 f8 mov dx,-8H[bp] 0216 31 db xor bx,bx 0218 31 c0 xor ax,ax 021a 39 c2 cmp dx,ax 021c 75 07 jne L10 021e 39 d9 cmp cx,bx 0220 75 03 jne L10 0222 e9 d7 01 jmp L32 if(wParam==WA_INACTIVE) { //remove topmost-bit of subs 0225 83 7e 0a 00 L10 cmp word ptr +0aH[bp],0000H 0229 74 03 je L11 022b e9 7d 00 jmp L19 for(int i=0; isubs; i++) { 022e c7 46 f4 00 00 L11 mov word ptr -0cH[bp],0000H 0233 eb 06 jmp L13 0235 8b 46 f4 L12 mov ax,-0cH[bp] 0238 ff 46 f4 inc word ptr -0cH[bp] 023b 8b 46 f4 L13 mov ax,-0cH[bp] 023e c4 5e f6 les bx,dword ptr -0aH[bp] 0241 26 3b 47 04 cmp ax,es:+4H[bx] 0245 7d 61 jge L18 if(IsWindow(p->sub[i])) { //SetWindowPos(p->sub[i],HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); } else { 0247 8b 5e f4 mov bx,-0cH[bp] 024a d1 e3 shl bx,1 024c 8e 46 f8 mov es,-8H[bp] 024f 03 5e f6 add bx,-0aH[bp] 0252 26 ff 77 06 push es:+6H[bx] 0256 9a 00 00 00 00 call far ISWINDOW 025b 85 c0 test ax,ax 025d 75 47 jne L17 for(int j=i; jsubs-1; j++) 025f 8b 46 f4 mov ax,-0cH[bp] 0262 89 46 f2 mov -0eH[bp],ax 0265 eb 06 jmp L15 0267 8b 46 f2 L14 mov ax,-0eH[bp] 026a ff 46 f2 inc word ptr -0eH[bp] 026d c4 5e f6 L15 les bx,dword ptr -0aH[bp] 0270 26 8b 5f 04 mov bx,es:+4H[bx] 0274 4b dec bx 0275 3b 5e f2 cmp bx,-0eH[bp] 0278 7e 26 jle L16 p->sub[j]=p->sub[j+1]; 027a 8b 76 f2 mov si,-0eH[bp] 027d d1 e6 shl si,1 027f 8e 46 f8 mov es,-8H[bp] 0282 03 76 f6 add si,-0aH[bp] 0285 8b 5e f2 mov bx,-0eH[bp] 0288 d1 e3 shl bx,1 028a 8b 7e f8 mov di,-8H[bp] 028d 89 7e f0 mov -10H[bp],di 0290 03 5e f6 add bx,-0aH[bp] 0293 26 8b 74 08 mov si,es:+8H[si] 0297 8e 46 f0 mov es,-10H[bp] 029a 26 89 77 06 mov es:+6H[bx],si 029e eb c7 jmp L14 i--; } 02a0 8b 46 f4 L16 mov ax,-0cH[bp] 02a3 ff 4e f4 dec word ptr -0cH[bp] } 02a6 eb 8d L17 jmp L12 } else { //set top-most bit of subs 02a8 e9 a8 00 L18 jmp L28 for(int i=0; isubs; i++) { 02ab c7 46 ec 00 00 L19 mov word ptr -14H[bp],0000H 02b0 eb 06 jmp L21 02b2 8b 46 ec L20 mov ax,-14H[bp] 02b5 ff 46 ec inc word ptr -14H[bp] 02b8 8b 46 ec L21 mov ax,-14H[bp] 02bb c4 5e f6 les bx,dword ptr -0aH[bp] 02be 26 3b 47 04 cmp ax,es:+4H[bx] 02c2 7c 03 jl L22 02c4 e9 8c 00 jmp L28 if(IsWindow(p->sub[i])) { 02c7 8b 5e ec L22 mov bx,-14H[bp] 02ca d1 e3 shl bx,1 02cc 8e 46 f8 mov es,-8H[bp] 02cf 03 5e f6 add bx,-0aH[bp] 02d2 26 ff 77 06 push es:+6H[bx] 02d6 9a 00 00 00 00 call far ISWINDOW 02db 85 c0 test ax,ax 02dd 74 2a je L23 SetWindowPos(p->sub[i],hWnd,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE); 02df 8b 5e ec mov bx,-14H[bp] 02e2 d1 e3 shl bx,1 02e4 8e 46 f8 mov es,-8H[bp] 02e7 03 5e f6 add bx,-0aH[bp] 02ea 26 ff 77 06 push es:+6H[bx] 02ee 8b 5e 0e mov bx,+0eH[bp] 02f1 53 push bx 02f2 31 db xor bx,bx 02f4 53 push bx 02f5 31 db xor bx,bx 02f7 53 push bx 02f8 31 db xor bx,bx 02fa 53 push bx 02fb 31 db xor bx,bx 02fd 53 push bx 02fe bb 13 00 mov bx,0013H 0301 53 push bx 0302 9a 00 00 00 00 call far SETWINDOWPOS } else { 0307 eb 47 jmp L27 for(int j=i; jsubs-1; j++) 0309 8b 46 ec L23 mov ax,-14H[bp] 030c 89 46 ea mov -16H[bp],ax 030f eb 06 jmp L25 0311 8b 46 ea L24 mov ax,-16H[bp] 0314 ff 46 ea inc word ptr -16H[bp] 0317 c4 5e f6 L25 les bx,dword ptr -0aH[bp] 031a 26 8b 5f 04 mov bx,es:+4H[bx] 031e 4b dec bx 031f 3b 5e ea cmp bx,-16H[bp] 0322 7e 26 jle L26 p->sub[j]=p->sub[j+1]; 0324 8b 76 ea mov si,-16H[bp] 0327 d1 e6 shl si,1 0329 8e 46 f8 mov es,-8H[bp] 032c 03 76 f6 add si,-0aH[bp] 032f 8b 5e ea mov bx,-16H[bp] 0332 d1 e3 shl bx,1 0334 8b 7e f8 mov di,-8H[bp] 0337 89 7e f0 mov -10H[bp],di 033a 03 5e f6 add bx,-0aH[bp] 033d 26 8b 74 08 mov si,es:+8H[si] 0341 8e 46 f0 mov es,-10H[bp] 0344 26 89 77 06 mov es:+6H[bx],si 0348 eb c7 jmp L24 i--; } 034a 8b 46 ec L26 mov ax,-14H[bp] 034d ff 4e ec dec word ptr -14H[bp] } } 0350 e9 5f ff L27 jmp L20 ReleaseKZ_Data(hWnd); } 0353 8b 46 0e L28 mov ax,+0eH[bp] 0356 0e push cs 0357 e8 00 00 call void far ReleaseKZ_Data( HWND__ const near * ) if(msg==WM_DESTROY) { 035a 83 7e 0c 02 L29 cmp word ptr +0cH[bp],0002H 035e 74 03 je L30 0360 e9 99 00 jmp L32 KZ_Data *p=GetKZ_Data(hWnd); 0363 8b 46 0e L30 mov ax,+0eH[bp] 0366 0e push cs 0367 e8 00 00 call KZ_Data far * far GetKZ_Data( HWND__ const near * ) 036a 89 c3 mov bx,ax 036c 89 d0 mov ax,dx 036e 89 5e e6 mov -1aH[bp],bx 0371 89 46 e8 mov -18H[bp],ax WNDPROC wp=p->oldWndProc; 0374 c4 5e e6 les bx,dword ptr -1aH[bp] 0377 26 8b 07 mov ax,es:[bx] 037a 89 46 e2 mov -1eH[bp],ax 037d c4 5e e6 les bx,dword ptr -1aH[bp] 0380 26 8b 47 02 mov ax,es:+2H[bx] 0384 89 46 e4 mov -1cH[bp],ax ReleaseKZ_Data(hWnd); 0387 8b 46 0e mov ax,+0eH[bp] 038a 0e push cs 038b e8 00 00 call void far ReleaseKZ_Data( HWND__ const near * ) DestroyKZ_Data(hWnd); 038e 8b 46 0e mov ax,+0eH[bp] 0391 0e push cs 0392 e8 00 00 call void far DestroyKZ_Data( HWND__ const near * ) if((WNDPROC)GetWindowLong(hWnd,GWL_WNDPROC)==KZ_WndProc) 0395 8b 46 0e mov ax,+0eH[bp] 0398 50 push ax 0399 b8 fc ff mov ax,0fffcH 039c 50 push ax 039d 9a 00 00 00 00 call far GETWINDOWLONG 03a2 89 c3 mov bx,ax 03a4 89 d0 mov ax,dx 03a6 89 c1 mov cx,ax 03a8 b8 00 00 mov ax,seg long far KZ_WndProc( HWND__ const near *, int unsigned, int unsigned, long ) 03ab ba 00 00 mov dx,offset long far KZ_WndProc( HWND__ const near *, int unsigned, int unsigned, long ) 03ae 89 de mov si,bx 03b0 89 d3 mov bx,dx 03b2 39 c1 cmp cx,ax 03b4 75 19 jne L31 03b6 39 de cmp si,bx 03b8 75 15 jne L31 SetWindowLong(hWnd,GWL_WNDPROC,(LONG)wp); 03ba 8b 46 0e mov ax,+0eH[bp] 03bd 50 push ax 03be b8 fc ff mov ax,0fffcH 03c1 50 push ax 03c2 8b 56 e2 mov dx,-1eH[bp] 03c5 8b 46 e4 mov ax,-1cH[bp] 03c8 50 push ax 03c9 52 push dx 03ca 9a 00 00 00 00 call far SETWINDOWLONG return CallWindowProc(wp,hWnd,msg,wParam,lParam); } 03cf 8b 5e e2 L31 mov bx,-1eH[bp] 03d2 8b 46 e4 mov ax,-1cH[bp] 03d5 50 push ax 03d6 53 push bx 03d7 8b 46 0e mov ax,+0eH[bp] 03da 50 push ax 03db 8b 46 0c mov ax,+0cH[bp] 03de 50 push ax 03df 8b 46 0a mov ax,+0aH[bp] 03e2 50 push ax 03e3 8b 5e 06 mov bx,+6H[bp] 03e6 8b 46 08 mov ax,+8H[bp] 03e9 50 push ax 03ea 53 push bx 03eb 9a 00 00 00 00 call far CALLWINDOWPROC 03f0 89 c3 mov bx,ax 03f2 89 d0 mov ax,dx 03f4 89 5e de mov -22H[bp],bx 03f7 89 46 e0 mov -20H[bp],ax 03fa eb 56 jmp L33 def: KZ_Data *p=GetKZ_Data(hWnd); 03fc 8b 46 0e L32 mov ax,+0eH[bp] 03ff 0e push cs 0400 e8 00 00 call KZ_Data far * far GetKZ_Data( HWND__ const near * ) 0403 89 c3 mov bx,ax 0405 89 d0 mov ax,dx 0407 89 5e da mov -26H[bp],bx 040a 89 46 dc mov -24H[bp],ax WNDPROC wp=p->oldWndProc; 040d c4 5e da les bx,dword ptr -26H[bp] 0410 26 8b 07 mov ax,es:[bx] 0413 89 46 d6 mov -2aH[bp],ax 0416 c4 5e da les bx,dword ptr -26H[bp] 0419 26 8b 47 02 mov ax,es:+2H[bx] 041d 89 46 d8 mov -28H[bp],ax ReleaseKZ_Data(hWnd); 0420 8b 46 0e mov ax,+0eH[bp] 0423 0e push cs 0424 e8 00 00 call void far ReleaseKZ_Data( HWND__ const near * ) return CallWindowProc(wp,hWnd,msg,wParam,lParam); 0427 8b 5e d6 mov bx,-2aH[bp] 042a 8b 46 d8 mov ax,-28H[bp] 042d 50 push ax 042e 53 push bx 042f 8b 46 0e mov ax,+0eH[bp] 0432 50 push ax 0433 8b 46 0c mov ax,+0cH[bp] 0436 50 push ax 0437 8b 46 0a mov ax,+0aH[bp] 043a 50 push ax 043b 8b 5e 06 mov bx,+6H[bp] 043e 8b 46 08 mov ax,+8H[bp] 0441 50 push ax 0442 53 push bx 0443 9a 00 00 00 00 call far CALLWINDOWPROC 0448 89 c3 mov bx,ax 044a 89 d0 mov ax,dx 044c 89 5e de mov -22H[bp],bx 044f 89 46 e0 mov -20H[bp],ax } 0452 8b 46 de L33 mov ax,-22H[bp] 0455 8b 56 e0 mov dx,-20H[bp] 0458 8d 66 fa lea sp,-6H[bp] 045b 5f pop di 045c 5e pop si 045d 1f pop ds 045e 5d pop bp 045f 4d dec bp 0460 ca 0a 00 retf 000aH 0463 fc cld extern "C" UINT CALLBACK __export KeepWindowAbove(HWND hwnd, HWND hwndAbove) { 0464 1e KEEPWINDOWABOVE push ds 0465 58 pop ax 0466 90 nop 0467 45 inc bp 0468 55 push bp 0469 89 e5 mov bp,sp 046b 1e push ds 046c 8e d8 mov ds,ax 046e 56 push si 046f 57 push di 0470 81 ec 08 00 sub sp,0008H KZ_Data *p=GetKZ_Data(hwndAbove); 0474 8b 46 06 mov ax,+6H[bp] 0477 0e push cs 0478 e8 00 00 call KZ_Data far * far GetKZ_Data( HWND__ const near * ) 047b 89 c3 mov bx,ax 047d 89 d0 mov ax,dx 047f 89 5e f2 mov -0eH[bp],bx 0482 89 46 f4 mov -0cH[bp],ax if(!p) { 0485 8b 4e f2 mov cx,-0eH[bp] 0488 8b 56 f4 mov dx,-0cH[bp] 048b 31 db xor bx,bx 048d 31 c0 xor ax,ax 048f 39 c2 cmp dx,ax 0491 75 59 jne L35 0493 39 d9 cmp cx,bx 0495 75 55 jne L35 p=CreateKZ_Data(hwndAbove); 0497 8b 46 06 mov ax,+6H[bp] 049a 0e push cs 049b e8 00 00 call KZ_Data far * far CreateKZ_Data( HWND__ const near * ) 049e 89 c3 mov bx,ax 04a0 89 d0 mov ax,dx 04a2 89 5e f2 mov -0eH[bp],bx 04a5 89 46 f4 mov -0cH[bp],ax if(!p) return 1; 04a8 8b 4e f2 mov cx,-0eH[bp] 04ab 8b 56 f4 mov dx,-0cH[bp] 04ae 31 db xor bx,bx 04b0 31 c0 xor ax,ax 04b2 39 c2 cmp dx,ax 04b4 75 0c jne L34 04b6 39 d9 cmp cx,bx 04b8 75 08 jne L34 04ba c7 46 f8 01 00 mov word ptr -8H[bp],0001H 04bf e9 99 00 jmp L41 p->oldWndProc = (WNDPROC)SetWindowLong(hwndAbove,GWL_WNDPROC,(LONG)KZ_WndProc); } 04c2 8b 46 06 L34 mov ax,+6H[bp] 04c5 50 push ax 04c6 b8 fc ff mov ax,0fffcH 04c9 50 push ax 04ca b8 00 00 mov ax,seg long far KZ_WndProc( HWND__ const near *, int unsigned, int unsigned, long ) 04cd bb 00 00 mov bx,offset long far KZ_WndProc( HWND__ const near *, int unsigned, int unsigned, long ) 04d0 89 da mov dx,bx 04d2 89 c3 mov bx,ax 04d4 53 push bx 04d5 52 push dx 04d6 9a 00 00 00 00 call far SETWINDOWLONG 04db 89 c3 mov bx,ax 04dd 89 d0 mov ax,dx 04df c4 76 f2 les si,dword ptr -0eH[bp] 04e2 26 89 1c mov es:[si],bx 04e5 c4 5e f2 les bx,dword ptr -0eH[bp] 04e8 26 89 47 02 mov es:+2H[bx],ax for(int i=0; isubs; i++) 04ec c7 46 f6 00 00 L35 mov word ptr -0aH[bp],0000H 04f1 eb 06 jmp L37 04f3 8b 46 f6 L36 mov ax,-0aH[bp] 04f6 ff 46 f6 inc word ptr -0aH[bp] 04f9 8b 46 f6 L37 mov ax,-0aH[bp] 04fc c4 5e f2 les bx,dword ptr -0eH[bp] 04ff 26 3b 47 04 cmp ax,es:+4H[bx] 0503 7d 1d jge L39 if(p->sub[i]==hwnd) 0505 8b 5e f6 mov bx,-0aH[bp] 0508 d1 e3 shl bx,1 050a 8e 46 f4 mov es,-0cH[bp] 050d 03 5e f2 add bx,-0eH[bp] 0510 26 8b 47 06 mov ax,es:+6H[bx] 0514 3b 46 08 cmp ax,+8H[bp] 0517 75 07 jne L38 return 2; 0519 c7 46 f8 02 00 mov word ptr -8H[bp],0002H 051e eb 3b jmp L41 0520 eb d1 L38 jmp L36 if(p->subs>=20) 0522 c4 5e f2 L39 les bx,dword ptr -0eH[bp] 0525 26 83 7f 04 14 cmp word ptr es:+4H[bx],0014H 052a 7c 07 jl L40 return 3; 052c c7 46 f8 03 00 mov word ptr -8H[bp],0003H 0531 eb 28 jmp L41 p->sub[p->subs++]=hwnd; 0533 c4 5e f2 L40 les bx,dword ptr -0eH[bp] 0536 26 8b 47 04 mov ax,es:+4H[bx] 053a c4 5e f2 les bx,dword ptr -0eH[bp] 053d 26 ff 47 04 inc word ptr es:+4H[bx] 0541 d1 e0 shl ax,1 0543 c4 5e f2 les bx,dword ptr -0eH[bp] 0546 01 c3 add bx,ax 0548 8b 46 08 mov ax,+8H[bp] 054b 26 89 47 06 mov es:+6H[bx],ax ReleaseKZ_Data(hwnd); 054f 8b 46 08 mov ax,+8H[bp] 0552 0e push cs 0553 e8 00 00 call void far ReleaseKZ_Data( HWND__ const near * ) return 0; 0556 c7 46 f8 00 00 mov word ptr -8H[bp],0000H } 055b 8b 46 f8 L41 mov ax,-8H[bp] 055e 8d 66 fa lea sp,-6H[bp] 0561 5f pop di 0562 5e pop si 0563 1f pop ds 0564 5d pop bp 0565 4d dec bp 0566 ca 04 00 retf 0004H 0569 fc cld int CALLBACK LibMain(HINSTANCE, WORD, WORD, LPSTR) { 056a 1e LIBMAIN push ds 056b 58 pop ax 056c 90 nop 056d 45 inc bp 056e 55 push bp 056f 89 e5 mov bp,sp 0571 1e push ds 0572 8e d8 mov ds,ax 0574 56 push si 0575 57 push di 0576 81 ec 02 00 sub sp,0002H return 1; 057a c7 46 f8 01 00 mov word ptr -8H[bp],0001H } 057f 8b 46 f8 mov ax,-8H[bp] 0582 8d 66 fa lea sp,-6H[bp] 0585 5f pop di 0586 5e pop si 0587 1f pop ds 0588 5d pop bp 0589 4d dec bp 058a ca 0a 00 retf 000aH No disassembly errors ------------------------------------------------------------ Segment: $$SYMBOLS BYTE 00000272 bytes 0000 06 31 - .1 0002 00 00 00 00 DD KZ_Data far * far GetKZ_Data( HWND__ const near * ) 0006 1c 22 00 00 6d 00 00 00 - ."..m... 000e 14 0b 02 00 77 31 08 0b - ....w1.. 0016 01 48 47 65 74 4b 5a 5f - .HGetKZ_ 001e 44 61 74 61 09 11 10 f4 - Data.... 0026 6e 68 77 6e 64 0a 11 10 - nhwnd... 002e f2 31 68 67 6c 6f 62 08 - .1hglob. 0036 11 10 ea 18 70 74 72 1e - ....ptr. 003e 22 6e 00 47 00 00 00 15 - "n.G.... 0046 0c 02 00 78 00 01 48 52 - ...x..HR 004e 65 6c 65 61 73 65 4b 5a - eleaseKZ 0056 5f 44 61 74 61 09 11 10 - _Data... 005e f2 6e 68 77 6e 64 0a 11 - .nhwnd.. 0066 10 f0 31 68 67 6c 6f 62 - ..1hglob 006e 1e 22 b6 00 47 00 00 00 - ."..G... 0076 15 0c 02 00 78 00 01 48 - ....x..H 007e 44 65 73 74 72 6f 79 4b - DestroyK 0086 5a 5f 44 61 74 61 09 11 - Z_Data.. 008e 10 f2 6e 68 77 6e 64 0a - ..nhwnd. 0096 11 10 f0 31 68 67 6c 6f - ...1hglo 009e 62 1f 22 fe 00 e8 00 00 - b."..... 00a6 00 0c 0a 02 00 79 31 08 - .....y1. 00ae 0b 01 48 43 72 65 61 74 - ..HCreat 00b6 65 4b 5a 5f 44 61 74 61 - eKZ_Data 00be 09 11 10 f6 6e 68 77 6e - ....nhwn 00c6 64 0a 11 10 f4 31 68 67 - d....1hg 00ce 6c 6f 62 08 11 10 ec 18 - lob..... 00d6 70 74 72 06 11 10 e8 76 - ptr....v 00de 70 08 20 25 02 00 00 5f - p. %..._ 00e6 01 08 20 5f 02 47 00 f5 - .. _.G.. 00ee 00 06 11 10 f2 0c 6a 08 - ......j. 00f6 20 5f 02 47 00 fd 00 08 - _.G.... 00fe 20 47 02 5f 00 05 01 08 - G._.... 0106 20 47 02 5f 00 0d 01 08 - G._.... 010e 20 2e 02 7a 00 1b 01 06 - ..z.... 0116 11 10 f4 0c 69 08 20 2e - ....i. . 011e 02 7a 00 5f 01 08 20 09 - .z._.. . 0126 03 47 00 31 01 06 11 10 - .G.1.... 012e ea 0c 6a 08 20 09 03 47 - ..j. ..G 0136 00 39 01 08 20 c7 02 89 - .9.. ... 013e 00 41 01 08 20 c7 02 89 - .A.. ... 0146 00 49 01 08 20 ab 02 a8 - .I.. ... 014e 00 57 01 06 11 10 ec 0c - .W...... 0156 69 08 20 ab 02 a8 00 5f - i. ...._ 015e 01 08 20 ff 01 5b 01 6d - .. ..[.m 0166 01 06 11 10 f6 76 70 08 - .....vp. 016e 20 ff 01 5b 01 92 01 08 - ..[.... 0176 20 63 03 99 00 8a 01 06 - c...... 017e 11 10 e6 76 70 07 11 10 - ...vp... 0186 e2 71 77 70 08 20 63 03 - .qwp. c. 018e 99 00 92 01 1b 22 e6 01 - .....".. 0196 7d 02 00 00 10 0b 02 00 - }....... 019e 7a 31 08 0b 00 4b 5a 5f - z1...KZ_ 01a6 57 6e 64 50 72 6f 63 0b - WndProc. 01ae 11 10 06 1d 6c 50 61 72 - ....lPar 01b6 61 6d 0b 11 10 0a 1c 77 - am.....w 01be 50 61 72 61 6d 08 11 10 - Param... 01c6 0c 66 6d 73 67 09 11 10 - .fmsg... 01ce 0e 6e 68 57 6e 64 06 11 - .nhWnd.. 01d6 10 da 76 70 07 11 10 d6 - ..vp.... 01de 71 77 70 08 20 97 04 55 - qwp. ..U 01e6 00 e9 01 08 20 97 04 55 - .... ..U 01ee 00 f9 01 08 20 05 05 1b - .... ... 01f6 00 f9 01 1e 22 64 04 05 - ...."d.. 01fe 01 00 00 10 0b 02 00 7b - .......{ 0206 48 00 4b 65 65 70 57 69 - H.KeepWi 020e 6e 64 6f 77 41 62 6f 76 - ndowAbov 0216 65 0e 11 10 06 6e 68 77 - e....nhw 021e 6e 64 41 62 6f 76 65 09 - ndAbove. 0226 11 10 08 6e 68 77 6e 64 - ...nhwnd 022e 06 11 10 f2 76 70 06 11 - ....vp.. 0236 10 f6 0c 69 17 22 6a 05 - ...i."j. 023e 23 00 00 00 10 0b 02 00 - #....... 0246 80 81 48 00 4c 69 62 4d - ..H.LibM 024e 61 69 6e 08 11 10 06 22 - ain...." 0256 2e 23 33 08 11 10 0a 53 - .#3....S 025e 2e 23 32 08 11 10 0c 53 - .#2....S 0266 2e 23 31 09 11 10 0e 80 - .#1..... 026e 80 2e 23 30 - ..#0 No disassembly errors ------------------------------------------------------------ Segment: $$TYPES BYTE 00000432 bytes 0000 06 13 32 04 00 00 06 11 - ..2..... 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 01 69 - .......i 0048 6e 74 0f 10 11 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 41 12 04 71 13 00 03 - .A..q... 0070 41 14 08 60 03 00 08 00 - A..`.... 0078 00 00 0f 67 01 84 22 06 - ...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 13 48 49 4e - n....HIN 00a8 44 49 52 03 41 12 0f 12 - DIR.A... 00b0 00 18 43 41 4c 4c 42 41 - ..CALLBA 00b8 43 4b 50 54 52 0b 12 00 - CKPTR... 00c0 18 50 52 4f 43 50 54 52 - .PROCPTR 00c8 0b 12 00 0e 4c 52 45 53 - ....LRES 00d0 55 4c 54 0a 12 00 0d 57 - ULT....W 00d8 50 41 52 41 4d 0a 12 00 - PARAM... 00e0 0e 4c 50 41 52 41 4d 07 - .LPARAM. 00e8 71 1b 03 0c 1c 1d 03 41 - q......A 00f0 1e 0c 12 00 1f 48 4f 4f - .....HOO 00f8 4b 50 52 4f 43 03 41 06 - KPROC.A. 0100 09 12 00 21 4c 50 53 54 - ...!LPST 0108 52 08 71 0c 04 22 0c 0c - R.q..".. 0110 0c 03 41 23 15 12 00 24 - ..A#...$ 0118 45 44 49 54 57 4f 52 44 - EDITWORD 0120 42 52 45 41 4b 50 52 4f - BREAKPRO 0128 43 07 71 12 03 0c 0c 1d - C.q..... 0130 03 41 26 0f 12 00 27 4c - .A&...'L 0138 49 4e 45 44 44 41 50 52 - INEDDAPR 0140 4f 43 06 71 0c 02 18 1d - OC.q.... 0148 03 41 29 10 12 00 2a 47 - .A)...*G 0150 4f 42 4a 45 4e 55 4d 50 - OBJENUMP 0158 52 4f 43 0c 12 00 0f 43 - ROC....C 0160 4f 4c 4f 52 52 45 46 03 - OLORREF. 0168 40 12 0b 12 00 2d 48 47 - @....-HG 0170 44 49 4f 42 4a 09 12 00 - DIOBJ... 0178 0c 48 46 49 4c 45 08 12 - .HFILE.. 0180 00 0c 42 4f 4f 4c 0b 12 - ..BOOL.. 0188 00 2d 48 47 4c 4f 42 41 - .-HGLOBA 0190 4c 05 71 30 01 31 03 41 - L.q0.1.A 0198 32 0f 12 00 33 47 4e 4f - 2...3GNO 01a0 54 49 46 59 50 52 4f 43 - TIFYPROC 01a8 03 41 0c 0e 12 00 35 4c - .A....5L 01b0 50 43 41 54 43 48 42 55 - PCATCHBU 01b8 46 04 20 08 0c 0c 12 00 - F. ..... 01c0 37 43 41 54 43 48 42 55 - 7CATCHBU 01c8 46 04 71 12 00 03 40 39 - F.q...@9 01d0 0c 12 00 3a 4e 45 41 52 - ...:NEAR 01d8 50 52 4f 43 03 41 39 0b - PROC.A9. 01e0 12 00 3c 46 41 52 50 52 - ..