---------------------------------------------------------------
[ENHANCED] VFP 9.0 FIX - TYPE() FUNCTION
January 2026
---------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp6, vfp7, vfp8), the TYPE() function cannot be used to evaluate UDFs (user-defined functions),
now the TYPE(cExpression,2) function can be used to evaluate UDFs (user-defined functions).
There is a test program:
*PROC testtypefunction
SET STEP OFF
SET ECHO OFF
SET DEBUG OFF
SET ESCAPE OFF
SET TALK OFF
SET SAFETY OFF
?TYPE("testtypefunction2()") && Displays "U"
WAIT
?TYPE("testtypefunction2()",2) && Displays "C"
WAIT
RETURN
* END OF PROC TESTTYPEFUNCTION.
PROC testtypefunction2
RETU "aaa"
* END OF PROC TESTTYPEFUNCTION2.
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun5035d4 :: ; proc near
push ebp ;0x005035d4 : 55
mov ebp , esp ;0x005035d5 : 8bec
push ecx ;0x005035d7 : 51
mov eax , dword ptr [ Data93936c ] ;0x005035d8 : a16c939300
push ebx ;0x005035dd : 53
push esi ;0x005035de : 56
mov esi , dword ptr [ ebp + 12 ] ;0x005035df : 8b750c
mov ecx , esi ;0x005035e2 : 8bce
sub ecx , eax ;0x005035e4 : 2bc8
mov eax , 02E8BA2E9h ;0x005035e6 : b8e9a28b2e
imul ecx ;0x005035eb : f7e9
sar edx , 03h ;0x005035ed : c1fa03
mov ebx , edx ;0x005035f0 : 8bda
shr ebx , 01Fh ;0x005035f2 : c1eb1f
push edi ;0x005035f5 : 57
mov eax , esi ;0x005035f6 : 8bc6
add ebx , edx ;0x005035f8 : 03da
cmp dword ptr [ esi + 8 ] , 02000h ;0x005035ff : 817e0800200000
jnb Label5923eb ;0x00503606 : 0f83dfed0800
Label50360c ::
xor eax , eax ;0x0050360c : 33c0
call Fun42c118 ;0x0050360e : e8058bf2ff
mov eax , dword ptr [ esi + 8 ] ;0x00503613 : 8b4608
mov edi , dword ptr [ Data9370c4 ] ;0x00503616 : 8b3dc4709300
mov ecx , esp ;0x0050361c : 8bcc
inc eax ;0x0050361e : 40
sub ecx , edi ;0x0050361f : 2bcf
cmp ecx , eax ;0x00503621 : 3bc8
jle Label59243f ;0x00503623 : 0f8e16ee0800
add eax , 07h ;0x00503629 : 83c007
and eax , 0FFFFFFF8h ;0x0050362c : 83e0f8
call Fun42c118 ;0x0050362f : e8e48af2ff
mov eax , esp ;0x00503634 : 8bc4
test eax , eax ;0x00503636 : 85c0
mov dword ptr [ ebp - 4 ] , eax ;0x00503638 : 8945fc
je Label59241a ;0x0050363b : 0f84d9ed0800
Label503641 ::
mov ecx , dword ptr [ esi + 8 ] ;0x00503641 : 8b4e08
lea eax , dword ptr [ ecx + 1 ] ;0x00503644 : 8d4101
cmp eax , ecx ;0x00503647 : 3bc1
jb Label50364d ;0x00503649 : 7202
mov eax , ecx ;0x0050364b : 8bc1
Label50364d ::
mov edx , dword ptr [ esi + 32 ] ;0x0050364d : 8b5620
mov esi , dword ptr [edx] ;0x00503650 : 8b32
mov edi , dword ptr [ ebp - 4 ] ;0x00503652 : 8b7dfc
mov ecx , eax ;0x00503655 : 8bc8
mov edx , ecx ;0x00503657 : 8bd1
shr ecx , 02h ;0x00503659 : c1e902
rep movsd ;0x0050365c : f3a5
mov ecx , edx ;0x0050365e : 8bca
mov edx , dword ptr [ ebp + 8 ] ;0x00503660 : 8b5508
and ecx , 03h ;0x00503663 : 83e103
rep movsb ;0x00503666 : f3a4
mov ecx , dword ptr [ ebp - 4 ] ;0x00503668 : 8b4dfc
mov byte ptr [ eax + ecx ] , 00h ;0x0050366b : c6040800
mov eax , dword ptr [ ebp + 12 ] ;0x0050366f : 8b450c
push eax ;0x00503672 : 50
;
; ----------------------------------------------------
; VFP 9.0 FIX - TYPE() FUNCTION
; June 2022
; ----------------------------------------------------
; CCB
;
; In vfp9, the TYPE() function cannot be used to evaluate UDFs (user-defined functions),
; now the TYPE(cExpression,2) function can be used to evaluate UDFs (user-defined functions).
;
; 2022/6/22, by ccb
;
cmp dword ptr [ ebp + 04h ] , offset Label501113 ;; Label50114d ..
jne Label503673
cmp dword ptr [ Data936f1c ] , 02h
jne Label503673
cmp dword ptr [ eax + 56 ] , 02h
jne Label503673
pushd 01h
jmp Label503675
Label503673 ::
pushd 00h ;0x00503673 : 6a00
Label503675 ::
push edx ;0x00503675 : 52
call Fun503696 ;0x00503676 : e81b000000
imul ebx , ebx , 02Ch ;0x0050367b : 6bdb2c
add ebx , dword ptr [ Data93936c ] ;0x0050367e : 031d6c939300
mov dword ptr [ Data9370f0 ] , ebx ;0x00503684 : 891df0709300
lea esp , dword ptr [ ebp - 16 ] ;0x0050368a : 8d65f0
pop edi ;0x0050368d : 5f
pop esi ;0x0050368e : 5e
pop ebx ;0x0050368f : 5b
mov esp , ebp ;0x00503690 : 8be5
pop ebp ;0x00503692 : 5d
ret 08h ;0x00503693 : c20800
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.
5. REFERENCE WEBSITES:
1, baiyujia.com:
http://www.baiyujia.com
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|