----------------------------------------------------------------------
                      VFP 9.0 FIX - LOCATE FILES IN THE APPLICATION DATA DIRECTORY
                                  March 2017
                 ----------------------------------------------------------------------
                                     CCB



1. BUG:

     For VFP 9.0, it will locate the resource file (foxuser.dbf) in the startup directory.
     If it can not find any resource file (foxuser.dbf), it will create the resource file (foxuser.dbf) in the startup directory.

     For some about security reasons, the Program Files folder (for example, C:\Program Files) is readonly on Windows Vista or later.
     If we don't run VFP as Administrator, we can't write data to some application data files,
     for example, the resource file (foxuser.dbf), the command window history (_command.prg) and the task manager file (foxtask.dbf).

     For VFP Advanced, it will locate the resource file (foxuser.dbf) in the Application Data directory.
     If it can not find any resource file (foxuser.dbf), it will create the resource file (foxuser.dbf) in the Application Data directory.
     It will also locate the command window history (_command.prg) and the task manager file (foxtask.dbf) in the Application Data directory.

     The bug was reported by John Ryan.


2. CAUSE:

     There are some BUGs in the following code.


3. RESOLUTION:

     We can write some code to fix the BUG.

     Fun42cc34 :: ; proc near
             push ebp                                                        ;0x0042cc34 :        55
             lea ebp ,  dword ptr [ esp + 0FFFFFEFCh ]                       ;0x0042cc35 :        8dac24fcfeffff
             sub esp , 0184h                                                 ;0x0042cc3c :        81ec84010000
             mov eax ,  dword ptr [ Data937090 ]                             ;0x0042cc42 :        a190709300
             push ebx                                                        ;0x0042cc47 :        53
             push esi                                                        ;0x0042cc48 :        56
             push edi                                                        ;0x0042cc49 :        57
             mov  dword ptr [ ebp + 0100h ] , eax                            ;0x0042cc4a :        898500010000
             mov  eax , dword ptr [ ebp + 0110h ]                            ;0x0042cc50 :        8b8510010000
             mov ebx , ecx                                                   ;0x0042cc56 :        8bd9
             mov  ecx , dword ptr [ ebp + 010Ch ]                            ;0x0042cc58 :        8b8d0c010000
             push eax                                                        ;0x0042cc5e :        50
             push ecx                                                        ;0x0042cc5f :        51
             push edx                                                        ;0x0042cc60 :        52
             push ebx                                                        ;0x0042cc61 :        53
             mov  dword ptr [ ebp - 12 ] , ebx                               ;0x0042cc62 :        895df4
             mov  dword ptr [ ebp - 16 ] , 01h                               ;0x0042cc65 :        c745f001000000
             call Fun42c46b                                                  ;0x0042cc6c :        e8faf7ffff
             mov  eax , dword ptr [ ebp + 0114h ]                            ;0x0042cc71 :        8b8514010000
             test eax , eax                                                  ;0x0042cc77 :        85c0
             jne Label42c764                                                 ;0x0042cc79 :        0f85e5faffff

     Label42cc7f ::


     ;
     ;                 ---------------------------------------------------------------------
     ;                      VFP 9.0 FIX - LOCATE FILE IN THE APPLICATION DATA DIRECTORY
     ;                                  March 2017
     ;                 ---------------------------------------------------------------------
     ;                                     CCB
     ;
     ; For VFP 9.0, it will locate the resource file (foxuser.dbf) in the startup directory.
     ; If it can not find any resource file (foxuser.dbf), it will create the resource file (foxuser.dbf) in the startup directory.
     ;
     ; For VFP Advanced, it will locate the resource file (foxuser.dbf) in the Application Data directory.
     ; If it can not find any resource file (foxuser.dbf), it will create the resource file (foxuser.dbf) in the Application Data directory.
     ;
     ; 2017/3/25, by ccb
     ;


             push 00h
             push ebx
             call Fun42c9be
             test eax , eax
             jne Label42cc81

             pushd 05Ch
             push ebx
             call strrchr
             add esp , 08h
             test eax , eax
             jne Label42cc81

             push offset vfpa_locatefiles_foxuser
             push ebx
             call lstrcmpiA
             test eax , eax
             je Label42cc80

             push offset vfpa_locatefiles_foxuser_dbf
             push ebx
             call lstrcmpiA
             test eax , eax
             je Label42cc80

             jmp Label42cc81

     Label42cc80 ::
             mov  eax , dword ptr [ Data937560 ]
             mov  eax , dword ptr [eax]
             add  eax , dword ptr [ Data9335c0 ]

             push eax
             push ebx
             call lstrcpyA

             push offset vfpa_locatefiles_backslash
             push ebx
             call lstrcatA

             push offset vfpa_locatefiles_foxuser_dbf
             push ebx
             call lstrcatA

             jmp Label42cc86


     Label42cc81 ::
             mov ecx , ebx                                                   ;0x0042cc7f :        8bcb
             call Fun42c8bb                                                  ;0x0042cc81 :        e835fcffff

     Label42cc86 ::
             mov  ecx , dword ptr [ ebp + 0100h ]                            ;0x0042cc86 :        8b8d00010000
             mov  eax , dword ptr [ ebp - 16 ]                               ;0x0042cc8c :        8b45f0
             call Fun42bf1d                                                  ;0x0042cc8f :        e889f2ffff
             pop edi                                                         ;0x0042cc94 :        5f
             pop esi                                                         ;0x0042cc95 :        5e
             pop ebx                                                         ;0x0042cc96 :        5b
             add ebp , 0104h                                                 ;0x0042cc97 :        81c504010000
             mov esp , ebp                                                   ;0x0042cc9d :        8be5
             pop ebp                                                         ;0x0042cc9f :        5d
             ret 010h                                                        ;0x0042cca0 :        c21000


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, microsoft.com:
     https://msdn.microsoft.com/en-us/library/9a1k8t3w(v=vs.80).aspx
     https://social.msdn.microsoft.com/Forums/en-US/182187f6-e317-44b0-8214-9523ca03dc10/deployment-problems-in-vista
     https://social.msdn.microsoft.com/Forums/en-US/e81155f2-863f-4e64-b4c4-5323e9bc4382/proper-location-of-foxuserdbf-in-distributed-application
     https://social.msdn.microsoft.com/Forums/en-US/182187f6-e317-44b0-8214-9523ca03dc10/deployment-problems-in-vista
     https://social.msdn.microsoft.com/Forums/en-US/9a062a10-8952-44c5-b9b6-265f1fc93139/vfp-doesnt-remember-defaults

     3, foxite.com:
     https://www.foxite.com/archives/foxuser-0000318958.htm

     4, tek-tips.com:
     http://www.tek-tips.com/viewthread.cfm?qid=1771909
     http://www.tek-tips.com/viewthread.cfm?qid=1539853


6. OTHER:

     For reference only, there is no guarantees.

     Any questions or suggestions, please e-mail to ccb2000@163.com.