-----------------------------------------------------------------------------------
                      [ENHANCED] VFP 9.0 FIX - THE NEW DEFAULT VALUE FOR THE SYS(3055) FUNCTION
                                 January 2024
                 -----------------------------------------------------------------------------------
                                     CCB



1. THE SYS(3055) FUNCTION (from dv_foxhelp9.chm):

     Visual FoxPro Advanced (10.0.0.0) Language Reference.
     SYS(3055) - FOR and WHERE Clause Complexity

     Sets the complexity level of the FOR and WHERE clauses in commands and functions that support those clauses.
     SYS(3055 [, nComplexity])

     Parameters
     nComplexity
     Specifies the complexity level. The valid range for nComplexity is 320 to 2040.
     The default value is 320 in Visual FoxPro 9.0 and earlier versions.
     The default value is 2000 in Visual FoxPro Advanced (to support long command line).
     If you specify an odd value, it is rounded down to the closest even integer.


2. CAUSE:

     There are some BUGs in the following code.


3. RESOLUTION:

     We can write some code to fix the BUG.

     Func00352b :: ; proc near
             push ebp                                                        ;0x0c00352b :        55
             lea ebp ,  dword ptr [ esp + 0FFFFF3ECh ]                       ;0x0c00352c :        8dac24ecf3ffff
             sub esp , 0C9Ch                                                 ;0x0c003533 :        81ec9c0c0000
             mov eax ,  dword ptr [ Datac35ea80 ]                            ;0x0c003539 :        a180ea350c
             push ebx                                                        ;0x0c00353e :        53
             push esi                                                        ;0x0c00353f :        56
             push edi                                                        ;0x0c003540 :        57
             push  dword ptr [ Datac35ea7c ]                                 ;0x0c003541 :        ff357cea350c
             mov  dword ptr [ ebp + 0C10h ] , eax                            ;0x0c003547 :        8985100c0000
             call  dword ptr [ DataPtrc35ea70 ]                              ;0x0c00354d :        ff1570ea350c
             fld qword ptr [ Datac3492b8 ]                                   ;0x0c003553 :        dd05b892340c
             mov  edx , dword ptr [ Datac35d05c ]                            ;0x0c003559 :        8b155cd0350c
             or ecx , 0FFFFFFFFh                                             ;0x0c00355f :        83c9ff
             xor ebx , ebx                                                   ;0x0c003562 :        33db
             inc ebx                                                         ;0x0c003564 :        43
             mov  dword ptr [ eax + 0AC0h ] , ecx                            ;0x0c003565 :        8988c00a0000
             mov  dword ptr [ eax + 04EF0h ] , ebx                           ;0x0c00356b :        8998f04e0000
             mov  dword ptr [ eax + 04EB0h ] , 064h                          ;0x0c003571 :        c780b04e000064000000
             mov  byte ptr [ eax + 04F54h ] , bl                             ;0x0c00357b :        8898544f0000
             mov  dword ptr [ eax + 108 ] , ebx                              ;0x0c003581 :        89586c
             mov  dword ptr [ eax + 04F20h ] , ecx                           ;0x0c003584 :        8988204f0000
             mov  dword ptr [ eax + 04F3Ch ] , ebx                           ;0x0c00358a :        89983c4f0000
             mov  dword ptr [ eax + 04F40h ] , ebx                           ;0x0c003590 :        8998404f0000
             mov  dword ptr [ eax + 04F44h ] , ebx                           ;0x0c003596 :        8998444f0000
             mov  dword ptr [ eax + 04F48h ] , ebx                           ;0x0c00359c :        8998484f0000
             mov  dword ptr [ eax + 04F5Ch ] , ebx                           ;0x0c0035a2 :        89985c4f0000
             mov  dword ptr [ eax + 04F60h ] , ebx                           ;0x0c0035a8 :        8998604f0000
             mov  dword ptr [ eax + 04F28h ] , ebx                           ;0x0c0035ae :        8998284f0000
             mov  dword ptr [ eax + 051E4h ] , ecx                           ;0x0c0035b4 :        8988e4510000
             lea edi ,  dword ptr [ eax + 0520Ch ]                           ;0x0c0035ba :        8db80c520000
             mov esi , offset Datac34e6fc                                    ;0x0c0035c0 :        befce6340c
             movsw                                                           ;0x0c0035c5 :        66a5
             movsb                                                           ;0x0c0035c7 :        a4
             fstp qword ptr [ eax + 04F68h ]                                 ;0x0c0035c8 :        dd98684f0000
             xor esi , esi                                                   ;0x0c0035ce :        33f6
             mov  dword ptr [ eax + 08480h ] , edx                           ;0x0c0035d0 :        899080840000
             pushd 026h                                                      ;0x0c0035d6 :        6a26
             pop edx                                                         ;0x0c0035d8 :        5a
             mov  byte ptr [ eax + 06250h ] , 0FFh                           ;0x0c0035d9 :        c68050620000ff
             mov  dword ptr [ eax + 0637Ch ] , 0363h                         ;0x0c0035e0 :        c7807c63000063030000
             mov  dword ptr [ eax + 04F74h ] , esi                           ;0x0c0035ea :        89b0744f0000
             mov  byte ptr [ eax + 04F34h ] , 05Ah                           ;0x0c0035f0 :        c680344f00005a
             mov  byte ptr [ eax + 04F35h ] , 03h                            ;0x0c0035f7 :        c680354f000003
             mov  dword ptr [ eax + 0AA8h ] , 04000h                         ;0x0c0035fe :        c780a80a000000400000
             mov  dword ptr [ eax + 08354h ] , ecx                           ;0x0c003608 :        898854830000
             mov  dword ptr [ eax + 08358h ] , ebx                           ;0x0c00360e :        899858830000
             mov  dword ptr [ eax + 04F8Ch ] , 014Dh                         ;0x0c003614 :        c7808c4f00004d010000
             mov  dword ptr [ eax + 064A8h ] , ecx                           ;0x0c00361e :        8988a8640000
             mov  dword ptr [ Datac35d058 ] , ebx                            ;0x0c003624 :        891d58d0350c
             mov  dword ptr [ eax + 06714h ] , edx                           ;0x0c00362a :        899014670000
             mov  dword ptr [ eax + 06718h ] , edx                           ;0x0c003630 :        899018670000
             lea edx ,  dword ptr [ eax + 0677Ch ]                           ;0x0c003636 :        8d907c670000
             mov  dword ptr [ ebp + 0FFFFFF78h ] , eax                       ;0x0c00363c :        898578ffffff
             mov  dword ptr [ eax + 07B7Ch ] , edx                           ;0x0c003642 :        89907c7b0000
             mov  dword ptr [ eax + 07D28h ] , ecx                           ;0x0c003648 :        8988287d0000
             mov  dword ptr [ eax + 07D2Ch ] , ecx                           ;0x0c00364e :        89882c7d0000


     ;
     ;                 ------------------------------------------------------------------------
     ;                      VFP 9.0 FIX - THE NEW DEFAULT VALUE FOR THE SYS(3055) FUNCTION
     ;                                 October 2019
     ;                 ------------------------------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the default value for the SYS(3055) function is 320,
     ; now the new default value for the SYS(3055) function is 2000 (to support long command line).
     ;
     ; 2019/10/27, by ccb
     ;

     ;         mov  dword ptr [ eax + 07D3Ch ] , 0140h                         ;0x0c003654 :        c7803c7d000040010000
             mov  dword ptr [ eax + 07D3Ch ] , 07D0h                         ;0x0c003654 :        c7803c7d000040010000


             mov  byte ptr [ eax + 07D40h ] , bl                             ;0x0c00365e :        8898407d0000
             mov  dword ptr [ eax + 07D44h ] , ebx                           ;0x0c003664 :        8998447d0000
             mov  dword ptr [ eax + 07D48h ] , ebx                           ;0x0c00366a :        8998487d0000
             mov  word ptr [ eax + 07D4Ch ] , 0409h                          ;0x0c003670 :        66c7804c7d00000904
             mov  dword ptr [ eax + 07D50h ] , 0409h                         ;0x0c003679 :        c780507d000009040000
             mov  dword ptr [ eax + 07DF0h ] , 0186A1h                       ;0x0c003683 :        c780f07d0000a1860100
             mov  dword ptr [ eax + 07D80h ] , 01F4h                         ;0x0c00368d :        c780807d0000f4010000
             mov  dword ptr [ eax + 07D84h ] , esi                           ;0x0c003697 :        89b0847d0000
             mov  word ptr [ eax + 07DACh ] , bx                             ;0x0c00369d :        668998ac7d0000
             mov  word ptr [ eax + 07DAEh ] , si                             ;0x0c0036a4 :        6689b0ae7d0000
             mov  dword ptr [ eax + 07DB0h ] , 01388h                        ;0x0c0036ab :        c780b07d000088130000
             mov  dword ptr [ eax + 07DB4h ] , 02710h                        ;0x0c0036b5 :        c780b47d000010270000
             mov  dword ptr [ eax + 0830Ch ] , ebx                           ;0x0c0036bf :        89980c830000
             mov  dword ptr [ eax + 08308h ] , ebx                           ;0x0c0036c5 :        899808830000
             call Func0036f8                                                 ;0x0c0036cb :        e828000000
             cmp  dword ptr [ Datac35d2e0 ] , esi                            ;0x0c0036d0 :        3935e0d2350c
             jne Labelc0b1102                                                ;0x0c0036d6 :        0f8526da0a00

     Labelc0036dc ::
             mov  ecx , dword ptr [ ebp + 0C10h ]                            ;0x0c0036dc :        8b8d100c0000
             mov  dword ptr [ Datac35d2e0 ] , ebx                            ;0x0c0036e2 :        891de0d2350c
             call Func0224a0                                                 ;0x0c0036e8 :        e8b3ed0100
             pop edi                                                         ;0x0c0036ed :        5f
             pop esi                                                         ;0x0c0036ee :        5e
             pop ebx                                                         ;0x0c0036ef :        5b
             add ebp , 0C14h                                                 ;0x0c0036f0 :        81c5140c0000
             leave                                                           ;0x0c0036f6 :        c9
             ret                                                             ;0x0c0036f7 :        c3


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
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix95.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix199.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix200.asp


6. OTHER:

     For reference only, there is no guarantees.

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