------------------------------------------------------------
                        [BUG/PRB.] VFP 9.0 FIX - COPY FILE COMMAND
                                 January 2024
                 ------------------------------------------------------------
                                     CCB



1. BUG:

     In vfp9 (and vfp6, vfp7, vfp8), the COPY FILE command always creates the destination file with a lower case file name.

     In Windows operating system, we can use the file names with case insensitive,
     for example, the file name ABC.TXT is the same as the file name abc.txt.
     In other operating systems such as Unix and Linux, we use the file names with case sensitive,
     for example, the file name ABC.TXT is not the same as the file name abc.txt, they are two different file names.

     The bug was reported by Walther Neuhardt.


2. CAUSE:

     There are some BUGs in the following code.


3. RESOLUTION:

     We can write some code to fix the BUG.

     Fun6d6e05 :: ; proc near
             push ebp                                                        ;0x006d6e05 :        55
             lea ebp ,  dword ptr [ esp + 0FFFFF8ACh ]                       ;0x006d6e06 :        8dac24acf8ffff
             sub esp , 07DCh                                                 ;0x006d6e0d :        81ecdc070000
             mov eax ,  dword ptr [ Data937090 ]                             ;0x006d6e13 :        a190709300
             push ebx                                                        ;0x006d6e18 :        53
             push esi                                                        ;0x006d6e19 :        56
             push edi                                                        ;0x006d6e1a :        57
             mov  dword ptr [ ebp + 0750h ] , eax                            ;0x006d6e1b :        898550070000
             xor eax , eax                                                   ;0x006d6e21 :        33c0
             xor edx , edx                                                   ;0x006d6e23 :        33d2
             inc  dword ptr [ Data9393ac ]                                   ;0x006d6e25 :        ff05ac939300
             mov ecx , 090h                                                  ;0x006d6e2b :        b990000000
             lea edi ,  dword ptr [ ebp + 0404h ]                            ;0x006d6e30 :        8dbd04040000
             rep stosd                                                       ;0x006d6e36 :        f3ab
             lea eax ,  dword ptr [ ebp + 02FCh ]                            ;0x006d6e38 :        8d85fc020000
             push eax                                                        ;0x006d6e3e :        50
             mov edi , offset Data93a8c0                                              ;0x006d6e3f :        bfc0a89300
             mov ebx , offset Data91aed0                                              ;0x006d6e44 :        bbd0ae9100
             mov  dword ptr [ ebp - 36 ] , edx                               ;0x006d6e49 :        8955dc
             mov  dword ptr [ ebp - 32 ] , edx                               ;0x006d6e4c :        8955e0
             mov  byte ptr [ ebp + 02FCh ] , dl                              ;0x006d6e4f :        8895fc020000
             call Fun52a205                                                  ;0x006d6e55 :        e8ab33e5ff
             inc  dword ptr [ Data9393ac ]                                   ;0x006d6e5a :        ff05ac939300
             lea eax ,  dword ptr [ ebp + 01F4h ]                            ;0x006d6e60 :        8d85f4010000
             push eax                                                        ;0x006d6e66 :        50
             xor edi , edi                                                   ;0x006d6e67 :        33ff
             mov  byte ptr [ ebp + 01F4h ] , 00h                             ;0x006d6e69 :        c685f401000000
             call Fun52a205                                                  ;0x006d6e70 :        e89033e5ff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     ;         mov dword ptr vfpa_copyfile_nottolower,01h


             xor ebx , ebx                                                   ;0x006d6e75 :        33db
             push ebx                                                        ;0x006d6e77 :        53
             mov edi , 0105h                                                 ;0x006d6e78 :        bf05010000
             push edi                                                        ;0x006d6e7d :        57
             lea edx ,  dword ptr [ ebp + 0404h ]                            ;0x006d6e7e :        8d9504040000
             lea ecx ,  dword ptr [ ebp + 02FCh ]                            ;0x006d6e84 :        8d8dfc020000
             call Fun43d389                                                  ;0x006d6e8a :        e8fa64d6ff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     Label6d6e8e ::
     ;         mov dword ptr vfpa_copyfile_nottolower,00h


     Label6d6e8f ::
             push ebx                                                        ;0x006d6e8f :        53
             lea eax ,  dword ptr [ ebp + 0404h ]                            ;0x006d6e90 :        8d8504040000
             push eax                                                        ;0x006d6e96 :        50
             call Fun4156a2                                                  ;0x006d6e97 :        e806e8d3ff
             test eax , eax                                                  ;0x006d6e9c :        85c0
             je Label6d6ecb                                                  ;0x006d6e9e :        742b
             pushd offset Data928494                                                  ;0x006d6ea0 :        6894849200
             push edi                                                        ;0x006d6ea5 :        57
             lea esi ,  dword ptr [ ebp + 0404h ]                            ;0x006d6ea6 :        8db504040000
             call Fun5557a3                                                  ;0x006d6eac :        e8f2e8e7ff
             push ebx                                                        ;0x006d6eb1 :        53
             push ebx                                                        ;0x006d6eb2 :        53
             push ebx                                                        ;0x006d6eb3 :        53
             push edi                                                        ;0x006d6eb4 :        57
             mov eax , esi                                                   ;0x006d6eb5 :        8bc6
             push eax                                                        ;0x006d6eb7 :        50
             call Fun437e2a                                                  ;0x006d6eb8 :        e86d0fd6ff
             push eax                                                        ;0x006d6ebd :        50
             mov edx , esi                                                   ;0x006d6ebe :        8bd6
             lea ecx ,  dword ptr [ ebp + 02FCh ]                            ;0x006d6ec0 :        8d8dfc020000
             call Fun42cc34                                                  ;0x006d6ec6 :        e8695dd5ff

     Label6d6ecb ::
             lea eax ,  dword ptr [ ebp + 02FCh ]                            ;0x006d6ecb :        8d85fc020000
             push eax                                                        ;0x006d6ed1 :        50
             lea eax ,  dword ptr [ ebp - 52 ]                               ;0x006d6ed2 :        8d45cc
             push eax                                                        ;0x006d6ed5 :        50
             call Fun434bcf                                                  ;0x006d6ed6 :        e8f4dcd5ff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     ;         mov dword ptr vfpa_copyfile_nottolower,01h


             push ebx                                                        ;0x006d6edb :        53
             push edi                                                        ;0x006d6edc :        57
             lea edx ,  dword ptr [ ebp + 0644h ]                            ;0x006d6edd :        8d9544060000
             lea ecx ,  dword ptr [ ebp + 01F4h ]                            ;0x006d6ee3 :        8d8df4010000
             call Fun43d389                                                  ;0x006d6ee9 :        e89b64d6ff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     Label6d6eed ::
     ;         mov dword ptr vfpa_copyfile_nottolower,00h


     Label6d6eee ::
             push ebx                                                        ;0x006d6eee :        53
             lea eax ,  dword ptr [ ebp + 0644h ]                            ;0x006d6eef :        8d8544060000
             push eax                                                        ;0x006d6ef5 :        50
             call Fun4156a2                                                  ;0x006d6ef6 :        e8a7e7d3ff
             test eax , eax                                                  ;0x006d6efb :        85c0
             je Label6d6f2a                                                  ;0x006d6efd :        742b
             pushd offset Data928494                                                  ;0x006d6eff :        6894849200
             push edi                                                        ;0x006d6f04 :        57
             lea esi ,  dword ptr [ ebp + 0644h ]                            ;0x006d6f05 :        8db544060000
             call Fun5557a3                                                  ;0x006d6f0b :        e893e8e7ff
             push ebx                                                        ;0x006d6f10 :        53
             push ebx                                                        ;0x006d6f11 :        53
             push ebx                                                        ;0x006d6f12 :        53
             push edi                                                        ;0x006d6f13 :        57
             mov eax , esi                                                   ;0x006d6f14 :        8bc6
             push eax                                                        ;0x006d6f16 :        50
             call Fun437e2a                                                  ;0x006d6f17 :        e80e0fd6ff
             push eax                                                        ;0x006d6f1c :        50
             mov edx , esi                                                   ;0x006d6f1d :        8bd6
             lea ecx ,  dword ptr [ ebp + 01F4h ]                            ;0x006d6f1f :        8d8df4010000
             call Fun42cc34                                                  ;0x006d6f25 :        e80a5dd5ff

     Label6d6f2a ::


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     ;         mov dword ptr vfpa_copyfile_nottolower,01h


             xor esi , esi                                                   ;0x006d6f2a :        33f6
             inc esi                                                         ;0x006d6f2c :        46
             mov edi , esi                                                   ;0x006d6f2d :        8bfe
             mov eax , esi                                                   ;0x006d6f2f :        8bc6
             lea edx ,  dword ptr [ ebp + 0644h ]                            ;0x006d6f31 :        8d9544060000
             lea ecx ,  dword ptr [ ebp + 01F4h ]                            ;0x006d6f37 :        8d8df4010000
             call Fun43f2b9                                                  ;0x006d6f3d :        e87783d6ff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     Label6d6f41 ::
     ;         mov dword ptr vfpa_copyfile_nottolower,00h


     Label6d6f42 ::
             lea eax ,  dword ptr [ ebp + 01F4h ]                            ;0x006d6f42 :        8d85f4010000
             push eax                                                        ;0x006d6f48 :        50
             lea eax ,  dword ptr [ ebp - 48 ]                               ;0x006d6f49 :        8d45d0
             push eax                                                        ;0x006d6f4c :        50
             call Fun434bcf                                                  ;0x006d6f4d :        e87ddcd5ff
             lea edx ,  dword ptr [ ebp - 44 ]                               ;0x006d6f52 :        8d55d4
             lea eax ,  dword ptr [ ebp + 0FFFFFF7Ch ]                       ;0x006d6f55 :        8d857cffffff
             call Fun42c27f                                                  ;0x006d6f5b :        e81f53d5ff
             push ebx                                                        ;0x006d6f60 :        53
             push eax                                                        ;0x006d6f61 :        50
             call Fun42c2be                                                  ;0x006d6f62 :        e85753d5ff
             mov edi , eax                                                   ;0x006d6f67 :        8bf8
             cmp edi , ebx                                                   ;0x006d6f69 :        3bfb
             pop ecx                                                         ;0x006d6f6b :        59
             pop ecx                                                         ;0x006d6f6c :        59
             jne Label6d6ff3                                                 ;0x006d6f6d :        0f8580000000


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     ;         mov dword ptr vfpa_copyfile_nottolower,01h


             push ebx                                                        ;0x006d6f73 :        53
             lea eax ,  dword ptr [ ebp + 0404h ]                            ;0x006d6f74 :        8d8504040000
             push eax                                                        ;0x006d6f7a :        50
             call Fun42c953                                                  ;0x006d6f7b :        e8d359d5ff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     Label6d6f7f ::
     ;         mov dword ptr vfpa_copyfile_nottolower,00h


     Label6d6f80 ::
             cmp eax , ebx                                                   ;0x006d6f80 :        3bc3
             jne Label6d6ff3                                                 ;0x006d6f82 :        756f
             mov  dword ptr [ ebp - 36 ] , esi                               ;0x006d6f84 :        8975dc

     Label6d6f87 ::
             lea eax ,  dword ptr [ ebp + 052Ch ]                            ;0x006d6f87 :        8d852c050000
             push eax                                                        ;0x006d6f8d :        50
             lea eax ,  dword ptr [ ebp - 52 ]                               ;0x006d6f8e :        8d45cc
             push eax                                                        ;0x006d6f91 :        50
             lea eax ,  dword ptr [ ebp + 0ECh ]                             ;0x006d6f92 :        8d85ec000000
             push eax                                                        ;0x006d6f98 :        50
             call Fun42c5c5                                                  ;0x006d6f99 :        e82756d5ff
             lea eax ,  dword ptr [ ebp + 052Ch ]                            ;0x006d6f9e :        8d852c050000
             push eax                                                        ;0x006d6fa4 :        50
             lea ecx ,  dword ptr [ ebp + 0644h ]                            ;0x006d6fa5 :        8d8d44060000
             call Fun75fa7f                                                  ;0x006d6fab :        e8cf8a0800
             lea eax ,  dword ptr [ ebp + 052Ch ]                            ;0x006d6fb0 :        8d852c050000
             push eax                                                        ;0x006d6fb6 :        50
             lea eax ,  dword ptr [ ebp - 48 ]                               ;0x006d6fb7 :        8d45d0
             push eax                                                        ;0x006d6fba :        50
             lea eax ,  dword ptr [ ebp - 28 ]                               ;0x006d6fbb :        8d45e4
             push eax                                                        ;0x006d6fbe :        50
             call Fun42c5c5                                                  ;0x006d6fbf :        e80156d5ff
             lea eax ,  dword ptr [ ebp - 28 ]                               ;0x006d6fc4 :        8d45e4
             push eax                                                        ;0x006d6fc7 :        50
             lea eax ,  dword ptr [ ebp + 0ECh ]                             ;0x006d6fc8 :        8d85ec000000
             push eax                                                        ;0x006d6fce :        50
             call Fun6d6beb                                                  ;0x006d6fcf :        e817fcffff
             cmp eax , 0FFFFFFFEh                                            ;0x006d6fd4 :        83f8fe
             je Label6d6fe4                                                  ;0x006d6fd7 :        740b
             cmp eax , 0FFFFFFFDh                                            ;0x006d6fd9 :        83f8fd
             je Label6d6ff3                                                  ;0x006d6fdc :        7415
             inc  dword ptr [ ebp - 32 ]                                     ;0x006d6fde :        ff45e0
             mov  dword ptr [ ebp - 40 ] , eax                               ;0x006d6fe1 :        8945d8


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

             lea eax ,  dword ptr [ ebp - 28 ]
             push eax
             push eax
             call MoveFileA


     Label6d6fe4 ::


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     ;         mov dword ptr vfpa_copyfile_nottolower,01h


             lea eax ,  dword ptr [ ebp + 0404h ]                            ;0x006d6fe4 :        8d8504040000
             call Fun49cced                                                  ;0x006d6fea :        e8fe5cdcff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - COPY FILE COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the COPY FILE command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     Label6d6fee ::
     ;         mov dword ptr vfpa_copyfile_nottolower,00h


     Label6d6fef ::
             test eax , eax                                                  ;0x006d6fef :        85c0
             je Label6d6f87                                                  ;0x006d6ff1 :        7494

     Label6d6ff3 ::
             lea eax ,  dword ptr [ ebp - 44 ]                               ;0x006d6ff3 :        8d45d4
             push eax                                                        ;0x006d6ff6 :        50
             lea eax ,  dword ptr [ ebp + 0FFFFFF7Ch ]                       ;0x006d6ff7 :        8d857cffffff
             call Fun42d200                                                  ;0x006d6ffd :        e8fe61d5ff
             lea esi ,  dword ptr [ ebp + 0404h ]                            ;0x006d7002 :        8db504040000
             call Fun43e393                                                  ;0x006d7008 :        e88673d6ff
             cmp edi , ebx                                                   ;0x006d700d :        3bfb
             je Label6d7018                                                  ;0x006d700f :        7407
             mov ecx , edi                                                   ;0x006d7011 :        8bcf
             call Fun544742                                                  ;0x006d7013 :        e82ad7e6ff

     Label6d7018 ::
             cmp  dword ptr [ ebp - 36 ] , ebx                               ;0x006d7018 :        395ddc
             jne Label6d7032                                                 ;0x006d701b :        7515
             lea ecx ,  dword ptr [ ebp + 02FCh ]                            ;0x006d701d :        8d8dfc020000
             call Fun44d338                                                  ;0x006d7023 :        e81063d7ff
             mov ecx , 0ADh                                                  ;0x006d7028 :        b9ad000000
             call Fun544742                                                  ;0x006d702d :        e810d7e6ff

     Label6d7032 ::
             mov eax ,  dword ptr [ Data9370f8 ]                             ;0x006d7032 :        a1f8709300
             mov  eax , dword ptr [eax]                                      ;0x006d7037 :        8b00
             cmp  dword ptr [ eax + 0118h ] , ebx                            ;0x006d7039 :        399818010000
             je Label6d7082                                                  ;0x006d703f :        7441
             cmp  word ptr [ ebp - 32 ] , bx                                 ;0x006d7041 :        66395de0
             jbe Label6d7082                                                 ;0x006d7045 :        763b
             cmp  word ptr [ ebp - 32 ] , 01h                                ;0x006d7047 :        66837de001
             je Label6d705a                                                  ;0x006d704c :        740c
             movzx eax ,word ptr [ ebp - 32 ]                                ;0x006d704e :        0fb745e0
             push eax                                                        ;0x006d7052 :        50
             mov ecx , 051Bh                                                 ;0x006d7053 :        b91b050000
             jmp Label6d7062                                                 ;0x006d7058 :        eb08

     Label6d705a ::
             push  dword ptr [ ebp - 40 ]                                    ;0x006d705a :        ff75d8
             mov ecx , 0508h                                                 ;0x006d705d :        b908050000

     Label6d7062 ::
             call Fun42c583                                                  ;0x006d7062 :        e81c55d5ff
             push eax                                                        ;0x006d7067 :        50
             lea eax ,  dword ptr [ ebp + 0644h ]                            ;0x006d7068 :        8d8544060000
             push eax                                                        ;0x006d706e :        50
             call Fun43089c                                                  ;0x006d706f :        e82898d5ff
             add esp , 0Ch                                                   ;0x006d7074 :        83c40c
             lea eax ,  dword ptr [ ebp + 0644h ]                            ;0x006d7077 :        8d8544060000
             call Fun543829                                                  ;0x006d707d :        e8a7c7e6ff

     Label6d7082 ::
             mov  ecx , dword ptr [ ebp + 0750h ]                            ;0x006d7082 :        8b8d50070000
             call Fun42bf1d                                                  ;0x006d7088 :        e8904ed5ff
             pop edi                                                         ;0x006d708d :        5f
             pop esi                                                         ;0x006d708e :        5e
             pop ebx                                                         ;0x006d708f :        5b
             add ebp , 0754h                                                 ;0x006d7090 :        81c554070000
             leave                                                           ;0x006d7096 :        c9
             ret                                                             ;0x006d7097 :        c3

     Fun890a33 :: ; proc near
             push ebp                                                        ;0x00890a33 :        55
             lea ebp ,  dword ptr [ esp + 0FFFFFAC0h ]                       ;0x00890a34 :        8dac24c0faffff
             sub esp , 05CCh                                                 ;0x00890a3b :        81eccc050000
             mov eax ,  dword ptr [ Data937090 ]                             ;0x00890a41 :        a190709300
             push ebx                                                        ;0x00890a46 :        53
             push esi                                                        ;0x00890a47 :        56
             push edi                                                        ;0x00890a48 :        57
             mov  dword ptr [ ebp + 053Ch ] , eax                            ;0x00890a49 :        89853c050000


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - RENAME COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the RENAME command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     ;         mov dword ptr vfpa_copyfile_nottolower,01h


             xor ebx , ebx                                                   ;0x00890a4f :        33db
             xor eax , eax                                                   ;0x00890a51 :        33c0
             mov ecx , 090h                                                  ;0x00890a53 :        b990000000
             lea edi ,  dword ptr [ ebp + 01F0h ]                            ;0x00890a58 :        8dbdf0010000
             push ebx                                                        ;0x00890a5e :        53
             rep stosd                                                       ;0x00890a5f :        f3ab
             mov  ecx , dword ptr [ ebp + 0548h ]                            ;0x00890a61 :        8b8d48050000
             pushd 0105h                                                     ;0x00890a67 :        6805010000
             lea edx ,  dword ptr [ ebp + 01F0h ]                            ;0x00890a6c :        8d95f0010000
             mov  dword ptr [ ebp - 36 ] , ebx                               ;0x00890a72 :        895ddc
             call Fun43d389                                                  ;0x00890a75 :        e80fc9baff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - RENAME COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the RENAME command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     Label890a79 ::
     ;         mov dword ptr vfpa_copyfile_nottolower,00h


     Label890a7a ::
             push  dword ptr [ ebp + 0548h ]                                 ;0x00890a7a :        ffb548050000
             lea eax ,  dword ptr [ ebp - 48 ]                               ;0x00890a80 :        8d45d0
             push eax                                                        ;0x00890a83 :        50
             call Fun434bcf                                                  ;0x00890a84 :        e84641baff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - RENAME COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the RENAME command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     ;         mov dword ptr vfpa_copyfile_nottolower,01h


             mov  ecx , dword ptr [ ebp + 054Ch ]                            ;0x00890a89 :        8b8d4c050000
             xor eax , eax                                                   ;0x00890a8f :        33c0
             inc eax                                                         ;0x00890a91 :        40
             mov edi , eax                                                   ;0x00890a92 :        8bf8
             lea edx ,  dword ptr [ ebp - 32 ]                               ;0x00890a94 :        8d55e0
             call Fun43f2b9                                                  ;0x00890a97 :        e81de8baff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - RENAME COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the RENAME command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     Label890a9b ::
     ;         mov dword ptr vfpa_copyfile_nottolower,00h


     Label890a9c ::
             push  dword ptr [ ebp + 054Ch ]                                 ;0x00890a9c :        ffb54c050000
             lea eax ,  dword ptr [ ebp - 52 ]                               ;0x00890aa2 :        8d45cc
             push eax                                                        ;0x00890aa5 :        50
             call Fun434bcf                                                  ;0x00890aa6 :        e82441baff
             lea edx ,  dword ptr [ ebp - 44 ]                               ;0x00890aab :        8d55d4
             lea eax ,  dword ptr [ ebp + 0FFFFFF78h ]                       ;0x00890aae :        8d8578ffffff
             call Fun42c27f                                                  ;0x00890ab4 :        e8c6b7b9ff
             push ebx                                                        ;0x00890ab9 :        53
             push eax                                                        ;0x00890aba :        50
             call Fun42c2be                                                  ;0x00890abb :        e8feb7b9ff
             cmp eax , ebx                                                   ;0x00890ac0 :        3bc3
             pop ecx                                                         ;0x00890ac2 :        59
             pop ecx                                                         ;0x00890ac3 :        59
             mov  dword ptr [ ebp - 40 ] , eax                               ;0x00890ac4 :        8945d8
             jne Label890b9f                                                 ;0x00890ac7 :        0f85d2000000


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - RENAME COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the RENAME command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     ;         mov dword ptr vfpa_copyfile_nottolower,01h


             push ebx                                                        ;0x00890acd :        53
             lea eax ,  dword ptr [ ebp + 01F0h ]                            ;0x00890ace :        8d85f0010000
             push eax                                                        ;0x00890ad4 :        50
             call Fun42c953                                                  ;0x00890ad5 :        e879beb9ff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - RENAME COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the RENAME command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     Label890ad9 ::
     ;         mov dword ptr vfpa_copyfile_nottolower,00h


     Label890ada ::
             cmp eax , ebx                                                   ;0x00890ada :        3bc3
             jne Label890b9f                                                 ;0x00890adc :        0f85bd000000

     Label890ae2 ::
             inc  dword ptr [ ebp - 36 ]                                     ;0x00890ae2 :        ff45dc
             lea eax ,  dword ptr [ ebp + 0318h ]                            ;0x00890ae5 :        8d8518030000
             push eax                                                        ;0x00890aeb :        50
             lea eax ,  dword ptr [ ebp - 48 ]                               ;0x00890aec :        8d45d0
             push eax                                                        ;0x00890aef :        50
             lea eax ,  dword ptr [ ebp + 0430h ]                            ;0x00890af0 :        8d8530040000
             push eax                                                        ;0x00890af6 :        50
             call Fun42c5c5                                                  ;0x00890af7 :        e8c9bab9ff
             lea edx ,  dword ptr [ ebp + 0430h ]                            ;0x00890afc :        8d9530040000
             call Fun49d5c3                                                  ;0x00890b02 :        e8bccac0ff
             test eax , eax                                                  ;0x00890b07 :        85c0
             je Label890b16                                                  ;0x00890b09 :        740b
             lea ecx ,  dword ptr [ ebp + 0430h ]                            ;0x00890b0b :        8d8d30040000
             call Fun7c7bf8                                                  ;0x00890b11 :        e8e270f3ff

     Label890b16 ::
             push ebx                                                        ;0x00890b16 :        53
             lea eax ,  dword ptr [ ebp + 0430h ]                            ;0x00890b17 :        8d8530040000
             call Fun42d5e0                                                  ;0x00890b1d :        e8becab9ff
             test eax , eax                                                  ;0x00890b22 :        85c0
             je Label890b30                                                  ;0x00890b24 :        740a
             mov ecx , 084h                                                  ;0x00890b26 :        b984000000
             call Fun544742                                                  ;0x00890b2b :        e8123ccbff

     Label890b30 ::
             lea eax ,  dword ptr [ ebp + 0318h ]                            ;0x00890b30 :        8d8518030000
             push eax                                                        ;0x00890b36 :        50
             lea ecx ,  dword ptr [ ebp - 32 ]                               ;0x00890b37 :        8d4de0
             call Fun75fa7f                                                  ;0x00890b3a :        e840efecff
             lea eax ,  dword ptr [ ebp + 0318h ]                            ;0x00890b3f :        8d8518030000
             push eax                                                        ;0x00890b45 :        50
             lea eax ,  dword ptr [ ebp - 52 ]                               ;0x00890b46 :        8d45cc
             push eax                                                        ;0x00890b49 :        50
             lea eax ,  dword ptr [ ebp + 0E8h ]                             ;0x00890b4a :        8d85e8000000
             push eax                                                        ;0x00890b50 :        50
             call Fun42c5c5                                                  ;0x00890b51 :        e86fbab9ff
             lea edx ,  dword ptr [ ebp + 0E8h ]                             ;0x00890b56 :        8d95e8000000
             call Fun49d5c3                                                  ;0x00890b5c :        e862cac0ff
             test eax , eax                                                  ;0x00890b61 :        85c0
             je Label890b70                                                  ;0x00890b63 :        740b
             lea ecx ,  dword ptr [ ebp + 0E8h ]                             ;0x00890b65 :        8d8de8000000
             call Fun7c7bf8                                                  ;0x00890b6b :        e88870f3ff

     Label890b70 ::
             lea edi ,  dword ptr [ ebp + 0E8h ]                             ;0x00890b70 :        8dbde8000000
             lea eax ,  dword ptr [ ebp + 0430h ]                            ;0x00890b76 :        8d8530040000
             call Fun488609                                                  ;0x00890b7c :        e8887abfff
             cmp eax , ebx                                                   ;0x00890b81 :        3bc3
             je Label890b8c                                                  ;0x00890b83 :        7407
             mov ecx , eax                                                   ;0x00890b85 :        8bc8
             call Fun544742                                                  ;0x00890b87 :        e8b63bcbff

     Label890b8c ::


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - RENAME COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the RENAME command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

             push edi
             push edi
             call MoveFileA


     Label890b8d ::


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - RENAME COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the RENAME command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     ;         mov dword ptr vfpa_copyfile_nottolower,01h


             lea eax ,  dword ptr [ ebp + 01F0h ]                            ;0x00890b8c :        8d85f0010000
             call Fun49cced                                                  ;0x00890b92 :        e856c1c0ff


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - RENAME COMMAND
     ;                                December 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; In vfp9, the RENAME command always creates the destination file with a lower case file name,
     ; now it creates the destination file with the user-specified file name.
     ;
     ; 2017/12/3, by ccb
     ;

     Label890b96 ::
     ;         mov dword ptr vfpa_copyfile_nottolower,00h


     Label890b97 ::
             test eax , eax                                                  ;0x00890b97 :        85c0
             je Label890ae2                                                  ;0x00890b99 :        0f8443ffffff

     Label890b9f ::
             lea eax ,  dword ptr [ ebp - 44 ]                               ;0x00890b9f :        8d45d4
             push eax                                                        ;0x00890ba2 :        50
             lea eax ,  dword ptr [ ebp + 0FFFFFF78h ]                       ;0x00890ba3 :        8d8578ffffff
             call Fun42d200                                                  ;0x00890ba9 :        e852c6b9ff
             lea esi ,  dword ptr [ ebp + 01F0h ]                            ;0x00890bae :        8db5f0010000
             call Fun43e393                                                  ;0x00890bb4 :        e8dad7baff
             mov  ecx , dword ptr [ ebp - 40 ]                               ;0x00890bb9 :        8b4dd8
             cmp ecx , ebx                                                   ;0x00890bbc :        3bcb
             je Label890bc5                                                  ;0x00890bbe :        7405
             call Fun544742                                                  ;0x00890bc0 :        e87d3bcbff

     Label890bc5 ::
             cmp  dword ptr [ ebp - 36 ] , ebx                               ;0x00890bc5 :        395ddc
             jne Label890bda                                                 ;0x00890bc8 :        7510
             mov  ecx , dword ptr [ ebp + 0548h ]                            ;0x00890bca :        8b8d48050000
             pushd 0ADh                                                      ;0x00890bd0 :        68ad000000
             call Fun44d388                                                  ;0x00890bd5 :        e8aec7bbff

     Label890bda ::
             mov  ecx , dword ptr [ ebp + 053Ch ]                            ;0x00890bda :        8b8d3c050000
             call Fun42bf1d                                                  ;0x00890be0 :        e838b3b9ff
             pop edi                                                         ;0x00890be5 :        5f
             pop esi                                                         ;0x00890be6 :        5e
             pop ebx                                                         ;0x00890be7 :        5b
             add ebp , 0540h                                                 ;0x00890be8 :        81c540050000
             leave                                                           ;0x00890bee :        c9
             ret 08h                                                         ;0x00890bef :        c20800

     Now the COPY FILE and RENAME commands create the destination file with the user-specified file name.


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_vfp9fix249.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix250.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix346.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix347.asp

     2, microsoft.com:
     https://connect.microsoft.com/VisualStudio/feedback/details/218023/vfp-8-9-copy-file-and-rename-commands-change-file-names-allways-to-lawercase
     https://social.msdn.microsoft.com/Forums/en-US/8bf07ea5-4693-4d97-b6d8-844d6f0a0712/how-can-i-copy-a-file-and-rename-to-upper-case-file-name
     https://social.msdn.microsoft.com/Forums/en-US/3192215f-b073-4082-893a-79ca36f36ffd/rename-case-sensitive

     3, foxite.com:
     https://www.foxite.com/archives/copy-file-changed-case-0000402944.htm
     https://www.foxite.com/archives/copy-filerename-changes-cases-to-filenames-0000023778.htm
     https://www.foxite.com/archives/copy-file-0000314742.htm
     https://www.foxite.com/archives/copy-file-changes-filename-to-lower-case-0000104923.htm
     https://www.foxite.com/archives/copy-file-issue-0000428071.htm
     https://www.foxite.com/archives/file-copy-issue-0000428069.htm
     https://www.foxite.com/archives/renaming-a-file-to-uppercase-0000246959.htm

     4, mzvfp.com:
     http://www.mzvfp.com/read.php?tid=56306

     5, sunyear.com.tw:
     http://vfp.sunyear.com.tw/viewtopic.php?t=6848
     http://vfp.sunyear.com.tw/viewtopic.php?t=4795

     6, berezniker.com:
     https://www.berezniker.com/content/pages/visual-foxpro/copy-move-rename-file-preserving-destination-name-case

     7, narkive.com:
     http://microsoft.public.fox.programmer.exchange.narkive.com/z9Qbft2p/copy-file-changes-file-name-case-to-lower-case

     8, devx.com:
     http://forums.devx.com/showthread.php?80569-fOXPRO-BUG

     9, computer-programming-forum.com:
     http://computer-programming-forum.com/2-vfp/3ee2f0a5908c69b3.htm


6. OTHER:

     For reference only, there is no guarantees.

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