diff --git a/Documentacion/github/FoxBin2Prg_Internals.md b/Documentacion/github/FoxBin2Prg_Internals.md
index 0f34df0..8aec326 100644
--- a/Documentacion/github/FoxBin2Prg_Internals.md
+++ b/Documentacion/github/FoxBin2Prg_Internals.md
@@ -1,428 +1,428 @@
-# Internals
-Documentation of FoxBin2Prg - A Binary to Text converter for MS Visual Foxpro 9
-
-## Purpose of this document
-This document shows some internal functions and ideas how to use of FoxBin2Prg.
-
-The original document was created by [Fernando D. Bozzo](https://github.com/fdbozzo) whom I like to thank for the great project.
-Pictures are taken from the original project.
-As far as possible these are the original documents. Changes are added where functionality is changed.
-
-----
-## Table of contents
-- [Why to use this tool](#why-to-use-this-tool)
-- [Configuration file](#configuration-file)
-- [Configuration file per table](#configuration-file-per-table)
-- [FoxBin2Prg Internals](#foxbin2prg-internals)
- - [ZOrder](#zorder)
- - [RemoveZOrderSetFromProps setting](#removezordersetfromprops-setting)
- - [VFP ZOrder bug and fix](#vfp-zorder-bug-and-fix)
- - [DBC ordered fields](#dbc-ordered-fields)
- - [PAM Section](#pam-section)
- - [Property Ordering](#property-ordering)
- - [Timestamps and UniqueIDs](#timestamps-and-uniqueids)
- - [DBF Data Export/Import for Diff/Merge](#dbf-data-export/import-for-diff/merge)
- - [Order and range of records](#order-and-range-of-records)
- - [Configuration per table](#configuration-per-table)
- - [DBF/DB2 Convertion Hooks](#dbf/db2-convertion-hooks)
- - [Language Support for messages](#language-support-for-messages)
- - [Multi-config](#multi-config)
- - [File Capitalization](#file-capitalization)
- - [Conversion processes Logging](#conversion-processes-logging)
- - [Create Class-Per-File](#create-class-per-file)
- - [Complementary options for the UseClassPerFile setting](#complementary-options-for-the-useclassperfile-setting)
- - [RedirectClassPerFileToMain:](#redirectclassperfiletomain:)
- - [ClassPerFileCheck](#classperfilecheck)
- - [Create File-Per-DBC](#create-file-per-dbc)
- - [Complementary options for the UseFilesPerDBC setting](#complementary-options-for-the-usefilesperdbc-setting)
- - [RedirectFilePerDBCToMain](#redirectfileperdbctomain)
- - [ItemPerDBCCheck](#itemperdbccheck)
- - [FoxBin2Prg API](#foxbin2prg-api)
- - [PEM](#pem)
- - [Renamed](#renamed)
- - [Log to StdOut](#log-to-stdout)
-- [How to use with a SCM tool](#how-to-use-with-a-scm-tool)
-
-## Why to use this tool
-The purpose of FoxBin2Prg is to facilitate the Diff and Merge of Visual FoxPro 9 _Binaries_,
-which are not natively supported by any source control tool.
-Traditionally FoxPro comes with a tool named SccText.prg who can make a text representation exporting the source code
-contained in FoxPro tables with a DBF structure. An enhanced version is available on VFPx named SccTextX,
-but like his ancestor, have some design limitations, as:
-
-* It doesn't generate PRG like code
-* It doesn't allow modification of the txa (text) files generated
-* Scctext's txa (text) files generated can't be used for merge with SCM tools, they are readonly
-* Timestamps and ZOrder fields generate a lot of unnecesary differences all over the text file
-
-FoxBin2Prg is designed to bring a solution for all of this, and a few more things,
-which makes _Text_ files with PRG-style and enhances compatibility with SCCAPI (SourceSafe) and other SCM tools,
-like PlasticSCM, Git, Subversion, and the like.
-Special remark on Merge operation is made, because it is the most difficult and more used operation when working with SCM tools,
-and this require that generated text files can be manipulated manually or automatically.
-
-#### Note
-**You came from Visual SourceSafe and have the .pjm but not the real pjx project?**
-
-No problem, just convert the .pjm to .pjx/.pjt sending to FoxBin2Prg, and it generates the real project again.
-
-## Configuration file
-It is possible to create a template or a config with all options and comments via
-```
-DO FOXBIN2PRG.PRG WITH "-c","template.cfg" ==> Generates a template for FoxBin2Prg.cfg config file with newest settings
-DO FOXBIN2PRG.PRG WITH "-C","config.cfg" ==> Generates a config file like FoxBin2Prg.cfg with recent settings of path of second parameter
-```
-See [command line](./FoxBin2Prg_Run.md#usage-2).
-The config file is used to move local setting to a different comupter or for changes while branching.
-
-The options in the template (or in the config that ships with FoxBin2Prg) are commented out.
-To activate an option remove the asterix and set appropriate value.
-These are the FoxBin2Prg.cfg configuration file settings and their meaning:
-
-| FoxBin2Prg.cfg keywords | Value (_Default_) | Description |
-| ----- | ----- | ----- |
-| extension: xx2 | | FoxBin2Prg extensions ends in '2' (pj2, vc2, sc2, etc), but you can change that.
For example you can change pj2 to pja using this: "extension: pj2=pja" for making it SourceSafe (sccapi v1) compatible.
It could be any pair, used sources are:
pj2, vc2, sc2, fr2, lb2, mn2, db2, dc2, fk2, me2 |
-| DontShowProgress | 0 | **Deprecated**. Replaced by ShowProgressbar option from v1.19.40 |
-| ShowProgressbar | 0, _1_, 2 | 1=Always show a progress bar,
2=Only show it when processing multiple-files,
0=Don't show progressbar |
-| DontShowErrors | _0_, 1 | By default, show message errors in a modal messagebox.
Specify "1" if don't want to show errors |
-| NoTimestamps | 0, _1_ | By default, timestamp fields are cleared on _Text_ files, because a lot of differencies are generated on _Binaries_ and _Text_ files with Timestamps activated. This timestamp field is part of the vcx, scx and other Foxpro binary source code files |
-| Debug | _0_, 1, 2 | By default, don't generate individual .Log with process hints.
Activate with "1" to find possible error causes and for debugging,
"2" is special logging |
-| ExtraBackupLevels | 0, _1_, n | By default, one _filename_.BAK file is created.
With this setting you can make more _filename_.n.BAK files,
or none at all using 0 |
-| ClearUniqueID | 0, _1_ | 0=Keep UniqueID,
1=Clear Unique ID.
Very useful for Diff and Merge. By default, UniqueID fields are cleared on _Text_ files, because a lot of differencies are generated with UniqueID activated |
-| OptimizeByFilestamp | _0_, 1 | 0=Don't optimize (always generate),
1=Optimize (generate only when destination filestamp es older). By default this optimization is deactivated, and it is not recommended if using for merge, so _Bin_ and _Text_ files can be modified seperately.
Dangerous while working with branches! |
-| RemoveNullCharsFromCode | 0, _1_ | 1=Drop NULL chars from source code,
0=Leave NULLs in source code |
-| RemoveZOrderSetFromProps | _0_, 1 | 1=Remove ZOrderSet from the properties,
0=Leave ZOrderSet in the properties |
-| XXX_Conversion_Support | n | Defines the conversion operation per filetype |
-| | | For code:
0=No support,
1=Generate _Text_ (Diff),
2=Generate _Text_ and _Bin_ (Merge) |
-| | | For complex data:
(PJX / DBC / DBF): 0=No support,
1=Generate Header _Text_ only (Diff),
2=Generate Header _Text_ and _Bin_ (Merge/Only Structure!),
4=Generate _Text_ with DATA (Diff),
8=Export and Import DATA (Merge/Structure & Data) |
-| PJX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional ((Merge/Only Structure!),
4=Generate _Text_ with DATA (Diff), 8=Export and Import DATA (Merge/Structure & Data) and _bin_) support activated |
-| VCX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
-| SCX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
-| FRX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
-| LBX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
-| MNX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
-| FKY_Conversion_Support | 0, _1_ | Default value is 1 - _Text_ support activated |
-| MEM_Conversion_Support | 0, _1_ | Default value is 1 - _Text_ support activated |
-| DBC_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
-| DBF_Conversion_Support | 0, _1_, 2, 4, 8 | Default value is 1 - just _Text_ support activated.
The support for regenerating DBFs structures (value = 2) are disabled by default to not overrite data accidentally. When activating bidirectional support, keep in mind that Data is not restored, just the structure and indexes!.
A value of 4 is used to export Structure and Data, but exported data is not imported again.
A value of 8 is used for bidirectional support (No General fields!).
**Note:** This can be [changed per table](#configuration-file-per-table). |
-| DBF_Conversion_Included | * | If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf.
See [Order and range of records](#order-and-range-of-records). |
-| DBF_Conversion_Excluded | | If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf.
See [Order and range of records](#order-and-range-of-records). |
-| OldFilesPerDBC | _0_, 1 | This controls the use of the _UseFilesPerDBC_, _RedirectFilePerDBCToMain_ and _ItemPerDBCCheck_ options.
Only if this option is set, the options will be read. |
-| | | 0 New version inactive, options follow:
UseFilesPerDBC=UseClassPerFile
RedirectFilePerDBCToMain=RedirectClassPerFileToMain
ItemPerDBCCheck=ClassPerFileCheck |
-| | | 1 New version active, options active |
-| | | Note the options will be set to old style, is option is turned off. |
-| UseFilesPerDBC | _0_, 1 | 0=One database dc2 file, 1=Multiple file.\*.\*.dc2 files.
See [Create File-Per-DBC](#create file-per-dbc)
**Only if OldFilesPerDBC is 1** |
-| | | 0 creates only a file.dc2 with all DBC (file) data |
-| | | 1 creates a file.dc2 with DBC properties |
-| | | and additional DBC files per DBC item (stored-proc, table, ..) |
-| | | Note: recration only if RedirectFilePerDBCToMain is 1 |
-| [RedirectFilePerDBCToMain](#redirectfileperdbctomain) | _0_, 1 | 0=Don't redirect to file.dc2,
1=Redirect to file.tx2 when selecting file.item.*.dc2
**Only if OldFilesPerDBC is 1** |
-| [ItemPerDBCCheck](#itemperdbccheck) | _0_, 1 | 0=Don't check file.item.*.dc2 inclusion,
1=Check file.item.*.dc2 inclusion
**Only if OldFilesPerDBC is 1**|
-| DBF_BinChar_Base64 | 0, _1_ | 0=For character type fields, if NoCPTrans 0=do not transform, 1=use Base64 transform (default)
**Note:** This can be [changed per table](#configuration-file-per-table). |
-| DBF_IncludeDeleted | _0_, 1 | 0=Do not include deleted records (default),
1=Include deleted records
**Note:** This can be [changed per table](#configuration-file-per-table). |
-| | | **Note:**
This is only true for tables. Generating DBC to _Text_ and back to _Binary_ will act as PACK DATABASE.
The data added by _DBF_IncludeDeleted: 1_ will be ignored by old versions generating _Binary_ files. |
-| UseClassPerFile | _0_, 1, 2 | 0=One library _Text_ file,
1=Multiple file.class.vc2 files,
2=Multiple file.baseclass.class.vc2 files
See [Create Class-Per-File](#create-class-per-file) |
-| [RedirectClassPerFileToMain:](#redirectclassperfiletomain:) | _0_, 1 | 0=Don't redirect to file.vc2,
1=Redirect to file.vc2 when selecting file.class.vc2
RedirectClassType: 1 precedes this setting |
+# Internals
+Documentation of FoxBin2Prg - A Binary to Text converter for MS Visual Foxpro 9
+
+## Purpose of this document
+This document shows some internal functions and ideas how to use of FoxBin2Prg.
+
+The original document was created by [Fernando D. Bozzo](https://github.com/fdbozzo) whom I like to thank for the great project.
+Pictures are taken from the original project.
+As far as possible these are the original documents. Changes are added where functionality is changed.
+
+----
+## Table of contents
+- [Why to use this tool](#why-to-use-this-tool)
+- [Configuration file](#configuration-file)
+- [Configuration file per table](#configuration-file-per-table)
+- [FoxBin2Prg Internals](#foxbin2prg-internals)
+ - [ZOrder](#zorder)
+ - [RemoveZOrderSetFromProps setting](#removezordersetfromprops-setting)
+ - [VFP ZOrder bug and fix](#vfp-zorder-bug-and-fix)
+ - [DBC ordered fields](#dbc-ordered-fields)
+ - [PAM Section](#pam-section)
+ - [Property Ordering](#property-ordering)
+ - [Timestamps and UniqueIDs](#timestamps-and-uniqueids)
+ - [DBF Data Export/Import for Diff/Merge](#dbf-data-export/import-for-diff/merge)
+ - [Order and range of records](#order-and-range-of-records)
+ - [Configuration per table](#configuration-per-table)
+ - [DBF/DB2 Convertion Hooks](#dbf/db2-convertion-hooks)
+ - [Language Support for messages](#language-support-for-messages)
+ - [Multi-config](#multi-config)
+ - [File Capitalization](#file-capitalization)
+ - [Conversion processes Logging](#conversion-processes-logging)
+ - [Create Class-Per-File](#create-class-per-file)
+ - [Complementary options for the UseClassPerFile setting](#complementary-options-for-the-useclassperfile-setting)
+ - [RedirectClassPerFileToMain:](#redirectclassperfiletomain:)
+ - [ClassPerFileCheck](#classperfilecheck)
+ - [Create File-Per-DBC](#create-file-per-dbc)
+ - [Complementary options for the UseFilesPerDBC setting](#complementary-options-for-the-usefilesperdbc-setting)
+ - [RedirectFilePerDBCToMain](#redirectfileperdbctomain)
+ - [ItemPerDBCCheck](#itemperdbccheck)
+ - [FoxBin2Prg API](#foxbin2prg-api)
+ - [PEM](#pem)
+ - [Renamed](#renamed)
+ - [Log to StdOut](#log-to-stdout)
+- [How to use with a SCM tool](#how-to-use-with-a-scm-tool)
+
+## Why to use this tool
+The purpose of FoxBin2Prg is to facilitate the Diff and Merge of Visual FoxPro 9 _Binaries_,
+which are not natively supported by any source control tool.
+Traditionally FoxPro comes with a tool named SccText.prg who can make a text representation exporting the source code
+contained in FoxPro tables with a DBF structure. An enhanced version is available on VFPx named SccTextX,
+but like his ancestor, have some design limitations, as:
+
+* It doesn't generate PRG like code
+* It doesn't allow modification of the txa (text) files generated
+* Scctext's txa (text) files generated can't be used for merge with SCM tools, they are readonly
+* Timestamps and ZOrder fields generate a lot of unnecesary differences all over the text file
+
+FoxBin2Prg is designed to bring a solution for all of this, and a few more things,
+which makes _Text_ files with PRG-style and enhances compatibility with SCCAPI (SourceSafe) and other SCM tools,
+like PlasticSCM, Git, Subversion, and the like.
+Special remark on Merge operation is made, because it is the most difficult and more used operation when working with SCM tools,
+and this require that generated text files can be manipulated manually or automatically.
+
+#### Note
+**You came from Visual SourceSafe and have the .pjm but not the real pjx project?**
+
+No problem, just convert the .pjm to .pjx/.pjt sending to FoxBin2Prg, and it generates the real project again.
+
+## Configuration file
+It is possible to create a template or a config with all options and comments via
+```
+DO FOXBIN2PRG.PRG WITH "-c","template.cfg" ==> Generates a template for FoxBin2Prg.cfg config file with newest settings
+DO FOXBIN2PRG.PRG WITH "-C","config.cfg" ==> Generates a config file like FoxBin2Prg.cfg with recent settings of path of second parameter
+```
+See [command line](./FoxBin2Prg_Run.md#usage-2).
+The config file is used to move local setting to a different comupter or for changes while branching.
+
+The options in the template (or in the config that ships with FoxBin2Prg) are commented out.
+To activate an option remove the asterix and set appropriate value.
+These are the FoxBin2Prg.cfg configuration file settings and their meaning:
+
+| FoxBin2Prg.cfg keywords | Value (_Default_) | Description |
+| ----- | ----- | ----- |
+| extension: xx2 | | FoxBin2Prg extensions ends in '2' (pj2, vc2, sc2, etc), but you can change that.
For example you can change pj2 to pja using this: "extension: pj2=pja" for making it SourceSafe (sccapi v1) compatible.
It could be any pair, used sources are:
pj2, vc2, sc2, fr2, lb2, mn2, db2, dc2, fk2, me2 |
+| DontShowProgress | 0 | **Deprecated**. Replaced by ShowProgressbar option from v1.19.40 |
+| ShowProgressbar | 0, _1_, 2 | 1=Always show a progress bar,
2=Only show it when processing multiple-files,
0=Don't show progressbar |
+| DontShowErrors | _0_, 1 | By default, show message errors in a modal messagebox.
Specify "1" if don't want to show errors |
+| NoTimestamps | 0, _1_ | By default, timestamp fields are cleared on _Text_ files, because a lot of differencies are generated on _Binaries_ and _Text_ files with Timestamps activated. This timestamp field is part of the vcx, scx and other Foxpro binary source code files |
+| Debug | _0_, 1, 2 | By default, don't generate individual .Log with process hints.
Activate with "1" to find possible error causes and for debugging,
"2" is special logging |
+| ExtraBackupLevels | 0, _1_, n | By default, one _filename_.BAK file is created.
With this setting you can make more _filename_.n.BAK files,
or none at all using 0 |
+| ClearUniqueID | 0, _1_ | 0=Keep UniqueID,
1=Clear Unique ID.
Very useful for Diff and Merge. By default, UniqueID fields are cleared on _Text_ files, because a lot of differencies are generated with UniqueID activated |
+| OptimizeByFilestamp | _0_, 1 | 0=Don't optimize (always generate),
1=Optimize (generate only when destination filestamp es older). By default this optimization is deactivated, and it is not recommended if using for merge, so _Bin_ and _Text_ files can be modified seperately.
Dangerous while working with branches! |
+| RemoveNullCharsFromCode | 0, _1_ | 1=Drop NULL chars from source code,
0=Leave NULLs in source code |
+| RemoveZOrderSetFromProps | _0_, 1 | 1=Remove ZOrderSet from the properties,
0=Leave ZOrderSet in the properties |
+| XXX_Conversion_Support | n | Defines the conversion operation per filetype |
+| | | For code:
0=No support,
1=Generate _Text_ (Diff),
2=Generate _Text_ and _Bin_ (Merge) |
+| | | For complex data:
(PJX / DBC / DBF): 0=No support,
1=Generate Header _Text_ only (Diff),
2=Generate Header _Text_ and _Bin_ (Merge/Only Structure!),
4=Generate _Text_ with DATA (Diff),
8=Export and Import DATA (Merge/Structure & Data) |
+| PJX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional ((Merge/Only Structure!),
4=Generate _Text_ with DATA (Diff), 8=Export and Import DATA (Merge/Structure & Data) and _bin_) support activated |
+| VCX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
+| SCX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
+| FRX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
+| LBX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
+| MNX_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
+| FKY_Conversion_Support | 0, _1_ | Default value is 1 - _Text_ support activated |
+| MEM_Conversion_Support | 0, _1_ | Default value is 1 - _Text_ support activated |
+| DBC_Conversion_Support | 0, 1, _2_ | Default value is 2 - Bidirectional (_Text_ and _bin_) support activated |
+| DBF_Conversion_Support | 0, _1_, 2, 4, 8 | Default value is 1 - just _Text_ support activated.
The support for regenerating DBFs structures (value = 2) are disabled by default to not overrite data accidentally. When activating bidirectional support, keep in mind that Data is not restored, just the structure and indexes!.
A value of 4 is used to export Structure and Data, but exported data is not imported again.
A value of 8 is used for bidirectional support (No General fields!).
**Note:** This can be [changed per table](#configuration-file-per-table). |
+| DBF_Conversion_Included | * | If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf.
See [Order and range of records](#order-and-range-of-records). |
+| DBF_Conversion_Excluded | | If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf.
See [Order and range of records](#order-and-range-of-records). |
+| OldFilesPerDBC | _0_, 1 | This controls the use of the _UseFilesPerDBC_, _RedirectFilePerDBCToMain_ and _ItemPerDBCCheck_ options.
Only if this option is set, the options will be read. |
+| | | 0 New version inactive, options follow:
UseFilesPerDBC=UseClassPerFile
RedirectFilePerDBCToMain=RedirectClassPerFileToMain
ItemPerDBCCheck=ClassPerFileCheck |
+| | | 1 New version active, options active |
+| | | Note the options will be set to old style, is option is turned off. |
+| UseFilesPerDBC | _0_, 1 | 0=One database dc2 file, 1=Multiple file.\*.\*.dc2 files.
See [Create File-Per-DBC](#create file-per-dbc)
**Only if OldFilesPerDBC is 1** |
+| | | 0 creates only a file.dc2 with all DBC (file) data |
+| | | 1 creates a file.dc2 with DBC properties |
+| | | and additional DBC files per DBC item (stored-proc, table, ..) |
+| | | Note: recration only if RedirectFilePerDBCToMain is 1 |
+| [RedirectFilePerDBCToMain](#redirectfileperdbctomain) | _0_, 1 | 0=Don't redirect to file.dc2,
1=Redirect to file.tx2 when selecting file.item.*.dc2
**Only if OldFilesPerDBC is 1** |
+| [ItemPerDBCCheck](#itemperdbccheck) | _0_, 1 | 0=Don't check file.item.*.dc2 inclusion,
1=Check file.item.*.dc2 inclusion
**Only if OldFilesPerDBC is 1**|
+| DBF_BinChar_Base64 | 0, _1_ | 0=For character type fields, if NoCPTrans 0=do not transform, 1=use Base64 transform (default)
**Note:** This can be [changed per table](#configuration-file-per-table). |
+| DBF_IncludeDeleted | _0_, 1 | 0=Do not include deleted records (default),
1=Include deleted records
**Note:** This can be [changed per table](#configuration-file-per-table). |
+| | | **Note:**
This is only true for tables. Generating DBC to _Text_ and back to _Binary_ will act as PACK DATABASE.
The data added by _DBF_IncludeDeleted: 1_ will be ignored by old versions generating _Binary_ files. |
+| UseClassPerFile | _0_, 1, 2 | 0=One library _Text_ file,
1=Multiple file.class.vc2 files,
2=Multiple file.baseclass.class.vc2 files
See [Create Class-Per-File](#create-class-per-file) |
+| [RedirectClassPerFileToMain:](#redirectclassperfiletomain:) | _0_, 1 | 0=Don't redirect to file.vc2,
1=Redirect to file.vc2 when selecting file.class.vc2
RedirectClassType: 1 precedes this setting |
| RedirectClassType | _0_, 1, 2 | For classes created with UseClassPerFile>0 in the form file[.baseclass].class.tx2 (vcx only) |
| | | 0 creates / refresh class in file.VCX and add / replace all other classes of this library |
| | | 1 creates / refresh class file[.baseclass].class.VCX and do not touch file.VCX |
| | | 2 creates / refresh class in file.VCX and do not touch other classes of file.VCX |
-| [ClassPerFileCheck](#classperfilecheck) | _0_, 1 | 0=Don't check file.class.vc2 inclusion,
1=Check file.class.vc2 inclusion
Only used if import file is in file[.baseclass].class.tx2 syntax.
Ignored for RedirectClassType: 2 |
+| [ClassPerFileCheck](#classperfilecheck) | _0_, 1 | 0=Don't check file.class.vc2 inclusion,
1=Check file.class.vc2 inclusion
Only used if import file is in file[.baseclass].class.tx2 syntax.
Ignored for RedirectClassType: 2 |
| ClearDBFLastUpdate | 0, _1_ | 0=Keep DBF LastUpdate, 1=Clear DBF LastUpdate. Useful for Diff, minimizes differences. |
-| Language | _(auto)_, EN, FR, ES, DE | Language of templates, shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC (using VERSION(3)) ||
-| HomeDir | 0, _1_ | 0=don't save HomeDir in PJ2,
1=save HomeDir in PJ2.
Setting this to 0 prevents the PJ2 file from changing just because two developers have the project in different folders |
-
-### Note
-The options will be read outside in, top to down. See [Multi-config](#multi-config)
-
-## Configuration file per table
-Those configuration files are valid for a single table only. The idea is to have special settings for single tables.
-It is possible to create a template with all options and comments via
-```
-DO FOXBIN2PRG.PRG WITH "-t","template.dbf.cfg" ==> Generates a template for table.dbf.cfg per table config file with newest settings
-```
-
-See [command line](./FoxBin2Prg_Run.md#usage-2).
-The options in the template (or in the config that ships with FoxBin2Prg) are commented out.
-To activate an option remove the asterix and set appropriate value.
-These are the Table.dbf.cfg configuration file settings and their meaning:
-
-| FoxBin2Prg.cfg keywords | Value | Description |
-| ----- | ----- | ----- |
-| DBF_Conversion_Support | 0, 1, 2, 4, 8 | 0=No support,
1=Generate Header _Text_ only (Diff),
2=Generate Header _Text_ and _Bin_ (Merge/Only Structure!),
4=Generate _Text_ with DATA (Diff),
8=Export and Import DATA (Merge/Structure & Data) |
-| DBF_Conversion_Order | c_Expression | Field expresion (For _INDEX ON_). ie: name+str(age,3),
Empty means no sort order.
usefull only if _DBF_Conversion_Support_>0 |
-| DBF_Conversion_Condition | c_Expression | Logical expression (For _SCAN FOR_). ie: age > 10 AND NOT DELETED(),
empty means all files, except _DBF_IncludeDeleted_
usefull only if _DBF_Conversion_Support_>0 |
-| DBF_BinChar_Base64 | 0, 1 | 0=For character type fields, if NoCPTrans 0=do not transform,
1=use Base64 transform
usefull only if _DBF_Conversion_Support_>2 |
-| DBF_IncludeDeleted | 0, 1 | 0=Do not include deleted records,
1=Include deleted records
usefull only if _DBF_Conversion_Support_>2 |
-
-For defaults, see [Configuration file](#configuration-file).
-
-## FoxBin2Prg Internals
-### ZOrder
-In _Text_ files and starting from v1.19.12, the ZOrder,
-that determines the order on which objects are instantiated and which one is on top,
-is maintained in a more intuitive and optimal way compared to traditional stored numerical values.
-_Text_ files keep lists of objects and their metadata in a special OBJECTDATA tag,
-in which the order of the list is the ZOrder of the object, like this example:
-````
-DEFINE CLASS cnt_controls AS container && "cnt_controls" class description
- *< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" />
-
- *-- OBJECTDATA items order determines ZOrder
- * < OBJECTDATA: ObjPath="Check2" UniqueID="" Timestamp="" />
- * < OBJECTDATA: ObjPath="Check4" UniqueID="" Timestamp="" />
- * < OBJECTDATA: ObjPath="Label_h" UniqueID="" Timestamp="" />
- * < OBJECTDATA: ObjPath="Textbox_h" UniqueID="" Timestamp="" />
- * < OBJECTDATA: ObjPath="Check1" UniqueID="" Timestamp="" />
- * < OBJECTDATA: ObjPath="Check3" UniqueID="" Timestamp="" />
-````
-This way, you can rearrange the items to alter their ZOrder, and this does auto-renumbering when generating _Binaries_.
-
-### RemoveZOrderSetFromProps setting
-#### Note:
-The ZOrderSet property is not shown in VFP Properties editor.
-
-Starting at v1.19.43 there is a new configuration setting named RemoveZOrderSetFromProps,
-that can be used to automatically remove this property from the objects, if enabled with 1.
-This property keep the order of the inherited controls used on visual classes using a numeric value like the Tabstop property,
-but this property is not shown to the user and sometimes their value is duplicated, causing that every time you save a visual class
-or form, some control(s) get their order swapped, so when reopening the visual class some objects that should appear on top
-are on botton and vice versa.
-
-#### VFP ZOrder bug and fix
-Sometimes you can see that some objects are reordered every time you save a visual form/class
-and generate the _Text_ file. This is caused because in some situations VFP can loose the tracking to some ZOrders,
-and duplicate them. To **fix** this problem, you just need to open your visual form/class,
-reorder manually the offending objects to force VFP to assign a new ZOrder value and generate the _Text_ file.
-You can see (only in the _Text_ file or inside the vcx/vct) that the property is called ZOrderSet and have a repeated value
-before fixing it. Another solution, starting at v1.19.43, is using RemoveZOrderSetFromProps:1 in foxbin2prg.cfg file to
-remove this from the properties. A better solution is using this setting only in a specific directory used to fix this
-kind of problems. In any case, for this setting to work properly, you need to generate the _Binary_
-
-### DBC ordered fields
-Starting from v1.19.42 the members of the DBC are ordered alphabetically, including fields of DBFs and Views, Connections, Tables,
-Views and Relations. All this to minimize the differences when diffing DBCs that have constant changes.
-````
-
- depto
- descrip
-
-````
-### PAM Section
-This section is generated for classes and forms, it is delimited with the tag,
- and have the definition of Properties, Arrays and Methods, with their comments, like this example:
-````
-DEFINE CLASS c1 AS custom OLEPUBLIC && Description of "c1" class
- *
- *m: emptymethod_with_comments && This method have no code, just comments!
- *m: mymethod && My Method
- *p: prop1 && My prop 1
- *p: special_prop_with_cr
- *p: special_prop_with_crlf && Should have CR+LF
- *a: array_1_d[1,0](1,0) && 1 dimension array (1)
- *a: array_2_d[1,2](1,2) && 2 dimension array (1,2)
- *p: _memberdata && XML Metadata for customizable properties
- *
-````
-Starting from v1.19.21 arrays don't need to be preceded with "^" symbol, and methods don't need to be preceded with "*" symbol,
-which makes this section more easy to maintain.
-
-### Property Ordering
-On _Text_ files is easy, ordering for methods and properties is done in alphabetical way, like scctext does with methods.
-This makes comparisons easier and with less differences.
-On _Binaries_, property ordering is a very different thing. No documentation is available about this,
-so the only guideline is trying to make it as FoxPro does, but this is not always possible because there are two extreme cases,
-and variants between the them:
-1. The best and easy one, is when defining a class (or control) with his properties: In this case,
-each class have a phisical record on the scx/vcx table, and all the properties of it are keep toghether,
-so this ordering can be easily duplicated (look at "TESTS\DATOS_READONLY\f_form_aa.scx file" on foxbin2prg project
-and open it as a table to see the class per record)
-2. The worst and most difficult case, is when there is a container with controls subclassed,
-and properties are changed on the instance: In this case FoxPro makes a big and unique list of properties of all objects
-in just one phisical record, so there is no way to know which property corresponds to which class. For this case,
-I've made a unique list composed of all properties of all classes,
-ordered according to most common orderings (look at "TESTS\DATOS_READONLY\f_form_aa2.scx file" on foxbin2prg project
-and open it as a table to see all the properties of all the classes of the same earlier example, in just one record)
-
-For these two cases, and starting from v1.19.22, I've created several "props_*" files with ordering by class for the 1st case,
-and a list with all in it ("props_all.txt") for the second case, so in case of any problems,
-rearranging some props will be an easy thing.
-
-#### Warning
-These "props_**" files are necessary in the foxbin2prg install directory.
-
-It's recommended to use the EXE version that have all files included and is faster._
-Several Unit Tests (in TESTS directory) are made to make the best effort to cover the most typical use cases.
-There is also an Excel spreedsheet with the compilation of properties of each class with the order that FoxPro uses internally,
-and a tab with the all-in-one order for the worst case.
-
-### Timestamps and UniqueIDs
-Timestamp field are used in VFP to track changes with 3rd party tools and UniqueId is used to identify classes inside _Binaries_,
-but, AFAIK, they are not used by VFP itself. There are 2 switches, enabled by default,
-that are used to clear this values (ClearUniqueId and NoTimestamps),
-so no differences are shown for this values constantly changing.
-Starting from v1.19.23 this values are just cleared on _Text_ files, and generated on the _Binaries_,
-as well the sccdata field, because this way there are no differences when opening/closing certain files, as a PJX,
-which by default fill some of this fields even if no modifications are made, which causes that SCM tools detect those changes.
-Having them prefilled, then no changes are detected.
-
-### DBF Data Export/Import for Diff/Merge
-Starting at version v1.19.21, and thanks to Doug Hennig proposal and coding, FoxBin2Prg can export DBFs Data,
-specially intended for small DBFs, as config ones, on which sometimes is needed to track the changes.
-It is deactivated by default, but can be activated with **"DBF_Conversion_Support: 4"** in foxbin2prg.cfg
-Since version v1.19.47, importing of Data can be activated with **"DBF_Conversion_Support: 8"** in foxbin2prg.cfg
-If you want to export the data of just some tables and not for all of them, one way is moving the tables
-for data export to another directory, or even a subdirectory of main data files,
-and write a foxbin2prg.cfg with **"DBF_Conversion_Support: 4 or 8"** for this diretory only,
-taking advantage of multi-configuration capability introduced on v1.19.25
-A much better option that join the best of the two worlds, available from v1.19.44,
-could be using the default setting **"DBF_Conversion_Support: 1"** and using **individual cfg files** for each table
-(table.dbf.cfg) on which you want to export their data, so this way you can have only the structure in DB2 files
-and some tables with their data exported for easy diffing with previous versions,
-or even use **"DBF_Conversion_Support: 8"** (available since v1.19.47) for bidirectional support of data import/export.
-
-### Order and range of records
-**FoxBin2prg.cfg (Main CFG, Directory CFG or Table CFG)**
-New foxbin2prg.cfg options for filtering tables from conversion using one or multiple conbinations of filemasks.
-
-#### Syntax
-````
-"DBF_Conversion_Included: [ , [ , ... ](-,_filemask_-[-,-...-) ]"
-"DBF_Conversion_Excluded: [ , [ , ... ](-,_filemask_-[-,-...-) ]"
-````
-
-Example of multiple file masks (separte with ","):
-````
-"DBF_Conversion_Included: PET**.**, ??ME.DBF, ???.DBF, ?.**"
-````
-
-### Configuration per table
-New configuration options. See [Configuration file per table](#configuration-file-per-table).
-
-These options can be used in any combination inside a dbf particular cfg file,
-if you create a text file using your dbf filename and adding ".cfg".
-
-#### Syntax for filename.dbf.cfg contents
-````
-"DBF_Conversion_Support: <4 for export only or 8 for bidirectional support>"
-"DBF_Conversion_Order: "
-"DBF_Conversion_Condition: "
-````
-
-#### Example: customers.dbf.cfg
-````
-"DBF_Conversion_Support: 4"
-"DBF_Conversion_Order: cust_no"
-"DBF_Conversion_Condition: cust_no > 10"
-````
-
-### DBF/DB2 Convertion Hooks
-From version v1.19.19 there is a new property "run_AfterCreateTable" and from version v1.19.24 "run_AfterCreate_DB2".
-The purpose of both properties is to allow the execution of an external program each time a DBF is converted to DB2 or a DB2
-is converted to DBF.
-The main purpose of FoxBin2Prg is to be used for Diff and Merge with a SCM tool, so in this scenario the data is not needed,
-but there are use cases where exporting, importing or manipulating data is needed while making the conversions, and for those cases are this properties.
-
-#### This is a sample program
-````
-*-- DEMO HOOK FOR PROCESSING DBFs AND DB2
-LOCAL oFB AS 'c_foxbin2prg' OF 'c:\desa\foxbin2prg\foxbin2prg.prg'
-oFB = NEWOBJECT( 'c_foxbin2prg', 'c:\desa\foxbin2prg\foxbin2prg.prg' )
-oFB.DBF_Conversion_Support = 2
-oFB.run_AfterCreateTable = 'p_AfterCreateTable'
-oFB.run_AfterCreate_DB2 = 'p_AfterCreate_DB2'
-oFB.execute( 'C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_dbc.dc2' )
-oFB.execute( 'C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_dbf.db2' )
-oFB.execute( 'C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_dbf.dbf' )
-oFB = NULL
-RETURN
-
-
-PROCEDURE p_AfterCreateTable
- LPARAMETERS lnDataSessionID, tc_OutputFile, toTable
- MESSAGEBOX( 'Actual Datasession: ' + TRANSFORM(SET("Datasession")) + CHR(13) ;
- + 'lnDataSessionID: ' + TRANSFORM(lnDataSessionID) )
- *-- You can fill the table here.
- INSERT INTO fb2p_dbf (nombre,edad,depto) VALUES ('Fer', 45, 'dpto')
-ENDPROC
-
-
-PROCEDURE p_AfterCreate_DB2
- LPARAMETERS lnDataSessionID, tc_OutputFile, toTable
- MESSAGEBOX( 'Actual Datasession: ' + TRANSFORM(SET("Datasession")) + CHR(13) ;
- + 'lnDataSessionID: ' + TRANSFORM(lnDataSessionID) )
- *-- You can export the data here.
- STRTOFILE( nombre + STR(edad,3) + depto, 'c:\temp\data.txt', 1)
-ENDPROC
-````
-### Language Support for messages
-As for version v1.19.38 FoxBin2Prg messages are available natively on Spanish, English, German and French.
-
-#### Note
-The messages on vbs scripts are not translated (are very few), just the FoxPro ones,
-which have +90% of the messages.
-
-**Want to collaborate translating the messages to your language so others can use it?**
-Just copy the english translation CASE in the final section in FoxBin2Prg.PRG to a new CASE
-with your country code and translate the messages (can be done in 20 minutes or less),
-and send it to me. I will include it in the next release ;-)
-
-#### Note
-.h language files are not supported anymore, and are now implemented inside foxbin2prg,
-in the "C_LANG" class at the end of the PRG_
-
-### Multi-config
-Starting at version v1.19.25 FoxBin2Prg allow configuration per directory,
-overriding the main configuration of FoxBin2Prg directory.
-The override is by each setting, so you can reconfigure one or more settings and the
-remaining settings are inherited from main CFG.
-
-From v1.19.42 CFGs are inherited between directories from parent to child,
-so if you have all your developments under, let's say, "c:\devs" directory and subdirs,
-de CFG in "c:\devs" will be inherited on subdirs, and settings can be overriden one by one if you want to.
-This inheritance saves a lot of time and minimizes the CFGs needed \:\)
-
-##### Note
-Options will be read outside in, top to down.
-If an option is defined multiple times, even in the same file, last occurance wins.
-This exception is the group controlling the new style to split DBC files.
-The options _UseFilesPerDBC_, _RedirectFilePerDBCToMain_ and _ItemPerDBCCheck_ will be ignored,
-if _OldFilesPerDBC_ is set to 0.
-If _OldFilesPerDBC_ is set to 0 after it was active, the values of the three options are rejected at all.
-
-### File Capitalization
-FoxBin2Prg takes care of file capitalization (their extension, specifically),
-using another program called ("filename_caps.exe") for capitalizing input files and output files.
-This is because some SCM and DVCS tools are multiplatform, and if you add a "file.ext"
-and later add a "file.EXT" or "File.Ext", the SCM can interpret them as different files,
-because on Unix, Linux, Mac and other sistems, they are.
-If you want a special capitalization (ie: capitalize the full name of the file),
-you can configure this behaviour in "filename_caps.cfg" configuration file, which includes syntax examples.
-File capitalization occurs when you convert a file, but in the case that the input file can't be converted,
-no message error ir thrown (ie: when using the PRG version from VFP Command Line with the form to be converted opened)
-
-### Conversion processes Logging
-If you want detailed process logging of FoxBin2Prg conversions,
-to see all internal processes, decisions and used optimizations, you can enable debugging using
-+debug:1+ in foxbin2prg.cfg configuration file, and a full log is generated on FoxBin2Prg installation directory.
-Debug messages are translated (+90% of debug messages), but capitalization process messages are not,
-and are available just in Spanish (-10% of debug messages).
-
-### Create Class-Per-File
-Starting at v1.19.37 you can configure foxbin2prg to generate one class per file using TwoFox naming style "basefile.class.vc2"
-with the value "1"
-To configure this, you must first enable it in foxbin2prg.cfg file:
-````
-*UseClassPerFile: 1 && 0=One library _Text_ file, 1=Multiple file.class.vc2 files, 2=Multiple file.baseclass.class.vc2 files
-````
-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.cl_1.vc2
- - mylib.cl_2.vc2
- - mylib.cl_3.vc2
-#### Important note
-The settings of UseClassPerFile and related options are sensible. If changed the wrong way it easy to destroy classlibs.
+| Language | _(auto)_, EN, FR, ES, DE | Language of templates, shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC (using VERSION(3)) ||
+| HomeDir | 0, _1_ | 0=don't save HomeDir in PJ2,
1=save HomeDir in PJ2.
Setting this to 0 prevents the PJ2 file from changing just because two developers have the project in different folders |
+
+### Note
+The options will be read outside in, top to down. See [Multi-config](#multi-config)
+
+## Configuration file per table
+Those configuration files are valid for a single table only. The idea is to have special settings for single tables.
+It is possible to create a template with all options and comments via
+```
+DO FOXBIN2PRG.PRG WITH "-t","template.dbf.cfg" ==> Generates a template for table.dbf.cfg per table config file with newest settings
+```
+
+See [command line](./FoxBin2Prg_Run.md#usage-2).
+The options in the template (or in the config that ships with FoxBin2Prg) are commented out.
+To activate an option remove the asterix and set appropriate value.
+These are the Table.dbf.cfg configuration file settings and their meaning:
+
+| FoxBin2Prg.cfg keywords | Value | Description |
+| ----- | ----- | ----- |
+| DBF_Conversion_Support | 0, 1, 2, 4, 8 | 0=No support,
1=Generate Header _Text_ only (Diff),
2=Generate Header _Text_ and _Bin_ (Merge/Only Structure!),
4=Generate _Text_ with DATA (Diff),
8=Export and Import DATA (Merge/Structure & Data) |
+| DBF_Conversion_Order | c_Expression | Field expresion (For _INDEX ON_). ie: name+str(age,3),
Empty means no sort order.
usefull only if _DBF_Conversion_Support_>0 |
+| DBF_Conversion_Condition | c_Expression | Logical expression (For _SCAN FOR_). ie: age > 10 AND NOT DELETED(),
empty means all files, except _DBF_IncludeDeleted_
usefull only if _DBF_Conversion_Support_>0 |
+| DBF_BinChar_Base64 | 0, 1 | 0=For character type fields, if NoCPTrans 0=do not transform,
1=use Base64 transform
usefull only if _DBF_Conversion_Support_>2 |
+| DBF_IncludeDeleted | 0, 1 | 0=Do not include deleted records,
1=Include deleted records
usefull only if _DBF_Conversion_Support_>2 |
+
+For defaults, see [Configuration file](#configuration-file).
+
+## FoxBin2Prg Internals
+### ZOrder
+In _Text_ files and starting from v1.19.12, the ZOrder,
+that determines the order on which objects are instantiated and which one is on top,
+is maintained in a more intuitive and optimal way compared to traditional stored numerical values.
+_Text_ files keep lists of objects and their metadata in a special OBJECTDATA tag,
+in which the order of the list is the ZOrder of the object, like this example:
+````
+DEFINE CLASS cnt_controls AS container && "cnt_controls" class description
+ *< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" />
+
+ *-- OBJECTDATA items order determines ZOrder
+ * < OBJECTDATA: ObjPath="Check2" UniqueID="" Timestamp="" />
+ * < OBJECTDATA: ObjPath="Check4" UniqueID="" Timestamp="" />
+ * < OBJECTDATA: ObjPath="Label_h" UniqueID="" Timestamp="" />
+ * < OBJECTDATA: ObjPath="Textbox_h" UniqueID="" Timestamp="" />
+ * < OBJECTDATA: ObjPath="Check1" UniqueID="" Timestamp="" />
+ * < OBJECTDATA: ObjPath="Check3" UniqueID="" Timestamp="" />
+````
+This way, you can rearrange the items to alter their ZOrder, and this does auto-renumbering when generating _Binaries_.
+
+### RemoveZOrderSetFromProps setting
+#### Note:
+The ZOrderSet property is not shown in VFP Properties editor.
+
+Starting at v1.19.43 there is a new configuration setting named RemoveZOrderSetFromProps,
+that can be used to automatically remove this property from the objects, if enabled with 1.
+This property keep the order of the inherited controls used on visual classes using a numeric value like the Tabstop property,
+but this property is not shown to the user and sometimes their value is duplicated, causing that every time you save a visual class
+or form, some control(s) get their order swapped, so when reopening the visual class some objects that should appear on top
+are on botton and vice versa.
+
+#### VFP ZOrder bug and fix
+Sometimes you can see that some objects are reordered every time you save a visual form/class
+and generate the _Text_ file. This is caused because in some situations VFP can loose the tracking to some ZOrders,
+and duplicate them. To **fix** this problem, you just need to open your visual form/class,
+reorder manually the offending objects to force VFP to assign a new ZOrder value and generate the _Text_ file.
+You can see (only in the _Text_ file or inside the vcx/vct) that the property is called ZOrderSet and have a repeated value
+before fixing it. Another solution, starting at v1.19.43, is using RemoveZOrderSetFromProps:1 in foxbin2prg.cfg file to
+remove this from the properties. A better solution is using this setting only in a specific directory used to fix this
+kind of problems. In any case, for this setting to work properly, you need to generate the _Binary_
+
+### DBC ordered fields
+Starting from v1.19.42 the members of the DBC are ordered alphabetically, including fields of DBFs and Views, Connections, Tables,
+Views and Relations. All this to minimize the differences when diffing DBCs that have constant changes.
+````
+
+ depto
+ descrip
+
+````
+### PAM Section
+This section is generated for classes and forms, it is delimited with the tag,
+ and have the definition of Properties, Arrays and Methods, with their comments, like this example:
+````
+DEFINE CLASS c1 AS custom OLEPUBLIC && Description of "c1" class
+ *
+ *m: emptymethod_with_comments && This method have no code, just comments!
+ *m: mymethod && My Method
+ *p: prop1 && My prop 1
+ *p: special_prop_with_cr
+ *p: special_prop_with_crlf && Should have CR+LF
+ *a: array_1_d[1,0](1,0) && 1 dimension array (1)
+ *a: array_2_d[1,2](1,2) && 2 dimension array (1,2)
+ *p: _memberdata && XML Metadata for customizable properties
+ *
+````
+Starting from v1.19.21 arrays don't need to be preceded with "^" symbol, and methods don't need to be preceded with "*" symbol,
+which makes this section more easy to maintain.
+
+### Property Ordering
+On _Text_ files is easy, ordering for methods and properties is done in alphabetical way, like scctext does with methods.
+This makes comparisons easier and with less differences.
+On _Binaries_, property ordering is a very different thing. No documentation is available about this,
+so the only guideline is trying to make it as FoxPro does, but this is not always possible because there are two extreme cases,
+and variants between the them:
+1. The best and easy one, is when defining a class (or control) with his properties: In this case,
+each class have a phisical record on the scx/vcx table, and all the properties of it are keep toghether,
+so this ordering can be easily duplicated (look at "TESTS\DATOS_READONLY\f_form_aa.scx file" on foxbin2prg project
+and open it as a table to see the class per record)
+2. The worst and most difficult case, is when there is a container with controls subclassed,
+and properties are changed on the instance: In this case FoxPro makes a big and unique list of properties of all objects
+in just one phisical record, so there is no way to know which property corresponds to which class. For this case,
+I've made a unique list composed of all properties of all classes,
+ordered according to most common orderings (look at "TESTS\DATOS_READONLY\f_form_aa2.scx file" on foxbin2prg project
+and open it as a table to see all the properties of all the classes of the same earlier example, in just one record)
+
+For these two cases, and starting from v1.19.22, I've created several "props_*" files with ordering by class for the 1st case,
+and a list with all in it ("props_all.txt") for the second case, so in case of any problems,
+rearranging some props will be an easy thing.
+
+#### Warning
+These "props_**" files are necessary in the foxbin2prg install directory.
+
+It's recommended to use the EXE version that have all files included and is faster._
+Several Unit Tests (in TESTS directory) are made to make the best effort to cover the most typical use cases.
+There is also an Excel spreedsheet with the compilation of properties of each class with the order that FoxPro uses internally,
+and a tab with the all-in-one order for the worst case.
+
+### Timestamps and UniqueIDs
+Timestamp field are used in VFP to track changes with 3rd party tools and UniqueId is used to identify classes inside _Binaries_,
+but, AFAIK, they are not used by VFP itself. There are 2 switches, enabled by default,
+that are used to clear this values (ClearUniqueId and NoTimestamps),
+so no differences are shown for this values constantly changing.
+Starting from v1.19.23 this values are just cleared on _Text_ files, and generated on the _Binaries_,
+as well the sccdata field, because this way there are no differences when opening/closing certain files, as a PJX,
+which by default fill some of this fields even if no modifications are made, which causes that SCM tools detect those changes.
+Having them prefilled, then no changes are detected.
+
+### DBF Data Export/Import for Diff/Merge
+Starting at version v1.19.21, and thanks to Doug Hennig proposal and coding, FoxBin2Prg can export DBFs Data,
+specially intended for small DBFs, as config ones, on which sometimes is needed to track the changes.
+It is deactivated by default, but can be activated with **"DBF_Conversion_Support: 4"** in foxbin2prg.cfg
+Since version v1.19.47, importing of Data can be activated with **"DBF_Conversion_Support: 8"** in foxbin2prg.cfg
+If you want to export the data of just some tables and not for all of them, one way is moving the tables
+for data export to another directory, or even a subdirectory of main data files,
+and write a foxbin2prg.cfg with **"DBF_Conversion_Support: 4 or 8"** for this diretory only,
+taking advantage of multi-configuration capability introduced on v1.19.25
+A much better option that join the best of the two worlds, available from v1.19.44,
+could be using the default setting **"DBF_Conversion_Support: 1"** and using **individual cfg files** for each table
+(table.dbf.cfg) on which you want to export their data, so this way you can have only the structure in DB2 files
+and some tables with their data exported for easy diffing with previous versions,
+or even use **"DBF_Conversion_Support: 8"** (available since v1.19.47) for bidirectional support of data import/export.
+
+### Order and range of records
+**FoxBin2prg.cfg (Main CFG, Directory CFG or Table CFG)**
+New foxbin2prg.cfg options for filtering tables from conversion using one or multiple conbinations of filemasks.
+
+#### Syntax
+````
+"DBF_Conversion_Included: [ , [ , ... ](-,_filemask_-[-,-...-) ]"
+"DBF_Conversion_Excluded: [ , [ , ... ](-,_filemask_-[-,-...-) ]"
+````
+
+Example of multiple file masks (separte with ","):
+````
+"DBF_Conversion_Included: PET**.**, ??ME.DBF, ???.DBF, ?.**"
+````
+
+### Configuration per table
+New configuration options. See [Configuration file per table](#configuration-file-per-table).
+
+These options can be used in any combination inside a dbf particular cfg file,
+if you create a text file using your dbf filename and adding ".cfg".
+
+#### Syntax for filename.dbf.cfg contents
+````
+"DBF_Conversion_Support: <4 for export only or 8 for bidirectional support>"
+"DBF_Conversion_Order: "
+"DBF_Conversion_Condition: "
+````
+
+#### Example: customers.dbf.cfg
+````
+"DBF_Conversion_Support: 4"
+"DBF_Conversion_Order: cust_no"
+"DBF_Conversion_Condition: cust_no > 10"
+````
+
+### DBF/DB2 Convertion Hooks
+From version v1.19.19 there is a new property "run_AfterCreateTable" and from version v1.19.24 "run_AfterCreate_DB2".
+The purpose of both properties is to allow the execution of an external program each time a DBF is converted to DB2 or a DB2
+is converted to DBF.
+The main purpose of FoxBin2Prg is to be used for Diff and Merge with a SCM tool, so in this scenario the data is not needed,
+but there are use cases where exporting, importing or manipulating data is needed while making the conversions, and for those cases are this properties.
+
+#### This is a sample program
+````
+*-- DEMO HOOK FOR PROCESSING DBFs AND DB2
+LOCAL oFB AS 'c_foxbin2prg' OF 'c:\desa\foxbin2prg\foxbin2prg.prg'
+oFB = NEWOBJECT( 'c_foxbin2prg', 'c:\desa\foxbin2prg\foxbin2prg.prg' )
+oFB.DBF_Conversion_Support = 2
+oFB.run_AfterCreateTable = 'p_AfterCreateTable'
+oFB.run_AfterCreate_DB2 = 'p_AfterCreate_DB2'
+oFB.execute( 'C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_dbc.dc2' )
+oFB.execute( 'C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_dbf.db2' )
+oFB.execute( 'C:\DESA\foxbin2prg\TESTS\DATOS_TEST\fb2p_dbf.dbf' )
+oFB = NULL
+RETURN
+
+
+PROCEDURE p_AfterCreateTable
+ LPARAMETERS lnDataSessionID, tc_OutputFile, toTable
+ MESSAGEBOX( 'Actual Datasession: ' + TRANSFORM(SET("Datasession")) + CHR(13) ;
+ + 'lnDataSessionID: ' + TRANSFORM(lnDataSessionID) )
+ *-- You can fill the table here.
+ INSERT INTO fb2p_dbf (nombre,edad,depto) VALUES ('Fer', 45, 'dpto')
+ENDPROC
+
+
+PROCEDURE p_AfterCreate_DB2
+ LPARAMETERS lnDataSessionID, tc_OutputFile, toTable
+ MESSAGEBOX( 'Actual Datasession: ' + TRANSFORM(SET("Datasession")) + CHR(13) ;
+ + 'lnDataSessionID: ' + TRANSFORM(lnDataSessionID) )
+ *-- You can export the data here.
+ STRTOFILE( nombre + STR(edad,3) + depto, 'c:\temp\data.txt', 1)
+ENDPROC
+````
+### Language Support for messages
+As for version v1.19.38 FoxBin2Prg messages are available natively on Spanish, English, German and French.
+
+#### Note
+The messages on vbs scripts are not translated (are very few), just the FoxPro ones,
+which have +90% of the messages.
+
+**Want to collaborate translating the messages to your language so others can use it?**
+Just copy the english translation CASE in the final section in FoxBin2Prg.PRG to a new CASE
+with your country code and translate the messages (can be done in 20 minutes or less),
+and send it to me. I will include it in the next release ;-)
+
+#### Note
+.h language files are not supported anymore, and are now implemented inside foxbin2prg,
+in the "C_LANG" class at the end of the PRG_
+
+### Multi-config
+Starting at version v1.19.25 FoxBin2Prg allow configuration per directory,
+overriding the main configuration of FoxBin2Prg directory.
+The override is by each setting, so you can reconfigure one or more settings and the
+remaining settings are inherited from main CFG.
+
+From v1.19.42 CFGs are inherited between directories from parent to child,
+so if you have all your developments under, let's say, "c:\devs" directory and subdirs,
+de CFG in "c:\devs" will be inherited on subdirs, and settings can be overriden one by one if you want to.
+This inheritance saves a lot of time and minimizes the CFGs needed \:\)
+
+##### Note
+Options will be read outside in, top to down.
+If an option is defined multiple times, even in the same file, last occurance wins.
+This exception is the group controlling the new style to split DBC files.
+The options _UseFilesPerDBC_, _RedirectFilePerDBCToMain_ and _ItemPerDBCCheck_ will be ignored,
+if _OldFilesPerDBC_ is set to 0.
+If _OldFilesPerDBC_ is set to 0 after it was active, the values of the three options are rejected at all.
+
+### File Capitalization
+FoxBin2Prg takes care of file capitalization (their extension, specifically),
+using another program called ("filename_caps.exe") for capitalizing input files and output files.
+This is because some SCM and DVCS tools are multiplatform, and if you add a "file.ext"
+and later add a "file.EXT" or "File.Ext", the SCM can interpret them as different files,
+because on Unix, Linux, Mac and other sistems, they are.
+If you want a special capitalization (ie: capitalize the full name of the file),
+you can configure this behaviour in "filename_caps.cfg" configuration file, which includes syntax examples.
+File capitalization occurs when you convert a file, but in the case that the input file can't be converted,
+no message error ir thrown (ie: when using the PRG version from VFP Command Line with the form to be converted opened)
+
+### Conversion processes Logging
+If you want detailed process logging of FoxBin2Prg conversions,
+to see all internal processes, decisions and used optimizations, you can enable debugging using
++debug:1+ in foxbin2prg.cfg configuration file, and a full log is generated on FoxBin2Prg installation directory.
+Debug messages are translated (+90% of debug messages), but capitalization process messages are not,
+and are available just in Spanish (-10% of debug messages).
+
+### Create Class-Per-File
+Starting at v1.19.37 you can configure foxbin2prg to generate one class per file using TwoFox naming style "basefile.class.vc2"
+with the value "1"
+To configure this, you must first enable it in foxbin2prg.cfg file:
+````
+*UseClassPerFile: 1 && 0=One library _Text_ file, 1=Multiple file.class.vc2 files, 2=Multiple file.baseclass.class.vc2 files
+````
+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.cl_1.vc2
+ - mylib.cl_2.vc2
+ - mylib.cl_3.vc2
+#### Important note
+The settings of UseClassPerFile and related options are sensible. If changed the wrong way it easy to destroy classlibs.
#### Recommended new setting
Starting at v1.19.42 you can configure foxbin2prg to generate one class per file.
@@ -443,17 +443,17 @@ 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
+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.
-RedirectClassType: 1 precedes this setting for files in the
-
+RedirectClassType: 1 precedes this setting for files in the
+
##### ClassPerFileCheck
-Configuring this setting to 1 will check the inclusion of all file[.baseclass].class.vc2 files
+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
-containing the file.class.ext naming will be included in the _Binary_ (useful when you want to add external classes to the library).
-This only used if import file is in file[.baseclass].class.tx2 syntax.
-Ignored for RedirectClassType: 2
+containing the file.class.ext naming will be included in the _Binary_ (useful when you want to add external classes to the library).
+This only used if import file is in file[.baseclass].class.tx2 syntax.
+Ignored for RedirectClassType: 2
#### Note
If you dont use the redirect setting, an individual vcx/scx file will be generated.
diff --git a/TESTS/DATOS_READONLY/menu_shortcut.mnt b/TESTS/DATOS_READONLY/menu_shortcut.MNT
similarity index 100%
rename from TESTS/DATOS_READONLY/menu_shortcut.mnt
rename to TESTS/DATOS_READONLY/menu_shortcut.MNT
diff --git a/TESTS/DATOS_READONLY/menu_shortcut2.mnt b/TESTS/DATOS_READONLY/menu_shortcut2.MNT
similarity index 100%
rename from TESTS/DATOS_READONLY/menu_shortcut2.mnt
rename to TESTS/DATOS_READONLY/menu_shortcut2.MNT
diff --git a/ThorUpdater/FoxBin2Prg.zip b/ThorUpdater/FoxBin2Prg.zip
index 7e268e1..ca76423 100644
Binary files a/ThorUpdater/FoxBin2Prg.zip and b/ThorUpdater/FoxBin2Prg.zip differ
diff --git a/foxbin2prg.cfg.txt b/foxbin2prg.cfg.txt
index 0e710b6..10a1449 100644
--- a/foxbin2prg.cfg.txt
+++ b/foxbin2prg.cfg.txt
@@ -12,7 +12,6 @@
*BackgroundImage: && Backgroundimage for process form. Empty for empty Background. File not found uses default.
*HomeDir: 1 && 0 = don't save HomeDir in PJ2, [1 = save HomeDir in PJ2]
*----------------------------------------------------------------------------------------------------------------
-*HomeDir: 1 && 0 = don't save HomeDir in PJ2, [1 = save HomeDir in PJ2]
*-- Conversion operation by type
*PJX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
@@ -82,7 +81,6 @@
*-- Text file extensions
*extension: tx2=newext && Specify extensions to use. Default FoxBin2Prg extensions ends in '2' (see at the bottom)
-*----------------------------------------------------------------------------------------------------------------
*-- Example configuration for SourceSafe compatibility:
*extension: pj2=pja && Text file to PJX
*extension: vc2=vca && Text file to VCX
diff --git a/foxbin2prg.exe b/foxbin2prg.exe
index 0ed57ba..f062ccd 100644
Binary files a/foxbin2prg.exe and b/foxbin2prg.exe differ
diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt
index 3f0b5e0..5cb0658 100644
Binary files a/foxbin2prg.pjt and b/foxbin2prg.pjt differ
diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx
index 5d6f606..8113010 100644
Binary files a/foxbin2prg.pjx and b/foxbin2prg.pjx differ
diff --git a/foxbin2prg.prg b/foxbin2prg.prg
index 15a25e1..4095f4a 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -740,13 +740,13 @@ Try
, .F., .F., .F., tcCFG_File )
Catch To loEx
*-- Esto solo es para errores en el INIT, ya que los demás se deben capturar y tratar antes.
- lnResp = loEx.ErrorNo
- Messagebox( 'Error ' + Transform(loEx.ErrorNo) + ', ' + loEx.Message + C_CR ;
- + loEx.Procedure + ', Line ' + Transform(loEx.Lineno) + C_CR ;
- + loEx.Details ;
- , 0+16+4096 ;
- , '' ;
- , 60000 )
+ lnResp = loEx.ErrorNo
+ Messagebox( 'Error ' + Transform(loEx.ErrorNo) + ', ' + loEx.Message + C_CR ;
+ + loEx.Procedure + ', Line ' + Transform(loEx.Lineno) + C_CR ;
+ + loEx.Details ;
+ , 0+16+4096 ;
+ , '' ;
+ , 60000 )
Endtry
AddProperty(_Screen, 'ExitCode', lnResp)
@@ -1038,9 +1038,6 @@ Define Class c_foxbin2prg As Session
n_MEM_Conversion_Support = 1
c_DBF_Conversion_Included = ''
c_DBF_Conversion_Excluded = ''
-*** DH 2021-03-04: added cOutputFolder and n_HomeDir properties
- cOutputFolder = '' && the folder to write files to (blank = same folder as source file)
- n_HomeDir = 1 && 0 = don't save HomeDir in PJ2, 1 = save HomeDir in PJ2
*** DH 2021-03-04: added cOutputFolder and n_HomeDir properties
cOutputFolder = '' && the folder to write files to (blank = same folder as source file)
n_HomeDir = 1 && 0 = don't save HomeDir in PJ2, 1 = save HomeDir in PJ2
@@ -2729,15 +2726,6 @@ Define Class c_foxbin2prg As Session
Endif
-*** DH 2021-03-04: handle n_HomeDir configuration setting
- CASE LEFT( laConfig(m.I), 8 ) == LOWER('HomeDir:')
- lcValue = ALLTRIM( SUBSTR( laConfig(m.I), 9 ) )
- IF INLIST( lcValue, '0', '1' ) THEN
- lo_CFG.n_HomeDir = INT( VAL( lcValue ) )
- .writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > HomeDir: ' + TRANSFORM(lo_CFG.n_HomeDir) )
- ENDIF
-*** DH 2021-03-04: end of new code
-
Endcase
Endfor
@@ -3807,217 +3795,6 @@ Define Class c_foxbin2prg As Session
Read Events
lnCodError = 0
-*!* Changed by: Lutz Scheffler 07.3.2021
-*!* change date="{^2021-03-07,18:44:00}"
-* added option to create config files with values
- Case m.lcType=='-C' And Vartype( m.tc_InputFile )='C'
- Local;
- lcText As String,;
- lcValue As String,;
- lcReturn As String,;
- lnLines As Number,;
- lnLine As Number,;
- lnOptions As Number,;
- lnOption As Number
-
- lnOptions = 47
-
- Local Array;
- laLines(1),;
- laOptions(m.lnOptions,3)
-
- loLang = _Screen.o_FoxBin2Prg_Lang
- lcText = Strtran( '*' + Strtran( m.loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_cfg, 0h0D0A, 0h0D0A + '*'), 0h0D0A + '*' + 0h0D0A, 0h0D0A0D0A)
- lnLines = Alines(laLines,m.lcText)
-
-*now for each option
- laOptions(01,1) = "*ShowProgressbar:" && 0=Don't show, 1=Allways show, 2= Show only for multi-file processing
- laOptions(01,2) = ".n_ShowProgressbar"
- laOptions(01,3) = 0
- laOptions(02,1) = "*DontShowErrors:" && 0,1 Show message errors by default
- laOptions(02,2) = ".l_ShowErrors"
- laOptions(02,3) = 3
- laOptions(03,1) = "*NoTimestamps:" && 0,1 Clear timestamps by default for minimize differences
- laOptions(03,2) = ".l_NoTimestamps"
- laOptions(03,3) = 1
- laOptions(04,1) = "*Debug:" && 0,1 Don't Activate individual .Log by default
- laOptions(04,2) = ".n_Debug"
- laOptions(04,3) = 0
- laOptions(05,1) = "*BodyDevInfo:" && 0,1 [0=Don't keep DevInfo for body pjx records], 1=Keep DevInfo
- laOptions(05,2) = ".n_BodyDevInfo"
- laOptions(05,3) = 0
- laOptions(06,1) = "*ExtraBackupLevels:" && n By default 1 BAK is created. With this you can make more .N.BAK, or none
- laOptions(06,2) = ".n_ExtraBackupLevels"
- laOptions(06,3) = 0
- laOptions(07,1) = "*ClearUniqueID:" && 0,1 0=Keep UniqueID in text files, 1=Clear Unique ID. Useful for Diff and Merge
- laOptions(07,2) = ".l_ClearUniqueID"
- laOptions(07,3) = 1
- laOptions(08,1) = "*ClearDBFLastUpdate:" && 0,1 0=Keep DBF LastUpdate, 1=Clear DBF LastUpdate. Useful for Diff.
- laOptions(08,2) = ".l_ClearDBFLastUpdate"
- laOptions(08,3) = 1
- laOptions(09,1) = "*OptimizeByFilestamp:" && 0,1,2 1=Optimize file regeneration depending on file timestamp. Dangerous while working with branches!
- laOptions(09,2) = ".n_OptimizeByFilestamp"
- laOptions(09,3) = 0
- laOptions(10,1) = "*RemoveNullCharsFromCode:" && 0,1 1=.t. 1=Drop NULL chars from source code
- laOptions(10,2) = ".l_RemoveNullCharsFromCode"
- laOptions(10,3) = 1
- laOptions(11,1) = "*RemoveZOrderSetFromProps:" && 0,1 1=.t. 0=Do not remove ZOrderSet property from object, 1=Remove ZOrderSet property from object
- laOptions(11,2) = ".l_RemoveZOrderSetFromProps"
- laOptions(11,3) = 1
- laOptions(12,1) = "*Language:" && Language of shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC [DEFAULT]
- laOptions(12,2) = ".c_Language_In"
- laOptions(12,3) = 0
- laOptions(13,1) = "*ExcludeDBFAutoincNextval:" && 0,1 [0=Do not exclude this value from db2], 1=Exclude this value from db2
- laOptions(13,2) = ".n_ExcludeDBFAutoincNextval"
- laOptions(13,3) = 0
- laOptions(14,1) = "*PRG_Compat_Level:" && n [0=Legacy], 1=Use HELPSTRING as Class Procedure comment
- laOptions(14,2) = ".n_PRG_Compat_Level"
- laOptions(14,3) = 0
- laOptions(15,1) = "*HomeDir:" && 0,1 0 = don't save HomeDir in PJ2, [1 = save HomeDir in PJ2]
- laOptions(15,2) = ".n_HomeDir"
- laOptions(15,3) = 0
- laOptions(16,1) = "*PJX_Conversion_Support:" && n 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
- laOptions(16,2) = ".PJX_Conversion_Support"
- laOptions(16,3) = 0
- laOptions(17,1) = "*VCX_Conversion_Support:" && n 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
- laOptions(17,2) = ".VCX_Conversion_Support"
- laOptions(17,3) = 0
- laOptions(18,1) = "*SCX_Conversion_Support:" && n 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
- laOptions(18,2) = ".SCX_Conversion_Support"
- laOptions(18,3) = 0
- laOptions(19,1) = "*FRX_Conversion_Support:" && n 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
- laOptions(19,2) = ".FRX_Conversion_Support"
- laOptions(19,3) = 0
- laOptions(20,1) = "*LBX_Conversion_Support:" && n 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
- laOptions(20,2) = ".LBX_Conversion_Support"
- laOptions(20,3) = 0
- laOptions(21,1) = "*MNX_Conversion_Support:" && n 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
- laOptions(21,2) = ".MNX_Conversion_Support"
- laOptions(21,3) = 0
- laOptions(22,1) = "*FKY_Conversion_Support:" && n 0=No support, 1=Generate TXT only (Diff)
- laOptions(22,2) = ".FKY_Conversion_Support"
- laOptions(22,3) = 0
- laOptions(23,1) = "*MEM_Conversion_Support:" && 0=No support, 1=Generate TXT only (Diff)
- laOptions(23,2) = ".MEM_Conversion_Support"
- laOptions(23,3) = 0
- laOptions(24,1) = "*DBC_Conversion_Support:" && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
- laOptions(24,2) = ".DBC_Conversion_Support"
- laOptions(24,3) = 0
- laOptions(25,1) = "*DBF_Conversion_Support:" && n 0=No support, 1=Generate Header TXT only (Diff), 2=Generate Header TXT and BIN (Merge/Only Structure!), 4=Generate TXT with DATA (Diff), 8=Export and Import DATA (Merge/Structure & Data)
- laOptions(25,2) = ".DBF_Conversion_Support"
- laOptions(25,3) = 0
- laOptions(26,1) = "*DBF_Conversion_Included:" && n If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf
- laOptions(26,2) = ".DBF_Conversion_Included"
- laOptions(26,3) = 0
- laOptions(27,1) = "*DBF_Conversion_Excluded:" && n If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf
- laOptions(27,2) = ".DBF_Conversion_Excluded"
- laOptions(27,3) = 0
- laOptions(28,1) = "*OldFilesPerDBC:" && 0,1 1=.t. 1=Turns the File per DBC options on, 0 uses the old UseClassPerFile etc settings.
- laOptions(28,2) = ".l_OldFilesPerDBC"
- laOptions(28,3) = 1
- laOptions(29,1) = "*UseFilesPerDBC:" && 0,1 0=One database dc2 file, 1=Multiple file.*.*.dc2 files
- laOptions(29,2) = ".n_UseFilesPerDBC"
- laOptions(29,3) = 0
- laOptions(30,1) = "*RedirectFilePerDBCToMain:" && 0,1 1=.t. 0=Don't redirect to file.dc2, 1=Redirect to file.tx2 when selecting file.item.*.dc2
- laOptions(30,2) = ".l_RedirectFilePerDBCToMain"
- laOptions(30,3) = 1
- laOptions(31,1) = "*ItemPerDBCCheck:" && 0,1 1=.t. 0=Don't check file.item.*.dc2 inclusion, 1=Check file.item.*.dc2 inclusion
- laOptions(31,2) = ".l_ItemPerDBCCheck"
- laOptions(31,3) = 1
- laOptions(32,1) = "*DBF_BinChar_Base64:" && 0,1 1=.t. 0=For character type fields, if NoCPTrans 0=do not transform, 1=use Base64 transform (default)
- laOptions(32,2) = ".l_DBF_BinChar_Base64"
- laOptions(32,3) = 1
- laOptions(33,1) = "*DBF_IncludeDeleted:" && 0,1 1=.t. 0=Do not include deleted records (default), 1=Include deleted records
- laOptions(33,2) = ".l_DBF_IncludeDeleted"
- laOptions(33,3) = 1
- laOptions(34,1) = "*UseClassPerFile:" && n 0=One library tx2 file, 1=Multiple file.class.tx2 files, 2=Multiple file.baseclass.class.tx2 files
- laOptions(34,2) = ".n_UseClassPerFile"
- laOptions(34,3) = 0
- laOptions(35,1) = "*RedirectClassPerFileToMain:" && 0,1 1=.t. 0=Don't redirect to file.tx2, 1=Redirect to file.tx2 when selecting file.class.tx2
- laOptions(35,2) = ".l_RedirectClassPerFileToMain"
- laOptions(35,3) = 1
- laOptions(36,1) = "*RedirectClassType:" && 0,1,2 For classes created with UseClassPerFile>0 in the form file[.baseclass].class.tx2
- laOptions(36,2) = ".n_RedirectClassType"
- laOptions(36,3) = 0
- laOptions(37,1) = "*ClassPerFileCheck:" && 0,1 1=.t. 0=Don't check file.class.tx2 inclusion, 1=Check file.class.tx2 inclusion
- laOptions(37,2) = ".l_ClassPerFileCheck"
- laOptions(37,3) = 1
- laOptions(38,1) = "*extension: pj2=" && ext Text file to PJX
- laOptions(38,2) = ".c_pj2"
- laOptions(38,3) = 2
- laOptions(39,1) = "*extension: vc2=" && ext Text file to VCX
- laOptions(39,2) = ".c_vc2"
- laOptions(39,3) = 2
- laOptions(40,1) = "*extension: sc2=" && ext Text file to SCX
- laOptions(40,2) = ".c_sc2"
- laOptions(40,3) = 2
- laOptions(41,1) = "*extension: fr2=" && ext Text file to FRX
- laOptions(41,2) = ".c_fr2"
- laOptions(41,3) = 2
- laOptions(42,1) = "*extension: lb2=" && ext Text file to LBX
- laOptions(42,2) = ".c_lb2"
- laOptions(42,3) = 2
- laOptions(43,1) = "*extension: mn2=" && ext Text file to MNX
- laOptions(43,2) = ".c_mn2"
- laOptions(43,3) = 2
- laOptions(44,1) = "*extension: db2=" && ext Text file to DBF
- laOptions(44,2) = ".c_db2"
- laOptions(44,3) = 2
- laOptions(45,1) = "*extension: dc2=" && ext Text file to DBC
- laOptions(45,2) = ".c_dc2"
- laOptions(45,3) = 2
- laOptions(46,1) = "*extension: fk2=" && ext Text file to FKY
- laOptions(46,2) = ".c_fk2"
- laOptions(46,3) = 2
- laOptions(47,1) = "*extension: me2=" && ext Text file to MEM
- laOptions(47,2) = ".c_me2"
- laOptions(47,3) = 2
-
- For lnOption = 1 To m.lnOptions
- lnLine = Ascan( m.laLines , m.laOptions( m.lnOption, 1 ), 1, -1, 1, 4)
- If m.lnLine >0 Then
- lcText = m.laLines( m.lnLine )
- lcValue = Strextract( m.lcText , m.laOptions( m.lnOption, 1 ), '&'+'&' ,1 , 3)
- Do Case
- Case m.laOptions( m.lnOption, 3 ) = 0
- lcReturn = Padr(' ' + Transform( Evaluate( m.laOptions( m.lnOption, 2 ) ) ), Len(m.lcValue) + 1 )
-
- Case m.laOptions( m.lnOption, 3 ) = 1
- lcReturn = Padr(' ' + Iif ( Evaluate( m.laOptions( m.lnOption, 2 )), '1', '0' ), Len(m.lcValue) + 1 )
-
- Case m.laOptions( m.lnOption, 3 ) = 2
- lcReturn = Padr(Evaluate( m.laOptions( m.lnOption, 2 )), Len(m.lcValue) + 1 )
-
- Case m.laOptions( m.lnOption, 3 ) = 3
- lcReturn = Padr(' ' + Iif ( Evaluate( m.laOptions( m.lnOption, 2 )), '0', '1' ), Len(m.lcValue) + 1 )
-
- OTHERWISE
-* not defined. loop
- Loop
-
- Endcase
- laLines( m.lnLine ) = Substr(Strtran(m.laLines( m.lnLine ) , m.lcValue, m.lcReturn), 2 )
-
- Endif &&lnLine >0
-
- Endfor &&lnOption
-
- lcText = ''
-
- lnLines = m.lnLines+1
- Dimension;
- M.laLines( m.lnLines )
-
- Ains(m.laLines,4)
- laLines( 4 ) = Textmerge( m.loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_Header4 )
- For lnLine = 1 To m.lnLines
- lcText = m.lcText+ m.laLines( m.lnLine )+0h0D0A
- Endfor &&lnLine
-
- Strtofile( m.lcText, m.tc_InputFile )
-
-*!* /Changed by: Lutz Scheffler 07.3.2021
-
Otherwise
*-- EJECUCIÓN NORMAL
@@ -30446,7 +30223,6 @@ Define Class CL_LANG As Custom
<<>>BackgroundImage: && Backgroundimage for process form. Empty for empty Background. File not found uses default.
<<>>HomeDir: 1 && 0 = don't save HomeDir in PJ2, [1 = save HomeDir in PJ2]
<<>>----------------------------------------------------------------------------------------------------------------
- <<>>HomeDir: 1 && 0 = don't save HomeDir in PJ2, [1 = save HomeDir in PJ2]
<<>>
<<>>-- Conversion operation by type
<<>>PJX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
@@ -30516,7 +30292,6 @@ Define Class CL_LANG As Custom
<<>>
<<>>-- Text file extensions
<<>>extension: tx2=newext && Specify extensions to use. Default FoxBin2Prg extensions ends in '2' (see at the bottom)
- <<>>----------------------------------------------------------------------------------------------------------------
<<>>-- Example configuration for SourceSafe compatibility:
<<>>extension: pj2=pja && Text file to PJX
<<>>extension: vc2=vca && Text file to VCX
@@ -30698,7 +30473,6 @@ Define Class CL_LANG As Custom
<<>>BackgroundImage: && Backgroundimage for process form. Empty for empty Background. File not found uses default.
<<>>HomeDir: 1 && 0 = don't save HomeDir in PJ2, [1 = save HomeDir in PJ2]
<<>>----------------------------------------------------------------------------------------------------------------
- <<>>HomeDir: 1 && 0 = don't save HomeDir in PJ2, [1 = save HomeDir in PJ2]
<<>>
<<>>-- Conversion operation by type
<<>>PJX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
@@ -30768,7 +30542,6 @@ Define Class CL_LANG As Custom
<<>>
<<>>-- Text file extensions
<<>>extension: tx2=newext && Specify extensions to use. Default FoxBin2Prg extensions ends in '2' (see at the bottom)
- <<>>----------------------------------------------------------------------------------------------------------------
<<>>-- Example configuration for SourceSafe compatibility:
<<>>extension: pj2=pja && Text file to PJX
<<>>extension: vc2=vca && Text file to VCX
@@ -30961,7 +30734,6 @@ Define Class CL_LANG As Custom
<<>>BackgroundImage: && Hintergrundbild für das Formular zur Fortschrittsanzeige.
<<>> && Leer erzeugt kein Hintergrundbild., Wird die Datei nicht gefunden, wird der Standardhintergrund verwendet.
<<>>HomeDir: 1 && 0 = Die Eigenschaft HomeDir wird nicht in die PJ2 gespeichert, [1 = Die Eigenschaft wird gespeichert]
- <<>>HomeDir: 1 && 0 = Die Eigenschaft HomeDir wird nicht in die PJ2 gespeichert, [1 = Die Eigenschaft wird gespeichert]
<<>>
<<>>----------------------------------------------------------------------------------------------------------------
<<>>-- Konvertierungs Optionen:
@@ -31041,6 +30813,7 @@ Define Class CL_LANG As Custom
<<>>DBF_IncludeDeleted: 0 && 0=Ohne gelöschte Datensätze (default), 1=Mit gelöschten Datensätzen
<<>> && Diese Option kann auch per Tabelle gesetzt werden.
<<>>----------------------------------------------------------------------------------------------------------------
+ <<>>
<<>>-- Text-Datei Endungen
<<>>extension: tx2=newext && Umdefinition der Dateiendung der Textdateien. Die vordefinierten Endungen enden mit '2' (Beispiel siehe Ende dieser Datei)
<<>>-- Beispiel für geänderte Textdatei Endungen, hier für SourceSafe Kompatibiltät:
@@ -31235,7 +31008,6 @@ Define Class CL_LANG As Custom
<<>>BackgroundImage: && Backgroundimage for process form. Empty for empty Background. File not found uses default.
<<>>HomeDir: 1 && 0 = don't save HomeDir in PJ2, [1 = save HomeDir in PJ2]
<<>>----------------------------------------------------------------------------------------------------------------
- <<>>HomeDir: 1 && 0 = don't save HomeDir in PJ2, [1 = save HomeDir in PJ2]
<<>>
<<>>-- Conversion operation by type
<<>>PJX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
@@ -31305,7 +31077,6 @@ Define Class CL_LANG As Custom
<<>>
<<>>-- Text file extensions
<<>>extension: tx2=newext && Specify extensions to use. Default FoxBin2Prg extensions ends in '2' (see at the bottom)
- <<>>----------------------------------------------------------------------------------------------------------------
<<>>-- Example configuration for SourceSafe compatibility:
<<>>extension: pj2=pja && Text file to PJX
<<>>extension: vc2=vca && Text file to VCX