---------------------------------------------------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - THE MAXIMUM NUMBER OF MOUSE MOVE EVENTS FOR THE ACTIVATE POPUP COMMAND
January 2026
---------------------------------------------------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp6, vfp7, vfp8), for the ACTIVATE POPUP command, sometimes VFP will enter an infinite loop.
The bug was reported by Matt Peirse.
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun78fd80 :: ; proc near
push ebp ;0x0078fd80 : 55
mov ebp , esp ;0x0078fd81 : 8bec
;
; ----------------------------------------------------------------------------------------------
; VFP 9.0 FIX - THE MAXIMUM NUMBER OF MOUSE MOVE EVENTS FOR THE ACTIVATE POPUP COMMAND
; November 2024
; ----------------------------------------------------------------------------------------------
; CCB
;
; In vfp9, for the ACTIVATE POPUP command,
; sometimes VFP will enter an infinite loop.
; In VFP Advanced, for the ACTIVATE POPUP command,
; when the number of mouse move events > the maximum number of mouse move events, VFP will exit loop.
;
; 2024/11/20, by ccb
;
; sub esp , 0C8h ;0x0078fd83 : 81ecc8000000
sub esp , 0D8h ;0x0078fd83 : 81ecc8000000
xor eax , eax
mov dword ptr [ ebp - 0D8h ][00h] , eax
mov dword ptr [ ebp - 0D8h ][04h] , eax
mov dword ptr [ ebp - 0D8h ][08h] , eax
mov dword ptr [ ebp - 0D8h ][0Ch] , eax
mov eax , dword ptr [ ebp + 40 ] ;0x0078fd89 : 8b4528
mov eax , dword ptr [eax] ;0x0078fd8c : 8b00
and dword ptr [ ebp - 16 ] , 00h ;0x0078fd8e : 8365f000
push ebx ;0x0078fd92 : 53
push esi ;0x0078fd93 : 56
xor ecx , ecx ;0x0078fd94 : 33c9
push edi ;0x0078fd96 : 57
mov edi , dword ptr [ ebp + 32 ] ;0x0078fd97 : 8b7d20
mov esi , dword ptr [edi] ;0x0078fd9a : 8b37
inc ecx ;0x0078fd9c : 41
cmp dword ptr [ eax + 64 ] , ecx ;0x0078fd9d : 394840
mov dword ptr [ ebp - 64 ] , ecx ;0x0078fda0 : 894dc0
mov dword ptr [ ebp - 40 ] , esi ;0x0078fda3 : 8975d8
je Label78fdbe ;0x0078fda6 : 7416
push dword ptr [ ebp + 48 ] ;0x0078fda8 : ff7530
lea ebx , dword ptr [ ebp + 40 ] ;0x0078fdab : 8d5d28
push dword ptr [ ebp + 44 ] ;0x0078fdae : ff752c
call Fun78f59e ;0x0078fdb1 : e8e8f7ffff
test eax , eax ;0x0078fdb6 : 85c0
je Label78ff03 ;0x0078fdb8 : 0f8445010000
Label78fdbe ::
mov eax , dword ptr [esi] ;0x0078fdbe : 8b06
xor ebx , ebx ;0x0078fdc0 : 33db
test byte ptr [ eax + 12 ] , 02h ;0x0078fdc2 : f6400c02
jne Label78fe8a ;0x0078fdc6 : 0f85be000000
mov ecx , dword ptr [ ebp + 8 ] ;0x0078fdcc : 8b4d08
cmp ecx , ebx ;0x0078fdcf : 3bcb
jne Label78fdf1 ;0x0078fdd1 : 751e
test byte ptr [ eax + 14 ] , 01h ;0x0078fdd3 : f6400e01
jne Label78fdf1 ;0x0078fdd7 : 7518
test byte ptr [ eax + 13 ] , 08h ;0x0078fdd9 : f6400d08
jne Label78fdeb ;0x0078fddd : 750c
cmp word ptr [ eax + 4 ] , bx ;0x0078fddf : 66395804
je Label78fdeb ;0x0078fde3 : 7406
test byte ptr [ eax + 4 ] , 08h ;0x0078fde5 : f6400408
je Label78fdf1 ;0x0078fde9 : 7406
Label78fdeb ::
mov ecx , dword ptr [ eax + 52 ] ;0x0078fdeb : 8b4834
mov dword ptr [ ebp + 8 ] , ecx ;0x0078fdee : 894d08
Label78fdf1 ::
cmp dword ptr [ eax + 52 ] , ecx ;0x0078fdf1 : 394834
jne Label78fe8a ;0x0078fdf4 : 0f8590000000
cmp dword ptr [ ebp + 12 ] , ebx ;0x0078fdfa : 395d0c
jne Label78fe0d ;0x0078fdfd : 750e
mov ecx , esi ;0x0078fdff : 8bce
call Fun46ef98 ;0x0078fe01 : e892f1cdff
mov eax , esi ;0x0078fe06 : 8bc6
call Fun78a762 ;0x0078fe08 : e855a9ffff
Label78fe0d ::
mov eax , dword ptr [esi] ;0x0078fe0d : 8b06
cmp dword ptr [eax] , 03h ;0x0078fe0f : 833803
jne Label78fe24 ;0x0078fe12 : 7510
cmp dword ptr [ eax + 48 ] , ebx ;0x0078fe14 : 395830
jne Label78fe24 ;0x0078fe17 : 750b
push ebx ;0x0078fe19 : 53
or edx , 0FFFFFFFFh ;0x0078fe1a : 83caff
mov ecx , esi ;0x0078fe1d : 8bce
call Fun416bd8 ;0x0078fe1f : e8b46dc8ff
Label78fe24 ::
mov eax , dword ptr [edi] ;0x0078fe24 : 8b07
mov ecx , dword ptr [ ebp + 36 ] ;0x0078fe26 : 8b4d24
mov dword ptr [ecx] , eax ;0x0078fe29 : 8901
call Fun546455 ;0x0078fe2b : e82566dbff
mov edx , dword ptr [esi] ;0x0078fe30 : 8b16
mov ecx , esi ;0x0078fe32 : 8bce
call Fun78f575 ;0x0078fe34 : e83cf7ffff
mov byte ptr [ edx + 0F9h ] , al ;0x0078fe39 : 8882f9000000
pushd 01h ;0x0078fe3f : 6a01
lea eax , dword ptr [ ebp - 12 ] ;0x0078fe41 : 8d45f4
push eax ;0x0078fe44 : 50
push dword ptr [ ebp + 40 ] ;0x0078fe45 : ff7528
mov eax , esi ;0x0078fe48 : 8bc6
push dword ptr [ ebp + 48 ] ;0x0078fe4a : ff7530
mov dword ptr [ ebp - 56 ] , ebx ;0x0078fe4d : 895dc8
push dword ptr [ ebp + 44 ] ;0x0078fe50 : ff752c
call Fun7908a7 ;0x0078fe53 : e84f0a0000
cmp eax , 0FFFFFFFAh ;0x0078fe58 : 83f8fa
je Label7903e9 ;0x0078fe5b : 0f8488050000
cmp eax , 0FFFFFFFCh ;0x0078fe61 : 83f8fc
je Label78fefc ;0x0078fe64 : 0f8492000000
cmp eax , 02h ;0x0078fe6a : 83f802
je Label78fe91 ;0x0078fe6d : 7422
cmp eax , 06h ;0x0078fe6f : 83f806
jle Label78ff03 ;0x0078fe72 : 0f8e8b000000
cmp eax , 0Bh ;0x0078fe78 : 83f80b
jg Label78ff03 ;0x0078fe7b : 0f8f82000000
test byte ptr [ Data9393b0 ] , 02h ;0x0078fe81 : f605b093930002
jne Label78fefc ;0x0078fe88 : 7572
Label78fe8a ::
xor eax , eax ;0x0078fe8a : 33c0
jmp Label7903f9 ;0x0078fe8c : e968050000
Label78fe91 ::
push dword ptr [ ebp + 48 ] ;0x0078fe91 : ff7530
mov eax , esi ;0x0078fe94 : 8bc6
push dword ptr [ ebp + 44 ] ;0x0078fe96 : ff752c
call Fun78fccf ;0x0078fe99 : e831feffff
test eax , eax ;0x0078fe9e : 85c0
jne Label7903e9 ;0x0078fea0 : 0f8543050000
mov eax , dword ptr [ ebp + 24 ] ;0x0078fea6 : 8b4518
and dword ptr [eax] , 00h ;0x0078fea9 : 832000
mov eax , dword ptr [ ebp + 20 ] ;0x0078feac : 8b4514
mov ebx , dword ptr [ ebp - 12 ] ;0x0078feaf : 8b5df4
mov dword ptr [eax] , ebx ;0x0078feb2 : 8918
mov eax , dword ptr [esi] ;0x0078feb4 : 8b06
test byte ptr [ eax + 13 ] , 04h ;0x0078feb6 : f6400d04
jne Label78fec2 ;0x0078feba : 7506
test byte ptr [ eax + 16 ] , 010h ;0x0078febc : f6401010
je Label78ff03 ;0x0078fec0 : 7441
Label78fec2 ::
mov edx , ebx ;0x0078fec2 : 8bd3
mov ecx , esi ;0x0078fec4 : 8bce
call Fun43de2a ;0x0078fec6 : e85fdfcaff
cmp dword ptr [ eax + 24 ] , 00h ;0x0078fecb : 83781800
jne Label78ff03 ;0x0078fecf : 7532
mov edi , dword ptr [ ebp + 20 ] ;0x0078fed1 : 8b7d14
push edi ;0x0078fed4 : 57
push dword ptr [ ebp + 16 ] ;0x0078fed5 : ff7510
mov eax , ebx ;0x0078fed8 : 8bc3
mov ecx , esi ;0x0078feda : 8bce
call Fun78f9b0 ;0x0078fedc : e8cffaffff
mov eax , dword ptr [esi] ;0x0078fee1 : 8b06
test byte ptr [ eax + 16 ] , 010h ;0x0078fee3 : f6401010
jne Label78fef5 ;0x0078fee7 : 750c
xor eax , eax ;0x0078fee9 : 33c0
cmp dword ptr [edi] , ebx ;0x0078feeb : 391f
sete al ;0x0078feed : 0f94c0
jmp Label7903f9 ;0x0078fef0 : e904050000
Label78fef5 ::
mov dword ptr [edi] , ebx ;0x0078fef5 : 891f
jmp Label7903e4 ;0x0078fef7 : e9e8040000
Label78fefc ::
mov dword ptr [ ebp - 56 ] , 01h ;0x0078fefc : c745c801000000
Label78ff03 ::
xor ebx , ebx ;0x0078ff03 : 33db
call Fun551e94 ;0x0078ff05 : e88a1fdcff
cmp esi , ebx ;0x0078ff0a : 3bf3
mov eax , dword ptr [ ebp + 44 ] ;0x0078ff0c : 8b452c
mov dword ptr [ ebp - 36 ] , eax ;0x0078ff0f : 8945dc
mov eax , dword ptr [ ebp + 48 ] ;0x0078ff12 : 8b4530
mov dword ptr [ ebp - 52 ] , ebx ;0x0078ff15 : 895dcc
mov dword ptr [ ebp - 48 ] , ebx ;0x0078ff18 : 895dd0
mov dword ptr [ ebp - 32 ] , eax ;0x0078ff1b : 8945e0
je Label78ff31 ;0x0078ff1e : 7411
mov eax , dword ptr [ ebp + 36 ] ;0x0078ff20 : 8b4524
cmp dword ptr [eax] , esi ;0x0078ff23 : 3930
jne Label78ff31 ;0x0078ff25 : 750a
mov esi , dword ptr [esi] ;0x0078ff27 : 8b36
mov eax , dword ptr [ esi + 60 ] ;0x0078ff29 : 8b463c
mov dword ptr [ ebp - 44 ] , eax ;0x0078ff2c : 8945d4
jmp Label78ff34 ;0x0078ff2f : eb03
Label78ff31 ::
mov dword ptr [ ebp - 44 ] , ebx ;0x0078ff31 : 895dd4
Label78ff34 ::
mov edi , dword ptr [edi] ;0x0078ff34 : 8b3f
cmp edi , ebx ;0x0078ff36 : 3bfb
je Label78ff3e ;0x0078ff38 : 7404
mov eax , edi ;0x0078ff3a : 8bc7
jmp Label78ff48 ;0x0078ff3c : eb0a
Label78ff3e ::
mov ecx , dword ptr [ ebp + 8 ] ;0x0078ff3e : 8b4d08
xor edx , edx ;0x0078ff41 : 33d2
call Fun42f404 ;0x0078ff43 : e8bcf4c9ff
Label78ff48 ::
cmp eax , ebx ;0x0078ff48 : 3bc3
je Label78ff61 ;0x0078ff4a : 7415
mov eax , dword ptr [eax] ;0x0078ff4c : 8b00
mov ecx , dword ptr [ eax + 8 ] ;0x0078ff4e : 8b4808
call Fun78c86e ;0x0078ff51 : e818c9ffff
test eax , eax ;0x0078ff56 : 85c0
mov dword ptr [ ebp - 8 ] , 01h ;0x0078ff58 : c745f801000000
jne Label78ff64 ;0x0078ff5f : 7503
Label78ff61 ::
mov dword ptr [ ebp - 8 ] , ebx ;0x0078ff61 : 895df8
Label78ff64 ::
mov eax , dword ptr [ ebp - 8 ] ;0x0078ff64 : 8b45f8
mov dword ptr [ ebp - 20 ] , eax ;0x0078ff67 : 8945ec
mov eax , dword ptr [ Data937fb0 ] ;0x0078ff6a : a1b07f9300
pushd 01h ;0x0078ff6f : 6a01
call Fun48c867 ;0x0078ff71 : e8f1c8cfff
lea edx , dword ptr [ ebp - 68 ] ;0x0078ff76 : 8d55bc
lea eax , dword ptr [ ebp + 0FFFFFF3Ch ] ;0x0078ff79 : 8d853cffffff
call Fun42c27f ;0x0078ff7f : e8fbc2c9ff
push ebx ;0x0078ff84 : 53
push eax ;0x0078ff85 : 50
call Fun42c2be ;0x0078ff86 : e833c3c9ff
cmp eax , ebx ;0x0078ff8b : 3bc3
pop ecx ;0x0078ff8d : 59
pop ecx ;0x0078ff8e : 59
mov dword ptr [ ebp - 60 ] , eax ;0x0078ff8f : 8945c4
jne Label790350 ;0x0078ff92 : 0f85b8030000
Label78ff98 ::
mov eax , dword ptr [ ebp + 16 ] ;0x0078ff98 : 8b4510
push dword ptr [ ebp + 48 ] ;0x0078ff9b : ff7530
mov dword ptr [eax] , ebx ;0x0078ff9e : 8918
mov eax , dword ptr [ ebp + 24 ] ;0x0078ffa0 : 8b4518
push dword ptr [ ebp + 44 ] ;0x0078ffa3 : ff752c
mov dword ptr [eax] , ebx ;0x0078ffa6 : 8918
mov eax , dword ptr [ ebp + 28 ] ;0x0078ffa8 : 8b451c
mov dword ptr [eax] , ebx ;0x0078ffab : 8918
mov dword ptr [ ebp + 40 ] , ebx ;0x0078ffad : 895d28
lea ebx , dword ptr [ ebp + 40 ] ;0x0078ffb0 : 8d5d28
call Fun78f59e ;0x0078ffb3 : e8e6f5ffff
mov edi , eax ;0x0078ffb8 : 8bf8
xor esi , esi ;0x0078ffba : 33f6
cmp edi , esi ;0x0078ffbc : 3bfe
mov dword ptr [ ebp - 40 ] , edi ;0x0078ffbe : 897dd8
je Label790179 ;0x0078ffc1 : 0f84b2010000
mov eax , dword ptr [edi] ;0x0078ffc7 : 8b07
mov ecx , dword ptr [ eax + 52 ] ;0x0078ffc9 : 8b4834
cmp ecx , dword ptr [ ebp + 8 ] ;0x0078ffcc : 3b4d08
jne Label790179 ;0x0078ffcf : 0f85a4010000
mov dword ptr [ eax + 48 ] , 02h ;0x0078ffd5 : c7403002000000
mov eax , dword ptr [edi] ;0x0078ffdc : 8b07
mov eax , dword ptr [ eax + 56 ] ;0x0078ffde : 8b4038
cmp eax , 0FFFFFFFFh ;0x0078ffe1 : 83f8ff
je Label78ffeb ;0x0078ffe4 : 7405
mov ecx , dword ptr [ ebp + 20 ] ;0x0078ffe6 : 8b4d14
mov dword ptr [ecx] , eax ;0x0078ffe9 : 8901
Label78ffeb ::
push dword ptr [ ebp - 56 ] ;0x0078ffeb : ff75c8
lea eax , dword ptr [ ebp - 12 ] ;0x0078ffee : 8d45f4
push eax ;0x0078fff1 : 50
push dword ptr [ ebp + 40 ] ;0x0078fff2 : ff7528
mov eax , edi ;0x0078fff5 : 8bc7
push dword ptr [ ebp + 48 ] ;0x0078fff7 : ff7530
push dword ptr [ ebp + 44 ] ;0x0078fffa : ff752c
call Fun7908a7 ;0x0078fffd : e8a5080000
mov ebx , dword ptr [ ebp + 36 ] ;0x00790002 : 8b5d24
mov dword ptr [ ebp - 28 ] , eax ;0x00790005 : 8945e4
mov eax , dword ptr [ebx] ;0x00790008 : 8b03
cmp eax , esi ;0x0079000a : 3bc6
je Label790082 ;0x0079000c : 7474
cmp eax , edi ;0x0079000e : 3bc7
je Label790031 ;0x00790010 : 741f
mov eax , dword ptr [eax] ;0x00790012 : 8b00
mov dword ptr [ eax + 48 ] , esi ;0x00790014 : 897030
mov ecx , dword ptr [ebx] ;0x00790017 : 8b0b
mov eax , dword ptr [ecx] ;0x00790019 : 8b01
cmp dword ptr [ eax + 0CCh ] , esi ;0x0079001b : 39b0cc000000
jne Label79002c ;0x00790021 : 7509
push esi ;0x00790023 : 56
or edx , 0FFFFFFFFh ;0x00790024 : 83caff
call Fun416bd8 ;0x00790027 : e8ac6bc8ff
Label79002c ::
mov dword ptr [ ebp - 16 ] , esi ;0x0079002c : 8975f0
jmp Label790082 ;0x0079002f : eb51
Label790031 ::
mov eax , dword ptr [edi] ;0x00790031 : 8b07
cmp dword ptr [eax] , 01h ;0x00790033 : 833801
jne Label790082 ;0x00790036 : 754a
cmp dword ptr [ eax + 0CCh ] , esi ;0x00790038 : 39b0cc000000
je Label790082 ;0x0079003e : 7442
mov ecx , dword ptr [ ebp - 12 ] ;0x00790040 : 8b4df4
cmp ecx , dword ptr [ eax + 56 ] ;0x00790043 : 3b4838
je Label790082 ;0x00790046 : 743a
mov eax , dword ptr [ ebp - 36 ] ;0x00790048 : 8b45dc
cmp dword ptr [ ebp + 44 ] , eax ;0x0079004b : 39452c
je Label79005d ;0x0079004e : 740d
call Fun42e3f9 ;0x00790050 : e8a4e3c9ff
mov dword ptr [ ebp - 52 ] , eax ;0x00790055 : 8945cc
mov dword ptr [ ebp - 48 ] , edx ;0x00790058 : 8955d0
jmp Label79007b ;0x0079005b : eb1e
Label79005d ::
call Fun42e3f9 ;0x0079005d : e897e3c9ff
mov esi , dword ptr [ ebp - 52 ] ;0x00790062 : 8b75cc
mov ecx , dword ptr [ ebp - 48 ] ;0x00790065 : 8b4dd0
add esi , 0C8h ;0x00790068 : 81c6c8000000
adc ecx , 00h ;0x0079006e : 83d100
cmp edx , ecx ;0x00790071 : 3bd1
jg Label790082 ;0x00790073 : 7f0d
jl Label79007b ;0x00790075 : 7c04
cmp eax , esi ;0x00790077 : 3bc6
jnb Label790082 ;0x00790079 : 7307
Label79007b ::
mov dword ptr [ ebp - 28 ] , 0FFFFFFFBh ;0x0079007b : c745e4fbffffff
Label790082 ::
mov ecx , dword ptr [ ebp + 24 ] ;0x00790082 : 8b4d18
mov edx , dword ptr [ ebp - 28 ] ;0x00790085 : 8b55e4
mov eax , dword ptr [ ebp + 28 ] ;0x00790088 : 8b451c
xor esi , esi ;0x0079008b : 33f6
mov dword ptr [ebx] , edi ;0x0079008d : 893b
inc esi ;0x0079008f : 46
xor ebx , ebx ;0x00790090 : 33db
cmp edx , 07h ;0x00790092 : 83fa07
mov dword ptr [ecx] , esi ;0x00790095 : 8931
mov dword ptr [eax] , ebx ;0x00790097 : 8918
jg Label79013f ;0x00790099 : 0f8fa0000000
je Label790133 ;0x0079009f : 0f848e000000
cmp edx , 0FFFFFFFCh ;0x007900a5 : 83fafc
je Label79011e ;0x007900a8 : 7474
jle Label7901bc ;0x007900aa : 0f8e0c010000
cmp edx , 0FFFFFFFEh ;0x007900b0 : 83fafe
jle Label7900f7 ;0x007900b3 : 7e42
cmp edx , 0FFFFFFFFh ;0x007900b5 : 83faff
je Label7900db ;0x007900b8 : 7421
cmp edx , 02h ;0x007900ba : 83fa02
jne Label7901bc ;0x007900bd : 0f85f9000000
push dword ptr [ ebp + 16 ] ;0x007900c3 : ff7510
mov eax , dword ptr [ ebp + 20 ] ;0x007900c6 : 8b4514
mov dword ptr [ecx] , ebx ;0x007900c9 : 8919
mov ecx , dword ptr [ ebp - 12 ] ;0x007900cb : 8b4df4
mov dword ptr [ ebp - 16 ] , esi ;0x007900ce : 8975f0
call Fun78f7b5 ;0x007900d1 : e8dff6ffff
jmp Label7901bc ;0x007900d6 : e9e1000000
Label7900db ::
test byte ptr [ Data9393b0 ] , 02h ;0x007900db : f605b093930002
je Label7901bc ;0x007900e2 : 0f84d4000000
push dword ptr [ ebp - 16 ] ;0x007900e8 : ff75f0
mov eax , edi ;0x007900eb : 8bc7
call Fun78fa8b ;0x007900ed : e899f9ffff
jmp Label7901bc ;0x007900f2 : e9c5000000
Label7900f7 ::
cmp dword ptr [ ebp - 20 ] , ebx ;0x007900f7 : 395dec
je Label790109 ;0x007900fa : 740d
test byte ptr [ Data9393b0 ] , 012h ;0x007900fc : f605b093930012
je Label7901bc ;0x00790103 : 0f84b3000000
Label790109 ::
push dword ptr [ ebp + 48 ] ;0x00790109 : ff7530
push dword ptr [ ebp + 44 ] ;0x0079010c : ff752c
push dword ptr [ ebp - 16 ] ;0x0079010f : ff75f0
push edx ;0x00790112 : 52
push edi ;0x00790113 : 57
call Fun78fb36 ;0x00790114 : e81dfaffff
jmp Label7901bc ;0x00790119 : e99e000000
Label79011e ::
mov dword ptr [eax] , esi ;0x0079011e : 8930
lea eax , dword ptr [ ebp + 44 ] ;0x00790120 : 8d452c
push eax ;0x00790123 : 50
mov eax , dword ptr [ ebp - 12 ] ;0x00790124 : 8b45f4
mov ecx , edi ;0x00790127 : 8bcf
call Fun78e471 ;0x00790129 : e843e3ffff
jmp Label7901bc ;0x0079012e : e989000000
Label790133 ::
pushd 0FFFFFFFFh ;0x00790133 : 6aff
Label790135 ::
lea esi , dword ptr [ ebp + 44 ] ;0x00790135 : 8d752c
call Fun78e3fe ;0x00790138 : e8c1e2ffff
jmp Label7901bc ;0x0079013d : eb7d
Label79013f ::
sub edx , 08h ;0x0079013f : 83ea08
je Label790175 ;0x00790142 : 7431
dec edx ;0x00790144 : 4a
je Label79016a ;0x00790145 : 7423
dec edx ;0x00790147 : 4a
je Label79015e ;0x00790148 : 7414
dec edx ;0x0079014a : 4a
jne Label7901bc ;0x0079014b : 756f
push dword ptr [ ebp + 48 ] ;0x0079014d : ff7530
push dword ptr [ ebp + 44 ] ;0x00790150 : ff752c
push dword ptr [ ebp + 40 ] ;0x00790153 : ff7528
push edi ;0x00790156 : 57
call Fun78fc39 ;0x00790157 : e8ddfaffff
jmp Label7901bc ;0x0079015c : eb5e
Label79015e ::
mov eax , dword ptr [edi] ;0x0079015e : 8b07
mov ecx , dword ptr [ eax + 64 ] ;0x00790160 : 8b4840
sub ecx , dword ptr [ eax + 60 ] ;0x00790163 : 2b483c
dec ecx ;0x00790166 : 49
Label790167 ::
push ecx ;0x00790167 : 51
jmp Label790135 ;0x00790168 : ebcb
Label79016a ::
mov eax , dword ptr [edi] ;0x0079016a : 8b07
mov ecx , dword ptr [ eax + 60 ] ;0x0079016c : 8b483c
sub ecx , dword ptr [ eax + 64 ] ;0x0079016f : 2b4840
inc ecx ;0x00790172 : 41
jmp Label790167 ;0x00790173 : ebf2
Label790175 ::
pushd 01h ;0x00790175 : 6a01
jmp Label790135 ;0x00790177 : ebbc
Label790179 ::
push dword ptr [ ebp + 48 ] ;0x00790179 : ff7530
push dword ptr [ ebp + 44 ] ;0x0079017c : ff752c
call Fun7854ad ;0x0079017f : e82953ffff
test eax , eax ;0x00790184 : 85c0
je Label790192 ;0x00790186 : 740a
pushd 04001h ;0x00790188 : 6801400000
call Fun4295f6 ;0x0079018d : e86494c9ff
Label790192 ::
cmp dword ptr [ ebp - 8 ] , esi ;0x00790192 : 3975f8
jne Label7901bc ;0x00790195 : 7525
mov eax , dword ptr [ ebp + 36 ] ;0x00790197 : 8b4524
mov ebx , dword ptr [eax] ;0x0079019a : 8b18
cmp ebx , esi ;0x0079019c : 3bde
je Label7901bc ;0x0079019e : 741c
lea eax , dword ptr [ ebp - 64 ] ;0x007901a0 : 8d45c0
push eax ;0x007901a3 : 50
push dword ptr [ ebp - 16 ] ;0x007901a4 : ff75f0
lea eax , dword ptr [ ebp - 12 ] ;0x007901a7 : 8d45f4
push dword ptr [ ebp + 48 ] ;0x007901aa : ff7530
push dword ptr [ ebp + 44 ] ;0x007901ad : ff752c
push dword ptr [ ebp - 32 ] ;0x007901b0 : ff75e0
push dword ptr [ ebp - 36 ] ;0x007901b3 : ff75dc
push eax ;0x007901b6 : 50
call Fun78f660 ;0x007901b7 : e8a4f4ffff
Label7901bc ::
mov eax , dword ptr [ ebp + 44 ] ;0x007901bc : 8b452c
mov dword ptr [ ebp - 36 ] , eax ;0x007901bf : 8945dc
mov eax , dword ptr [ ebp + 48 ] ;0x007901c2 : 8b4530
xor esi , esi ;0x007901c5 : 33f6
cmp dword ptr [ ebp - 20 ] , esi ;0x007901c7 : 3975ec
mov dword ptr [ ebp - 32 ] , eax ;0x007901ca : 8945e0
je Label790293 ;0x007901cd : 0f84c0000000
test byte ptr [ Data9393b0 ] , 05Ah ;0x007901d3 : f605b09393005a
je Label790293 ;0x007901da : 0f84b3000000
cmp edi , esi ;0x007901e0 : 3bfe
mov dword ptr [ ebp - 8 ] , esi ;0x007901e2 : 8975f8
je Label790315 ;0x007901e5 : 0f842a010000
mov eax , dword ptr [edi] ;0x007901eb : 8b07
mov ecx , dword ptr [ eax + 52 ] ;0x007901ed : 8b4834
cmp ecx , dword ptr [ ebp + 8 ] ;0x007901f0 : 3b4d08
jne Label790349 ;0x007901f3 : 0f8550010000
cmp dword ptr [ eax + 0A4h ] , esi ;0x007901f9 : 39b0a4000000
je Label790293 ;0x007901ff : 0f848e000000
lea ecx , dword ptr [ ebp - 116 ] ;0x00790205 : 8d4d8c
mov dword ptr [ Data93c2b8 ] , esi ;0x00790208 : 8935b8c29300
call Fun431fa1 ;0x0079020e : e88e1dcaff
xor edx , edx ;0x00790213 : 33d2
lea ecx , dword ptr [ ebp - 100 ] ;0x00790215 : 8d4d9c
call Fun54ea34 ;0x00790218 : e817e8dbff
mov dword ptr [ ebp - 116 ] , 09h ;0x0079021d : c7458c09000000
mov eax , dword ptr [edi] ;0x00790224 : 8b07
mov ebx , 0100h ;0x00790226 : bb00010000
test dword ptr [ eax + 16 ] , ebx ;0x0079022b : 855810
je Label790259 ;0x0079022e : 7429
mov ecx , dword ptr [ eax + 0A4h ] ;0x00790230 : 8b88a4000000
cmp ecx , esi ;0x00790236 : 3bce
je Label790244 ;0x00790238 : 740a
mov ecx , dword ptr [ecx] ;0x0079023a : 8b09
mov eax , dword ptr [ eax + 0E4h ] ;0x0079023c : 8b80e4000000
mov dword ptr [ecx] , eax ;0x00790242 : 8901
Label790244 ::
mov eax , dword ptr [edi] ;0x00790244 : 8b07
mov eax , dword ptr [ eax + 0A4h ] ;0x00790246 : 8b80a4000000
cmp eax , esi ;0x0079024c : 3bc6
je Label790259 ;0x0079024e : 7409
mov eax , dword ptr [eax] ;0x00790250 : 8b00
mov dword ptr [ eax + 32 ] , offset Label8c4bb5 ;0x00790252 : c74020b54b8c00
Label790259 ::
mov eax , dword ptr [edi] ;0x00790259 : 8b07
push dword ptr [ eax + 0A4h ] ;0x0079025b : ffb0a4000000
lea eax , dword ptr [ ebp - 116 ] ;0x00790261 : 8d458c
call Fun785581 ;0x00790264 : e81853ffff
mov ecx , dword ptr [edi] ;0x00790269 : 8b0f
cmp dword ptr [ecx] , 01h ;0x0079026b : 833901
jne Label790278 ;0x0079026e : 7508
cmp dword ptr [ ecx + 0E4h ] , esi ;0x00790270 : 39b1e4000000
je Label79027b ;0x00790276 : 7403
Label790278 ::
mov dword ptr [ ebp - 8 ] , eax ;0x00790278 : 8945f8
Label79027b ::
test dword ptr [ ecx + 16 ] , ebx ;0x0079027b : 855910
je Label790293 ;0x0079027e : 7413
mov ecx , dword ptr [ ecx + 0A4h ] ;0x00790280 : 8b89a4000000
cmp ecx , esi ;0x00790286 : 3bce
je Label790293 ;0x00790288 : 7409
mov eax , dword ptr [ecx] ;0x0079028a : 8b01
mov dword ptr [ eax + 32 ] , offset Label456d23 ;0x0079028c : c74020236d4500
Label790293 ::
cmp edi , esi ;0x00790293 : 3bfe
je Label790315 ;0x00790295 : 747e
movzx ebx ,byte ptr [ Data9370dc ] ;0x00790297 : 0fb61ddc709300
mov byte ptr [ Data9370dc ] , 01h ;0x0079029e : c605dc70930001
jmp Label7902f7 ;0x007902a5 : eb50
Label7902a7 ::
mov eax , dword ptr [edi] ;0x007902a7 : 8b07
cmp dword ptr [ eax + 09Ch ] , esi ;0x007902a9 : 39b09c000000
je Label7902c1 ;0x007902af : 7410
test byte ptr [ eax + 17 ] , 040h ;0x007902b1 : f6401140
jne Label7902c1 ;0x007902b5 : 750a
lea ecx , dword ptr [ ebp - 116 ] ;0x007902b7 : 8d4d8c
call Fun4d7a99 ;0x007902ba : e8da77d4ff
jmp Label7902f7 ;0x007902bf : eb36
Label7902c1 ::
push esi ;0x007902c1 : 56
push dword ptr [ ebp - 96 ] ;0x007902c2 : ff75a0
push dword ptr [ ebp - 100 ] ;0x007902c5 : ff759c
call Fun791139 ;0x007902c8 : e86c0e0000
cmp dword ptr [ Data937fbc ] , esi ;0x007902cd : 3935bc7f9300
je Label7902f7 ;0x007902d3 : 7422
mov eax , dword ptr [edi] ;0x007902d5 : 8b07
test byte ptr [ eax + 12 ] , 080h ;0x007902d7 : f6400c80
je Label7902f7 ;0x007902db : 741a
push dword ptr [ eax + 0A4h ] ;0x007902dd : ffb0a4000000
lea eax , dword ptr [ ebp - 100 ] ;0x007902e3 : 8d459c
call Fun8f7eb4 ;0x007902e6 : e8c97b1600
test eax , eax ;0x007902eb : 85c0
jne Label7902f7 ;0x007902ed : 7508
lea eax , dword ptr [ ebp - 116 ] ;0x007902ef : 8d458c
call Fun48d21f ;0x007902f2 : e828cfcfff
Label7902f7 ::
pushd 01h ;0x007902f7 : 6a01
lea eax , dword ptr [ ebp - 116 ] ;0x007902f9 : 8d458c
push eax ;0x007902fc : 50
pushd 010h ;0x007902fd : 6a10
pop eax ;0x007902ff : 58
pushd 0Fh ;0x00790300 : 6a0f
pop ecx ;0x00790302 : 59
call Fun49f897 ;0x00790303 : e88ff5d0ff
test eax , eax ;0x00790308 : 85c0
jne Label7902a7 ;0x0079030a : 759b
cmp ebx , esi ;0x0079030c : 3bde
jne Label790315 ;0x0079030e : 7505
mov byte ptr [ Data9370dc ] , al ;0x00790310 : a2dc709300
Label790315 ::
xor ecx , ecx ;0x00790315 : 33c9
call Fun42e42c ;0x00790317 : e810e1c9ff
call Fun49dafa ;0x0079031c : e8d9d7d0ff
mov dword ptr [ ebp - 24 ] , eax ;0x00790321 : 8945e8
call Fun4821f7 ;0x00790324 : e8ce1ecfff
pushd 01h ;0x00790329 : 6a01
lea eax , dword ptr [ ebp + 44 ] ;0x0079032b : 8d452c
push eax ;0x0079032e : 50
call Fun472205 ;0x0079032f : e8d11eceff
test eax , eax ;0x00790334 : 85c0
jne Label79033d ;0x00790336 : 7505
cmp dword ptr [ ebp - 8 ] , esi ;0x00790338 : 3975f8
je Label79034c ;0x0079033b : 740f
Label79033d ::
cmp dword ptr [ ebp - 24 ] , esi ;0x0079033d : 3975e8
jne Label79034c ;0x00790340 : 750a
;
; ----------------------------------------------------------------------------------------------
; VFP 9.0 FIX - THE MAXIMUM NUMBER OF MOUSE MOVE EVENTS FOR THE ACTIVATE POPUP COMMAND
; November 2024
; ----------------------------------------------------------------------------------------------
; CCB
;
; In vfp9, for the ACTIVATE POPUP command,
; sometimes VFP will enter an infinite loop.
; In VFP Advanced, for the ACTIVATE POPUP command,
; when the number of mouse move events > the maximum number of mouse move events, VFP will exit loop.
;
; 2024/11/20, by ccb
;
mov ecx,dword ptr vfpa_sys9175_data
inc dword ptr [ ebp - 0D8h ][00h]
cmp dword ptr [ ebp - 0D8h ][00h],ecx
jbe Label790342
mov dword ptr [ ebp - 24 ] , 01h
jmp Label79034c
Label790342 ::
xor ebx , ebx ;0x00790342 : 33db
jmp Label78ff98 ;0x00790344 : e94ffcffff
Label790349 ::
mov dword ptr [ ebp - 20 ] , esi ;0x00790349 : 8975ec
Label79034c ::
xor ebx , ebx ;0x0079034c : 33db
jmp Label790353 ;0x0079034e : eb03
Label790350 ::
mov edi , dword ptr [ ebp - 40 ] ;0x00790350 : 8b7dd8
Label790353 ::
lea eax , dword ptr [ ebp - 68 ] ;0x00790353 : 8d45bc
push eax ;0x00790356 : 50
lea eax , dword ptr [ ebp + 0FFFFFF3Ch ] ;0x00790357 : 8d853cffffff
call Fun42d200 ;0x0079035d : e89ecec9ff
mov eax , dword ptr [ Data937fb0 ] ;0x00790362 : a1b07f9300
push ebx ;0x00790367 : 53
call Fun48c867 ;0x00790368 : e8fac4cfff
mov ecx , dword ptr [ ebp - 60 ] ;0x0079036d : 8b4dc4
cmp ecx , ebx ;0x00790370 : 3bcb
je Label790379 ;0x00790372 : 7405
call Fun544742 ;0x00790374 : e8c943dbff
Label790379 ::
cmp dword ptr [ ebp - 20 ] , ebx ;0x00790379 : 395dec
je Label7903af ;0x0079037c : 7431
cmp dword ptr [ ebp - 24 ] , ebx ;0x0079037e : 395de8
jne Label7903af ;0x00790381 : 752c
pushd 02h ;0x00790383 : 6a02
pushd 0Ah ;0x00790385 : 6a0a
pushd 09h ;0x00790387 : 6a09
lea eax , dword ptr [ ebp - 116 ] ;0x00790389 : 8d458c
push eax ;0x0079038c : 50
call Fun4b5736 ;0x0079038d : e8a453d2ff
pushd 02h ;0x00790392 : 6a02
pushd 09h ;0x00790394 : 6a09
pushd 0Ah ;0x00790396 : 6a0a
lea eax , dword ptr [ ebp - 116 ] ;0x00790398 : 8d458c
push eax ;0x0079039b : 50
call Fun4b5736 ;0x0079039c : e89553d2ff
test eax , eax ;0x007903a1 : 85c0
je Label7903af ;0x007903a3 : 740a
push ebx ;0x007903a5 : 53
lea eax , dword ptr [ ebp - 116 ] ;0x007903a6 : 8d458c
push eax ;0x007903a9 : 50
call Fun4a107e ;0x007903aa : e8cf0cd1ff
Label7903af ::
cmp edi , ebx ;0x007903af : 3bfb
je Label7903c7 ;0x007903b1 : 7414
mov eax , dword ptr [edi] ;0x007903b3 : 8b07
mov eax , dword ptr [ eax + 60 ] ;0x007903b5 : 8b403c
cmp eax , dword ptr [ ebp - 44 ] ;0x007903b8 : 3b45d4
je Label7903c7 ;0x007903bb : 740a
cmp dword ptr [ ebp - 24 ] , ebx ;0x007903bd : 395de8
jne Label7903cc ;0x007903c0 : 750a
call Fun7916af ;0x007903c2 : e8e8120000
Label7903c7 ::
cmp dword ptr [ ebp - 24 ] , ebx ;0x007903c7 : 395de8
je Label7903df ;0x007903ca : 7413
Label7903cc ::
mov eax , dword ptr [ ebp + 16 ] ;0x007903cc : 8b4510
mov dword ptr [eax] , ebx ;0x007903cf : 8918
mov eax , dword ptr [ ebp + 24 ] ;0x007903d1 : 8b4518
mov dword ptr [eax] , 01h ;0x007903d4 : c70001000000
mov eax , dword ptr [ ebp + 28 ] ;0x007903da : 8b451c
mov dword ptr [eax] , ebx ;0x007903dd : 8918
Label7903df ::
mov eax , dword ptr [ ebp + 32 ] ;0x007903df : 8b4520
mov dword ptr [eax] , edi ;0x007903e2 : 8938
Label7903e4 ::
xor eax , eax ;0x007903e4 : 33c0
inc eax ;0x007903e6 : 40
jmp Label7903f9 ;0x007903e7 : eb10
Label7903e9 ::
push dword ptr [ ebp + 40 ] ;0x007903e9 : ff7528
call Fun78fd55 ;0x007903ec : e864f9ffff
mov ecx , dword ptr [ ebp + 24 ] ;0x007903f1 : 8b4d18
xor eax , eax ;0x007903f4 : 33c0
inc eax ;0x007903f6 : 40
mov dword ptr [ecx] , eax ;0x007903f7 : 8901
Label7903f9 ::
;
; ----------------------------------------------------------------------------------------------
; VFP 9.0 FIX - THE MAXIMUM NUMBER OF MOUSE MOVE EVENTS FOR THE ACTIVATE POPUP COMMAND
; November 2024
; ----------------------------------------------------------------------------------------------
; CCB
;
; In vfp9, for the ACTIVATE POPUP command,
; sometimes VFP will enter an infinite loop.
; In VFP Advanced, for the ACTIVATE POPUP command,
; when the number of mouse move events > the maximum number of mouse move events, VFP will exit loop.
;
; 2024/11/20, by ccb
;
mov ecx,dword ptr vfpa_sys9175_data
cmp dword ptr [ ebp - 0D8h ][00h],ecx
jbe Label7903fa
xor eax , eax
Label7903fa ::
pop edi ;0x007903f9 : 5f
pop esi ;0x007903fa : 5e
pop ebx ;0x007903fb : 5b
leave ;0x007903fc : c9
ret 02Ch ;0x007903fd : c22c00
4. APPLIES TO:
VFP 6.0.8167.0
VFP 6.0.8961.0 (SP5)
VFP 7.0.0.9262
VFP 7.0.0.9465 (SP1)
VFP 8.0.0.2521
VFP 8.0.0.3117 (SP1)
VFP 9.0.0.2412
VFP 9.0.0.3504 (SP1)
VFP 9.0.0.4611 (SP2)
VFP 9.0.0.5015 (SP2)
VFP 9.0.0.5411 (SP2)
VFP 9.0.0.5721 (SP2)
VFP 9.0.0.5815 (SP2)
VFP 9.0.0.6303 (SP2)
VFP 9.0.0.6602 (SP2)
VFP 9.0.0.7423 (SP2)
The bug has been fixed in VFP Advanced.
IMPORTANT NOTE:
In VFP Advanced, for the ACTIVATE POPUP command, if VFP enters an infinite loop, please refer to the following code to fix the bug:
PRIVATE m.q_oldsys9175
m.q_oldsys9175=VAL(SYS(9175))
=SYS(9175,0x200) && the maximum number of mouse move events for the ACTIVATE POPUP command is 512 (if we move mouse frequently, it takes about 10 or 20 seconds).
DO FORM testactivatepopup.scx
=SYS(9175,m.q_oldsys9175)
5. REFERENCE WEBSITES:
1, baiyujia.com:
http://www.baiyujia.com
http://www.baiyujia.com/vfpdocuments/f_vfp9fix360.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix63.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix64.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix390.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix391.asp
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|