From 803ba987a2297a09868858f0628b9cd02a24aee7 Mon Sep 17 00:00:00 2001 From: Doug Hennig Date: Mon, 4 Sep 2023 10:14:46 -0500 Subject: [PATCH] Implemented changes from @lscheffler's fork --- Create_FoxBin2Prg.cfg | 169 +++ FOXBIN2PRG.DBF.CFG.TXT | 12 + docs/ChangeLog.md | 438 ++++++ docs/FoxBin2Prg_Internals.md | 65 +- foxbin2prg.cfg.txt | 64 +- foxbin2prg.dbf.cfg.txt | 2 +- foxbin2prg.prg | 2442 +++++++++++++++++++++++----------- 7 files changed, 2398 insertions(+), 794 deletions(-) create mode 100644 Create_FoxBin2Prg.cfg create mode 100644 FOXBIN2PRG.DBF.CFG.TXT create mode 100644 docs/ChangeLog.md diff --git a/Create_FoxBin2Prg.cfg b/Create_FoxBin2Prg.cfg new file mode 100644 index 0000000..4e8b3cb --- /dev/null +++ b/Create_FoxBin2Prg.cfg @@ -0,0 +1,169 @@ +*################################################################################################################ +*FOXBIN2PRG.CFG configuration options: (If no values given, these are the DEFAULTS) +*Version: v1.20.00 +*Options for project FoxBin2Prg +* +*This file declares ALL settings to create / recreate text files, +* making the project independent of colaborators settings +***************************************************************************************************************** + +* Note, configuration files will follow an inheritance. +* 1. Default values +* 2., optional FOXBIN2PRG.CFG in folder of FOXBIN2PRG.EXE +* 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: .dbf.cfg in tables folder) +* 6., Parameter calling FOXBIN2PRG.EXE. + +* Some Parameter calling FOXBIN2PRG.EXE overturn this settings (except Defaults) +***************************************************************************************************************** + +*-- Settings for internal work, not processing +Language: EN && Language of shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC [DEFAULT] +ShowProgressbar: 1 && 0=Don't show, 1=Allways show, 2= Show only for multi-file processing +DontShowErrors: 0 && Show message errors by default +ExtraBackupLevels: 1 && By default 1 BAK is created. With this you can make more .N.BAK, or none +*Debug: 0 && 0=Don't Activate individual .Log by default +* && 1=Activate individual .Log by default +* && 2=??? +* && Only valid if not controlled by parameter +*BackgroundImage: && Backgroundimage for process form. Empty for empty Background. File not found uses default. +HomeDir: 1 && Home Directory in PJX +* && 0 don't save HomeDir in PJ2 +* && 1 save HomeDir in PJ2 +*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*-- Settings for config file via parameter only +*-- Settings for config file via parameter only +InhibitInheritance: 3 && 0=Allow scanning "regular" config files (file via parameter is just additional default) +* && 1=Only read tree from root of the file given by parameter, not FoxBin2Prg default +* && 2=Only read folder and subfolder of the file given by parameter +* && 3=Read no other file +* && This is like +* && 0 Default | Parameter file | Default near FoxBin2Prg | all other config files +* && 1 Default | Parameter file | Inheritance from root to parent of folder | folder and subdirs +* && 2 Default | Parameter file | folder and subdirs +* && 3 Default | Parameter file +*---------------------------------------------------------------------------------------------------------------- + +*-- Conversion operation by type +PJX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +VCX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +SCX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +FRX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +LBX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +MNX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +DBC_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +DBF_Conversion_Support: 8 && 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) +FKY_Conversion_Support: 1 && 0=No support, 1=Generate TXT only (Diff) +MEM_Conversion_Support: 1 && 0=No support, 1=Generate TXT only (Diff) +*---------------------------------------------------------------------------------------------------------------- + +*Setting for pjx files +CheckFileInPath: 0 && Determines 2Txt deals with files not in the subfolders of the PJX. No handler for UNC paths. +* && 0 Ignore. Default +* && 1 Check and error out if file is not on same structure (for source control) +* && 2 Create absolute path if file is on different drive. +* && 3 Create absolute path if file is not in structure +*---------------------------------------------------------------------------------------------------------------- + +*Setting for container files (not pjx) +*-- CLASS and FORM options (tx2 is to read as vc2 or sc2, VCX might be SCX) +*- Class per file options (UseClassPerFile: 1) +UseClassPerFile: 1 && Determines how a library (or form) will handle included class (or, for forms, objects) +* && 0 One library.tx2 file +* && 1 Multiple file.class.tx2 files +* && 2 Multiple file.baseclass.class.tx2 files +RedirectClassPerFileToMain: 1 && When regenerating binary files, determine target file +* && 0 Don't redirect to file.tx2 +* && 1 Redirect to file.tx2 when selecting file[.baseclass].class.tx2 +* && RedirectClassType: 1 has precedence +RedirectClassType: 0 && For classes created with UseClassPerFile>0 in the form file[.baseclass].class.tx2 +* && Those files could be imported like file.tx2::Class::import or like file[.baseclass].class.tx2 +* && For the second form: +* && 0 Redirect file[.baseclass].class.tx2 to file.VCX and add / replace all other classes of this library +* && 1 Redirect file[.baseclass].class.tx2 to file[.baseclass].class.VCX and do not touch file.VCX +* && 2 Redirect file[.baseclass].class.tx2 to file.VCX and do not touch other classes of file.VCX +ClassPerFileCheck: 0 && Check, if files listed in the main file of a library or form will be included +* && 0 Don't check file inclusion +* && 1 Check file[.baseclass].class.tx2 inclusion +* && Only used if import file is in file[.baseclass].class.tx2 syntax +* && Ignored for RedirectClassType: 2 +*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +*-- FORM options +*- Form per file options (UseFormSettings: 1) +UseFormSettings: 0 && 1=Turns the File per SCX options on, 0 uses the old UseClassPerFile etc settings. +* && Options below will only read if UseFormSettings is set 1 before! +* && If UseFormSettings is set 0 later, all setting will be lost +UseFormPerFile: 0 && Determines how a form will handle included objects +* && 0 One Form.sc2 file +* && 1 Multiple Form.Obj.sc2 files +* && 2 Multiple Form.baseclass.Obj.sc2 files +RedirectFormPerFileToMain: 0 && When regenerating binary files, determine target file +* && 0 Don't redirect to Form.scx +* && 1 Redirect to Form.scx when selecting Form[.baseclass].Obj.sc2 +* && RedirectFormType: 1 has precedence +RedirectFormType: 0 && For classes created with UseFormPerFile>0 in the form Form[.baseclass].Obj.sc2 +* && Those files could be imported like Form.sc2::Class::import or like Form[.baseclass].Obj.sc2 +* && For the second form: +* && 0 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and add / replace all other classes of this library +* && 1 Redirect Form[.baseclass].Obj.sc2 to Form[.baseclass].Obj.SCX and do not touch Form.SCX +* && 2 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and do not touch other classes of Form.SCX +FormPerFileCheck: 0 && Check, if files listed in the main file of a library or form will be included +* && 0 Don't check file inclusion +* && 1 Check Form[.baseclass].Obj.sc2 inclusion +* && Only used if import file is in Form[.baseclass].Obj.sc2 syntax +* && Ignored for RedirectFormType: 2 +*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +*-- DBC options +*- File per DBC options (UseFilesPerDBC: 1) +OldFilesPerDBC: 1 && 1=Turns the File per DBC options on, 0 uses the old UseClassPerFile etc settings. +* && Options below will only read if OldFilesPerDBC is set 1 before! +* && If OldFilesPerDBC is set 0 later, alle setting will be lost +UseFilesPerDBC: 1 && 0=One database dc2 file, 1=Multiple file.*.*.dc2 files +* && 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: 1 && 0=Don't redirect to file.dc2, 1=Redirect to file.tx2 when selecting file.item.*.dc2 +ItemPerDBCCheck: 1 && 0=Don't check file.item.*.dc2 inclusion, 1=Check file.item.*.dc2 inclusion +*---------------------------------------------------------------------------------------------------------------- + +*-- General files +NoTimestamps: 1 && Clear timestamps of several file types by default for minimize text-file differences +ClearUniqueID: 1 && 0=Keep UniqueID in text files, 1=Clear Unique ID. Useful for Diff and Merge +OptimizeByFilestamp: 0 && 1=Optimize file regeneration depending on file timestamp. Dangerous while working with branches! +RemoveNullCharsFromCode: 1 && 1=Drop NULL chars from source code +RemoveZOrderSetFromProps: 0 && 0=Do not remove ZOrderSet property from object, 1=Remove ZOrderSet property from object +PRG_Compat_Level: 0 && 0=Legacy, 1=Use HELPSTRING as Class Procedure comment +*---------------------------------------------------------------------------------------------------------------- + +*-- PJX special +BodyDevInfo: 0 && 0=Don't keep DevInfo for body pjx records, 1=Keep DevInfo +*---------------------------------------------------------------------------------------------------------------- + +*-- DBF special +ClearDBFLastUpdate: 1 && 0=Keep DBF LastUpdate, 1=Clear DBF LastUpdate. Useful for Diff. +ExcludeDBFAutoincNextval: 0 && 0=Do not exclude this value from db2, 1=Exclude this value from db2 +DBF_Conversion_Included: * && If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf +DBF_Conversion_Excluded: && If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf +DBF_BinChar_Base64: 0 && For character type fields, if NoCPTrans 0=do not transform, 1=use Base64 transform (default) +DBF_IncludeDeleted: 0 && 0=Do not include deleted records (default), 1=Include deleted records +*---------------------------------------------------------------------------------------------------------------- + +*-- 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=pj2 && Text file to PJX +extension: vc2=vc2 && Text file to VCX +extension: sc2=sc2 && Text file to SCX +extension: fr2=fr2 && Text file to FRX +extension: lb2=lb2 && Text file to LBX +extension: mn2=mn2 && Text file to MNX +extension: db2=db2 && Text file to DBF +extension: dc2=dc2 && Text file to DBC +*-- Additional extensions +extension: fk2=fk2 && Text file to FKY +extension: me2=me2 && Text file to MEM +* diff --git a/FOXBIN2PRG.DBF.CFG.TXT b/FOXBIN2PRG.DBF.CFG.TXT new file mode 100644 index 0000000..d7136e5 --- /dev/null +++ b/FOXBIN2PRG.DBF.CFG.TXT @@ -0,0 +1,12 @@ +*################################################################################################################ +*-- Individual DBF configuration file (syntax: filename.dbf.cfg) Defaults see FoxBin2prg.cfg +*Version: v1.20.05 +***************************************************************************************************************** + +*DBF_Conversion_Support: <0,1,2,4,8> && 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) +*DBF_Conversion_Order: && Field expresion. ie: name+str(age,3) +*DBF_Conversion_Condition: && Logical expression. ie: age > 10 AND NOT DELETED() +*DBF_IndexList: && comma delimited list of additonal non structural index files, cdx or idx +*DBF_BinChar_Base64: <0,1> && For character type fields, if NoCPTrans 0=do not transform, 1=use Base64 transform +*DBF_IncludeDeleted: <0,1> && 0=Do not include deleted records, 1=Include deleted records +* \ No newline at end of file diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md new file mode 100644 index 0000000..6b2c11a --- /dev/null +++ b/docs/ChangeLog.md @@ -0,0 +1,438 @@ +# FoxBin2Prg Change log +Documentation of FoxBin2Prg - A Binary to Text converter for MS Visual Foxpro 9 + +## Purpose of this document +List of Changes, Bugfixes and modifications. + +For settings, API and other realted stuff see [Internals](./FoxBin2Prg_Internals.md). + +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 +- [Remark](#remark) +- [Full Change History](#full-change-history) + +## 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. + +It's my way of thanking them for their contribution. + +_**Note:** you can click on the version number for downloading this version from GitHub, or you can get all the code history directly from the GitHub repository, which is more easy to search._ + +| Rel.Date | Developer | Version | Details | +| - | - | - | - | +| 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) | +| | | | Enhancement: Inserted options to allow splitting of SCX handling from VCX.1 | +| 2023/09/01 | LScheffler | [v1.20.04](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.20.04) | Enhancement: New option "tcDebug" for get_DirSettings method. | +| | | | Enhancement: For better clearance, renamed setting AllowInheritance to InhibitInheritance. | +| | | | Enhancement: The debug option set via parameter has precedence over value from config file. | +| | | | Enhancement: For debug option set via parameter only first valid call is used. | +| 2023/08/31 | LScheffler | [v1.20.03](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.20.03) | **Enhancement**: New option "tcCFG_File" for get_DirSettings method. | +| 2023/08/31 | LScheffler | [v1.20.02](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.20.02) | New option for parameter set config file to control the use of "regular" config files enhanced | +| 2023/08/30 | LScheffler | [v1.20.01](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.20.01) | **Bug Fix**: Some values of config file would not be read, if the inline comment "&&" was not in the line (LScheffler) | +| | | | **Bug Fix**: Bug Fix: config file set by parameter would be ignored, if the folder contains FoxBin2Prg.cfg (LScheffler) | +| | | | **Bug Fix**: Bug Fix: Fixed problems with table config files (LScheffler) | +| | | | **Enhancement**: For config file template new options to set config file and debug added | +| | | | **Enhancement**: New option for parameter set config file to control the use of "regular" config files | +| 2023/08/27 | LScheffler | [v1.20.00](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.20.00) | **Enhancement**: Source now ships without binary source files. See [README.md](../README.md) how to regenerate. | +| 2023/08/26 | LScheffler | [v1.20.00](https://github.com/lscheffler/foxbin2prg/releases/tag/v1.20.00) | **Bug Fix**: Issues with form charsets ( national letters in form and controls Caption field) (KestasL)
This fixes also: Forms with ole controls conversion error (also: any vcx) #95 (KestasL) | +| | | | **Enhancement**: Added option to return version number | +| | | | **Bug Fix**: Bug Fix: codepage is lost on recreation, issue #96, fixes issue #95 (OLE) as well (KestasL) | +| | | | Since all files will be rewritten due to the codepage stored, it's a good time to change version number too. | +| 2023/03/20 | LScheffler | [v1.19.78](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.78) | **Enhancement**: Text2Bin on PJX errors out for projects with an attach icon that has a drive letter on its path. #93 (ericbarte) | +| | | | **Enhancement**: Documentation enhanced | +| 2023/03/16 | LScheffler | [v1.19.77](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.77) | **Bug Fix**: Bin2Txt Operation on VCX loses leading spaces in Property Values #90 (JoergSchneider) | +| | | | **Bug Fix**: Txt2Bin Operation on VCX looses double ampersand in Property Values #91 (LScheffler) | +| 2022/11/09 | LScheffler | Docu | **Enhancement**: Documentation for git on handling line endings | +| 2022/06/13 | LScheffler | [v1.19.76](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.76) | **Bug Fix**: On operation per folder, change of folder must change configuration (JoergSchneider) | +| 2022/06/08 | LScheffler | [v1.19.75](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.75) | **Bug Fix**: Multiple text2bin and bin2text conversion on MNX causes space grow (JoergSchneider) | +| | | | **Enhancement**: Typo in German (JoergSchneider) | +| 2022/05/13 | bjornhoeksel | [v1.19.74](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.74) | **Bug Fix**: Fix menu bars with shortcuts keys like KEY F6, "F6"; are lost. (DanLauer) | +| 2022/04/08 | LScheffler | [v1.19.73](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.73) | **Bug Fix**: Problem converting trailing spaces on line end in memo (again) (bjornhoeksel) | +| 2022/04/07 | LScheffler | [v1.19.72](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.72) | **Bug Fix**: Problem converting trailing spaces on line end in memo (bjornhoeksel) | +| | | | **Bug Fix**: Problem converting intentionally trailing spaces to VarChar/VarBinary (LScheffler) | +| | | | **Bug Fix**: Bug Fix: Problem on using "DBF_Conversion_Support" on table configuration file (LScheffler) | +| | | | **Enhancement**: Documentation in config file enhanced | +| | | | **Enhancement**: Added parameter "?" to show interactive help ("interactive" still works) | +| 2022/03/30 | bjornhoeksel | [v1.19.71](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.71) | **Bug Fix**: Convert menu mn2 to mnx with skip for that contains a string with ; sign is missing part after that sign in mnx. (bjornhoeksel) | +| 2022/03/16 | LScheffler | [v1.19.70](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.70) | **Bug Fix**: Last bar in menu files are in some situations not converted correctly back in the mnx file. (bjornhoeksel) | +| | | | **Enhancement**: Buglist internal of FoxBin2Prg reordered | +| | | | **Enhancement**: Enhancement to documentation | +| 2022/02/25 | LScheffler | [v1.19.69](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.69) | **Bug Fix**: Missing class when building text file from corrupted VCX (bjornhoeksel) | +| 2022/02/23 | LScheffler | [v1.19.69](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.69) | **Bug Fix**: Recreating a class while an object with same name exists in VCX fails (bjornhoeksel) | +| | | | **Enhancement**: Template configuration files FOXBIN2PRG.DBF.TXT and FOXBIN2PRG.DBF.CFG.TXT in English | +| | | | **Enhancement**: Examples and template for config files enhanced | +| | | | **Enhancement**: Notice in contribution file to creating files above in English | +| | | | **Enhancement**: Started reworking double documentation | +| 2022/01/18 | LScheffler | [v1.19.68](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.68) | **Bug Fix**: Converting MN2 to MNX ignores the programmer-defined "Pad Name" found in "Prompt Options" screen (Jimrnelson) | +| | | | **Enhancement**: Minor links in readme.html | +| 2021/08/20 | LScheffler | [v1.19.67](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.67) | **Bug Fix**: Double classes in VCX (LScheffler) | +| | | | **Enhancement**: Templates and documentation for config files reworked | +| 2021/08/20 | LScheffler | [v1.19.66](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.66) | **Bug Fix**: Incorrect version showing for v1.19.65 (siara-cc) | +| | | | **Enhancement**: Incorrect links on documentation (siara-cc) | +| 2021/05/20 | LScheffler | [v1.19.65](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.65) | **Bug Fix**: Parameters -cCt not working from command line. (LScheffler) | +| 2021/04/22 | LScheffler | [v1.19.64](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.64) | **Bug Fix**: onverting MN2 to MNX ignores the programmer-defined bar # found in "Prompt Options" screen. (Jimrnelson) | +| | | | **Bug Fix**: Converting MN2 to MNX ignores the programmer-defined Pad Name found in "Prompt Options" screen. (LScheffler) | +| 2021/04/12 | LScheffler | [v1.19.63](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.63) | **Bug Fix**: Tables without indexes cause an error that the __Table ## is not marked as belonging to the ## database.__ (jstagerGH) | +| 2021/03/30 | LScheffler | [v1.19.62](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.62) | **Enhancement**: Debug logging, level of config file. | +| | | | **Bug Fix**: *_Conversion_Support options not read from config file. | +| | | | **Bug Fix**: Extension shift options not read from config file. (Sergej s-s-a) | +| | | | **Bug Fix**: RedirectFilePerDBCToMain option was defined wrong in configuration example | +| 2021/03/23 | LScheffler | [v1.19.61](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.61) | **Bug Fix**: Missnamed property. | +| 2021/03/22 | LScheffler | [v1.19.60](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.60) | **Enhancement**: FoxBin2Prg template and debug output: Completed and ordered, order synched, grouped and groups named at template. | +| | | | **Enhancement**: Option BackgroundImage was read, but not in template | +| | | | **Enhancement**: -cC options learned to create default FoxBin2Prg._cfg file | +| | | | **Enhancement**: -t Option learned to create default \._cfg file, if table is open. | +| | | | **Enhancement**: Handling of additional non structural index per DBF in Bin2Text and Text2Bin. See [Config per DBF](./FoxBin2Prg_Internals.md#configuration-per-table). | +| | | | **Enhancement**: Debug-Logging for Index | +| | | | **Bug Fix**: DBF_Conversion_Condition was read, but never used | +| | | | **Bug Fix**: DBF_Conversion_Order sets an index that later would be stored as structural index | +| | | | **Bug Fix**: config options with text value fail, if line comment is set | +| | | | **Bug Fix**: issue #53 Variable lnFileCount in get_filesfromdirectory (msueping) | +| 2021/03/09 | LScheffler | v1.19.59 | **Feature**: Logging of settings as settings object passed to execute method (Option debug > 0) | +| | | | **Feature**: Added option to create config file template based on current values of a directory | +| | | | **Bug Fix**: RedirectClassType = 2, Path was set wrong in special config | +| | | | **Bug Fix**: RedirectClassType = 2, UseClassPerFile = 2 failed | +| | | | **Doc**: Improved, Better description of ClassPerFileCheck, tcOutputFolder. | +| 2021/03/04 | Doug Hennig | [v1.19.58](https://github.com/fdbozzo/foxbin2prg/releases/tag/v1.19.58) | **Feature**: Added support for writing to a different folder than the source code using a new tcOutputFolder parameter | +| | | | **Feature**: Added a configuration option: HomeDir, which determines if HomeDir is saved in PJ2 files (the default is 1 for Yes) | +| 2021/03/05 | LScheffler | v1.19.57 | **Bug Fix**: RedirectClassType = 2 mixed up PATH | +| | | | **Doc**: Improved | +| 2021/03/04 | LScheffler | v1.19.56 | **Feature**: New value 2 for option RedirectClassType = 2, just process the single class for input in form file[.baseclass].class.vc2 | +| | | | **Bug Fix**:
Inputfile in form classlib.class.vc2 AND RedirectClassType = 1 and Execute param tcRecompile = 1
generates classlib.class.vcx and tries to recompile classlib.vcx
fails silent if classlib.vcx exists (compiles wrong lib), with message if not. | +| 2021/03/03 | LScheffler | v1.19.55 | **Doc**: Documentation from CodePlex integrated | +| | | | **Feature**: added option to create config file template | +| | | | **Doc**: Info screen-doc improved | +| | | | **Doc**: German translation improved | +| 2021/03/03 | LScheffler | v1.19.54 | **Bug Fix**: DBF_Conversion_Condition, problem with macro expansion | +| 2021/02/20 | LScheffler | | **Feature**: inserted option DBF_IncludeDeleted to allow including deleted records of DBF | +| 2021/02/19 | LScheffler | | **Feature**: inserted option DBF_BinChar_Base64 to allow processing of NoCPTrans fields in non base64 way | +| 2021/02/15 | LScheffler | | **Feature**: inserted option ItemPerDBCCheck to split DBC processing from vcx / scx | +| | | | **Feature**: inserted option RedirectFilePerDBCToMain to split DBC processing from vcx / scx | +| 2021/02/14 | LScheffler | | **Feature**: inserted option UseFilesPerDBC to split DBC processing from vcx / scx | +| 2021/02/23 | LScheffler | v1.19.53 | **Doc**: For Info screen and config-template, usage of MEM and FRX added | +| | | | **Bug Fix**: conversion prg -> vcx, files per class could create one class multiple times | +| 2021/02/15 | | | **Bug Fix**: processing directory, flush log file after loop instead of file | +| 2021/02/14 | LScheffler | v1.19.52 | **Bug Fix**: conversion prg -> dbf, fields with .NULL. value are incorectly recreated | +| | | | **Doc**: minor translations | +| | | | **Bug Fix**: conversion dbf -> prg, error if only test mode (toFoxBin2Prg.l_ProcessFiles is false) | +| 2020/04/01 | FDBOZZO | [v1.19.51.6](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.51.6) | Add some fixes to existent ut_tests | +| | | | **Bug Fix**: At least one of the class-per-file files do not have CR_LF at the end, then when assembling the class or form some structures (ENDIF/ENDCASE/ENDDEF/etc) can be joined with the next, making them erroneous (Ryan Harris) | +| | | | **Bug Fix**: Incompatible with VFPA (#36) (Eric Selje) | +| | | | **Bug Fix**: DBF conversion fails if some field name is a reserved keyword like UNIQUE (DAJU78) | +| | | | **Bug Fix**: VCX/SCX properties named "note" are not properly converted (Tracy Pearson) | +| | DH | | **Bug Fix**: Manejo de AutoIncrement incompatible con Project Explorer (Dan Lauer) [Fixed by Doug Hennig] | +| 2019/02/24 | FDBOZZO | [v1.19.51.5](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.51.5) | **Feature**: Issue#32 Make FoxBin2Prg more COM friendly when using ESC key (Tracy Pearson) | +| 2018/07/31 | FDBOZZO | [v1.19.51.4](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.51.4) | **Bug Fix**: Issue#26 The alphabetic ordering of ADD OBJECT's objects can cause that some objects be created in erroneous order, causing unexpected behavior (Jochen Kauz) | +| 2018/07/09 | FDBOZZO | [v1.19.51.3](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.51.3) | **Bug Fix**: Error 1098, Cannot find ... [ENDT] that closes ... [TEXT] Issue#26 when there is a field named TEXT as first line-word (KIRIDES) | +| 2018/06/20 | FDBOZZO | [v1.19.51.2](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.51.2) | **Bug Fix**: When converting to text a DBF that belongs to a DBC with events disabled, conversion fails (Jairo Argüelles / Juan C. Perdomo) | +| 2018/05/12 | FDBOZZO | [v1.19.51.1](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.51.1) | **Bug Fix**: If capitalization is used on a DBC view info, then related information is not exported correctly or entirely, so could be lost (SkySurfer1) | +| 2018/03/26 | FDBOZZO | [v1.19.51](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.51) | Add LOG info about config.fpw used and CodePage | +| | | | Enhanced HELP dialog info when running FoxBin2Prg with double-click | +| | | | **Feature**: FKY file structure support (MACRO file exporting only to text fk2) | +| | | | **Feature**: MEM file structure support (MEMORY file exporting only to text me2) | +| | | | **Feature**: Added automatic default language recognition for the supported ones (FR,DE,ES,EN) | +| 2018/03/15 | FDBOZZO | [v1.19.50.3](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.50.3) | **Bug Fix**: When adding some non-VFP text files like html,css,etc, in the text section of the project, FoxBin2Prg does not keep this selection when regenerating the PJX, leaving them in the files section (Darko Kezic) | +| 2018/03/13 | FDBOZZO | [v1.19.50.2](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.50.2) | **Bug Fix**: Regenerating pjm,"*" when CFG's extension:pj2=pjm does not regenerate all pjx included files (Darko Kezic) | +| 2018/03/12 | FDBOZZO | [v1.19.50.1](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.50.1) | **Bug Fix**: When using the CFG configuration "extension: pj2=pjm" treat the pjm as pj2 and not as SourceSafe-compatible pjm (Darko Kezic) | +| 2018/03/06 | FDBOZZO | [v1.19.50](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.50) | Added a new CFG "BodyDevInfo" switch to control the DevInfo body data of PJX. It is disabled by default because DevInfo normally have compiled data that can be regenerated and causes many differences on source control tools | +| | | | New PRG_Compat_Level CFG value to make generated SC2/VC2 code more PRG compatible | +| | | | **Bug Fix**: PJX homedir related fields do not always are sincronized | +| | | | Workaround to export DBF metadata without the security part of the DBC blocking it, when DBCEvents are enabled. | +| 2018/02/03 | FDBOZZO | [v1.19.49.8](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.49.8) | **Bug Fix**: When converting a VCX corrupted with duplicated objects to text, "The specified key already exists" error is thrown (Kirides) | +| 2018/01/11 | FDBOZZO | [v1.19.49.7](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.49.7) | **Bug Fix**: When converting a DBF an error is thrown if there is a field called X or I (Francisco Prieto) | +| 2018/01/04 | FDBOZZO | [v1.19.49.6](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.49.6) | **BugFix vcx/scx**: FoxBin2Prg should ignore the records that VFP Designer ignores (Doug Hennig / https://github.com/fdbozzo/foxbin2prg/issues/15) | +| | | | **BugFix vcx/scx**: FoxBin2Prg encodes MemberData property with CR/LF, which can cause "property '_memberdata' value is too long" error (Doug Hennig / https://github.com/fdbozzo/foxbin2prg/issues/16) | +| 2017/12/20 | FDBOZZO | [v1.19.49.5](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.49.5) | **BugFix DBF**: When FoxBin2PRG converts a DB2 file to a DBF file and imports the data (using DBF_Conversion_Support = 8), tabs at the start of lines in memo fields are lost (Doug Hennig / https://github.com/fdbozzo/foxbin2prg/issues/13) | +| 2017/12/04 | FDBOZZO | [v1.19.49.4](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.49.4) | **Bug Fix VCX**: When using ClassPerFile in API Mode and importing single classes, sometimes their names get unquoted, throwing errors / Reported by Lutz Scheffler (https://github.com/fdbozzo/foxbin2prg/issues/11) | +| 2017/12/03 | FDBOZZO | [v1.19.49.3](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.49.3) | **Bug Fix**: "Double" field types are explicitly defined with 0 decimals when no decimals are defined (Jerry Stager) | +| 2017/12/03 | FDBOZZO | [v1.19.49.2](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.49.2) | **Bug Fix**: ClassPerFile export didn't work correctly starting from v1.19.49 / Reported by Lutz Scheffler (https://github.com/fdbozzo/foxbin2prg/issues/9) | +| 2017/06/25 | FDBOZZO | [v1.19.49.1](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.49.1) | **Bug Fix**: DEVINFO field is only used when doing PJX conversions. On other files throw errors | +| 2017/04/26 | FDBOZZO | [v1.19.49](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.49) | Replace Scripting.FileSystemObject MoveFile with Win32API equivalent | +| | | | Added support for using temporal CFG file for low-level API operations | +| | | | **Bug Fix**: Single-class export with "classlib.vcx::classname" syntax did not export (Lutz Scheffler) | +| | | | Added single-class import support ("library.vcx::classname::import") | +| | | | Added new single-class export syntax ("library.vcx::classname::export") | +| | | | Both single-class syntaxes doesn't require a CFG configuration | +| | | | **Bug Fix**: Partially corrupted frx/lbx info generated when using "&&" string inside field expressions (Alejandro A Sosa) | +| | | | sys(2023) secure temp: When sys(2023) points to "program files", then getenv("temp") is used | +| | | | Add more options to config.fpw to minimize interference from existent configs | +| | | | **Feature**: Save the contents of User field (Doug Hennig). Note: DevInfo is already supported | +| 2016/07/24 | FDBOZZO | [v1.19.48](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.48) | **Bug Fix**: ControlSource of OLE Objects containing quotes are not well regenerated from FR2 (Nathan Brown) | +| | FDBOZZO | Preview-5 | **Bug Fix**: When a binary is regenerated from a PJ2 file containing files with parenthesis and spaces, the error "Error 36, Command contains unrecognized phrase/keyword" occurs (Nathan Brown) | +| | FDBOZZO | Preview-4 | **Defect Fix**: When fixing the multi-line memo bug, introduced a new defect on which a single-line memo is not decoded correctly (Nathan Brown) | +| | FDBOZZO | Preview-3 | **Bug Fix**: Bug Fix db2: When reading a miltuline-memo with old db2 data, an index out of range error occurs | +| | FDBOZZO || **Bug Fix** db2: When using ExcludeDBFAutoincNextval: 1 setting in FoxBin2Prg.cfg and at the same time the data import with an AutoInc field, then error "Error 2088, Field is read-only" occurs (Nathan Brown) | +|| FDBOZZO | Preview-2 | **Bug Fix**: DBF conversion restrictions are not always respected when using particular CFGs for DBFs (Nathan Brown) | +|| AndyGK63 | Preview-1 | **Bug Fix**: Error message 'variable tcOutputFile not found' (german version) (Andy Kasper) | +|| AndyGK63 || **Bug Fix**: Menu location 'Before' always changed to 'after' when convert (Andy Kasper) | +| 2016/06/09 | FDBOZZO | [v1.19.47](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.47) | **Bug Fix**: Added multi-line support for memo data when importing/exporting | +|| FDBOZZO || **Feature**: Added support for appending data from DB2 to DBF with the new value DBFConversionSupport=8. All datatypes except General. (Walter Nicholls) | +|| DougHennig || **Bug Fix**: Added variable declaration in vbs scripy (Doug Hennig) | +|| DougHennig || **Bug Fix**: Fixed incorrectly named variable in vbs script (Doug Hennig) | +|| DougHennig || **Bug Fix**: Added missing assignment in vbs script (Doug Hennig) | +|| DougHennig || **Enhancement**: Put double quotes around path in case in contains single quote in vbs scripts (Doug Hennig) | +|| FDBOZZO || **Bug Fix**: Added "+16" to Debug flags to maintain internal defaults to not generate timestamps on xx2 files in vbs scripts | +|| FDBOZZO || **Bug Fix**: When a filename "\*" is specified with a type "\*", an automatic regeneration of all binary files is made from text files (Alejandro Sosa) | +| 2016/02/07 | FDBOZZO | [v1.19.46](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.46) | **Bug Fix**: set\_UserValue() method causes error when trying to get information about another error and the VFP binary table can not be opened (ie, because corrupted memo) | +|||| **Feature**: Added internal support for querying directory cfg information, with a new optional parameter, for API methods that require it (ie: get\_Ext2FromExt, hasSupport\*) | +|||| **Feature**: Convert FUNCTION to PROCEDURE for maintaining compatibility with the way that VFP save methods on binaries | +|||| **New fb2p\_diff.exe**: Allow a quick Diff of VFP9 binaries, for those that don't need converting to text manually | +|||| **Bug Fix**: When processing a directory or a project with all the files, sometimes an "Alias already in use" error may occur (Dave Crozier) | +|||| **Bug Fix mnx**: When menu options contains '&&' in their texts, menu binary is corrupted when regenerated (Walter Nichols) | +|||| **Bug Fix fb2p\_diff.exe**: When calling fb2p\_diff.exe from a directory out of FoxBin2Prg dir, an error is thrown because FoxBin2Prg is not found (Mike Potjer) | +|||| **Feature**: In some environments and under some conditions WSscript.Shell object can cause problems, so now it's replaced with Win32 native functions (Aurélien Dellieux) | +|||| **Bug Fix frx/lbx**: Ordering of report objects changes the ZOrder of near objects that can overlap, which can cause bad visualization and printing (Ryan Harris) | +|||| **Bug Fix frx/lbx**: When regenerating reports or labels with multiline texts center or right aligned, alignment is not completely right (Ryan Harris) | +|||| **Bug Fix frx/lbx**: When grouping objects in design mode, generating text and regenerating binary cause the lost of the grouping (does not affect data) (Lutz Scheffler) | +|| RALFXWAGNER || **Bug Fix Pjx**: SPR and MPR files are not correctly identified in the PJX Project info (Ralf Wagner) | +|||| **Bug Fix Pj2**: An error is thrown when regenerating a PJX from a PJ2 when some file have parenthesis in it's name (EddieC) | +|||| **Feature (dbf)**: New ExcludeDBFAutoincNextval parameter for minimizing DB2 differences (edyshor) | +|||| **Bug Fix**: When processing a file on root dir, a 2062 error occurs (Aurélien Dellieux) | +| 2015/06/21 | FDBOZZO | [v1.19.45](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.45) | **Bug Fix mnx**: When a menu that uses single quotes or an expression in the option's MESSAGE is exported to text, when regenerating the menu from the text there are parts of the message that are cut off (Mike Potjer) | +|||| **Bug Fix**: When processing multiple PJ2 files, an error "variable llError not defined" can occur (Lutz Scheffler) | +|||| **Bug Fix pjx/pj2**: PJX/PJ2 projects that references files from other disk units throw errors for those files when processing with "\*" or "\*-" options (Matt Slay) | +|||| **Bug Fix**: When processing multiple-files, sometimes encountered errores are not reported | +|||| **Feature (API-PJX)**: New loadModule() method that returns the internal FoxBin2Prg Project object when the full name of an existent project file is specified | +|||| **Feature (API-PJX)**: New getFilesNotFound() method for the FoxBin2Prg's Project object, that returns the count of files referenced in the project that are not found on disk and an array with all the existence state of each file | +| 2015/05/31 | FDBOZZO | [v1.19.44](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.44) | **Bug Fix**: In certain PCs FoxBin2Prg does not return error codes when called from an external program, so another terminating method is implemented (Ralf Wagner) | +|||| **Feature**: Allow exporting DBF data when using DBF\_Conversion\_Support:1 and optional individual CFG files | +|||| **Bug Fix**: A previous bug fix on cascading errors management caused reseting the error status, making that sometimes errors don't get reported | +| 2015/05/10 | FDBOZZO | [v1.19.43](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.43) | **Feature**: Added new CFG setting "RemoveZOrderSetFromProps" for removing ZOrderSet property when you want to maintain the original class ZOrder always, avoid unnecesary differences and fix some visual on top/on bottom control problems (Ryan Harris) | +|||| **Feature**: Do not allow progressbar window become the default output window of ? command (Lutz Scheffler) | +|||| **Bug Fix**: Fixed VFP9 SP1 validation message | +|||| **Bug Fix**: FoxBin2Prg PRG2BIN does not return error codes (Ralf Wagner) | +|||| **Bug Fix**: FoxBin2Prg sometimes generates an OLE error when executed for second time on a file with problems (Fidel Charny) | +|||| Some enhancements in security of DLL declarations and On Escape management | +|||| **Defect Fix**: Accesing DataSessionID property throws an error because of the change of internal classes between custom and session | +|||| **Bug Fix**: When a form have AutoCenter=.T., there are times that when regenerating the binary and executing it does not shows centered (Esteban Herrero) | +| 2015/04/16 | FDBOZZO | [v1.19.42](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.42) | **Feature**: Added VFP 9 SP1 runtime validation | +|||| **Bug Fix**: Broken SourceSafe compatibility because an error is thrown when querying for file support (Tuvia Vinitsky) | +|||| **Bug Fix scx/vcx**: Process only one TEXT/ENDTEXT nesting level because TEXT/ENDTEXT can't be nested (Lutz Scheffler) | +|||| **Feature**: Make some error descriptions more informative and precise (Lutz Scheffler) | +|||| **Feature (API)**: Allow specifying inputFile with relative path (Lutz Scheffler) | +|||| **Bug Fix scx**: Metadata of Dataenvironment not properly generated when Dataenvironment is renamed | +|||| **Bug Fix**: Added PJX/PJ2 generation when specifying "file.pjx", "\*" (Lutz Scheffler) | +|||| Some enhancements in german translations (Lutz Scheffler) | +|||| **Feature**: Added multiprocessing of projects (\*.pjx, \*.pj2) when specifying "file.pjx", "\*" (Lutz Scheffler) | +|||| Change FoxBin2Prg base class from custom to session (Lutz Scheffler) | +|||| **Feature**: Allow processing all project files without converting the PJX/2, with "\*-" (Lutz Scheffler) | +|||| **Bug Fix pjx/pj2**: If end of line (CR+LF) is used on pjx's "Build" properties data, generated pj2 is malformed | +|||| **Feature**: Default foxbin2prg.cfg configuration file renamed to foxbin2prg.cfg.txt to no overwrite user cfg (Lutz Scheffler) | +|||| **Feature**: Added DOS errOut output support and implemented in writeErrorLog when logging errors | +|||| **Feature**: Added full support for \*? file masks for multi-processing files of the same extension | +|||| **Feature (API)**: Added new parameter to allow alternative main CFG (Lutz Scheffler) | +|||| **Feature (API)**: Added new get\_Processed() method for obtaining information about processed files (Lutz Scheffler) | +|||| **Feature**: Added new file processing output to DOS stdOut (Lutz Scheffler) | +|||| **Bug Fix**: Fixed processing cancelation with Esc key | +|||| **Feature**: Sort table/view fields alphabetically to facilitate diffing and merging, while maintaining a list with the original field order for correct DBC regeneration (Ryan Harris) | +|||| **Feature**: Apply ClassPerFile to DBC connections, tables, views and SPs (Ryan Harris) | +|||| **Bug Fix mnx**: Empty Pad name is not kept when regenerating a menu defined with and empty Pad name (Lutz Scheffler) | +|||| **Feature (API)**: New property "lProcessFiles" that allow setting to .F. when using foxbin2prg as object to get Processing file info with getProcessed method without actual processing | +|||| **Bug Fix frx/lbx**: Trimmed some extra CR,LF,TAB from FR2/LB2 tag that where included in previous versions (Ryan Harris) | +|||| **Bug Fix scx/vcx/dbc**: Delete ERR files when processing with UseClassPerFile switch (Ryan Harris) | +|||| **Feature**: Implemented CFG inheritance between directories | +|||| **Feature (API)**: New method get\_DirSettings() that returns the CFG settings object for the indicated directory (Lutz Scheffler) | +|||| **Feature**: Allow generation of text for a single class of a librery when using ClassPerFile (Lutz Scheffler) | +|||| **Feature (API)**: Renowned method names to English to facilitate international understanding (Mike Potjer) | +| 2015/01/18 | FDBOZZO | [v1.19.41](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.41) | **Bug Fix db2**: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes. | +|||| **Bug Fix vcx/scx**: Erroneous detection of PROCEDURE/ENDPROC structures when used as parameters of LPARAMETERS and start in new line (Ryan Harris) | +| 2015/01/11 | FDBOZZO | [v1.19.40](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.40) | **Enhancement frx/lbx**: Clean ASCII 0 from expression field for Dataenvironment, Cursors and Relations | +|||| **Bug fix frx/lbx**: When using Dataenvironment with more than one cursor, remaining cursors are lost | +|||| **Feature**: Added new configuration "ShowProgressbar:2" to activate the progressbar only when a directory is selected and deactivate it for individual files (Jim Nelson) | +|||| **Bug fix dbf**: Error 12, variable "tcOutputFile" is not found when DBFConversionSupport=4 and output file is the same as existent one (Mike Potjer) | +|||| **Feature scx/vcx/sc2/vc2**: Added new code checking to find duplicated object names for the same class and container to notify those cases of file corruption | +|||| **Bug Fix**: "Error 2183: Operation requires that SET MULTILOCKS is set to ON" in some DBF convertions | +| 2015/01/01 | FDBOZZO | [v1.19.39](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.39) | **Bug fix vbs**: vbs scripts does not show FoxBin2Prg process errors correctly | +|||| When using BIN2PRG or PRG2BIN keywords with FoxBin2Prg command line, allow processing one file (Mike Potjer) | +|||| Add keyword SHOWMSG and use INTERACTIVE keyword for an interactive dialog (Mike Potjer) | +|||| When processing a directory from commandline with foxbin2prg alone and the INTERACTIVE keyword, show a dialog to ask what to process (Mike Potjer) | +|||| **Bug fix dc2**: DisplayClass and DisplayClassLibrary values got the wrong value "Default" and not the corresponding own values (Christopher Kurth/Ryan Harris) | +|||| Deleted recompilation scripts for language, because it is an automatic selection now | +| 2014/12/13 | FDBOZZO | [v1.19.38](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.38) | **Feature**: Now is possible to use FoxBin2Prg for batch conversions directly from the File Explorer (see README.txt), without the need of vbs scripts, that sometimes can make trouble or are not permitted by IT department (Francisco Prieto) | +|||| **Feature**: Enhanced Multilanguage support by 3 ways: 1-Automatic DEFAULT (depending on VERSION(3)); 2-By parameter, using the new method ChangeLanguage(); 3-Using the new setting "Language" in foxbin2prg.cfg | +|||| **Feature**: Detection of duplicated methods on vc2/sc2 files to notify those cases of vcx/scx file corruption (Ãlvaro Castrillón) | +| 2014/11/30 | FDBOZZO | [v1.19.37](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.37) | **Feature**: Added Class per file support, configurable with UseClassPerFile:1 (Ryan Harris/Lutz Scheffler/Ãlvaro Castrillón) | +|||| **Feature**: foxbin2prg.cfg configuration options can now have "&&" comments at the right of the values (edyshor) | +|||| **Feature**: Added support for the new "ClearDBFLastUpdate" setting in FoxBin2Prg.cfg, activated by default to minimize DB2 differences (edyshor) | +|||| **Feature**: Enhanced progressbar indication, with more detailed information | +|||| **Feature**: vcx/scx broken properties autofix because an erroneous manual user edition on the vcx/scx | +|||| **Feature**: vcx/scx autofix por Hidden and Protected duplicated properties (some type of corruption or bad manual user edit) | +|||| **Feature**: Added a validation for FRX to notify the user if it is not a VFP 9 REPORT | +|||| **Feature**: Batch convertions can now be interrupted with the Esc key | +|||| **Bug Fix dbf**: "Error 1903, String is too long to fit" when converting long DBF files with "DBFConversionSupport:4" to text (edyshor) | +|||| **Bug Fix vcx/scx**: Sometimes some properties get the description of a similarly named property | +|||| **Bug Fix vcx/scx**: Hidden and Protected properties are not ordered alphabetically | +|||| Various Code Optimizations for enhancing processing performance | +| 2014/10/08 | FDBOZZO | [v1.19.36](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.36) | **Bug fix mnx**: When generating mn2 text view, menu all pad IDs are generated as \_000000000 (bug introduced in v1.19.35) | +|||| **Enhancement**: New "VFP9\_FoxBin2Prg.vbs" script for "SendTo" menu, that replaces FoxBin2Prg.exe in this menu and adds a process status message | +| 2014/10/05 | FDBOZZO | [v1.19.35](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.35) | **Enhancement**: Always generate the same Timestamp and UniqueID for binaries, for minimizing differences when regenerating them (Marcio Gomez G.) | +| 2014/09/19 | FDBOZZO | [v1.19.34](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.34) | **Bug Fix**: If run from VFP Command Window and there is a file in use, an error is thrown because can't capitalize source file (Jim Nelson) | +| 2014/08/29 | FDBOZZO | [v1.19.33](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.33) | **Bug Fix mnx**: Menu doesn't generate well when there is a Bar of #BAR type without a name (Peter Hipp) | +|||| **Bug Fix mnx**: If a menu option have an associated Procedure with 1 line of code, the Procedure is converted to Command (Peter Hipp) | +| 2014/08/26 | FDBOZZO | [v1.19.32](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.32) | If exists a property called "text" it is confused with a text/endtext structure (Peter Hipp) | +| 2014/08/22 | FDBOZZO | [v1.19.31](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.31) | Trash cleanup code on binary methods, normally added by tools like ReFox and others | +|||| Added EXE version number when generating a debug LOG file | +|||| Enhanced recognition of #IF..#ENDIF instructions when there are spaces between # symbol and the command name | +|||| Added capitalization normalization for input files | +|||| Added new c\_Language property for querying actual compiled language (EN,ES,DE,etc) | +| 2014/08/10 | FDBOZZO | [v1.19.30](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.30) | **Bug Fix vcx/scx**: Bad EndText (from Text/EndText block) detection when the previous line ends with "," or ";" (Jim Nelson) | +|||| Bug Fix vcx/scx: Some methods are not alphabetically sorted in some inheritance situations (Ryan Harris) | +|||| Added FoxUnit test cases to bug fix confirmation of both | +| 2014/08/01 | FDBOZZO | [v1.19.29](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.29) | **Bug Fix vcx/scx**: Bad Text (from Text/EndText block) detection when there is a line that begins with a "text" field and previous line end with "," in regards of ";" (M\_N\_M) | +|||| Optimizations and refactoring | +| 2014/07/26 | FDBOZZO | [v1.19.28](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.28) | **Feature**: Added new options in foxbin2prg.cfg (DBF_Conversion_Included, DBF_Conversion_Excluded) and in filename.dbf.cfg (DBF\_Conversion\_Order, DBF\_Conversion\_Condition) for exporting DBFs data to text when DBF_Conversion_Support is 4 (Edyshor) | +| 2014/07/18 | DH/FDBOZZO | [v1.19.27](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.27) | **Feature**: Added support for exporting DBF data for DIFF when using DBF\_Conversion\_Support: 4 in foxbin2prg.cfg (It's intended just for DIFF small DBFs, as config ones, not for true Data export. Binary fields are not exported and there is not an Import Data feature) (Doug Hennig) | +| 2014/07/06 | FDBOZZO | [v1.19.26](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.26) | **Feature**: Take out asterisks between "ENDPROC" and "PROCEDURE", analyzed in that exact order, to regenerate binary without errors. (Daniel Sánchez) | +|||| **Feature**: Add the l\_DropNullCharsFromCode configuration option, enabled by default, to allow taking out NULLs from source code. (Matt Slay) | +|||| **Bug Fix cfg**: ExtraBackupLevel does not work when using multi-configuration | +| 2014/06/25 | FDBOZZO | [v1.19.25](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.25) | When processing one or multiple files with vbs scripts, show a message indicating the status of the generation, and show the error log if any error occurs (Pedro Gutiérrez M.) | +|||| Code cleaning and normalization | +|||| ClearUniqueID is True by default for tx2 files | +|||| OptimizeByFilestamp is False by default, to avoid possible automatic modifications made by VFP when opening a form or a classlib | +|||| New AllowMultiConfig switch enabled by default, that allow a foxbin2prg.CFG file per directory, overriding main CFG (Mario Peschke) | +| 2014/06/15 | FDBOZZO | [v1.19.24](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.24) | **Bug Fix scx/vcx**: The absence of AGAIN keyword on some USE commands throws "tabla in use" error if used the PRG version from VFP command window (Matt Slay) | +|||| **Bug Fix scx/vcx**: A table field called "text" that begins the line can be confused with the TEXT/ENDTEXT structure and can wrong recognize the rest of the code (Mario Peschke) | +|||| **Bug Fix scx/vcx**: GetTimeStamp internal method throwse an error when day or month have just 1 digit (happen from v1.19.23) | +|||| New "run\_aftercreate\_db2" event that permits execution of an external program when using FoxBin2Prg as object (for example, to export table data) | +|||| New FoxUnit Unit Tests to verify new functionality and "text" bug fix | +|||| Added foxbin2prg\_de.h file translation of most messages to German (Mario Peschke) | +| 2014/06/07 | FDBOZZO | [v1.19.23](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.23) | Timestamps and UniqueIds values are back on binaries, and they are just cleaned up on tx2 files if NoTimestamps and ClearUniqueID flags are set. This minimizes some differences on the binary side | +|||| Added sccdata default value when regenerating PJX binary (which is automatically completed on the PJX when opened anyway) | +|||| Fixed timestamp evaluation for "OptimizeByFilestamp" optimization that evaluates just .??X files, and now .??T (memo) filestamps are evaluated too | +|||| Fixed missing BorderColor property on props\_optiongroup.txt file | +|||| Fixed missing Stretch property on props\_image.txt file (Kenny Vermassen) | +|||| Fixed missing Enabled property on props\_image.txt file | +| 2014/05/17 | FDBOZZO | [v1.19.22](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.22) | **Bug Fix vcx/scx**: Picture property of a form class does not show the image. Does not happen with control pictures (Fidel Charny) | +|||| **Bug Fix scx/vcx**: Incorrect detection of PROCEDURE/ENDPROC/TEXT/ENDTEXT that can cause lost of some methods in some circunstantes (Andres Mendoza) | +|||| **Bug Fix scx/vcx**: Some options from the optiongroup control loose there width when subclassed from a class with autosize=.T. (Miguel Duran) | +|||| Added evaluation and generation of properties by classtype, when applicable | +|||| Added support of property evaluation from external file (props\_\*.txt) | +|||| Added enhanced Unit Tests of bitmap comparisons of screen captures before/after (the original is compared with the regenerated of the regenerated binary, for more accuracy) | +|||| A lot of garbage collect optimizations all over the code | +|||| Added Unit Testing of configuration by defaults, by file and by parameters | +|||| Added Unit Testing for checking the generation of classes, forms, reports and menus | +|||| Added new switch OptimizeByFilestamp (active by default) for making possible deactivation of this regeneration optimization by file timestamp, in case someone wants to force regeneration allways | +| 2014/05/01 | FDBOZZO | [v1.19.21](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.21) | Added support to convert to text or binary all files of a project from pjx or pj2 (Matt Slay) | +|||| Added optimization on the search of the capitalization program when processing projects | +|||| Added keyword AGAIN on table openings, for enhancing concurrence (Jim Nelson) | +|||| Added optimization based on file timestamps for regenerating only newer binaries and tx2 files (Matt Slay) | +|||| Added English translation in foxbin2prg\_en.h for the LOG message of new timestamp optimization | +|||| section simplification: Methods and arrays doesn't require preceding \* and ^ symbols anymore. | +| 2014/04/17 | FDBOZZO | [v1.19.20](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.20) | **New**: CDX filename in DB2 files have relative paths now. This help show less differences when regenerating DB2 files from different paths | +| 2014/04/02 | FDBOZZO | [v1.19.19](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.19) | **New**: DBF Hook run\_AfterCreateTable that let intercalate a personalized process between DBF creation and index creation when processing a DB2 file (example program in tests\demo\_hook\_dbf.prg included) (Fidel Charny) | +| 2014/03/25 | FDBOZZO | [v1.19.18](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.18) | **Bug Fix vcx/scx**: Image controls with stretched icons or images, get redimensioned to original size when regenerating binary (Arturo Ramos) | +|||| Bug Fix vcx/scx: Library level comments are not kept (Ryan Harris) | +| 2014/03/16 | FDBOZZO | [v1.19.17](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.17) | **Bug Fix frx/lbx**: Double-quoted expressiones make fx2/lb2 files corrupt (Ryan Harris) | +|||| **Bug Fix frx/lbx**: Multiline Comments are lost (Ryan Harris) | +|||| **frx/lbx tag2 field enhance**: when used for tooltips, real values are shown in regards of b64 normal encoding | +|||| **Bug Fix mnx**: Multiline Comments on Bars/Pads makes MN2 file corrupt (Ryan Harris) | +|||| **Bug Fix mnx**: Some procedures doesn't generate correctly (Ryan Harris) | +|||| English translation file foxbin2prg\_en.h syntax corrected (Ryan Harris) | +|||| **Bug Fix vcx/scx**: Lowercase saved Dataenvironment property causes Reserved2 value to be not calculated | +|||| **Bug Fix frx**: character on print condition on field makes fr2 file corrupt | +|||| **Bug Fix mnx**: Using double-quotes on prompt option fields makes mn2 file invalid (Ryan Harris) | +| 2014/03/10 | FDBOZZO | [v1.19.16](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.16) | **Bug Fix vcx/scx**: properties loose there hidden/protected visibility when no default value assigned (Ryan Harris) | +|||| **Bug Fix vcx/scx**: character value with length >255 in addobject property regenerates with tag included (Ryan Harris) | +|||| **Bug Fix vcx/scx**: When regenerating binari file with empty procedure makes FoxPro crash when trying to modify it on IDE | +|||| **Bug Fix scx/vcx**: Binary can be corrupted if the class have a multiline comment (Tested on: Ffc\\_frxcursor.vcx) | +|||| **Bug Fix**: If \_memberdata contains CR inside there values, they can be lost when regenerating tx2 text files | +|||| **Bug Fix**: Property values with spaces at the right loose this spaces | +|||| **Bug Fix**: When 2 or more methods share the same name (ej: met and met2) tx2 text file gets corrupted (Ryan Harris) | +| 2014/03/04 | FDBOZZO | [v1.19.15](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.15) | **Bug Fix**: OLE information cleared when a legacy TX2 is processed | +|||| Bug Fix: Default value of NoTimestamp = 0 ==> Now is 1, as should be | +|||| Bug Fix: DBFs backlink info cleared when DBC is recreated (Ryan Harris) | +|||| Feature: Lowercase capitalization in tx2 filename headers to minimize differences | +| 2014/03/01 | FDBOZZO | [v1.19.14](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.14) | Load of configuration is optimized (foxbin2prg.cfg) to read cfg only once for a massive processing of multiple conversions | +|||| .vbs scripts have been modified to respect the conversion support configuration defined in foxbin2prg.cfg configuration file | +|||| 2 new functions where added to enhance and encapsulate the external use of the evaluation of the conversion support (requires previous call to EvaluarConfiguracion()). Used on .vbs scripts | +|||| ExtraBackupLevels Regression: when no defined value, no backup is made | +|||| New default value ClearUniqueID = 1 in foxbin2prg.cfg for minimizing differences in the SCM | +| 2014/02/26 | FDBOZZO | [v1.19.13](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.13) | **Bug Fix**: If NoTimestamp setting of foxbin2prg.cfg is changed, opposite value is evaluated (Ryan Harris) | +|||| Encapsulated foxbin2prg.cfg file for enhancing FoxUnit automated testing | +|||| Internal change of property l\_UseTimestamps by l\_NoTimestamps | +|||| With ExtraBackupLevels setting you can now deactivate backups if setting to 0 (Ryan Harris proposal) | +|||| foxbin2prg.log file checking dropped, to activate the log file use foxbin2prg.cfg setting Debug=1 | +|||| In TX2 header files show the file without path, because genereting it from different places makes unnecesary differences in Diff (Ryan Harris proposal) | +|||| Created a lot of FoxUnit automated tests to check all settings of foxbin2prg.cfg configuration file | +| 2014/02/23 | FDBOZZO | [v1.19.12](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.12) | Generation of VC2/SC2 with new header metadata for centralizing uniqueid, timestamp and ZOrder and big reduce of differences in a diff/merge (enhancement proposed by Ryan Harris) | +|||| BINARY regeneration from the new metadata header (remains compatible with old VC2/SC2) | +|||| FoxUnit test cases fixed for the new functionality | +|||| Cleaning, Refactorization and optimization of Code | +|||| Presentation enhancement of VC2/SC2 file headers | +| 2014/02/13 | FDBOZZO | [v1.19.11](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.11) | WITH/ENDWITH optimizations with a conversion performance gain up to 16% more fast | +|||| Bug Fix: Just one level of #IF was contemplated, throwing an error if more levels are nested | +|||| Bug Fix: When regenerating the PJX, default home directory not always was correct | +|||| New FoxUnit automated test added to check bug fix of nested #IF | +| 2014/02/09 | FDBOZZO | [v1.19.10](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.10) | Added parametrization to enable configuration support for each kind of binary (0=None, 1=Only TX2, 2=TX2 and Binary) | +|||| Fixed default NoTimestamps setting | +|||| Adjusted some FoxUnit test cases | +|||| EXPERIMENTAL: Added new configuration parameter "ClearUniqueID" in foxbin2prg.cfg for Clearing UniqueID in binaries and text versions. Works well and apparently FoxProdoesn't make use of it, but more testing is required | +| 2014/02/08 | FDBOZZO | [v1.19.9](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.9) | New configuration items in foxbin2prg.cfg | +|||| Localization Bug: When recompiling with localization file foxbin2prg\_en.h renamed to foxbin2prg.h, syntax error occurs | +|||| Debug information of .LOG files enhanced | +|||| New parametrization for the number of backups, now just one .BAK by default (earlier was 10) | +|||| Enabled configuration file foxbin2prg.cfg by default | +|||| Change in default behavior: Now Timestamps are disabled by default. You can change this on foxbin2prg.cfg | +| 2014/02/03 | FDBOZZO | [v1.19.8](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.8-pública) | **Bug fix**: ActivePage error when executing a regenerated binary with a PageFrame / New FoxUnit test to test solution | +|||| Added cNoTimestamps='1' to batch conversion vbs scripts | +| 2014/02/02 | FDBOZZO | [v1.19.7](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.7-pública) | Added Ole encapsulation in just 1 place | +|||| Adjusted Blocksize of generated binaries | +|||| New cNoTimestamps parameter. If '1' is given, then no timestamps are generated (useful for diff/merge) | +| 2014/01/31 | FDBOZZO | [v1.19.6](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.6-pública) | Added SourceSafe support (SCCAPI) for Diff and Merge | +|||| SCX bug fix: Dataenvironment sometimes doesn't regenerates correctly | +|||| Functionality change: Automatic recompilation enabled by default again because some methods doesn't show on form edit. Can be deactivated passing '0' to cRecompile param | +| 2014/01/26 | FDBOZZO | [v1.19.5](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.5-pública) | Added Multilanguage support and Localization file for English. To use it rename the new file foxbin2prg\_en.h to foxbin2prg.h and recompile | +| 2014/01/24 | FDBOZZO | [v1.19.4](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.4-pública) | New "Recompile" parameter for recompiling from PJX directory (if provided) | +|||| **Functionality change**: Now FoxBin2Prg does not recompile bins for default, because it do on bin dir and that can throw compilation errors. Use new parameter if needed or recompile by your own | +|||| DBC: Added support for multiline "comment" property | +|||| VBS Batch scripts: Added progress bar | +| 2014/01/18 | FDBOZZO | [v1.19.3](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.3-pública) | Change on TXT timestamps to preserve empty values that can save a lot of differences when diff/merging. Previously empty timestamps get converted to datetime | +|||| Optimization on TXT generation of ZOrders | +| 2014/01/13 | FDBOZZO | [v1.19.2](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.2-pública) | Fix on PJX regeneration caused for something missing in the last change of "Autor" to "Author" | +| 2014/01/08 | FDBOZZO | [v1.19.1](https://github.com/fdbozzo/foxbin2prg/tree/v1.19.1-pública) | Small change on TX2 headers to drop the "Generated" timestamp that causes innecesary differences / Updated the EXE version with the correct one | +| 2014/01/08 | FDBOZZO | [v1.19](https://github.com/fdbozzo/foxbin2prg/tree/v1.19-pública) | Added new debug flag on .vbs scripts to show a "End process" message for batch processing | +|||| **Bug Fix**: scx/vcx Improper order of Reserved3 props cause event access to not fire | +|||| **Bug Fix**: dbf Improper index generated when the type is Candidate | +|||| Added support for converting SourceSafe PJM to FoxBin PJ2 | +|||| Added validation for Menus when converting from older versions, so user can convert it to VFP 9 format first | +|||| Change in MN2 property: "Autor" was changed to "Author". You can add the missing letter to MN2 or regenerate | +| 2014/01/07 | FDBOZZO | [v1.18.1](https://github.com/fdbozzo/foxbin2prg/tree/v1.18.1) | Added a vbs script (NormalizeFileNames.vbs) for FileNames normalizing in batch mode, and updated FileNameCaps.exe and the call on FoxBin2Prg | +| 2014/01/06 | FDBOZZO | [v1.18](https://github.com/fdbozzo/foxbin2prg/tree/v1.18-pública) | **bug fix**: mnx Generation of DO Procedure or Command when no Procedure or Command available to call when empty option is created (Fidel Charny) | +|||| Added support for DBFs earlier than VFP 9 for generating DB2 text, but DBF regeneration is in VFP 9 version! | +|||| dbf bug fix: DBFs linked to a DBC that use long field names throw error when regenerating DBFs | +|||| dbf bug fix: Some view info is lost when generating text from DBC | +| 2014/01/03 | FDBOZZO | [v1.17](https://github.com/fdbozzo/foxbin2prg/tree/v1.17-pública) | **bug fix**: mnx Location value is lost and some menus doesn't render properly (Fidel Charny) | +|||| Added 2 VB scripts (ConvertVFP9BIN2PRG.vbs and ConvertVFP9PRG2BIN.vbs) for batch converting of dirs and files if a shortcut is placed on "SendTo" user folder | +|||| Added new Unit Testing cases for menus | +| 2014/01/02 | FDBOZZO | [v1.16](https://github.com/fdbozzo/foxbin2prg/tree/v1.16-pública) | Added support for Menus (MNX) | +| 2013/12/18 | FDBOZZO | [v1.15](https://github.com/fdbozzo/foxbin2prg/tree/v1.15-pública) | Added support for DBF, DBC and CDX binaries | +| 2013/12/15 | FDBOZZO | [v1.14](https://github.com/fdbozzo/foxbin2prg/tree/v1.14-pública) | **bug fix**: scx autocenter property do nothing (Arturo Ramos) | +|||| scx bug fix: Last COMMENT record is lost (Fidel Charny) | +| 2013/12/08 | FDBOZZO | [v1.13](https://github.com/fdbozzo/foxbin2prg/tree/v1.13---pública) | **bug fix**: frx/lbx "Error 1924, TOREG is not an object" on some reports (Fidel Charny) | +| 2013/12/08 | FDBOZZO | [v1.12](https://github.com/fdbozzo/foxbin2prg/tree/v1.12---pública) | Added support for Reports (FRX) and Labels (LBX) | +| 2013/12/08 | FDBOZZO | [v1.11](https://github.com/fdbozzo/foxbin2prg/tree/v1.11---pública) | **bug fix**: vcx/scx \_memberdata value corrupted when the value is a long one (Edgar Kummers) | +| 2013/12/07 | FDBOZZO | [v1.10](https://github.com/fdbozzo/foxbin2prg/tree/v1.10---pública) | **bug fix**: vcx/scx when there are methods with the same name, there code is assigned to erroneous objects (Fidel Charny) | +| 2013/12/07 | FDBOZZO | [v1.9](https://github.com/fdbozzo/foxbin2prg/tree/v1.9---pública) | **bug fix**: vcx/scx last fix keep loosing some properties (Fidel Charny) | +| 2013/12/06 | FDBOZZO | [v1.8](https://github.com/fdbozzo/foxbin2prg/tree/v1.8---pública) | **bug fix**: vcx/scx last fix keep loosing some properties (Fidel Charny) | +|||| sort function encapsulated and reused on BIN and TXT generation for safety | +| 2013/12/03 | FDBOZZO | [v1.7](https://github.com/fdbozzo/foxbin2prg/tree/v1.7---pública) | **bug fix**: vcx/scx some properties get lost and picture clause is not displayed if "Name" is not the last property on memo (Fidel Charny) | +|||| Added verification of readOnly files and report this to Log file in debug mode | +| 2013/12/02 | FDBOZZO | [v1.6](https://github.com/fdbozzo/foxbin2prg/tree/v1.6---pública) | Complete refactoring of BIN and TXT generation | +|||| Changes of various algorithms | +|||| scx/vcx bug fix: Array properties didn't save (Fidel Charny) | +|||| Unit testing cases with FoxUnit | +| 2013/11/27 | FDBOZZO | [v1.5](https://github.com/fdbozzo/foxbin2prg/tree/v1.5---pública) | **Bug fix**: On some forms dataenvironment didn't regenerate appropiately (Luis Martínez) | +| 2013/11/27 | FDBOZZO | [v1.4](https://github.com/fdbozzo/foxbin2prg/tree/v1.4---pública) | Added mask support | +|||| Added support for extension configuration on file foxbin2prg.cfg, so one can use "vca" instead of "vc2", etc | +|||| Added support for a new parameter for Log generation | +| 2013/11/24 | FDBOZZO | [v1.3](https://github.com/fdbozzo/foxbin2prg/tree/v1.3---pública) | Bug fixes, code cleaning, refactoring | +| 2013/11/24 | FDBOZZO | [v1.2](https://github.com/fdbozzo/foxbin2prg/tree/v1.2---pública) | Bug fixes, code cleaning, refactoring | +| 2013/11/22 | FDBOZZO | [v1.1](https://github.com/fdbozzo/foxbin2prg/tree/v1.1---pública) | Bug fixes | +| 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/09/02_ \ No newline at end of file diff --git a/docs/FoxBin2Prg_Internals.md b/docs/FoxBin2Prg_Internals.md index 57f3b22..7f1deaa 100644 --- a/docs/FoxBin2Prg_Internals.md +++ b/docs/FoxBin2Prg_Internals.md @@ -30,11 +30,12 @@ As far as possible these are the original documents. Changes are added where fun - [Multi-config](#multi-config) - [File Capitalization](#file-capitalization) - [Conversion processes Logging](#conversion-processes-logging) - - [Storing paths for pjx](#storing-paths-for pjx) + - [Storing paths for pjx](#storing-paths-for-pjx) - [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-Form](create_file_per_form) - [Create File-Per-DBC](#create-file-per-dbc) - [Complementary options for the UseFilesPerDBC setting](#complementary-options-for-the-usefilesperdbc-setting) - [RedirectFilePerDBCToMain](#redirectfileperdbctomain) @@ -110,10 +111,12 @@ These are the FoxBin2Prg.cfg configuration file settings and their meaning: | ShowProgressbar | 0, _1_, 2 | 0=Don't show progressbar,
1=Always show a progress bar,
2=Only show it when processing multiple-files | | DontShowErrors | _0_, 1 | 0=show message errors in a modal messagebox. (default)
1=don't show errors | | ExtraBackupLevels | 0, _1_, n |
0=No backup
1=One backupfile _\_filename\_.BAK_ (default)
n=n levels of backup in style _\_filename\_.n.BAK_ | -| Debug | _0_, 1, 2 | 0=Off
1=Normal
2=Extended
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 | -| BackgroundImage | | Backgroundimage for process form | +| Debug | _0_, 1, 2 | 0=Off
1=Normal
2=Extended
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.
**If cDebug is set via parameter, this is ignored.** | +| BackgroundImage | \ | Backgroundimage for process form | | 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 | ||| +| InhibitInheritance | _0_, 1, 2, 3 | **This settings is for config file via parameter only**
Settings for config file via parameter only0=Allow scanning "regular" config files (file via parameter is just additional default)
1=Only read tree from root of the file given by parameter, not FoxBin2Prg default
2=Only read folder and subfolder of the file given by parameter
3=Read no other file
This is like
0 Default \| Parameter file \| Default near FoxBin2Prg \| all other config files
1 Default \| Parameter file \| Inheritance from root to parent of folder \| folder and subdirs
2 Default \| Parameter file \| folder and subdirs
3 Default \| Parameter file | +||| | 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) | @@ -131,14 +134,24 @@ These are the FoxBin2Prg.cfg configuration file settings and their meaning: | CheckFileInPath | _0_, 1, 2, 3 |Determines how 2Txt deals with files not in the subfolders of the PJX. No handler for UNC paths.
0 = Ignore. Default
1 = Check and error out if file is not on same structure (for source control)
2 = Create absolute path if file is on different drive.
3 = Create absolute path if file is not in structure
See [Storing paths for pjx](#storing-paths-for-pjx) | ||| | 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 | +| [RedirectClassPerFileToMain:](#redirectclassperfiletomain:) | _0_, 1 | 0=Don't redirect to file.vcx,
1=Redirect to file.vcx 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 | ||| -| OldFilesPerDBC | _0_, 1 | 0=Old Style,
1=New style
This controls the use of the _UseFilesPerDBC_, _RedirectFilePerDBCToMain_ and _ItemPerDBCCheck_ options.
Only if this option is set, the options will be read. | +| [UseFormSettings](create_file_per_form) + | _0_, 1 | 0=Old Style, like the class settings
1=Form style, special for form
This controls the use of the _UseFormPerFile_, _RedirectFormPerFileToMain_, _RedirectFormType_ and _FormPerFileCheck_ options.
Only if this option is set, the options will be read. | +| UseFormPerFile | _0_, 1, 2 | 0=One library _Text_ file,
1=Multiple Form.Object.sc2 files,
2=Multiple Form.baseclass.Object.sc2 files
See [Create Class-Per-File](#create-class-per-file) | +| [RedirectFormPerFileToMain:](#redirectclassperfiletomain:) | _0_, 1 | 0=Don't redirect to Form.scx,
1=Redirect to Form.scx when selecting Form.Object.sc2
RedirectClassType: 1 precedes this setting | +| RedirectFormType | _0_, 1, 2 | For classes created with UseClassPerFile>0 in the form Form[.baseclass].Object.sx2 (scx only) | +| | | 0=creates / refresh class in Form.SCX and add / replace all other classes of this library | +| | | 1=creates / refresh class Form[.baseclass].Object.SCX and do not touch Form.SCX | +| | | 2=creates / refresh class in Form.SCX and do not touch other classes of Form.SCX | +| [FormPerFileCheck](#classperfilecheck) | _0_, 1 | 0=Don't check Form.Object.sc2 inclusion,
1=Check Form.Object.sc2 inclusion
Only used if import file is in Form[.baseclass].Object.sc2 syntax.
Ignored for RedirectClassType: 2 | +||| +| OldFilesPerDBC | _0_, 1 | 0=Old Style,
1=New style
This controls the use of the _UseFilesPerDBC_, _RedirectFilePerDBCToMain_ and _ItemPerDBCCheck_ options.
Only if this option is set, the **Form** options below 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, if option is turned off. | @@ -256,7 +269,7 @@ Views and Relations. All this to minimize the differences when diffing DBCs that ```` ### PAM Section -This section is generated for classes and forms, it is delimited with the tag, +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 @@ -344,7 +357,7 @@ Example of multiple file masks (separte with ","): ```` ### Configuration per table -New configuration options. See [Configuration file per table](#configuration-file-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". @@ -432,10 +445,17 @@ 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, + +The exception are the group controlling the new style to split DBC files and the one for forms. +The options _UseFilesPerDBC_, _RedirectFilePerDBCToMain_ and _ItemPerDBCCheck_ will be ignored for DBC, 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. +Setting _OldFilesPerDBC_ to 1 will inhertit the values from the \*class\* options. +If _OldFilesPerDBC_ is set to 0 after it was active, the values of the three options are rejected at all and reset to the corresponding \*class\* values. +For Forms, options _UseFormPerFile_, _RedirectFormPerFileToMain_, _RedirectFormType_ and _FormPerFileCheck_ will be ignored, +if _UseFormSettings_ is set to 0. +Setting _UseFormSettings_ to 1 will inhertit the values from the \*class\* options. +If _UseFormSettings_ is set to 0 after it was active, the values of the four options are rejected at all and reset to the corresponding \*class\* values. + ### File Capitalization FoxBin2Prg takes care of file capitalization (their extension, specifically), @@ -522,9 +542,20 @@ If you don't use the redirect setting, an individual vcx/scx file will be genera This can be useful if you want to divide a big library in smaller pieces. #### Note -This is true for SCX files as well. SCX files may contain a form and a dataenvironment. -It will create sc2 files. - +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 +- [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.) +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" @@ -555,7 +586,7 @@ annotated on DataBaseName.dc2 main file, otherwise no checking is made and when #### 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, @@ -740,8 +771,4 @@ For options on integrating FoxBin2Prg with SCM tools, look at this topic: See [FoxBin2Prg and use with git](./FoxBin2Prg_git.md) ---- -![VFPX logo](https://vfpx.github.io/images/vfpxbanner_small.gif) -This project is part of [VFPX](https://vfpx.github.io/). - ----- -Last changed: _2023/03/20_ ![Picture](./pictures/vfpxpoweredby_alternative.gif) \ No newline at end of file +Last changed: _2023/09/03_ \ No newline at end of file diff --git a/foxbin2prg.cfg.txt b/foxbin2prg.cfg.txt index 2a19c3b..766ee41 100644 --- a/foxbin2prg.cfg.txt +++ b/foxbin2prg.cfg.txt @@ -1,29 +1,44 @@ *################################################################################################################ *FOXBIN2PRG.CFG configuration options: (If no values given, these are the DEFAULTS) -*Version: v1.19.79 +*Version: v1.20.05 ***************************************************************************************************************** * 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 InhibitInheritance setting controls if other config files will be evaluated (default). See below. * 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: .dbf.cfg in tables folder) -* 6., Parameter calling FOXBIN2PRG.EXE. +* 5., optional Special settings per single DBF's Syntax: .dbf.cfg in tables folder) * Some Parameter calling FOXBIN2PRG.EXE overturn this settings (except Defaults) ***************************************************************************************************************** *-- Settings for internal work, not processing *Language: (auto) && Language of shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC [DEFAULT] -*ShowProgressbar: 1 && 0=Don't show, 1=Allways show, 2= Show only for multi-file processing +*ShowProgressbar: 1 && 0=Don't show, 1=Allways show, 2=Show only for multi-file processing *DontShowErrors: 0 && Show message errors by default *ExtraBackupLevels: 1 && By default 1 BAK is created. With this you can make more .N.BAK, or none -*Debug: 0 && Don't Activate individual .Log by default +*Debug: 0 && 0=Don't Activate individual .Log by default +* && 1=Activate individual .Log by default +* && 2=??? +* && Only valid if not controlled by parameter *BackgroundImage: && Backgroundimage for process form. Empty for empty Background. File not found uses default. -*HomeDir: 1 && Home Directory in PJX +*HomeDir: 1 && Home directory in PJX * && 0 don't save HomeDir in PJ2 * && 1 save HomeDir in PJ2 +*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*-- Settings for config file via parameter only +*InhibitInheritance: 0 && 0=Allow scanning "regular" config files (file via parameter is just additional default) +* && 1=Only read tree from root of the file given by parameter, not FoxBin2Prg default +* && 2=Only read folder and subfolder of the file given by parameter +* && 3=Read no other file +* && This is like +* && 0 Default | Parameter file | Default near FoxBin2Prg | all other config files +* && 1 Default | Parameter file | Inheritance from root to parent of folder | folder and subdirs +* && 2 Default | Parameter file | folder and subdirs +* && 3 Default | Parameter file *---------------------------------------------------------------------------------------------------------------- *-- Conversion operation by type @@ -48,15 +63,16 @@ *---------------------------------------------------------------------------------------------------------------- *Setting for container files (not pjx) -*-- CLASS and FORM options (tx2 is to read as vc2 or sc2, VCX might be SCX) +*-- CLASS (, FORM and DBC) options (tx2 is to read as vc2 or sc2, VCX might be SCX) +*-- FORM and DBC options default to this settings, if not set otherwise. See below. *- Class per file options (UseClassPerFile: 1) *UseClassPerFile: 0 && Determines how a library (or form) will handle included class (or, for forms, objects) * && 0 One library.tx2 file * && 1 Multiple file.class.tx2 files * && 2 Multiple file.baseclass.class.tx2 files *RedirectClassPerFileToMain: 0 && When regenerating binary files, determine target file -* && 0 Don't redirect to file.tx2 -* && 1 Redirect to file.tx2 when selecting file[.baseclass].class.tx2 +* && 0 Don't redirect to file.vcx/scx +* && 1 Redirect to file.vcx/scx when selecting file[.baseclass].class.tx2 * && RedirectClassType: 1 has precedence *RedirectClassType: 0 && For classes created with UseClassPerFile>0 in the form file[.baseclass].class.tx2 * && Those files could be imported like file.tx2::Class::import or like file[.baseclass].class.tx2 @@ -71,11 +87,37 @@ * && Ignored for RedirectClassType: 2 *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +*-- FORM options +*- Form per file options (UseFormSettings: 1) +*UseFormSettings: 0 && 1=Turns the File per SCX options on, 0 uses the old UseClassPerFile etc settings. +* && Options below will only read if UseFormSettings is set 1 before! +* && If UseFormSettings is set 0 later, all setting will be lost +*UseFormPerFile: 0 && Determines how a form will handle included objects +* && 0 One Form.sc2 file +* && 1 Multiple Form.Obj.sc2 files +* && 2 Multiple Form.baseclass.Obj.sc2 files +*RedirectFormPerFileToMain: 0 && When regenerating binary files, determine target file +* && 0 Don't redirect to Form.scx +* && 1 Redirect to Form.scx when selecting Form[.baseclass].Obj.sc2 +* && RedirectFormType: 1 has precedence +*RedirectFormType: 0 && For classes created with UseFormPerFile>0 in the form Form[.baseclass].Obj.sc2 +* && Those files could be imported like Form.sc2::Class::import or like Form[.baseclass].Obj.sc2 +* && For the second form: +* && 0 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and add / replace all other classes of this library +* && 1 Redirect Form[.baseclass].Obj.sc2 to Form[.baseclass].Obj.SCX and do not touch Form.SCX +* && 2 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and do not touch other classes of Form.SCX +*FormPerFileCheck: 0 && Check, if files listed in the main file of a library or form will be included +* && 0 Don't check file inclusion +* && 1 Check Form[.baseclass].Obj.sc2 inclusion +* && Only used if import file is in Form[.baseclass].Obj.sc2 syntax +* && Ignored for RedirectFormType: 2 +*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + *-- DBC options *- File per DBC options (UseFilesPerDBC: 1) *OldFilesPerDBC: 0 && 1=Turns the File per DBC options on, 0 uses the old UseClassPerFile etc settings. * && Options below will only read if OldFilesPerDBC is set 1 before! -* && If OldFilesPerDBC is set 0 later, alle setting will be lost +* && If OldFilesPerDBC is set 0 later, all setting will be lost *UseFilesPerDBC: 0 && 0=One database dc2 file, 1=Multiple file.*.*.dc2 files * && 0 creates only a file.dc2 with all DBC (file) data * && 1 creates a file.dc2 with DBC properties @@ -89,7 +131,7 @@ *NoTimestamps: 1 && Clear timestamps of several file types by default for minimize text-file differences *ClearUniqueID: 1 && 0=Keep UniqueID in text files, 1=Clear Unique ID. Useful for Diff and Merge *OptimizeByFilestamp: 0 && 1=Optimize file regeneration depending on file timestamp. Dangerous while working with branches! -*RemoveNullCharsFromCode: 1 && 1=Drop NULL chars from source code +*RemoveNullCharsFromCode: 1 && 1=Drop .Null. chars from source code *RemoveZOrderSetFromProps: 0 && 0=Do not remove ZOrderSet property from object, 1=Remove ZOrderSet property from object *PRG_Compat_Level: 0 && 0=Legacy, 1=Use HELPSTRING as Class Procedure comment *---------------------------------------------------------------------------------------------------------------- diff --git a/foxbin2prg.dbf.cfg.txt b/foxbin2prg.dbf.cfg.txt index d68cc0a..d7136e5 100644 --- a/foxbin2prg.dbf.cfg.txt +++ b/foxbin2prg.dbf.cfg.txt @@ -1,6 +1,6 @@ *################################################################################################################ *-- Individual DBF configuration file (syntax: filename.dbf.cfg) Defaults see FoxBin2prg.cfg -*Version: v1.19.79 +*Version: v1.20.05 ***************************************************************************************************************** *DBF_Conversion_Support: <0,1,2,4,8> && 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) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c2b1a89..9c427b6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1,5 +1,5 @@ -#DEFINE DN_FB2PRG_VERSION 1.19 -#DEFINE DC_FB2PRG_VERSION_REAL '1.19.79' +#DEFINE DN_FB2PRG_VERSION 1.20 +#DEFINE DC_FB2PRG_VERSION_REAL '1.20.05' *--------------------------------------------------------------------------------------------------- * Module.........: FOXBIN2PRG.PRG - FOR VISUAL FOXPRO 9.0 @@ -95,7 +95,7 @@ * 14/06/2014 FDBOZZO v1.19.24 Arreglo bug vcx/scx: Un campo de tabla llamado "text" que comienza la línea puede confundirse con la estructura TEXT/ENDTEXT y reconocer mal el resto del código * 16/06/2014 FDBOZZO v1.19.25 Mejora: Agregado soporte de configuraciones (CFG) por directorio que, si existen, se usan en lugar del principal (Mario Peschke) * 17/06/2014 FDBOZZO v1.19.25 Mejora: Si durante la generación de binarios o de textos se producen errores, mostrar un mensaje avisando de ello (Pedro Gutiérrez M.) -* 06/07/2014 FDBOZZO v1.19.26 Mejora: Cuando se convierten binarios a texto, los CHR(0) pasan también, pudiendo provocar falsa detección como binario. Se agrega opción para quitar los NULLs. (Matt Slay) +* 06/07/2014 FDBOZZO v1.19.26 Mejora: Cuando se convierten binarios a texto, los CHR(0) pasan también, pudiendo provocar falsa detección como binario. Se agrega opción para quitar los .Null.s. (Matt Slay) * 27/06/2014 FDBOZZO v1.19.26 Mejora: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no debería), FoxBin2Prg lo procesa igualmente. (Daniel Sánchez) * 06/07/2014 FDBOZZO v1.19.26 Bug Fix cfg: ExtraBackupLevel no se tiene en cuenta cuando se usa multi-configuración * 02/06/2014 DH/FDBOZZO v1.19.27 Mejora: Agregado soporte para exportar datos para DIFF (no para importar) @@ -304,7 +304,21 @@ * 16/03/2023 LScheffler v1.19.77 Bug Fix: Bin2Txt Operation on VCX loses leading spaces in Property Values #90 (JoergSchneider) * 16/03/2023 LScheffler v1.19.77 Bug Fix: Txt2Bin Operation on VCX looses double ampersand in Property Values #91 (LScheffler) * 20/03/2023 LScheffler v1.19.78 Enhancement: Text2Bin on PJX errors out for projects with an attach icon that has a drive letter on its path. #93 (ericbarte) -* 04/08/2023 LScheffler v1.19.79 Bug Fix: Bin2Text: Forms with ole controls conversion error (also: any vcx) +* 06/08/2023 LScheffler v1.20.00 Enhancement: Added option to return version number (LScheffler) +* 20/08/2023 LScheffler v1.20.00 Bug Fix: codepage is lost on recreation, issue #96, fixes issue #95 (OLE) as well (KestasL) +* 30/08/2023 LScheffler v1.20.01 Bug Fix: Some values of config file would not be read, if the inline comment "&&" was not in the line (LScheffler) +* 30/08/2023 LScheffler v1.20.01 Bug Fix: config file set by parameter would be ignored, if the folder contains FoxBin2Prg.cfg (LScheffler) +* 30/08/2023 LScheffler v1.20.01 Enhancement: For run to create config file template new options to set config file and debug added +* 30/08/2023 LScheffler v1.20.01 Enhancement: New option for parameter set config file to control the use of "regular" config files +* 30/08/2023 LScheffler v1.20.01 Bug Fix: Fixed problems with table config files (LScheffler) +* 31/08/2023 LScheffler v1.20.02 Enhancement: New option for parameter set config file to control the use of "regular" config files enhanced. +* 31/08/2023 LScheffler v1.20.03 Enhancement: New option "tcCFG_File" for get_DirSettings method. +* 01/09/2023 LScheffler v1.20.04 Enhancement: New option "tcDebug" for get_DirSettings method. +* 01/09/2023 LScheffler v1.20.04 Enhancement: For better clearance, renamed setting AllowInheritance to InhibitInheritance. +* 01/09/2023 LScheffler v1.20.04 Enhancement: The debug option set via parameter has precedence over value from config file. +* 01/09/2023 LScheffler v1.20.04 Enhancement: For debug option set via parameter only first valid call is used +* 03/09/2023 LScheffler v1.20.05 Bug Fix: Problems recreating menu files (introduced with codepage) (LScheffler) +* 03/09/2023 LScheffler v1.20.05 Enhancement: Inserted options to allow splitting of SCX handling from VCX * * *--------------------------------------------------------------------------------------------------- @@ -339,7 +353,7 @@ * 13/06/2014 Mario Peschke REPORTE BUG vcx/scx v1.19.23: Los campos de tabla con nombre "text" a veces provocan corrupción del binario generado (Arreglado en v1.19.24) * 16/06/2014 Mario Peschke MEJORA v1.19.24: Agregado soporte de configuraciones (CFG) por directorio que, si existen, se usan en lugar del CFG principal (Agregado en v1.19.25) * 17/06/2014 Pedro Gutiérrez M. MEJORA v1.19.24: Si durante la generación de binarios o de textos se producen errores, mostrar un mensaje avisando de ello (Agregado en v1.19.25) -* 02/07/2014 Matt Slay MEJORA v1.19.25: Se filtran algunos CHR(0) de los binarios al tx2, provocando que a veces no sea reconocido como texto. Deberían poderse quitar los NULLs (Arreglado en v1.19.26) +* 02/07/2014 Matt Slay MEJORA v1.19.25: Se filtran algunos CHR(0) de los binarios al tx2, provocando que a veces no sea reconocido como texto. Deberían poderse quitar los .Null.s (Arreglado en v1.19.26) * 27/06/2014 Daniel Sánchez MEJORA v1.19.25: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no debería), FoxBin2Prg falla. Debería poder procesarlo igual. * 02/06/2014 Doug Hennig MEJORA v1.19.22: Agregada funcionalidad para exportar los datos de las tablas al archivo db2 (Agregado en v1.19.27) * 21/07/2014 Edyshor PROPUESTA DE MEJORA db2 v1.19.27: Sería útil poder filtrar tablas y datos cuando se elige DBF_Conversion_Support:4 (Agregado en v1.19.28) @@ -480,7 +494,9 @@ * 16/03/2023 JoergSchneider Bug REPORT v1.19.76 Bin2Txt Operation on VCX loses leading spaces in Property Values #90 (JoergSchneider) * 16/03/2023 LScheffler Bug REPORT v1.19.76 Txt2Bin Operation on VCX looses double ampersand in Property Values #91 (LScheffler) * 17/03/2023 ericbarte Bug REPORT v1.19.76 Text2Bin on PJX errors out for projects with an attach icon that has a drive letter on its path. #93 (ericbarte) -* 04/08/2023 KestasL Bug REPORT v1.19.78 Bin2Text: Forms with ole controls conversion error (also: any vcx) +* 04/08/2023 KestasL Bug REPORT v1.19.78 Bin2Text: Forms with ole controls conversion error issue #95 (also: any vcx) (KestasL) +* 04/08/2023 KestasL Bug REPORT v1.19.78 Codepage is lost on recreation, issue #96 (KestasL) +* 28/08/2023 LScheffler Bug REPORT v1.20.00 Sometimes Language is not changed fitting to conmfig file * * *--------------------------------------------------------------------------------------------------- @@ -516,7 +532,8 @@ * generar errores de compilación, típicamente los #include. * NOTA: Si en vez de '1' se indica un Path (p.ej, el del proyecto, se usará como base para recompilar * tcNoTimestamps (v? IN ) Indica si se debe anular el timestamp ('1') o no ('0' ó vacío) -* tcCFG_File (v? IN ) Indica si se debe usar un archivo de configuración distinto al predeterminado +* tcCFG_File (v? IN ) Config file. If a config file is set, the normal chain of inheritance is reset and this file is read atop of the defaults +* Normal inheritance may or may not run, see setting AllowInheritance *** DH 2021-03-04: added tcOutputFolder parameter * tcOutputFolder (v? IN ) The output folder to write to (optional: if it isn't specified, the same folder as the source is used) *--------------------------------------------------------------------------------------------------- @@ -527,11 +544,19 @@ *** LScheffler 2021-03-08: added optional set of parameters, config file * Usage 2 * PARAMETERS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) -* tc_InputFile (c! IN ) Modus (case sensitive) -* -c Create config template "tcType" with default values -* -C Create config "tcType" with values of directory named by outputfile -* -t Create config template "tcType" for config-per-table file -* tcType (v! IN ) file to create +* tcType (c! IN ) Modus (case sensitive) +* -c Create config template "tcType" with default values +* -C Create config "tcType" with values of directory named by outputfile +* -t Create config template "tcType" for config-per-table file +* tc_OutputFile (v? IN ) file to create +* tcCFG_File (v? IN ) Config file. If a config file is set, the normal chain of inheritance is reset and this file is read atop of the defaults +* Normal inheritance may or may not run, see setting AllowInheritance +* tcDebug (v? IN ) '1' write debug log (posiibly to GETENV("TEMP") ) +*--------------------------------------------------------------------------------------------------- +*** LScheffler 2023-08-06: added option to output version number +* Usage 3 +* PARAMETERS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) +* tc_InputFile (@! OUT ) -VERNO Return version number (DC_FB2PRG_VERSION_REAL) *--------------------------------------------------------------------------------------------------- Lparameters tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress, tcOriginalFileName ; , tcRecompile, tcNoTimestamps, tcCFG_File, tcOutputFolder @@ -562,13 +587,13 @@ Lparameters tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #Define C_DEFINED_PAM_F '*' #Define C_LEN_DEFINED_PAM_I Len(C_DEFINED_PAM_I) #Define C_LEN_DEFINED_PAM_F Len(C_DEFINED_PAM_F) -*SF 16.03.2023 +*LScheffler 16.03.2023 *mark property value section in classes, objects and forms #Define C_DEFINED_PROPVAL_I '*' #Define C_DEFINED_PROPVAL_F '*' #Define C_LEN_DEFINED_PROPVAL_I Len(C_DEFINED_PROPVAL_I) #Define C_LEN_DEFINED_PROPVAL_F Len(C_DEFINED_PROPVAL_F) -*/SF 16.03.2023 +*/LScheffler 16.03.2023 #Define C_END_OBJECT_I '*< END OBJECT:' #Define C_END_OBJECT_F '/>' #Define C_LEN_END_OBJECT_I Len(C_END_OBJECT_I) @@ -744,6 +769,7 @@ Lparameters tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #Define C_FILETYPE_DIRECTORY "D" #Define C_FILETYPE_FILE "F" #Define C_FILETYPE_QUERYSUPPORT "Q" +#Define C_FILETYPE_CONFIG "C" *-- Fin / End *-- Predefine 64MB of RAM @@ -772,10 +798,22 @@ Local lnResp, loEx As Exception tc_InputFile = Evl(tc_InputFile,'') tcType = Evl(tcType,'') +*!* Changed by: LScheffler 06.08.2023 +*!* change date="{^2023-08-06,14:29:00}" +* added option to return version number +If Atc('-VERNO','-'+tc_InputFile) > 0 + tc_InputFile = DC_FB2PRG_VERSION_REAL + RETURN DC_FB2PRG_VERSION_REAL +Endif &&Atc('-VERNO','-'+tc_InputFile) > 0 + +*!* /Changed by: LScheffler 06.08.2023 + + *!* Changed by: LScheffler 15.2.2021 *!* change date="{^2021-02-15,18:44:00}" * added option to create config files If Atc('-BIN2PRG','-'+tc_InputFile) > 0 Or Atc('-PRG2BIN','-'+tc_InputFile) > 0 ; + OR Atc('-BIN2TEXT','-'+tc_InputFile) > 0 Or Atc('-TEXT2BIN','-'+tc_InputFile) > 0 ; OR Atc('-SHOWMSG','-'+tc_InputFile) > 0; Or Atc('-INTERACTIVE','-'+tc_InputFile) > 0 Or Atc('-?','-'+tc_InputFile) > 0 ; OR Atc('-SIMERR_I0','-'+tc_InputFile) > 0 Or Atc('-SIMERR_I1','-'+tc_InputFile) > 0 ; @@ -788,23 +826,41 @@ If Atc('-BIN2PRG','-'+tc_InputFile) > 0 Or Atc('-PRG2BIN','-'+tc_InputFile) > 0 Release pcParamX Endif -* only 2 paras for -cCt -Do Case - Case Pcount()=1 And ( tcType == '-t' Or tcType == 't' ) And !Empty( Dbf() ) - tc_InputFile = Dbf() + '._cfg' +* -cCt Create config files +If Upper(tcType)=='-C' Or tcType=='-t' ; + OR Upper(tcType)=='C' Or tcType=='t' THEN - Case Pcount()=1 And ( Upper( tcType ) =='-C' Or Upper( tcType ) =='C' ) - tc_InputFile = 'FoxBin2PRG._cfg' + If Pcount()>2 THEN + tcCFG_File = tcTextName + IF VARTYPE(tcCFG_File)="C" AND EMPTY(JUSTPATH(tcCFG_File)) THEN + tcCFG_File = FULLPATH(tcCFG_File,"") + ENDIF &&VARTYPE(tcCFG_File)="C" AND EMPTY(JUSTPATH(tcCFG_File)) + tcTextName = .F. + ENDIF &&Pcount()>2 - Case Pcount()#2 And ( Upper( tcType ) =='-C' Or tcType =='-t' Or Upper( tcType ) =='C' Or tcType =='t' ) - tc_InputFile = "" - tcType = "" + If Pcount()>3 THEN + tcDebug = tlGenText + tlGenText = .F. + ENDIF &&Pcount()>3 -Endcase + Do Case + Case Pcount()>4 + tc_InputFile = "" + tcType = "" + Case !EMPTY( tc_InputFile) + + Case ( tcType == '-t' Or tcType == 't' ) And !Empty( Dbf() ) + tc_InputFile = Dbf() + '._cfg' + + Case ( Upper( tcType ) =='-C' Or Upper( tcType ) =='C' ) And tc_InputFile + tc_InputFile = 'FoxBin2PRG._cfg' + + Endcase *!* /Changed by: LScheffler 15.2.2021 +ENDIF &&Upper(tcType)=='-C' Or tcType=='-t' OR Upper(tcType)=='C' Or tcType=='t' Try - loEx = Null + loEx = .Null. loCnv = Createobject("c_foxbin2prg") *** DH 2021-03-04: handle tcOutputFolder If Not Empty(tcOutputFolder) @@ -813,7 +869,7 @@ Try *** DH 2021-03-04: end of new code lnResp = loCnv.execute( tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug ; - , tcDontShowProgress, Null, @loEx, .F., tcOriginalFileName, tcRecompile, tcNoTimestamps ; + , tcDontShowProgress, .Null., @loEx, .F., tcOriginalFileName, tcRecompile, tcNoTimestamps ; , .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. @@ -830,18 +886,18 @@ AddProperty(_Screen, 'ExitCode', lnResp) *SET COVERAGE TO If _vfp.StartMode <> 4 Or Not Sys(16) == Sys(16,0) && 4 = Visual FoxPro was started as a distributable .app or .exe file. - Store Null To loEx, loCnv + Store .Null. To loEx, loCnv Release loEx, loCnv Return lnResp && lnResp contiene un código de error, pero invocado desde SourceSafe puede contener el tipo de soporte de archivo (0,1,2). Endif If Empty(lnResp) - Store Null To loEx, loCnv + Store .Null. To loEx, loCnv Release loEx, loCnv Quit Endif -Store Null To loEx, loCnv +Store .Null. To loEx, loCnv Release loEx, loCnv *-- Muy útil para procesos batch que capturan el código de error @@ -859,7 +915,7 @@ Declare Integer TerminateProcess In Win32API Integer hProcess, Integer uExitCode *lcComputer = [.] *loCIMV2 = GETOBJECT( [winmgmts:{impersonationLevel=impersonate}!\\] + lcComputer + [\root\cimv2] ) *loProcCols = loCIMV2.ExecQuery( [select * from Win32_Process where processid=] + TRANSFORM(_VFP.PROCESSID) + [] ) -*loCIMV2 = NULL +*loCIMV2 = .Null. *loProcCols.ItemIndex(0).TERMINATE(1) @@ -998,6 +1054,15 @@ Define Class c_foxbin2prg As Session *!* + [] ; *!* + [] ; *!* + [] ; +*!* + [] ; +*!* + [] ; +*!* + [] ; +*!* + [] ; +*!* + [] ; +*!* + [] ; +*!* + [] ; +*!* + [] ; +*!* + [] ; Dimension a_ProcessedFiles(1, 6) Protected n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess @@ -1032,11 +1097,13 @@ Define Class c_foxbin2prg As Session l_CFG_CachedAccess = .F. n_CFG_EvaluateFromParam = 0 n_Debug = 0 + n_DebugP = .NULL. n_BodyDevInfo = 0 && Indica si se debe incluir el campo DevInfo en el cuerpo de los pjx/pj2 l_Error = .F. && Indicador de errores del proceso actual l_Errors = .F. && Indicador de error de la sesión actual, acumulativo de todos los procesos c_TextErr = '' l_Test = .F. + l_SingleConfig = .F. && There is only one single configuration file in use l_ShowErrors = .T. n_ShowProgressbar = 1 n_ForceWriteIfReadOnly = 0 @@ -1065,12 +1132,19 @@ Define Class c_foxbin2prg As Session * files in non subpath of the PJX n_CheckFileInPath = 0 *!* /Changed by: LScheffler 19.03.2023 - n_UseClassPerFile = 0 n_PRG_Compat_Level = 0 && 0=COMPATIBLE WITH FoxBin2Prg v1.19.49 and earlier, 1=Include HELPSTRING n_ExcludeDBFAutoincNextval = 0 - l_ClassPerFileCheck = .F. +*!* LScheffler 30.08.2023 + n_InhibitInheritance = 0 + n_UseClassPerFile = 0 l_RedirectClassPerFileToMain = .F. n_RedirectClassType = 0 && 0=Redireccionar Todas las clases, 1=Redireccionar solo la clase indicada + l_ClassPerFileCheck = .F. + l_UseFormSettings = .F. + n_UseFormPerFile = 0 + l_RedirectFormPerFileToMain = .F. + n_RedirectFormType = 0 + l_FormPerFileCheck = .F. l_NoTimestamps = .T. c_BackgroundImage = '' l_ClearUniqueID = .T. @@ -1089,13 +1163,13 @@ Define Class c_foxbin2prg As Session n_Order_View_Fields = 1 n_ProcessedFiles = 0 && Contador usado para los archivos file.class.ext n_ProcessedFilesCount = 0 && Contador genérico de procesados - o_Conversor = Null - o_Frm_Avance = Null - o_WSH = Null - o_FSO = Null && Scripting.FileSystemObject - o_TextStream = Null && Scripting.TextStream - o_FNC = Null && Filename_caps object - o_Configuration = Null + o_Conversor = .Null. + o_Frm_Avance = .Null. + o_WSH = .Null. + o_FSO = .Null. && Scripting.FileSystemObject + o_TextStream = .Null. && Scripting.TextStream + o_FNC = .Null. && Filename_caps object + o_Configuration = .Null. run_AfterCreateTable = '' run_AfterCreate_DB2 = '' c_PJ2 = 'PJ2' && PJX @@ -1123,7 +1197,13 @@ Define Class c_foxbin2prg As Session *** 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 - +*!* LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + i_CPID = 0 &&CPCURRENT(1) +*!* LScheffler 31.08.2023 more sophisticated control of inheritance for para file + c_SingleConfig_Folder = '' + o_CFG = .NULL. + Procedure Init Lparameters tcCFG_File, tcCancelWithEscKey @@ -1227,6 +1307,9 @@ Define Class c_foxbin2prg As Session This.o_FSO = Createobject("Scripting.FileSystemObject") *THIS.o_WSH = CREATEOBJECT("WScript.Shell") This.o_Configuration = Createobject("COLLECTION") + This.o_CFG = Createobject('CL_CFG') +*store default + This.o_CFG.CopyFrom(This) This.evaluateConfiguration() Release lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues Return @@ -1245,18 +1328,18 @@ Define Class c_foxbin2prg As Session This.writeLog( ) This.writeLog_Flush() This.unloadProgressbarForm() - This.o_Configuration = Null - This.o_WSH = Null - This.o_FSO = Null + This.o_Configuration = .Null. + This.o_WSH = .Null. + This.o_FSO = .Null. If Vartype(_Screen.o_FoxBin2Prg_Lang) = "O" Then - _Screen.o_FoxBin2Prg_Lang = Null + _Screen.o_FoxBin2Prg_Lang = .Null. Endif Catch Finally - This.o_FSO = Null - This.o_WSH = Null - This.o_FNC = Null + This.o_FSO = .Null. + This.o_WSH = .Null. + This.o_FNC = .Null. *-- Funciones para changeFileAttributes Clear Dlls fb2p_SetFileAttributes, fb2p_GetFileAttributes *-- Funciones para escribir en StdOut @@ -1467,11 +1550,16 @@ Define Class c_foxbin2prg As Session Procedure n_Debug_ACCESS - If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) - Return This.n_Debug - Else - Return Nvl( This.o_Configuration( This.n_CFG_Actual ).n_Debug, This.n_Debug ) - Endif + IF ISNULL(This.n_DebugP) THEN + If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) + Return This.n_Debug + Else + Return Nvl( This.o_Configuration( This.n_CFG_Actual ).n_Debug, This.n_Debug ) + Endif + ELSE &&ISNULL(This.n_DebugP) + Return This.n_DebugP + + ENDIF &&ISNULL(This.n_DebugP) Endproc @@ -1523,14 +1611,6 @@ Define Class c_foxbin2prg As Session Endproc *!* /Changed by: LScheffler 19.03.2023 - Procedure n_UseClassPerFile_ACCESS - If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) - Return This.n_UseClassPerFile - Else - Return Nvl( This.o_Configuration( This.n_CFG_Actual ).n_UseClassPerFile, This.n_UseClassPerFile ) - Endif - Endproc - *!* Changed by: LScheffler 21.02.2021 *!* change date="{^2021-02-21,10:57:00}" * additional options controlling @@ -1600,6 +1680,15 @@ Define Class c_foxbin2prg As Session *!* /Changed by: LScheffler 21.02.2021 + Procedure n_UseClassPerFile_ACCESS + If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) + Return This.n_UseClassPerFile + Else + Return Nvl( This.o_Configuration( This.n_CFG_Actual ).n_UseClassPerFile, This.n_UseClassPerFile ) + Endif + Endproc + + Procedure l_RedirectClassPerFileToMain_ACCESS If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) Return This.l_RedirectClassPerFileToMain @@ -1618,6 +1707,62 @@ Define Class c_foxbin2prg As Session Endproc + Procedure l_ClassPerFileCheck_ACCESS + If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) + Return This.l_ClassPerFileCheck + Else + Return Nvl( This.o_Configuration( This.n_CFG_Actual ).l_ClassPerFileCheck, This.l_ClassPerFileCheck ) + Endif + Endproc + + +**** + Procedure l_UseFormSettings_ACCESS + If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) + Return This.l_UseFormSettings + Else + Return Nvl( This.o_Configuration( This.n_CFG_Actual ).l_UseFormSettings, This.l_UseFormSettings ) + Endif + Endproc + + + Procedure n_UseFormPerFile_ACCESS + If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) + Return This.n_UseFormPerFile + Else + Return Nvl( This.o_Configuration( This.n_CFG_Actual ).n_UseFormPerFile, This.n_UseFormPerFile ) + Endif + Endproc + + + Procedure l_RedirectFormPerFileToMain_ACCESS + If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) + Return This.l_RedirectFormPerFileToMain + Else + Return Nvl( This.o_Configuration( This.n_CFG_Actual ).l_RedirectFormPerFileToMain, This.l_RedirectFormPerFileToMain ) + Endif + Endproc + + + Procedure n_RedirectFormType_ACCESS + If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) + Return This.n_RedirectFormType + Else + Return Nvl( This.o_Configuration( This.n_CFG_Actual ).n_RedirectFormType, This.n_RedirectFormType ) + Endif + Endproc + + + Procedure l_FormPerFileCheck_ACCESS + If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) + Return This.l_FormPerFileCheck + Else + Return Nvl( This.o_Configuration( This.n_CFG_Actual ).l_FormPerFileCheck, This.l_FormPerFileCheck ) + Endif + Endproc + + +**** Procedure l_RemoveNullCharsFromCode_ACCESS If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) Return This.l_RemoveNullCharsFromCode @@ -1635,16 +1780,16 @@ Define Class c_foxbin2prg As Session Endif Endproc - - Procedure l_ClassPerFileCheck_ACCESS - If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) - Return This.l_ClassPerFileCheck +*!* LScheffler 30.08.2023 + Procedure n_InhibitInheritance_ACCESS +*only from base config (and only if this is from parameter) + If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( 1 ) ) + Return This.n_InhibitInheritance Else - Return Nvl( This.o_Configuration( This.n_CFG_Actual ).l_ClassPerFileCheck, This.l_ClassPerFileCheck ) + Return Nvl( This.o_Configuration( 1 ).n_InhibitInheritance, This.n_InhibitInheritance ) Endif Endproc - Procedure l_ClearUniqueID_ACCESS If This.n_CFG_Actual = 0 Or Isnull( This.o_Configuration( This.n_CFG_Actual ) ) Return This.l_ClearUniqueID @@ -2260,7 +2405,7 @@ Define Class c_foxbin2prg As Session If (tlForceUnload Or This.n_ShowProgressbar <> 0) And Vartype(This.o_Frm_Avance) = "O" Then This.o_Frm_Avance.Hide() This.o_Frm_Avance.Release() - This.o_Frm_Avance = Null + This.o_Frm_Avance = .Null. Endif Endproc @@ -2284,9 +2429,11 @@ Define Class c_foxbin2prg As Session * tc_InputFile_Type (@? IN ) Tipo de archivo de entrada: (D)irectory, (F)ile, (Q)uerySupport * toParentCFG (@? IN ) (Uso interno) Si se pasa un valor, el nuevo CFG copiará primero sus valores de aquí para heredarlos * tl_ForceLog (v? IN ) Force logging of settings. used on cfg setting as object +* tcCFG_File (v? IN ) Config file. If a config file is set, the normal chain of inheritance is reset and this file is read atop of the defaults +* Normal inheritance may or may not run, see setting InhibitInheritance *-------------------------------------------------------------------------------------------------------------- Lparameters tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; - , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type, toParentCFG, tl_ForceLog + , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type, toParentCFG, tl_ForceLog, tcCFG_File #If .F. Local toParentCFG As CL_CFG Of 'FOXBIN2PRG.PRG' @@ -2298,17 +2445,61 @@ Define Class c_foxbin2prg As Session , loCFG_Manual As CL_CFG Of 'FOXBIN2PRG.PRG' ; , lo_Configuration As Collection ; , loLang As CL_LANG Of 'FOXBIN2PRG.PRG' ; - , loEx As Exception - + , loEx As Exception, llSetSingleConfig, lc_Foxbin2prg_ConfigFile, lc_InputPath Try With This As c_foxbin2prg Of 'FOXBIN2PRG.PRG' + + If Inlist( Transform(tcDebug), '0', '1', '2' ) Then + .writeLog( C_TAB + ' > Parameter tcDebug: ' + tcDebug +; + IIF(ISNULL(This.n_DebugP), "", ", will be ignored, second use of parameter. Using: " + TRANSFORM(This.n_DebugP) )+CR_LF ) + IF ISNULL(This.n_DebugP) THEN + This.n_Debug = Int(Val(tcDebug)) + This.n_DebugP = This.n_Debug + ENDIF &&ISNULL(This.n_DebugP) + Endif + Store 0 To lnKey + llSetSingleConfig = .Null. + loLang = _Screen.o_FoxBin2Prg_Lang tcRecompile = Evl(tcRecompile, .c_Recompile) + lo_Configuration = .o_Configuration + +*!* LScheffler 30.08.2023, is a config file given by programm parameter + IF VARTYPE(tcCFG_File)='C' AND !EMPTY(tcCFG_File) THEN + IF EMPTY(lo_Configuration.GetKey(tcCFG_File)) THEN + This.writeLog( '> ' + loLang.C_USING_THIS_SETTINGS_LOC6+tcCFG_File ) + + + .l_Main_CFG_Loaded = .F. + *restore default + .o_CFG.CopyFrom(.o_CFG,This) + + lc_Foxbin2prg_ConfigFile = .c_Foxbin2prg_ConfigFile + .c_Foxbin2prg_ConfigFile = tcCFG_File + + .o_Configuration.Remove(-1) + .n_CFG_EvaluateFromParam = 0 + .l_SingleConfig = .F. + + llSetSingleConfig = .T. + .writeLog( '> ' + Upper(loLang.C_USING_THIS_SETTINGS_LOC) + ': ' + .c_Foxbin2prg_ConfigFile + ; + loLang.C_USING_THIS_SETTINGS_LOC1 ) + + Else &&EMPTY(lo_Configuration.GetKey(tcCFG_File)) + This.writeLog( '> ' + loLang.C_USING_THIS_SETTINGS_LOC6+tcCFG_File + loLang.C_USING_THIS_SETTINGS_LOC7+; + ICASE(This.n_InhibitInheritance=0, loLang.C_USING_THIS_SETTINGS_LOC2,; + This.n_InhibitInheritance=1, loLang.C_USING_THIS_SETTINGS_LOC3,; + This.n_InhibitInheritance=2, loLang.C_USING_THIS_SETTINGS_LOC4,; + This.n_InhibitInheritance=3, loLang.C_USING_THIS_SETTINGS_LOC5," Failure."+CR_LF)) + + ENDIF &&EMPTY(lo_Configuration.GetKey(tcCFG_File)) + ENDIF &&VARTYPE(tcCFG_File)='C' AND !EMPTY(tcCFG_File) + + lcConfigFile = .c_Foxbin2prg_ConfigFile tc_InputFile = Evl(tc_InputFile, .c_InputFile) tcInputFile_Type = Evl(tcInputFile_Type,'') - lo_Configuration = .o_Configuration If Vartype(lcConfigFile) = "O" loCFG_Manual = lcConfigFile && lcConfigFile is an object CFG generated by get_DirSettings() @@ -2316,11 +2507,11 @@ Define Class c_foxbin2prg As Session lcConfigFile = Fullpath('Personalized-CFG-Object', tc_InputFile) loCFG_Manual.c_Foxbin2prg_ConfigFile = 'Personalized-CFG-Object' Else - loCFG_Manual = Null + loCFG_Manual = .Null. Endif - If Vartype(toParentCFG) <> 'O' Then - toParentCFG = Null + If Vartype(toParentCFG) <> 'O' OR llSetSingleConfig Then + toParentCFG = .Null. Endif If Isnull(toParentCFG) Then @@ -2332,15 +2523,61 @@ Define Class c_foxbin2prg As Session Do Case Case Len(tc_InputFile) = 1 tcInputFile_Type = C_FILETYPE_QUERYSUPPORT + lc_InputPath = "" Case Adir(laDirInfo, tc_InputFile, "D") = 1 And Substr( laDirInfo(1,5), 5, 1 ) = "D" tcInputFile_Type = C_FILETYPE_DIRECTORY + lc_InputPath = tc_InputFile Otherwise tcInputFile_Type = C_FILETYPE_FILE + lc_InputPath = JUSTPATH(tc_InputFile) + Endcase + Else + If Empty(tc_InputFile) THEN + lc_InputPath = "" + + ELSE &&Empty(tc_InputFile) + Do Case + Case tcInputFile_Type==C_FILETYPE_QUERYSUPPORT + lc_InputPath = "" + + Case tcInputFile_Type==C_FILETYPE_DIRECTORY + lc_InputPath = tc_InputFile + + Otherwise +* tcInputFile_Type = C_FILETYPE_FILE + lc_InputPath = JUSTPATH(tc_InputFile) + + Endcase + ENDIF &&Empty(tc_InputFile) Endif +*!* LScheffler 30.08.2023, just the single config from programm parameter, or sub dirs of the config file given by the parameter +*!* LScheffler 31.08.2023 more sophisticated control of inheritance for para file + lc_InputPath = UPPER(lc_InputPath) + DO CASE + CASE !.l_SingleConfig +*just go ahead + CASE .n_InhibitInheritance=0 +*read all + CASE Empty(lc_InputPath) +*whatever, just go ahead + CASE .n_InhibitInheritance=3 +*read nothing + Exit +*!* CASE INLIST(.n_InhibitInheritance,1,2) +*!* *not a config file in FoxBinPrg's own folder + CASE INLIST(.n_InhibitInheritance,1,2) AND lc_InputPath=.c_SingleConfig_Folder +*just in the directory or subdirectory of the config file set by the parameter + CASE .n_InhibitInheritance=1 AND .c_SingleConfig_Folder=lc_InputPath +*just above the config file set by the parameter + Otherwise + Exit + ENDCASE + + If .l_Main_CFG_Loaded And Not Empty(tc_InputFile) And Not tcInputFile_Type == C_FILETYPE_QUERYSUPPORT Then If .n_CFG_EvaluateFromParam = 1 * Si se indicó por parámetro (modo objeto), usarlo como Maestro @@ -2378,7 +2615,7 @@ Define Class c_foxbin2prg As Session .n_CFG_Actual = .n_CFG_EvaluateFromParam Else * Normalmente se buscará el CFG del directorio analizado - .n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0 = No hay CFG cacheada, >0 = Hay CFG cacheada + .n_CFG_Actual = lo_Configuration.GetKey( lcConfigFile ) && 0 = No hay CFG cacheada, >0 = Hay CFG cacheada Endif If .n_CFG_Actual > 0 Then @@ -2393,7 +2630,11 @@ Define Class c_foxbin2prg As Session Endif *-- Si no se pasó un CFG padre y no hay CFGs o no encuentra el del PATH indicado, analizo la jararquía - If Isnull(toParentCFG) And (lo_Configuration.Count = 0 Or .n_CFG_Actual = 0) Then +*!* LScheffler 30.08.2023 only read path if no config by parameter + If Isnull(llSetSingleConfig); + AND Isnull(toParentCFG); + And (lo_Configuration.Count = 0 Or .n_CFG_Actual = 0); + AND !This.c_Foxbin2prg_ConfigFile==tc_InputFile Then llMasterEval = .T. toParentCFG = This @@ -2457,20 +2698,22 @@ Define Class c_foxbin2prg As Session ' CFG_Actual:' + Transform(.n_CFG_Actual) + Icase(.n_CFG_Actual=1, ' [MASTER]', ' [SECONDARY]') ) Else lo_CFG = Createobject('CL_CFG') - lo_Configuration.Add( lo_CFG, lc_CFG_Path ) + lo_Configuration.Add( lo_CFG, lcConfigFile ) .n_CFG_Actual = lo_Configuration.Count - .writeLog( '> ' + Upper(loLang.C_CACHING_CONFIG_FOR_DIRECTORY_LOC) + ': ' + lc_CFG_Path + ; + + .writeLog( '> ' + Upper(loLang.C_CACHING_CONFIG_FOR_DIRECTORY_LOC) + ': ' + lcConfigFile + ; ' CFG_Actual:' + Transform(.n_CFG_Actual) + Icase(.n_CFG_Actual=1, ' [MASTER]', ' [SECONDARY]') ) If Not Isnull(toParentCFG) lo_CFG.CopyFrom(@toParentCFG) toParentCFG = lo_CFG - .writeLog( C_TAB + '- ' + loLang.C_INHERITING_FROM_LOC + ': ' + lo_CFG.c_Foxbin2prg_ConfigFile ) +* .writeLog( C_TAB + '- ' + loLang.C_INHERITING_FROM_LOC + ': ' + lo_CFG.c_Foxbin2prg_ConfigFile ) + .writeLog( C_TAB + '- ' + loLang.C_INHERITING_FROM_LOC + ': ' + lo_Configuration.GetKey(lo_Configuration.Count-1) ) Endif Endif Else - lo_Configuration.Add( Null, lc_CFG_Path ) && La NULL se carga solo cuando no hay Main_CFG_loaded todavía. + lo_Configuration.Add( .Null., lcConfigFile ) && La .Null. se carga solo cuando no hay Main_CFG_loaded todavía. .n_CFG_Actual = lo_Configuration.Count Endif @@ -2503,7 +2746,7 @@ Define Class c_foxbin2prg As Session Case Left( laConfig(m.I), 9 ) == Lower('Language:') *-- CASO ESPECIAL: El lenguaje no se guarda en lo_CFG, porque es un seteo Global. - lcValue = Alltrim( Substr( laConfig(m.I), 10 , At('&'+'&',laConfig(m.I)) - 10 ) ) + lcValue = Alltrim( Substr( laConfig(m.I), 10 , IIF('&'+'&'$laConfig(m.I), At('&'+'&', laConfig(m.I)) - 10, LEN(laConfig(m.I) ) ) ) ) .changeLanguage(lcValue) lo_CFG.c_Language_In = m.lcValue .writeLog( C_TAB + Justfname(lcConfigFile) + ' > Language: ' + Transform(lcValue) + ' (' + .c_Language + ')' ) @@ -2550,8 +2793,11 @@ Define Class c_foxbin2prg As Session Case Left( laConfig(m.I), 6 ) == Lower('Debug:') lcValue = Alltrim( Substr( laConfig(m.I), 7 ) ) If Not Inlist( Transform(tcDebug), '0', '1' ) And Inlist( lcValue, '0', '1' ) Then - tcDebug = lcValue - .writeLog( C_TAB + Justfname(lcConfigFile) + ' > tcDebug: ' + Transform(tcDebug) ) + IF ISNULL(This.n_DebugP) THEN + lo_CFG.n_Debug = Int(Val(lcValue)) + ENDIF &&ISNULL(This.n_DebugP) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' > Debug: ' + lcValue +; + IIF(ISNULL(This.n_DebugP), "", ", will be ignored, debug set via parameter. Using: " + TRANSFORM(This.n_DebugP) ) ) Endif *** DH 2021-03-04: handle n_HomeDir configuration setting @@ -2654,6 +2900,7 @@ Define Class c_foxbin2prg As Session * additional options controlling * - splitt of DBC separated from VCX/SCX * - new operations of DBF +*VCX Case Left( laConfig(m.I), 16 ) == Lower('UseClassPerFile:') lcValue = Alltrim( Substr( laConfig(m.I), 17 ) ) If Inlist( lcValue, '0', '1', '2' ) Then @@ -2663,16 +2910,9 @@ Define Class c_foxbin2prg As Session lo_CFG.n_UseFilesPerDBC = lo_CFG.n_UseClassPerFile .writeLog( C_TAB + Justfname(lcConfigFile) + ' => UseFilesPerDBC: ' + Transform(lcValue) ) Endif - Endif - - Case Left( laConfig(m.I), 18 ) == Lower('ClassPerFileCheck:') - lcValue = Alltrim( Substr( laConfig(m.I), 19 ) ) - If Inlist( lcValue, '0', '1' ) Then - lo_CFG.l_ClassPerFileCheck = ( Transform(lcValue) == '1' ) - .writeLog( C_TAB + Justfname(lcConfigFile) + ' > ClassPerFileCheck: ' + Transform(lcValue) ) - If !lo_CFG.l_OldFilesPerDBC Then - lo_CFG.l_ItemPerDBCCheck = lo_CFG.l_ClassPerFileCheck - .writeLog( C_TAB + Justfname(lcConfigFile) + ' => ItemPerDBCCheck: ' + Transform(lcValue) ) + If !lo_CFG.l_UseFormSettings Then + lo_CFG.n_UseFormPerFile = lo_CFG.n_UseClassPerFile + .writeLog( C_TAB + Justfname(lcConfigFile) + ' => UseFormPerFile: ' + Transform(lcValue) ) Endif Endif @@ -2685,8 +2925,11 @@ Define Class c_foxbin2prg As Session lo_CFG.l_RedirectFilePerDBCToMain = lo_CFG.l_RedirectClassPerFileToMain .writeLog( C_TAB + Justfname(lcConfigFile) + ' => RedirectFilePerDBCToMain: ' + Transform(lcValue) ) Endif + If !lo_CFG.l_UseFormSettings Then + lo_CFG.l_RedirectFormPerFileToMain = lo_CFG.l_RedirectClassPerFileToMain + .writeLog( C_TAB + Justfname(lcConfigFile) + ' => RedirectFormPerFileToMain ' + Transform(lcValue) ) + Endif Endif -*!* /Changed by: LScheffler 21.02.2021 *!* Changed by: LScheffler 04.3.2021 *!* change date="{^2021-03-04,13:12:00}" @@ -2696,9 +2939,78 @@ Define Class c_foxbin2prg As Session If Inlist( lcValue, '0', '1', '2' ) Then lo_CFG.n_RedirectClassType = Int( Val( lcValue ) ) .writeLog( C_TAB + Justfname(lcConfigFile) + ' > RedirectClassType: ' + Transform(lcValue) ) + If !lo_CFG.l_UseFormSettings Then + lo_CFG.n_RedirectFormType = lo_CFG.n_RedirectClassType + .writeLog( C_TAB + Justfname(lcConfigFile) + ' => RedirectFormType ' + Transform(lcValue) ) + Endif Endif *!* /Changed by: LScheffler 04.3.2021 + Case Left( laConfig(m.I), 18 ) == Lower('ClassPerFileCheck:') + lcValue = Alltrim( Substr( laConfig(m.I), 19 ) ) + If Inlist( lcValue, '0', '1' ) Then + lo_CFG.l_ClassPerFileCheck = ( Transform(lcValue) == '1' ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' > ClassPerFileCheck: ' + Transform(lcValue) ) + If !lo_CFG.l_OldFilesPerDBC Then + lo_CFG.l_ItemPerDBCCheck = lo_CFG.l_ClassPerFileCheck + .writeLog( C_TAB + Justfname(lcConfigFile) + ' => ItemPerDBCCheck: ' + Transform(lcValue) ) + Endif + If !lo_CFG.l_UseFormSettings Then + lo_CFG.l_FormPerFileCheck = lo_CFG.l_ClassPerFileCheck + .writeLog( C_TAB + Justfname(lcConfigFile) + ' => FormPerFileCheck ' + Transform(lcValue) ) + Endif + Endif +*!* /Changed by: LScheffler 21.02.2021 +*/VCX + +*Forms + Case Left( laConfig(m.I), 16 ) == Lower('UseFormSettings:') + lcValue = Alltrim( Substr( laConfig(m.I), 17 ) ) + If Inlist( lcValue, '0', '1' ) Then + lo_CFG.l_UseFormSettings = ( Transform(lcValue) == '1' ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' > UseFormSettings: ' + Transform(lcValue) ) + If !lo_CFG.l_UseFormSettings Then + lo_CFG.n_UseFormPerFile = lo_CFG.n_UseClassPerFile + lo_CFG.l_RedirectFormPerFileToMain = lo_CFG.l_RedirectClassPerFileToMain + lo_CFG.n_RedirectFormType = lo_CFG.n_RedirectClassType + lo_CFG.l_FormPerFileCheck = lo_CFG.l_ClassPerFileCheck + .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> UseFormPerFile: ' + Transform(lo_CFG.n_UseFormPerFile) ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> RedirectFormPerFileToMain: ' + Transform(lo_CFG.l_RedirectFormPerFileToMain) ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> n_RedirectFormType: ' + Transform(lo_CFG.n_RedirectFormType) ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> FormPerFileCheck: ' + Transform(lo_CFG.l_FormPerFileCheck) ) + Endif + Endif + + Case Left( laConfig(m.I), 15 ) == Lower('UseFormPerFile:') + lcValue = Alltrim( Substr( laConfig(m.I), 16 ) ) + If lo_CFG.l_UseFormSettings AND Inlist( lcValue, '0', '1', '2' ) Then + lo_CFG.n_UseFormPerFile = Int( Val(lcValue) ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' > UseFormPerFile: ' + Transform(lcValue) ) + Endif + + Case Left( laConfig(m.I), 26 ) == Lower('RedirectFormPerFileToMain:') + lcValue = Alltrim( Substr( laConfig(m.I), 27 ) ) + If lo_CFG.l_UseFormSettings AND Inlist( lcValue, '0', '1' ) Then + lo_CFG.l_RedirectFormPerFileToMain = ( Transform(lcValue) == '1' ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' > RedirectFormPerFileToMain: ' + Transform(lcValue) ) + Endif + + Case Left( laConfig(m.I), 17 ) == Lower('RedirectFormType:') + lcValue = Alltrim( Substr( laConfig(m.I), 18 ) ) + If lo_CFG.l_UseFormSettings AND Inlist( lcValue, '0', '1', '2' ) Then + lo_CFG.n_RedirectFormType = Int( Val( lcValue ) ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' > RedirectFormType: ' + Transform(lcValue) ) + Endif +*!* /Changed by: LScheffler 04.3.2021 + + Case Left( laConfig(m.I), 17 ) == Lower('FormPerFileCheck:') + lcValue = Alltrim( Substr( laConfig(m.I), 18 ) ) + If lo_CFG.l_UseFormSettings AND Inlist( lcValue, '0', '1' ) Then + lo_CFG.l_FormPerFileCheck = ( Transform(lcValue) == '1' ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' > FormPerFileCheck: ' + Transform(lcValue) ) + Endif +*/Forms + *Databases Case Left( laConfig(m.I), 15 ) == Lower('OldFilesPerDBC:') lcValue = Alltrim( Substr( laConfig(m.I), 16 ) ) @@ -2709,9 +3021,9 @@ Define Class c_foxbin2prg As Session lo_CFG.n_UseFilesPerDBC = lo_CFG.n_UseClassPerFile lo_CFG.l_RedirectFilePerDBCToMain = lo_CFG.l_RedirectClassPerFileToMain lo_CFG.l_ItemPerDBCCheck = lo_CFG.l_ClassPerFileCheck - .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> UseFilesPerDBC: ' + Transform(lcValue) ) - .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> RedirectFilePerDBCToMain: ' + Transform(lcValue) ) - .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> ItemPerDBCCheck: ' + Transform(lcValue) ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> UseFilesPerDBC: ' + Transform(lo_CFG.n_UseFilesPerDBC) ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> RedirectFilePerDBCToMain: ' + Transform(lo_CFG.l_RedirectFilePerDBCToMain) ) + .writeLog( C_TAB + Justfname(lcConfigFile) + ' ==> ItemPerDBCCheck: ' + Transform(lo_CFG.l_ItemPerDBCCheck) ) Endif Endif @@ -2735,8 +3047,21 @@ Define Class c_foxbin2prg As Session lo_CFG.l_ItemPerDBCCheck = ( Transform(lcValue) == '1' ) .writeLog( C_TAB + Justfname(lcConfigFile) + ' > ItemPerDBCCheck: ' + Transform(lcValue) ) Endif +*/Databases */-------- setting for container files (not pjx) -------- +*!* LScheffler 30.08.2023 + Case Left( laConfig(m.I), 19 ) == Lower('InhibitInheritance:') + lcValue = Alltrim( Substr( laConfig(m.I), 20 ) ) + If Inlist( lcValue, '0', '1' , '2' , '3' ) Then + IF llSetSingleConfig THEN + lo_CFG.n_InhibitInheritance = Int( Val( lcValue ) ) + ENDIF &&llSetSingleConfig + + .writeLog( C_TAB + Justfname(lcConfigFile) + ' > InhibitInheritance: ' + Transform(lcValue) +; + IIF(m.llSetSingleConfig, "", ", will be ignored, standard configuration file." ) ) + ENDIF + *general files Case Left( laConfig(m.I), 13 ) == Lower('NoTimestamps:') lcValue = Alltrim( Substr( laConfig(m.I), 14 ) ) @@ -2804,14 +3129,14 @@ Define Class c_foxbin2prg As Session Endif Case Left( laConfig(m.I), 24 ) == Lower('DBF_Conversion_Included:') - lcValue = Alltrim( Substr( laConfig(m.I), 25 , At('&'+'&',laConfig(m.I)) - 25 ) ) + lcValue = Alltrim( Substr( laConfig(m.I), 25 , IIF('&'+'&'$laConfig(m.I), At('&'+'&', laConfig(m.I)) - 25, LEN(laConfig(m.I) ) ) ) ) If Not Empty(lcValue) Then lo_CFG.c_DBF_Conversion_Included = lcValue .writeLog( C_TAB + Justfname(lcConfigFile) + ' > DBF_Conversion_Included: ' + Transform(lo_CFG.c_DBF_Conversion_Included) ) Endif Case Left( laConfig(m.I), 24 ) == Lower('DBF_Conversion_Excluded:') - lcValue = Alltrim( Substr( laConfig(m.I), 25 , At('&'+'&',laConfig(m.I)) - 25 ) ) + lcValue = Alltrim( Substr( laConfig(m.I), 25 , IIF('&'+'&'$laConfig(m.I), At('&'+'&', laConfig(m.I)) - 25, LEN(laConfig(m.I) ) ) ) ) If Not Empty(lcValue) Then lo_CFG.c_DBF_Conversion_Excluded = lcValue .writeLog( C_TAB + Justfname(lcConfigFile) + ' > DBF_Conversion_Excluded: ' + Transform(lo_CFG.c_DBF_Conversion_Excluded) ) @@ -2865,16 +3190,17 @@ Define Class c_foxbin2prg As Session If Inlist( Transform(tcNoTimestamps), '0', '1' ) Then lo_CFG.l_NoTimestamps = Not (Transform(tcNoTimestamps) == '0') Endif + If Inlist( Transform(tcClearUniqueID), '0', '1' ) Then lo_CFG.l_ClearUniqueID = Not (Transform(tcClearUniqueID) == '0') Endif - If Inlist( Transform(tcDebug), '0', '1', '2' ) Then - lo_CFG.n_Debug = Int(Val(tcDebug)) - Endif + tcExtraBackupLevels = Evl( tcExtraBackupLevels, Transform( .n_ExtraBackupLevels ) ) + If Isdigit(tcExtraBackupLevels) lo_CFG.n_ExtraBackupLevels = Int( Val( Transform(tcExtraBackupLevels) ) ) Endif + If Inlist( Transform(tcOptimizeByFilestamp), '0', '1', '2' ) Then lo_CFG.n_OptimizeByFilestamp = Int(Val(tcOptimizeByFilestamp)) Endif @@ -2944,12 +3270,19 @@ Define Class c_foxbin2prg As Session *!* /Changed by: LScheffler 19.03.2023 *setting for container files (not pjx) -*Classes and forms ( vcx / scx) +*Classes ( vcx ) .writeLog( C_TAB + 'UseClassPerFile: ' + Transform(.n_UseClassPerFile) ) .writeLog( C_TAB + 'ClassPerFileCheck: ' + Transform(.l_ClassPerFileCheck) ) .writeLog( C_TAB + 'RedirectClassPerFileToMain: ' + Transform(.l_RedirectClassPerFileToMain) ) .writeLog( C_TAB + 'RedirectClassType: ' + Transform(.n_RedirectClassType) ) +*Forms ( scx) + .writeLog( C_TAB + 'UseFormSettings: ' + Transform(.l_UseFormSettings) ) + .writeLog( C_TAB + 'UseFormPerFile: ' + Transform(.n_UseFormPerFile) ) + .writeLog( C_TAB + 'FormPerFileCheck: ' + Transform(.l_FormPerFileCheck) ) + .writeLog( C_TAB + 'RedirectFormPerFileToMain: ' + Transform(.l_RedirectFormPerFileToMain) ) + .writeLog( C_TAB + 'RedirectFormType: ' + Transform(.n_RedirectFormType) ) + *Databases *!* Changed by: LScheffler 21.02.2021 *!* change date="{^2021-02-21,10:57:00}" @@ -2998,6 +3331,7 @@ Define Class c_foxbin2prg As Session .writeLog( C_TAB + 'extension: ME2 ' + Transform(.c_ME2) ) .writeLog( ) + Endwith && THIS Catch To loEx @@ -3012,7 +3346,32 @@ Define Class c_foxbin2prg As Session Throw Finally - Store Null To lo_Configuration, lo_CFG, loEx + This.l_SingleConfig = NVL(llSetSingleConfig,This.l_SingleConfig) +*!* LScheffler 31.08.2023 more sophisticated control of inheritance for para file + + IF llSetSingleConfig THEN + This.c_SingleConfig_Folder = UPPER(JUSTPATH(tcCFG_File)) + This.c_Foxbin2prg_ConfigFile = lc_Foxbin2prg_ConfigFile + DO CASE + CASE This.n_InhibitInheritance=0 + This.writeLog( '> ' + loLang.C_USING_THIS_SETTINGS_LOC2 ) + CASE This.n_InhibitInheritance=1 + This.writeLog( '> ' + loLang.C_USING_THIS_SETTINGS_LOC3 ) + CASE This.n_InhibitInheritance=2 + This.writeLog( '> ' + loLang.C_USING_THIS_SETTINGS_LOC4 ) + CASE This.n_InhibitInheritance=3 + This.writeLog( '> ' + loLang.C_USING_THIS_SETTINGS_LOC5 ) + ENDCASE + + IF This.n_InhibitInheritance=0 THEN + This.evaluateConfiguration( '', '', '', '', '', '', '', '', This.c_Foxbin2prg_ConfigFile, C_FILETYPE_FILE, lo_CFG) +*In case we run FoxBin2Prg against FoxBin2Prg folder. do not reread + This.n_InhibitInheritance = 1 + + ENDIF &&This.n_InhibitInheritance=0 + ENDIF &&llSetSingleConfig + + Store .Null. To lo_Configuration, lo_CFG, loEx Release tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile ; , lcConfigFile, llExiste_CFG_EnDisco, laConfig, I, lcConfData, lcExt, lcValue, lc_CFG_Path ; @@ -3140,6 +3499,7 @@ Define Class c_foxbin2prg As Session Local lcTableCFG, lnFileCount, laDirFile(1,5), I, lcConfigItem, lcValue lcTableCFG = tc_InputFile + '.CFG' lnFileCount = Adir(laDirFile, lcTableCFG) + to_out_DBF_CFG = .NULL. If lnFileCount = 1 @@ -3267,7 +3627,7 @@ Define Class c_foxbin2prg As Session , loDBF_CFG As CL_DBF_CFG Of 'FOXBIN2PRG.PRG' With This As c_foxbin2prg Of 'FOXBIN2PRG.PRG' - loDBF_CFG = Null + loDBF_CFG = .Null. lcExt = Upper(Justext('.' + tcFileName)) *!* Changed by: LScheffler 13.6.2022 @@ -3309,7 +3669,7 @@ Define Class c_foxbin2prg As Session , lcExt == 'LBX', .n_LBX_Conversion_Support > 0 ; , lcExt == 'MNX', .n_MNX_Conversion_Support > 0 ; , lcExt == 'DBC', .n_DBC_Conversion_Support > 0 ; - , lcExt == 'DBF', Not Isnull(loDBF_CFG) And loDBF_CFG.n_DBF_Conversion_Support > 0 Or .n_DBF_Conversion_Support > 0 ; + , lcExt == 'DBF', Iif(Isnull(loDBF_CFG), .n_DBF_Conversion_Support > 0, loDBF_CFG.n_DBF_Conversion_Support > 0 ) ; , lcExt == 'FKY', .n_FKY_Conversion_Support > 0 ; , lcExt == 'MEM', .n_MEM_Conversion_Support > 0 ; , .F. ) @@ -3330,7 +3690,7 @@ Define Class c_foxbin2prg As Session , loDBF_CFG As CL_DBF_CFG Of 'FOXBIN2PRG.PRG' With This As c_foxbin2prg Of 'FOXBIN2PRG.PRG' - loDBF_CFG = Null + loDBF_CFG = .Null. lcExt = Upper(Justext('.' + tcFileName)) *!* Changed by: LScheffler 13.6.2022 @@ -3373,9 +3733,7 @@ Define Class c_foxbin2prg As Session , lcExt == .c_MN2, .n_MNX_Conversion_Support = 2 ; , lcExt == .c_FK2, .n_FKY_Conversion_Support = 2 ; , lcExt == .c_ME2, .n_MEM_Conversion_Support = 2 ; - , lcExt == .c_DB2, Not Isnull(loDBF_CFG) And Inlist(loDBF_CFG.n_DBF_Conversion_Support, 2, 8) ; - OR (Inlist(.n_DBF_Conversion_Support, 2, 8) ; - AND (Isnull(loDBF_CFG) Or Not Inlist(loDBF_CFG.n_DBF_Conversion_Support, 1, 4))) ; + , lcExt == .c_DB2, Iif(Isnull(loDBF_CFG), Inlist(.n_DBF_Conversion_Support, 2, 8), Inlist(loDBF_CFG.n_DBF_Conversion_Support, 2, 8) ) ; , lcExt == .c_DC2, .n_DBC_Conversion_Support = 2 ; , .F. ) Endwith && THIS @@ -3395,7 +3753,7 @@ Define Class c_foxbin2prg As Session Try With This As c_foxbin2prg Of 'FOXBIN2PRG.PRG' - loDBF_CFG = Null + loDBF_CFG = .Null. lcExt = Upper(Justext('.' + tcFileName)) If '\' $ tcFileName And Inlist(lcExt, .c_DB2, 'DBF') Then @@ -3419,7 +3777,7 @@ Define Class c_foxbin2prg As Session , Inlist(lcExt, .c_MN2, 'MNX'), .n_MNX_Conversion_Support ; , Inlist(lcExt, .c_FK2, 'FKY'), .n_FKY_Conversion_Support ; , Inlist(lcExt, .c_ME2, 'MEM'), .n_MEM_Conversion_Support ; - , Inlist(lcExt, .c_DB2, 'DBF'), Icase( Isnull(loDBF_CFG) Or loDBF_CFG.n_DBF_Conversion_Support = 0, .n_DBF_Conversion_Support, loDBF_CFG.n_DBF_Conversion_Support ) ; + , Inlist(lcExt, .c_DB2, 'DBF'), Iif(Isnull(loDBF_CFG), .n_DBF_Conversion_Support, loDBF_CFG.n_DBF_Conversion_Support ) ; , Inlist(lcExt, .c_DC2, 'DBC'), .n_DBC_Conversion_Support ; , 0 ) @@ -3427,7 +3785,7 @@ Define Class c_foxbin2prg As Session Endwith && THIS Finally - Store Null To loDBF_CFG + Store .Null. To loDBF_CFG Release loDBF_CFG Endtry @@ -3465,7 +3823,8 @@ Define Class c_foxbin2prg As Session * tcBackupLevels (v? IN ) Indica la cantidad de niveles de backup a realizar (por defecto '1') * tcClearUniqueID (v? IN ) Indica si se debe limpiar el UniqueID ('1') o no ('0' ó vacío) * tcOptimizeByFilestamp (v? IN ) Indica si se debe optimizar por filestamp mayor o igual ('1'), solo igual ('2') o no optimizar ('0' ó vacío) -* tcCFG_File (v? IN ) Indica si se debe usar un archivo de configuración distinto al predeterminado +* tcCFG_File (v? IN ) Config file. If a config file is set, the normal chain of inheritance is reset and this file is read atop of the defaults +* Normal inheritance may or may not run, see setting InhibitInheritance *-------------------------------------------------------------------------------------------------------------- Lparameters tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; , toModulo, toEx As Exception, tlRelanzarError, tcOriginalFileName, tcRecompile, tcNoTimestamps ; @@ -3483,7 +3842,7 @@ Define Class c_foxbin2prg As Session , loFrm_Main As frm_main Of 'FOXBIN2PRG.PRG' ; , loDBF_CFG As CL_DBF_CFG Of 'FOXBIN2PRG.PRG' ; , loWSH As WScript.Shell ; - , lnVFPVersion + , lnVFPVersion, lcCFG_File With This As c_foxbin2prg Of 'FOXBIN2PRG.PRG' lc_OldSetNotify = Set("Notify") @@ -3492,7 +3851,7 @@ Define Class c_foxbin2prg As Session loLang = _Screen.o_FoxBin2Prg_Lang loFSO = .o_FSO loWSH = .o_WSH - loCFG = Null + loCFG = .Null. lnPCount = 0 lcInputFile_Type = '' .l_Error = .F. @@ -3522,7 +3881,7 @@ Define Class c_foxbin2prg As Session + 'tcType = "' + tcType + '"' + CR_LF ; + CR_LF ; + loLang.C_ALLOWED_VALUES_ARE_LOC + ': ' + CR_LF ; - + '*, *-, -BIN2PRG, -PRG2BIN, -SHOWMSG, -SIMERR_I0, -SIMERR_I1, -SIMERR_O1' + + '*, *-, -BIN2PRG, -PRG2BIN, -BIN2TEXT, -TEXT2BIN, -SHOWMSG, -SIMERR_I0, -SIMERR_I1, -SIMERR_O1' Otherwise * OK all versions from 900(3504) and up. For VFPA Guys :) @@ -3573,12 +3932,14 @@ Define Class c_foxbin2prg As Session Error 'CFG object: Invalid class. Please, generate it with get_DirSettings()' Endif - .c_Foxbin2prg_ConfigFile = loCFG - .n_CFG_EvaluateFromParam = 1 + .c_Foxbin2prg_ConfigFile = loCFG + .n_CFG_EvaluateFromParam = 1 Else - .c_Foxbin2prg_ConfigFile = Evl( tcCFG_File, .c_Foxbin2prg_ConfigFile ) - .n_CFG_EvaluateFromParam = (Iif(Empty(tcCFG_File), 0, 1)) +*!* LScheffler 30.08.2023: Change name only in Init +* .c_Foxbin2prg_ConfigFile = Evl( tcCFG_File, ) +* .n_CFG_EvaluateFromParam = Iif(Empty(tcCFG_File), 0, 1) + lcCFG_File = IIF(VARTYPE(tcCFG_File)='C' AND !EMPTY(tcCFG_File),tcCFG_File,.F.) Endif *-- Ajusto la ruta si no es absoluta @@ -3594,6 +3955,9 @@ Define Class c_foxbin2prg As Session *-- Ejemplo: "c:\desa\" lcInputFile_Type = C_FILETYPE_DIRECTORY +*!* Case Upper( tcType ) =='-C' Or tcType =='-t' Or Upper( tcType ) =='C' Or tcType =='t' +*!* lcInputFile_Type = C_FILETYPE_QUERYSUPPORT &&C_FILETYPE_CONFIG + Otherwise *-- Ejemplo: "c:\desa\*.scx", "c:\desa\file.ext", (lista de archivos) lcInputFile_Type = C_FILETYPE_FILE @@ -3615,20 +3979,29 @@ Define Class c_foxbin2prg As Session .writeLog( loLang.C_MAIN_EXECUTION_LOC, 2 ) .writeLog( Replicate( '*', 100 ) ) .writeLog( '> ' + loLang.C_EXTERNAL_PARAMETERS_LOC + ':' ) - .writeLog( C_TAB + 'tc_InputFile: ' + Transform( Evl(tc_InputFile, '(empty) -> Will use Default [' + .c_InputFile + ']' ) ) ) - .writeLog( C_TAB + 'tcType: ' + Transform( Evl(lcType, '(empty)' ) ) ) - .writeLog( C_TAB + 'tcTextName: ' + Transform( Evl(tcTextName, '(empty)' ) ) ) - .writeLog( C_TAB + 'tlGenText: ' + Transform( Evl(tlGenText, '(empty)' ) ) ) - .writeLog( C_TAB + 'tcDontShowErrors: ' + Transform( Evl(tcDontShowErrors, '(empty) -> Will use Default [' + Transform(.l_ShowErrors) + ']' ) ) ) - .writeLog( C_TAB + 'tcDebug: ' + Transform( Evl(tcDebug, '(empty) -> Will use Default [' + Transform(.n_Debug) + ']' ) ) ) - .writeLog( C_TAB + 'tcDontShowProgress: ' + Transform( Evl(tcDontShowProgress, '(empty) -> Will use Default [' + Transform(.n_ShowProgressbar) + ']' ) ) ) - .writeLog( C_TAB + 'tlRelanzarError: ' + Transform( Evl(tlRelanzarError, '(empty)' ) ) ) - .writeLog( C_TAB + 'tcOriginalFileName: ' + Transform( Evl(tcOriginalFileName, '(empty) -> Will use Default [' + .c_OriginalFileName + ']' ) ) ) - .writeLog( C_TAB + 'tcRecompile: ' + Transform( Evl(tcRecompile, '(empty) -> Will use Default [' + .c_Recompile + ']' ) ) ) - .writeLog( C_TAB + 'tcNoTimestamps: ' + Transform( Evl(tcNoTimestamps, '(empty) -> Will use Default [' + Transform(.l_NoTimestamps) + ']' ) ) ) - .writeLog( C_TAB + 'tcBackupLevels: ' + Transform( Evl(tcBackupLevels, '(empty) -> Will use Default [' + Transform(.n_ExtraBackupLevels) + ']' ) ) ) - .writeLog( C_TAB + 'tcClearUniqueID: ' + Transform( Evl(tcClearUniqueID, '(empty) -> Will use Default [' + Transform(.l_ClearUniqueID) + ']' ) ) ) - .writeLog( C_TAB + 'tcOptimizeByFilestamp: ' + Transform( Evl(tcOptimizeByFilestamp, '(empty) -> Will use Default [' + Transform(.n_OptimizeByFilestamp) + ']' ) ) ) + If Upper(tcType)=='-C' Or tcType=='-t' ; + OR Upper(tcType)=='C' Or tcType=='t' THEN + .writeLog( C_TAB + 'tcType: ' + Transform( Evl(lcType, '(empty)' ) ) ) + .writeLog( C_TAB + 'tc_OutputFile: ' + Transform( Evl(tc_InputFile, '(empty) -> Will use Default [' + .c_InputFile + ']' ) ) ) + .writeLog( C_TAB + 'tcCFG_File ' + Transform( Evl(tcCFG_File, '(empty)' ) ) ) + .writeLog( C_TAB + 'tcDebug: ' + Transform( Evl(tcDebug, '(empty) -> Will use Default [' + Transform(.n_Debug) + ']' ) ) ) + ELSE &&Upper(tcType)=='-C' Or tcType=='-t' OR Upper(tcType)=='C' Or tcType=='t' + .writeLog( C_TAB + 'tc_InputFile: ' + Transform( Evl(tc_InputFile, '(empty) -> Will use Default [' + .c_InputFile + ']' ) ) ) + .writeLog( C_TAB + 'tcType: ' + Transform( Evl(lcType, '(empty)' ) ) ) + .writeLog( C_TAB + 'tcTextName: ' + Transform( Evl(tcTextName, '(empty)' ) ) ) + .writeLog( C_TAB + 'tlGenText: ' + Transform( Evl(tlGenText, '(empty)' ) ) ) + .writeLog( C_TAB + 'tcDontShowErrors: ' + Transform( Evl(tcDontShowErrors, '(empty) -> Will use Default [' + Transform(.l_ShowErrors) + ']' ) ) ) + .writeLog( C_TAB + 'tcDebug: ' + Transform( Evl(tcDebug, '(empty) -> Will use Default [' + Transform(.n_Debug) + ']' ) ) ) + .writeLog( C_TAB + 'tcDontShowProgress: ' + Transform( Evl(tcDontShowProgress, '(empty) -> Will use Default [' + Transform(.n_ShowProgressbar) + ']' ) ) ) + .writeLog( C_TAB + 'tlRelanzarError: ' + Transform( Evl(tlRelanzarError, '(empty)' ) ) ) + .writeLog( C_TAB + 'tcOriginalFileName: ' + Transform( Evl(tcOriginalFileName, '(empty) -> Will use Default [' + .c_OriginalFileName + ']' ) ) ) + .writeLog( C_TAB + 'tcRecompile: ' + Transform( Evl(tcRecompile, '(empty) -> Will use Default [' + .c_Recompile + ']' ) ) ) + .writeLog( C_TAB + 'tcNoTimestamps: ' + Transform( Evl(tcNoTimestamps, '(empty) -> Will use Default [' + Transform(.l_NoTimestamps) + ']' ) ) ) + .writeLog( C_TAB + 'tcBackupLevels: ' + Transform( Evl(tcBackupLevels, '(empty) -> Will use Default [' + Transform(.n_ExtraBackupLevels) + ']' ) ) ) + .writeLog( C_TAB + 'tcClearUniqueID: ' + Transform( Evl(tcClearUniqueID, '(empty) -> Will use Default [' + Transform(.l_ClearUniqueID) + ']' ) ) ) + .writeLog( C_TAB + 'tcOptimizeByFilestamp: ' + Transform( Evl(tcOptimizeByFilestamp, '(empty) -> Will use Default [' + Transform(.n_OptimizeByFilestamp) + ']' ) ) ) + .writeLog( C_TAB + 'tcCFG_File ' + Transform( IIF(VARTYPE(tcCFG_File)='O' AND !ISNULL(tcCFG_File),'(object)',Evl(tcCFG_File, '(empty)' ) ) ) ) + ENDIF &&Upper(tcType)=='-C' Or tcType=='-t' OR Upper(tcType)=='C' Or tcType=='t' .writeLog( ) *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL @@ -3637,7 +4010,7 @@ Define Class c_foxbin2prg As Session *!* change date="{^2021-03-09,08:06:00}" * log settings for tcCFG_File - cfg as object .evaluateConfiguration( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; - , @tcClearUniqueID, @tcOptimizeByFilestamp, @tc_InputFile, @lcInputFile_Type, , Vartype(tcCFG_File) = "O" ) + , @tcClearUniqueID, @tcOptimizeByFilestamp, @tc_InputFile, @lcInputFile_Type, , Vartype(tcCFG_File) = "O", lcCFG_File) *!* /Changed by: LScheffler 09.3.2021 *!* Changed by: LScheffler 04.3.2021 @@ -3646,31 +4019,68 @@ Define Class c_foxbin2prg As Session * allow to import only the class to file.VCX with n_RedirectClassType = 2 * n_RedirectClassType = 0 will import all classes of file.VCX (as just handing file.vc2) * n_RedirectClassType = 1 will import the class to single lib file[.baseclass].class.VCX + lcExt = JUSTEXT( m.tc_InputFile ) + Do Case Case ( Lower(m.lcType)=='-c' Or Lower(m.lcType)=='c' ) * not handled Case ( m.lcType=='-t' Or m.lcType=='t' ) * not handled - Case .n_RedirectClassType # 2 + CASE lcExt==This.c_VC2 OR lcExt=="VCX" +*ClassLib + DO Case + Case .n_RedirectClassType # 2 * not handled - Case !Empty(.c_ClassToConvert) + Case !Empty(.c_ClassToConvert) * not otherwise - Case .n_UseClassPerFile = 0 + Case .n_UseClassPerFile = 0 * not handled - Case Occurs('.',m.tc_InputFile) > .n_UseClassPerFile + Case Occurs('.',m.tc_InputFile) > .n_UseClassPerFile * we must have more dots then UseClassPerFile, because there is an extension *class - .c_ClassToConvert = Lower( Justext( Juststem( m.tc_InputFile ) ) ) + .c_ClassToConvert = Lower( Justext( Juststem( m.tc_InputFile ) ) ) *remove class - tc_InputFile = Lower( Justpath( m.tc_InputFile ) + '\' + Juststem( Juststem( m.tc_InputFile ) ) + '.' + Justext( m.tc_InputFile ) ) + tc_InputFile = Lower( Justpath( m.tc_InputFile ) + '\' + Juststem( Juststem( m.tc_InputFile ) ) + '.' + Justext( m.tc_InputFile ) ) *remove baseclass - If .n_UseClassPerFile = 2 + If .n_UseClassPerFile = 2 *remove baseclass - tc_InputFile = Lower( Justpath( m.tc_InputFile ) + '\' + Juststem( Juststem( m.tc_InputFile ) ) + '.' + Justext( m.tc_InputFile ) ) - Endif + tc_InputFile = Lower( Justpath( m.tc_InputFile ) + '\' + Juststem( Juststem( m.tc_InputFile ) ) + '.' + Justext( m.tc_InputFile ) ) + Endif * count anything then -BIN2PRG as import - .c_ClassOperationType = Iif( Atc('-BIN2PRG','-'+tcType) > 0 , 'E', 'I') + .c_ClassOperationType = Iif( Atc('-BIN2PRG','-'+tcType) > 0 OR Atc('-BIN2TEXT','-'+tcType) > 0, 'E', 'I') + + Otherwise +* not handled + Endcase + + CASE lcExt==This.c_SC2 OR lcExt=="SCX" +*Form + DO Case + Case .n_RedirectFormType # 2 +* not handled + Case !Empty(.c_ClassToConvert) +* not otherwise + Case .n_UseFormPerFile = 0 +* not handled + Case Occurs('.',m.tc_InputFile) > .n_UseFormPerFile +* we must have more dots then UseClassPerFile, because there is an extension + +*Form name + .c_ClassToConvert = Lower( Justext( Juststem( m.tc_InputFile ) ) ) +*remove obkject + tc_InputFile = Lower( Justpath( m.tc_InputFile ) + '\' + Juststem( Juststem( m.tc_InputFile ) ) + '.' + Justext( m.tc_InputFile ) ) +*remove baseclass + If .n_UseFormPerFile = 2 +*remove baseclass + tc_InputFile = Lower( Justpath( m.tc_InputFile ) + '\' + Juststem( Juststem( m.tc_InputFile ) ) + '.' + Justext( m.tc_InputFile ) ) + Endif +* count anything then -BIN2PRG as import + .c_ClassOperationType = Iif( Atc('-BIN2PRG','-'+tcType) > 0 OR Atc('-BIN2TEXT','-'+tcType) > 0, 'E', 'I') + + Otherwise +* not handled + Endcase Otherwise * not handled @@ -3682,16 +4092,32 @@ Define Class c_foxbin2prg As Session * En el caso de importar, debo cambiar la sintaxis de tc_InputFile para poder usar * la conversión existente de clase vc2. * Esto deja un archivo con sintaxis "classlib.vcx::classname::import" en "classlib.classname.vc2" - If .n_UseClassPerFile = 2 - tc_InputFile = Forceext(tc_InputFile, '') + '.*.' + .c_ClassToConvert + '.' + .c_VC2 + IF .ATC(lcExt,c_VC2,"VCX") + If .n_UseClassPerFile = 2 + tc_InputFile = Forceext(tc_InputFile, '') + '.*.' + .c_ClassToConvert + '.' + .c_VC2 + + If Adir(laFiles, tc_InputFile) = 1 + tc_InputFile = Fullpath( laFiles(1,1), tc_InputFile ) + Endif + + Else && Asumo .n_UseClassPerFile = 1 + tc_InputFile = Forceext(tc_InputFile, '') + '.' + .c_ClassToConvert + '.' + .c_VC2 - If Adir(laFiles, tc_InputFile) = 1 - tc_InputFile = Fullpath( laFiles(1,1), tc_InputFile ) Endif + Endif - Else && Asumo .n_UseClassPerFile = 1 - tc_InputFile = Forceext(tc_InputFile, '') + '.' + .c_ClassToConvert + '.' + .c_VC2 + IF .ATC(lcExt,c_SC2,"SCX") + If .n_UseFormPerFile = 2 + tc_InputFile = Forceext(tc_InputFile, '') + '.*.' + .c_ClassToConvert + '.' + .c_VC2 + If Adir(laFiles, tc_InputFile) = 1 + tc_InputFile = Fullpath( laFiles(1,1), tc_InputFile ) + Endif + + Else && Asumo .n_UseFormPerFile = 1 + tc_InputFile = Forceext(tc_InputFile, '') + '.' + .c_ClassToConvert + '.' + .c_VC2 + + Endif Endif Endif @@ -3708,12 +4134,14 @@ Define Class c_foxbin2prg As Session * added option to create config files Case ( m.lcType=='-t' Or m.lcType=='t' ) And ( Vartype( m.tc_InputFile )='C' And !Empty( m.tc_InputFile ) ) loLang = _Screen.o_FoxBin2Prg_Lang - Strtofile( Strtran( Strtran( '*' + m.loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_tab_cfg, 0h0D0A, 0h0D0A + '*'), 0h0D0A + '*' + 0h0D0A, 0h0D0A0D0A), m.tc_InputFile ) + Strtofile( Strtran( Strtran( '*' + m.loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_tab_cfg, CR_LF, CR_LF + '*'), CR_LF + '*' + CR_LF, CR_LF+CR_LF), m.tc_InputFile ) + .writeLog_Flush() Case ( m.lcType=='-c' Or m.lcType=='c' ) tc_InputFile = Iif( Vartype( m.tc_InputFile )='C' And !Empty( m.tc_InputFile ), m.tc_InputFile, 'FoxBin2Prg._cfg' ) loLang = _Screen.o_FoxBin2Prg_Lang - Strtofile( Strtran( '*' + Strtran( m.loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_cfg, 0h0D0A, 0h0D0A + '*'), 0h0D0A + '*' + 0h0D0A, 0h0D0A0D0A), m.tc_InputFile ) + Strtofile( Strtran( '*' + Strtran( m.loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_cfg, CR_LF, CR_LF + '*'), CR_LF + '*' + CR_LF, CR_LF+CR_LF), m.tc_InputFile ) + .writeLog_Flush() *!* /Changed by: LScheffler 15.2.2021 *!* Changed by: LScheffler 07.3.2021 @@ -3729,7 +4157,7 @@ Define Class c_foxbin2prg As Session lnOptions As Number,; lnOption As Number - lnOptions = 49 + lnOptions = 55 Local Array; laLines(1),; @@ -3737,7 +4165,7 @@ Define Class c_foxbin2prg As Session tc_InputFile = Iif( Vartype( m.tc_InputFile )='C' And !Empty( m.tc_InputFile ), m.tc_InputFile, 'FoxBin2Prg._cfg' ) loLang = _Screen.o_FoxBin2Prg_Lang - lcText = Strtran( '*' + Strtran( m.loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_cfg, 0h0D0A, 0h0D0A + '*'), 0h0D0A + '*' + 0h0D0A, 0h0D0A0D0A) + lcText = Strtran( '*' + Strtran( m.loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_cfg, CR_LF, CR_LF + '*'), CR_LF + '*' + CR_LF, CR_LF+CR_LF) lnLines = Alines(laLines,m.lcText) *now for each option @@ -3768,7 +4196,7 @@ Define Class c_foxbin2prg As Session 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,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 @@ -3818,10 +4246,10 @@ Define Class c_foxbin2prg As Session 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) = ".c_DBF_Conversion_Included" - laOptions(26,3) = 5 + laOptions(26,3) = 6 laOptions(27,1) = "*DBF_Conversion_Excluded:" && n If DBF_Conversion_Support:4, you can specify multiple filemasks: www,fb2p_free.dbf laOptions(27,2) = ".c_DBF_Conversion_Excluded" - laOptions(27,3) = 4 + laOptions(27,3) = 5 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 @@ -3885,9 +4313,27 @@ Define Class c_foxbin2prg As Session laOptions(48,1) = "*extension: me2=" && ext Text file to MEM laOptions(48,2) = ".c_me2" laOptions(48,3) = 2 - laOptions(49,1) = "*BackgroundImage:" && ext Text file to MEM + laOptions(49,1) = "*BackgroundImage:" && Background image laOptions(49,2) = ".c_BackgroundImage" - laOptions(49,3) = 6 + laOptions(49,3) = 7 + laOptions(50,1) = "*InhibitInheritance:" && Inheritance out of config via parameter + laOptions(50,2) = ".n_InhibitInheritance" + laOptions(50,3) = 4 + laOptions(51,1) = "*UseFormSettings:" && 0,1 1=.t. 1=Turns the File per SCX options on, 0 uses the old UseClassPerFile etc settings. + laOptions(51,2) = ".l_UseFormSettings" + laOptions(51,3) = 1 + laOptions(52,1) = "*UseFormPerFile:" && n 0=One library sc2 file, 1=Multiple Form.Obj.sc2 files, 2=Multiple Form.baseclass.Obj.sc2 files + laOptions(52,2) = ".n_UseFormPerFile" + laOptions(52,3) = 0 + laOptions(53,1) = "*RedirectFormPerFileToMain:" && 0,1 1=.t. 0=Don't redirect to Form.sc2, 1=Redirect to file.sc2 when selecting Form.Obj.sc2 + laOptions(53,2) = ".l_RedirectFormPerFileToMain" + laOptions(53,3) = 1 + laOptions(54,1) = "*RedirectFormType:" && 0,1,2 For Formes created with UseFormPerFile>0 in the form Form[.baseclass].Obj.sc2 + laOptions(54,2) = ".n_RedirectFormType" + laOptions(54,3) = 0 + laOptions(55,1) = "*FormPerFileCheck:" && 0,1 1=.t. 0=Don't check Form.Obj.sc2 inclusion, 1=Check Form.Obj.sc2 inclusion + laOptions(55,2) = ".l_FormPerFileCheck" + laOptions(55,3) = 1 For lnOption = 1 To m.lnOptions lnLine = Ascan( m.laLines , m.laOptions( m.lnOption, 1 ), 1, -1, 1, 4) @@ -3895,23 +4341,29 @@ Define Class c_foxbin2prg As Session 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 + Case m.laOptions( m.lnOption, 3 ) = 0 OR m.laOptions( m.lnOption, 3 ) = 4 +*numeric to numeric lcReturn = Padr(' ' + Transform( Evaluate( m.laOptions( m.lnOption, 2 ) ) ), Len(m.lcValue) + 1 ) Case m.laOptions( m.lnOption, 3 ) = 1 +*logic to numeric lcReturn = Padr(' ' + Iif ( Evaluate( m.laOptions( m.lnOption, 2 )), '1', '0' ), Len(m.lcValue) + 1 ) Case m.laOptions( m.lnOption, 3 ) = 2 +*extension to text lcReturn = Padr(Evaluate( m.laOptions( m.lnOption, 2 )), Len(m.lcValue) + 1 ) Case m.laOptions( m.lnOption, 3 ) = 3 +*logic to numeric, inverted lcReturn = Padr(' ' + Iif ( Evaluate( m.laOptions( m.lnOption, 2 )), '0', '1' ), Len(m.lcValue) + 1 ) - Case m.laOptions( m.lnOption, 3 ) = 4 + Case m.laOptions( m.lnOption, 3 ) = 5 +*special, Conversion Exclude for DBF lcReturn = ' ' + Transform( Evaluate( m.laOptions( m.lnOption, 2 ) ) ) lcReturn = Padr( m.lcReturn , Max( Len ( m.lcReturn )+1, Len( m.lcValue ) + 1 ) ) - Case m.laOptions( m.lnOption, 3 ) = 5 + Case m.laOptions( m.lnOption, 3 ) = 6 +*special, Conversion Include for DBF (empty => *) If Empty( Evaluate( m.laOptions( m.lnOption, 2 ) ) ) lcReturn = ' *' @@ -3921,7 +4373,8 @@ Define Class c_foxbin2prg As Session Endif &&Empty( Evaluate( m.laOptions( m.lnOption, 2 ) ) ) lcReturn = Padr( m.lcReturn , Max( Len ( m.lcReturn )+1, Len( m.lcValue ) + 1 ) ) - Case m.laOptions( m.lnOption, 3 ) = 6 + Case m.laOptions( m.lnOption, 3 ) = 7 +*special, Background Image (foxbin2prg.jpg => empty) If Lower( Justfname ( Evaluate( m.laOptions( m.lnOption, 2 ) ) ) ) == 'foxbin2prg.jpg' Then lcReturn = '' @@ -3936,7 +4389,14 @@ Define Class c_foxbin2prg As Session Loop Endcase - laLines( m.lnLine ) = Substr(Strtran(m.laLines( m.lnLine ) , m.lcValue, m.lcReturn), 2 ) + If m.laOptions( m.lnOption, 3 ) = 4 THEN +*numeric to numeric, keep comment + laLines( m.lnLine ) = Strtran(m.laLines( m.lnLine ) , m.lcValue, m.lcReturn) + + ELSE &&m.laOptions( m.lnOption, 3 ) = 4 + laLines( m.lnLine ) = Substr(Strtran(m.laLines( m.lnLine ) , m.lcValue, m.lcReturn), 2 ) + + ENDIF &&m.laOptions( m.lnOption, 3 ) = 4 Endif &&lnLine >0 @@ -3951,11 +4411,13 @@ Define Class c_foxbin2prg As Session 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 + lcText = m.lcText+ m.laLines( m.lnLine )+CR_LF Endfor &&lnLine Strtofile( m.lcText, m.tc_InputFile ) + .writeLog_Flush() + *!* /Changed by: LScheffler 07.3.2021 Case Empty(tc_InputFile) @@ -3972,6 +4434,7 @@ Define Class c_foxbin2prg As Session If (Atc('-INTERACTIVE', ('-' + tcType)) > 0 Or Atc('-?', ('-' + tcType)) > 0 ); AND Atc('-BIN2PRG', ('-' + tcType)) = 0 And Atc('-PRG2BIN', ('-' + tcType)) = 0 ; + AND Atc('-BIN2TEXT','-'+tcType) = 0 And Atc('-TEXT2BIN','-'+tcType) = 0 ; AND lcInputFile_Type == C_FILETYPE_DIRECTORY Then *-- Se seleccionó un directorio y se puede elegir: Bin2Txt, Txt2Bin y Nada .writeLog( loLang.C_INTERACTIVE_DIRECTORY_SELECTION_LOC ) @@ -3989,7 +4452,7 @@ Define Class c_foxbin2prg As Session Endif loFrm_Interactive.Release() - loFrm_Interactive = Null + loFrm_Interactive = .Null. Do Case Case lnConversionOption = 1 && Bin2Txt @@ -4006,6 +4469,7 @@ Define Class c_foxbin2prg As Session *-- Evaluación de FileSpec de entrada Do Case Case Atc('-BIN2PRG', ('-' + tcType)) = 0 And Atc('-PRG2BIN', ('-' + tcType)) = 0 ; + AND Atc('-BIN2TEXT','-'+tcType) = 0 And Atc('-TEXT2BIN','-'+tcType) = 0 ; AND lcInputFile_Type == C_FILETYPE_FILE ; AND ( '*' $ Justext( tc_InputFile ) Or '?' $ Justext( tc_InputFile ) ) @@ -4043,7 +4507,7 @@ Define Class c_foxbin2prg As Session lnFileCount = Adir( laFiles, lcFileSpec, '', 1 ) For I = 1 To lnFileCount - toModulo = Null + toModulo = .Null. lcFile = Forcepath( laFiles(m.I,1), Justpath( lcFileSpec ) ) Do Case @@ -4057,7 +4521,8 @@ Define Class c_foxbin2prg As Session *-- Filespec: "*.PJ2", "*" .evaluate_Full_PJ2(lcFile, tcRecompile, @toModulo, @toEx, tcOriginalFileName, .c_LogFile, tcType) - Case Atc('-BIN2PRG', ('-' + tcType)) > 0 + Case Atc('-BIN2PRG', ('-' + tcType)) > 0; + OR Atc('-BIN2TEXT','-'+tcType) > 0 *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN DIRECTORIO *-- Filespec: "*.*" If .hasSupport_Bin2Prg(lcFile) Then @@ -4076,7 +4541,8 @@ Define Class c_foxbin2prg As Session Endcase Endif - Case Atc('-PRG2BIN', ('-' + tcType)) > 0 + Case Atc('-PRG2BIN', ('-' + tcType)) > 0; + Or Atc('-TEXT2BIN','-'+tcType) > 0 *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN DIRECTORIO *-- Filespec: "*.*" If .hasSupport_Prg2Bin(lcFile) Then @@ -4123,7 +4589,8 @@ Define Class c_foxbin2prg As Session Exit - Case Atc('-BIN2PRG', ('-' + tcType)) > 0 + Case Atc('-BIN2PRG', ('-' + tcType)) > 0; + Or Atc('-BIN2TEXT','-'+tcType) > 0 .writeLog( '> ' + loLang.C_OPTION_LOC + ': BIN2PRG' ) If .n_ShowProgressbar <> 0 And .l_ProcessFiles Then @@ -4153,7 +4620,7 @@ Define Class c_foxbin2prg As Session .get_FilesFromDirectory( tc_InputFile, @laFiles, @lnFileCount ) For I = 1 To lnFileCount - toModulo = Null + toModulo = .Null. lcFile = laFiles(m.I) If Not .hasSupport_Bin2Prg( lcFile ) Or Not Adir(laDirInfo, lcFile) > 0 Then @@ -4192,7 +4659,8 @@ Define Class c_foxbin2prg As Session Endcase - Case Atc('-PRG2BIN', ('-' + tcType)) > 0 + Case Atc('-PRG2BIN', ('-' + tcType)) > 0; + Or Atc('-TEXT2BIN','-'+tcType) > 0 .writeLog( '> ' + loLang.C_OPTION_LOC + ': PRG2BIN' ) If .n_ShowProgressbar <> 0 And .l_ProcessFiles Then @@ -4223,7 +4691,7 @@ Define Class c_foxbin2prg As Session For I = 1 To lnFileCount - toModulo = Null + toModulo = .Null. lcFile = laFiles(m.I) If Not .hasSupport_Prg2Bin( lcFile ) Or Not Adir(laDirInfo, lcFile) > 0 Then @@ -4484,7 +4952,7 @@ Define Class c_foxbin2prg As Session Endif Set Notify &lc_OldSetNotify. - Store Null To loFSO, loWSH, loDBF_CFG + Store .Null. To loFSO, loWSH, loDBF_CFG Release I, lcPath, lcFileSpec, lcFile, laFiles, lnFileCount, lcErrorInfo, lcErrorFile, loEx, loFSO Endtry @@ -4601,7 +5069,7 @@ Define Class c_foxbin2prg As Session Throw Finally - Store Null To loLang + Store .Null. To loLang Release loLang Endtry Endproc @@ -4717,7 +5185,7 @@ Define Class c_foxbin2prg As Session Throw Finally - Store Null To loLang + Store .Null. To loLang Release loLang Endtry Endproc @@ -4807,7 +5275,7 @@ Define Class c_foxbin2prg As Session * Added option for DBC split *-- OPTIMIZACIÓN VC2/SC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS - If Inlist(lcExtension,"SCX","VCX",.c_VC2,.c_SC2); + If Inlist(lcExtension,"VCX",.c_VC2); AND (.n_UseClassPerFile > 0 And .l_RedirectClassPerFileToMain ; OR Not Empty(.c_ClassToConvert)) @@ -4820,7 +5288,7 @@ Define Class c_foxbin2prg As Session lc_BaseFile = Forcepath( Forceext( Juststem( Juststem(.c_InputFile) ), Justext(.c_InputFile)) , Justpath(.c_InputFile) ) Endif - Case .n_UseClassPerFile = 1 And Inlist(lcExtension,.c_VC2,.c_SC2) + Case .n_UseClassPerFile = 1 And Inlist(lcExtension,.c_VC2) If Occurs('.', Juststem(.c_InputFile)) = 0 Then lc_BaseFile = .c_InputFile Else @@ -4832,7 +5300,7 @@ Define Class c_foxbin2prg As Session .c_InputFile = lc_BaseFile Endif ** LScheffler, Problem, Fehler: DC2 hier nicht, das muss anders mit UseFilesPerDBC - Case .n_UseClassPerFile = 2 And Inlist(lcExtension,.c_VC2,.c_SC2) + Case .n_UseClassPerFile = 2 And Inlist(lcExtension,.c_VC2) If Occurs('.', Juststem(.c_InputFile)) = 0 Then lc_BaseFile = .c_InputFile Else @@ -4847,6 +5315,45 @@ Define Class c_foxbin2prg As Session Endcase Endif + If Inlist(lcExtension,"SCX",.c_SC2); + AND (.n_UseFormPerFile > 0 And .l_RedirectFormPerFileToMain ; + OR Not Empty(.c_ClassToConvert)) + + Do Case + + Case .n_RedirectFormType = 1 Or Not Empty(.c_ClassToConvert) && Redireccionar solo esta clase + If Occurs('.', Juststem(.c_InputFile)) = 0 Then + lc_BaseFile = .c_InputFile + Else + lc_BaseFile = Forcepath( Forceext( Juststem( Juststem(.c_InputFile) ), Justext(.c_InputFile)) , Justpath(.c_InputFile) ) + Endif + + Case .n_UseFormPerFile = 1 And Inlist(lcExtension,.c_SC2) + If Occurs('.', Juststem(.c_InputFile)) = 0 Then + lc_BaseFile = .c_InputFile + Else + lc_BaseFile = Forcepath( Forceext( Juststem( Juststem(.c_InputFile) ), Justext(.c_InputFile)) , Justpath(.c_InputFile) ) + Endif + +*-- Verifico si se debe forzar la redirección al archivo principal + If '.' $ Juststem(.c_InputFile) + .c_InputFile = lc_BaseFile + Endif +** LScheffler, Problem, Fehler: DC2 hier nicht, das muss anders mit UseFilesPerDBC + Case .n_UseFormPerFile = 2 And Inlist(lcExtension,.c_SC2) + If Occurs('.', Juststem(.c_InputFile)) = 0 Then + lc_BaseFile = .c_InputFile + Else + lc_BaseFile = Forcepath( Forceext( Juststem( Juststem( Juststem(.c_InputFile) ) ), Justext(.c_InputFile)) , Justpath(.c_InputFile) ) + Endif + +*-- Verifico si se debe forzar la redirección al archivo principal + If '.' $ Juststem(.c_InputFile) + .c_InputFile = lc_BaseFile + Endif + + Endcase + Endif ***************************** *-- OPTIMIZACIÓN DC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS @@ -4951,7 +5458,7 @@ Define Class c_foxbin2prg As Session Case lcExtension = 'DBF' lnFileCount = .get_DBF_Configuration( Forceext(.c_InputFile, 'DBF'), @loDBF_CFG ) - If Not Inlist(.n_DBF_Conversion_Support, 1, 2, 4, 8) + If !Iif(Isnull(loDBF_CFG), Inlist(.n_DBF_Conversion_Support, 1, 2, 4, 8), Inlist(loDBF_CFG.n_DBF_Conversion_Support, 1, 2, 4, 8) ) Error (Textmerge(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) Endif .c_OutputFile = Forceext( .c_InputFile, .c_DB2 ) @@ -5042,9 +5549,9 @@ Define Class c_foxbin2prg As Session .changeFileAttribute( Forceext( .c_InputFile, 'LBT' ), lcForceAttribs ) Case lcExtension = .c_DB2 - If Inlist(.n_DBF_Conversion_Support, 2, 8) Or Adir(laDirFile, Forceext(.c_InputFile, 'DBF') + '.CFG') = 1 Then + lnFileCount = .get_DBF_Configuration( Forceext(.c_InputFile, 'DBF'), @loDBF_CFG ) + If !Iif(Isnull(loDBF_CFG), Inlist(.n_DBF_Conversion_Support, 2, 8), Inlist(loDBF_CFG.n_DBF_Conversion_Support, 2, 8) ) *-- Soporte txt-2-bin habilitado - Else Error (Textmerge(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) Endif .c_OutputFile = Forceext( .c_InputFile, 'DBF' ) @@ -5140,12 +5647,22 @@ Define Class c_foxbin2prg As Session Endif Do Case - Case .n_UseClassPerFile = 0 And .n_OptimizeByFilestamp = 1 And .t_InputFile_TimeStamp < .t_OutputFile_TimeStamp + Case Inlist(lcExtension,"VCX",.c_VC2) AND .n_UseClassPerFile = 0 And .n_OptimizeByFilestamp = 1 And .t_InputFile_TimeStamp < .t_OutputFile_TimeStamp *-- Optimizado: El Origen es anterior al Destino - No hace falta regenerar *.writeLog( '> El archivo de salida [<>] no se regenera porque su timestamp es más nuevo que el de entrada.' ) .writeLog( C_TAB + C_TAB + '* ' + Textmerge(loLang.C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC) ) - Case .n_UseClassPerFile = 0 And .n_OptimizeByFilestamp = 2 And .t_InputFile_TimeStamp = .t_OutputFile_TimeStamp + Case Inlist(lcExtension,"VCX",.c_VC2) AND .n_UseClassPerFile = 0 And .n_OptimizeByFilestamp = 2 And .t_InputFile_TimeStamp = .t_OutputFile_TimeStamp +*-- Optimizado: El Origen es igual al Destino - No hace falta regenerar +*.writeLog( '> El archivo de salida [<>] no se regenera porque su timestamp es igual que el de entrada.' ) + .writeLog( C_TAB + C_TAB + '* ' + Textmerge(loLang.C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC) ) + + Case Inlist(lcExtension,"SCX",.c_SC2) AND .n_UseFormPerFile = 0 And .n_OptimizeByFilestamp = 1 And .t_InputFile_TimeStamp < .t_OutputFile_TimeStamp +*-- Optimizado: El Origen es anterior al Destino - No hace falta regenerar +*.writeLog( '> El archivo de salida [<>] no se regenera porque su timestamp es más nuevo que el de entrada.' ) + .writeLog( C_TAB + C_TAB + '* ' + Textmerge(loLang.C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC) ) + + Case Inlist(lcExtension,"SCX",.c_SC2) AND .n_UseFormPerFile = 0 And .n_OptimizeByFilestamp = 2 And .t_InputFile_TimeStamp = .t_OutputFile_TimeStamp *-- Optimizado: El Origen es igual al Destino - No hace falta regenerar *.writeLog( '> El archivo de salida [<>] no se regenera porque su timestamp es igual que el de entrada.' ) .writeLog( C_TAB + C_TAB + '* ' + Textmerge(loLang.C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC) ) @@ -5213,7 +5730,7 @@ Define Class c_foxbin2prg As Session Unbindevents( loConversor ) Endif - Store Null To loConversor, loFSO + Store .Null. To loConversor, loFSO If lnCodError = 0 And This.l_Error Then This.updateProcessedFile( lnIDInputFile, '', '', 'E1' ) @@ -5232,18 +5749,21 @@ Define Class c_foxbin2prg As Session Procedure get_DirSettings *--------------------------------------------------------------------------------------------------- -* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) -* tcDir (@? IN ) Directorio del que devolver su configuración -* RETORNO (@? OUT) Objeto CFG +* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) +* tcDir (@? IN ) Directorio del que devolver su configuración +* tcDebug (v? IN ) '1' write debug log (posiibly to GETENV("TEMP") ) +* tcCFG_File (v? IN ) Config file. If a config file is set, the normal chain of inheritance is reset and this file is read atop of the defaults +* Normal inheritance may or may not run, see setting InhibitInheritance +* RETORNO (@? OUT) Objeto CFG *--------------------------------------------------------------------------------------------------- - Lparameters tcDir + Lparameters tcDir, tcDebug, tcCFG_File If Not Empty(tcDir) - This.evaluateConfiguration( '', '', '', '', '', '', '', '', tcDir, 'D' ) + This.evaluateConfiguration( '', '', '', tcDebug, '', '', '', '', tcDir, 'D', , , tcCFG_File ) Endif If This.n_CFG_Actual = 0 Then - loCFG = Null + loCFG = .Null. Else loCFG = This.o_Configuration(This.n_CFG_Actual) Endif @@ -5262,12 +5782,14 @@ Define Class c_foxbin2prg As Session lcText = '' *-- Cabecera del PRG e inicio de DEF_CLASS +*!* LScheffler 22.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources, added CPID value TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 *-------------------------------------------------------------------------------------------------------------------------------------------------------- * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- - <> Version="<>" SourceFile="<>" <> (Solo para binarios VFP 9 / Only for VFP 9 binaries) + <> Version="<>" SourceFile="<>" CPID="<>" <> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * ENDTEXT @@ -5487,7 +6009,7 @@ Define Class c_foxbin2prg As Session Throw Finally - loFSO = Null + loFSO = .Null. Release lcPath, lcEXE_CAPS, lcOutputFile, llRelanzarError, lcType, loFSO Endtry @@ -5562,7 +6084,7 @@ Define Class c_foxbin2prg As Session lnCodError = 0 With This As c_foxbin2prg Of 'FOXBIN2PRG.PRG' - Store Null To toModulo + Store .Null. To toModulo lc_OldSetNotify = Set("Notify") Set Notify Off loFSO = .o_FSO @@ -5725,7 +6247,7 @@ Define Class c_foxbin2prg As Session * UNBINDEVENTS( loConversor ) *ENDIF - Store Null To loConversor, loFSO + Store .Null. To loConversor, loFSO *IF lnCodError = 0 AND THIS.l_Error THEN * THIS.updateProcessedFile( lnIDInputFile, '', '', 'E1' ) @@ -5819,7 +6341,7 @@ Define Class c_foxbin2prg As Session Throw Finally -*loFSO = NULL +*loFSO = .Null. Endtry Return @@ -6085,8 +6607,8 @@ Define Class c_foxbin2prg As Session #Define WAIT_TIMEOUT 0x00000102 #Define WAIT_FAILED 0xFFFFFFFF - tcProgFile = Evl(tcProgFile, Null) - tcCmdLine = Evl(tcCmdLine, Null) + tcProgFile = Evl(tcProgFile, .Null.) + tcCmdLine = Evl(tcCmdLine, .Null.) Do Case Case Vartype(tbWaitOnReturn) = "L" @@ -7044,8 +7566,8 @@ Define Class frm_main As Form Thisform.Caption = 'FoxBin2Prg ' + _Screen.c_FB2PRG_EXE_Version + ' - ' + loLang.C_FOXBIN2PRG_SYNTAX_INFO_LOC Endif - Thisform.edt_help.Value = loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC+0h0D0A+; - STRTRAN(loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_cfg,'&'+'&','')+0h0D0A+; + Thisform.edt_help.Value = loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC+CR_LF+; + STRTRAN(loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_cfg,'&'+'&','')+CR_LF+; STRTRAN(loLang.C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_tab_cfg,'&'+'&','') Endif @@ -7163,7 +7685,7 @@ Define Class c_conversor_base As Custom l_ReportSort_Enabled = .T. c_OriginalFileName = '' c_ClaseActual = '' - oFSO = Null + oFSO = .Null. n_Methods_LineNo = 0 && Número de línea del error dentro de "Methods" *** DH 2021-03-04: added cOutputFolder property cOutputFolder = '' @@ -7186,7 +7708,7 @@ Define Class c_conversor_base As Custom * anywhere else it will respect this to, * so it's in the general settings or not -* SET BLOCKSIZE TO 0 + SET BLOCKSIZE TO 0 *!* /Changed by: LScheffler 21.02.2021 @@ -7227,7 +7749,7 @@ Define Class c_conversor_base As Custom This.writeLog( loLang.C_CONVERTER_UNLOAD_LOC ) Endif - This.oFSO = Null + This.oFSO = .Null. Endproc @@ -7363,7 +7885,7 @@ Define Class c_conversor_base As Custom Exit Endif - loObjeto = Null + loObjeto = .Null. Endfor If lnObjeto > 0 Exit @@ -8991,8 +9513,6 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Endfunc - - Procedure analyzeCodeBlock_FoxBin2Prg *------------------------------------------------------ *-- Analiza el bloque @@ -9009,6 +9529,9 @@ Define Class c_conversor_prg_a_bin As c_conversor_base .get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_FB2PRG_META_I, C_FB2PRG_META_F ) toModulo._Version = .get_ValueByName_FromListNamesWithValues( 'Version', 'N', @laPropsAndValues ) toModulo._SourceFile = .get_ValueByName_FromListNamesWithValues( 'SourceFile', 'C', @laPropsAndValues ) +*!* LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + toModulo._CPID = .get_ValueByName_FromListNamesWithValues( 'CPID', 'I', @laPropsAndValues ) Endwith Endif @@ -9042,13 +9565,16 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Procedure createProject - Lparameters tcTableOrCursor && 'TABLE' or 'CURSOR' + Lparameters toProject - Local lcCursorName - tcTableOrCursor = Evl( tcTableOrCursor, 'TABLE' ) - lcCursorName = Icase( tcTableOrCursor = 'TABLE', This.c_OutputFile, 'TABLABIN' ) + Local lcCodepage - Create &tcTableOrCursor. (lcCursorName) ; +*!* LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + lcCodepage = Str(toProject._CPID) + + Create TABLE (This.c_OutputFile) ; + CODEPAGE = &lcCodepage. ; ( Name M ; , Type C(1) ; , Id N(10) ; @@ -9078,9 +9604,9 @@ Define Class c_conversor_prg_a_bin As c_conversor_base , Key C(32) ; , User M ) - If tcTableOrCursor = 'TABLE' Then - Use (This.c_OutputFile) Alias TABLABIN Again Shared - Endif + Use (This.c_OutputFile) Alias TABLABIN Again Shared + + SET NOCPTRANS TO Name,OUTFILE,HomeDir,DEVINFO,SYMBOLS,Object,COMMENTS,RESERVED1,RESERVED2,SCCDATA,User Endproc @@ -9139,13 +9665,16 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Procedure createClasslib - Lparameters tcTableOrCursor && 'TABLE' or 'CURSOR' + Lparameters toModulo - Local lcCursorName - tcTableOrCursor = Evl( tcTableOrCursor, 'TABLE' ) - lcCursorName = Icase( tcTableOrCursor = 'TABLE', This.c_OutputFile, 'TABLABIN' ) + Local lcCodepage - Create &tcTableOrCursor. (lcCursorName) ; +*!* LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + lcCodepage = Str(toModulo._CPID) + + Create TABLE (This.c_OutputFile) ; + CODEPAGE = &lcCodepage. ; ( PLATFORM C(8) ; , UNIQUEID C(10) ; , Timestamp N(10) ; @@ -9170,9 +9699,10 @@ Define Class c_conversor_prg_a_bin As c_conversor_base , RESERVED8 M ; , User M ) - If tcTableOrCursor = 'TABLE' Then - Use (This.c_OutputFile) Alias TABLABIN Again Shared - Endif + Use (This.c_OutputFile) Alias TABLABIN Again Shared + + SET NOCPTRANS TO Class,CLASSLOC,BaseClass,OBJNAME,Parent,PROPERTIES,Protected,METHODS,OBJCODE,OLE,OLE2,; + RESERVED1,RESERVED2,RESERVED3,RESERVED4,RESERVED5,RESERVED6,RESERVED7,RESERVED8,User Endproc @@ -9201,13 +9731,16 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Procedure createForm - Lparameters tcTableOrCursor && 'TABLE' or 'CURSOR' + Lparameters toModulo - Local lcCursorName - tcTableOrCursor = Evl( tcTableOrCursor, 'TABLE' ) - lcCursorName = Icase( tcTableOrCursor = 'TABLE', This.c_OutputFile, 'TABLABIN' ) + Local lcCodepage - Create &tcTableOrCursor. (lcCursorName) ; +*!* LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + lcCodepage = Str(toModulo._CPID) + + Create TABLE (This.c_OutputFile) ; + CODEPAGE = &lcCodepage. ; ( PLATFORM C(8) ; , UNIQUEID C(10) ; , Timestamp N(10) ; @@ -9232,9 +9765,10 @@ Define Class c_conversor_prg_a_bin As c_conversor_base , RESERVED8 M ; , User M ) - If tcTableOrCursor = 'TABLE' Then - Use (This.c_OutputFile) Alias TABLABIN Again Shared - Endif + Use (This.c_OutputFile) Alias TABLABIN Again Shared + + SET NOCPTRANS TO CLASS,CLASSLOC,BASECLASS,OBJNAME,PARENT,PROPERTIES,PROTECTED,METHODS; + ,OBJCODE,OLE,OLE2,RESERVED1,RESERVED2,RESERVED3,RESERVED4,RESERVED5,RESERVED6,RESERVED7,RESERVED8,USER Endproc @@ -9263,13 +9797,19 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Procedure createReport - Lparameters tcTableOrCursor && 'TABLE' or 'CURSOR' - - Local lcCursorName + Lparameters tcTableOrCursor,toReport && 'TABLE' or 'CURSOR' + + + Local lcCursorName,lcCodepage tcTableOrCursor = Evl( tcTableOrCursor, 'TABLE' ) lcCursorName = Icase( tcTableOrCursor = 'TABLE', This.c_OutputFile, 'TABLABIN' ) +*!* LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + lcCodepage = Icase(ISNULL(toReport),Str(Cpcurrent()),Str(toReport._CPID)) + Create &tcTableOrCursor. (lcCursorName) ; + CODEPAGE = &lcCodepage. ; ( 'PLATFORM' C(8) ; , 'UNIQUEID' C(10) ; , 'TIMESTAMP' N(10) ; @@ -9348,20 +9888,27 @@ Define Class c_conversor_prg_a_bin As c_conversor_base If tcTableOrCursor = 'TABLE' Then Use (This.c_OutputFile) Alias TABLABIN Again Shared - Endif + ENDIF + + SET NOCPTRANS TO NAME,EXPR,STYLE,PICTURE,ORDER,COMMENT,TAG,TAG2,FONTFACE,SUPEXPR,USER Endproc Procedure createMenu - Lparameters tcTableOrCursor && 'TABLE' or 'CURSOR' + Lparameters tcTableOrCursor,toMenu && 'TABLE' or 'CURSOR' - Local lcCursorName + Local lcCursorName,lcCodepage tcTableOrCursor = Evl( tcTableOrCursor, 'TABLE' ) lcCursorName = Icase( tcTableOrCursor = 'TABLE', This.c_OutputFile, 'TABLABIN' ) + +*!* LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + lcCodepage = Icase(Isnull(toMenu),Str(Cpcurrent()),Str(toMenu._CPID)) Create &tcTableOrCursor. (lcCursorName) ; + CODEPAGE = &lcCodepage. ; ( 'OBJTYPE' Numeric(2) ; , 'OBJCODE' Numeric(2) ; , 'NAME' Memo ; @@ -9390,7 +9937,10 @@ Define Class c_conversor_prg_a_bin As c_conversor_base If tcTableOrCursor = 'TABLE' Then Use (This.c_OutputFile) Alias TABLABIN Again Shared - Endif + ENDIF + + SET NOCPTRANS TO NAME,PROMPT,COMMAND,MESSAGE,PROCEDURE,SETUP,CLEANUP,KEYNAME,KEYLABEL,SKIPFOR + Endproc @@ -9529,7 +10079,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base *-- Recorrer los métodos With This As c_conversor_prg_a_bin Of foxbin2prg.prg For I = 1 To toClase._Procedure_Count - loProcedure = Null + loProcedure = .Null. loProcedure = toClase._Procedures(m.I) If loProcedure._ProcLine_Count > 0 Then @@ -9575,7 +10125,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Endfor Endwith - loProcedure = Null + loProcedure = .Null. Release toClase, I, X, lcNombreObjeto, loProcedure Return lcMemo Endproc @@ -9597,7 +10147,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base *-- Recorrer los métodos This.updateProgressbar( 'Generating Object Methods for ' + toClase._Nombre + '.' + toObjeto._ObjName + '...', 0, 1, 2 ) For I = 1 To toObjeto._Procedure_Count - loProcedure = Null + loProcedure = .Null. loProcedure = toObjeto._Procedures(m.I) TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 @@ -9615,7 +10165,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base ENDTEXT Endfor - loProcedure = Null + loProcedure = .Null. Release toObjeto, toClase, I, X, lcNombreObjeto, loProcedure Return lcMemo Endproc @@ -9921,7 +10471,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Try Local N, X, lcObjName, loObjeto As CL_OBJETO Of 'FOXBIN2PRG.PRG' - loObjeto = Null + loObjeto = .Null. With This As c_conversor_prg_a_bin Of 'FOXBIN2PRG.PRG' If toClase._AddObject_Count > 0 @@ -9942,7 +10492,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base laObjNames( m.X, 1 ) = loObjeto._Nombre laObjNames( m.X, 2 ) = loObjeto._ZOrder - loObjeto = Null + loObjeto = .Null. Endfor Asort( laObjNames, 2, -1, 0, 1 ) @@ -9982,7 +10532,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Throw Finally - loObjeto = Null + loObjeto = .Null. Release toClase, toFoxBin2Prg, N, X, lcObjName, loObjeto Endtry @@ -10017,7 +10567,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base , loProcedure As CL_PROCEDURE Of 'FOXBIN2PRG.PRG' ; , loLang As CL_LANG Of 'FOXBIN2PRG.PRG' loLang = _Screen.o_FoxBin2Prg_Lang - loProcedure = Null + loProcedure = .Null. If '.' $ tcProcedureAbierto And Vartype(toObjeto) = 'O' And toObjeto._Procedure_Count > 0 loProcedure = toObjeto._Procedures(toObjeto._Procedure_Count) @@ -10075,7 +10625,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Throw Finally - loProcedure = Null + loProcedure = .Null. Release toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ; , taLineasExclusion, tnBloquesExclusion, llEsProcedureDeClase, loProcedure @@ -10127,7 +10677,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base toClase._Ini_Cuerpo = m.I Endif - toObjeto = Null + toObjeto = .Null. lcNombre = Alltrim( Chrtran( Strextract(tcLine, 'ADD OBJECT ', ' AS ', 1, 1), ['"], [] ) ) lcObjName = Justext( '.' + lcNombre ) .updateProgressbar( 'Analyzing Block Add Object ' + toClase._Nombre + '.' + lcObjName + '...', m.I, tnCodeLines, 1 ) @@ -10908,7 +11458,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base llBloqueEncontrado = .T. toClase.l_ObjectMetadataInHeader = .T. - loObjeto = Null + loObjeto = .Null. loObjeto = Createobject('CL_OBJETO') toClase.add_Object( loObjeto ) @@ -10919,7 +11469,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base loObjeto._UniqueID = .get_ValueByName_FromListNamesWithValues( 'UniqueID', 'C', @laPropsAndValues ) Endwith && THIS - loObjeto = Null + loObjeto = .Null. Release toClase, tcLine, laPropsAndValues, lnPropsAndValues_Count, loObjeto Endif @@ -10943,7 +11493,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base *< OLE: Nombre="frm_d.ole_ImageControl2" parent="frm_d" objname="ole_ImageControl2" checksum="4171274922" value="b64-value" /> Local laPropsAndValues(1,2), lnPropsAndValues_Count ; , loOle As CL_OLE Of 'FOXBIN2PRG.PRG' - loOle = Null + loOle = .Null. loOle = Createobject('CL_OLE') With This @@ -10969,7 +11519,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Endfor Endif - loOle = Null + loOle = .Null. Release loOle, laPropsAndValues, lnPropsAndValues_Count Endif @@ -11094,7 +11644,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base toClase._Ini_Cuerpo = m.I Endif - loProcedure = Null + loProcedure = .Null. loProcedure = Createobject("CL_PROCEDURE") loProcedure._Nombre = tcProcName loProcedure._ProcType = tcProcType @@ -11122,7 +11672,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base If lnObjProc = 0 *-- Procedimiento de clase toClase.add_Procedure( loProcedure ) - toObjeto = Null + toObjeto = .Null. Else *-- Procedimiento de objeto toObjeto = toClase._AddObjects( lnObjProc ) @@ -11147,7 +11697,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Throw Finally - Store Null To loProcedure + Store .Null. To loProcedure Release loProcedure, I, lcNombreObjeto, lnObjProc ; , toClase, tc_Comentario, tcProcName, tcProcType, toObjeto Endtry @@ -11228,7 +11778,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Throw Finally - Store Null To loClase + Store .Null. To loClase Release loClase, I ; , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine @@ -11264,9 +11814,11 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Try Local I, loEx As Exception ; , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed, llEXTERNAL_CLASS_Completed ; - , lc_Comentario, lcProcedureAbierto, lcLine ; - , loClase As CL_CLASE Of 'FOXBIN2PRG.PRG' - + , lc_Comentario, lcProcedureAbierto, lcLine, lcExtension ; + , loClase As CL_CLASE Of 'FOXBIN2PRG.PRG',; + ln_UseXPerFile,; + ll_RedirectXPerFileToMain + With This As c_conversor_prg_a_bin Of 'FOXBIN2PRG.PRG' Store '' To lcProcedureAbierto @@ -11274,10 +11826,23 @@ Define Class c_conversor_prg_a_bin As c_conversor_base If tnCodeLines > 1 - If toFoxBin2Prg.n_UseClassPerFile > 0 And toFoxBin2Prg.l_RedirectClassPerFileToMain - Else + lcExtension = Upper( Justext(toFoxBin2Prg.c_InputFile) ) + DO CASE + CASE INLIST(lcExtension,"SCX",toFoxBin2Prg.c_SC2) + ln_UseXPerFile = toFoxBin2Prg.n_UseFormPerFile + ll_RedirectXPerFileToMain = toFoxBin2Prg.l_RedirectFormPerFileToMain + CASE INLIST(lcExtension,"DBC",toFoxBin2Prg.c_DB2) + ln_UseXPerFile = toFoxBin2Prg.n_UseFilesPerDBC + ll_RedirectXPerFileToMain = toFoxBin2Prg.l_RedirectFilePerDBCToMain + OTHERWISE + ln_UseXPerFile = toFoxBin2Prg.n_UseClassPerFile + ll_RedirectXPerFileToMain = toFoxBin2Prg.l_RedirectClassPerFileToMain + + ENDCASE + + IF !( ln_UseXPerFile > 0 And ll_RedirectXPerFileToMain) llEXTERNAL_CLASS_Completed = .T. - Endif + endif *-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE) For I = 1 To tnCodeLines @@ -11322,7 +11887,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Throw Finally - Store Null To loClase + Store .Null. To loClase Release taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo, loClase, I ; , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine @@ -11349,13 +11914,33 @@ Define Class c_conversor_prg_a_bin As c_conversor_base Local toFoxBin2Prg As c_foxbin2prg Of 'FOXBIN2PRG.PRG' #Endif - Local lnItem, I, X, lcClaseExterna - Local loLang As CL_LANG Of 'FOXBIN2PRG.PRG' + Local lnItem, I, X, lcClaseExterna, lcExtension + Local loLang As CL_LANG Of 'FOXBIN2PRG.PRG',; + lcExtension,; + ln_UseXPerFile,; + ll_RedirectXPerFileToMain,; + l_XPerFileCheck + loLang = _Screen.o_FoxBin2Prg_Lang + lcExtension = Upper( Justext(toFoxBin2Prg.c_InputFile) ) + + DO CASE + CASE INLIST(lcExtension,"SCX",toFoxBin2Prg.c_SC2) + ln_UseXPerFile = toFoxBin2Prg.n_UseFormPerFile + ll_XPerFileCheck = toFoxBin2Prg.l_FormPerFileCheck + CASE INLIST(lcExtension,"DBC",toFoxBin2Prg.c_DB2) + ln_UseXPerFile = toFoxBin2Prg.n_UseFilesPerDBC + ll_XPerFileCheck = toFoxBin2Prg.ItemPerDBCCheck + OTHERWISE + ln_UseXPerFile = toFoxBin2Prg.n_UseClassPerFile + ll_XPerFileCheck = toFoxBin2Prg.l_ClassPerFileCheck + + ENDCASE + *-- Verificación de las Clases, si son Externas y se indicó chequearlas Do Case - Case toFoxBin2Prg.n_UseClassPerFile = 1 And toFoxBin2Prg.l_ClassPerFileCheck And Empty(toFoxBin2Prg.c_ClassOperationType) + Case ln_UseXPerFile = 1 And ll_XPerFileCheck And Empty(toFoxBin2Prg.c_ClassOperationType) *-- El ClassPerFile original, con nomenclatura 'Libreria.NombreClase.vc2' For I = 1 To toModulo._ExternalClasses_Count lnItem = 0 @@ -11376,7 +11961,7 @@ Define Class c_conversor_prg_a_bin As c_conversor_base toModulo._Clases(lnItem)._Checked = .T. Endfor - Case toFoxBin2Prg.n_UseClassPerFile = 2 And toFoxBin2Prg.l_ClassPerFileCheck And Empty(toFoxBin2Prg.c_ClassOperationType) + Case ln_UseXPerFile = 2 And ll_XPerFileCheck And Empty(toFoxBin2Prg.c_ClassOperationType) *-- El nuevo ClassPerFile, con nomenclatura 'Libreria.ClaseBase.NombreClase.vc2' For I = 1 To toModulo._ExternalClasses_Count lnItem = 0 @@ -11443,7 +12028,7 @@ Define Class c_conversor_prg_a_vcx As c_conversor_prg_a_bin With This As c_conversor_prg_a_vcx Of 'FOXBIN2PRG.PRG' Store 0 To lnCodError, lnCodeLines Store '' To C_FB2PRG_CODE, lcClassName - Store Null To toModulo + Store .Null. To toModulo loLang = _Screen.o_FoxBin2Prg_Lang toModulo = Createobject('CL_CLASSLIB') @@ -11623,11 +12208,11 @@ Define Class c_conversor_prg_a_vcx As c_conversor_prg_a_bin If Adir( laFiles, toFoxBin2Prg.c_OutputFile, "", 1 ) = 1 Use (toFoxBin2Prg.c_OutputFile) Alias TABLABIN Again Shared Else - .createClasslib() + .createClasslib(toModulo) Endif Else toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - .createClasslib() + .createClasslib(toModulo) Endif .writeBinaryFile( @toModulo, @toFoxBin2Prg, llReplaceClass ) @@ -11643,7 +12228,7 @@ Define Class c_conversor_prg_a_vcx As c_conversor_prg_a_bin Finally Use In (Select("TABLABIN")) - Store Null To loClase + Store .Null. To loClase Release lnCodError, laCodeLines, lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles ; , laLineasExclusion, lnBloquesExclusion, I Endtry @@ -11735,7 +12320,7 @@ Define Class c_conversor_prg_a_vcx As c_conversor_prg_a_bin With This As c_conversor_prg_a_vcx Of 'FOXBIN2PRG.PRG' loLang = _Screen.o_FoxBin2Prg_Lang - Store Null To loFSO, loClase + Store .Null. To loFSO, loClase loFSO = .oFSO *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) @@ -11803,7 +12388,7 @@ Define Class c_conversor_prg_a_vcx As c_conversor_prg_a_bin *-- Recorro las CLASES For X = 1 To 2 For I = 1 To toModulo._Clases_Count - loClase = Null + loClase = .Null. loClase = toModulo._Clases(m.I) *-- El dataenvironment debe estar primero, luego lo demás. @@ -11848,7 +12433,7 @@ Define Class c_conversor_prg_a_vcx As c_conversor_prg_a_bin If Found() Then Error loLang.C_ClassTwice_Header_LOC + ; loLang.C_ClassTwice_Lib_LOC + Justfname( Dbf() ) + ; - loLang.C_ClassTwice_Class_LOC + loClase._ObjName+0h0D0A + loLang.C_ClassTwice_Class_LOC + loClase._ObjName+CR_LF Endif &&FOUND() *!* /Changed by LScheffler 07.12.2021 @@ -11982,7 +12567,7 @@ Define Class c_conversor_prg_a_vcx As c_conversor_prg_a_bin Finally Use In (Select("TABLABIN")) - Store Null To loFSO, loClase + Store .Null. To loFSO, loClase Release lcObjName, I, X, loClase, loFSO Endtry @@ -12020,20 +12605,20 @@ Define Class c_conversor_prg_a_scx As c_conversor_prg_a_bin DoDefault( @toModulo, @toEx, @toFoxBin2Prg ) Try - Local lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ; + Local lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Form, lnFileCount, laFiles(1,5) ; , laLineasExclusion(1), lnBloquesExclusion, I, lnIDInputFile ; , loLang As CL_LANG Of 'FOXBIN2PRG.PRG' With This As c_conversor_prg_a_vcx Of 'FOXBIN2PRG.PRG' Store 0 To lnCodError, lnCodeLines Store '' To C_FB2PRG_CODE - Store Null To toModulo + Store .Null. To toModulo loLang = _Screen.o_FoxBin2Prg_Lang toModulo = Createobject('CL_CLASSLIB') lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles - If toFoxBin2Prg.n_UseClassPerFile > 0 And toFoxBin2Prg.l_RedirectClassPerFileToMain + If toFoxBin2Prg.n_UseFormPerFile > 0 And toFoxBin2Prg.l_RedirectFormPerFileToMain C_FB2PRG_CODE = Filetostr( .c_InputFile ) lnCodeLines = Alines( laCodeLines, C_FB2PRG_CODE ) @@ -12044,11 +12629,11 @@ Define Class c_conversor_prg_a_scx As c_conversor_prg_a_bin .updateProgressbar( 'Loading Code...', 2, lnCodeLines, 1 ) *-- MÁSCARA DE BÚSQUEDA - If toFoxBin2Prg.n_UseClassPerFile = 1 Then + If toFoxBin2Prg.n_UseFormPerFile = 1 Then *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes lcBaseFilename = Juststem( Juststem(.c_InputFile) ) lcInputFile = Addbs( Justpath(.c_InputFile) ) + lcBaseFilename + '.*.' + Justext(.c_InputFile) - Else && toFoxBin2Prg.n_UseClassPerFile = 2 + Else && toFoxBin2Prg.n_UseFormPerFile = 2 *-- Esto crea la máscara de búsqueda "Database.*.*.ext" para encontrar las partes *-- con la sintaxis "Database.MemberType.MemberName.ext" lcBaseFilename = Juststem( Juststem( Juststem(.c_InputFile) ) ) @@ -12059,39 +12644,39 @@ Define Class c_conversor_prg_a_scx As c_conversor_prg_a_bin Asort( laFiles, 1, 0, 0, 1) For I = 1 To lnFileCount - If toFoxBin2Prg.n_UseClassPerFile = 1 Then - lcInputFile_Class = Forcepath( Juststem( laFiles(m.I,1) ), Justpath( .c_InputFile ) ) + '.' + Justext( .c_InputFile ) - lcClassName = Lower( Getwordnum( Justfname( lcInputFile_Class ), 2, '.' ) ) + If toFoxBin2Prg.n_UseFormPerFile = 1 Then + lcInputFile_Form = Forcepath( Juststem( laFiles(m.I,1) ), Justpath( .c_InputFile ) ) + '.' + Justext( .c_InputFile ) + lcFormName = Lower( Getwordnum( Justfname( lcInputFile_Form ), 2, '.' ) ) *-- Verificación de las Clases, si son Externas y se indicó chequearlas - If toFoxBin2Prg.l_ClassPerFileCheck And Empty(toFoxBin2Prg.c_ClassOperationType) ; - AND Ascan( toModulo._ExternalClasses , lcClassName, 1, 0, 1, 1+2+4 ) = 0 - .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) - .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + If toFoxBin2Prg.l_FormPerFileCheck And Empty(toFoxBin2Prg.c_ClassOperationType) ; + AND Ascan( toModulo._ExternalClasses , lcFormName, 1, 0, 1, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Form + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Form + ']' ) Loop && Salteo esta clase Endif - Else && toFoxBin2Prg.n_UseClassPerFile = 2 - lcInputFile_Class = Forcepath( Juststem( laFiles(m.I,1) ), Justpath( .c_InputFile ) ) + '.' + Justext( .c_InputFile ) - lcClassName = Lower( Getwordnum( Justfname( lcInputFile_Class ), 2, '.' ) + '.' + Getwordnum( Justfname( lcInputFile_Class ), 3, '.' ) ) + Else && toFoxBin2Prg.n_UseFormPerFile = 2 + lcInputFile_Form = Forcepath( Juststem( laFiles(m.I,1) ), Justpath( .c_InputFile ) ) + '.' + Justext( .c_InputFile ) + lcFormName = Lower( Getwordnum( Justfname( lcInputFile_Form ), 2, '.' ) + '.' + Getwordnum( Justfname( lcInputFile_Form ), 3, '.' ) ) *-- Verificación de las Clases, si son Externas y se indicó chequearlas - If toFoxBin2Prg.l_ClassPerFileCheck And Empty(toFoxBin2Prg.c_ClassOperationType) ; - AND Ascan( toModulo._ExternalClasses , lcClassName, 1, 0, 2, 1+2+4 ) = 0 - .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) - .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Class + ']' ) + If toFoxBin2Prg.l_FormPerFileCheck And Empty(toFoxBin2Prg.c_ClassOperationType) ; + AND Ascan( toModulo._ExternalClasses , lcFormName, 1, 0, 2, 1+2+4 ) = 0 + .writeLog( C_TAB + '- ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Form + ']' ) + .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC + ' [' + lcInputFile_Form + ']' ) Loop && Salteo esta clase Endif Endif - .writeLog( C_TAB + C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + Justfname( lcInputFile_Class ) ) + .writeLog( C_TAB + C_TAB + '+ ' + loLang.C_INCLUDING_CLASS_LOC + ' ' + Justfname( lcInputFile_Form ) ) *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) - If toFoxBin2Prg.addProcessedFile( lcInputFile_Class, 'I', 'P1', 'E0', 'S1', 'X1' ) Then + If toFoxBin2Prg.addProcessedFile( lcInputFile_Form, 'I', 'P1', 'E0', 'S1', 'X1' ) Then toFoxBin2Prg.updateProcessedFile() Endif - toFoxBin2Prg.normalizeFileCapitalization( .T., lcInputFile_Class ) - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + Filetostr( lcInputFile_Class ) + toFoxBin2Prg.normalizeFileCapitalization( .T., lcInputFile_Form ) + C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + Filetostr( lcInputFile_Form ) Endfor lnCodeLines = Alines( laCodeLines, C_FB2PRG_CODE ) @@ -12136,7 +12721,7 @@ Define Class c_conversor_prg_a_scx As c_conversor_prg_a_bin toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( 'Generating Binary...', 0, lnCodeLines, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - .createForm() + .createForm(toModulo) .writeBinaryFile( @toModulo, @toFoxBin2Prg ) Endwith && THIS @@ -12150,7 +12735,7 @@ Define Class c_conversor_prg_a_scx As c_conversor_prg_a_bin Finally Use In (Select("TABLABIN")) - Release lnCodError, laCodeLines, lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles ; + Release lnCodError, laCodeLines, lnCodeLines, lcInputFile, lcInputFile_Form, lnFileCount, laFiles ; , laLineasExclusion, lnBloquesExclusion, I Endtry @@ -12257,7 +12842,7 @@ Define Class c_conversor_prg_a_scx As c_conversor_prg_a_bin *-- Recorro las CLASES For X = 1 To 2 For I = 1 To toModulo._Clases_Count - loClase = Null + loClase = .Null. loClase = toModulo._Clases(m.I) *-- El dataenvironment debe estar primero, luego lo demás. @@ -12396,7 +12981,7 @@ Define Class c_conversor_prg_a_scx As c_conversor_prg_a_bin Finally Use In (Select("TABLABIN")) - Store Null To loClase, loEx + Store .Null. To loClase, loEx Release lcObjName, lnCodError, I, X, loClase Endtry @@ -12446,7 +13031,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin With This As c_conversor_prg_a_pjx Of 'FOXBIN2PRG.PRG' Store 0 To lnCodeLines - Store Null To toModulo + Store .Null. To toModulo lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles If Not toFoxBin2Prg.l_ProcessFiles Then @@ -12483,7 +13068,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( 'Generating Binary...', 2, 2, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - .createProject() + .createProject(toProject) .writeBinaryFile( @toProject, @toFoxBin2Prg ) Endwith && THIS @@ -12519,7 +13104,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin , loFile As CL_PROJ_FILE Of 'FOXBIN2PRG.PRG' With This As c_conversor_prg_a_pjx Of 'FOXBIN2PRG.PRG' - Store Null To loFile, loServerHead + Store .Null. To loFile, loServerHead toProject._HomeDir = Chrtran( toProject._HomeDir, ['], [] ) toProject._SccData = Chr(3) + Chr(0) + Chr(1) + Replicate( Chr(0), 651 ) @@ -12634,7 +13219,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin Finally Use In (Select("TABLABIN")) - Store Null To loFile, loServerHead + Store .Null. To loFile, loServerHead Release loFile, loServerHead Endtry @@ -12782,7 +13367,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin Case Upper( Left( tcLine, 5 ) ) == '.ADD(' * loFile: NAME,TYPE,EXCLUDE,COMMENTS tcLine = Chrtran( tcLine, ["] + '[]', "'''" ) && Convierto "[] en ' - Store Null To loFile + Store .Null. To loFile loFile = Createobject('CL_PROJ_FILE') loFile._Name = Alltrim( Strextract( tcLine, ['], ['] ) ) @@ -12822,7 +13407,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin Throw Finally - Store Null To loFile + Store .Null. To loFile Release toProject, tcLine, taCodeLines, I, tnCodeLines ; , lcComment, lcMetadatos, luValor, laPropsAndValues, lnPropsAndValues_Count, loFile Endtry @@ -12900,7 +13485,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin If Left( tcLine, Len(C_SRV_HEAD_I) ) == C_SRV_HEAD_I llBloqueEncontrado = .T. - Store Null To loServerHead + Store .Null. To loServerHead loServerHead = toProject._ServerHead With This As c_conversor_prg_a_pjx Of 'FOXBIN2PRG.PRG' @@ -12932,7 +13517,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin Throw Finally - Store Null To loServerHead + Store .Null. To loServerHead Release loServerHead Endtry @@ -12960,7 +13545,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin If Left( tcLine, Len(C_SRV_DATA_I) ) == C_SRV_DATA_I llBloqueEncontrado = .T. - Store Null To loServerData, loServerHead + Store .Null. To loServerData, loServerHead loServerHead = toProject._ServerHead loServerData = loServerHead.getServerDataObject() @@ -12994,7 +13579,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin Throw Finally - Store Null To loServerData, loServerHead + Store .Null. To loServerData, loServerHead Release loServerHead, loServerData Endtry @@ -13022,7 +13607,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin If Left( tcLine, Len(C_FILE_CMTS_I) ) == C_FILE_CMTS_I llBloqueEncontrado = .T. - loFile = Null + loFile = .Null. With This As c_conversor_prg_a_pjx Of 'FOXBIN2PRG.PRG' For I = m.I + 1 To tnCodeLines @@ -13041,7 +13626,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin lcComment = Alltrim( Chrtran( Strextract( tcLine, "=", "", 1, 2 ), ['], [] ) ) loFile = toProject( lcFile ) loFile._Comments = lcComment - loFile = Null + loFile = .Null. Endcase Endfor Endwith && THIS @@ -13057,7 +13642,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin Throw Finally - loFile = Null + loFile = .Null. Release lcFile, lcComment, loFile Endtry @@ -13085,7 +13670,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin If Left( tcLine, Len(C_FILE_EXCL_I) ) == C_FILE_EXCL_I llBloqueEncontrado = .T. - loFile = Null + loFile = .Null. With This As c_conversor_prg_a_pjx Of 'FOXBIN2PRG.PRG' For I = m.I + 1 To tnCodeLines @@ -13104,7 +13689,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin llExclude = Evaluate( Alltrim( Chrtran( Strextract( tcLine, "=", "", 1, 2 ), ['], [] ) ) ) loFile = toProject( lcFile ) loFile._Exclude = llExclude - loFile = Null + loFile = .Null. Endcase Endfor Endwith && THIS @@ -13120,7 +13705,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin Throw Finally - loFile = Null + loFile = .Null. Release lcFile, llExclude, loFile Endtry @@ -13148,7 +13733,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin If Left( tcLine, Len(C_FILE_TXT_I) ) == C_FILE_TXT_I llBloqueEncontrado = .T. - loFile = Null + loFile = .Null. With This As c_conversor_prg_a_pjx Of 'FOXBIN2PRG.PRG' For I = m.I + 1 To tnCodeLines @@ -13167,7 +13752,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin lcType = Alltrim( Chrtran( Strextract( tcLine, "=", "", 1, 2 ), ['], [] ) ) loFile = toProject( lcFile ) loFile._Type = lcType - loFile = Null + loFile = .Null. Endcase Endfor Endwith && THIS @@ -13183,7 +13768,7 @@ Define Class c_conversor_prg_a_pjx As c_conversor_prg_a_bin Throw Finally - loFile = Null + loFile = .Null. Release lcFile, lcType, loFile Endtry @@ -13292,7 +13877,7 @@ Define Class c_conversor_prg_a_frx As c_conversor_prg_a_bin With This As c_conversor_prg_a_frx Of 'FOXBIN2PRG.PRG' Store 0 To lnCodError, lnCodeLines - Store Null To toReport + Store .Null. To toReport lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles If Not toFoxBin2Prg.l_ProcessFiles Then @@ -13307,7 +13892,7 @@ Define Class c_conversor_prg_a_frx As c_conversor_prg_a_bin C_FB2PRG_CODE = Filetostr( .c_InputFile ) lnCodeLines = Alines( laCodeLines, C_FB2PRG_CODE ) - .createReport('CURSOR') + .createReport('CURSOR',toReport) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte .updateProgressbar( 'Identifying Code Blocks...', 1, 2, 1 ) @@ -13329,7 +13914,7 @@ Define Class c_conversor_prg_a_frx As c_conversor_prg_a_bin toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( 'Generating Binary...', 2, 2, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - .createReport() + .createReport(.F.,toReport) .writeBinaryFile( @toReport, @toFoxBin2Prg ) Endwith && THIS @@ -13368,7 +13953,7 @@ Define Class c_conversor_prg_a_frx As c_conversor_prg_a_bin loLang = _Screen.o_FoxBin2Prg_Lang Select TABLABIN Afields( laFieldTypes ) - loReg = Null + loReg = .Null. *-- addProcessedFile( tcFile, tcInOutType, tcProcessed, tcHasErrors, tcSupported, tcExpanded ) toFoxBin2Prg.addProcessedFile( This.c_OutputFile, 'O', 'P1', 'E0', 'S1', 'X0' ) @@ -13426,7 +14011,7 @@ Define Class c_conversor_prg_a_frx As c_conversor_prg_a_bin Endfor Insert Into TABLABIN From Name loReg - loReg = Null + loReg = .Null. Endfor Use In (Select("TABLABIN")) @@ -13450,7 +14035,7 @@ Define Class c_conversor_prg_a_frx As c_conversor_prg_a_bin Finally Use In (Select("TABLABIN")) - loReg = Null + loReg = .Null. Release loReg, I, lcFieldType, lnFieldLen, lnFieldDec, lnNumCampo, laFieldTypes, luValor Endtry @@ -13487,7 +14072,7 @@ Define Class c_conversor_prg_a_frx As c_conversor_prg_a_bin .c_Type = Upper(Justext(.c_OutputFile)) If tnCodeLines > 1 - toReport = Null + toReport = .Null. toReport = Createobject('CL_REPORT') For I = 1 To tnCodeLines @@ -13660,7 +14245,7 @@ Define Class c_conversor_prg_a_frx As c_conversor_prg_a_bin If Left( tcLine, Len(C_TAG_REPORTE) + 1 ) == '<' + C_TAG_REPORTE + '' llBloqueEncontrado = .T. - loReg = Null + loReg = .Null. With This As c_conversor_prg_a_frx Of 'FOXBIN2PRG.PRG' Scatter Memo Blank Name loReg @@ -13724,7 +14309,7 @@ Define Class c_conversor_prg_a_frx As c_conversor_prg_a_bin Throw Finally - loReg = Null + loReg = .Null. Release lcComment, lcMetadatos, luValor, laPropsAndValues, lnPropsAndValues_Count, loReg Endtry @@ -13771,7 +14356,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin , lnIDInputFile, lnFileCount, laConfig(1), lcConfigItem, lc_DBF_Conversion_Support, lcAlterTable ; , loLang As CL_LANG Of 'FOXBIN2PRG.PRG' ; , lcTempDBC, llImportData ; - , loDBF_CFG As CL_DBF_CFG Of 'FOXBIN2PRG.PRG' + , loDBF_CFG As CL_DBF_CFG Of 'FOXBIN2PRG.PRG', ln_DBF_Conversion_Support Store 0 To lnCodError, lnCodeLines With This As c_conversor_prg_a_dbf Of 'FOXBIN2PRG.PRG' @@ -13781,23 +14366,26 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin *-- If table CFG exists, use it for DBF-specific configuration. FDBOZZO. 2014/06/15 lnFileCount = toFoxBin2Prg.get_DBF_Configuration( Forceext(.c_InputFile, 'DBF'), @loDBF_CFG, .T. ) lcTempDBC = Forcepath( '_FB2P', Justpath(.c_OutputFile) ) + + ln_DBF_Conversion_Support = Iif(Isnull(loDBF_CFG), toFoxBin2Prg.n_DBF_Conversion_Support, loDBF_CFG.n_DBF_Conversion_Support ) Do Case - Case lnFileCount = 1 And loDBF_CFG.n_DBF_Conversion_Support > 0 And Not Inlist(loDBF_CFG.n_DBF_Conversion_Support, 2, 8) + Case Not Inlist(ln_DBF_Conversion_Support, 2, 8) With toFoxBin2Prg Error (Textmerge(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) Endwith - Case lnFileCount = 1 And loDBF_CFG.n_DBF_Conversion_Support > 0 && Implica 2 u 8 - llImportData = (loDBF_CFG.n_DBF_Conversion_Support = 8) +*!* Case lnFileCount = 1 And loDBF_CFG.n_DBF_Conversion_Support > 0 && Implica 2 u 8 +*!* llImportData = (loDBF_CFG.n_DBF_Conversion_Support = 8) - Case toFoxBin2Prg.n_DBF_Conversion_Support = 8 && TXT2BIN (DATA IMPORT) +* Case toFoxBin2Prg.n_DBF_Conversion_Support = 8 && TXT2BIN (DATA IMPORT) + CASE ln_DBF_Conversion_Support = 8 && TXT2BIN (DATA IMPORT) llImportData = .T. - Case toFoxBin2Prg.n_DBF_Conversion_Support <> 2 - With toFoxBin2Prg - Error (Textmerge(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) - Endwith +*!* Case toFoxBin2Prg.n_DBF_Conversion_Support <> 2 +*!* With toFoxBin2Prg +*!* Error (Textmerge(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) +*!* Endwith Otherwise * Asume llImportData = .F. @@ -13880,7 +14468,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin Erase (Forceext(lcTempDBC,'DCX')) Endif - Store Null To loDBF_CFG + Store .Null. To loDBF_CFG Release loDBF_CFG Endtry @@ -13905,7 +14493,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin , lcCreateTable, lcLongDec, lcFieldDef, lcIndex, lcTempDBC, lnDataSessionID, lnSelect With This As c_conversor_prg_a_dbf Of 'FOXBIN2PRG.PRG' - Store Null To loField, loIndex, loDBFUtils + Store .Null. To loField, loIndex, loDBFUtils loDBFUtils = Createobject('CL_DBF_UTILS') Store 0 To lnCodError @@ -13966,8 +14554,8 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin lcFieldDef = lcFieldDef + lcLongDec -*-- Null - lcFieldDef = lcFieldDef + Iif( loField._Null = '.T.', ' NULL', ' NOT NULL' ) +*-- .Null. + lcFieldDef = lcFieldDef + Iif( loField._Null = '.T.', ' .Null.', ' NOT .Null.' ) *-- NoCPTran If loField._NoCPTran = '.T.' @@ -13985,7 +14573,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin Endif Endif - loField = Null + loField = .Null. Endfor lcCreateTable = lcCreateTable + lcFieldDef + ')' @@ -14019,7 +14607,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin Throw Finally - Store Null To loField, loDBFUtils + Store .Null. To loField, loDBFUtils Release I, loField, loDBFUtils ; , lcCreateTable, lcLongDec, lcFieldDef, lcTempDBC, lnDataSessionID, lnSelect @@ -14047,7 +14635,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin , lcIndexFile With This As c_conversor_prg_a_dbf Of 'FOXBIN2PRG.PRG' - Store Null To loIndex + Store .Null. To loIndex Store 0 To lnCodError Store '' To lcIndex Store .Null. To lcIndexFile @@ -14115,7 +14703,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin &lcIndex. Endfor - toFoxBin2Prg.writeLog( Replicate('+', 100) + 0h0D0A ) + toFoxBin2Prg.writeLog( Replicate('+', 100) + CR_LF ) Endif &&toTable._Indexes.COUNT # 0 @@ -14148,7 +14736,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin Throw Finally - Store Null To loIndex + Store .Null. To loIndex Release I, loIndex, lcIndex, ldLastUpdate Endtry @@ -14183,7 +14771,7 @@ Define Class c_conversor_prg_a_dbf As c_conversor_prg_a_bin .c_Type = Upper(Justext(.c_OutputFile)) If tnCodeLines > 1 - toTable = Null + toTable = .Null. toTable = Createobject('CL_DBF_TABLE') For I = 1 To tnCodeLines @@ -14264,7 +14852,7 @@ Define Class c_conversor_prg_a_dbc As c_conversor_prg_a_bin , loLang As CL_LANG Of 'FOXBIN2PRG.PRG' Store 0 To lnCodError, lnCodeLines, lnFileCount Store '' To lcLine, laLines, laCodeLines, lcBaseFilename, lcMemberType, lcLastMemberType, lcMemberName, lcInputFile - Store Null To loReg, toDatabase + Store .Null. To loReg, toDatabase With This As c_conversor_prg_a_dbc Of 'FOXBIN2PRG.PRG' loLang = _Screen.o_FoxBin2Prg_Lang @@ -14351,7 +14939,7 @@ Define Class c_conversor_prg_a_dbc As c_conversor_prg_a_bin Endif *-- Verificación de los Miembros, si son Externos y se indicó chequearlos - If toFoxBin2Prg.l_ClassPerFileCheck And Empty(toFoxBin2Prg.c_ClassOperationType) ; + If toFoxBin2Prg.l_ItemPerDBCCheck And Empty(toFoxBin2Prg.c_ClassOperationType) ; AND Ascan( toDatabase._ExternalClasses, lcMemberType + '.' + lcMemberName, 1, 0, 1, 1+2+4 ) = 0 .writeLog( C_TAB + '- ' + loLang.C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC + ' [' + lcInputFile_Class + ']' ) .writeErrorLog( C_TAB + '- ' + loLang.C_WARNING_LOC + ' ' + loLang.C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC + ' [' + lcInputFile_Class + ']' ) @@ -14606,7 +15194,7 @@ Define Class c_conversor_prg_a_dbc As c_conversor_prg_a_bin Throw Finally - Store Null To loClase + Store .Null. To loClase Release taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase, loClase, I ; , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine @@ -14766,6 +15354,7 @@ Define Class c_conversor_prg_a_mnx As c_conversor_prg_a_bin , laLineasExclusion(1), lnBloquesExclusion, lnIDInputFile Store 0 To lnCodError, lnCodeLines Store '' To lcLine + Store .Null. To toMenu With This As c_conversor_prg_a_mnx Of 'FOXBIN2PRG.PRG' lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles @@ -14782,7 +15371,7 @@ Define Class c_conversor_prg_a_mnx As c_conversor_prg_a_bin C_FB2PRG_CODE = Filetostr( .c_InputFile ) lnCodeLines = Alines( laCodeLines, C_FB2PRG_CODE ) - .createMenu('CURSOR') + .createMenu('CURSOR',toMenu ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte .updateProgressbar( 'Identifying Code Blocks...', 1, 2, 1 ) @@ -14804,7 +15393,7 @@ Define Class c_conversor_prg_a_mnx As c_conversor_prg_a_bin toFoxBin2Prg.updateProcessedFile( lnIDInputFile ) .updateProgressbar( 'Generating Binary...', 1, 2, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - .createMenu() + .createMenu(.F.,toMenu ) .writeBinaryFile( @toMenu, @toFoxBin2Prg ) Endwith && THIS @@ -14854,7 +15443,7 @@ Define Class c_conversor_prg_a_mnx As c_conversor_prg_a_bin .c_Type = Upper(Justext(.c_OutputFile)) If tnCodeLines > 1 - toMenu = Null + toMenu = .Null. toMenu = Createobject('CL_MENU') For I = 1 To tnCodeLines @@ -16750,7 +17339,7 @@ Define Class c_conversor_bin_a_prg As c_conversor_base *!* lnOLECount = 0 *!* SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS = 'olecontrol' -*!* loReg = NULL +*!* loReg = .Null. *!* SCATTER MEMO NAME loReg *!* IF toFoxBin2Prg.l_NoTimestamps @@ -16804,7 +17393,7 @@ Define Class c_conversor_bin_a_prg As c_conversor_base *!* THROW *!* FINALLY -*!* loReg = NULL +*!* loReg = .Null. *!* RELEASE loReg *!* ENDTRY @@ -16863,6 +17452,7 @@ Define Class c_conversor_bin_a_prg As c_conversor_base Endif lnBytes = Strtofile( tcCodigo, tcOutputFile ) + This.writeLog( C_TAB + C_TAB + '- ' + loLang.C_FILENAME_LOC + ': ' + tcOutputFile + ' (' + Alltrim(Transform(lnBytes/1024,'######.##')) + '/' + Alltrim(Transform(Len(tcCodigo)/1024,'######.##')) + ' KiB)' ) *THIS.writeLog( '- ' + loLang.C_GENERATED_FILE_SIZE_LOC ) @@ -16976,15 +17566,18 @@ Define Class c_conversor_vcx_a_prg As c_conversor_bin_a_prg , lnMethodCount, lnClassCount, lnStepCount, lnStep Store '' To laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader - Store Null To loRegClass, loRegObj + Store .Null. To loRegClass, loRegObj loLang = _Screen.o_FoxBin2Prg_Lang With This As c_conversor_vcx_a_prg Of 'FOXBIN2PRG.PRG' -*SF 20230804 -*issue #95, [Kestutis Laurinavicius] prevent change ole codepage -*set NOCPTRANS for the vcx - SET NOCPTRANS TO ole - Use (.c_InputFile) Shared Again Noupdate Alias _TABLAORIG + Use (.c_InputFile) Shared Again Noupdate Alias _TABLAORIG + +*LScheffler 20.08.2023 +*issue #96, including issue #95, [KestasL] keep CodePage relavant information for binary sources + toFoxBin2Prg.i_CPID = Cpdbf("_TABLAORIG") + SET NOCPTRANS TO Class,CLASSLOC,BaseClass,OBJNAME,Parent,PROPERTIES,Protected,METHODS,OBJCODE,OLE,OLE2,; + RESERVED1,RESERVED2,RESERVED3,RESERVED4,RESERVED5,RESERVED6,RESERVED7,RESERVED8,User +*/LScheffler 20.08.2023 If toFoxBin2Prg.n_UseClassPerFile = 0 Or Empty(toFoxBin2Prg.c_ClassToConvert) Then *-- Exportar la librería entera a texto @@ -16998,9 +17591,6 @@ Define Class c_conversor_vcx_a_prg As c_conversor_bin_a_prg OR PLATFORM == 'COMMENT ' And Lower(OBJNAME) == toFoxBin2Prg.c_ClassToConvert Endif -*set NOCPTRANS for the cursor - SET NOCPTRANS TO ole -*/SF 20230804 lnStepCount = 7 Use In (Select("_TABLAORIG")) @@ -17046,7 +17636,7 @@ Define Class c_conversor_vcx_a_prg As c_conversor_bin_a_prg lnClassCount = lnClassCount + 1 Dimension laClasses(lnClassCount,3) - loRegClass = Null + loRegClass = .Null. Scatter Memo Name loRegClass *-- Normalización de capitalización y de datos según parametrización @@ -17098,7 +17688,7 @@ Define Class c_conversor_vcx_a_prg As c_conversor_bin_a_prg AND Lower( Alltrim( Getwordnum( TABLABIN.Parent, 1, '.' ) ) ) == Lower(lcObjName) lnObjCount = lnObjCount + 1 - loRegObj = Null + loRegObj = .Null. Scatter Memo Name loRegObj *-- Normalización de capitalización y de datos según parametrización @@ -17132,7 +17722,7 @@ Define Class c_conversor_vcx_a_prg As c_conversor_bin_a_prg loRegObj.UNIQUEID = Alltrim(loRegObj.UNIQUEID) Endif - loRegObj = Null + loRegObj = .Null. Endscan Goto Record (lnRecno) @@ -17193,7 +17783,7 @@ Define Class c_conversor_vcx_a_prg As c_conversor_bin_a_prg FOR Upper( TABLABIN.PLATFORM ) = "WINDOWS" And Not Proper( TABLABIN.RESERVED1 ) == "Class" ; WHILE Lower( Alltrim( Getwordnum( TABLABIN.Parent, 1, '.' ) ) ) == Lower(lcObjName) - loRegObj = Null + loRegObj = .Null. Scatter Memo Name loRegObj *-- Normalización de capitalización y de datos según parametrización @@ -17310,7 +17900,7 @@ Define Class c_conversor_vcx_a_prg As c_conversor_bin_a_prg Finally Use In (Select("TABLABIN")) Use In (Select("_TABLAORIG")) - Store Null To loRegClass, loRegObj + Store .Null. To loRegClass, loRegObj Release toModulo, toEx, toFoxBin2Prg ; , lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods, laCode, laProtected, lnLen, lnObjCount ; , laPropsAndValues, laPropsAndComments, lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle ; @@ -17357,19 +17947,21 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg , lnMethodCount, lnClassCount, lnStepCount, lnStep Store '' To laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader - Store Null To loRegClass, loRegObj + Store .Null. To loRegClass, loRegObj loLang = _Screen.o_FoxBin2Prg_Lang With This As c_conversor_scx_a_prg Of 'FOXBIN2PRG.PRG' Use (.c_InputFile) Shared Again Noupdate Alias _TABLAORIG -*SF 20230804 -*issue #95, [Kestutis Laurinavicius] prevent change ole codepage -*set NOCPTRANS for the scx - SET NOCPTRANS TO ole + +*!* LScheffler 20.08.2023 +*issue #96, including issue #95, [KestasL] keep CodePage relavant information for binary sources + toFoxBin2Prg.i_CPID = Cpdbf("_TABLAORIG") + SET NOCPTRANS TO CLASS,CLASSLOC,BASECLASS,OBJNAME,PARENT,PROPERTIES,PROTECTED,METHODS; + ,OBJCODE,OLE,OLE2,RESERVED1,RESERVED2,RESERVED3,RESERVED4,RESERVED5,RESERVED6,RESERVED7,RESERVED8,USER +*/LScheffler 20.08.2023 + Select _TABLAORIG.*,Recno() regnum From _TABLAORIG Into Cursor TABLABIN Readwrite -*set NOCPTRANS for the cursor - SET NOCPTRANS TO ole -*/SF 20230804 + Use In (Select("_TABLAORIG")) * Issue#15: Ignorar objetos mal definidos @@ -17393,7 +17985,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg Set Order To PARENT_OBJ Goto Record 1 && Class Library Header/Form Header - loRegClass = Null + loRegClass = .Null. Scatter Fields RESERVED8,RESERVED7 Memo Name loRegClass If Not Empty(loRegClass.RESERVED7) Then @@ -17425,7 +18017,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg lnClassCount = lnClassCount + 1 Dimension laClasses(lnClassCount,3) - loRegClass = Null + loRegClass = .Null. Scatter Memo Name loRegClass *-- Normalización de capitalización y de datos según parametrización @@ -17453,7 +18045,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg Endif lnStep = lnStep + 1 - .updateProgressbar( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) + .updateProgressbar( 'Processing Form ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -17461,7 +18053,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg .write_CLASSMETADATA( @loRegClass, @lcCodigo ) - If toFoxBin2Prg.n_UseClassPerFile > 0 Then + If toFoxBin2Prg.n_UseFormPerFile > 0 Then .write_EXTERNAL_CLASS_HEADER( @loRegClass, @toFoxBin2Prg, @lcExternalHeader ) Endif @@ -17471,10 +18063,10 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg lnObjCount = 0 lnRecno = Recno() Locate For Upper( TABLABIN.PLATFORM ) = "WINDOWS" And Lower( Alltrim( Getwordnum( TABLABIN.Parent, 1, '.' ) ) ) == Lower(lcObjName) -*SF 20230804 +*!* LScheffler 04.08.2023 Scan Rest While Upper( TABLABIN.PLATFORM ) = "WINDOWS" And Lower( Alltrim( Getwordnum( TABLABIN.Parent, 1, '.' ) ) ) == Lower(lcObjName) lnObjCount = lnObjCount + 1 - loRegObj = Null + loRegObj = .Null. Scatter Memo Name loRegObj *-- Normalización de capitalización y de datos según parametrización @@ -17508,7 +18100,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg loRegObj.UNIQUEID = Alltrim(loRegObj.UNIQUEID) Endif - loRegObj = Null + loRegObj = .Null. Endscan Goto Record (lnRecno) @@ -17527,7 +18119,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg .write_INCLUDE( @loRegClass, @lcCodigo ) lnStep = lnStep + 1 - .updateProgressbar( 'Processing Class ' + lcObjName + ' > Writing Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + .updateProgressbar( 'Processing Form ' + lcObjName + ' > Writing Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo, @toFoxBin2Prg ) @@ -17535,7 +18127,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg Asort(laObjs, 3, -1, 0, 0) && Orden Alfabético de objetos (del SCAN original) lnStep = lnStep + 1 - .updateProgressbar( 'Processing Class ' + lcObjName + ' > Writing Obtects with Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + .updateProgressbar( 'Processing Form ' + lcObjName + ' > Writing Obtects with Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) For I = 1 To lnObjCount .write_ADD_OBJECTS_WithProperties( laObjs(m.I,1), @lcCodigo, @toFoxBin2Prg ) @@ -17544,7 +18136,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO lnStep = lnStep + 1 - .updateProgressbar( 'Processing Class ' + lcObjName + ' > Getting Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + .updateProgressbar( 'Processing Form ' + lcObjName + ' > Getting Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) Dimension laMethods(1,3), laCode(1) Store '' To laMethods, laCode @@ -17560,7 +18152,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS lnStep = lnStep + 1 - .updateProgressbar( 'Processing Class ' + lcObjName + ' > Getting Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + .updateProgressbar( 'Processing Form ' + lcObjName + ' > Getting Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) lnRecno = Recno() Locate For TABLABIN.PLATFORM = "WINDOWS" And Lower( Alltrim( Getwordnum( TABLABIN.Parent, 1, '.' ) ) ) == Lower(lcObjName) @@ -17571,7 +18163,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg AND ( Inlist( Lower( TABLABIN.BaseClass ), 'dataenvironment' , 'form', 'formset' ) ) ) ; WHILE Lower( Alltrim( Getwordnum( TABLABIN.Parent, 1, '.' ) ) ) == Lower(lcObjName) - loRegObj = Null + loRegObj = .Null. Scatter Memo Name loRegObj *-- Normalización de capitalización y de datos según parametrización @@ -17593,7 +18185,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg Endscan lnStep = lnStep + 1 - .updateProgressbar( 'Processing Class ' + lcObjName + ' > Writing Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + .updateProgressbar( 'Processing Form ' + lcObjName + ' > Writing Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) .write_ALL_OBJECT_METHODS( @lcMethods, @laMethods, @laCode, @lnMethodCount, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; , lnProtected_Count, @toFoxBin2Prg, @lcCodigo ) @@ -17603,7 +18195,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg laClasses(lnClassCount,2) = lcCodigo Endscan - If toFoxBin2Prg.n_UseClassPerFile > 0 Then + If toFoxBin2Prg.n_UseFormPerFile > 0 Then lcExternalHeader = lcExternalHeader + CR_LF Endif @@ -17636,7 +18228,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg *toModulo = lcCodigo Else Do Case - Case toFoxBin2Prg.n_UseClassPerFile = 1 && LibName.ClassName.SC2 + Case toFoxBin2Prg.n_UseFormPerFile = 1 && LibName.ClassName.SC2 .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) For I = 1 To lnClassCount @@ -17645,7 +18237,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) Endfor - Case toFoxBin2Prg.n_UseClassPerFile = 2 && LibName.BaseClass.ClassName.SC2 + Case toFoxBin2Prg.n_UseFormPerFile = 2 && LibName.BaseClass.ClassName.SC2 .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) For I = 1 To lnClassCount @@ -17677,7 +18269,7 @@ Define Class c_conversor_scx_a_prg As c_conversor_bin_a_prg Finally Use In (Select("TABLABIN")) Use In (Select("_TABLAORIG")) - Store Null To loRegClass, loRegObj + Store .Null. To loRegClass, loRegObj Release toModulo, toEx, toFoxBin2Prg ; , lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods, laCode, laProtected, lnLen, lnObjCount ; , laPropsAndValues, laPropsAndComments, lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle ; @@ -17725,7 +18317,7 @@ Define Class c_conversor_pjx_a_prg As c_conversor_bin_a_prg , loLang As CL_LANG Of 'FOXBIN2PRG.PRG' loLang = _Screen.o_FoxBin2Prg_Lang - Store Null To loProject, loReg, loServerHead + Store .Null. To loProject, loReg, loServerHead With This As c_conversor_pjx_a_prg Of 'FOXBIN2PRG.PRG' If toFoxBin2Prg.l_ProcessFiles Then @@ -17869,7 +18461,7 @@ toFoxBin2Prg.n_CheckFileInPath=2 ENDTEXT Endif - loReg = Null + loReg = .Null. Endfor TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -17895,7 +18487,7 @@ toFoxBin2Prg.n_CheckFileInPath=2 THIS.GetPathFromHome(m.loReg.Name, m.lcStr, "lcCurdir + '", "'", toFoxBin2Prg) +; ").Description = '" + loReg.COMMENTS + "'" Endif - loReg = Null + loReg = .Null. Endfor @@ -17915,7 +18507,7 @@ toFoxBin2Prg.n_CheckFileInPath=2 THIS.GetPathFromHome(m.loReg.Name, m.lcStr, "lcCurdir + '", "'", toFoxBin2Prg) +; ").Exclude = .T." Endif - loReg = Null + loReg = .Null. Endfor @@ -17935,7 +18527,7 @@ toFoxBin2Prg.n_CheckFileInPath=2 THIS.GetPathFromHome(m.loReg.Name, m.lcStr, "lcCurdir + '", "'", toFoxBin2Prg) +; ").Type = 'T'" Endif - loReg = Null + loReg = .Null. Endfor @@ -18039,7 +18631,7 @@ toFoxBin2Prg.n_CheckFileInPath=2 Finally Use In (Select("TABLABIN")) - Store Null To loProject, loReg, loServerHead + Store .Null. To loProject, loReg, loServerHead Release toModulo, toEx, toFoxBin2Prg ; , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ; , loProject, loServerHead @@ -18073,10 +18665,17 @@ toFoxBin2Prg.n_CheckFileInPath=2 , loLang As CL_LANG Of 'FOXBIN2PRG.PRG' loLang = _Screen.o_FoxBin2Prg_Lang - Store Null To loProject, loReg, loServerHead, loServerData + Store .Null. To loProject, loReg, loServerHead, loServerData With This As c_conversor_pjx_a_prg Of 'FOXBIN2PRG.PRG' Use (.c_InputFile) Shared Again Noupdate Alias _TABLAORIG + +*!* LScheffler 20.08.2023 +*issue #96, including issue #95, [KestasL] keep CodePage relavant information for binary sources + toFoxBin2Prg.i_CPID = Cpdbf("_TABLAORIG") + SET NOCPTRANS TO Name,OUTFILE,HomeDir,DEVINFO,SYMBOLS,Object,COMMENTS,RESERVED1,RESERVED2,SCCDATA,User +*/LScheffler 20.08.2023 + Select * From _TABLAORIG Into Cursor TABLABIN Use In (Select("_TABLAORIG")) @@ -18108,7 +18707,7 @@ toFoxBin2Prg.n_CheckFileInPath=2 *-- Información de los Servidores definidos If Not Empty(loProject._ServerInfo) loServerHead.parseServerInfo( loProject._ServerInfo ) - loServerHead = Null + loServerHead = .Null. Endif @@ -18139,7 +18738,7 @@ toFoxBin2Prg.n_CheckFileInPath=2 *-- Escaneo el proyecto Scan All For Not Inlist(Type, 'H','W','i' ) - loReg = Null + loReg = .Null. Scatter Fields Name,Type,EXCLUDE,COMMENTS,CPID,Timestamp,Id,OBJREV,User,DEVINFO Memo Name loReg If toFoxBin2Prg.l_NoTimestamps @@ -18186,7 +18785,7 @@ toFoxBin2Prg.n_CheckFileInPath=2 Finally Use In (Select("TABLABIN")) Use In (Select("_TABLAORIG")) - Store Null To loProject, loReg, loServerHead, loServerData + Store .Null. To loProject, loReg, loServerHead, loServerData Release toModulo, toEx, toFoxBin2Prg ; , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ; , loProject, loServerHead, loServerData @@ -18283,7 +18882,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg , loLang As CL_LANG Of 'FOXBIN2PRG.PRG' loLang = _Screen.o_FoxBin2Prg_Lang - Store Null To loProject, loReg, loServerHead, loServerData + Store .Null. To loProject, loReg, loServerHead, loServerData lcStrPJM = Filetostr( This.c_InputFile ) This.updateProgressbar( 'Scanning PJM...', 1, 2, 1 ) @@ -18304,7 +18903,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg ._ProjectHookClass = '' ._ProjectHookLibrary = '' ._SaveCode = Strextract( lcStrPJM, 'SaveCode=', CR_LF ) - ._ServerHead = Null + ._ServerHead = .Null. ._ServerInfo = 'ServerData' ._SourceFile = '' ._TimeStamp = 0 @@ -18360,7 +18959,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg Endwith loServerHead.add_Server( loServerData ) - loServerData = Null + loServerData = .Null. Endif Endfor @@ -18369,7 +18968,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg *-- Escaneo el proyecto For I = 1 To Alines( laLines, Strextract( lcStrPJM, '[ProjectFiles]', '[EOF]' ), 4 ) Alines( laProps, laLines(m.I) + ',', 1, ',' ) - loReg = Null + loReg = .Null. loReg = Createobject("EMPTY") AddProperty( loReg, 'ID', Iif( toFoxBin2Prg.l_ClearUniqueID, 0, Val( laProps(1) ) ) ) AddProperty( loReg, 'TYPE', laProps(2) ) @@ -18402,7 +19001,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg Catch To loEx When loEx.ErrorNo = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) *-- Saltear y no agregar el archivo duplicado / Bypass and not add the duplicated file Finally - loReg = Null + loReg = .Null. Endtry Endfor @@ -18427,7 +19026,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg *-- Información de los Servidores definidos If Not Empty(loProject._ServerInfo) C_FB2PRG_CODE = C_FB2PRG_CODE + loServerHead.getFormattedServerText() + CR_LF - loServerHead = Null + loServerHead = .Null. Endif With This As c_conversor_pjm_a_prg Of 'FOXBIN2PRG.PRG' @@ -18487,7 +19086,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg User="" <> ENDTEXT - loReg = Null + loReg = .Null. Endfor TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -18526,7 +19125,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg If loReg.EXCLUDE C_FB2PRG_CODE = C_FB2PRG_CODE + Chr(13) + Chr(10) + Chr(9) + ".ITEM(lcCurdir + '" + loReg.Name + "').Exclude = .T." Endif - loReg = Null + loReg = .Null. Endfor @@ -18543,7 +19142,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg If Inlist( Upper( Justext( loReg.Name ) ), 'H','FPW' ) C_FB2PRG_CODE = C_FB2PRG_CODE + Chr(13) + Chr(10) + Chr(9) + ".ITEM(lcCurdir + '" + loReg.Name + "').Type = 'T'" Endif - loReg = Null + loReg = .Null. Endfor @@ -18643,7 +19242,7 @@ Define Class c_conversor_pjm_a_prg As c_conversor_bin_a_prg Finally *USE IN (SELECT("TABLABIN")) - Store Null To loProject, loReg, loServerHead, loServerData + Store .Null. To loProject, loReg, loServerHead, loServerData Release toModulo, toEx, toFoxBin2Prg ; , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lnLen ; , lcStrPJM, laLines, laProps, loProject, loServerHead, loServerData @@ -18697,9 +19296,16 @@ Define Class c_conversor_frx_a_prg As c_conversor_bin_a_prg loLang = _Screen.o_FoxBin2Prg_Lang Store 0 To lnCodError, lnLastClass Store '' To laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) - Store Null To loRegObj, loRegCab, loRegDataEnv, loRegCur + Store .Null. To loRegObj, loRegCab, loRegDataEnv, loRegCur - Use (.c_InputFile) Shared Again Noupdate Alias _TABLAORIG + Use (.c_InputFile) Shared Again Noupdate Alias _TABLAORIG + +*LScheffler 20.08.2023 +*issue #96, including issue #95, [KestasL] keep CodePage relavant information for binary sources + toFoxBin2Prg.i_CPID = Cpdbf("_TABLAORIG") + SET NOCPTRANS TO NAME,EXPR,STYLE,PICTURE,ORDER,COMMENT,TAG,TAG2,FONTFACE,SUPEXPR,USER +*/LScheffler 20.08.2023 + This.updateProgressbar( 'Scanning FRX...', 1, 2, 1 ) *-- Verificación de REPORTE VFP 9 @@ -18724,7 +19330,7 @@ INTO CURSOR TABLABIN_0 READWRITE Locate For ObjType = 1 If Found() - loRegCab = Null + loRegCab = .Null. Scatter Memo Name loRegCab If toFoxBin2Prg.l_NoTimestamps @@ -18748,7 +19354,7 @@ INTO CURSOR TABLABIN_0 READWRITE INTO Cursor TABLABIN Endif - loRegObj = Null + loRegObj = .Null. *-- Recorro los registros y genero el texto @@ -18759,7 +19365,7 @@ INTO CURSOR TABLABIN_0 READWRITE Select TABLABIN Scan All - loRegObj = Null + loRegObj = .Null. Scatter Memo Name loRegObj If toFoxBin2Prg.l_NoTimestamps @@ -18777,7 +19383,7 @@ INTO CURSOR TABLABIN_0 READWRITE Locate For ObjType = 25 If Found() - loRegDataEnv = Null + loRegDataEnv = .Null. Scatter Memo Name loRegDataEnv If toFoxBin2Prg.l_NoTimestamps @@ -18794,7 +19400,7 @@ INTO CURSOR TABLABIN_0 READWRITE Select TABLABIN_0 Scan All For ObjType = 26 - loRegCur = Null + loRegCur = .Null. Scatter Memo Name loRegCur If toFoxBin2Prg.l_NoTimestamps @@ -18847,7 +19453,7 @@ INTO CURSOR TABLABIN_0 READWRITE Use In (Select("TABLABIN")) Use In (Select("TABLABIN_0")) Use In (Select("_TABLAORIG")) - Store Null To loRegObj, loRegCab, loRegDataEnv, loRegCur + Store .Null. To loRegObj, loRegCab, loRegDataEnv, loRegCur Release toModulo, toEx, toFoxBin2Prg ; , lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods, laCode, laProtected, lnLen ; , laPropsAndValues, laPropsAndComments, lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle @@ -18918,7 +19524,7 @@ Define Class c_conversor_dbf_a_prg As c_conversor_bin_a_prg loLang = _Screen.o_FoxBin2Prg_Lang loFSO = toFoxBin2Prg.o_FSO - Store Null To loTable, loDBFUtils + Store .Null. To loTable, loDBFUtils Store 0 To lnCodError loDBFUtils = Createobject('CL_DBF_UTILS') loDBC = Createobject('CL_DBC') @@ -18962,6 +19568,10 @@ Define Class c_conversor_dbf_a_prg As c_conversor_bin_a_prg Endif * LScheffler Use (.c_InputFile) Shared Again Noupdate Alias TABLABIN +*LScheffler 20.08.2023 +*issue #96, including issue #95, [KestasL] keep CodePage relavant information for binary sources + toFoxBin2Prg.i_CPID = Cpdbf("TABLABIN") + lnDataSessionID = toFoxBin2Prg.DataSessionId .RestoreDBCEvents(loDBC, @llDBCEventsEnabled) @@ -19070,7 +19680,7 @@ Define Class c_conversor_dbf_a_prg As c_conversor_bin_a_prg Endif Endfor - Store Null To loTable, loDBFUtils, loTextStream, toFoxBin2Prg.o_TextStream + Store .Null. To loTable, loDBFUtils, loTextStream, toFoxBin2Prg.o_TextStream *!* Changed by: LScheffler 11.2.2021 *!* change date="{^2021-02-11,08:50:00}" * Release different, parts moved outsidef IF .. ENDIF @@ -19138,13 +19748,19 @@ Define Class c_conversor_dbc_a_prg As c_conversor_bin_a_prg , loTable As CL_DBC_TABLE Of 'FOXBIN2PRG.PRG' ; , loView As CL_DBC_VIEW Of 'FOXBIN2PRG.PRG' - Store Null To loRelation, loView, loTable + Store .Null. To loRelation, loView, loTable Store 0 To lnCodError, lnDatabases_Count, lnClassCount Store '' To laDatabases, lcEventsFile, lcExternalHeader, laClasses, lcCodigo, C_FB2PRG_CODE lnDatabases_Count = Adatabases(laDatabases) Use (.c_InputFile) Shared Again Noupdate Alias TABLABIN +*LScheffler 20.08.2023 +*issue #96, including issue #95, [KestasL] keep CodePage relavant information for binary sources + toFoxBin2Prg.i_CPID = Cpdbf("TABLABIN") + SET NOCPTRANS TO OBJECTNAME,USER +*/LScheffler 20.08.2023 + If toFoxBin2Prg.l_ProcessFiles Then toDatabase = Createobject('CL_DBC') toDatabase._DBC = .c_InputFile @@ -19336,6 +19952,14 @@ Define Class c_conversor_mnx_a_prg As c_conversor_bin_a_prg Store 0 To lnCodError Use (.c_InputFile) Shared Again Noupdate Alias _TABLAORIG + +*LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + toFoxBin2Prg.i_CPID = Cpdbf("_TABLAORIG") + SET NOCPTRANS TO NAME,PROMPT,COMMAND,MESSAGE,PROCEDURE,SETUP,CLEANUP,KEYNAME,KEYLABEL,SKIPFOR +*/LScheffler 20.08.2023 + + Select * From _TABLAORIG Into Cursor TABLABIN Use In (Select("_TABLAORIG")) .updateProgressbar( 'Analyzing MNX...', 1, 2, 1 ) @@ -19967,12 +20591,16 @@ Define Class CL_CLASSLIB As CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + [] Dimension _Ole_Objs[1], _Clases[1], _ExternalClasses(1,2) _Version = 0 _SourceFile = '' +*LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + _cpid = Cpcurrent() _ExternalClasses_Count = 0 _Ole_Obj_count = 0 _Clases_Count = 0 @@ -20384,12 +21012,16 @@ Define Class CL_REPORT As CL_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] *-- Report.Info _TimeStamp = 0 _Version = '' _SourceFile = '' +*LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + _cpid = Cpcurrent() Enddefine @@ -20417,6 +21049,7 @@ Define Class CL_PROJECT As CL_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -20466,9 +21099,12 @@ Define Class CL_PROJECT As CL_COL_BASE _ProjectHookClass = '' _ProjectHookLibrary = '' _SaveCode = .T. - _ServerHead = Null + _ServerHead = .Null. _ServerInfo = '' _SourceFile = '' +*LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + _cpid = Cpcurrent() _TimeStamp = 0 _Version = '' _SccData = '' @@ -20784,11 +21420,11 @@ Define Class CL_DBC_COL_BASE As CL_COL_BASE *--------------------------------------------------------------------------------------------------- Lparameters tc_OutputFile, tnLastID, tnParentID Local loObject - loObject = Null + loObject = .Null. For Each loObject In This FoxObject loObject.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) - loObject = Null + loObject = .Null. Endfor Return @@ -21933,6 +22569,7 @@ Define Class CL_DBC As CL_DBC_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -21949,6 +22586,10 @@ Define Class CL_DBC As CL_DBC_BASE _Members_Count = 0 _Version = 0 _SourceFile = '' +*LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + _cpid = Cpcurrent() + *-- Database Info _Name = '' @@ -21996,7 +22637,7 @@ Define Class CL_DBC As CL_DBC_BASE , loView As CL_DBC_VIEW Of 'FOXBIN2PRG.PRG' ; , llBloqueEncontrado, lcPropName, lcValue, loEx As Exception Store '' To lcPropName, lcValue - Store Null To loConnections, loTables, loViews, loConnection, loTable, loView + Store .Null. To loConnections, loTables, loViews, loConnection, loTable, loView If Left(tcLine, Len(C_DATABASE_I)) == C_DATABASE_I llBloqueEncontrado = .T. @@ -22069,7 +22710,7 @@ Define Class CL_DBC As CL_DBC_BASE Throw Finally - Store Null To loConnections, loTables, loViews, loConnection, loTable, loView + Store .Null. To loConnections, loTables, loViews, loConnection, loTable, loView Release loConnections, loTables, loViews, loConnection, loTable, loView Endtry @@ -22124,7 +22765,7 @@ Define Class CL_DBC As CL_DBC_BASE , loConnections As CL_DBC_CONNECTIONS Of 'FOXBIN2PRG.PRG' ; , loViews As CL_DBC_VIEWS Of 'FOXBIN2PRG.PRG' Local lcStoredProcedures - Store Null To loTables, loConnections, loViews + Store .Null. To loTables, loConnections, loViews With This As CL_DBC Of 'FOXBIN2PRG.PRG' loTables = ._Tables @@ -22171,7 +22812,7 @@ Define Class CL_DBC As CL_DBC_BASE Finally Close Databases Use In (Select("TABLABIN")) - Store Null To loTables, loConnections, loViews + Store .Null. To loTables, loConnections, loViews Release loTables, loConnections, loViews Endtry @@ -22194,7 +22835,7 @@ Define Class CL_DBC As CL_DBC_BASE , loTables As CL_DBC_TABLES Of 'FOXBIN2PRG.PRG' ; , loViews As CL_DBC_VIEWS Of 'FOXBIN2PRG.PRG' ; , loRelations As CL_DBC_RELATIONS Of 'FOXBIN2PRG.PRG' - Store Null To loRelations, loViews, loTables, loTables + Store .Null. To loRelations, loViews, loTables, loTables With This As CL_DBC Of 'FOXBIN2PRG.PRG' Store '' To lcText, lcConnections, lcTables, lcViews @@ -22256,7 +22897,7 @@ Define Class CL_DBC As CL_DBC_BASE Throw Finally - Store Null To loRelations, loViews, loTables, loTables + Store .Null. To loRelations, loViews, loTables, loTables Release I, lcDBC, laCode, loConnections, loTables, loViews, loRelations Endtry @@ -22315,7 +22956,7 @@ Define Class CL_DBC_CONNECTIONS As CL_DBC_COL_BASE Try Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ; , loConnection As CL_DBC_CONNECTION Of 'FOXBIN2PRG.PRG' - Store Null To loConnection + Store .Null. To loConnection Store '' To lcPropName, lcValue If Left(tcLine, Len(C_CONNECTIONS_I)) == C_CONNECTIONS_I @@ -22360,7 +23001,7 @@ Define Class CL_DBC_CONNECTIONS As CL_DBC_COL_BASE Throw Finally - Store Null To loConnection + Store .Null. To loConnection Release lcPropName, lcValue, loConnection Endtry @@ -22386,7 +23027,7 @@ Define Class CL_DBC_CONNECTIONS As CL_DBC_COL_BASE , loConnection As CL_DBC_CONNECTION Of 'FOXBIN2PRG.PRG' With This As CL_DBC_CONNECTIONS Of 'FOXBIN2PRG.PRG' - loConnection = Null + loConnection = .Null. lcText = '' .read_BinDataToProperties() @@ -22417,7 +23058,7 @@ Define Class CL_DBC_CONNECTIONS As CL_DBC_COL_BASE Throw Finally - loConnection = Null + loConnection = .Null. Release loConnection Endtry @@ -22447,7 +23088,7 @@ Define Class CL_DBC_CONNECTIONS As CL_DBC_COL_BASE Exit Endif - loConnection = Null + loConnection = .Null. lnConnection_Count = Adbobjects( laConnections,"CONNECTION" ) If lnConnection_Count > 0 @@ -22468,7 +23109,7 @@ Define Class CL_DBC_CONNECTIONS As CL_DBC_COL_BASE Throw Finally - loConnection = Null + loConnection = .Null. Release I, loConnection Endtry @@ -22722,7 +23363,7 @@ Define Class CL_DBC_TABLES As CL_DBC_COL_BASE Try Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ; , loTable As CL_DBC_TABLE Of 'FOXBIN2PRG.PRG' - Store Null To loTable + Store .Null. To loTable Store '' To lcPropName, lcValue If Left(tcLine, Len(C_TABLES_I)) == C_TABLES_I @@ -22764,7 +23405,7 @@ Define Class CL_DBC_TABLES As CL_DBC_COL_BASE Throw Finally - Store Null To loTable + Store .Null. To loTable Release lcPropName, lcValue, loTable Endtry @@ -22790,7 +23431,7 @@ Define Class CL_DBC_TABLES As CL_DBC_COL_BASE , loTable As CL_DBC_TABLE Of 'FOXBIN2PRG.PRG' With This As CL_DBC_TABLES Of 'FOXBIN2PRG.PRG' - Store Null To loTable + Store .Null. To loTable lcText = '' .read_BinDataToProperties() @@ -22826,7 +23467,7 @@ Define Class CL_DBC_TABLES As CL_DBC_COL_BASE Throw Finally - Store Null To loTable + Store .Null. To loTable Release loTable Endtry @@ -22856,7 +23497,7 @@ Define Class CL_DBC_TABLES As CL_DBC_COL_BASE Exit Endif - Store Null To loTable + Store .Null. To loTable Store 0 To I, lnTable_Count lnTable_Count = Adbobjects( laTables,"TABLE" ) @@ -22880,7 +23521,7 @@ Define Class CL_DBC_TABLES As CL_DBC_COL_BASE Throw Finally - loTable = Null + loTable = .Null. Release I, loTable Endtry @@ -22951,7 +23592,7 @@ Define Class CL_DBC_TABLE As CL_DBC_BASE , loFields As CL_DBC_FIELDS_DB Of 'FOXBIN2PRG.PRG' ; , loIndexes As CL_DBC_INDEXES_DB Of 'FOXBIN2PRG.PRG' ; , loRelations As CL_DBC_RELATIONS Of 'FOXBIN2PRG.PRG' - Store Null To loRelations, loIndexes, loFields + Store .Null. To loRelations, loIndexes, loFields Store '' To lcPropName, lcValue If Left(tcLine, Len(C_TABLE_I)) == C_TABLE_I @@ -23010,7 +23651,7 @@ Define Class CL_DBC_TABLE As CL_DBC_BASE Throw Finally - Store Null To loRelations, loIndexes, loFields + Store .Null. To loRelations, loIndexes, loFields Release lcPropName, lcValue, loFields, loIndexes, loRelations Endtry @@ -23038,7 +23679,7 @@ Define Class CL_DBC_TABLE As CL_DBC_BASE , loRelations As CL_DBC_RELATIONS Of 'FOXBIN2PRG.PRG' With This As CL_DBC_TABLE Of 'FOXBIN2PRG.PRG' - Store Null To loRelations, loFields, loIndexes + Store .Null. To loRelations, loFields, loIndexes Store '' To lcText, lcFields, lcIndexes, lcRelations .read_BinDataToProperties(tcTable) @@ -23083,7 +23724,7 @@ Define Class CL_DBC_TABLE As CL_DBC_BASE Throw Finally - Store Null To loRelations, loFields, loIndexes + Store .Null. To loRelations, loFields, loIndexes Release loIndexes, loFields, loRelations Endtry @@ -23186,7 +23827,7 @@ Define Class CL_DBC_FIELDS_DB As CL_DBC_COL_BASE Try Local llBloqueEncontrado, lcPropName, lcValue, lnPos, loEx As Exception ; , loField As CL_DBC_FIELD_DB Of 'FOXBIN2PRG.PRG' - Store Null To loField + Store .Null. To loField Store '' To lcPropName, lcValue If Left(tcLine, Len(C_FIELDS_I)) == C_FIELDS_I @@ -23242,7 +23883,7 @@ Define Class CL_DBC_FIELDS_DB As CL_DBC_COL_BASE Throw Finally - Store Null To loField + Store .Null. To loField Release lcPropName, lcValue, loField Endtry @@ -23264,7 +23905,7 @@ Define Class CL_DBC_FIELDS_DB As CL_DBC_COL_BASE Try Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ; , loField As CL_DBC_FIELD_DB Of 'FOXBIN2PRG.PRG' - Store Null To loField + Store .Null. To loField Store '' To lcPropName, lcValue If Left(tcLine, Len(C_FIELD_ORDER_I)) == C_FIELD_ORDER_I @@ -23299,7 +23940,7 @@ Define Class CL_DBC_FIELDS_DB As CL_DBC_COL_BASE Throw Finally - Store Null To loField + Store .Null. To loField Release lcPropName, lcValue, loField Endtry @@ -23325,7 +23966,7 @@ Define Class CL_DBC_FIELDS_DB As CL_DBC_COL_BASE , loField As CL_DBC_FIELD_DB Of 'FOXBIN2PRG.PRG' With This As CL_DBC_FIELDS_DB Of 'FOXBIN2PRG.PRG' - Store Null To loField + Store .Null. To loField Store 0 To X, lnField_Count lcText = '' @@ -23378,7 +24019,7 @@ Define Class CL_DBC_FIELDS_DB As CL_DBC_COL_BASE Throw Finally - Store Null To loField + Store .Null. To loField Release loField Endtry @@ -23409,7 +24050,7 @@ Define Class CL_DBC_FIELDS_DB As CL_DBC_COL_BASE Exit Endif - Store Null To loField + Store .Null. To loField Store 0 To I, lnField_Count _Tally = 0 @@ -23441,7 +24082,7 @@ Define Class CL_DBC_FIELDS_DB As CL_DBC_COL_BASE Finally Use In (Select("TB")) Use In (Select("TB2")) - loField = Null + loField = .Null. Release I, loField Endtry @@ -23616,19 +24257,21 @@ Define Class CL_DBC_FIELD_DB As CL_DBC_BASE Procedure read_BinDataToProperties Lparameters tcTable, tcField + Local lcFullFieldName With This As CL_DBC_FIELD_DB Of 'FOXBIN2PRG.PRG' If Not ._Saved Then ._Name = Alltrim(tcField) - ._Caption = DBGetProp( Rtrim(tcTable) + '.' + Rtrim(tcField),"FIELD","Caption") - ._Comment = DBGetProp( Rtrim(tcTable) + '.' + Rtrim(tcField),"FIELD","Comment") - ._DefaultValue = DBGetProp( Rtrim(tcTable) + '.' + Rtrim(tcField),"FIELD","DefaultValue") - ._DisplayClass = DBGetProp( Rtrim(tcTable) + '.' + Rtrim(tcField),"FIELD","DisplayClass") - ._DisplayClassLibrary = DBGetProp( Rtrim(tcTable) + '.' + Rtrim(tcField),"FIELD","DisplayClassLibrary") - ._Format = DBGetProp( Rtrim(tcTable) + '.' + Rtrim(tcField),"FIELD","Format") - ._InputMask = DBGetProp( Rtrim(tcTable) + '.' + Rtrim(tcField),"FIELD","InputMask") - ._RuleExpression = DBGetProp( Rtrim(tcTable) + '.' + Rtrim(tcField),"FIELD","RuleExpression") - ._RuleText = DBGetProp( Rtrim(tcTable) + '.' + Rtrim(tcField),"FIELD","RuleText") + lcFullFieldName = Rtrim(tcTable) + '.' + Rtrim(tcField) + ._Caption = DBGetProp( lcFullFieldName,"FIELD","Caption") + ._Comment = DBGetProp( lcFullFieldName,"FIELD","Comment") + ._DefaultValue = DBGetProp( lcFullFieldName,"FIELD","DefaultValue") + ._DisplayClass = DBGetProp( lcFullFieldName,"FIELD","DisplayClass") + ._DisplayClassLibrary = DBGetProp( lcFullFieldName,"FIELD","DisplayClassLibrary") + ._Format = DBGetProp( lcFullFieldName,"FIELD","Format") + ._InputMask = DBGetProp( lcFullFieldName,"FIELD","InputMask") + ._RuleExpression = DBGetProp( lcFullFieldName,"FIELD","RuleExpression") + ._RuleText = DBGetProp( lcFullFieldName,"FIELD","RuleText") *-- ._Saved = .T. Endif @@ -23662,7 +24305,7 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE Try Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ; , loIndex As CL_DBC_INDEX_DB Of 'FOXBIN2PRG.PRG' - Store Null To loIndex + Store .Null. To loIndex Store '' To lcPropName, lcValue If Left(tcLine, Len(C_INDEXES_I)) == C_INDEXES_I @@ -23680,7 +24323,7 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE Exit Case C_INDEX_I $ tcLine - loIndex = Null + loIndex = .Null. loIndex = Createobject("CL_DBC_INDEX_DB") loIndex.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) @@ -23705,7 +24348,7 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE Throw Finally - Store Null To loIndex + Store .Null. To loIndex Release lcPropName, lcValue, loIndex Endtry @@ -23731,7 +24374,7 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE , loIndex As CL_DBC_INDEX_DB Of 'FOXBIN2PRG.PRG' With This As CL_DBC_INDEXES_DB Of 'FOXBIN2PRG.PRG' - Store Null To loIndex + Store .Null. To loIndex lcText = '' .read_BinDataToProperties(tcTable, @toFoxBin2Prg) @@ -23764,7 +24407,7 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE Throw Finally - Store Null To loIndex + Store .Null. To loIndex Release loIndex Endtry @@ -23795,7 +24438,7 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE Exit Endif - Store Null To loIndex + Store .Null. To loIndex Store 0 To I, lnIndex_Count _Tally = 0 Select Lower(TB.ObjectName) From TABLABIN TB ; @@ -23826,7 +24469,7 @@ Define Class CL_DBC_INDEXES_DB As CL_DBC_COL_BASE Finally Use In (Select("TB")) Use In (Select("TB2")) - loIndex = Null + loIndex = .Null. Release I, loIndex Endtry @@ -24016,7 +24659,7 @@ Define Class CL_DBC_VIEWS As CL_DBC_COL_BASE Try Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ; , loView As CL_DBC_VIEW Of 'FOXBIN2PRG.PRG' - Store Null To loView + Store .Null. To loView Store '' To lcPropName, lcValue If Left(tcLine, Len(C_VIEWS_I)) == C_VIEWS_I @@ -24034,7 +24677,7 @@ Define Class CL_DBC_VIEWS As CL_DBC_COL_BASE Exit Case C_VIEW_I $ tcLine - loView = Null + loView = .Null. loView = Createobject("CL_DBC_VIEW") loView.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) *-- El siguiente PADR() es porque si no "estoXXX" está antes que "esto" cuando keysort=2 (raro...) @@ -24059,7 +24702,7 @@ Define Class CL_DBC_VIEWS As CL_DBC_COL_BASE Throw Finally - Store Null To loView + Store .Null. To loView Release lcPropName, lcValue, loView Endtry @@ -24084,7 +24727,7 @@ Define Class CL_DBC_VIEWS As CL_DBC_COL_BASE , loView As CL_DBC_VIEW Of 'FOXBIN2PRG.PRG' With This As CL_DBC_VIEWS Of 'FOXBIN2PRG.PRG' - Store Null To loView + Store .Null. To loView lcText = '' .read_BinDataToProperties() @@ -24120,7 +24763,7 @@ Define Class CL_DBC_VIEWS As CL_DBC_COL_BASE Throw Finally - Store Null To loView + Store .Null. To loView Release loView Endtry @@ -24144,7 +24787,7 @@ Define Class CL_DBC_VIEWS As CL_DBC_COL_BASE With This As CL_DBC_VIEWS Of 'FOXBIN2PRG.PRG' Local I, lnView_Count, laViews(1), loEx As Exception ; , loTable As CL_DBC_TABLE Of 'FOXBIN2PRG.PRG' - Store Null To loTable + Store .Null. To loTable Store 0 To I, tnTable_Count If ._Saved Then @@ -24180,7 +24823,7 @@ Define Class CL_DBC_VIEWS As CL_DBC_COL_BASE Throw Finally - loView = Null + loView = .Null. Release I, loView Endtry @@ -24257,9 +24900,9 @@ Define Class CL_DBC_VIEW As CL_DBC_BASE _WhereType = 0 *-- Sub-objects -*_Fields = NULL -*_Indexes = NULL -*_Relations = NULL +*_Fields = .Null. +*_Indexes = .Null. +*_Relations = .Null. Procedure Init @@ -24288,7 +24931,7 @@ Define Class CL_DBC_VIEW As CL_DBC_BASE , loFields As CL_DBC_FIELDS_VW Of 'FOXBIN2PRG.PRG' ; , loIndexes As CL_DBC_INDEXES_VW Of 'FOXBIN2PRG.PRG' ; , loRelations As CL_DBC_RELATIONS Of 'FOXBIN2PRG.PRG' - Store Null To loRelations, loIndexes, loFields + Store .Null. To loRelations, loIndexes, loFields Store '' To lcPropName, lcValue If Left(tcLine, Len(C_VIEW_I)) == C_VIEW_I @@ -24310,17 +24953,17 @@ Define Class CL_DBC_VIEW As CL_DBC_BASE loFields.analyzeOrderCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) Case C_FIELDS_I $ tcLine - loFields = Null + loFields = .Null. loFields = ._Fields loFields.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) Case C_INDEXES_I $ tcLine - loIndexes = Null + loIndexes = .Null. loIndexes = ._Indexes loIndexes.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) Case C_RELATIONS_I $ tcLine - loRelations = Null + loRelations = .Null. loRelations = ._Relations loRelations.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) @@ -24350,7 +24993,7 @@ Define Class CL_DBC_VIEW As CL_DBC_BASE Throw Finally - Store Null To loRelations, loIndexes, loFields + Store .Null. To loRelations, loIndexes, loFields Local lcPropName, lcValue, loFields, loIndexes, loRelations Endtry @@ -24375,7 +25018,7 @@ Define Class CL_DBC_VIEW As CL_DBC_BASE , loFields As CL_DBC_FIELDS_VW Of 'FOXBIN2PRG.PRG' ; , loIndexes As CL_DBC_INDEXES_VW Of 'FOXBIN2PRG.PRG' ; , loRelations As CL_DBC_RELATIONS Of 'FOXBIN2PRG.PRG' - Store Null To loRelations, loIndexes, loFields + Store .Null. To loRelations, loIndexes, loFields Store '' To lcText, lcFields, lcIndexes, lcRelations With This As CL_DBC_VIEW Of 'FOXBIN2PRG.PRG' @@ -24450,7 +25093,7 @@ Define Class CL_DBC_VIEW As CL_DBC_BASE Throw Finally - Store Null To loRelations, loIndexes, loFields + Store .Null. To loRelations, loIndexes, loFields Release loFields, loIndexes, loRelations Endtry @@ -24594,7 +25237,7 @@ Define Class CL_DBC_FIELDS_VW As CL_DBC_COL_BASE Try Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ; , loField As CL_DBC_FIELD_VW Of 'FOXBIN2PRG.PRG' - Store Null To loField + Store .Null. To loField Store '' To lcPropName, lcValue If Left(tcLine, Len(C_FIELDS_I)) == C_FIELDS_I @@ -24613,7 +25256,7 @@ Define Class CL_DBC_FIELDS_VW As CL_DBC_COL_BASE Exit Case C_FIELD_I $ tcLine - loField = Null + loField = .Null. loField = Createobject("CL_DBC_FIELD_VW") loField.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) @@ -24651,7 +25294,7 @@ Define Class CL_DBC_FIELDS_VW As CL_DBC_COL_BASE Throw Finally - Store Null To loField + Store .Null. To loField Release lcPropName, lcValue, loField Endtry @@ -24674,7 +25317,7 @@ Define Class CL_DBC_FIELDS_VW As CL_DBC_COL_BASE Try Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ; , loField As CL_DBC_FIELD_DB Of 'FOXBIN2PRG.PRG' - Store Null To loField + Store .Null. To loField Store '' To lcPropName, lcValue If Left(tcLine, Len(C_FIELD_ORDER_I)) == C_FIELD_ORDER_I @@ -24709,7 +25352,7 @@ Define Class CL_DBC_FIELDS_VW As CL_DBC_COL_BASE Throw Finally - Store Null To loField + Store .Null. To loField Release lcPropName, lcValue, loField Endtry @@ -24733,7 +25376,7 @@ Define Class CL_DBC_FIELDS_VW As CL_DBC_COL_BASE Try Local lcText, loEx As Exception ; , loField As CL_DBC_FIELD_VW Of 'FOXBIN2PRG.PRG' - Store Null To loField + Store .Null. To loField lcText = '' With This As CL_DBC_FIELDS_VW Of 'FOXBIN2PRG.PRG' @@ -24786,7 +25429,7 @@ Define Class CL_DBC_FIELDS_VW As CL_DBC_COL_BASE Throw Finally - Store Null To loField + Store .Null. To loField Release loField Endtry @@ -24810,7 +25453,7 @@ Define Class CL_DBC_FIELDS_VW As CL_DBC_COL_BASE Try Local I, lcText, lnField_Count, laFields(1), loEx As Exception ; , loField As CL_DBC_FIELD_VW Of 'FOXBIN2PRG.PRG' - Store Null To loField + Store .Null. To loField Store 0 To I, lnField_Count lcText = '' @@ -24849,7 +25492,7 @@ Define Class CL_DBC_FIELDS_VW As CL_DBC_COL_BASE Finally Use In (Select("TB")) Use In (Select("TB2")) - loField = Null + loField = .Null. Release loField Endtry @@ -25085,7 +25728,7 @@ Define Class CL_DBC_RELATIONS As CL_DBC_COL_BASE Try Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ; , loRelation As CL_DBC_RELATION Of 'FOXBIN2PRG.PRG' - Store Null To loRelation + Store .Null. To loRelation Store '' To lcPropName, lcValue If Left(tcLine, Len(C_RELATIONS_I)) == C_RELATIONS_I @@ -25103,7 +25746,7 @@ Define Class CL_DBC_RELATIONS As CL_DBC_COL_BASE Exit Case C_RELATION_I $ tcLine - loRelation = Null + loRelation = .Null. loRelation = Createobject("CL_DBC_RELATION") loRelation.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) @@ -25133,7 +25776,7 @@ Define Class CL_DBC_RELATIONS As CL_DBC_COL_BASE Throw Finally - Store Null To loRelation + Store .Null. To loRelation Release lcPropName, lcValue, loRelation Endtry @@ -25158,7 +25801,7 @@ Define Class CL_DBC_RELATIONS As CL_DBC_COL_BASE With This As CL_DBC_RELATIONS Of 'FOXBIN2PRG.PRG' Local lcText, loEx As Exception ; , loRelation As CL_DBC_RELATION Of 'FOXBIN2PRG.PRG' - Store Null To loRelation + Store .Null. To loRelation lcText = '' .read_BinDataToProperties(tcTable, @toFoxBin2Prg) @@ -25187,7 +25830,7 @@ Define Class CL_DBC_RELATIONS As CL_DBC_COL_BASE Throw Finally - Store Null To loRelation + Store .Null. To loRelation Release I, X, loRelation Endtry @@ -25213,7 +25856,7 @@ Define Class CL_DBC_RELATIONS As CL_DBC_COL_BASE Local I, lnRelation_Count, laRelations(1,5), lcText, loEx As Exception ; , loRelation As CL_DBC_RELATION Of 'FOXBIN2PRG.PRG' - Store Null To loRelation + Store .Null. To loRelation lcText = '' I = 0 @@ -25250,7 +25893,7 @@ Define Class CL_DBC_RELATIONS As CL_DBC_COL_BASE Throw Finally - Store Null To loRelation + Store .Null. To loRelation Release loRelation Endtry @@ -25441,6 +26084,7 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE _MemberData = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -25461,6 +26105,9 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE *-- Modulo _Version = 0 _SourceFile = '' +*LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + _cpid = Cpcurrent() _I = 0 *-- Table Info @@ -25474,8 +26121,8 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE _LastUpdate = {} *-- Fields and Indexes -*_Fields = NULL -*_Indexes = NULL +*_Fields = .Null. +*_Indexes = .Null. Procedure Init @@ -25507,7 +26154,7 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE , loFields As CL_DBF_FIELDS Of 'FOXBIN2PRG.PRG' ; , loIndexes As CL_DBF_INDEXES Of 'FOXBIN2PRG.PRG' ; , loRecords As CL_DBF_RECORDS Of 'FOXBIN2PRG.PRG' - Store Null To loIndexes, loFields, loRecords + Store .Null. To loIndexes, loFields, loRecords Store '' To lcPropName, lcValue If Left(tcLine, Len(C_TABLE_I)) == C_TABLE_I @@ -25586,7 +26233,7 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE Throw Finally - Store Null To loIndexes, loFields, loRecords + Store .Null. To loIndexes, loFields, loRecords Release lcPropName, lcValue, loFields, loIndexes, loRecords Endtry @@ -25622,13 +26269,13 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE , loDBF_CFG As CL_DBF_CFG Of 'FOXBIN2PRG.PRG' ; , loRecords As CL_DBF_RECORDS Of 'FOXBIN2PRG.PRG' ; , loFields As CL_DBF_FIELDS Of 'FOXBIN2PRG.PRG' ; - , loIndexes As CL_DBF_INDEXES Of 'FOXBIN2PRG.PRG' + , loIndexes As CL_DBF_INDEXES Of 'FOXBIN2PRG.PRG', ln_DBF_Conversion_Support *** DH 06/02/2014: created variables Local laFields[1], lnFieldCount loFSO = toFoxBin2Prg.o_FSO loTextStream = toFoxBin2Prg.o_TextStream - Store Null To loIndexes, loFields, loRecords + Store .Null. To loIndexes, loFields, loRecords Store 0 To lnFileCount lcText = '' @@ -25636,7 +26283,7 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE <<>> <> <<>> <> - <<>> <> + <<>> <> <<>> <> <<>> <> <<>> <> @@ -25652,17 +26299,19 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE *-- If table CFG exists, use it for DBF-specific configuration. FDBOZZO. 2014/06/15 lnFileCount = toFoxBin2Prg.get_DBF_Configuration( Forceext(tc_InputFile, 'DBF'), @loDBF_CFG, .T. ) + ln_DBF_Conversion_Support = Iif(Isnull(loDBF_CFG), toFoxBin2Prg.n_DBF_Conversion_Support, loDBF_CFG.n_DBF_Conversion_Support ) + Do Case - Case lnFileCount = 1 And Inlist(loDBF_CFG.n_DBF_Conversion_Support, 4, 8) + Case Inlist(ln_DBF_Conversion_Support, 4, 8) *-- Si hay un archivo DBF.CFG, manda sobre la configuración general llExportData = .T. - Case lnFileCount = 1 And loDBF_CFG.n_DBF_Conversion_Support > 0 + Case ln_DBF_Conversion_Support > 0 *-- Si hay un archivo DBF.CFG, manda sobre la configuración general * Asume llExportData=.F. - Case Inlist(toFoxBin2Prg.n_DBF_Conversion_Support, 4, 8) && BIN2TXT (DATA EXPORT FOR DIFF) - llExportData = .T. +*!* Case Inlist(toFoxBin2Prg.n_DBF_Conversion_Support, 4, 8) && BIN2TXT (DATA EXPORT FOR DIFF) +*!* llExportData = .T. Otherwise * Asume llExportData=.F. @@ -25746,7 +26395,7 @@ Define Class CL_DBF_TABLE As CL_CUS_BASE Endif * /remove temporary order - Store Null To loIndexes, loFields, loRecords, loDBF_CFG, loTextStream + Store .Null. To loIndexes, loFields, loRecords, loDBF_CFG, loTextStream Release loFields, loIndexes, loRecords, loDBF_CFG, loTextStream Endtry @@ -25779,7 +26428,7 @@ Define Class CL_DBF_FIELDS As CL_COL_BASE Local llBloqueEncontrado, lcPropName, lcValue, loEx As Exception ; , loField As CL_DBF_FIELD Of 'FOXBIN2PRG.PRG' ; , loIndex As CL_DBF_INDEX Of 'FOXBIN2PRG.PRG' - Store Null To loIndex, loField + Store .Null. To loIndex, loField Store '' To lcPropName, lcValue If Left(tcLine, Len(C_FIELDS_I)) == C_FIELDS_I @@ -25797,7 +26446,7 @@ Define Class CL_DBF_FIELDS As CL_COL_BASE Exit Case C_FIELD_I $ tcLine - loField = Null + loField = .Null. loField = Createobject("CL_DBF_FIELD") loField.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines ) .Add( loField, loField._Name ) @@ -25821,7 +26470,7 @@ Define Class CL_DBF_FIELDS As CL_COL_BASE Throw Finally - Store Null To loIndex, loField + Store .Null. To loIndex, loField Release lcPropName, lcValue, loField, loIndex Endtry @@ -25848,7 +26497,7 @@ Define Class CL_DBF_FIELDS As CL_COL_BASE Try Local I, lcText, loEx As Exception ; , loField As CL_DBF_FIELD Of 'FOXBIN2PRG.PRG' - Store Null To loField + Store .Null. To loField lcText = '' Dimension taFields(1,18) @@ -25884,7 +26533,7 @@ Define Class CL_DBF_FIELDS As CL_COL_BASE Throw Finally - Store Null To loField + Store .Null. To loField Release I, loField Endtry @@ -26185,7 +26834,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE Try Local llBloqueEncontrado, loEx As Exception ; , loIndex As CL_DBF_INDEX Of 'FOXBIN2PRG.PRG' - Store Null To loIndex + Store .Null. To loIndex If Left(tcLine, Len(C_INDEXES_I)) == C_INDEXES_I llBloqueEncontrado = .T. @@ -26202,7 +26851,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE Exit Case C_INDEX_I $ tcLine - loIndex = Null + loIndex = .Null. loIndex = Createobject("CL_DBF_INDEX") loIndex.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines, tcIndexFile, tlStandAlone ) .Add( loIndex, loIndex._TagName ) @@ -26222,7 +26871,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE Throw Finally - Store Null To loIndex + Store .Null. To loIndex Release loIndex Endtry @@ -26253,7 +26902,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE Local I, lcText, loEx As Exception ; , loIndex As CL_DBF_INDEX Of 'FOXBIN2PRG.PRG' ; loLang As CL_LANG Of 'FOXBIN2PRG.PRG' - Store Null To loIndex + Store .Null. To loIndex lcText = '' Dimension taTagInfo(1,6) @@ -26368,7 +27017,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE Throw Finally - Store Null To m.loIndex + Store .Null. To m.loIndex Release I, m.loIndex Endtry @@ -26382,7 +27031,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE ENDTEXT Endif &&!EMPTY(m.lcText) - toFoxBin2Prg.writeLog( Replicate('+', 100)+0h0D0A ) + toFoxBin2Prg.writeLog( Replicate('+', 100)+CR_LF ) * /LScheffler Catch To loEx @@ -26393,7 +27042,7 @@ Define Class CL_DBF_INDEXES As CL_COL_BASE Throw Finally - Store Null To loIndex + Store .Null. To loIndex Release I, loIndex Endtry @@ -26572,7 +27221,7 @@ Define Class CL_DBF_RECORDS As CL_COL_BASE Local llBloqueEncontrado, lcPropName, lcValue, lcAlias, loEx As Exception ; , loRecord As CL_DBF_RECORD Of 'FOXBIN2PRG.PRG' ; , loRecordData As Object - Store Null To loIndex + Store .Null. To loIndex Store '' To lcPropName, lcValue, lcAlias If Left(tcLine, Len(C_RECORDS_I)) == C_RECORDS_I @@ -26581,7 +27230,7 @@ Define Class CL_DBF_RECORDS As CL_COL_BASE With This As CL_DBF_RECORDSS Of 'FOXBIN2PRG.PRG' lcAlias = Alias() CursorSetProp("Buffering", 3) - loRecord = Null + loRecord = .Null. loRecord = Createobject("CL_DBF_RECORD") For I = m.I + 1 To tnCodeLines @@ -26647,7 +27296,7 @@ Define Class CL_DBF_RECORDS As CL_COL_BASE Tablerevert(.T.) CursorSetProp("Buffering", 1) - Store Null To loRecord + Store .Null. To loRecord Release lcPropName, lcValue, loRecord Endtry @@ -26754,7 +27403,7 @@ Define Class CL_DBF_RECORDS As CL_COL_BASE Throw Finally - Store Null To loRecord, loTextStream + Store .Null. To loRecord, loTextStream Release loRecord, loTextStream Endtry @@ -26972,7 +27621,7 @@ Define Class CL_DBF_RECORD As CL_CUS_BASE Throw Finally - Store Null To loField + Store .Null. To loField Release loField Endtry @@ -27083,7 +27732,7 @@ Define Class CL_DBF_RECORD As CL_CUS_BASE *!* TEXT .. ENDTEXT removes trailing spaces from lines inserted with TEXXTMERGE *!* Char etc are processed special If Vartype(luValue) = 'C' - lcText = lcText + 0h0D0A + ' <' + lcField + '>' + luValue + '' + lcText = lcText + CR_LF + ' <' + lcField + '>' + luValue + '' Else TEXT TO lcText TEXTMERGE NOSHOW flags 1+2 PRETEXT 1+2 additive <<>> <<'<' + lcField + '>'>><><<''>> @@ -27325,7 +27974,7 @@ Define Class CL_PROJ_SRV_HEAD As CL_CUS_BASE *-- Información de los servidores For I = 1 To lnServerCount - loServerData = Null + loServerData = .Null. loServerData = .getServerDataObject() loServerData._HelpContextID = .getDataFromPair_LenData_Structure( @tcServerInfo, @lnPos, @lnLen ) @@ -27351,7 +28000,7 @@ Define Class CL_PROJ_SRV_HEAD As CL_CUS_BASE Throw Finally - loServerData = Null + loServerData = .Null. Release loServerData Endtry @@ -27365,7 +28014,7 @@ Define Class CL_PROJ_SRV_HEAD As CL_CUS_BASE Try Local lcStr, lnLenH, lnLen, lnPos ; , loServerData As CL_PROJ_SRV_DATA Of 'FOXBIN2PRG.PRG' - Store Null To loServerData + Store .Null. To loServerData lcStr = '' With This As CL_PROJ_SRV_HEAD Of 'FOXBIN2PRG.PRG' @@ -27399,7 +28048,7 @@ Define Class CL_PROJ_SRV_HEAD As CL_CUS_BASE Throw Finally - Store Null To loServerData + Store .Null. To loServerData Release lnLenH, lnLen, lnPos, loServerData Endtry @@ -27413,7 +28062,7 @@ Define Class CL_PROJ_SRV_HEAD As CL_CUS_BASE Try Local lcText ; , loServerData As CL_PROJ_SRV_DATA Of 'FOXBIN2PRG.PRG' - Store Null To loServerData + Store .Null. To loServerData lcText = '' With This As CL_PROJ_SRV_HEAD Of 'FOXBIN2PRG.PRG' @@ -27432,7 +28081,7 @@ Define Class CL_PROJ_SRV_HEAD As CL_CUS_BASE For I = 1 To ._ServerCount loServerData = ._Servers(m.I) lcText = lcText + loServerData.getFormattedServerText() - loServerData = Null + loServerData = .Null. Endfor Endwith && THIS @@ -27444,7 +28093,7 @@ Define Class CL_PROJ_SRV_HEAD As CL_CUS_BASE Throw Finally - Store Null To loServerData + Store .Null. To loServerData Release loServerData Endtry @@ -27607,7 +28256,7 @@ Define Class CL_MENU_COL_BASE As CL_COL_BASE Local This As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' #Endif - oReg = Null + oReg = .Null. Procedure get_DataFromTablabin @@ -27622,7 +28271,7 @@ Define Class CL_MENU_COL_BASE As CL_COL_BASE Local I, lcLevelName, lnLastKey, llRetorno, llHayDatos, loReg ; , loBarPop As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' ; , loOption As CL_MENU_OPTION Of 'FOXBIN2PRG.PRG' - Store Null To loOption, loBarPop + Store .Null. To loOption, loBarPop With This As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' lnLastKey = 0 @@ -27635,14 +28284,14 @@ Define Class CL_MENU_COL_BASE As CL_COL_BASE Endif Do While Not Eof() - loReg = Null + loReg = .Null. Skip 1 If Eof() Exit Endif - loReg = Null + loReg = .Null. Scatter Memo Name loReg lnLastKey = toCol_LastLevelName.GetKey(loReg.LevelName) @@ -27668,24 +28317,24 @@ Define Class CL_MENU_COL_BASE As CL_COL_BASE Exit Case loReg.ObjType = C_OBJTYPE_MENUTYPE_BARorPOPUP && Bar or Popup - loBarPop = Null + loBarPop = .Null. loBarPop = Createobject('CL_MENU_BARPOP') llHayDatos = loBarPop.get_DataFromTablabin( loReg, toCol_LastLevelName ) llRetorno = .T. llRetorno = llHayDatos .Add( loBarPop ) - loBarPop = Null + loBarPop = .Null. If Not llHayDatos And toReg.ObjType = C_OBJTYPE_MENUTYPE_OPTION Exit Endif Case loReg.ObjType = C_OBJTYPE_MENUTYPE_OPTION && Option - loOption = Null + loOption = .Null. loOption = Createobject('CL_MENU_OPTION') llHayDatos = loOption.get_DataFromTablabin( loReg, toCol_LastLevelName ) llRetorno = llHayDatos .Add( loOption ) - loOption = Null + loOption = .Null. If Not llHayDatos And toReg.ObjType = C_OBJTYPE_MENUTYPE_OPTION Exit Endif @@ -27712,7 +28361,7 @@ Define Class CL_MENU_COL_BASE As CL_COL_BASE toCol_LastLevelName.Remove(lnLastKey) Endif Endif - Store Null To loBarPop, loOption + Store .Null. To loBarPop, loOption Release I, lcLevelName, lnLastKey, llHayDatos, loReg, loBarPop, loOption Endtry @@ -27837,6 +28486,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] @@ -27844,6 +28494,9 @@ Define Class CL_MENU As CL_MENU_COL_BASE *-- Modulo _Version = 0 _SourceFile = '' +*LScheffler 20.08.2023 +*issue #96, [KestasL] keep CodePage relavant information for binary sources + _cpid = Cpcurrent() Procedure analyzeCodeBlock @@ -27867,7 +28520,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE , llBloque_MenuType_Analizado, llBloque_Procedure_Analizado, llBloque_MenuLocation_Analizado ; , loOptions As CL_MENU_OPTION Of 'FOXBIN2PRG.PRG' ; , loBarPop As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' - Store Null To loBarPop, loOptions + Store .Null. To loBarPop, loOptions Store '' To lcComment llBloqueEncontrado = .T. @@ -27936,7 +28589,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE Throw Finally - Store Null To loBarPop, loOptions + Store .Null. To loBarPop, loOptions Release loReg, lcComment, lcExpr, lcProcName, lcProcCode ; , llBloque_SetupCode_Analizado, llBloque_CleanupCode_Analizado, llBloque_MenuCode_Analizado ; , llBloque_MenuType_Analizado, llBloque_Procedure_Analizado, llBloque_MenuLocation_Analizado ; @@ -28076,7 +28729,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE , llBloque_SetupCode_Analizado ; , loOptions As CL_MENU_OPTION Of 'FOXBIN2PRG.PRG' ; , loBarPop As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' - Store Null To loBarPop, loOptions + Store .Null. To loBarPop, loOptions Store '' To lcExpr, lcProcName, lcProcCode, lcComment With This As CL_MENU Of 'FOXBIN2PRG.PRG' @@ -28127,7 +28780,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE Endif Endif - loBarPop = Null + loBarPop = .Null. loBarPop = Createobject('CL_MENU_BARPOP') loBarPop.c_ParentName = '' loBarPop.n_ParentCode = .oReg.OBJCODE @@ -28156,7 +28809,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE loReg.Procedure = lcProcCode Endif - loBarPop = Null + loBarPop = .Null. loBarPop = Createobject('CL_MENU_BARPOP') loBarPop.c_ParentName = '' loBarPop.n_ParentCode = .oReg.OBJCODE @@ -28165,7 +28818,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE .Add( loBarPop ) *-- Creo option - loOption = Null + loOption = .Null. loOption = Createobject("CL_MENU_OPTION") Scatter Memo Blank Name loOption.oReg @@ -28179,19 +28832,19 @@ Define Class CL_MENU As CL_MENU_COL_BASE loBarPop.oReg.NUMITEMS = loBarPop.Count .ItemNum = Str(loBarPop.Count,3) .Scheme = 0 - loBarPop = Null + loBarPop = .Null. Endwith *-- Creo BarPop - loBarPop = Null + loBarPop = .Null. loBarPop = Createobject('CL_MENU_BARPOP') loBarPop.c_ParentName = '' loBarPop.n_ParentCode = loOption.oReg.OBJCODE loBarPop.n_ParentType = loOption.oReg.ObjType loBarPop.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, @tnCodeLines, toConversor ) loOption.Add( loBarPop ) - loBarPop = Null - loOption = Null + loBarPop = .Null. + loOption = .Null. Exit Otherwise && Otro valor @@ -28210,7 +28863,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE Throw Finally - Store Null To loBarPop, loOptions + Store .Null. To loBarPop, loOptions Release lcExpr, lcProcName, lcProcCode, lcComment, loReg, llBloque_SetupCode_Analizado ; , loOptions, loBarPop @@ -28284,7 +28937,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE , loCol_LastLevelName As Collection ; , loBarPop As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' ; , loOption As CL_MENU_OPTION Of 'FOXBIN2PRG.PRG' - Store Null To loOption, loBarPop, loCol_LastLevelName + Store .Null. To loOption, loBarPop, loCol_LastLevelName Store '' To lcText, lcEndProcedures With This As CL_MENU Of 'FOXBIN2PRG.PRG' @@ -28415,7 +29068,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE Throw Finally - Store Null To loOption, loBarPop, loCol_LastLevelName + Store .Null. To loOption, loBarPop, loCol_LastLevelName Release loReg, loHeader, lnNivel, lcEndProcedures, lcExpr, lcProcName, lcProcCode, lcLocation ; , loCol_LastLevelName, loBarPop, loOption @@ -28430,12 +29083,12 @@ Define Class CL_MENU As CL_MENU_COL_BASE * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) *--------------------------------------------------------------------------------------------------- Local loReg, loCol_LastLevelName As Collection - Store Null To loReg, loCol_LastLevelName + Store .Null. To loReg, loCol_LastLevelName Go Top Scatter Memo Name loReg loCol_LastLevelName = Createobject('COLLECTION') CL_MENU_COL_BASE::get_DataFromTablabin( loReg, loCol_LastLevelName ) - Store Null To loReg, loCol_LastLevelName + Store .Null. To loReg, loCol_LastLevelName Release loReg, loCol_LastLevelName Endproc @@ -28479,7 +29132,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE Lparameters toObj As Collection, tnNivel, toConversor Local loReg, lcTempName, loEx As Exception - Store Null To loReg + Store .Null. To loReg #If .F. Local toConversor As c_conversor_prg_a_mnx Of 'FOXBIN2PRG.PRG' @@ -28542,7 +29195,7 @@ Define Class CL_MENU As CL_MENU_COL_BASE Throw Finally - Store Null To loReg + Store .Null. To loReg Release loReg Endtry @@ -28590,7 +29243,7 @@ Define Class CL_MENU_BARPOP As CL_MENU_COL_BASE Local llBloqueEncontrado, lcSubName, lcComment, lnLast_I, loReg, lcExpr, lcProcName, lcProcCode, lcMenuType ; , loEx As Exception ; , loOption As CL_MENU_OPTION Of 'FOXBIN2PRG.PRG' - Store Null To loOption + Store .Null. To loOption Store '' To lcSubName, lcComment, lcExpr, lcProcName, lcProcCode With This As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' @@ -28656,7 +29309,7 @@ Define Class CL_MENU_BARPOP As CL_MENU_COL_BASE Endif Case Left( tcLine, 11 ) == 'DEFINE PAD ' Or Left( tcLine, 11 ) == 'DEFINE BAR ' - loOption = Null + loOption = .Null. loOption = Createobject("CL_MENU_OPTION") lnLast_I = m.I loOption.c_ParentName = loReg.LevelName @@ -28673,7 +29326,7 @@ Define Class CL_MENU_BARPOP As CL_MENU_COL_BASE loOption.oReg.ItemNum = Str(.Count,3) loReg.NUMITEMS = .Count loReg.Scheme = Iif( loReg.OBJCODE = C_OBJCODE_MENUBARPOPUP_MENUBAR, 3, 4 ) - loOption = Null + loOption = .Null. If I = lnLast_I && No avanzó, debe salir. Exit @@ -28694,7 +29347,7 @@ Define Class CL_MENU_BARPOP As CL_MENU_COL_BASE Throw Finally - Store Null To loOption + Store .Null. To loOption Release lcSubName, lcComment, lnLast_I, loReg, lcExpr, lcProcName, lcProcCode, lcMenuType, loOption Endtry @@ -28717,7 +29370,7 @@ Define Class CL_MENU_BARPOP As CL_MENU_COL_BASE Local loReg, I, lcText, lcTab, lcExpr, lcProcName, lcProcCode, loEx As Exception ; , loBarPop As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' ; , loOption As CL_MENU_OPTION Of 'FOXBIN2PRG.PRG' - Store Null To loOption, loBarPop + Store .Null. To loOption, loBarPop Store '' To lcText, lcExpr, lcProcName, lcProcCode loReg = This.oReg lcTab = Replicate(Chr(9),tnNivel) @@ -28780,7 +29433,7 @@ Define Class CL_MENU_BARPOP As CL_MENU_COL_BASE Throw Finally - Store Null To loOption, loBarPop + Store .Null. To loOption, loBarPop Release loReg, I, lcTab, lcExpr, lcProcName, lcProcCode, loBarPop, loOption Endtry @@ -28835,7 +29488,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Try Local llBloqueEncontrado, lcComment, loReg, lnLast_I, loEx As Exception, llPadOBar_Analizado ; , loBarPop As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' - Store Null To loBarPop + Store .Null. To loBarPop Store '' To lcComment With This As CL_MENU_OPTION Of 'FOXBIN2PRG.PRG' @@ -28884,7 +29537,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Endif Case Left( tcLine, 13 ) == 'DEFINE POPUP ' - loBarPop = Null + loBarPop = .Null. loBarPop = Createobject("CL_MENU_BARPOP") lnLast_I = m.I loBarPop.c_ParentName = loReg.LevelName @@ -28894,7 +29547,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE If Not loBarPop.analyzeCodeBlock( @tcLine, @taCodeLines, @m.I, tnCodeLines, toConversor ) I = m.I - 1 Endif - loBarPop = Null + loBarPop = .Null. Exit Otherwise && Otro valor @@ -28917,7 +29570,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Throw Finally - Store Null To loBarPop + Store .Null. To loBarPop Release lcComment, loReg, lnLast_I, llPadOBar_Analizado, loBarPop Endtry @@ -29317,7 +29970,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Try Local llBloqueEncontrado, lcText, loReg, lnPos, lcPadName, lcExpr, lcComment, lcProcName, lcProcCode, loEx As Exception ; , lnNegContainer, lnNegObject - Store Null To loReg + Store .Null. To loReg Store '' To lcText, lcComment, lcPadName * Estructura ejemplo a analizar: @@ -29500,7 +30153,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Throw Finally - Store Null To loReg + Store .Null. To loReg Release tcLine, taCodeLines, I, tnCodeLines, toConversor ; , lcText, loReg, lnPos, lcPadName, lcExpr, lcComment, lcProcName, lcProcCode, lnNegContainer, lnNegObject @@ -29524,7 +30177,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Local loReg, I, lcText, lcTab, lcExpr, lcProcName, lcProcCode, loEx As Exception ; , loBarPop As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' ; , loOption As CL_MENU_OPTION Of 'FOXBIN2PRG.PRG' - Store Null To loOption, loBarPop, loReg + Store .Null. To loOption, loBarPop, loReg lcText = '' lcProcName = '' @@ -29600,7 +30253,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Throw Finally - Store Null To loOption, loBarPop, loReg + Store .Null. To loOption, loBarPop, loReg Release loReg, I, lcTab, lcExpr, lcProcName, lcProcCode, loBarPop, loOption Endtry @@ -29623,7 +30276,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Local lcText, lcTab, loEx As Exception ; , loBarPop As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' ; , lcName , lcName2 - Store Null To loBarPop + Store .Null. To loBarPop lcTab = Replicate(Chr(9),tnNivel) lcText = '' *!* Changed by LScheffler 22.4.2021 @@ -29709,7 +30362,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Throw Finally - Store Null To loBarPop + Store .Null. To loBarPop Release lcTab, loBarPop Endtry @@ -29741,7 +30394,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Local lcText, lcTab, lnContainer, lnObject, loEx As Exception ; , loBarPop As CL_MENU_BARPOP Of 'FOXBIN2PRG.PRG' ; , lcName2 - Store Null To loBarPop + Store .Null. To loBarPop lcTab = Replicate(Chr(9),tnNivel) If !Empty(toReg.Name) And Left( toReg.Name, 1 ) = '_' Then lcName2 = '"' + Alltrim(toReg.Name) + '"' @@ -29827,7 +30480,7 @@ Define Class CL_MENU_OPTION As CL_MENU_COL_BASE Throw Finally - Store Null To loBarPop + Store .Null. To loBarPop Release lcTab, lnContainer, lnObject, loBarPop Endtry @@ -29896,7 +30549,7 @@ Define Class CL_DBF_UTILS As Session n_NumberOfRecords = 0 n_NumberOfRecordsReal = 0 n_PosOfFirstDataRecord = 0 - Fields = Null + Fields = .Null. Procedure Init @@ -29920,7 +30573,7 @@ Define Class CL_DBF_UTILS As Session Local lnHandle, lcStr, lnDataPos, lnFieldCount, lnVal, I, loEx As Exception ; , lnCodePage, lcCodePageDesc, lnFileLength ; , loField As CL_DBF_UTILS_FIELD Of 'FOXBIN2PRG.PRG' - Store Null To loField + Store .Null. To loField tn_HexFileType = 0 Store '' To tcDBC_Name, lcStr lnHandle = Fopen(tc_FileName,0) @@ -29997,7 +30650,7 @@ Define Class CL_DBF_UTILS As Session Endwith .Fields.Add(loField) - loField = Null + loField = .Null. Endfor *--- lcStr = Fread(lnHandle,1) && n+1 Header Record Terminator (0x0D) @@ -30025,7 +30678,7 @@ Define Class CL_DBF_UTILS As Session Finally Fclose(lnHandle) - Store Null To loField + Store .Null. To loField Release lcStr, lnDataPos, lnFieldCount, lnVal, I, lnCodePage, lcCodePageDesc, loField Endtry @@ -30263,9 +30916,9 @@ Define Class CL_DBF_UTILS As Session --------------------------------------------------- Field flags Reference: 0x01 System Column (not visible to user) - 0x02 Column can store null values + 0x02 Column can store .Null. values 0x04 Binary column (for CHAR and MEMO only) - 0x06 (0x02+0x04) When a field is NULL and binary (Integer, Currency, and Character/Memo fields) + 0x06 (0x02+0x04) When a field is .Null. and binary (Integer, Currency, and Character/Memo fields) 0x0C Column is autoincrementing ENDTEXT @@ -30561,71 +31214,82 @@ Define Class CL_CFG As Custom c_Foxbin2prg_FullPath = '' c_Foxbin2prg_ConfigFile = '' c_CurDir = '' - c_Language_In = Null - n_Debug = Null - n_BodyDevInfo = Null - l_ShowErrors = Null - n_ShowProgressbar = Null - l_Recompile = Null - l_NoTimestamps = Null - l_ClearUniqueID = Null - l_ClearDBFLastUpdate = Null - n_OptimizeByFilestamp = Null - n_ExcludeDBFAutoincNextval = Null - l_RedirectClassPerFileToMain = Null - n_RedirectClassType = Null - l_RemoveNullCharsFromCode = Null - l_RemoveZOrderSetFromProps = Null - n_UseClassPerFile = Null - n_CheckFileInPath = Null + c_Language_In = .Null. + n_Debug = .Null. + n_BodyDevInfo = .Null. + l_ShowErrors = .Null. + n_ShowProgressbar = .Null. + l_Recompile = .Null. + l_NoTimestamps = .Null. + l_ClearUniqueID = .Null. + l_ClearDBFLastUpdate = .Null. + n_OptimizeByFilestamp = .Null. + n_ExcludeDBFAutoincNextval = .Null. + l_RemoveNullCharsFromCode = .Null. + l_RemoveZOrderSetFromProps = .Null. + n_UseClassPerFile = .Null. + l_RedirectClassPerFileToMain = .Null. + n_RedirectClassType = .Null. + l_ClassPerFileCheck = .Null. + l_UseFormSettings = .Null. + n_UseFormPerFile = .Null. + l_RedirectFormPerFileToMain = .Null. + n_RedirectFormType = .Null. + l_FormPerFileCheck = .Null. + n_CheckFileInPath = .Null. *!* Changed by: LScheffler 21.02.2021 *!* change date="{^2021-02-21,10:57:00}" * additional options controlling * - splitt of DBC separated from VCX/SCX * - new operations of DBF *!* /Changed by: LScheffler 21.02.2021 - l_OldFilesPerDBC = Null - n_UseFilesPerDBC = Null - l_RedirectFilePerDBCToMain = Null - l_ItemPerDBCCheck = Null - l_DBF_BinChar_Base64 = Null - l_DBF_IncludeDeleted = Null + l_OldFilesPerDBC = .Null. + n_UseFilesPerDBC = .Null. + l_RedirectFilePerDBCToMain = .Null. + l_ItemPerDBCCheck = .Null. + l_DBF_BinChar_Base64 = .Null. + l_DBF_IncludeDeleted = .Null. *!* /Changed by: LScheffler 21.02.2021 - l_ClassPerFileCheck = Null - n_ExtraBackupLevels = Null - c_VC2 = Null - c_SC2 = Null - c_PJ2 = Null - c_FR2 = Null - c_LB2 = Null - c_DB2 = Null - c_DC2 = Null - c_MN2 = Null - c_FK2 = Null - c_ME2 = Null - n_PJX_Conversion_Support = Null - n_VCX_Conversion_Support = Null - n_SCX_Conversion_Support = Null - n_FRX_Conversion_Support = Null - n_LBX_Conversion_Support = Null - n_MNX_Conversion_Support = Null - n_DBC_Conversion_Support = Null - n_DBF_Conversion_Support = Null - n_FKY_Conversion_Support = Null - n_MEM_Conversion_Support = Null - c_DBF_Conversion_Included = Null - c_DBF_Conversion_Excluded = Null - c_BackgroundImage = Null - n_PRG_Compat_Level = Null +*!* LScheffler 30.08.2023 + n_InhibitInheritance = .Null. + n_ExtraBackupLevels = .Null. + c_VC2 = .Null. + c_SC2 = .Null. + c_PJ2 = .Null. + c_FR2 = .Null. + c_LB2 = .Null. + c_DB2 = .Null. + c_DC2 = .Null. + c_MN2 = .Null. + c_FK2 = .Null. + c_ME2 = .Null. + n_PJX_Conversion_Support = .Null. + n_VCX_Conversion_Support = .Null. + n_SCX_Conversion_Support = .Null. + n_FRX_Conversion_Support = .Null. + n_LBX_Conversion_Support = .Null. + n_MNX_Conversion_Support = .Null. + n_DBC_Conversion_Support = .Null. + n_DBF_Conversion_Support = .Null. + n_FKY_Conversion_Support = .Null. + n_MEM_Conversion_Support = .Null. + c_DBF_Conversion_Included = .Null. + c_DBF_Conversion_Excluded = .Null. + c_BackgroundImage = .Null. + n_PRG_Compat_Level = .Null. *** DH 2021-03-04: added n_HomeDir property - n_HomeDir = Null - + n_HomeDir = .Null. Procedure CopyFrom *-- Copia las propiedades del CFG indicado - Lparameters toParentCFG + Lparameters toParentCFG,toSourceCFG - With This As CL_CFG Of 'FOXBIN2PRG.PRG' + IF PCOUNT()=1 THEN + toSourceCFG = This + ENDIF &&PCOUNT()=1 + +* With This As CL_CFG Of 'FOXBIN2PRG.PRG' + With toSourceCFG As CL_CFG Of 'FOXBIN2PRG.PRG' .c_Foxbin2prg_FullPath = toParentCFG.c_Foxbin2prg_FullPath .c_Foxbin2prg_ConfigFile = toParentCFG.c_Foxbin2prg_ConfigFile .c_CurDir = toParentCFG.c_CurDir @@ -30640,11 +31304,18 @@ Define Class CL_CFG As Custom .l_ClearDBFLastUpdate = toParentCFG.l_ClearDBFLastUpdate .n_OptimizeByFilestamp = toParentCFG.n_OptimizeByFilestamp .n_ExcludeDBFAutoincNextval = toParentCFG.n_ExcludeDBFAutoincNextval - .l_RedirectClassPerFileToMain = toParentCFG.l_RedirectClassPerFileToMain - .n_RedirectClassType = toParentCFG.n_RedirectClassType .l_RemoveNullCharsFromCode = toParentCFG.l_RemoveNullCharsFromCode .l_RemoveZOrderSetFromProps = toParentCFG.l_RemoveZOrderSetFromProps .n_UseClassPerFile = toParentCFG.n_UseClassPerFile + .l_RedirectClassPerFileToMain = toParentCFG.l_RedirectClassPerFileToMain + .n_RedirectClassType = toParentCFG.n_RedirectClassType + .l_ClassPerFileCheck = toParentCFG.l_ClassPerFileCheck + .l_UseFormSettings = toParentCFG.l_UseFormSettings + .n_UseFormPerFile = toParentCFG.n_UseFormPerFile + .l_RedirectFormPerFileToMain = toParentCFG.l_RedirectFormPerFileToMain + .n_RedirectFormType = toParentCFG.n_RedirectFormType + .l_FormPerFileCheck = toParentCFG.l_FormPerFileCheck + *!* Changed by: LScheffler 21.02.2021 *!* change date="{^2021-02-21,10:57:00}" * additional options controlling @@ -30657,7 +31328,8 @@ Define Class CL_CFG As Custom .l_DBF_BinChar_Base64 = toParentCFG.l_DBF_BinChar_Base64 .l_DBF_IncludeDeleted = toParentCFG.l_DBF_IncludeDeleted *!* /Changed by: LScheffler 21.02.2021 - .l_ClassPerFileCheck = toParentCFG.l_ClassPerFileCheck +*!* LScheffler 30.08.2023 + .n_InhibitInheritance = toParentCFG.n_InhibitInheritance .n_ExtraBackupLevels = toParentCFG.n_ExtraBackupLevels .c_VC2 = toParentCFG.c_VC2 .c_SC2 = toParentCFG.c_SC2 @@ -30791,6 +31463,13 @@ Define Class CL_LANG As Custom C_UNKNOWN_CLASS_NAME_LOC = "" C_USE_FILE_TIMESTAMP_OPTIMIZATION_LOC = "" C_USING_THIS_SETTINGS_LOC = "" + C_USING_THIS_SETTINGS_LOC1 = "" + C_USING_THIS_SETTINGS_LOC2 = "" + C_USING_THIS_SETTINGS_LOC3 = "" + C_USING_THIS_SETTINGS_LOC4 = "" + C_USING_THIS_SETTINGS_LOC5 = "" + C_USING_THIS_SETTINGS_LOC6 = "" + C_USING_THIS_SETTINGS_LOC7 = "" C_WARNING_LOC = "" C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "" C_WITH_ERRORS_LOC = "" @@ -30872,9 +31551,9 @@ Define Class CL_LANG As Custom .C_FILENAME_LOC = "Fichier" .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "ERREUR" .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "SYNTAX AND PARAMETERS INFO" - .C_ClassTwice_Header_LOC = 0h0D0A+"Class defined twice."+0h0D0A - .C_ClassTwice_Lib_LOC = 0h0D0A+"Library: " - .C_ClassTwice_Class_LOC = 0h0D0A+"Class: " + .C_ClassTwice_Header_LOC = CR_LF+"Class defined twice."+0h0D0A + .C_ClassTwice_Lib_LOC = CR_LF+"Library: " + .C_ClassTwice_Class_LOC = CR_LF+"Class: " TEXT TO .C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <<>>################################################################################################################ <<>>FoxBin2Prg Home Page and download: https://github.com/fdbozzo/foxbin2prg/wiki - Fernando D. Bozzo (2013.11.25) @@ -30899,13 +31578,12 @@ Define Class CL_LANG As Custom <<>>cOriginalFileName: used in those cases in which inputFile is a temporary filename and you want to generate the correct filename on the header of the text version <<>>cRecompile: Indicates recompile ('1') the binary once regenerated. You can specify a Path too (ie, the project one) <<>>cNoTimestamps: Indicates if timestamp of several file types must be cleared ('1' or empty) or not ('0') - <<>>cCFG_File: Indicates a CFG filename for not using the default on foxbin2prg directory + <<>>cCFG_File: Indicates a CFG filename for using special default instead of the config file in foxbin2prg directory. <<>>cOutputFolder: The output folder to write to. If it isn't specified, the same folder as the source is used. - <<>> <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <<>> - <<>>FOXBIN2PRG.EXE [c|C|t [OutFileName]] - <<>>DO FOXBIN2PRG.EXE WITH [-c|-C|-t [, OutFileName]] + <<>>FOXBIN2PRG.EXE c|C|t [OutFileName [ cCFG_File[ cDebug]]] + <<>>DO FOXBIN2PRG.EXE WITH -c|-C|-t [, OutFileName [, cCFG_File[, cDebug]]] <<>> <<>>-- Parameter details: <<>>No parameter: Calls this info screen @@ -30914,6 +31592,16 @@ Define Class CL_LANG As Custom <<>> If OutFileName is not given a FoxBin2Prg._cfg config file will be created at default folder <<>>-t (t) Creates a template table-config-file (like .dbf.cfg) <<>> If OutFileName is not given, and a table is open a .dbf._cfg config file will be created at table folder. + <<>>cCFG_File: Indicates a CFG filename for using special default instead of the config file in foxbin2prg directory. + <<>>cDebug: '1' for generating process LOGs, stop on errors + <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <<>> + <<>>FOXBIN2PRG.EXE VERNO + <<>>DO FOXBIN2PRG.EXE WITH "VERNO"|cPara + <<>> + <<>>-- Parameter details: + <<>>-VERNO (VERNO) Return version number of FoxBin2Prg + <<>>cPara A parameter with the Value "VERNO", the version number is returned to this parameter <<>> <<>> ENDTEXT @@ -30925,27 +31613,42 @@ Define Class CL_LANG As Custom <<>>Version: <<_Screen.c_FB2PRG_EXE_Version>> <<>>**************************************************************************************************************** <<>> - <<>> Note, configuration files will follow an inheritance. + <<>> 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 InhibitInheritance setting controls if other config files will be evaluated (default) <<>> 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: .dbf.cfg in tables folder) - <<>> 6., Parameter calling FOXBIN2PRG.EXE. + <<>> 5., optional Special settings per single DBF's Syntax: .dbf.cfg in tables folder) <<>> <<>> Some Parameter calling FOXBIN2PRG.EXE overturn this settings (except Defaults) <<>>**************************************************************************************************************** <<>> <<>>-- Settings for internal work, not processing <<>>Language: (auto) && Language of shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC [DEFAULT] - <<>>ShowProgressbar: 1 && 0=Don't show, 1=Allways show, 2= Show only for multi-file processing + <<>>ShowProgressbar: 1 && 0=Don't show, 1=Allways show, 2=Show only for multi-file processing <<>>DontShowErrors: 0 && Show message errors by default <<>>ExtraBackupLevels: 1 && By default 1 BAK is created. With this you can make more .N.BAK, or none - <<>>Debug: 0 && Don't Activate individual .Log by default + <<>>Debug: 0 && 0=Don't Activate individual .Log by default + <<>> && 1=Activate individual .Log by default + <<>> && 2=??? + <<>> && Only valid if not controlled by parameter <<>>BackgroundImage: && Backgroundimage for process form. Empty for empty Background. File not found uses default. - <<>>HomeDir: 1 && Home Directory in PJX + <<>>HomeDir: 1 && Home directory in PJX <<>> && 0 don't save HomeDir in PJ2 <<>> && 1 save HomeDir in PJ2 + <<>>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + <<>>-- Settings for config file via parameter only + <<>>InhibitInheritance: 0 && 0=Allow scanning "regular" config files (file via parameter is just additional default) + <<>> && 1=Only read directory branch from root to parent of folder and below, not FoxBin2Prg default + <<>> && 2=Only read folder and subfolder of the file given by parameter + <<>> && 3=Read no other file + <<>> && This is like + <<>> && 0 Default | Parameter file | Default near FoxBin2Prg | all other config files + <<>> && 1 Default | Parameter file | Inheritance from root to parent of folder | folder and subdirs + <<>> && 2 Default | Parameter file | folder and subdirs + <<>> && 3 Default | Parameter file <<>>---------------------------------------------------------------------------------------------------------------- <<>> <<>>-- Conversion operation by type @@ -30970,15 +31673,16 @@ Define Class CL_LANG As Custom <<>>---------------------------------------------------------------------------------------------------------------- <<>> <<>>Setting for container files (not pjx) - <<>>-- CLASS and FORM options (tx2 is to read as vc2 or sc2, VCX might be SCX) + <<>>-- CLASS (, FORM and DBC) options (tx2 is to read as vc2 or sc2, VCX might be SCX) + <<>>-- FORM and DBC options default to this settings, id not set otherwise. See below. <<>>- Class per file options (UseClassPerFile: 1) <<>>UseClassPerFile: 0 && Determines how a library (or form) will handle included class (or, for forms, objects) <<>> && 0 One library.tx2 file <<>> && 1 Multiple file.class.tx2 files <<>> && 2 Multiple file.baseclass.class.tx2 files <<>>RedirectClassPerFileToMain: 0 && When regenerating binary files, determine target file - <<>> && 0 Don't redirect to file.tx2 - <<>> && 1 Redirect to file.tx2 when selecting file[.baseclass].class.tx2 + <<>> && 0 Don't redirect to file.vcx/scx + <<>> && 1 Redirect to file.vcx/scx when selecting file[.baseclass].class.tx2 <<>> && RedirectClassType: 1 has precedence <<>>RedirectClassType: 0 && For classes created with UseClassPerFile>0 in the form file[.baseclass].class.tx2 <<>> && Those files could be imported like file.tx2::Class::import or like file[.baseclass].class.tx2 @@ -30993,17 +31697,43 @@ Define Class CL_LANG As Custom <<>> && Ignored for RedirectClassType: 2 <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <<>> + <<>>-- FORM options + <<>>- Form per file options (UseFormSettings: 1) + <<>>UseFormSettings: 0 && 1=Turns the File per SCX options on, 0 uses the old UseClassPerFile etc settings. + <<>> && Options below will only read if UseFormSettings is set 1 before! + <<>> && If UseFormSettings is set 0 later, all setting will be lost + <<>>UseFormPerFile: 0 && Determines how a form will handle included objects + <<>> && 0 One Form.sc2 file + <<>> && 1 Multiple Form.Obj.sc2 files + <<>> && 2 Multiple Form.baseclass.Obj.sc2 files + <<>>RedirectFormPerFileToMain: 0 && When regenerating binary files, determine target file + <<>> && 0 Don't redirect to Form.scx + <<>> && 1 Redirect to Form.scx when selecting Form[.baseclass].Obj.sc2 + <<>> && RedirectFormType: 1 has precedence + <<>>RedirectFormType: 0 && For classes created with UseFormPerFile>0 in the form Form[.baseclass].Obj.sc2 + <<>> && Those files could be imported like Form.sc2::Class::import or like Form[.baseclass].Obj.sc2 + <<>> && For the second form: + <<>> && 0 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and add / replace all other classes of this library + <<>> && 1 Redirect Form[.baseclass].Obj.sc2 to Form[.baseclass].Obj.SCX and do not touch Form.SCX + <<>> && 2 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and do not touch other classes of Form.SCX + <<>>FormPerFileCheck: 0 && Check, if files listed in the main file of a library or form will be included + <<>> && 0 Don't check file inclusion + <<>> && 1 Check Form[.baseclass].Obj.sc2 inclusion + <<>> && Only used if import file is in Form[.baseclass].Obj.sc2 syntax + <<>> && Ignored for RedirectFormType: 2 + <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <<>> <<>>-- DBC options <<>>- File per DBC options (UseFilesPerDBC: 1) <<>>OldFilesPerDBC: 0 && 1=Turns the File per DBC options on, 0 uses the old UseClassPerFile etc settings. <<>> && Options below will only read if OldFilesPerDBC is set 1 before! - <<>> && If OldFilesPerDBC is set 0 later, alle setting will be lost + <<>> && If OldFilesPerDBC is set 0 later, all setting will be lost <<>>UseFilesPerDBC: 0 && 0=One database dc2 file, 1=Multiple file.*.*.dc2 files <<>> && 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: 0 && 0=Don't redirect to file.dc2, 1=Redirect to file.tx2 when selecting file.item.*.dc2 + <<>>RedirectFilePerDBCToMain: 0 && 0=Don't redirect to file.dc2, 1=Redirect to file.dc2 when selecting file.item.*.dc2 <<>>ItemPerDBCCheck: 0 && 0=Don't check file.item.*.dc2 inclusion, 1=Check file.item.*.dc2 inclusion <<>>---------------------------------------------------------------------------------------------------------------- <<>> @@ -31011,7 +31741,7 @@ Define Class CL_LANG As Custom <<>>NoTimestamps: 1 && Clear timestamps of several file types by default for minimize text-file differences <<>>ClearUniqueID: 1 && 0=Keep UniqueID in text files, 1=Clear Unique ID. Useful for Diff and Merge <<>>OptimizeByFilestamp: 0 && 1=Optimize file regeneration depending on file timestamp. Dangerous while working with branches! - <<>>RemoveNullCharsFromCode: 1 && 1=Drop NULL chars from source code + <<>>RemoveNullCharsFromCode: 1 && 1=Drop .Null. chars from source code <<>>RemoveZOrderSetFromProps: 0 && 0=Do not remove ZOrderSet property from object, 1=Remove ZOrderSet property from object <<>>PRG_Compat_Level: 0 && 0=Legacy, 1=Use HELPSTRING as Class Procedure comment <<>>---------------------------------------------------------------------------------------------------------------- @@ -31102,6 +31832,13 @@ Define Class CL_LANG As Custom .C_UNKNOWN_CLASS_NAME_LOC = "Classe inconnue[<>]" .C_USE_FILE_TIMESTAMP_OPTIMIZATION_LOC = "Utilisez le fichier Optimisation d'horodatage" .C_USING_THIS_SETTINGS_LOC = "Utilisation de ce paramètre" + .C_USING_THIS_SETTINGS_LOC1 = " BY PARAMETER, skipping all previous config!" + .C_USING_THIS_SETTINGS_LOC2 = " Parsing of full configuration allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC3 = " Parsing configuration in parent~ and subdirectories allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC4 = " Parsing configuration in subdirectories allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC5 = " Parsing of other configuration not allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC6 = "External configuration file set: " + .C_USING_THIS_SETTINGS_LOC7 = ", using cached config." .C_WARNING_LOC = "AVERTISSEMENT!" .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "AVERTISSEMENT!" + CR_LF+ "ASSUREZ VOUS NE UTILISEZ PAS UN ALIAS DE TABLE SUR LES EXPRESSIONS INDEX CLÉS!! (exemple: index on <>.campo tag keyname)" .C_WITH_ERRORS_LOC = "avec des erreurs" @@ -31113,11 +31850,11 @@ Define Class CL_LANG As Custom .C_INDEX2BIN_STRUCTURAL_LOC = " TAGs for structural index" .C_INDEX2BIN_STANDALONE_LOC = " Standalone index " .C_INDEX2BIN_COMPOUND_LOC = " TAGs for compound index " - .C_PJXPATH_ERR_LOC1 = 0h0D0A + 'Main file "' - .C_PJXPATH_ERR_LOC2 = 0h0D0A + 'Project icon file "' - .C_PJXPATH_ERR_LOC3 = 0h0D0A + 'File ""' - .C_PJXPATH_ERR_LOC4 = '"' + 0h0D0A + 'not in PJX folder structure, "' - .C_PJXPATH_ERR_LOC5 = '",' + 0h0D0A + 'check option "CheckFileInPath".' + 0h0D0A0D0A + .C_PJXPATH_ERR_LOC1 = CR_LF + 'Main file "' + .C_PJXPATH_ERR_LOC2 = CR_LF + 'Project icon file "' + .C_PJXPATH_ERR_LOC3 = CR_LF + 'File ""' + .C_PJXPATH_ERR_LOC4 = '"' + CR_LF + 'not in PJX folder structure, "' + .C_PJXPATH_ERR_LOC5 = '",' + CR_LF + 'check option "CheckFileInPath".' + CR_LF+CR_LF Case Inlist(tcLanguage, '34', 'ES') && Spanish (Español) *------------------------------------------------------------------------------------------------------------------------------------------- @@ -31161,9 +31898,9 @@ Define Class CL_LANG As Custom .C_FILENAME_LOC = "Archivo" .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "ERROR" .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "INFORMACIÓN DE SINTAXIS Y PARÁMETROS" - .C_ClassTwice_Header_LOC = 0h0D0A+"Class defined twice."+0h0D0A - .C_ClassTwice_Lib_LOC = 0h0D0A+"Library: " - .C_ClassTwice_Class_LOC = 0h0D0A+"Class: " + .C_ClassTwice_Header_LOC = CR_LF+"Class defined twice."+CR_LF + .C_ClassTwice_Lib_LOC = CR_LF+"Library: " + .C_ClassTwice_Class_LOC = CR_LF+"Class: " TEXT TO .C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <<>>################################################################################################################ <<>>Página principal y descarga de FoxBin2Prg: https://github.com/fdbozzo/foxbin2prg/wiki - Fernando D. Bozzo (2013.11.25) @@ -31188,13 +31925,12 @@ Define Class CL_LANG As Custom <<>>cOriginalFileName: Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar el nombre correcto en la cabecera de la versión texto <<>>cRecompile: Indica recompilar ('1') el binario una vez regenerado. También se puede indicar un Path (p.ej, el del proyecto) <<>>cNoTimestamps: Indica si se debe anular el timestamp ('1' o vacío) o no ('0') - <<>>cCFG_File: Indica un nombre de archivo CFG para no usar el predeterminado en el directorio de foxbin2prg + <<>>cCFG_File: Indicates a CFG filename for using special default instead of the config file in foxbin2prg directory. <<>>cOutputFolder: The output folder to write to. If it isn't specified, the same folder as the source is used. - <<>> <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <<>> - <<>>FOXBIN2PRG.EXE [c|C|t [OutFileName]] - <<>>DO FOXBIN2PRG.EXE WITH [-c|-C|-t [, OutFileName]] + <<>>FOXBIN2PRG.EXE c|C|t [OutFileName [ cCFG_File[ cDebug]]] + <<>>DO FOXBIN2PRG.EXE WITH -c|-C|-t [, OutFileName [, cCFG_File[, cDebug]]] <<>> <<>>-- Parameter details: <<>>No parameter: Calls this info screen @@ -31203,6 +31939,17 @@ Define Class CL_LANG As Custom <<>> If OutFileName is not given a FoxBin2Prg._cfg config file will be created at default folder <<>>-t (t) Creates a template table-config-file (like .dbf.cfg) <<>> If OutFileName is not given, and a table is open a .dbf._cfg config file will be created at table folder. + <<>>cCFG_File: Indicates a CFG filename for using special default instead of the config file in foxbin2prg directory. + <<>>cDebug: '1' for generating process LOGs, stop on errors () + <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <<>> + <<>>FOXBIN2PRG.EXE VERNO + <<>>DO FOXBIN2PRG.EXE WITH "VERNO"|cPara + <<>> + <<>>-- Parameter details: + <<>>-VERNO (VERNO) Return version number of FoxBin2Prg + <<>>cPara A parameter with the Value "VERNO", the version number is returned to this parameter + <<>> <<>> ENDTEXT *** DH 2021-03-04: added HomeDir to text @@ -31216,24 +31963,39 @@ Define Class CL_LANG As Custom <<>> 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 InhibitInheritance setting controls if other config files will be evaluated (default) <<>> 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: .dbf.cfg in tables folder) - <<>> 6., Parameter calling FOXBIN2PRG.EXE. + <<>> 5., optional Special settings per single DBF's Syntax: .dbf.cfg in tables folder) <<>> <<>> Some Parameter calling FOXBIN2PRG.EXE overturn this settings (except Defaults) <<>>**************************************************************************************************************** <<>> <<>>-- Settings for internal work, not processing <<>>Language: (auto) && Language of shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC [DEFAULT] - <<>>ShowProgressbar: 1 && 0=Don't show, 1=Allways show, 2= Show only for multi-file processing + <<>>ShowProgressbar: 1 && 0=Don't show, 1=Allways show, 2=Show only for multi-file processing <<>>DontShowErrors: 0 && Show message errors by default <<>>ExtraBackupLevels: 1 && By default 1 BAK is created. With this you can make more .N.BAK, or none - <<>>Debug: 0 && Don't Activate individual .Log by default + <<>>Debug: 0 && 0=Don't Activate individual .Log by default + <<>> && 1=Activate individual .Log by default + <<>> && 2=??? + <<>> && Only valid if not controlled by parameter <<>>BackgroundImage: && Backgroundimage for process form. Empty for empty Background. File not found uses default. - <<>>HomeDir: 1 && Home Directory in PJX + <<>>HomeDir: 1 && Home directory in PJX <<>> && 0 don't save HomeDir in PJ2 <<>> && 1 save HomeDir in PJ2 + <<>>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + <<>>-- Settings for config file via parameter only + <<>>InhibitInheritance: 0 && 0=Allow scanning "regular" config files (file via parameter is just additional default) + <<>> && 1=Only read directory branch from root to parent of folder and below, not FoxBin2Prg default + <<>> && 2=Only read folder and subfolder of the file given by parameter + <<>> && 3=Read no other file + <<>> && This is like + <<>> && 0 Default | Parameter file | Default near FoxBin2Prg | all other config files + <<>> && 1 Default | Parameter file | Inheritance from root to parent of folder | folder and subdirs + <<>> && 2 Default | Parameter file | folder and subdirs + <<>> && 3 Default | Parameter file <<>>---------------------------------------------------------------------------------------------------------------- <<>> <<>>-- Conversion operation by type @@ -31258,15 +32020,16 @@ Define Class CL_LANG As Custom <<>>---------------------------------------------------------------------------------------------------------------- <<>> <<>>Setting for container files (not pjx) - <<>>-- CLASS and FORM options (tx2 is to read as vc2 or sc2, VCX might be SCX) + <<>>-- CLASS (, FORM and DBC) options (tx2 is to read as vc2 or sc2, VCX might be SCX) + <<>>-- FORM and DBC options default to this settings, if not set otherwise. See below. <<>>- Class per file options (UseClassPerFile: 1) <<>>UseClassPerFile: 0 && Determines how a library (or form) will handle included class (or, for forms, objects) <<>> && 0 One library.tx2 file <<>> && 1 Multiple file.class.tx2 files <<>> && 2 Multiple file.baseclass.class.tx2 files <<>>RedirectClassPerFileToMain: 0 && When regenerating binary files, determine target file - <<>> && 0 Don't redirect to file.tx2 - <<>> && 1 Redirect to file.tx2 when selecting file[.baseclass].class.tx2 + <<>> && 0 Don't redirect to file.vcx/scx + <<>> && 1 Redirect to file.vcx/scx when selecting file[.baseclass].class.tx2 <<>> && RedirectClassType: 1 has precedence <<>>RedirectClassType: 0 && For classes created with UseClassPerFile>0 in the form file[.baseclass].class.tx2 <<>> && Those files could be imported like file.tx2::Class::import or like file[.baseclass].class.tx2 @@ -31281,11 +32044,37 @@ Define Class CL_LANG As Custom <<>> && Ignored for RedirectClassType: 2 <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <<>> + <<>>-- FORM options + <<>>- Form per file options (UseFormSettings 1) + <<>>UseFormSettings: 0 && 1=Turns the File per SCX options on, 0 uses the old UseClassPerFile etc settings. + <<>> && Options below will only read if UseFormSettings is set 1 before! + <<>> && If UseFormSettings is set 0 later, all setting will be lost + <<>>UseFormPerFile: 0 && Determines how a form will handle included objects + <<>> && 0 One Form.sc2 file + <<>> && 1 Multiple Form.Obj.sc2 files + <<>> && 2 Multiple Form.baseclass.Obj.sc2 files + <<>>RedirectFormPerFileToMain: 0 && When regenerating binary files, determine target file + <<>> && 0 Don't redirect to Form.scx + <<>> && 1 Redirect to Form.scx when selecting Form[.baseclass].Obj.sc2 + <<>> && RedirectFormType: 1 has precedence + <<>>RedirectFormType: 0 && For classes created with UseFormPerFile>0 in the form Form[.baseclass].Obj.sc2 + <<>> && Those files could be imported like Form.sc2::Class::import or like Form[.baseclass].Obj.sc2 + <<>> && For the second form: + <<>> && 0 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and add / replace all other classes of this library + <<>> && 1 Redirect Form[.baseclass].Obj.sc2 to Form[.baseclass].Obj.SCX and do not touch Form.SCX + <<>> && 2 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and do not touch other classes of Form.SCX + <<>>FormPerFileCheck: 0 && Check, if files listed in the main file of a library or form will be included + <<>> && 0 Don't check file inclusion + <<>> && 1 Check Form[.baseclass].Obj.sc2 inclusion + <<>> && Only used if import file is in Form[.baseclass].Obj.sc2 syntax + <<>> && Ignored for RedirectFormType: 2 + <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <<>> <<>>-- DBC options <<>>- File per DBC options (UseFilesPerDBC: 1) <<>>OldFilesPerDBC: 0 && 1=Turns the File per DBC options on, 0 uses the old UseClassPerFile etc settings. <<>> && Options below will only read if OldFilesPerDBC is set 1 before! - <<>> && If OldFilesPerDBC is set 0 later, alle setting will be lost + <<>> && If OldFilesPerDBC is set 0 later, all setting will be lost <<>>UseFilesPerDBC: 0 && 0=One database dc2 file, 1=Multiple file.*.*.dc2 files <<>> && 0 creates only a file.dc2 with all DBC (file) data <<>> && 1 creates a file.dc2 with DBC properties @@ -31299,7 +32088,7 @@ Define Class CL_LANG As Custom <<>>NoTimestamps: 1 && Clear timestamps of several file types by default for minimize text-file differences <<>>ClearUniqueID: 1 && 0=Keep UniqueID in text files, 1=Clear Unique ID. Useful for Diff and Merge <<>>OptimizeByFilestamp: 0 && 1=Optimize file regeneration depending on file timestamp. Dangerous while working with branches! - <<>>RemoveNullCharsFromCode: 1 && 1=Drop NULL chars from source code + <<>>RemoveNullCharsFromCode: 1 && 1=Drop .Null. chars from source code <<>>RemoveZOrderSetFromProps: 0 && 0=Do not remove ZOrderSet property from object, 1=Remove ZOrderSet property from object <<>>PRG_Compat_Level: 0 && 0=Legacy, 1=Use HELPSTRING as Class Procedure comment <<>>---------------------------------------------------------------------------------------------------------------- @@ -31390,6 +32179,13 @@ Define Class CL_LANG As Custom .C_UNKNOWN_CLASS_NAME_LOC = "Clase [<>] desconocida" .C_USE_FILE_TIMESTAMP_OPTIMIZATION_LOC = "Usar Optimización de filestamp de archivo" .C_USING_THIS_SETTINGS_LOC = "Usando esta configuración" + .C_USING_THIS_SETTINGS_LOC1 = " BY PARAMETER, skipping all previous config!" + .C_USING_THIS_SETTINGS_LOC2 = " Parsing of full configuration allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC3 = " Parsing configuration in parent~ and subdirectories allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC4 = " Parsing configuration in subdirectories allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC5 = " Parsing of other configuration not allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC6 = "External configuration file set: " + .C_USING_THIS_SETTINGS_LOC7 = ", using cached config." .C_WARNING_LOC = "¡ATENCIÓN!" .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "¡ATENCIÓN!" + CR_LF+ "ASEGÚRESE DE QUE NO ESTÁ USANDO UN ALIAS DE TABLA EN LAS EXPRESIONES DE LOS ÍNDICES!! (ej: index on <>.campo tag nombreclave)" .C_WITH_ERRORS_LOC = "con errores" @@ -31401,11 +32197,11 @@ Define Class CL_LANG As Custom .C_INDEX2BIN_STRUCTURAL_LOC = " TAGs for structural index" .C_INDEX2BIN_STANDALONE_LOC = " Standalone index " .C_INDEX2BIN_COMPOUND_LOC = " TAGs for compound index " - .C_PJXPATH_ERR_LOC1 = 0h0D0A + 'Main file "' - .C_PJXPATH_ERR_LOC2 = 0h0D0A + 'Project icon file "' - .C_PJXPATH_ERR_LOC3 = 0h0D0A + 'File ""' - .C_PJXPATH_ERR_LOC4 = '"' + 0h0D0A + 'not in PJX folder structure, "' - .C_PJXPATH_ERR_LOC5 = '",' + 0h0D0A + 'check option "CheckFileInPath".' + 0h0D0A0D0A + .C_PJXPATH_ERR_LOC1 = CR_LF + 'Main file "' + .C_PJXPATH_ERR_LOC2 = CR_LF + 'Project icon file "' + .C_PJXPATH_ERR_LOC3 = CR_LF + 'File ""' + .C_PJXPATH_ERR_LOC4 = '"' + CR_LF + 'not in PJX folder structure, "' + .C_PJXPATH_ERR_LOC5 = '",' + CR_LF + 'check option "CheckFileInPath".' + CR_LF+CR_LF Case Inlist(tcLanguage, '49', 'DE') && German (Alemán) *------------------------------------------------------------------------------------------------------------------------------------------- @@ -31416,7 +32212,7 @@ Define Class CL_LANG As Custom .C_BACKLINK_CANT_UPDATE_BL_LOC = "Backlink kann nicht aktualisiert werden" .C_BACKLINK_OF_TABLE_LOC = "von Tabelle" .C_BACKUP_OF_LOC = "Erzeuge Backup von: " - .C_CACHING_CONFIG_FOR_DIRECTORY_LOC = "Caching Config für Verzeichnis" + .C_CACHING_CONFIG_FOR_DIRECTORY_LOC = "Caching Konfiguration für Verzeichnis" .C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC = "Kann Datei [<>] nicht generieren, da sie schreibgeschützt ist" .C_CLASSPERFILE_OPTIMIZATION_BASE_ALREADY_PROCESSED_LOC = "Optimierung: Grund Datei [<>] Schon verarbeitet, das Überspringen Verarbeitung der Datei [<>]" .C_CONFIGFILE_LOC = "Benutzte Konfigurationsdatei:" @@ -31449,9 +32245,9 @@ Define Class CL_LANG As Custom .C_FILENAME_LOC = "Datei" .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "FEHLER" .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "SYNTAX UND PARAMETER INFORMATION" - .C_ClassTwice_Header_LOC = 0h0D0A+"Klasse doppelt deklariert."+0h0D0A - .C_ClassTwice_Lib_LOC = 0h0D0A+"Bibliothek: " - .C_ClassTwice_Class_LOC = 0h0D0A+"Klasse: " + .C_ClassTwice_Header_LOC = CR_LF+"Klasse doppelt deklariert."+CR_LF + .C_ClassTwice_Lib_LOC = CR_LF+"Bibliothek: " + .C_ClassTwice_Class_LOC = CR_LF+"Klasse: " TEXT TO .C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <<>>################################################################################################################ <<>>FoxBin2Prg Home Page and download: https://github.com/fdbozzo/foxbin2prg/wiki - Fernando D. Bozzo (2013.11.25) @@ -31471,17 +32267,17 @@ Define Class CL_LANG As Custom <<>>cTextName: Text Dateiname. Nur im SCCAPI (VSS) Kompatibilitätsmodus. <<>>lGenText: .T.=Erzeuge Text, .F.=Erzeuge Binary. Nur im SCCAPI (VSS) Kompatibilitätsmodus. <<>>cDontShowErrors: '1' Unterdrückt die Anzeige von Fehlern - <<>>cDebug: '1' Erzeugt LOG Dateien, Halte bei Fehlern an + <<>>cDebug: '1' Erzeugt LOG Dateien, hält bei Fehlern an <<>>cDontShowProgress: '1' Zeige kein Fortschrittsfenster <<>>cOriginalFileName: Falls als Inputdatei eine temporäre Datei genutzt wird, kann hier für den Kopf der Textdatei der richtige Name angegeben werden. <<>>cRecompile: '1' Die erzeugten Binädateien werden nach dem Erzeugen kompiliert. Eine Pfadangabe (d.h., die des Projektes) ist möglich. <<>>cNoTimestamps: Legt fest ob der Zeitstempel einiger Dateiarten gelöscht werden soll ('1' oder leer) oder nicht ('0') - <<>>cCFG_File: Legt eine alternative Configurationsdate (CFG) fest, die statt der im foxbin2prg Verzeichnis genutzt werden soll. (Anm. des Übersetzers: Keine Angabe über Vererbung in der Verzeichnishierarchie) + <<>>cCFG_File: Legt eine alternative Konfigurationsdatei (CFG) fest, die als Standard statt der im foxbin2prg Verzeichnis genutzt werden soll. <<>>cOutputFolder: Der Ordner in die die Ausgabedatei geschrieben werden soll. Wenn nicht angegeben, das Verzeichnis der Quelle. <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <<>> - <<>>FOXBIN2PRG.EXE [c|C|t [OutFileName]] - <<>>DO FOXBIN2PRG.EXE WITH [-c|-C|-t [, OutFileName]] + <<>>FOXBIN2PRG.EXE c|C|t [OutFileName [ cCFG_File[ cDebug]]] + <<>>DO FOXBIN2PRG.EXE WITH -c|-C|-t [, OutFileName [, cCFG_File[, cDebug]]] <<>> <<>>-- Parameter: <<>>Keine Parameter: Startet dieses Formular @@ -31491,6 +32287,17 @@ Define Class CL_LANG As Custom <<>>-t (t) Erzeugt eine Vorlage für eine Tabellen-Config-Datei (wie .dbf.cfg) <<>> Wird OutFileName nicht angegeben und ist eine Tabelle offen, <<>> so wird eine Konfigurationsdatei .dbf._cfg im Verzeichnis der Tabelle angelegt. + <<>>cCFG_File: Legt eine alternative Konfigurationsdatei (CFG) fest, die als Standard statt der im foxbin2prg Verzeichnis genutzt werden soll. + <<>>cDebug: '1' Erzeugt LOG Dateien, hält bei Fehlern an + <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <<>> + <<>>FOXBIN2PRG.EXE VERNO + <<>>DO FOXBIN2PRG.EXE WITH "VERNO"|cPara + <<>> + <<>>-- Parameter: + <<>>-VERNO (VERNO) Return version number of FoxBin2Prg + <<>>cPara A Ein Parameter mit dem Wert "VERNO", der Rückgabewert des Parameters die Versionsnummer + <<>> <<>> ENDTEXT *** DH 2021-03-04: added HomeDir to text @@ -31504,27 +32311,43 @@ Define Class CL_LANG As Custom <<>> Achtung, die Konfigurationsdateien werden vererbt. <<>> 1. Defaultwerte <<>> 2., optional FOXBIN2PRG.CFG im Vereichnis aus dem FOXBIN2PRG.EXE startet + <<>> Oder, wenn definiert, eine Konfigurationsdatei die per parameter an FOXBIN2PRG übergeben wurde. + <<>> Wird diese genutzt, steuert die Einstellung InhibitInheritance, ob folgende Konfigurationsdateien ausgewertet werden. (default) <<>> 3., optional FOXBIN2PRG.CFG in der Wurzel des Arbeitsverzeichnises <<>> 4., optional FOXBIN2PRG.CFG in jedem Verzeichnis bis zum Arbeitsverzeichnis - <<>> 5., optional Es können spezielle Einstellungen für einzelne DBF's erzeugt werden (Syntax: .dbf.cfg im Verzeichnis der Tabelle) - <<>> 6., Parameter des Aufrufs von FOXBIN2PRG.EXE. + <<>> 5., optional Es können spezielle Einstellungen für einzelne DBF's erzeugt werden (Syntax: .dbf.cfg im Verzeichnis der Tabelle) <<>> <<>> Einige Parameter im Aufruf von FOXBIN2PRG.EXE übersteueren diese Vorgaben (bis auf die Defaults) <<>>**************************************************************************************************************** <<>> <<>>Interne Einstellungen <<>>Language: (auto) && Sprache für Anzeigen und Logs. EN=English, FR=Français, ES=Español, DE=Deutsch, Nicht definiert = Automatisch [DEFAULT] - <<>>ShowProgressbar: 1 && 0=Zeige Fortschrittsfenster, 1=Zeige es nicht, 2= Zeige Fortschrittsfenster nur, wenn mehrere Dateien konvertiert werden. + <<>>ShowProgressbar: 1 && 0=Zeige Fortschrittsfenster, 1=Zeige es nicht, 2=Zeige Fortschrittsfenster nur, wenn mehrere Dateien konvertiert werden. <<>>DontShowErrors: 0 && 0=Zeige Fehler an, 1=Zeige keine Fehler an <<>>ExtraBackupLevels: 1 && Anzahl der Backup-Ebenen der Binärdateien 0=kein Backup, 1=.BAK, n>1= n-Backup-Ebenen, .n.BAK - <<>>Debug: 0 && 0=Individuelles Logging ist aus 1= Individuelles Log per Datei .Log + <<>>Debug: 0 && 0=Individuelles Logging ist aus + <<>> && 1=Individuelles Log per Datei .Log + <<>> && 2=??? + <<>> && Nur gültig, wenn nicht durch einen Parameter übersteuert <<>>BackgroundImage: && Hintergrundbild für das Formular zur Fortschrittsanzeige. <<>> && Leer erzeugt kein Hintergrundbild. Wird die Datei nicht gefunden, wird der Standardhintergrund verwendet. <<>>HomeDir: 1 && Speichern der HomeDir Eigenschaft in die PJX <<>> && 0 Die Eigenschaft HomeDir wird nicht in die PJ2 gespeichert <<>> && 1 Die Eigenschaft wird gespeichert - <<>> + <<>>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + <<>>-- Settings for config file via parameter only + <<>>InhibitInheritance: 0 && 0=Alle Konfiguration wird gelesen (Die Datei aus dem Parameter ist nur ein zusätzlicher default) + <<>> && 1=Nur die Vererbung in den Verezeichnissen , Im Verzeichnis der Konfiguration und Unterverzeichnisse werden gelesen + <<>> && 2=Nur die Konfiguration des Veruzeichnisses der Parameterdatei und Unterverzeichnisse werden gelesen + <<>> && 3=Keine weiter Konfiguration wird gelesen + <<>> && This is like + <<>> && 0 Default | Parameter Datei | Konfiguration im Programmverzeichnis von FoxBin2Prg | Alle anderen Konfigurationen + <<>> && 1 Default | Parameter Datei | Vererbung bis zum Verzeichnis der Parameter Datei | Das Verzeichnis und Unterverzeichnise der Parameter Datei + <<>> && 2 Default | Parameter Datei | Das Verzeichnis und Unterverzeichnise der Parameter Datei + <<>> && 3 Default | Parameter Datei + <<>>---------------------------------------------------------------------------------------------------------------- + <<>> <<>>-- Konvertierungs Optionen: <<>>PJX_Conversion_Support: 2 && 0=Aus, 1=Erzeuge nur Textdatei (Diff), 2=Erzeuge Text- und Binärdatei (Merge) <<>>VCX_Conversion_Support: 2 && 0=Aus, 1=Erzeuge nur Textdatei (Diff), 2=Erzeuge Text- und Binärdatei (Merge) @@ -31551,12 +32374,14 @@ Define Class CL_LANG As Custom <<>> && 3 Erstelle absoluten Pfad für Dateien die nicht in der Ordnerstruktur sind. <<>>---------------------------------------------------------------------------------------------------------------- <<>> - <<>> ------Einstellungen für Container-Dateien (not pjx) + <<>> ------Einstellungen für Container-Dateien (nicht pjx) <<>>-- Optionen für CLASS und FORM - <<>>- Optionen für Datei per Klasse (UseClassPerFile: 1) (für VCX: vc2, für SCX: sc2) - <<>>UseClassPerFile: 0 && Bestimmt wie die Klassen einer Bibliothek oder die objekte eines Formulars behandelt werden + <<>>-- CLASS (, FORM und DBC) Einstellungen (tx2 versteht sich als vc2 oder sc2, VCX kann auch SCX meinen) + <<>>-- FORM und DBC Einstellungen nutzen die folgenden Werte, solange nicht anders definiert. Siehe unten. + <<>>- Optionen für Datei per Klasse ( 1) (für VCX: vc2, für SCX: sc2) + <<>>UseClassPerFile: 0 && Bestimmt wie die Klassen einer Bibliothek oder die Objekte eines Formulars behandelt werden <<>> && 0 Eine Textdatei pro VCX/SCX - <<>> && 1 Mehrere Dateien .KlassenName.vc2 files + <<>> && 1 Mehrere Dateien .KlassenName.vc2 <<>> && 2 Mehrere Dateien .Basisklasse.KlassenName.vc2 <<>> && Für 1, 2 wird jeweils auch ein Headerdatei .vc2 erzeugt <<>>RedirectClassPerFileToMain: 0 && Bestimmt beim Erzeugen von Binardateien für Klassenbibliotheken und Formulare die Zieldatei @@ -31569,16 +32394,43 @@ Define Class CL_LANG As Custom <<>> && 0 Aus [.Basisklasse].KlassenName.tx2 wird .VCX und alle Klassen dieser Bibliothek werden neu gelesen <<>> && 1 Aus [.Basisklasse].KlassenName.tx2 wird [.Basisklasse].KlassenName.VCX, die Bibliothek file.VCX wird ignoriert <<>> && 2 Aus [.Basisklasse].KlassenName.tx2 wird .VCX aber alle anderen Klassen bleiben unverändert - <<>>ClassPerFileCheck: 0 && Test, ob dateien aus die in der Basisdatei definert wurden, einbezogen wurden. + <<>>ClassPerFileCheck: 0 && Test, ob Dateien die in der Basisdatei definert wurden, einbezogen wurden. <<>> && 0 Kein Test <<>> && 1 Teste, ob die Datei [.Basisklasse].KlassenName.tx2 einbezogen wurde <<>> && Nur für die [.Basisklasse].KlassenName.tx2 Syntax <<>> && Wird für RedirectClassType: 2 ignoriert <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <<>> + <<>>-- Optionen für FORM + <<>>- Optionen für Datei per Form (UseFormPerFile: 1) + <<>>UseFormSettings: 0 && 1=Die unten stehenden Form Optionen werden aktiviert, 0=Die UseClassPerFile Einstellungen werden genutzt. + <<>> && Die unten stehenden Optionen werden nur gelesen, wenn UseFormSettings vorher 1 ist! + <<>> && Wird UseFormSettings wieder auf 0 gesetzt, gehen diese Einstellungen verloren. + <<>>UseFormPerFile: 0 && Bestimmt wie die Objekte eines Formulars behandelt werden + <<>> && 0 Eine Textdatei Form.sc2 pro SCX + <<>> && 1 Mehrere Dateien Form.Obj.sc2 pro SCX + <<>> && 2 Mehrere Dateien Form.baseclass.Obj.sc2 pro SCX + <<>> && Für 1, 2 wird jeweils auch ein Headerdatei
.sc2 erzeugt + <<>>RedirectFormPerFileToMain: 0 && Bestimmt beim Erzeugen von Binardateien für Formulare die Zieldatei + <<>> && 0 Keine Umlenkung + <<>> && 1 Objekte werden in die SCX geschrieben wenn eine Datei Form.sc2 when selecting Form[.baseclass].Obj.sc2 gewählt wurde + <<>> && RedirectFormType: 1 1 hat Vorrang + <<>>RedirectFormType: 0 && Für Textdateien die mit UseFormPerFile>0 in der Form Form[.baseclass].Obj.sc2 erstellt wurden. + <<>> && diese Dateien können als Form.sc2::Class::import oder als Form[.baseclass].Obj.sc2 importiert werden. + <<>> && Für die zweite Form gilt (jeweils VCX oder SCX ): + <<>> && 0 Aus Form[.baseclass].Obj.sc2 wird Form.SCX und alle Klassen dieser Bibliothek werden neu gelesen + <<>> && 1 Aus Form[.baseclass].Obj.sc2 wird Form[.baseclass].Obj.SCX, die Bibliothek file.VCX wird ignoriert + <<>> && 2 Aus Form[.baseclass].Obj.sc2 wird Form.SCX aber alle anderen Klassen bleiben unverändert + <<>>FormPerFileCheck: 0 && Test, ob Dateien die in der Basisdatei definert wurden, einbezogen wurden. + <<>> && 0 Kein Test + <<>> && 1 Teste, ob die Datei Form[.baseclass].Obj.sc2 einbezogen wurde + <<>> && Nur für die Form[.baseclass].Obj.sc2 Syntax + <<>> && Wird für RedirectFormType: 2 ignoriert + <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <<>> <<>>-- Optionen für DBC - <<>>- Optionen für Datei per DBC options (UseFilesPerDBC: 1) - <<>>OldFilesPerDBC: 0 && 1=Die unten stehenden DBC Optionen werden aktiviert, 0=Die UseClassPerFile settings werden genutzt. + <<>>- Optionen für Datei per DBC (UseFilesPerDBC: 1) + <<>>OldFilesPerDBC: 0 && 1=Die unten stehenden DBC Optionen werden aktiviert, 0=Die UseClassPerFile Einstellungen werden genutzt. <<>> && Die unten stehenden Optionen werden nur gelesen, wenn OldFilesPerDBC vorher 1 ist! <<>> && Wird OldFilesPerDBC wieder auf 0 gesetzt, gehen diese Einstellungen verloren. <<>>UseFilesPerDBC: 0 && 0=Erzeuge eine dc2 Datei, 1=Erzeuge mehrfache Dateien.*.*.dc2 @@ -31595,7 +32447,7 @@ Define Class CL_LANG As Custom <<>>NoTimestamps: 1 && 0=Zeitstempel einiger Dateiarten werden nicht gelöscht 1=Zeitstempel werden zum Minimieren der Text-Datei-Unterschiede gelöscht <<>>ClearUniqueID: 1 && 0=Erhalte die Unique ID in den Text-Dateien, 1=Lösche Unique ID. Nützlich für Diff und Merge <<>>OptimizeByFilestamp: 0 && 0=Aus, 1=Optimierte Erzeugung der Binärdateien in Abhängigkeit vom Zeitstempel. Gefährlich beim Arbeiten mit Zweigen! - <<>>RemoveNullCharsFromCode: 1 && 0=Aus 1=Lösche NULL (CHR(0)) Zeichen aus dem Quellcode + <<>>RemoveNullCharsFromCode: 1 && 0=Aus 1=Lösche .Null. (CHR(0)) Zeichen aus dem Quellcode <<>>RemoveZOrderSetFromProps: 0 && 0=Aus, 1=Entferne ZOrderSet Eigenschaft von Objekten <<>>PRG_Compat_Level: 0 && 0=Legacy, 1=Nutze HELPSTRING als Class Procedure Kommentar <<>>---------------------------------------------------------------------------------------------------------------- @@ -31637,7 +32489,7 @@ Define Class CL_LANG As Custom ENDTEXT TEXT TO .C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC_tab_cfg TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <<>>################################################################################################################ - <<>>-- Individual DBF configuration file (Syntax: .dbf.cfg im Verzeichnis der Tabelle) Defaults siehe FoxBin2prg.cfg + <<>>-- Individuelle DBF Konfigurations-Datei (Syntax: .dbf.cfg im Verzeichnis der Tabelle) Defaults siehe FoxBin2prg.cfg <<>>Version: <<_Screen.c_FB2PRG_EXE_Version>> <<>>**************************************************************************************************************** <<>> @@ -31701,6 +32553,13 @@ Define Class CL_LANG As Custom .C_UNKNOWN_CLASS_NAME_LOC = "Unbekannte Klasse [<>]" .C_USE_FILE_TIMESTAMP_OPTIMIZATION_LOC = "Verwenden Sie die Datei-Zeitstempel-Optimierung" .C_USING_THIS_SETTINGS_LOC = "Mit dieser Einstellung" + .C_USING_THIS_SETTINGS_LOC1 = " BY PARAMETER, alle vorherigen Einstellungen werden zurückgesetzt!" + .C_USING_THIS_SETTINGS_LOC2 = " Komplette Auswertung der Konfiguration gestattet."+CR_LF + .C_USING_THIS_SETTINGS_LOC3 = " Konfigurationsdateien von Unterverzeichnissen und ererbete Konfigurationen aus dem Baum werden ausgewertet."+CR_LF + .C_USING_THIS_SETTINGS_LOC4 = " Konfigurationsdateien von Unterverzeichnissen werden ausgewertet."+CR_LF + .C_USING_THIS_SETTINGS_LOC5 = " Es werden keine anderen Konfigurationsdateien gelesen."+CR_LF + .C_USING_THIS_SETTINGS_LOC6 = "Externe Konfigurationsdatei übergeben: " + .C_USING_THIS_SETTINGS_LOC7 = ", nutze gespeicherte Konfiguration." .C_WARNING_LOC = "WARNUNG!" .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNUNG!" + CR_LF+ "STELLEN SIE SICHER, DAS KEIN TABELLENALIAS IM INDEXAUSDRUCK BENUTZT WIRD!! (z.B.: index on <>.campo tag keyname)" .C_WITH_ERRORS_LOC = "mit Fehlern" @@ -31713,11 +32572,11 @@ Define Class CL_LANG As Custom .C_INDEX2BIN_STRUCTURAL_LOC = " TAGs für den strukturellen Index" .C_INDEX2BIN_STANDALONE_LOC = " Eigenständige Indexdatei: " .C_INDEX2BIN_COMPOUND_LOC = " TAGs für verbundene Indexdatei: " - .C_PJXPATH_ERR_LOC1 = 0h0D0A + 'Hauptdatei "' - .C_PJXPATH_ERR_LOC2 = 0h0D0A + 'Projekt-Icon Datei "' - .C_PJXPATH_ERR_LOC3 = 0h0D0A + 'Datei ""' - .C_PJXPATH_ERR_LOC4 = '"' + 0h0D0A + 'ist nicht in der PJX Ordner Struktur, "' - .C_PJXPATH_ERR_LOC5 = '",' + 0h0D0A + 'siehe Option "CheckFileInPath".' + 0h0D0A0D0A + .C_PJXPATH_ERR_LOC1 = CR_LF + 'Hauptdatei "' + .C_PJXPATH_ERR_LOC2 = CR_LF + 'Projekt-Icon Datei "' + .C_PJXPATH_ERR_LOC3 = CR_LF + 'Datei ""' + .C_PJXPATH_ERR_LOC4 = '"' + CR_LF + 'ist nicht in der PJX Ordner Struktur, "' + .C_PJXPATH_ERR_LOC5 = '",' + CR_LF + 'siehe Option "CheckFileInPath".' + CR_LF+CR_LF Otherwise && English (Inglés) @@ -31762,9 +32621,9 @@ Define Class CL_LANG As Custom .C_FILENAME_LOC = "File" .C_FOXBIN2PRG_ERROR_CAPTION_LOC = "ERROR" .C_FOXBIN2PRG_SYNTAX_INFO_LOC = "SYNTAX AND PARAMETERS INFO" - .C_ClassTwice_Header_LOC = 0h0D0A+"Class defined twice."+0h0D0A - .C_ClassTwice_Lib_LOC = 0h0D0A+"Library: " - .C_ClassTwice_Class_LOC = 0h0D0A+"Class: " + .C_ClassTwice_Header_LOC = CR_LF+"Class defined twice."+CR_LF + .C_ClassTwice_Lib_LOC = CR_LF+"Library: " + .C_ClassTwice_Class_LOC = CR_LF+"Class: " TEXT TO .C_FOXBIN2PRG_SYNTAX_INFO_EXAMPLE_LOC TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <<>>################################################################################################################ <<>>FoxBin2Prg Home Page and download: https://github.com/fdbozzo/foxbin2prg/wiki - Fernando D. Bozzo (2013.11.25) @@ -31789,13 +32648,12 @@ Define Class CL_LANG As Custom <<>>cOriginalFileName: used in those cases in which inputFile is a temporary filename and you want to generate the correct filename on the header of the text version <<>>cRecompile: Indicates recompile ('1') the binary once regenerated. You can specify a Path too (ie, the project one) <<>>cNoTimestamps: Indicates if timestamp of several file types must be cleared ('1' or empty) or not ('0') - <<>>cCFG_File: Indicates a CFG filename for not using the default on foxbin2prg directory + <<>>cCFG_File: Indicates a CFG filename for using special default instead of the config file in foxbin2prg directory. <<>>cOutputFolder: The output folder to write to. If it isn't specified, the same folder as the source is used. - <<>> <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <<>> - <<>>FOXBIN2PRG.EXE [c|C|t [OutFileName]] - <<>>DO FOXBIN2PRG.EXE WITH [-c|-C|-t [, OutFileName]] + <<>>FOXBIN2PRG.EXE c|C|t [OutFileName [ cCFG_File[ cDebug]]] + <<>>DO FOXBIN2PRG.EXE WITH -c|-C|-t [, OutFileName [, cCFG_File[, cDebug]]] <<>> <<>>-- Parameter details: <<>>No parameter: Calls this info screen @@ -31804,6 +32662,16 @@ Define Class CL_LANG As Custom <<>> If OutFileName is not given a FoxBin2Prg._cfg config file will be created at default folder <<>>-t (t) Creates a template table-config-file (like .dbf.cfg) <<>> If OutFileName is not given, and a table is open a .dbf._cfg config file will be created at table folder. + <<>>cCFG_File: Indicates a CFG filename for using special default instead of the config file in foxbin2prg directory. + <<>>cDebug: '1' for generating process LOGs, stop on errors + <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <<>> + <<>>FOXBIN2PRG.EXE VERNO + <<>>DO FOXBIN2PRG.EXE WITH "VERNO"|cPara + <<>> + <<>>-- Parameter details: + <<>>-VERNO (VERNO) Return version number of FoxBin2Prg + <<>>cPara A parameter with the Value "VERNO", the version number is returned to this parameter <<>> <<>> ENDTEXT @@ -31818,24 +32686,39 @@ Define Class CL_LANG As Custom <<>> 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 InhibitInheritance setting controls if other config files will be evaluated (default). See below. <<>> 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: .dbf.cfg in tables folder) - <<>> 6., Parameter calling FOXBIN2PRG.EXE. + <<>> 5., optional Special settings per single DBF's Syntax: .dbf.cfg in tables folder) <<>> <<>> Some Parameter calling FOXBIN2PRG.EXE overturn this settings (except Defaults) <<>>**************************************************************************************************************** <<>> <<>>-- Settings for internal work, not processing <<>>Language: (auto) && Language of shown messages and LOGs. EN=English, FR=French, ES=Español, DE=German, Not defined = AUTOMATIC [DEFAULT] - <<>>ShowProgressbar: 1 && 0=Don't show, 1=Allways show, 2= Show only for multi-file processing + <<>>ShowProgressbar: 1 && 0=Don't show, 1=Allways show, 2=Show only for multi-file processing <<>>DontShowErrors: 0 && Show message errors by default <<>>ExtraBackupLevels: 1 && By default 1 BAK is created. With this you can make more .N.BAK, or none - <<>>Debug: 0 && Don't Activate individual .Log by default + <<>>Debug: 0 && 0=Don't Activate individual .Log by default + <<>> && 1=Activate individual .Log by default + <<>> && 2=??? + <<>> && Only valid if not controlled by parameter <<>>BackgroundImage: && Backgroundimage for process form. Empty for empty Background. File not found uses default. - <<>>HomeDir: 1 && Home Directory in PJX + <<>>HomeDir: 1 && Home directory in PJX <<>> && 0 don't save HomeDir in PJ2 <<>> && 1 save HomeDir in PJ2 + <<>>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + <<>>-- Settings for config file via parameter only + <<>>InhibitInheritance: 0 && 0=Allow scanning "regular" config files (file via parameter is just additional default) + <<>> && 1=Only read tree from root of the file given by parameter, not FoxBin2Prg default + <<>> && 2=Only read folder and subfolder of the file given by parameter + <<>> && 3=Read no other file + <<>> && This is like + <<>> && 0 Default | Parameter file | Default near FoxBin2Prg | all other config files + <<>> && 1 Default | Parameter file | Inheritance from root to parent of folder | folder and subdirs + <<>> && 2 Default | Parameter file | folder and subdirs + <<>> && 3 Default | Parameter file <<>>---------------------------------------------------------------------------------------------------------------- <<>> <<>>-- Conversion operation by type @@ -31860,15 +32743,16 @@ Define Class CL_LANG As Custom <<>>---------------------------------------------------------------------------------------------------------------- <<>> <<>>Setting for container files (not pjx) - <<>>-- CLASS and FORM options (tx2 is to read as vc2 or sc2, VCX might be SCX) + <<>>-- CLASS (, FORM and DBC) options (tx2 is to read as vc2 or sc2, VCX might be SCX) + <<>>-- FORM and DBC options default to this settings, if not set otherwise. See below. <<>>- Class per file options (UseClassPerFile: 1) <<>>UseClassPerFile: 0 && Determines how a library (or form) will handle included class (or, for forms, objects) <<>> && 0 One library.tx2 file <<>> && 1 Multiple file.class.tx2 files <<>> && 2 Multiple file.baseclass.class.tx2 files <<>>RedirectClassPerFileToMain: 0 && When regenerating binary files, determine target file - <<>> && 0 Don't redirect to file.tx2 - <<>> && 1 Redirect to file.tx2 when selecting file[.baseclass].class.tx2 + <<>> && 0 Don't redirect to file.vcx/scx + <<>> && 1 Redirect to file.vcx/scx when selecting file[.baseclass].class.tx2 <<>> && RedirectClassType: 1 has precedence <<>>RedirectClassType: 0 && For classes created with UseClassPerFile>0 in the form file[.baseclass].class.tx2 <<>> && Those files could be imported like file.tx2::Class::import or like file[.baseclass].class.tx2 @@ -31883,11 +32767,37 @@ Define Class CL_LANG As Custom <<>> && Ignored for RedirectClassType: 2 <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <<>> + <<>>-- FORM options + <<>>- Form per file options (UseFormSettings: 1) + <<>>UseFormSettings: 0 && 1=Turns the File per SCX options on, 0 uses the old UseClassPerFile etc settings. + <<>> && Options below will only read if UseFormSettings is set 1 before! + <<>> && If UseFormSettings is set 0 later, all setting will be lost + <<>>UseFormPerFile: 0 && Determines how a form will handle included objects + <<>> && 0 One Form.sc2 file + <<>> && 1 Multiple Form.Obj.sc2 files + <<>> && 2 Multiple Form.baseclass.Obj.sc2 files + <<>>RedirectFormPerFileToMain: 0 && When regenerating binary files, determine target file + <<>> && 0 Don't redirect to Form.scx + <<>> && 1 Redirect to Form.scx when selecting Form[.baseclass].Obj.sc2 + <<>> && RedirectFormType: 1 has precedence + <<>>RedirectFormType: 0 && For classes created with UseFormPerFile>0 in the form Form[.baseclass].Obj.sc2 + <<>> && Those files could be imported like Form.sc2::Class::import or like Form[.baseclass].Obj.sc2 + <<>> && For the second form: + <<>> && 0 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and add / replace all other classes of this library + <<>> && 1 Redirect Form[.baseclass].Obj.sc2 to Form[.baseclass].Obj.SCX and do not touch Form.SCX + <<>> && 2 Redirect Form[.baseclass].Obj.sc2 to Form.SCX and do not touch other classes of Form.SCX + <<>>FormPerFileCheck: 0 && Check, if files listed in the main file of a library or form will be included + <<>> && 0 Don't check file inclusion + <<>> && 1 Check Form[.baseclass].Obj.sc2 inclusion + <<>> && Only used if import file is in Form[.baseclass].Obj.sc2 syntax + <<>> && Ignored for RedirectFormType: 2 + <<>>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <<>> <<>>-- DBC options <<>>- File per DBC options (UseFilesPerDBC: 1) <<>>OldFilesPerDBC: 0 && 1=Turns the File per DBC options on, 0 uses the old UseClassPerFile etc settings. <<>> && Options below will only read if OldFilesPerDBC is set 1 before! - <<>> && If OldFilesPerDBC is set 0 later, alle setting will be lost + <<>> && If OldFilesPerDBC is set 0 later, all setting will be lost <<>>UseFilesPerDBC: 0 && 0=One database dc2 file, 1=Multiple file.*.*.dc2 files <<>> && 0 creates only a file.dc2 with all DBC (file) data <<>> && 1 creates a file.dc2 with DBC properties @@ -31901,7 +32811,7 @@ Define Class CL_LANG As Custom <<>>NoTimestamps: 1 && Clear timestamps of several file types by default for minimize text-file differences <<>>ClearUniqueID: 1 && 0=Keep UniqueID in text files, 1=Clear Unique ID. Useful for Diff and Merge <<>>OptimizeByFilestamp: 0 && 1=Optimize file regeneration depending on file timestamp. Dangerous while working with branches! - <<>>RemoveNullCharsFromCode: 1 && 1=Drop NULL chars from source code + <<>>RemoveNullCharsFromCode: 1 && 1=Drop .Null. chars from source code <<>>RemoveZOrderSetFromProps: 0 && 0=Do not remove ZOrderSet property from object, 1=Remove ZOrderSet property from object <<>>PRG_Compat_Level: 0 && 0=Legacy, 1=Use HELPSTRING as Class Procedure comment <<>>---------------------------------------------------------------------------------------------------------------- @@ -31992,6 +32902,13 @@ Define Class CL_LANG As Custom .C_UNKNOWN_CLASS_NAME_LOC = "Unknown class [<>]" .C_USE_FILE_TIMESTAMP_OPTIMIZATION_LOC = "Use file timestamp Optimization" .C_USING_THIS_SETTINGS_LOC = "Using this settings" + .C_USING_THIS_SETTINGS_LOC1 = " BY PARAMETER, skipping all previous config!" + .C_USING_THIS_SETTINGS_LOC2 = " Parsing of full configuration allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC3 = " Parsing configuration in parent~ and subdirectories allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC4 = " Parsing configuration in subdirectories allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC5 = " Parsing of other configuration not allowed."+CR_LF + .C_USING_THIS_SETTINGS_LOC6 = "External configuration file set: " + .C_USING_THIS_SETTINGS_LOC7 = ", using cached config." .C_WARNING_LOC = "WARNING!" .C_WARN_TABLE_ALIAS_ON_INDEX_EXPRESSION_LOC = "WARNING!" + CR_LF+ "MAKE SURE YOU ARE NOT USING A TABLE ALIAS ON INDEX KEY EXPRESSIONS!! (ex: index on <>.campo tag keyname)" .C_WITH_ERRORS_LOC = "with errors" @@ -32004,11 +32921,11 @@ Define Class CL_LANG As Custom .C_INDEX2BIN_STRUCTURAL_LOC = " TAGs for structural index" .C_INDEX2BIN_STANDALONE_LOC = " Standalone index " .C_INDEX2BIN_COMPOUND_LOC = " TAGs for compound index " - .C_PJXPATH_ERR_LOC1 = 0h0D0A + 'Main file "' - .C_PJXPATH_ERR_LOC2 = 0h0D0A + 'Project icon file "' - .C_PJXPATH_ERR_LOC3 = 0h0D0A + 'File ""' - .C_PJXPATH_ERR_LOC4 = '"' + 0h0D0A + 'not in PJX folder structure, "' - .C_PJXPATH_ERR_LOC5 = '",' + 0h0D0A + 'check option "CheckFileInPath".' + 0h0D0A0D0A + .C_PJXPATH_ERR_LOC1 = CR_LF + 'Main file "' + .C_PJXPATH_ERR_LOC2 = CR_LF + 'Project icon file "' + .C_PJXPATH_ERR_LOC3 = CR_LF + 'File ""' + .C_PJXPATH_ERR_LOC4 = '"' + CR_LF + 'not in PJX folder structure, "' + .C_PJXPATH_ERR_LOC5 = '",' + 0h0D0A + 'check option "CheckFileInPath".' + CR_LF+CR_LF .n_LanguageSelectedMethod = 0 && 0=Automatic with VERSION(3) @@ -32037,7 +32954,7 @@ Define Class CL_DBF_CFG As Custom *-- Configuration class. By default asumes master value, except when overriding one. - n_DBF_Conversion_Support = Null + n_DBF_Conversion_Support = .Null. DBF_Conversion_Order = '' DBF_Conversion_Condition = '' DBF_IndexList = '' @@ -32068,7 +32985,7 @@ Define Class CL_MACRO As CL_COL_BASE _Signature = '' _Debug = .F. _NumberOfMacros = '' - _Macros = Null && Colección de macros + _Macros = .Null. && Colección de macros @@ -32137,7 +33054,7 @@ Define Class CL_MACRO As CL_COL_BASE Endif loColl.Add( loMRec, loMRec.get_Macro_Keystrokes(loMRec.Keystroke, .T.) ) - loMRec = Null + loMRec = .Null. Endfor * Ordenar alfabéticamente por keystroke @@ -32917,7 +33834,7 @@ Define Class CL_MEMVAR As CL_COL_BASE * STRUCTURE OF VARIABLES * Byte Offset Description * ----------- ------------------------------------------------------------------------------------------------- -* 0 - 10 NULL terminated VarName. If VarName is empty, then VarName starts at offset 32 +* 0 - 10 .Null. terminated VarName. If VarName is empty, then VarName starts at offset 32 * 11 VarType (A,C,N,Y,B,F,I,Q,D,T,L,0). If VarType is lowercase, then next VarName * begins with 2 bytes for VarName length. * 12 - 15 Reserved @@ -32926,7 +33843,7 @@ Define Class CL_MEMVAR As CL_COL_BASE * 18 - 24 Reserved * 25 0x00 if it is an array element, 0x03 if it isn't an array element * 26 - 31 Reserved -* 32 - n If VarName (offset 0-10) is NULL then goto TABLE 1, If VarType=A then continue in TABLE 2, +* 32 - n If VarName (offset 0-10) is .Null. then goto TABLE 1, If VarType=A then continue in TABLE 2, * if VarType=0 then continue in TABLE 3, else continue in TABLE 4 * ... * eof Last character is EOF (0x1A) character @@ -32952,7 +33869,7 @@ Define Class CL_MEMVAR As CL_COL_BASE * ----------- ------------------------------------------------------------------------------------------------- -* TABLE 3 - NULL VALUE STRUCTURE (VarType=0) +* TABLE 3 - .Null. VALUE STRUCTURE (VarType=0) * Byte Offset Description * ----------- ------------------------------------------------------------------------------------------------- * n VarType. @@ -32982,7 +33899,7 @@ Define Class CL_MEMVAR As CL_COL_BASE c_InputFile = '' _Debug = .F. - _MemVars = Null && Colección de variables de memoria + _MemVars = .Null. && Colección de variables de memoria @@ -33041,7 +33958,7 @@ Define Class CL_MEMVAR As CL_COL_BASE Endif loColl.Add( loMVRec, loMVRec.getName() + Padl(pnElement, 5, '0') ) - loMVRec = Null + loMVRec = .Null. Enddo * Ordenar alfabéticamente por nombre de variable @@ -33187,10 +34104,10 @@ Define Class CL_MEMVAR_RECORD As CL_CUS_BASE pnRows = .getRows() Case .MemVar_Type = '0' -* NULL +* .Null. * VarType .MemVar_Type = Fread(tnHandle, 1) - .MemVar_Value = Null + .MemVar_Value = .Null. Otherwise * NORMAL VALUE @@ -33259,7 +34176,7 @@ Define Class CL_MEMVAR_RECORD As CL_CUS_BASE Do Case Case Isnull(.MemVar_Value) - lxValue = Null + lxValue = .Null. Case Upper(.MemVar_Type) = 'L' lxValue = ( Asc(.MemVar_Value) = 1 ) @@ -33372,13 +34289,13 @@ Define Class CL_MEMVAR_RECORD As CL_CUS_BASE If pnCols = 0 * Elemento de Array Unidimensional TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> (<>) <><> <<.getValue()>> + <<>> (<>) <><> <<.getValue()>> ENDTEXT Else * Elemento de Array Bidimensional TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> (<>,<>) <><> <<.getValue()>> + <<>> (<>,<>) <><> <<.getValue()>> ENDTEXT Endif @@ -33398,5 +34315,4 @@ Define Class CL_MEMVAR_RECORD As CL_CUS_BASE Endproc -Enddefine - +Enddefine \ No newline at end of file