Fix problem regenerating DBC

This commit is contained in:
Lutz
2023-11-19 16:57:23 +01:00
parent 7aa98bdab1
commit 0363d644af
31 changed files with 1094 additions and 315 deletions

View File

@@ -15,6 +15,9 @@ As far as possible these are the original documents. Changes are added where fun
- [Remark](#remark)
- [Full Change History](#full-change-history)
For recent verisons see
![Picture](./pictures/FoxBin2Prg_Full_Change_History_vfpxreleasesmall.png) [FoxBin2PRG](https://github.com/fdbozzo/foxbin2prg)
## Full Change History
This page is not only to get the history of the changes, but to keep a permanent list of people that have contributed to enhance FoxBin2Prg and that I feel as part of the ADN of this tool.
@@ -24,7 +27,8 @@ _**Note:** you can click on the version number for downloading this version from
| Rel.Date | Developer | Version | Details |
| - | - | - | - |
| 2023/10/20 | LScheffler | [v1.21.00](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.21.00) | **Bug Fix**: Problems with spanish characters in comment. (ccantrell72) |
| 2023/11/19 | LScheffler | [v1.21.01](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.21.01) | **Bug Fix**: Problems regenerating databases with splited contents due to the removed Spanish characters in comment. (LScheffler) |
| 2023/10/20 | LScheffler | [v1.21.00](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.21.00) | **Bug Fix**: Problems with Spanish characters in comment. (ccantrell72) |
| 2023/09/06 | LScheffler | [v1.20.07](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.20.07) | **Enhancement**: Option to block processing of directories. If file ".FoxBin2Prg_Ignore" is existing, this directories and all subdirectries will be ignored. (Mainly set up to ignore local GoFish settings) (LScheffler) |
| 2023/09/06 | LScheffler | [v1.20.06](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.20.06) | **Bug Fix**: Problems recreating tables (LScheffler) |
| 2023/09/03 | LScheffler | [v1.20.05](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.20.05) | **Bug Fix**: Problems recreating menu files (introduced with codepage) (LScheffler) |
@@ -438,4 +442,9 @@ _**Note:** you can click on the version number for downloading this version from
| 2013/11/22 | FDBOZZO | [v1.0](https://github.com/fdbozzo/foxbin2prg/tree/v1.0---pública) | Initial creation of clases on prg and support of VCX/SCX/PJX files |
----
Last changed: _2023/10/20_
Last changed: _2023/11/19_
![VFPX logo](https://vfpx.github.io/images/vfpxbanner_small.gif)
This project is part of [VFPX](https://vfpx.github.io/).
----
Last changed: _2023/11/26_ ![Picture](./pictures/vfpxpoweredby_alternative.gif)

View File

@@ -20,18 +20,19 @@ As far as possible these are the original documents. Changes are added where fun
- [Keep reading](#keep-reading)
## Source
Original repository at https://github.com/lscheffler/foxbin2prg.
Original repository at https://github.com/fdbozzo/foxbin2prg.
Or install via [Thor](https://github.com/VFPX/Thor/blob/master/Docs/Thor_install.md), this keeps you on the latest version.
## Download
Regenerate after download / clone / pull from https://github.com/lscheffler/foxbin2prg.
**Note: If you have cloned the project, you must run it against itself to create the binaries and exes.**
Run
Regenerate after download / clone / pull from https://github.com/lscheffler/foxbin2prg.
**Note: You you must run FoxBin2Prg against itself to create the binaries and exes.**
Run:
```
CD "path_to_FoxBin2Prg"
*This uses a special configuration
DO ReCreate_FoxBin2Prg.prg
```
```
**Note: Do not run FoxBin2Prg.prg directly.**
## Requirements
- A copy of MS VFP9 SP1, at least _3504_
- Runs with VFPA (Note, you need to recompile the EXE or use the PRG)
@@ -96,4 +97,8 @@ FoxBin2Prg can be used in tree ways:
- [FoxBin2Prg and use with git](./FoxBin2Prg_git.md)
----
Last changed: _2023/08/26_
![VFPX logo](https://vfpx.github.io/images/vfpxbanner_small.gif)
This project is part of [VFPX](https://vfpx.github.io/).
----
Last changed: _2023/11/26_ ![Picture](./pictures/vfpxpoweredby_alternative.gif)

View File

@@ -513,268 +513,273 @@ In example, if you have a classlib "mylib.vcx" with 3 classes inside ( "cl_1, cl
- mylib.cl_3.vc2
#### Important note
The settings of UseClassPerFile and related options are sensible. If changed the wrong way it's easy to destroy classlibs.
#### Recommended new setting
Starting at v1.19.42 you can configure FoxBin2Prg to generate one class per file.
Using the naming style "basefile._baseclass_.class.vc2" with the new value "2".
To configure this, you must first enable it in foxbin2prg.cfg file:
````
*UseClassPerFile: 2 && 0=One library _Text_ file, 1=Multiple file.class.vc2 files, 2=Multiple file.baseclass.class.vc2 files,
including DBC members
````
In example, if you have a classlib "mylib.vcx" with 3 classes inside ( "cl_1, cl_2, cl_3") then this files are generated:
- mylib.vc2 => Header file, with all conforming classes annotated inside
- mylib.custom.cl_1.vc2
- mylib.form.cl_2.vc2
- mylib.textbox.cl_3.vc2
#### Complementary options for the UseClassPerFile setting
##### RedirectClassPerFileToMain:
#### Recommended new setting
Starting at v1.19.42 you can configure FoxBin2Prg to generate one class per file.
Using the naming style "basefile._baseclass_.class.vc2" with the new value "2".
To configure this, you must first enable it in foxbin2prg.cfg file:
````
*UseClassPerFile: 2 && 0=One library _Text_ file, 1=Multiple file.class.vc2 files, 2=Multiple file.baseclass.class.vc2 files,
including DBC members
````
In example, if you have a classlib "mylib.vcx" with 3 classes inside ( "cl_1, cl_2, cl_3") then this files are generated:
- mylib.vc2 => Header file, with all conforming classes annotated inside
- mylib.custom.cl_1.vc2
- mylib.form.cl_2.vc2
- mylib.textbox.cl_3.vc2
#### Complementary options for the UseClassPerFile setting
##### RedirectClassPerFileToMain:
Configuring this setting to 1 will redirect any selection of file[.baseclass].class.vc2
to the main file.vc2 file, which will not let you generate individual vcx files by mistake.
to the main file.vc2 file, which will not let you generate individual vcx files by mistake.
RedirectClassType: 1 precedes this setting for files in the
##### ClassPerFileCheck
##### ClassPerFileCheck
Configuring this setting to 1 will check the inclusion of all file[.baseclass].class.vc2 files
annotated on file.vc2 main file, otherwise no checking is made and when reconstructing the vcx/scx all files
annotated on file.vc2 main file, otherwise no checking is made and when reconstructing the vcx/scx all files
containing the file.class.ext naming will be included in the _Binary_ (useful when you want to add external classes to the library).
This is only used, if import file is in file[.baseclass].class.tx2 syntax.
Ignored for RedirectClassType: 2
#### Note
If you don't use the redirect setting, an individual vcx/scx file will be generated.
This can be useful if you want to divide a big library in smaller pieces.
#### Note
#### Note
If you don't use the redirect setting, an individual vcx/scx file will be generated.
This can be useful if you want to divide a big library in smaller pieces.
#### Note
By default, these settings are valid for SCX and DBC files as well. SCX files may expand to header, form and dataenvironment, and a DBC may be split into header and several files of the objects contained.
If you like finer and independend control over forms and databases, check
If you like finer and independend control over forms and databases, check
- [Create File-Per-Form](create_file_per_form) and
- [Create File-Per-DBC](#create-file-per-dbc)
### Create File-Per-Form
Starting at 1.20.05 you can configure FoxBin2Prg to generate Form (sc2) files independent of classlibrary.
The major idea is, that the class settings to split a vcx into multiple files result into splitting a form(SCX into a form header, a from and a dataenvironment file, what might be overkill. (splitting classes is great, so one does not need to merge the whole lib, but a form is a form.)
The major idea is, that the class settings to split a vcx into multiple files result into splitting a form (SCX into a form header, a from and a dataenvironment file, what might be overkill. (splitting classes is great, so one does not need to merge the whole lib, but a form is a form.)
To configure this, you must first enable it in foxbin2prg.cfg file:
````
UseFormSettings: 1
````
The settings of the four options are similar to the one of the [class options](#create-class-per-file), except they are named \*Form\* instead of \*Class\*.
### Create File-Per-DBC
Starting at 1.19.55 you can configure FoxBin2Prg to generate one _Text_ file per dbc item using naming style "DatabaseName.item.name.dc2"
with the value "1"
To configure this, you must first enable it in foxbin2prg.cfg file:
````
*UseFilesPerDBC: 0 && 0=One database dc2 file, 1=Multiple file.*.*.dc2 files
````
In example, if you have a classlib "MyData.dbc" with 3 tables inside ( "tl_1, tl_2, tl_3") and stored procedures.
Then this files are generated:
- MyData.vc2 => Header file, with all database settings and conforming items annotated inside
- MyData.database.storedproceduressource.dc2 -> stored procedures
- MyData.table.tl_1.dc2
- MyData.table.tl_2.dc2
- MyData.table.tl_3.dc2
#### Complementary options for the UseFilesPerDBC setting
##### RedirectFilePerDBCToMain
`*RedirectFilePerDBCToMain 0 && 0=Don't redirect to file.dc2, 1=Redirect to file.tx2 when selecting file.item.*.dc2`
Configuring this setting to 1 will redirect any selection of DataBaseName.*.dc2
to the main DataBaseName.dc2 file, which will not let you generate individual DBC files by mistake.
##### ItemPerDBCCheck
`*ItemPerDBCCheck: 0 && 0=Don't check file.item.*.dc2 inclusion, 1=Check file.item.*.dc2 inclusion`
Configuring this setting to 1 will check the inclusion of all DataBaseName.*.dc2 files
annotated on DataBaseName.dc2 main file, otherwise no checking is made and when reconstructing the dbc files
#### Note
If you don't use the Redirect setting, an individual dbc file will be generated.
There is no real use of this.
### Create File-Per-DBC
Starting at 1.19.55 you can configure FoxBin2Prg to generate one _Text_ file per dbc item using naming style "DatabaseName.item.name.dc2"
with the value "1"
To configure this, you must first enable it in foxbin2prg.cfg file:
````
*UseFilesPerDBC: 0 && 0=One database dc2 file, 1=Multiple file.*.*.dc2 files
````
In example, if you have a classlib "MyData.dbc" with 3 tables inside ( "tl_1, tl_2, tl_3") and stored procedures.
Then this files are generated:
### FoxBin2Prg API
With v1.19.42 version started an enhanced API support, making public methods that where only for internal use up to now.
When using FoxBin2Prg as an object, you can access low level functionalities not available when using as external program,
that allow you to implement your own tools, like the VFP tools I've implemented for working with PlasticSCM.
The return value of `execute()` method, is an error code, where 0 means *No errors*.
You can also get an Exception reference in case of errors, passing extra parameters as in the next examples.
First you instantiate FoxBin2Prg as object, using this syntax:
````
LOCAL loCnv AS c_foxbin2prg OF "<Path>\FOXBIN2PRG.PRG" && For Intellisense
SET PROCEDURE TO "<Path>\FOXBIN2PRG.EXE"
loCnv = CREATEOBJECT("c_foxbin2prg")
````
Now some examples:
Convert a file.vcx to text:
````
loCnv.execute( "<Path>\file.vcx" )
````
Generate the _Binary_ classlib from the text file.vc2:
````
loCnv.execute( "<Path>\file.vc2" )
````
Convert all files of a project.pjx to text:
````
loCnv.execute( "<Path>\project.pjx", "*" )
````
Return a `laProc` array of processed forms _**after**_ processing a project:
````
DIMENSION laProcs(1,6)
lnErr = loCnv.execute("C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_test.pjx", "*", "", "", "1", "0", "1")
lnCnt = loCnv.get_Processed(@laProcs, "*.scx")
````
Return a laProc array of processed classlibs _**before**_ processing a project
(almost no file processing here, just minimal header reading):
````
DIMENSION aProcs(1,6)
loCnv.l_ProcessFiles = .F.
lnErr = loCnv.execute("C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_test.pjx", "*", "", "", "1", "0", "1")
lnCnt = loCnv.get_Processed(@aProcs, "*.vcx")
````
Check if a file has support for converting to text:
````
loCnv.evaluateConfiguration( '', '', '', '', '', '', '', '', <Path>, 'D' )
? loCnv.hasSupport_Bin2Prg("<Path>\file.vcx")
? loCnv.hasSupport_Bin2Prg("<Path>\file.ppt")
````
#### Note
If you query for support in different subdirectories,
then you need to call `evaluateConfiguration()` method for refreshing the CFG info that is used by those methods.
Clear the cache of processed files for allowing reprocessing a file:
````
loCnv.clearProcessedFiles()
````
Get a CFG object with the settings that will be applied to a directory
````
oCFG = loCnv.get_DirSettings( "c:\developments\projects\myproj_1" )
? oCFG.n_UseClassPerFile
? oCFG.DBF_Conversion_Support
````
#### Note
`get_DirSettings()` method internally calls `evaluateConfiguration()`
method for refreshing the CFG info before returning the CFG object.
Check if a file was processed:
````
? loCnv.wasProcessed( "c:\developments\projects\myfile.vcx" )
````
Get the internal FoxBin2Prg's Project project of a given PJX and return an array with existence of files on disk:
````
STORE null TO oMod, oEx
DIMENSION aFiles(1,2) && col.1=Name, col.2=File exist on disk
loCnv.loadModule("c:\developments\projects\myfile.pjx", @oMod, @oEx, .F. )
nFilesNotFound = oMod.getFilesNotFound(@aFiles)
FOR I = 1 TO oMod.Count && oMod.Count is the total count of files in the PJX
? aFiles(1,2), aFiles(1,1)
ENDFOR
````
#### PEM
This is a list of available methods and properties:
| Method()/Property<br/>Syntax | Description |
| -| - |
| **execute**<br/>loCnv.execute( cInputFile [,cType [,cTextName [,lGenText [,cDontShowErrors [,cDebug [,cDontShowProgress [,oModule [,oEx [,lRelanzarError [,cOriginalFileName [,cRecompile [,cNoTimestamps [,cBackupLevels [,cClearUniqueID [,cOptimizeByFilestamp [,cCFG_File](,cType-[,cTextName-[,lGenText-[,cDontShowErrors-[,cDebug-[,cDontShowProgress-[,oModule-[,oEx-[,lRelanzarError-[,cOriginalFileName-[,cRecompile-[,cNoTimestamps-[,cBackupLevels-[,cClearUniqueID-[,cOptimizeByFilestamp-[,cCFG_File ] ] ] ] ] ] ] ] ] ] ] ] ] ] ) | Main execution method to start a conversion<br/> See [Object version](./FoxBin2Prg_Object.md#execute) |
| **conversionSupportType**<br/>loCnv.conversionSupportType( cFilename ) | Return the code of the support type (0,1,2,4,8) |
| **get_DBF_Configuration**<br/>loCnv.get_DBF_Configuration( cInputFile, @oOutDbfCfg ) | Returns 1 if a CFG is found for the indicated DBF, or 0 if not |
| **hasSupport_Bin2Prg**<br/>loCnv.hasSupport_Bin2Prg( cFilename.ext )<br/>loCnv.hasSupport_Bin2Prg( cExt ) | Returns .T. if there is support for converting the file or filetype indicated to _text_ |
| **hasSupport_Prg2Bin**<br/>loCnv.hasSupport_Prg2Bin( cFilename.ext )<br/>loCnv.hasSupport_Prg2Bin( cExt ) | Returns .T. if there is support for converting the file or filetype indicated to _Binary_ |
| **evaluateConfiguration**<br/>loCnv.evaluateConfiguration( cDontShowProgress [,cDontShowErrors [,cNoTimestamps [,cDebug [,cRecompile [,cBackupLevels [,cClearUniqueID [,cOptimizeByFilestamp [,cInputFile [,cInputFileTypeType [,cCFG_File](,cDontShowErrors-[,cNoTimestamps-[,cDebug-[,cRecompile-[,cBackupLevels-[,cClearUniqueID-[,cOptimizeByFilestamp-[,cInputFile-[,cInputFileTypeType-[,cCFG_File) ] ] ] ] ] ] ] ] ) | Forces FoxBin2Prg to process the directory indicated in the cInputFile and update any CFG in the directory or their parents |
| **loadProgressbarForm**<br/>loCnv.loadProgressbarForm() | Load and show the progressbar form as upper level window |
| **unloadProgressbarForm**<br/>loCnv.unloadProgressbarForm() | Hide and unload the progressbar form |
| **updateProgressbar**<br/>loCnt.updateProgressbar( cText, nValue, nTotal, nType ) | Update the progressbar and the message. nType indicates which progressbar to update, being 0=1st PB and 1=2nd PB |
| **get_DirSettings**<br/>loCnv.get_DirSettings( cDir ) | Returns a CFG object with the settings that are applied on the indicated directory |
| **get_Ext2FromExt**<br/>loCnv.get_Ext2FromExt( cExt ) | Returns the _text extension_ corresponding to the _Binary_ extension indicated |
| **get_Processed**<br/>loCnv.get_Processed( @aProcessed, cFileMask ) | Returns an array with the status of the files being processed or that will be processed in no-real-process-mode if you set `l_ProcessFiles=.F.` before the call. Columns returned are 6: "cFile, cInOutType, cProcessed, cHasErrors, cSupported, cExpanded"` |
| **clearProcessedFiles**<br/>loCnv.clearProcessedFiles() | Clear the statistics and the cache about processed files. If a file was processed and is already processed, being not cached will force to process it again |
| **wasProcessed**<br/>loCnv.wasProcessed( cFile ) | Returns .T. if the fullpath-file was processed, searching in the internal cache |
#### Renamed
This is the translation table of old method names up to v1.19.41 and the new names:
| Old name | New name |
| -| - |
| Ejecutar | Execute |
| TieneSoporte_** | hasSupport_** |
| EvaluarConfiguracion | EvaluateConfiguration |
| AvanceDelProceso | updateProgressbar |
| cargar_frm_avance | loadProgressbarForm |
| descargar_frm_avance | unloadProgressbarForm |
#### Note
Any method or property not documented in this help, could be renamed, changed or deleted, so please, do not use it_
### Log to StdOut
When running from a DOS window, you can get the output to console (same order as array obtained with get_Processed method,
except that element 1 \[filename\] is shown last):
````
C:\DESA\foxbin2prg>foxbin2prg.exe "tests\datos_test\fb2p_dbc.dbc" | find /V
````
````
I,P1,E0,S1,X0,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.dbc
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.connection.remote_connection_dbf.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.connection.remote_connection_oracle.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.table.fb2p_depto.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.table.nombrelargodeldbf.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.rv_db_debug_setup.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.vista_local.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.vw_local_encuestas.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.vw_ora_convenios.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.vw_ora_dual.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.database.storedproceduressource.dc2
````
#### First line
The first line means:
Input file (**I**), Processed (**P1**), Without Errors (**E0**), Supported (**S1**), Not Extended file (**X0**) and the full path filename.
#### Last line
The last line means:
Output file (**O**), Processed (**P1**), Without Errors (**E0**), Supported (**S1**), Extended file (**X1**) and the full path filename.
## How to use with a SCM tool
### Note
- MyData.vc2 => Header file, with all database settings and conforming items annotated inside
- MyData.database.storedproceduressource.dc2 -> stored procedures
- MyData.table.tl_1.dc2
- MyData.table.tl_2.dc2
- MyData.table.tl_3.dc2
#### Complementary options for the UseFilesPerDBC setting
##### RedirectFilePerDBCToMain
`*RedirectFilePerDBCToMain 0 && 0=Don't redirect to file.dc2, 1=Redirect to file.tx2 when selecting file.item.*.dc2`
Configuring this setting to 1 will redirect any selection of DataBaseName.*.dc2
to the main DataBaseName.dc2 file, which will not let you generate individual DBC files by mistake.
##### ItemPerDBCCheck
`*ItemPerDBCCheck: 0 && 0=Don't check file.item.*.dc2 inclusion, 1=Check file.item.*.dc2 inclusion`
Configuring this setting to 1 will check the inclusion of all DataBaseName.*.dc2 files
annotated on DataBaseName.dc2 main file, otherwise no checking is made and when reconstructing the dbc files
#### Note
If you don't use the Redirect setting, an individual dbc file will be generated.
There is no real use of this.
### FoxBin2Prg API
With v1.19.42 version started an enhanced API support, making public methods that where only for internal use up to now.
When using FoxBin2Prg as an object, you can access low level functionalities not available when using as external program,
that allow you to implement your own tools, like the VFP tools I've implemented for working with PlasticSCM.
The return value of `execute()` method, is an error code, where 0 means *No errors*.
You can also get an Exception reference in case of errors, passing extra parameters as in the next examples.
First you instantiate FoxBin2Prg as object, using this syntax:
````
LOCAL loCnv AS c_foxbin2prg OF "<Path>\FOXBIN2PRG.PRG" && For Intellisense
SET PROCEDURE TO "<Path>\FOXBIN2PRG.EXE"
loCnv = CREATEOBJECT("c_foxbin2prg")
````
Now some examples:
Convert a file.vcx to text:
````
loCnv.execute( "<Path>\file.vcx" )
````
Generate the _Binary_ classlib from the text file.vc2:
````
loCnv.execute( "<Path>\file.vc2" )
````
Convert all files of a project.pjx to text:
````
loCnv.execute( "<Path>\project.pjx", "*" )
````
Return a `laProc` array of processed forms _**after**_ processing a project:
````
DIMENSION laProcs(1,6)
lnErr = loCnv.execute("C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_test.pjx", "*", "", "", "1", "0", "1")
lnCnt = loCnv.get_Processed(@laProcs, "*.scx")
````
Return a laProc array of processed classlibs _**before**_ processing a project
(almost no file processing here, just minimal header reading):
````
DIMENSION aProcs(1,6)
loCnv.l_ProcessFiles = .F.
lnErr = loCnv.execute("C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_test.pjx", "*", "", "", "1", "0", "1")
lnCnt = loCnv.get_Processed(@aProcs, "*.vcx")
````
Check if a file has support for converting to text:
````
loCnv.evaluateConfiguration( '', '', '', '', '', '', '', '', <Path>, 'D' )
? loCnv.hasSupport_Bin2Prg("<Path>\file.vcx")
? loCnv.hasSupport_Bin2Prg("<Path>\file.ppt")
````
#### Note
If you query for support in different subdirectories,
then you need to call `evaluateConfiguration()` method for refreshing the CFG info that is used by those methods.
Clear the cache of processed files for allowing reprocessing a file:
````
loCnv.clearProcessedFiles()
````
Get a CFG object with the settings that will be applied to a directory
````
oCFG = loCnv.get_DirSettings( "c:\developments\projects\myproj_1" )
? oCFG.n_UseClassPerFile
? oCFG.DBF_Conversion_Support
````
#### Note
`get_DirSettings()` method internally calls `evaluateConfiguration()`
method for refreshing the CFG info before returning the CFG object.
Check if a file was processed:
````
? loCnv.wasProcessed( "c:\developments\projects\myfile.vcx" )
````
Get the internal FoxBin2Prg's Project project of a given PJX and return an array with existence of files on disk:
````
STORE null TO oMod, oEx
DIMENSION aFiles(1,2) && col.1=Name, col.2=File exist on disk
loCnv.loadModule("c:\developments\projects\myfile.pjx", @oMod, @oEx, .F. )
nFilesNotFound = oMod.getFilesNotFound(@aFiles)
FOR I = 1 TO oMod.Count && oMod.Count is the total count of files in the PJX
? aFiles(1,2), aFiles(1,1)
ENDFOR
````
#### PEM
This is a list of available methods and properties:
| Method()/Property<br/>Syntax | Description |
| -| - |
| **execute**<br/>loCnv.execute( cInputFile [,cType [,cTextName [,lGenText [,cDontShowErrors [,cDebug [,cDontShowProgress [,oModule [,oEx [,lRelanzarError [,cOriginalFileName [,cRecompile [,cNoTimestamps [,cBackupLevels [,cClearUniqueID [,cOptimizeByFilestamp [,cCFG_File](,cType-[,cTextName-[,lGenText-[,cDontShowErrors-[,cDebug-[,cDontShowProgress-[,oModule-[,oEx-[,lRelanzarError-[,cOriginalFileName-[,cRecompile-[,cNoTimestamps-[,cBackupLevels-[,cClearUniqueID-[,cOptimizeByFilestamp-[,cCFG_File ] ] ] ] ] ] ] ] ] ] ] ] ] ] ) | Main execution method to start a conversion<br/> See [Object version](./FoxBin2Prg_Object.md#execute) |
| **conversionSupportType**<br/>loCnv.conversionSupportType( cFilename ) | Return the code of the support type (0,1,2,4,8) |
| **get_DBF_Configuration**<br/>loCnv.get_DBF_Configuration( cInputFile, @oOutDbfCfg ) | Returns 1 if a CFG is found for the indicated DBF, or 0 if not |
| **hasSupport_Bin2Prg**<br/>loCnv.hasSupport_Bin2Prg( cFilename.ext )<br/>loCnv.hasSupport_Bin2Prg( cExt ) | Returns .T. if there is support for converting the file or filetype indicated to _text_ |
| **hasSupport_Prg2Bin**<br/>loCnv.hasSupport_Prg2Bin( cFilename.ext )<br/>loCnv.hasSupport_Prg2Bin( cExt ) | Returns .T. if there is support for converting the file or filetype indicated to _Binary_ |
| **evaluateConfiguration**<br/>loCnv.evaluateConfiguration( cDontShowProgress [,cDontShowErrors [,cNoTimestamps [,cDebug [,cRecompile [,cBackupLevels [,cClearUniqueID [,cOptimizeByFilestamp [,cInputFile [,cInputFileTypeType [,cCFG_File](,cDontShowErrors-[,cNoTimestamps-[,cDebug-[,cRecompile-[,cBackupLevels-[,cClearUniqueID-[,cOptimizeByFilestamp-[,cInputFile-[,cInputFileTypeType-[,cCFG_File) ] ] ] ] ] ] ] ] ) | Forces FoxBin2Prg to process the directory indicated in the cInputFile and update any CFG in the directory or their parents |
| **loadProgressbarForm**<br/>loCnv.loadProgressbarForm() | Load and show the progressbar form as upper level window |
| **unloadProgressbarForm**<br/>loCnv.unloadProgressbarForm() | Hide and unload the progressbar form |
| **updateProgressbar**<br/>loCnt.updateProgressbar( cText, nValue, nTotal, nType ) | Update the progressbar and the message. nType indicates which progressbar to update, being 0=1st PB and 1=2nd PB |
| **get_DirSettings**<br/>loCnv.get_DirSettings( cDir ) | Returns a CFG object with the settings that are applied on the indicated directory |
| **get_Ext2FromExt**<br/>loCnv.get_Ext2FromExt( cExt ) | Returns the _text extension_ corresponding to the _Binary_ extension indicated |
| **get_Processed**<br/>loCnv.get_Processed( @aProcessed, cFileMask ) | Returns an array with the status of the files being processed or that will be processed in no-real-process-mode if you set `l_ProcessFiles=.F.` before the call. Columns returned are 6: "cFile, cInOutType, cProcessed, cHasErrors, cSupported, cExpanded"` |
| **clearProcessedFiles**<br/>loCnv.clearProcessedFiles() | Clear the statistics and the cache about processed files. If a file was processed and is already processed, being not cached will force to process it again |
| **wasProcessed**<br/>loCnv.wasProcessed( cFile ) | Returns .T. if the fullpath-file was processed, searching in the internal cache |
#### Renamed
This is the translation table of old method names up to v1.19.41 and the new names:
| Old name | New name |
| -| - |
| Ejecutar | Execute |
| TieneSoporte_** | hasSupport_** |
| EvaluarConfiguracion | EvaluateConfiguration |
| AvanceDelProceso | updateProgressbar |
| cargar_frm_avance | loadProgressbarForm |
| descargar_frm_avance | unloadProgressbarForm |
#### Note
Any method or property not documented in this help, could be renamed, changed or deleted, so please, do not use it_
### Log to StdOut
When running from a DOS window, you can get the output to console (same order as array obtained with get_Processed method,
except that element 1 \[filename\] is shown last):
````
C:\DESA\foxbin2prg>foxbin2prg.exe "tests\datos_test\fb2p_dbc.dbc" | find /V
````
````
I,P1,E0,S1,X0,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.dbc
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.connection.remote_connection_dbf.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.connection.remote_connection_oracle.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.table.fb2p_depto.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.table.nombrelargodeldbf.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.rv_db_debug_setup.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.vista_local.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.vw_local_encuestas.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.vw_ora_convenios.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.view.vw_ora_dual.dc2
O,P1,E0,S1,X1,c:\desa\foxbin2prg\tests\datos_test\fb2p_dbc.database.storedproceduressource.dc2
````
#### First line
The first line means:
Input file (**I**), Processed (**P1**), Without Errors (**E0**), Supported (**S1**), Not Extended file (**X0**) and the full path filename.
#### Last line
The last line means:
Output file (**O**), Processed (**P1**), Without Errors (**E0**), Supported (**S1**), Extended file (**X1**) and the full path filename.
## How to use with a SCM tool
### Note
This chapter is without function if the only the _Text_ files are in the source control.
Here we need to identify 2 distinct operations: checkin because a _Binary_ modification with the IDE
and checkin because a merge operation.
### Checkin because a _Binary_ modification within the IDE
When you work with the VFP 9 IDE, you modify the _Binary_ files (forms, classlib and the like),
then you checkin your modifications, but before doing this you generate the _Text_ files +just for the changed _Binaries_+,
and once you have all the boundles of _Binaries_/_Text_, you checkin them.
#### Note:
If any _Binary_ doesn't have the corresponding _Text_ file,
it can be because it is in use (close opened _Binariy_ and CLEAR ALL at VFP command window),
or because you really haven't made any changes to the code,
in which case you should undo the changes to the _Binaries_ that don't have their _Text_ files using the "undo" option
for these files of your SCM tool.
### Checkin because a merge operation
When you merge a branch, you work on _Text_ files seeing and merging differences manually or automatically.
When you have done with the merge you need to checkin, but before this,
you need to generate the _Binaries_ (forms, classlib, etc) just from the _Text_ files merged, to sync their code.
Once you have done, then you checkin the boundle of _Binaries_/_Text_.
#### Note
If at the end of a merge operation there are _Binaries_ left, you need to choose the "workspace binaries",
because anyway you will generate them later from their _Text_ files.
For options on integrating FoxBin2Prg with SCM tools, look at this topic:
**> [FoxBin2Prg and use with SCM tools](./FoxBin2Prg_SCM.md)**
Here we need to identify 2 distinct operations: checkin because a _Binary_ modification with the IDE
and checkin because a merge operation.
### Checkin because a _Binary_ modification within the IDE
When you work with the VFP 9 IDE, you modify the _Binary_ files (forms, classlib and the like),
then you checkin your modifications, but before doing this you generate the _Text_ files +just for the changed _Binaries_+,
and once you have all the boundles of _Binaries_/_Text_, you checkin them.
#### Note:
If any _Binary_ doesn't have the corresponding _Text_ file,
it can be because it is in use (close opened _Binariy_ and CLEAR ALL at VFP command window),
or because you really haven't made any changes to the code,
in which case you should undo the changes to the _Binaries_ that don't have their _Text_ files using the "undo" option
for these files of your SCM tool.
### Checkin because a merge operation
When you merge a branch, you work on _Text_ files seeing and merging differences manually or automatically.
When you have done with the merge you need to checkin, but before this,
you need to generate the _Binaries_ (forms, classlib, etc) just from the _Text_ files merged, to sync their code.
Once you have done, then you checkin the boundle of _Binaries_/_Text_.
#### Note
If at the end of a merge operation there are _Binaries_ left, you need to choose the "workspace binaries",
because anyway you will generate them later from their _Text_ files.
For options on integrating FoxBin2Prg with SCM tools, look at this topic:
**> [FoxBin2Prg and use with SCM tools](./FoxBin2Prg_SCM.md)**
## How to use with _git_
See [FoxBin2Prg and use with git](./FoxBin2Prg_git.md)
----
Last changed: _2023/09/06_
----
Last changed: _2023/09/06_
![VFPX logo](https://vfpx.github.io/images/vfpxbanner_small.gif)
This project is part of [VFPX](https://vfpx.github.io/).
----
Last changed: _2023/11/26_ ![Picture](./pictures/vfpxpoweredby_alternative.gif)

View File

@@ -101,4 +101,9 @@ The _BIN2PRG, PRG2BIN, INTERACTIVE, SHOWMSG_ cTypes might be mixed freely like:
Return value is 0=OK, 1=Error.
----
Last changed: _2023/09/01_
Last changed: _2023/09/01_
![VFPX logo](https://vfpx.github.io/images/vfpxbanner_small.gif)
This project is part of [VFPX](https://vfpx.github.io/).
----
Last changed: _2023/11/26_ ![Picture](./pictures/vfpxpoweredby_alternative.gif)

View File

@@ -177,5 +177,10 @@ FoxBin2Prg - Binary2Text.lnk <path>\foxbin2prg.exe "BIN2PRG-SHOWMSG"
FoxBin2Prg - Text2Binary.lnk <path>\foxbin2prg.exe "PRG2BIN-SHOWMSG"
FoxBin2Prg.lnk <path>\foxbin2prg.exe "INTERACTIVE-SHOWMSG"
```
----
Last changed: _2023/09/01_
![VFPX logo](https://vfpx.github.io/images/vfpxbanner_small.gif)
This project is part of [VFPX](https://vfpx.github.io/).
----
Last changed: _2023/11/26_ ![Picture](./pictures/vfpxpoweredby_alternative.gif)

View File

@@ -38,7 +38,7 @@ CTRL+C, CTRL+V on Explorer might save the day. ;)
## Requirements
### #1
A copy of FoxBin2Prg.
Or Install via [Thor](https://github.com/VFPX/Thor/blob/master/Docs/Thor_install.md), this keeps you on the latest version.
Or install via [Thor](https://github.com/VFPX/Thor/blob/master/Docs/Thor_install.md), this keeps you on the latest version.
### #2
It might be a good idea to have a copy of git.
@@ -288,17 +288,18 @@ If I have to checkout old stuff - the setting will fit.
````
*################################################################################################################
*FOXBIN2PRG.CFG configuration options: (If no values given, these are the DEFAULTS)
*Version: v1.20.01
*Version: v1.21.01
*****************************************************************************************************************
* Note, configuration files will follow an inheritance.
* 1. Default values
* 2., optional FOXBIN2PRG.CFG in folder of FOXBIN2PRG.EXE
* or, if defined, a config file given by a parameter calling FOXBIN2PRG
* if used, the AllowInheritance setting controls if other config files will be evaluated
* 3., optional FOXBIN2PRG.CFG in root of working directory
* 4., optional FOXBIN2PRG.CFG in every folder up to the working directory
* 5., optional Special settings per single DBF's Syntax: <TableName>.dbf.cfg in tables folder)
* 2. optional FOXBIN2PRG.CFG in folder of FOXBIN2PRG.EXE,
* or, if defined, a config file given by a parameter calling FOXBIN2PRG,
* if used, the AllowInheritance setting controls if other config files will be evaluated,
* 3. optional FOXBIN2PRG.CFG in root of working directory,
* 4. optional FOXBIN2PRG.CFG in every folder up to the working directory,
* 5. optional Special settings per single DBF's Syntax:<TableName>.dbf.cfg in tables folder),
* 6. Parameter calling FOXBIN2PRG.EXE.
* Some Parameter calling FOXBIN2PRG.EXE overturn this settings (except Defaults)
*****************************************************************************************************************
@@ -424,4 +425,4 @@ All use off this are the last four lines. But I like to keep the template (recen
This project is part of [VFPX](https://vfpx.github.io/).
----
Last changed: _2023/03/30_ ![Picture](./pictures/vfpxpoweredby_alternative.gif)
Last changed: _2023/11/26_ ![Picture](./pictures/vfpxpoweredby_alternative.gif)

View File

@@ -9,4 +9,4 @@ This folder containes the pictures for the reworked documentation resources for
- [FoxBin2Prg](../FoxBin2Prg.md)
----
Last changed: _2023/08/26_
Last changed: _2021/03/03_ ![Picture](./pictures/vfpxpoweredby_alternative.gif)

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 B