v1.19.49 Preview-1

- 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")
- 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
This commit is contained in:
fdbozzo
2017-04-24 23:44:17 +02:00
24 changed files with 909 additions and 200 deletions

View File

@@ -1,2 +1,17 @@
RESOURCE=OFF
SCREEN=OFF
RESOURCE=OFF
_STARTUP=""
HELP=OFF
_TRANSPORT=""
_GENXTAB=""
_FOXREF=""
TALK=OFF
_SPELLCHK=""
MVCOUNT=1024
_BROWSER=""
_BUILDER=""
_CONVERTER=""
_TASKPANE=""
_TOOLBOX=""
_WIZARD=""
COMMAND=""

View File

@@ -25,7 +25,7 @@ _LegalCopyright = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa):
_LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
_ProductName = "FILENAME_CAPS"
_MajorVer = "2"
_MinorVer = "3"
_MinorVer = "4"
_Revision = "0"
_LanguageID = ""
_AutoIncrement = "0"
@@ -33,7 +33,7 @@ _AutoIncrement = "0"
*<BuildProj>
*<.HomeDir = 'c:\desa\filename_caps' />
*<.HomeDir = 'c:\desa\foxbin2prg\filename_caps' />
FOR EACH loProject IN _VFP.Projects FOXOBJECT
loProject.Close()

Binary file not shown.

Binary file not shown.

View File

@@ -44,20 +44,49 @@ RETURN lcFileName
DEFINE CLASS cl_FileName_Caps AS Custom
_memberdata = [<VFPData>] ;
+ [<memberdata name="capitalize" display="Capitalize"/>] ;
+ [<memberdata name="renamefile" display="RenameFile"/>] ;
+ [</VFPData>]
PROCEDURE Capitalize
LPARAMETERS tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors
PROCEDURE INIT
*DECLARE INTEGER MoveFile IN KERNEL32.DLL STRING lpExistingFileName, STRING lpNewFileName
* DOCUMENTACI<43>N: https://msdn.microsoft.com/es-es/library/windows/desktop/aa365240(v=vs.85).aspx
* dwFlags:
* 1 (0x1) MOVEFILE_REPLACE_EXISTING
* 8 (0x8) MOVEFILE_WRITE_THROUGH
DECLARE INTEGER MoveFileEx IN KERNEL32.DLL STRING lpExistingFileName, STRING lpNewFileName, INTEGER dwFlags
DECLARE INTEGER GetLastError IN KERNEL32.DLL
DECLARE Sleep IN KERNEL32.DLL INTEGER dwMilliseconds
* DOCUMENTACI<43>N: https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx
DECLARE INTEGER FormatMessage IN KERNEL32.DLL INTEGER dwFlags, INTEGER lpSource, INTEGER dwMessageId ;
, INTEGER dwLanguageId, STRING @lpBuffer, INTEGER nSize, INTEGER Arguments
_SCREEN.AddProperty("ExitCodeFNC",0)
ENDPROC
PROCEDURE Capitalize(tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors)
#IF .F.
LOCAL THIS AS cl_FileName_Caps OF 'filename_caps\filename_caps.prg'
#ENDIF
TRY
LOCAL loEx AS EXCEPTION, laMasks(1,4), lcDefinition, lcFileDef, lcMaskDef, laLines(1), lcMenErr ;
, I, X, lcName, lcExt, lcPath, lcFileName, laFile(1,5), lcLogFile, lcSys16, lnPosProg ;
, loFSO AS Scripting.FileSystemObject
, I, X, lcName, lcExt, lcPath, lcFileName, laFile(1,5), lcLogFile, lcSys16, lnPosProg, lnRet
lnRet = 0
loEx = NULL
loFSO = CREATEOBJECT('Scripting.FileSystemObject')
tcFileMaskType = EVL(tcFileMaskType,'M')
lcFileName = tcFileName
lcLogFile = FORCEEXT(SYS(16),'LOG')
lcSys16 = SYS(16)
IF LEFT(lcSys16,10) == 'PROCEDURE '
lnPosProg = AT(" ", lcSys16, 2) + 1
ELSE
lnPosProg = 1
ENDIF
lcLogFile = FORCEEXT( SUBSTR( lcSys16, lnPosProg ), 'LOG' )
tcLog = ''
tcDontShowErrors = EVL( tcDontShowErrors, '0' )
@@ -66,13 +95,6 @@ DEFINE CLASS cl_FileName_Caps AS Custom
tcLog = tcLog + CR_LF + '- No hay m<>scara definida ni archivo de configuraci<63>n'
EXIT && No se indic<69> nada que hacer
ELSE
lcSys16 = SYS(16)
IF LEFT(lcSys16,10) == 'PROCEDURE '
lnPosProg = AT(" ", lcSys16, 2) + 1
ELSE
lnPosProg = 1
ENDIF
tcFileMask = FORCEEXT( SUBSTR( lcSys16, lnPosProg ), 'CFG' )
tcLog = tcLog + CR_LF + '- Se usar<61> el archivo de configuraci<63>n [' + tcFileMask + ']'
IF NOT FILE(tcFileMask)
@@ -163,9 +185,19 @@ DEFINE CLASS cl_FileName_Caps AS Custom
EXIT
ENDIF
ENDFOR
*MESSAGEBOX( 'lcLogFile = ' + TRANSFORM(lcLogFile),0+4096, 'Error' )
IF ADIR( laFile, lcFileName, '', 1 ) > 0 AND laFile(1,1) <> JUSTFNAME(lcFileName)
loFSO.MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(lcFileName) ), lcFileName )
lnRet = THIS.RenameFile( FORCEPATH( laFile(1,1), JUSTPATH(lcFileName) ), lcFileName )
*MESSAGEBOX('(MoveFile) lnRet = ' + TRANSFORM(lnRet),0+4096, 'Error')
IF lnRet = 0 && Failed
lnRet = GetLastError()
*MESSAGEBOX('(GetLastError) lnRet = ' + TRANSFORM(lnRet),0+4096, 'Error')
ERROR 'MoveFile'
ENDIF
tcLog = tcLog + CR_LF + ' => Se renombrar<61> a [' + lcFileName + ']'
ELSE
tcLog = tcLog + CR_LF + ' => No se renombrar<61> a [' + lcFileName + '] porque ya estaba correcto.'
@@ -173,6 +205,19 @@ DEFINE CLASS cl_FileName_Caps AS Custom
CATCH TO loEx
_SCREEN.ExitCodeFNC = loEx.ErrorNo
IF loEx.ErrorNo = 1098 && User defined error
IF LOWER(loEx.Message) == 'movefile'
* SE OBTIENE EL MENSAJE DE ERROR DEL SISTEMA CORRESPONDIENTE A GetLastError()
* FORMAT_MESSAGE_FROM_SYSTEM 0x00001000
LOCAL lnRetLen, lpBuffer
lpBuffer = REPLICATE(CHR(0),256)
lnRetLen = FormatMessage(0x00001000,0,lnRet,0,@lpBuffer,256,0)
loEx.Message = LEFT(lpBuffer, lnRetLen)
ENDIF
ENDIF
IF tlRelanzarError THEN
THROW
ELSE
@@ -190,7 +235,6 @@ DEFINE CLASS cl_FileName_Caps AS Custom
ENDIF
FINALLY
loFSO = NULL
tcFileName = lcFileName
*-- Si existe FileName_Caps.LOG, lo actualiza
@@ -207,4 +251,24 @@ DEFINE CLASS cl_FileName_Caps AS Custom
RETURN lcFileName
ENDPROC
FUNCTION RenameFile(lpExistingFileName as String, lpNewFileName as String) as Integer
* RENAME con reintento. A veces el sistema operativo puede devolver un error en los primeros intentos de renombrado,
* por ejemplo con el error "Can not create a file that already exists"
* FUENTE: http://stackoverflow.com/questions/13025313/why-os-rename-is-raising-an-exception-in-python-2-7
LOCAL lnRet
lnRet = 0
*lnRet = MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(lcFileName) ), lcFileName )
FOR I = 1 TO 10
lnRet = MoveFileEx( lpExistingFileName, lpNewFileName, 0x1 + 0x8 )
IF lnRet != 0
EXIT
ENDIF
Sleep(10)
ENDFOR
RETURN lnRet
ENDFUNC
ENDDEFINE && CLASS cl_FileName_Caps AS Custom

View File

@@ -2,8 +2,8 @@ Lparameters toUpdateInfo
Local lcNote
With toUpdateInfo
.VersionNumber = 'v1.19.48'
.VersionDate = Date(2016,07,11)
.VersionNumber = 'v1.19.49'
.VersionDate = Date(2017,02,17)
.SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip'
.Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG'
@@ -21,6 +21,9 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg
Change History -------------------------------------------------------------
2017/02/17 v1.19.49
2016/07/11 v1.19.48
- Bug Fix: Error message 'variable tcOutputFile not found' (german version) (Andy Kasper)
- Bug Fix: Menu location 'Before' always changed to 'after' when convert (Andy Kasper)

View File

@@ -48,7 +48,11 @@ Else
Next
If GetBit(nDebug, 4) Then
MsgBox "End of Process!", 64, WScript.ScriptName
If nExitCode = 0 Then
MsgBox "End of Process!", 64, WScript.ScriptName
Else
MsgBox "End of Process!", 48, WScript.ScriptName
End If
End If
End If
@@ -93,7 +97,7 @@ Private Sub evaluateFile( tcFile )
MsgBox cCMD, 0, "PARAMETERS"
Else
nRet = oVFP9.DoCmd( cCMD )
'nExitCode = oVFP9.Eval("_SCREEN.ExitCode")
nExitCode = oVFP9.Eval("_SCREEN.ExitCodeFNC")
End If
End Sub

View File

@@ -0,0 +1,34 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>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!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
DEFINE CLASS cl_commandgroup AS commandgroup && Descripci<63>n de cl_CommandGroup
*< CLASSDATA: Baseclass="commandgroup" Timestamp="" Scale="Pixels" Uniqueid="" />
#INCLUDE "..\..\include\principal.h"
*<DefinedPropArrayMethod>
*p: una_prop_cmgroup && Con comentario, pero sin valor
*</DefinedPropArrayMethod>
ButtonCount = 2
Height = 66
Name = "cl_commandgroup"
una_prop_cmgroup = .F. && Con comentario, pero sin valor
Value = 1
Width = 94
Command1.Caption = "Command1"
Command1.Height = 27
Command1.Left = 5
Command1.Name = "Command1"
Command1.Top = 5
Command1.Width = 84
Command2.Caption = "Command2"
Command2.Height = 27
Command2.Left = 5
Command2.Name = "Command2"
Command2.Top = 34
Command2.Width = 84
ENDDEFINE

View File

@@ -0,0 +1,121 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>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!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL
*< CLASSDATA: Baseclass="form" Timestamp="" Scale="Pixels" Uniqueid="" ProjectClassIcon="bmps\container.ico" ClassIcon="bmps\container.ico" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="Cl_optiongroup1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Cl_commandgroup1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Cl_imagen1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="Cl_imagen2" UniqueID="" Timestamp="" />
*<DefinedPropArrayMethod>
*p: chidden && Prop.Hidden
*p: cprotected && Prop.Protegida
*a: ahidden[1,0] && Array Oculto
*a: aprotected[1,0] && Array Protegido
*p: _memberdata && XML Metadata for customizable properties
*</DefinedPropArrayMethod>
HIDDEN ahidden,chidden
PROTECTED aprotected,cprotected
Caption = "Form"
chidden = && Prop.Hidden
cprotected = && Prop.Protegida
DoCreate = .T.
Height = 345
Left = 0
Name = "cl_form"
Picture = bmps\scccheckout.bmp
Top = 0
Width = 570
_memberdata = <VFPData>
<memberdata name="ahidden" display="aHidden"/>
<memberdata name="aprotected" display="aProtected"/>
<memberdata name="chidden" display="cHidden"/>
<memberdata name="cprotected" display="cProtected"/>
</VFPData> && XML Metadata for customizable properties
ADD OBJECT 'Cl_commandgroup1' AS cl_commandgroup WITH ;
BackColor = 255,128,192, ;
Height = 66, ;
Left = 8, ;
Name = "Cl_commandgroup1", ;
Top = 88, ;
Width = 244, ;
Command1.Caption = "Abrir", ;
Command1.Height = 52, ;
Command1.Left = 8, ;
Command1.Name = "Command1", ;
Command1.Picture = bmps\carpetaabierta.bmp, ;
Command1.Top = 4, ;
Command1.Width = 104, ;
Command2.Caption = "Cerrar", ;
Command2.Height = 52, ;
Command2.Left = 124, ;
Command2.Name = "Command2", ;
Command2.Picture = bmps\carpetacerrada.bmp, ;
Command2.Top = 4, ;
Command2.Width = 104
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="commandgroup" />
ADD OBJECT 'Cl_imagen1' AS cl_imagen WITH ;
Height = 34, ;
Left = 452, ;
Name = "Cl_imagen1", ;
Picture = bmps\sobrepostal.bmp, ;
Stretch = 1, ;
Top = 276, ;
Width = 38
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" />
ADD OBJECT 'Cl_imagen2' AS cl_imagen WITH ;
Height = 34, ;
Left = 500, ;
Name = "Cl_imagen2", ;
Picture = bmps\treeview.bmp, ;
Stretch = 1, ;
Top = 276, ;
Width = 38
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="image" />
ADD OBJECT 'Cl_optiongroup1' AS cl_optiongroup WITH ;
BackColor = 0,128,255, ;
Height = 68, ;
Left = 8, ;
Name = "Cl_optiongroup1", ;
Top = 12, ;
Width = 244, ;
Option1.Height = 52, ;
Option1.Left = 8, ;
Option1.Name = "Option1", ;
Option1.Picture = bmps\scccheckout.bmp, ;
Option1.Style = 1, ;
Option1.Top = 8, ;
Option1.Width = 104, ;
Option2.Height = 52, ;
Option2.Left = 124, ;
Option2.Name = "Option2", ;
Option2.Picture = bmps\scccheckout.bmp, ;
Option2.Style = 1, ;
Option2.Top = 8, ;
Option2.Width = 104
*< END OBJECT: ClassLib="fb2p_test.vcx" BaseClass="optiongroup" />
PROCEDURE Cl_optiongroup1.Init
*-- Prueba para comprobar que respeta espacios y TABS del c<>digo
TEXT TO xx
* TAB a la izquierda del asterisco
* 2 TAB a la izquierda del asterisco
* 1 ESPACIO a la izquierda del asterisco
* 2 ESPACIOS a la izquierda del asterisco
1 TAB a la derecha del asterisco *
1 ESPACIO a la derecha del asterisco *
ENDTEXT && Esto termina sin ENTER
ENDPROC
ENDDEFINE

View File

@@ -0,0 +1,23 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>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!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
DEFINE CLASS cl_imagen AS image OLEPUBLIC && otro ole
*< CLASSDATA: Baseclass="image" Timestamp="" Scale="Pixels" Uniqueid="" />
*<DefinedPropArrayMethod>
*m: un_metodo_de_clase && Para testear si el c<>digo se va a la clase cl_form
*</DefinedPropArrayMethod>
Height = 16
Name = "cl_imagen"
Picture = bmps\sobrepostal.bmp
Width = 17
PROCEDURE un_metodo_de_clase && Para testear si el c<>digo se va a la clase cl_form
* ESTE CODIGO ES DE "cl_imagen::un_metodo_de_clase"
ENDPROC
ENDDEFINE

View File

@@ -0,0 +1,14 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>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!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
DEFINE CLASS cl_olebound AS oleboundcontrol
*< CLASSDATA: Baseclass="oleboundcontrol" Timestamp="" Scale="Pixels" Uniqueid="" />
Height = 100
Name = "cl_olebound"
Width = 100
ENDDEFINE

View File

@@ -0,0 +1,14 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>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!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
DEFINE CLASS cl_olecontrol AS olecontrol
*< CLASSDATA: Baseclass="olecontrol" Timestamp="" Scale="Pixels" Uniqueid="" Nombre="cl_olecontrol" Parent="" ObjName="cl_olecontrol" OLEObject="C:\Windows\system32\richtx32.ocx" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/////v////7////+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////1IAbwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCpJ18M8c8BAwAAAAACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEoAAAAAAAAABAAAAAIAAAD+////BQAAAAYAAAD+////BwAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAACKDQAA7QYAACFDNBIBAAYArAAAAAAA//8AAP//AQAAAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACADAAAAFJpZ2h0TWFyZ2luABEAAABODQAAAAcAAAAAAAAAAAAAAAUAAABUZXh0ABQAAABIAAAAAAsAAABPAAAAAAUAAIAAAAAAAAABAAAAAQABAAIACAAAAHtccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGRlZmYwe1xmb250dGxlY29udHJvbDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABibHtcZjBcZm5pbFxmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" />
Height = 67
Name = "cl_olecontrol"
Width = 131
ENDDEFINE

View File

@@ -0,0 +1,51 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>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!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
DEFINE CLASS cl_optiongroup AS optiongroup && descripcion
*< CLASSDATA: Baseclass="optiongroup" Timestamp="" Scale="Pixels" Uniqueid="" />
*<DefinedPropArrayMethod>
*m: propiedad_de_clase_con_valor_access
*m: propiedad_de_clase_con_valor_assign
*p: propiedad_de_clase_con_valor && Tiene un valor por defecto
*p: propiedad_de_clase_sin_valor && Una propiedad sin valor para heredar
*</DefinedPropArrayMethod>
ButtonCount = 2
Height = 46
Name = "cl_optiongroup"
propiedad_de_clase_con_valor = UN VALOR DE LA CLASE && Tiene un valor por defecto
propiedad_de_clase_sin_valor = .F. && Una propiedad sin valor para heredar
Value = 1
Width = 71
Option1.Caption = "Option1"
Option1.Height = 17
Option1.Left = 5
Option1.Name = "Option1"
Option1.Top = 5
Option1.Value = 1
Option1.Width = 61
Option2.Caption = "Option2"
Option2.Height = 17
Option2.Left = 5
Option2.Name = "Option2"
Option2.Top = 24
Option2.Width = 61
PROCEDURE propiedad_de_clase_con_valor_access
*To do: Modify this routine for the Access method
RETURN THIS.propiedad_de_clase_con_valor
ENDPROC
PROCEDURE propiedad_de_clase_con_valor_assign
LPARAMETERS vNewVal
*To do: Modify this routine for the Assign method
THIS.propiedad_de_clase_con_valor = m.vNewVal
ENDPROC
ENDDEFINE

View File

@@ -0,0 +1,14 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>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!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
DEFINE CLASS proj_hook AS projecthook
*< CLASSDATA: Baseclass="projecthook" Timestamp="" Scale="Pixels" Uniqueid="" />
Height = 22
Name = "proj_hook"
Width = 23
ENDDEFINE

View File

@@ -0,0 +1,18 @@
*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>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!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="fb2p_classperfile_text.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
*-- EXTERNAL_CLASS identify external member Class names / EXTERNAL_CLASS identifica los nombres de las Clases externas
*< EXTERNAL_CLASS: Name="cl_commandgroup" Baseclass="commandgroup" />
*< EXTERNAL_CLASS: Name="cl_form" Baseclass="form" />
*< EXTERNAL_CLASS: Name="cl_imagen" Baseclass="image" />
*< EXTERNAL_CLASS: Name="cl_olebound" Baseclass="oleboundcontrol" />
*< EXTERNAL_CLASS: Name="cl_olecontrol" Baseclass="olecontrol" />
*< EXTERNAL_CLASS: Name="cl_optiongroup" Baseclass="optiongroup" />
*< EXTERNAL_CLASS: Name="proj_hook" Baseclass="projecthook" />
*
*< LIBCOMMENT: Comentario principal de "fb2p_test.vcx" />
*

Binary file not shown.

Binary file not shown.

View File

@@ -1709,6 +1709,119 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Evaluate_TX2_Output_Test_from_ClassPerFile_VCX
LPARAMETERS tcFileName
IF PCOUNT() = 0
THIS.messageout( "* Support method, not a valid test." )
RETURN .T.
ENDIF
LOCAL lnCodError, lnCodError_Esperado ;
, lc_File, lc_OutputFile, lc_OutputFileTx2, lc_OutputFileTx2s, lc_OutputFileBak, lcExt2, lcCFG, laFiles(1,5) ;
, lcParent, lcClass, lcObjName, loReg_Esperado ;
, loCtl AS f_optiongroup OF "TESTS\DATOS_READONLY\LIB_CONTROLES.VCX" ;
, loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ;
, loEx AS EXCEPTION
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
TRY
loEx = NULL
TEXT TO lcCFG TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4
UseClassPerFile:1
RedirectClassPerFileToMain:1
ClassPerFileCheck:1
ENDTEXT
STRTOFILE(lcCFG, FORCEPATH('foxbin2prg.cfg', oFXU_LIB.cPathDatosTest))
loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG", "", 'TESTS\DATOS_TEST\foxbin2prg.cfg')
*loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
*loCnv.evaluateConfiguration( '1', '1', '1', '0', '1', '4', '1', '0' )
*loCnv.l_Test = .T.
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError, lnCodError_Esperado
*-- Copio la librer<65>a en DATOS_TEST
lc_File = UPPER(tcFileName)
lcExt2 = loCnv.Get_Ext2FromExt( JUSTEXT( tcFileName ) )
lc_OutputFile = FORCEPATH( lc_File, oFXU_LIB.cPathDatosTest )
lc_OutputFileTx2 = FORCEPATH( FORCEEXT( lc_File, lcExt2 ), oFXU_LIB.cPathDatosTest )
lc_OutputFileTx2s = FORCEPATH( JUSTSTEM(lc_File) + '*.' + lcExt2, oFXU_LIB.cPathDatosTest )
lc_OutputFileBak = lc_OutputFileTx2 + '.bak'
* Copio los .??2
*oFXU_LIB.copiarArchivosParaTest( lc_OutputFileTx2s )
FOR I = 1 TO ADIR(laFiles, FORCEPATH(lc_OutputFileTx2s, oFXU_LIB.cPathDatosReadOnly))
COPY FILE (FORCEPATH( laFiles(I,1), oFXU_LIB.cPathDatosReadOnly )) TO (FORCEPATH( laFiles(I,1), oFXU_LIB.cPathDatosTest ))
ENDFOR
* Creo los .??2.BAK correspondientes
FOR I = 1 TO ADIR(laFiles, lc_OutputFileTx2s)
COPY FILE (FORCEPATH( laFiles(I,1), oFXU_LIB.cPathDatosTest )) TO (FORCEPATH( laFiles(I,1) + '.bak', oFXU_LIB.cPathDatosTest ))
ENDFOR
*-- Genero TX2
*loCnv.execute( lc_OutputFile, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() )
*-- Genero BIN
loCnv.execute( lc_OutputFileTx2, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() )
*-- Genero TX2
loCnv.execute( lc_OutputFile, .F., .F., .F., '1', '0', '1', '', '', .T., '', SYS(5)+CURDIR() )
*-- Comparo resultados
THIS.messageout( "Se compara el archivo de texto generado con el original luego de 2 regeneraciones, para saber si hay cambios" )
*THIS.messageout( "OutputFileTx2 = " + lc_OutputFileTx2 )
*THIS.messageout( "OutputFileBak = " + lc_OutputFileBak )
*THIS.asserttrue( FILETOSTR( lc_OutputFileTx2 ) == FILETOSTR( lc_OutputFileBak ), "COMPARACI<43>N DE ARCHIVOS TX2" )
FOR I = 1 TO ALEN(laFiles, 1)
THIS.messageout( "--------------------" )
THIS.messageout( "OutputFileTx2 = " + laFiles(I,1) )
THIS.messageout( "OutputFileBak = " + laFiles(I,1) + '.bak' )
THIS.asserttrue( FILETOSTR( FORCEPATH( laFiles(I,1), oFXU_LIB.cPathDatosTest ) ) == FILETOSTR( FORCEPATH( laFiles(I,1) + '.bak', oFXU_LIB.cPathDatosTest ) ), "COMPARACI<43>N DE ARCHIVOS TX2" )
ENDFOR
CATCH TO loEx
THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado )
FINALLY
* USE IN (SELECT("ARCHIVOBIN_IN"))
* USE IN (SELECT("TABLABIN"))
STORE NULL TO loCnv, loCtl
RELEASE loCnv, loCtl
ENDTRY
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_Ejecutar_FOXBIN2PRG_Para_generar_un__VCX__con_ClassPerFile_ValidarEl_VC2_GeneradoConElOriginal_Y_NoEncontrarDiferencias
LOCAL lnCodError, lnCodError_Esperado ;
, lc_File, lcFileName, lc_OutputFile, lc_OutputFileTx2, lc_OutputFileBak, lcExt2 ;
, lcParent, lcClass, lcObjName, loReg_Esperado ;
, loCtl AS f_optiongroup OF "TESTS\DATOS_READONLY\LIB_CONTROLES.VCX" ;
, loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ;
, loEx AS EXCEPTION
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
PUBLIC goFXU AS ut__foxbin2prg OF ut__foxbin2prg.prg
goFXU = THIS
loEx = NULL
*-- Comparo resultados
THIS.Evaluate_TX2_Output_Test_from_ClassPerFile_VCX( 'fb2p_classperfile_text.vcx' )
ENDFUNC
ENDDEFINE

Binary file not shown.

Binary file not shown.

View File

@@ -26,7 +26,7 @@ _LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa):
_ProductName = "FOXBIN2PRG"
_MajorVer = "1"
_MinorVer = "19"
_Revision = "48"
_Revision = "49"
_LanguageID = "1034"
_AutoIncrement = "0"
*</DevInfo>
@@ -93,7 +93,6 @@ WITH loProject.FILES
.ADD('props_xmladapter.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" />
.ADD('props_xmlfield.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" />
.ADD('props_xmltable.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" />
.ADD('readme.txt') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" />
*</BuildProj>
.ITEM('__newproject.f2b').Remove()
@@ -104,7 +103,6 @@ WITH loProject.FILES
*</FileComments>
*<ExcludedFiles>
.ITEM(lcCurdir + 'readme.txt').Exclude = .T.
*</ExcludedFiles>
*<TextFiles>

Binary file not shown.

Binary file not shown.

View File

@@ -192,6 +192,13 @@
* 10/07/2016 FDBOZZO v1.19.48 Fix defecto db2: Cuando se arregló el bug del memo multi-línea, se introdujo un nuevo defecto por el cual un memo de linea-simple se decodifica mal (Nathan Brown)
* 11/07/2016 FDBOZZO v1.19.48 Bug Fix pj2: Cuando se regenera el binario de un PJ2 con archivos en una ruta con paréntesis y espacios, se genera un error "Error 36, Command contains unrecognized phrase/keyword" (Nathan Brown)
* 11/07/2016 FDBOZZO v1.19.48 Bug Fix frx: Los ControlSource de objetos OLE que contienen comillas se generan mal (Nathan Brown)
* 23/03/2017 FDBOZZO v1.19.49 Bug Fix vcx: No funciona la generación de una clase individual con "classlib.vcx::classname" (Lutz Scheffler)
* 25/03/2017 FDBOZZO v1.19.49 Mejora vcx: Poder importar una clase (VC2 generado con ClassPerFile) en un VCX existente (Lutz Scheffler)
* 26/03/2017 FDBOZZO v1.19.49 Mejora cfg: Se permite indicar un archivo CFG por parámetro de cualquier directorio para anular los CFG predeterminados de los subdirectorios, para casos especiales donde sea necesario
* 28/03/2017 FDBOZZO v1.19.49 Mejora vcx: Implementada sintaxis para importar o exportar clases individuales usando "classlibrary.vcx::classname::import" y "classlibrary.vcx::classname::export"
* 11/04/2017 FDBOZZO v1.19.49 Bug Fix frx: Cuando dentro de una expresión se usa "&&", se corrompe el registro del FRX generado (Alejandro A Sosa)
* 11/04/2017 FDBOZZO v1.19.49 Mejora cfg : En modo objeto permitir indicar un objeto CFG en lugar de un archivo CFG (Lutz Scheffler)
* 12/04/2017 DH&FDBOZZO v1.19.49 Bug Fix & Report pjx: No se estaba guardando el campo User en los archivos PJX (Doug Hennig)
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
*
*---------------------------------------------------------------------------------------------------
@@ -300,6 +307,11 @@
* 10/07/2016 Nathan Brown Reporte defecto v1.19.48-Preview3: Cuando se arregló el bug del memo multi-línea, se introdujo un nuevo defecto por el cual un memo de linea-simple se decodifica mal (Arreglado en v1.19.48 Preview-4)
* 11/07/2016 Nathan Brown Reporte bug pj2 v1.19.48-Preview4: Cuando se regenera el binario de un PJ2 con archivos en una ruta con paréntesis y espacios, se genera un error "Error 36, Command contains unrecognized phrase/keyword" (Arreglado en v1.19.48 Preview-5)
* 11/07/2016 Nathan Brown Reporte bug frx v1.19.48-Preview5: Los ControlSource de objetos OLE que contienen comillas se generan mal (Arreglado en v1.19.48 Preview-6)
* 23/03/2017 Lutz Scheffler Reporte bug vcx v1.19.48: No funciona la generación de una clase individual con "classlib.vcx::classname" (Arreglado en v1.19.49)
* 23/03/2017 Lutz Scheffler Mejora vcx v1.19.48: Poder importar una clase (VC2 generado con ClassPerFile) en un VCX existente (Agragado en v1.19.49)
* 30/03/2017 Alejandro A Sosa Reporte bug frx v1.19.48: Cuando dentro de una expresión se usa "&&", se corrompe el registro del FRX generado (Arreglado en v1.19.49)
* 28/03/2017 Lutz Scheffler Mejora cfg v1.19.48: En modo objeto permitir indicar un objeto CFG en lugar de un archivo CFG (Agragado en v1.19.49)
* 06/04/2017 Doug Hennig Reporte Bug y arreglo parcial PJX v1.19.48: No se estaba guardando el campo User en los archivos PJX (Agregado en v1.19.49)
* </TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)>
*
*---------------------------------------------------------------------------------------------------
@@ -761,11 +773,13 @@ DEFINE CLASS c_foxbin2prg AS Session
c_Foxbin2prg_FullPath = ''
c_Foxbin2prg_ConfigFile = ''
c_CurDir = ''
c_TempDir = SYS(2023)
c_InputFile = ''
c_ClassToConvert = '' && Guarda el nombre de la clase a convertir, indicada en tcInputFile como "archivo.vcx::clase"
c_ClassOperationType = '' && (I)mport o (E)xport. Se usa solo para manejar clases individuales.
c_OriginalFileName = ''
c_LogFile = ADDBS( SYS(2023) ) + 'FoxBin2Prg_Debug.LOG'
c_ErrorLogFile = ADDBS( SYS(2023) ) + 'FoxBin2Prg_Error.LOG'
c_LogFile = ''
c_ErrorLogFile = ''
c_TextLog = ''
c_OutputFile = ''
c_Recompile = '1'
@@ -775,6 +789,7 @@ DEFINE CLASS c_foxbin2prg AS Session
lFileMode = .F.
n_ExisteCapitalizacion = -1
l_CFG_CachedAccess = .F.
n_CFG_EvaluateFromParam = 0
n_Debug = 0
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
@@ -793,6 +808,7 @@ DEFINE CLASS c_foxbin2prg AS Session
n_ExcludeDBFAutoincNextval = 0
l_ClassPerFileCheck = .F.
l_RedirectClassPerFileToMain = .F.
n_RedirectClassType = 0 && 0=Redireccionar Todas las clases, 1=Redireccionar solo la clase indicada
l_NoTimestamps = .T.
c_BackgroundImage = ''
l_ClearUniqueID = .T.
@@ -865,6 +881,14 @@ DEFINE CLASS c_foxbin2prg AS Session
THIS.declareDLL()
* Check if SYS(2023) point to "Program Files"
IF ATC("\PROGRAM FILES", THIS.c_TempDir) > 0 OR ATC("\ARCHIVOS DE PROGRAMA", THIS.c_TempDir) > 0
THIS.c_TempDir = GETENV("TEMP")
ENDIF
THIS.c_LogFile = ADDBS( THIS.c_TempDir ) + 'FoxBin2Prg_Debug.LOG'
THIS.c_ErrorLogFile = ADDBS( THIS.c_TempDir ) + 'FoxBin2Prg_Error.LOG'
IF ADIR(laDir, THIS.c_ErrorLogFile) > 0 THEN
IF ADIR(laDir, THIS.c_ErrorLogFile + '.BAK') > 0 THEN
THIS.changeFileAttribute( THIS.c_ErrorLogFile + '.BAK', '-R-S-H' )
@@ -1198,6 +1222,15 @@ DEFINE CLASS c_foxbin2prg AS Session
ENDPROC
PROCEDURE n_RedirectClassType_ACCESS
IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) )
RETURN THIS.n_RedirectClassType
ELSE
RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).n_RedirectClassType, THIS.n_RedirectClassType )
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
@@ -1814,6 +1847,7 @@ DEFINE CLASS c_foxbin2prg AS Session
LOCAL lcConfigFile, llExiste_CFG_EnDisco, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine, laDirInfo(1,5) ;
, lnDirs, laDirs(1), llMasterEval, lcProp ;
, lo_CFG AS CL_CFG OF 'FOXBIN2PRG.PRG' ;
, loCFG_Manual AS CL_CFG OF 'FOXBIN2PRG.PRG' ;
, lo_Configuration AS Collection ;
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ;
, loEx as Exception
@@ -1828,6 +1862,15 @@ DEFINE CLASS c_foxbin2prg AS Session
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()
toParentCFG = loCFG_Manual
lcConfigFile = FULLPATH('Personalized-CFG-Object', tc_InputFile)
loCFG_Manual.c_Foxbin2prg_ConfigFile = 'Personalized-CFG-Object'
ELSE
loCFG_Manual = NULL
ENDIF
IF VARTYPE(toParentCFG) <> 'O' THEN
toParentCFG = NULL
ENDIF
@@ -1851,10 +1894,24 @@ DEFINE CLASS c_foxbin2prg AS Session
ENDIF
IF .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN
IF tcInputFile_Type == C_FILETYPE_DIRECTORY THEN
lcConfigFile = FULLPATH( 'foxbin2prg.cfg', ADDBS(tc_InputFile) )
IF .n_CFG_EvaluateFromParam = 1
* Si se indicó por parámetro (modo objeto), usarlo como Maestro
* Se saltea solo esta evaluación, y luego se usa la variable para determinar el Nº de CFG a usar.
.n_CFG_EvaluateFromParam = -1 && Luego se cambia por el Nº de CFG que corresponda.
ELSE
lcConfigFile = FULLPATH( 'foxbin2prg.cfg', tc_InputFile )
IF tcInputFile_Type == C_FILETYPE_DIRECTORY THEN
* INDICÓ DIRECTORIO
IF ISNULL(loCFG_Manual)
*lcConfigFile = FULLPATH( 'foxbin2prg.cfg', ADDBS(tc_InputFile) )
lcConfigFile = FULLPATH( JUSTFNAME(lcConfigFile), ADDBS(tc_InputFile) )
ENDIF
ELSE
* INDICÓ ARCHIVO
IF ISNULL(loCFG_Manual)
*lcConfigFile = FULLPATH( 'foxbin2prg.cfg', tc_InputFile )
lcConfigFile = FULLPATH( JUSTFNAME(lcConfigFile), tc_InputFile )
ENDIF
ENDIF
ENDIF
ENDIF
@@ -1868,11 +1925,22 @@ DEFINE CLASS c_foxbin2prg AS Session
IF .l_Main_CFG_Loaded
IF lo_Configuration.Count > 0 THEN
.n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0 = No hay CFG cacheada, >0 = Hay CFG cacheada
IF .n_CFG_EvaluateFromParam > 1
* Especial: Si hay una configuración de bloqueo (CFG Manual), se usa
.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
ENDIF
IF .n_CFG_Actual > 0 THEN
lo_CFG = lo_Configuration.Item(.n_CFG_Actual)
.l_CFG_CachedAccess = .T.
IF NOT ISNULL(loCFG_Manual)
* Si le paso un objeto CFG, prevalece sobre el guardado
lo_CFG.CopyFrom(@loCFG_Manual)
ENDIF
ENDIF
ENDIF
@@ -2072,6 +2140,13 @@ DEFINE CLASS c_foxbin2prg AS Session
.writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > RedirectClassPerFileToMain: ' + TRANSFORM(lcValue) )
ENDIF
CASE LEFT( laConfig(I), 18 ) == LOWER('RedirectClassType:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 19 ) )
IF INLIST( lcValue, '0', '1' ) THEN
lo_CFG.n_RedirectClassType = INT( VAL( lcValue ) )
.writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > RedirectClassType: ' + TRANSFORM(lcValue) )
ENDIF
CASE LEFT( laConfig(I), 24 ) == LOWER('RemoveNullCharsFromCode:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) )
IF INLIST( lcValue, '0', '1' ) THEN
@@ -2213,7 +2288,13 @@ DEFINE CLASS c_foxbin2prg AS Session
.l_Main_CFG_Loaded = .T.
IF NOT llMasterEval
IF llMasterEval
* Si se inidicó un archivo CFG por parámetro (modo objeto), aqui se bloquea
* al Nº de configuración correspondiente.
IF .n_CFG_EvaluateFromParam = -1
.n_CFG_EvaluateFromParam = .n_CFG_Actual
ENDIF
ELSE
*-- Si no es llMasterEval, es porque esta llamada es cíclica desde este mismo método,
*-- y no hay parámetros para evaluar, ya que se mandan todos vacíos desde el inicial.
EXIT
@@ -2232,6 +2313,7 @@ DEFINE CLASS c_foxbin2prg AS Session
.writeLog( C_TAB + 'n_UseClassPerFile: ' + TRANSFORM(.n_UseClassPerFile) )
.writeLog( C_TAB + 'l_ClassPerFileCheck: ' + TRANSFORM(.l_ClassPerFileCheck) )
.writeLog( C_TAB + 'l_RedirectClassPerFileToMain: ' + TRANSFORM(.l_RedirectClassPerFileToMain) )
.writeLog( C_TAB + 'n_RedirectClassType: ' + TRANSFORM(.n_RedirectClassType) )
.writeLog( C_TAB + 'n_Debug: ' + TRANSFORM(.n_Debug) )
.writeLog( C_TAB + 'n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) )
.writeLog( C_TAB + 'c_BackgroundImage: ' + TRANSFORM(.c_BackgroundImage) )
@@ -2537,8 +2619,8 @@ DEFINE CLASS c_foxbin2prg AS Session
, lcExt == .c_LB2, .LBX_Conversion_Support = 2 ;
, lcExt == .c_MN2, .MNX_Conversion_Support = 2 ;
, lcExt == .c_DB2, NOT ISNULL(loDBF_CFG) AND INLIST(loDBF_CFG.DBF_Conversion_Support, 2, 8) ;
OR (INLIST(.DBF_Conversion_Support, 2, 8) ;
AND (ISNULL(loDBF_CFG) OR NOT INLIST(loDBF_CFG.DBF_Conversion_Support, 1, 4))) ;
OR (INLIST(.DBF_Conversion_Support, 2, 8) ;
AND (ISNULL(loDBF_CFG) OR NOT INLIST(loDBF_CFG.DBF_Conversion_Support, 1, 4))) ;
, lcExt == .c_DC2, .DBC_Conversion_Support = 2 ;
, .F. )
ENDWITH && THIS
@@ -2637,6 +2719,7 @@ DEFINE CLASS c_foxbin2prg AS Session
, lnFileCount, lcErrorInfo, lcErrorFile, lnPCount, laParams(1), lnConversionOption, lnErrorIcon, llError ;
, lcOldSetEscape, lcOldOnEscape, llEscKeyRestored ;
, loEx AS EXCEPTION ;
, loCFG AS CL_CFG OF 'FOXBIN2PRG.PRG' ;
, loFSO AS Scripting.FileSystemObject ;
, loLang AS CL_LANG OF 'FOXBIN2PRG.PRG' ;
, loFrm_Interactive AS frm_interactive OF 'FOXBIN2PRG.PRG' ;
@@ -2651,6 +2734,7 @@ DEFINE CLASS c_foxbin2prg AS Session
loLang = _SCREEN.o_FoxBin2Prg_Lang
loFSO = .o_FSO
loWSH = .o_WSH
loCFG = NULL
lnPCount = 0
lcInputFile_Type = ''
.l_Error = .F.
@@ -2703,12 +2787,31 @@ DEFINE CLASS c_foxbin2prg AS Session
*ENDIF
*-- Reconocimiento de la clase indicada
*-- Ej: [c:\desa\test\library.vcx::classname]
IF '::' $ tc_InputFile THEN
.c_ClassToConvert = LOWER( ALLTRIM( GETWORDNUM( tc_InputFile, 2, '::' ) ) )
tc_InputFile = LOWER( ALLTRIM( GETWORDNUM( tc_InputFile, 1, '::' ) ) )
tc_InputFile = STRTRAN(tc_InputFile, '::', '|')
.c_ClassOperationType = EVL( UPPER( LEFT( ALLTRIM( GETWORDNUM( tc_InputFile, 3, '|' ) ), 1) ), 'E')
.c_ClassToConvert = LOWER( ALLTRIM( GETWORDNUM( tc_InputFile, 2, '|' ) ) )
* CUIDADO!, evaluar esta última, que si no las anteriores no evalúan.
tc_InputFile = LOWER( ALLTRIM( GETWORDNUM( tc_InputFile, 1, '|' ) ) )
ELSE
.c_ClassOperationType = ''
ENDIF
.c_Foxbin2prg_ConfigFile = EVL( tcCFG_File, .c_Foxbin2prg_ConfigFile )
IF VARTYPE(tcCFG_File) = "O"
* Validar el objeto
loCFG = tcCFG_File
IF NOT (loCFG.Class == PROPER('CL_CFG'))
ERROR 'CFG object: Invalid class. Please, generate it with get_DirSettings()'
ENDIF
.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))
ENDIF
*-- Ajusto la ruta si no es absoluta
tc_InputFile = .get_AbsolutePath( tc_InputFile, .c_CurDir )
@@ -2764,6 +2867,23 @@ DEFINE CLASS c_foxbin2prg AS Session
.evaluateConfiguration( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ;
, @tcClearUniqueID, @tcOptimizeByFilestamp, @tc_InputFile, @lcInputFile_Type )
* Redefinir nombre archivo de entrada según el tipo de conversión (IMPORT/EXPORT)
IF .c_ClassOperationType = 'I'
* En el caso de importar, debo cambiar la sintaxis de tc_InputFile para poder usar
* la conversión existente de clase vc2
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
ENDIF
ENDIF
loLang = _SCREEN.o_FoxBin2Prg_Lang
DO CASE
@@ -3585,10 +3705,16 @@ DEFINE CLASS c_foxbin2prg AS Session
lcForceAttribs = lcForceAttribs + '-R'
ENDIF
*-- OPTIMIZACIÓN VC2/SC2/DC2: VERIFICO SI EL ARCHIVO BASE FUE PROCESADO PARA DESCARTAR REPROCESOS
IF .n_UseClassPerFile > 0 AND .l_RedirectClassPerFileToMain THEN
DO CASE
CASE .n_RedirectClassType = 1 && 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_UseClassPerFile = 1 AND INLIST(lcExtension,.c_VC2,.c_SC2)
IF OCCURS('.', JUSTSTEM(.c_InputFile)) = 0 THEN
lc_BaseFile = .c_InputFile
@@ -3955,8 +4081,8 @@ DEFINE CLASS c_foxbin2prg AS Session
ENDIF
IF ISNULL(loCFG) THEN
lo_CFG = CREATEOBJECT('CL_CFG')
lo_CFG.CopyFrom(THIS)
loCFG = CREATEOBJECT('CL_CFG')
loCFG.CopyFrom(THIS)
ENDIF
RETURN loCFG
@@ -6313,10 +6439,10 @@ DEFINE CLASS c_conversor_base AS Custom
PROCEDURE fileTypeCode
LPARAMETERS tcExtension
LPARAMETERS tcExtension, tcOriginalType
tcExtension = UPPER(tcExtension)
RETURN ICASE( tcExtension = 'DBC', 'd' ;
, tcExtension = 'DBF', 'D' ;
, tcExtension = 'DBF', EVL(tcOriginalType, 'D') ;
, tcExtension = 'QPR', 'Q' ;
, tcExtension = 'SCX', 'K' ;
, tcExtension = 'FRX', 'R' ;
@@ -7754,6 +7880,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
, RESERVED2 ;
, SCCDATA ;
, LOCAL ;
, USER ;
, KEY ) ;
VALUES ;
( UPPER(EVL(THIS.c_OriginalFileName,THIS.c_OutputFile)) ;
@@ -7773,6 +7900,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
, toProject._ServerHead.getRowServerInfo() ;
, toProject._SccData ;
, .T. ;
, STRCONV(toProject._User,14) ;
, UPPER( JUSTSTEM( THIS.c_OutputFile) ) )
ENDPROC
@@ -8323,7 +8451,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
lnSelect = SELECT()
SELECT 0
USE (THIS.c_InputFile) SHARED AGAIN ALIAS _TABLABIN
COPY STRUCTURE EXTENDED TO ( FORCEPATH( '_FRX_STRUC.DBF', ADDBS( SYS(2023) ) ) )
COPY STRUCTURE EXTENDED TO ( FORCEPATH( '_FRX_STRUC.DBF', ADDBS( THIS.c_TempDir ) ) )
**** CONTINUAR SI ES NECESARIO - SIN USO POR AHORA /// DO NOT USE - NOT IMPLEMENTED!
CATCH TO loEx
@@ -8462,7 +8590,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
, RESERVED6 ;
, RESERVED7 ;
, RESERVED8 ;
, USER) ;
, USER ;
, DEVINFO ) ;
VALUES ;
( 'WINDOWS' ;
, toObjeto._UniqueID ;
@@ -8485,7 +8614,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
, '' ;
, '' ;
, '' ;
, toObjeto._User )
, STRCONV(toObjeto._User,14) ;
, STRCONV(toObjeto._DevInfo,14) )
ENDIF
ENDWITH && THIS
@@ -9836,7 +9966,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
*-- Verificación de las Clases, si son Externas y se indicó chequearlas
DO CASE
CASE toFoxBin2Prg.n_UseClassPerFile = 1 AND toFoxBin2Prg.l_ClassPerFileCheck
CASE toFoxBin2Prg.n_UseClassPerFile = 1 AND toFoxBin2Prg.l_ClassPerFileCheck AND EMPTY(toFoxBin2Prg.c_ClassOperationType)
*-- El ClassPerFile original, con nomenclatura 'Libreria.NombreClase.vc2'
FOR I = 1 TO toModulo._ExternalClasses_Count
lnItem = 0
@@ -9857,7 +9987,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
CASE toFoxBin2Prg.n_UseClassPerFile = 2 AND toFoxBin2Prg.l_ClassPerFileCheck AND EMPTY(toFoxBin2Prg.c_ClassOperationType)
*-- El nuevo ClassPerFile, con nomenclatura 'Libreria.ClaseBase.NombreClase.vc2'
FOR I = 1 TO toModulo._ExternalClasses_Count
lnItem = 0
@@ -9914,7 +10044,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
TRY
LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ;
, laLineasExclusion(1), lnBloquesExclusion, I, lcClassName, lnIDInputFile ;
, laLineasExclusion(1), lnBloquesExclusion, I, lcClassName, lnIDInputFile, llReplaceClass ;
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG'
WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG'
@@ -9927,29 +10057,39 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
lnIDInputFile = toFoxBin2Prg.n_ProcessedFiles
IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_RedirectClassPerFileToMain
C_FB2PRG_CODE = FILETOSTR( .c_InputFile )
IF toFoxBin2Prg.n_RedirectClassType = 0 && Redireccionar todas las clases
C_FB2PRG_CODE = FILETOSTR( .c_InputFile )
lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE )
lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE )
.updateProgressbar( 'Identifying Header Blocks...', 1, lnCodeLines, 1 )
.identifyHeaderBlocks( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg )
.updateProgressbar( 'Identifying Header Blocks...', 1, lnCodeLines, 1 )
.identifyHeaderBlocks( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg )
.updateProgressbar( 'Loading Code...', 2, lnCodeLines, 1 )
.updateProgressbar( 'Loading Code...', 2, lnCodeLines, 1 )
ENDIF
*-- MÁSCARA DE BÚSQUEDA
IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN
*-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes
*-- con la sintaxis "<path>Classlib.Classname.ext" o "<path>Database.MemberName.ext"
lcBaseFilename = JUSTSTEM( JUSTSTEM(.c_InputFile) )
lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.' + JUSTEXT(.c_InputFile)
ELSE && toFoxBin2Prg.n_UseClassPerFile = 2
*-- Esto crea la m<EFBFBD>scara de b<EFBFBD>squeda "<path>Database.*.*.ext" para encontrar las partes
*-- con la sintaxis "<path>Database.MemberType.MemberName.ext"
*-- Esto crea la máscara de búsqueda "<path>filename.*.*.ext" para encontrar las partes
*-- con la sintaxis "<path>Classlib.ClassType.Classname.ext" o "<path>Database.MemberType.MemberName.ext"
lcBaseFilename = JUSTSTEM( JUSTSTEM( JUSTSTEM(.c_InputFile) ) )
lcInputFile = ADDBS( JUSTPATH(.c_InputFile) ) + lcBaseFilename + '.*.*.' + JUSTEXT(.c_InputFile)
ENDIF
IF toFoxBin2Prg.n_RedirectClassType = 1 && Redireccionar solo esta clase
lcInputFile = .c_InputFile
ENDIF
lnFileCount = ADIR( laFiles, lcInputFile, "", 1 )
ASORT( laFiles, 1, 0, 0, 1)
IF lnFileCount > 1
ASORT( laFiles, 1, 0, 0, 1)
ENDIF
FOR I = 1 TO lnFileCount
IF toFoxBin2Prg.n_UseClassPerFile = 1 THEN
@@ -9957,20 +10097,22 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) )
*-- Verificación de las Clases, si son Externas y se indicó chequearlas
IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 1, 1+2+4 ) = 0
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 + ']' )
LOOP && Salteo esta clase
LOOP && Salteo esta clase porque se indicó chequear y no concuerda con las anotadas
ENDIF
ELSE && toFoxBin2Prg.n_UseClassPerFile = 2
lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile )
lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) + '.' + GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 3, '.' ) )
*-- Verificación de las Clases, si son Externas y se indicó chequearlas
IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 2, 1+2+4 ) = 0
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 + ']' )
LOOP && Salteo esta clase porque no concuerda con las anotadas
LOOP && Salteo esta clase porque se indicó chequear y no concuerda con las anotadas
ENDIF
ENDIF
@@ -10030,9 +10172,23 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
toFoxBin2Prg.updateProcessedFile( lnIDInputFile )
.updateProgressbar( loLang.C_GENERATING_BINARY_LOC + '...', 0, lnCodeLines, 1 )
toFoxBin2Prg.doBackup( .F., .T., '', '', '' )
.createClasslib()
.writeBinaryFile( @toModulo, @toFoxBin2Prg )
IF toFoxBin2Prg.n_RedirectClassType = 1 && Redireccionar solo esta clase a main
llReplaceClass = .T.
toFoxBin2Prg.c_OutputFile = FULLPATH( FORCEEXT( lcBaseFilename, 'VCX' ), .c_InputFile)
toFoxBin2Prg.doBackup( .F., .T., '', '', '' )
IF ADIR( laFiles, toFoxBin2Prg.c_OutputFile, "", 1 ) = 1
USE (toFoxBin2Prg.c_OutputFile) ALIAS TABLABIN AGAIN SHARED
ELSE
.createClasslib()
ENDIF
ELSE
toFoxBin2Prg.doBackup( .F., .T., '', '', '' )
.createClasslib()
ENDIF
.writeBinaryFile( @toModulo, @toFoxBin2Prg, llReplaceClass )
ENDWITH && THIS
@@ -10056,7 +10212,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
PROCEDURE writeBinaryFile
LPARAMETERS toModulo, toFoxBin2Prg
LPARAMETERS toModulo, toFoxBin2Prg, tlReplaceClass
*-- Estructura del objeto toModulo generado:
*-- -----------------------------------------------------------------------------------------------------------
*-- Version Versión usada para generar la versión PRG analizada
@@ -10128,7 +10284,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
#ENDIF
TRY
LOCAL lcObjName, lnCodError, I, X, loEx AS EXCEPTION ;
LOCAL lcObjName, lnCodError, I, X, llReplace, laUniqueID(1,1), loEx AS EXCEPTION ;
, loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' ;
, loFSO AS Scripting.FileSystemObject
@@ -10145,131 +10301,178 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin
ERROR 'OutputFile Error Simulation'
ENDCASE
*-- Creo el registro de cabecera
.createClasslib_RecordHeader( toModulo )
IF tlReplaceClass
I = 1
loClase = toModulo._Clases(I)
LOCATE FOR PLATFORM == PADR('WINDOWS', FSIZE('PLATFORM')) AND OBJNAME == loClase._ObjName
llReplace = FOUND()
ENDIF
IF llReplace
*-- Reemplazar los campos del registro actual
IF EMPTY(loClase._TimeStamp)
loClase._TimeStamp = .rowTimeStamp( {^2013/11/04 20:00:00} )
ENDIF
IF EMPTY(loClase._UniqueID)
loClase._UniqueID = toFoxBin2Prg.unique_ID()
ENDIF
REPLACE ;
PLATFORM WITH 'WINDOWS' ;
, TIMESTAMP WITH loClase._TimeStamp ;
, CLASS WITH loClase._Class ;
, CLASSLOC WITH loClase._ClassLoc ;
, BASECLASS WITH loClase._BaseClass ;
, OBJNAME WITH loClase._ObjName ;
, PARENT WITH loClase._Parent ;
, PROPERTIES WITH loClase._PROPERTIES ;
, PROTECTED WITH loClase._PROTECTED ;
, METHODS WITH loClase._METHODS ;
, OLE WITH loClase._Ole ;
, OLE2 WITH loClase._Ole2 ;
, RESERVED1 WITH loClase._RESERVED1 ;
, RESERVED2 WITH loClase._RESERVED2 ;
, RESERVED3 WITH loClase._RESERVED3 ;
, RESERVED4 WITH loClase._RESERVED4 ;
, RESERVED5 WITH loClase._RESERVED5 ;
, RESERVED6 WITH loClase._RESERVED6 ;
, RESERVED7 WITH loClase._RESERVED7 ;
, RESERVED8 WITH loClase._RESERVED8 ;
, USER WITH loClase._User
.insert_AllObjects( @loClase, @toFoxBin2Prg )
ELSE
*-- Creo el registro de cabecera
IF tlReplaceClass AND RECCOUNT() > 0
SELECT MAX(VAL(SUBSTR(UNIQUEID,2))) FROM TABLABIN INTO ARRAY laUniqueID
toFoxBin2Prg.n_ID = laUniqueID(1)
ELSE
.createClasslib_RecordHeader( toModulo )
ENDIF
*-- Recorro las CLASES
FOR X = 1 TO 2
FOR I = 1 TO toModulo._Clases_Count
loClase = NULL
loClase = toModulo._Clases(I)
*-- El dataenvironment debe estar primero, luego lo demás.
IF X = 1 AND NOT loClase._BaseClass == 'dataenvironment' ;
OR X = 2 AND loClase._BaseClass == 'dataenvironment'
LOOP
ENDIF
IF EMPTY(loClase._TimeStamp)
loClase._TimeStamp = .rowTimeStamp( {^2013/11/04 20:00:00} )
ENDIF
IF EMPTY(loClase._UniqueID)
loClase._UniqueID = toFoxBin2Prg.unique_ID()
ENDIF
*-- Inserto la clase
INSERT INTO TABLABIN ;
( PLATFORM ;
, UNIQUEID ;
, TIMESTAMP ;
, CLASS ;
, CLASSLOC ;
, BASECLASS ;
, OBJNAME ;
, PARENT ;
, PROPERTIES ;
, PROTECTED ;
, METHODS ;
, OLE ;
, OLE2 ;
, RESERVED1 ;
, RESERVED2 ;
, RESERVED3 ;
, RESERVED4 ;
, RESERVED5 ;
, RESERVED6 ;
, RESERVED7 ;
, RESERVED8 ;
, USER) ;
VALUES ;
( 'WINDOWS' ;
, loClase._UniqueID ;
, loClase._TimeStamp ;
, loClase._Class ;
, loClase._ClassLoc ;
, loClase._BaseClass ;
, loClase._ObjName ;
, loClase._Parent ;
, loClase._PROPERTIES ;
, loClase._PROTECTED ;
, loClase._METHODS ;
, loClase._Ole ;
, loClase._Ole2 ;
, loClase._RESERVED1 ;
, loClase._RESERVED2 ;
, loClase._RESERVED3 ;
, loClase._ClassIcon ;
, loClase._ProjectClassIcon ;
, loClase._Scale ;
, loClase._Comentario ;
, loClase._includeFile ;
, loClase._User )
*-- Recorro las CLASES
FOR X = 1 TO 2
FOR I = 1 TO toModulo._Clases_Count
loClase = NULL
loClase = toModulo._Clases(I)
*-- El dataenvironment debe estar primero, luego lo dem<65>s.
IF X = 1 AND NOT loClase._BaseClass == 'dataenvironment' ;
OR X = 2 AND loClase._BaseClass == 'dataenvironment'
LOOP
ENDIF
IF EMPTY(loClase._TimeStamp)
loClase._TimeStamp = .rowTimeStamp( {^2013/11/04 20:00:00} )
ENDIF
IF EMPTY(loClase._UniqueID)
loClase._UniqueID = toFoxBin2Prg.unique_ID()
ENDIF
*-- Inserto la clase
INSERT INTO TABLABIN ;
( PLATFORM ;
, UNIQUEID ;
, TIMESTAMP ;
, CLASS ;
, CLASSLOC ;
, BASECLASS ;
, OBJNAME ;
, PARENT ;
, PROPERTIES ;
, PROTECTED ;
, METHODS ;
, OLE ;
, OLE2 ;
, RESERVED1 ;
, RESERVED2 ;
, RESERVED3 ;
, RESERVED4 ;
, RESERVED5 ;
, RESERVED6 ;
, RESERVED7 ;
, RESERVED8 ;
, USER) ;
VALUES ;
( 'WINDOWS' ;
, loClase._UniqueID ;
, loClase._TimeStamp ;
, loClase._Class ;
, loClase._ClassLoc ;
, loClase._BaseClass ;
, loClase._ObjName ;
, loClase._Parent ;
, loClase._PROPERTIES ;
, loClase._PROTECTED ;
, loClase._METHODS ;
, loClase._Ole ;
, loClase._Ole2 ;
, loClase._RESERVED1 ;
, loClase._RESERVED2 ;
, loClase._RESERVED3 ;
, loClase._ClassIcon ;
, loClase._ProjectClassIcon ;
, loClase._Scale ;
, loClase._Comentario ;
, loClase._includeFile ;
, loClase._User )
.insert_AllObjects( @loClase, @toFoxBin2Prg )
.insert_AllObjects( @loClase, @toFoxBin2Prg )
*-- Inserto el COMMENT
INSERT INTO TABLABIN ;
( PLATFORM ;
, UNIQUEID ;
, TIMESTAMP ;
, CLASS ;
, CLASSLOC ;
, BASECLASS ;
, OBJNAME ;
, PARENT ;
, PROPERTIES ;
, PROTECTED ;
, METHODS ;
, OLE ;
, OLE2 ;
, RESERVED1 ;
, RESERVED2 ;
, RESERVED3 ;
, RESERVED4 ;
, RESERVED5 ;
, RESERVED6 ;
, RESERVED7 ;
, RESERVED8 ;
, USER) ;
VALUES ;
( 'COMMENT' ;
, 'RESERVED' ;
, 0 ;
, '' ;
, '' ;
, '' ;
, loClase._ObjName ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, IIF(loClase._OlePublic, 'OLEPublic', '') ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' )
*-- Inserto el COMMENT
INSERT INTO TABLABIN ;
( PLATFORM ;
, UNIQUEID ;
, TIMESTAMP ;
, CLASS ;
, CLASSLOC ;
, BASECLASS ;
, OBJNAME ;
, PARENT ;
, PROPERTIES ;
, PROTECTED ;
, METHODS ;
, OLE ;
, OLE2 ;
, RESERVED1 ;
, RESERVED2 ;
, RESERVED3 ;
, RESERVED4 ;
, RESERVED5 ;
, RESERVED6 ;
, RESERVED7 ;
, RESERVED8 ;
, USER) ;
VALUES ;
( 'COMMENT' ;
, 'RESERVED' ;
, 0 ;
, '' ;
, '' ;
, '' ;
, loClase._ObjName ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, IIF(loClase._OlePublic, 'OLEPublic', '') ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' ;
, '' )
ENDFOR && I = 1 TO toModulo._Clases_Count
ENDFOR && X = 1 TO 2
ENDFOR && I = 1 TO toModulo._Clases_Count
ENDFOR && X = 1 TO 2
ENDIF
USE IN (SELECT("TABLABIN"))
@@ -10375,7 +10578,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) )
*-- Verificación de las Clases, si son Externas y se indicó chequearlas
IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 1, 1+2+4 ) = 0
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 + ']' )
LOOP && Salteo esta clase
@@ -10385,7 +10589,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin
lcClassName = LOWER( GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 2, '.' ) + '.' + GETWORDNUM( JUSTFNAME( lcInputFile_Class ), 3, '.' ) )
*-- Verificación de las Clases, si son Externas y se indicó chequearlas
IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , lcClassName, 1, 0, 2, 1+2+4 ) = 0
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 + ']' )
LOOP && Salteo esta clase
@@ -10907,10 +11112,12 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin
, ID ;
, TIMESTAMP ;
, OBJREV ;
, USER ;
, DEVINFO ;
, KEY ) ;
VALUES ;
( loFile._Name + CHR(0) ;
, .fileTypeCode(JUSTEXT(loFile._Name)) ;
, .fileTypeCode(JUSTEXT(loFile._Name), loFile._Type) ;
, loFile._Exclude ;
, (loFile._Name == lcMainProg) ;
, loFile._Comments ;
@@ -10919,6 +11126,8 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin
, loFile._ID ;
, loFile._TimeStamp ;
, loFile._ObjRev ;
, STRCONV(loFile._User,14) ;
, STRCONV(loFile._DevInfo,14) ;
, UPPER(JUSTSTEM(loFile._Name)) )
ENDFOR
@@ -11091,6 +11300,8 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin
loFile._TimeStamp = .get_ValueByName_FromListNamesWithValues( 'Timestamp', 'I', @laPropsAndValues )
loFile._ID = .get_ValueByName_FromListNamesWithValues( 'ID', 'I', @laPropsAndValues )
loFile._ObjRev = .get_ValueByName_FromListNamesWithValues( 'ObjRev', 'I', @laPropsAndValues )
loFile._User = .get_ValueByName_FromListNamesWithValues( 'User', 'C', @laPropsAndValues )
loFile._DevInfo = .get_ValueByName_FromListNamesWithValues( 'DevInfo', 'C', @laPropsAndValues )
toProject.ADD( loFile, loFile._Name )
@@ -11905,7 +12116,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
lnLenPropName = LEN(laProps(X))
lnPos2 = AT( '"', SUBSTR( tcLine, lnPos + lnLenPropName + 2 ) )
lcValue = SUBSTR( tcLine, lnPos + lnLenPropName + 2, lnPos2 - 1 )
IF laProps(X) == ' NAME' AND NOT EMPTY(lcValue)
lcValue = THIS.denormalizeXMLValue(lcValue)
ENDIF
@@ -11964,9 +12175,6 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin
I = I + 1
EXIT
CASE .lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment )
LOOP && Saltear comentarios
CASE .analyzeCodeBlock_platform( toReport, @tcLine, @taCodeLines, @I, @tnCodeLines, @loReg )
CASE .analyzeCodeBlock_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'picture' )
@@ -12080,10 +12288,10 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin
WITH toFoxBin2Prg
ERROR (TEXTMERGE(loLang.C_FILE_NAME_IS_NOT_SUPPORTED_LOC))
ENDWITH
CASE lnFileCount = 1 AND loDBF_CFG.DBF_Conversion_Support > 0 && Implica 2 u 8
llImportData = (loDBF_CFG.DBF_Conversion_Support = 8)
CASE toFoxBin2Prg.DBF_Conversion_Support = 8 && TXT2BIN (DATA IMPORT)
llImportData = .T.
@@ -12589,7 +12797,8 @@ 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 ASCAN( toDatabase._ExternalClasses, lcMemberType + '.' + lcMemberName, 1, 0, 1, 1+2+4 ) = 0
IF toFoxBin2Prg.l_ClassPerFileCheck 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 + ']' )
LOOP && Salteo este miembro porque no concuerda con los anotados
@@ -12942,7 +13151,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin
loLang = _SCREEN.o_FoxBin2Prg_Lang
*-- Verificación de los Miembros, si son Externos y se indicó chequearlos
IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_ClassPerFileCheck
IF toFoxBin2Prg.n_UseClassPerFile > 0 AND toFoxBin2Prg.l_ClassPerFileCheck AND EMPTY(toFoxBin2Prg.c_ClassOperationType)
FOR I = 1 TO toDatabase._ExternalClasses_Count
lnItem = 0
@@ -15871,8 +16080,11 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
Timestamp="<<INT( loReg.TIMESTAMP )>>"
ID="<<INT( loReg.ID )>>"
ObjRev="<<INT( loReg.OBJREV )>>"
User="<<STRCONV(loReg.USER,13)>>"
DevInfo="<<STRCONV(loReg.DEVINFO,13)>>"
<<C_FILE_META_F>>
ENDTEXT
loReg = NULL
ENDFOR
@@ -15961,6 +16173,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
<<>> *<.CmntStyle = <<loProject._CmntStyle>> />
<<>> *<.NoLogo = <<loProject._NoLogo>> />
<<>> *<.SaveCode = <<loProject._SaveCode>> />
<<>> *<.User = '<<STRCONV(loProject._User,13)>>' />
<<>> .ProjectHookLibrary = '<<loProject._ProjectHookLibrary>>'
<<>> .ProjectHookClass = '<<loProject._ProjectHookClass>>'
<<>> <<C_PROJPROPS_F>>
@@ -15968,7 +16181,6 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
<<>>
ENDTEXT
*-- Build y cierre
TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2
<<>>
@@ -16091,6 +16303,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
loProject._ServerInfo = loReg.RESERVED2
loProject._Debug = loReg.DEBUG
loProject._Encrypted = loReg.ENCRYPT
loProject._User = loReg.USER
loProject.parseDeviceInfo( loReg.DEVINFO )
*-- Información de los Servidores definidos
@@ -16128,7 +16341,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
*-- Escaneo el proyecto
SCAN ALL FOR NOT INLIST(TYPE, 'H','W','i' )
loReg = NULL
SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV MEMO NAME loReg
SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV,USER,DEVINFO MEMO NAME loReg
IF toFoxBin2Prg.l_NoTimestamps
loReg.TIMESTAMP = 0
@@ -16501,6 +16714,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg
<<>> *<.CmntStyle = <<loProject._CmntStyle>> />
<<>> *<.NoLogo = <<loProject._NoLogo>> />
<<>> *<.SaveCode = <<loProject._SaveCode>> />
<<>> *<.User = <<loProject._User>> />
<<>> .ProjectHookLibrary = '<<loProject._ProjectHookLibrary>>'
<<>> .ProjectHookClass = '<<loProject._ProjectHookClass>>'
<<>> <<C_PROJPROPS_F>>
@@ -18103,6 +18317,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE
+ [<memberdata name="_revision" display="_Revision"/>] ;
+ [<memberdata name="_languageid" display="_LanguageID"/>] ;
+ [<memberdata name="_autoincrement" display="_AutoIncrement"/>] ;
+ [<memberdata name="_user" display="_User"/>] ;
+ [<memberdata name="decode_specialcodes_cr_lf" display="decode_SpecialCodes_CR_LF"/>] ;
+ [<memberdata name="encode_specialcodes_cr_lf" display="encode_SpecialCodes_CR_LF"/>] ;
+ [<memberdata name="getformatteddeviceinfotext" display="getFormattedDeviceInfoText"/>] ;
@@ -18136,6 +18351,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE
_TimeStamp = 0
_Version = ''
_SccData = ''
_User = ''
*-- Dev.info
_Author = ''
@@ -24665,6 +24881,8 @@ DEFINE CLASS CL_PROJ_FILE AS CL_CUS_BASE
+ [<memberdata name="_objrev" display="_ObjRev"/>] ;
+ [<memberdata name="_timestamp" display="_Timestamp"/>] ;
+ [<memberdata name="_type" display="_Type"/>] ;
+ [<memberdata name="_user" display="_User"/>] ;
+ [<memberdata name="_devinfo" display="_DevInfo"/>] ;
+ [</VFPData>]
_Name = ''
@@ -24675,6 +24893,8 @@ DEFINE CLASS CL_PROJ_FILE AS CL_CUS_BASE
_ID = 0
_ObjRev = 0
_TimeStamp = 0
_User = ''
_DevInfo = ''
ENDDEFINE
@@ -27376,6 +27596,7 @@ DEFINE CLASS CL_CFG AS CUSTOM
+ [<memberdata name="n_excludedbfautoincnextval" display="n_ExcludeDBFAutoincNextval"/>] ;
+ [<memberdata name="l_recompile" display="l_Recompile"/>] ;
+ [<memberdata name="l_redirectclassperfiletomain" display="l_RedirectClassPerFileToMain"/>] ;
+ [<memberdata name="n_redirectclasstype" display="n_RedirectClassType"/>] ;
+ [<memberdata name="l_showerrors" display="l_ShowErrors"/>] ;
+ [<memberdata name="n_showprogressbar" display="n_ShowProgressbar"/>] ;
+ [<memberdata name="n_useclassperfile" display="n_UseClassPerFile"/>] ;
@@ -27412,6 +27633,7 @@ DEFINE CLASS CL_CFG AS CUSTOM
n_OptimizeByFilestamp = NULL
n_ExcludeDBFAutoincNextval = NULL
l_RedirectClassPerFileToMain = NULL
n_RedirectClassType = NULL
l_RemoveNullCharsFromCode = NULL
l_RemoveZOrderSetFromProps = NULL
n_UseClassPerFile = NULL
@@ -27456,6 +27678,7 @@ DEFINE CLASS CL_CFG AS CUSTOM
.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
@@ -27795,7 +28018,7 @@ DEFINE CLASS CL_LANG AS Custom
.C_OPTION_LOC = "Opción"
.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "La clase externa no coincide con las clases internas"
.C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "El miembro externo no coincide con los miembros internos"
.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimizaci<EFBFBD>n: el archivo de salida [<<lcOutputFile>>] no se sobreescribe por ser igual al generado."
.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimización: el archivo de salida [<<lcOutputFile>>] no se sobreescribe por ser igual al ya existente."
.C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimización: el archivo de salida [<<THIS.c_OutputFile>>] no se regenera por tener el mismo timestamp que el de entrada."
.C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimización: el archivo de salida [<<THIS.c_OutputFile>>] no se regenera por tener un timestamp más nuevo que el de entrada."
.C_PRESS_ESC_TO_CANCEL = "Pulse Esc para Cancelar"
@@ -28007,7 +28230,7 @@ DEFINE CLASS CL_LANG AS Custom
.C_OPTION_LOC = "Option"
.C_OUTER_CLASS_DOES_NOT_MATCH_INNER_CLASSES_LOC = "The outer class does not match the inner classes"
.C_OUTER_MEMBER_DOES_NOT_MATCH_INNER_MEMBERS_LOC = "The outer member does not match the inner members"
.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimization: output file [<<lcOutputFile>>] was not overwritten because it is the same as was generated."
.C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC = "Optimization: output file [<<lcOutputFile>>] was not overwritten because it is the same as the existing one."
.C_OUTPUTFILE_TIMESTAMP_EQUAL_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimization: output file [<<THIS.c_OutputFile>>] was not regenerated because it's filestamp is equal than the inputfile."
.C_OUTPUTFILE_TIMESTAMP_NEWER_THAN_INPUTFILE_TIMESTAMP_LOC = "Optimization: output file [<<THIS.c_OutputFile>>] was not regenerated because it's filestamp is newer than the inputfile."
.C_PRESS_ESC_TO_CANCEL = "Press Esc to Cancel"