-----------------------------------------------------------------
                      [ENHANCED] VFP 9.0 FIX - LISTBOX CONTROL PICTURES COUNT
                                 January 2024
                 -----------------------------------------------------------------
                                     CCB



1. BUG:

     In vfp9 (and vfp6, vfp7, vfp8), the ListBox Control can only display <= 500 pictures when the RowSourceType = 5 (Array),
     now it can display <= 65000 pictures.

     The bug was reported by Simon White.


2. CAUSE:

     There are some BUGs in the following code.


3. RESOLUTION:

     We can write some code to fix the BUG.

     Fun482682 :: ; proc near
             sub esp , 08h                                                   ;0x00482682 :        83ec08
             push ebx                                                        ;0x00482685 :        53
             push ebp                                                        ;0x00482686 :        55
             push esi                                                        ;0x00482687 :        56
             mov esi , ecx                                                   ;0x00482688 :        8bf1
             mov  eax , dword ptr [esi]                                      ;0x0048268a :        8b06
             mov  ecx , dword ptr [ eax + 60 ]                               ;0x0048268c :        8b483c
             push edi                                                        ;0x0048268f :        57
             mov ebx , edx                                                   ;0x00482690 :        8bda
             mov  dword ptr [ esp + 20 ] , ecx                               ;0x00482692 :        894c2414
             xor edi , edi                                                   ;0x00482696 :        33ff
             push edi                                                        ;0x00482698 :        57
             mov edx , 01h                                                   ;0x00482699 :        ba01000000
             mov ecx , esi                                                   ;0x0048269e :        8bce
             mov  dword ptr [ esp + 20 ] , ebx                               ;0x004826a0 :        895c2414
             call Fun43ab3b                                                  ;0x004826a4 :        e89284fbff
             mov  eax , dword ptr [ esp + 28 ]                               ;0x004826a9 :        8b44241c
             cmp eax , edi                                                   ;0x004826ad :        3bc7
             mov  edx , dword ptr [esi]                                      ;0x004826af :        8b16
             mov  dword ptr [ edx + 0ACh ] , eax                             ;0x004826b1 :        8982ac000000
             je Label44ff00                                                  ;0x004826b7 :        0f8443d8fcff


     ;
     ;                 ------------------------------------------------------
     ;                      VFP 9.0 FIX - LISTBOX CONTROL PICTURES COUNT
     ;                                  March 2017
     ;                 ------------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the ListBox Control can only display <= 500 pictures when the RowSourceType = 5 (Array),
     ; now it can display <= 65000 pictures.
     ;
     ; 2017/3/29, by ccb
     ;

     ;         cmp ebx , 01F4h                                                 ;0x004826bd :        81fbf4010000
             cmp ebx , 0FDE8h                                                 ;0x004826bd :        81fbf4010000


             jnl Label44ff5d                                                 ;0x004826c3 :        0f8d94d8fcff

     Label4826c9 ::
             mov edi , ebx                                                   ;0x004826c9 :        8bfb
             imul edi , edi , 059h                                           ;0x004826cb :        6bff59
             pushd 00h                                                       ;0x004826ce :        6a00
             lea ecx ,  dword ptr [ edi + 0160h ]                            ;0x004826d0 :        8d8f60010000
             push esi                                                        ;0x004826d6 :        56
             call Fun42c2c4                                                  ;0x004826d7 :        e8e89bfaff
             mov  edx , dword ptr [esi]                                      ;0x004826dc :        8b16
             mov ecx , edi                                                   ;0x004826de :        8bcf
             mov ebp , ecx                                                   ;0x004826e0 :        8be9
             shr ecx , 02h                                                   ;0x004826e2 :        c1e902
             add edx , 0100h                                                 ;0x004826e5 :        81c200010000
             xor eax , eax                                                   ;0x004826eb :        33c0
             mov edi , edx                                                   ;0x004826ed :        8bfa
             rep stosd                                                       ;0x004826ef :        f3ab
             mov ecx , ebp                                                   ;0x004826f1 :        8bcd
             and ecx , 03h                                                   ;0x004826f3 :        83e103
             xor ebp , ebp                                                   ;0x004826f6 :        33ed
             test ebx , ebx                                                  ;0x004826f8 :        85db
             rep stosb                                                       ;0x004826fa :        f3aa
             jle Label48270e                                                 ;0x004826fc :        7e10
             mov eax , ebx                                                   ;0x004826fe :        8bc3
             mov ebp , ebx                                                   ;0x00482700 :        8beb

     Label482702 ::
             mov  dword ptr [edx] , 0FFFFFFFFh                               ;0x00482702 :        c702ffffffff
             add edx , 059h                                                  ;0x00482708 :        83c259
             dec eax                                                         ;0x0048270b :        48
             jne Label482702                                                 ;0x0048270c :        75f4

     Label48270e ::
             mov  ecx , dword ptr [esi]                                      ;0x0048270e :        8b0e
             mov  eax , dword ptr [ esp + 16 ]                               ;0x00482710 :        8b442410
             mov  dword ptr [ ecx + 68 ] , eax                               ;0x00482714 :        894144
             mov  edx , dword ptr [esi]                                      ;0x00482717 :        8b16
             mov  dword ptr [ edx + 0ECh ] , ebx                             ;0x00482719 :        899aec000000
             mov  ecx , dword ptr [esi]                                      ;0x0048271f :        8b0e
             mov  dword ptr [ ecx + 56 ] , 0FFFFFFFFh                        ;0x00482721 :        c74138ffffffff
             mov  ecx , dword ptr [ esp + 20 ]                               ;0x00482728 :        8b4c2414
             cmp eax , ecx                                                   ;0x0048272c :        3bc1
             mov  edx , dword ptr [esi]                                      ;0x0048272e :        8b16
             mov  dword ptr [ edx + 92 ] , 00h                               ;0x00482730 :        c7425c00000000
             jle Label482740                                                 ;0x00482737 :        7e07
             mov eax , ecx                                                   ;0x00482739 :        8bc1
             mov  ecx , dword ptr [esi]                                      ;0x0048273b :        8b0e
             mov  dword ptr [ ecx + 60 ] , eax                               ;0x0048273d :        89413c

     Label482740 ::
             mov  eax , dword ptr [esi]                                      ;0x00482740 :        8b06
             mov  ecx , dword ptr [ eax + 12 ]                               ;0x00482742 :        8b480c
             or ecx , 040010h                                                ;0x00482745 :        81c910000400
             xor edi , edi                                                   ;0x0048274b :        33ff

     Label48274d ::
             mov  dword ptr [ eax + 12 ] , ecx                               ;0x0048274d :        89480c
             mov ecx , esi                                                   ;0x00482750 :        8bce
             call Label42ff55                                                ;0x00482752 :        e8fed7faff
             mov  eax , dword ptr [esi]                                      ;0x00482757 :        8b06
             cmp  dword ptr [ eax + 32 ] , edi                               ;0x00482759 :        397820
             jne Label5a1930                                                 ;0x0048275c :        0f85cef11100

     Label482762 ::
             pop edi                                                         ;0x00482762 :        5f
             pop esi                                                         ;0x00482763 :        5e
             pop ebp                                                         ;0x00482764 :        5d
             pop ebx                                                         ;0x00482765 :        5b
             add esp , 08h                                                   ;0x00482766 :        83c408
             ret 04h                                                         ;0x00482769 :        c20400


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

     2, tek-tips.com:
     http://www.tek-tips.com/viewthread.cfm?qid=1731941


6. OTHER:

     For reference only, there is no guarantees.

     Any questions or suggestions, please send me an email at ccb2000@163.com.