diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index 3f00172..6f030d9 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -158,17 +158,23 @@ End Sub Private Sub evaluateFile( tcFile ) lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) - oVFP9.SetVar "gc_Ext", lcExt - - 'PROCEDURE EvaluarConfiguracion - ' LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; - ' , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile - - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '', '', '', '', '', '', '', '', '" & tcFile & "' )" ) - If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Prg2Bin(gc_Ext)") Then - nFile_Count = nFile_Count + 1 - ReDim Preserve aFiles(nFile_Count) - aFiles(nFile_Count) = tcFile + lcFileName = FileSystemObject.GetFileName( tcFile ) + laPoints = Split( lcFileName, "." ) + lnPoints = UBound(laPoint) + '-- No proceso los archivos con más de un punto (clases en archivos individuales) por performance + If lnPoints = 1 Then + oVFP9.SetVar "gc_Ext", lcExt + + 'PROCEDURE EvaluarConfiguracion + ' LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; + ' , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile + + oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '', '', '', '', '', '', '', '', '" & tcFile & "' )" ) + If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Prg2Bin(gc_Ext)") Then + nFile_Count = nFile_Count + 1 + ReDim Preserve aFiles(nFile_Count) + aFiles(nFile_Count) = tcFile + End If End If End Sub diff --git a/FoxBin2Prg__kompilieren_auf_Deutsch.vbs b/FoxBin2Prg__kompilieren_auf_Deutsch.vbs index e7a5ab1..f5c068c 100644 --- a/FoxBin2Prg__kompilieren_auf_Deutsch.vbs +++ b/FoxBin2Prg__kompilieren_auf_Deutsch.vbs @@ -12,7 +12,7 @@ Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") Set oVFP9 = CreateObject("VisualFoxPro.Application.9") foxbin2prg_exe = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.exe") nExitCode = 0 -cOrigFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg_de.h") +cOrigFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg_ge.h") cDestFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.h") cPath = FileSystemObject.GetParentFolderName( cOrigFile ) nRet = FileSystemObject.CopyFile( cOrigFile, cDestFile, True ) diff --git a/TESTS/DATOS_READONLY/fb2p_test.vc2 b/TESTS/DATOS_READONLY/fb2p_test.vc2 index 18ff8b2..63801db 100644 --- a/TESTS/DATOS_READONLY/fb2p_test.vc2 +++ b/TESTS/DATOS_READONLY/fb2p_test.vc2 @@ -138,7 +138,7 @@ DEFINE CLASS cl_form AS form OLEPUBLIC && mi OLE server DLL 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 @@ -171,8 +171,17 @@ DEFINE CLASS cl_imagen AS image OLEPUBLIC && otro ole ENDDEFINE +DEFINE CLASS cl_olebound AS oleboundcontrol + *< CLASSDATA: Baseclass="oleboundcontrol" Timestamp="" Scale="Pixels" Uniqueid="" /> + + Height = 100 + Name = "cl_olebound" + Width = 100 + +ENDDEFINE + 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//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDfG05c8M4BAwAAAAACAAAAAAAAAwBPAGwAZQBPAGIAagBlAGMAdABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAgEDAAAAAgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAAAAAAADAEEAYwBjAGUAcwBzAE8AYgBqAFMAaQB0AGUARABhAHQAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABPAAAAAAAAAAMAQwBoAGEAbgBnAGUAZABQAHIAbwBwAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEoAAAAAAAAABAAAAAIAAAD+////BQAAAAYAAAD+////BwAAAP7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9giHw7j9cbELm1BAIcAJQCIUM0EggAAACKDQAA7QYAACFDNBIBAAYAoAAAAAAA//8AAP//AQAAAAAAAAAAAAAATwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABcAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcWhqIFp0dVFoYTtqZGZuW2lhZXRyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAACADAAAAFJpZ2h0TWFyZ2luABEAAABODQAAAAcAAAAAAAAAAAAAAAUAAABUZXh0ABQAAABIAAAAAAsAAABPAAAAAAUAAIAAAAAAAAABAAAAAQABAAIACAAAAHtccnRmMVxhbnNpXGRlZmYwe1xmb250dGJse1xmMFxmbmlsXGxlY29udHJvbDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmY2hhcnNldDAgQXJpYWw7fX0NClx2aWV3a2luZDRcdWMxXHBhcmRcbGFuZzMwODJcZnMxOCBPbGVjb250cm9sMQ0KXHBhciB9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" /> + *< 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" diff --git a/TESTS/DATOS_READONLY/fb2p_test.vct b/TESTS/DATOS_READONLY/fb2p_test.vct index b6955e7..30bcaa6 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_test.vct and b/TESTS/DATOS_READONLY/fb2p_test.vct differ diff --git a/TESTS/DATOS_READONLY/fb2p_test.vcx b/TESTS/DATOS_READONLY/fb2p_test.vcx index bac14b3..aa7fd97 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_test.vcx and b/TESTS/DATOS_READONLY/fb2p_test.vcx differ diff --git a/filename_caps.exe b/filename_caps.exe index 1254496..056049b 100644 Binary files a/filename_caps.exe and b/filename_caps.exe differ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9c707d2..9125056 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -106,6 +106,9 @@ * 29/08/2014 FDBOZZO v1.19.33 Arreglo bug mnx v1.19.32: Si una opción tiene asociado un Procedure de 1 línea, no se mantiene como Procedure y se convierte a Command (Peter Hipp) * 19/09/2014 FDBOZZO v1.19.34 Arreglo bug: Si se ejecuta FoxBin2Prg desde ventana de comandos FoxPro para un proyecto y hay algún archivo abierto o cacheado, se produce un error al intentar capitalizar el archivo de entrada (Jim Nelson) * 26/09/2014 FDBOZZO v1.19.35 Mejora: Generar siempre el mismo Timestamp y UniqueID para los binarios minimizaría los cambios al regenerarlos (Marcio Gomez G.) +* 08/10/2014 FDBOZZO v1.19.36 Arreglo bug: Al generar el mn2 el identificador queda vacío (bug introducido en v1.19.35) +* 21/10/2014 FDBOZZO v1.19.37 Mejora: Permitir generar una clase por archivo (Ryan Harris/Lutz Scheffler) +* 30/10/2014 FDBOZZO v1.19.37 Mejora: Optimizaciones y condicionamiento de EXTERNAL * * *--------------------------------------------------------------------------------------------------- @@ -152,6 +155,8 @@ * 28/08/2014 Peter Hipp REPORTE BUG mnx v1.19.32: Si una opción tiene asociado un Procedure de 1 línea, no se mantiene como Procedure y se convierte a Command (solucionado en v1.19.33) * 19/09/2014 Jim Nelson REPORTE BUG v1.19.33: Si se ejecuta FoxBin2Prg desde ventana de comandos FoxPro para un proyecto y hay algún archivo abierto o cacheado, se produce un error (solucionado en v1.19.34) * 26/09/2014 Marcio Gomez G. MEJORA v1.19.34: Generar siempre el mismo Timestamp y UniqueID para los binarios minimizaría los cambios al regenerarlos (Agregado en v1.19.35) +* 14/10/2014 Lutz Scheffler MEJORA v1.19.36: Permitir generar una clase por archivo (pregunta) +* 21/10/2014 Ryan Harris MEJORA v1.19.36: Permitir generar una clase por archivo (sugerencia) * * *--------------------------------------------------------------------------------------------------- @@ -193,6 +198,9 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_CLASSDATA_I '*< CLASSDATA:' #DEFINE C_CLASSDATA_F '/>' #DEFINE C_LEN_CLASSDATA_I LEN(C_CLASSDATA_I) +#DEFINE C_EXTERNAL_CLASS_I '*< EXTERNAL_CLASS:' +#DEFINE C_EXTERNAL_CLASS_F '/>' +#DEFINE C_LEN_EXTERNAL_CLASS_I LEN(C_EXTERNAL_CLASS_I) #DEFINE C_OBJECTDATA_I '*< OBJECTDATA:' #DEFINE C_OBJECTDATA_F '/>' #DEFINE C_LEN_OBJECTDATA_I LEN(C_OBJECTDATA_I) @@ -385,11 +393,13 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_DUPLICATED_FILE_LOC "Archivo duplicado" #DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "No se ha encontrado el marcador de fin [ENDDEFINE] de la línea <> para el identificador [<>]" #DEFINE C_END_MARKER_NOT_FOUND_LOC "No se ha encontrado el marcador de fin [<>] que cierra al marcador de inicio [<>] de la línea <>" + #DEFINE C_EXTENSION_RECONFIGURATION_LOC "Reconfiguración de extensión:" + #DEFINE C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES "El conteo de clases externas (<>) no coincide con la cantidad encontrada (<>) para el archivo [<>]" + #DEFINE C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND "No se ha encontrado la clase externa [<>] del archivo [<>]" #DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "No se encontró el campo [<>] en la estructura del archivo <>" #DEFINE C_FILE_DOESNT_EXIST_LOC "El archivo no existe:" #DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC "El archivo [<<.c_InputFile>>] no está soportado" #DEFINE C_FILE_NOT_FOUND_LOC "No se encontró el archivo" - #DEFINE C_EXTENSION_RECONFIGURATION_LOC "Reconfiguración de extensión:" #DEFINE C_FOXBIN2PRG_ERROR_CAPTION_LOC "FOXBIN2PRG: ERROR!!" #DEFINE C_FOXBIN2PRG_INFO_SINTAX_LOC "FOXBIN2PRG: INFORMACIÓN DE SINTAXIS" #DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cNoMostrarErrores ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; @@ -507,30 +517,34 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + [] ; - + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; - + [] ; + [] ; + [] ; - + [] ; - + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -556,71 +570,75 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROTECTED l_ConfigEvaluated, n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess *-- - n_FB2PRG_Version = 1.19 + n_FB2PRG_Version = 1.19 *-- Localized properties - c_loc_processing_file = C_PROCESSING_LOC + c_loc_processing_file = C_PROCESSING_LOC *-- - c_Language = 'ES' - c_FB2PRG_EXE_Version = 0 - c_Foxbin2prg_FullPath = '' - c_Foxbin2prg_ConfigFile = '' - c_CurDir = '' - c_InputFile = '' - c_OriginalFileName = '' - c_LogFile = '' - c_TextLog = '' - c_OutputFile = '' - c_Type = '' - t_InputFile_TimeStamp = {//::} - t_OutputFile_TimeStamp = {//::} - lFileMode = .F. - n_ExisteCapitalizacion = -1 - l_CFG_CachedAccess = .F. - l_ConfigEvaluated = .F. - l_Debug = .F. - l_Error = .F. - c_ErrorLog = '' - l_Test = .F. - l_ShowErrors = .T. - l_ShowProgress = .T. - l_AllowMultiConfig = .T. - l_DropNullCharsFromCode = .T. - l_Recompile = .T. - l_NoTimestamps = .T. - l_ClearUniqueID = .T. - l_OptimizeByFilestamp = .F. - l_MethodSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias - l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias - l_ReportSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias - l_Main_CFG_Loaded = .F. - n_ExtraBackupLevels = 1 - n_ClassTimeStamp = 1130668032 && 2013/11/04 20:00:00 - n_CFG_Actual = 0 - n_ID = 0 - o_Conversor = NULL - o_Frm_Avance = NULL - o_FSO = NULL - o_Configuration = NULL - run_AfterCreateTable = '' - run_AfterCreate_DB2 = '' - c_VC2 = 'VC2' && VCX - c_SC2 = 'SC2' && SCX - c_PJ2 = 'PJ2' && PJX - c_FR2 = 'FR2' && FRX - c_LB2 = 'LB2' && LBX - c_DB2 = 'DB2' && DBF - c_DC2 = 'DC2' && DBC - c_MN2 = 'MN2' && MNX - PJX_Conversion_Support = 2 - VCX_Conversion_Support = 2 - SCX_Conversion_Support = 2 - FRX_Conversion_Support = 2 - LBX_Conversion_Support = 2 - MNX_Conversion_Support = 2 - DBF_Conversion_Support = 1 - DBC_Conversion_Support = 2 - DBF_Conversion_Included = '' - DBF_Conversion_Excluded = '' + c_Language = 'ES' + c_FB2PRG_EXE_Version = 0 + c_Foxbin2prg_FullPath = '' + c_Foxbin2prg_ConfigFile = '' + c_CurDir = '' + c_InputFile = '' + c_OriginalFileName = '' + c_LogFile = '' + c_TextLog = '' + c_OutputFile = '' + c_Type = '' + t_InputFile_TimeStamp = {//::} + t_OutputFile_TimeStamp = {//::} + lFileMode = .F. + n_ExisteCapitalizacion = -1 + l_CFG_CachedAccess = .F. + l_ConfigEvaluated = .F. + l_Debug = .F. + l_Error = .F. + c_ErrorLog = '' + l_Test = .F. + l_ShowErrors = .T. + l_ShowProgress = .T. + l_AllowMultiConfig = .T. + l_DropNullCharsFromCode = .T. + l_Recompile = .T. + l_UseClassPerFile = .F. + l_ClassPerFileCheck = .F. + l_RedirectClassPerFileToMain = .F. + l_NoTimestamps = .T. + l_ClearUniqueID = .T. + l_OptimizeByFilestamp = .F. + l_MethodSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias + l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias + l_ReportSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias + l_Main_CFG_Loaded = .F. + n_ExtraBackupLevels = 1 + n_ClassTimeStamp = 1130668032 && 2013/11/04 20:00:00 + n_CFG_Actual = 0 + n_ID = 0 + o_Conversor = NULL + o_Frm_Avance = NULL + o_FSO = NULL + o_FNC = NULL && Filename_caps object + o_Configuration = NULL + run_AfterCreateTable = '' + run_AfterCreate_DB2 = '' + c_VC2 = 'VC2' && VCX + c_SC2 = 'SC2' && SCX + c_PJ2 = 'PJ2' && PJX + c_FR2 = 'FR2' && FRX + c_LB2 = 'LB2' && LBX + c_DB2 = 'DB2' && DBF + c_DC2 = 'DC2' && DBC + c_MN2 = 'MN2' && MNX + PJX_Conversion_Support = 2 + VCX_Conversion_Support = 2 + SCX_Conversion_Support = 2 + FRX_Conversion_Support = 2 + LBX_Conversion_Support = 2 + MNX_Conversion_Support = 2 + DBF_Conversion_Support = 1 + DBC_Conversion_Support = 2 + DBF_Conversion_Included = '' + DBF_Conversion_Excluded = '' PROCEDURE INIT @@ -650,6 +668,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lc_Foxbin2prg_EXE = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'EXE' ) THIS.c_FB2PRG_EXE_Version = IIF( AGETFILEVERSION( laValues, lc_Foxbin2prg_EXE ) = 0, TRANSFORM(THIS.n_FB2PRG_Version), laValues(4) ) ADDPROPERTY(_SCREEN, 'ExitCode', 0) + RELEASE lcSys16, lnPosProg, lc_Foxbin2prg_EXE, laValues RETURN ENDPROC @@ -667,6 +686,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY THIS.o_FSO = NULL + THIS.o_FNC = NULL + SET PROCEDURE TO ENDTRY RETURN @@ -728,6 +749,33 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE l_UseClassPerFile_ACCESS + IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) + RETURN THIS.l_UseClassPerFile + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_UseClassPerFile, THIS.l_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 + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_RedirectClassPerFileToMain, THIS.l_RedirectClassPerFileToMain ) + 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 + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_ClassPerFileCheck, THIS.l_ClassPerFileCheck ) + 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 @@ -1006,6 +1054,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY CLEAR DLLS fb2p_SetFileAttributes, fb2p_GetFileAttributes + RELEASE tcFileName, tcAttrib, dwFileAttributes ENDTRY RETURN @@ -1035,6 +1084,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM COMPILE DATABASE (tcFileName) ENDCASE + + RELEASE tcFileName, lcType + RETURN ENDPROC @@ -1045,23 +1097,26 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * tlRelanzarError (v? IN ) Indica si se debe relanzar el error * tcBakFile_1 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,frx,lbx,dbf,dbc,mnx,vc2,sc2,pj2,etc) * tcBakFile_2 (@? OUT) Nombre del archivo backup 2 (vct,sct,pjt,frt,lbt,fpt,dct,mnt,etc) - * tcBakFile_3 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,cdx,dcx,etc) + * tcBakFile_3 (@? OUT) Nombre del archivo backup 3 (cdx,dcx,etc) + * tcOutputFile (v? IN ) Nombre del archivo de salida. Si no se indica se asume .c_OutputFile *--------------------------------------------------------------------------------------------------- - LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3 + LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3, tcOutputFile #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY - LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3 - STORE '' TO tcBakFile_1, tcBakFile_2, tcBakFile_3 + LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3, tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3 + STORE '' TO tcBakFile_1, tcBakFile_2, tcBakFile_3, lcExt_1, lcExt_2, lcExt_3 ; + , tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3 WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' IF .n_ExtraBackupLevels > 0 THEN - lcNext_Bak = .getNext_BAK( .c_OutputFile ) - lcExt_1 = JUSTEXT( .c_OutputFile ) - tcBakFile_1 = FORCEEXT(.c_OutputFile, lcExt_1 + lcNext_Bak) + tcOutputFile = EVL( tcOutputFile, .c_OutputFile ) + lcNext_Bak = .getNext_BAK( tcOutputFile ) + lcExt_1 = JUSTEXT( tcOutputFile ) + tcBakFile_1 = FORCEEXT(tcOutputFile, lcExt_1 + lcNext_Bak) DO CASE CASE INLIST( lcExt_1, .c_PJ2, .c_VC2, .c_SC2, .c_FR2, .c_LB2, .c_DB2, .c_DC2, .c_MN2, 'PJM' ) @@ -1071,44 +1126,56 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- DBF lcExt_2 = 'FPT' lcExt_3 = 'CDX' - tcBakFile_2 = FORCEEXT(.c_OutputFile, lcExt_2 + lcNext_Bak) - tcBakFile_3 = FORCEEXT(.c_OutputFile, lcExt_3 + lcNext_Bak) + tcBakFile_2 = FORCEEXT(tcOutputFile, lcExt_2 + lcNext_Bak) + tcBakFile_3 = FORCEEXT(tcOutputFile, lcExt_3 + lcNext_Bak) CASE lcExt_1 = 'DBC' *-- DBC lcExt_2 = 'DCT' lcExt_3 = 'DCX' - tcBakFile_2 = FORCEEXT(.c_OutputFile, lcExt_2 + lcNext_Bak) - tcBakFile_3 = FORCEEXT(.c_OutputFile, lcExt_3 + lcNext_Bak) + tcBakFile_2 = FORCEEXT(tcOutputFile, lcExt_2 + lcNext_Bak) + tcBakFile_3 = FORCEEXT(tcOutputFile, lcExt_3 + lcNext_Bak) OTHERWISE *-- PJX, VCX, SCX, FRX, LBX, MNX lcExt_2 = LEFT(lcExt_1,2) + 'T' - tcBakFile_2 = FORCEEXT(.c_OutputFile, lcExt_2 + lcNext_Bak) + tcBakFile_2 = FORCEEXT(tcOutputFile, lcExt_2 + lcNext_Bak) ENDCASE - IF NOT EMPTY(lcExt_1) AND FILE( FORCEEXT(.c_OutputFile, lcExt_1) ) + IF NOT EMPTY(lcExt_1) + tcOutputFile_Ext1 = FORCEEXT(tcOutputFile, lcExt_1) + + IF FILE( tcOutputFile_Ext1 ) *-- LOG DO CASE CASE EMPTY(lcExt_2) - .writeLog( C_BACKUP_OF_LOC + FORCEEXT(.c_OutputFile,lcExt_1) ) + .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 ) CASE EMPTY(lcExt_3) - .writeLog( C_BACKUP_OF_LOC + FORCEEXT(.c_OutputFile,lcExt_1) + '/' + lcExt_2 ) + .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 ) OTHERWISE - .writeLog( C_BACKUP_OF_LOC + FORCEEXT(.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) + .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 + '/' + lcExt_3 ) ENDCASE *-- COPIA BACKUP - COPY FILE ( FORCEEXT(.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) + COPY FILE ( tcOutputFile_Ext1 ) TO ( tcBakFile_1 ) - IF NOT EMPTY(lcExt_2) AND FILE( FORCEEXT(.c_OutputFile, lcExt_2) ) - COPY FILE ( FORCEEXT(.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) - ENDIF + IF NOT EMPTY(lcExt_2) + tcOutputFile_Ext2 = FORCEEXT(tcOutputFile, lcExt_2) - IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(.c_OutputFile, lcExt_3) ) - COPY FILE ( FORCEEXT(.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) + IF FILE( tcOutputFile_Ext2 ) + COPY FILE ( tcOutputFile_Ext2 ) TO ( tcBakFile_2 ) ENDIF + ENDIF + + IF NOT EMPTY(lcExt_3) + tcOutputFile_Ext3 = FORCEEXT(tcOutputFile, lcExt_3) + + IF FILE( tcOutputFile_Ext3 ) + COPY FILE ( tcOutputFile_Ext3 ) TO ( tcBakFile_3 ) + ENDIF + ENDIF + ENDIF ENDIF ENDIF ENDWITH && THIS @@ -1122,6 +1189,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THROW ENDIF + FINALLY + RELEASE toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3 ; + , lcNext_Bak, lcExt_1, lcExt_2, lcExt_3, tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3 ; + , tcOutputFile ENDTRY RETURN @@ -1203,7 +1274,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) IF NOT INLIST( TRANSFORM(tcDontShowProgress), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcDontShowProgress = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) ) ENDIF CASE LEFT( laConfig(I), 15 ) == LOWER('DontShowErrors:') @@ -1212,126 +1283,147 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lcValue = ALLTRIM( SUBSTR( laConfig(I), 16 ) ) IF NOT INLIST( TRANSFORM(tcDontShowErrors), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcDontShowErrors = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) ) ENDIF CASE LEFT( laConfig(I), 13 ) == LOWER('NoTimestamps:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 14 ) ) IF NOT INLIST( TRANSFORM(tcNoTimestamps), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcNoTimestamps = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) ENDIF CASE LEFT( laConfig(I), 6 ) == LOWER('Debug:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 7 ) ) IF NOT INLIST( TRANSFORM(tcDebug), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcDebug = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) ) ENDIF CASE LEFT( laConfig(I), 18 ) == LOWER('ExtraBackupLevels:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 19 ) ) IF NOT ISDIGIT( TRANSFORM(tcExtraBackupLevels) ) AND ISDIGIT( lcValue ) THEN tcExtraBackupLevels = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) ) ENDIF CASE LEFT( laConfig(I), 14 ) == LOWER('ClearUniqueID:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 15 ) ) IF NOT INLIST( TRANSFORM(tcClearUniqueID), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcClearUniqueID = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 20 ) == LOWER('OptimizeByFilestamp:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 21 ) ) IF NOT INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN tcOptimizeByFilestamp = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 17 ) == LOWER('AllowMultiConfig:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) IF INLIST( lcValue, '0', '1' ) THEN .l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) + ENDIF + + CASE LEFT( laConfig(I), 16 ) == LOWER('UseClassPerFile:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) ) + IF INLIST( lcValue, '0', '1' ) THEN + .l_UseClassPerFile = ( TRANSFORM(lcValue) == '1' ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > UseClassPerFile: ' + TRANSFORM(lcValue) ) + ENDIF + + CASE LEFT( laConfig(I), 18 ) == LOWER('ClassPerFileCheck:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 19 ) ) + IF INLIST( lcValue, '0', '1' ) THEN + .l_ClassPerFileCheck = ( TRANSFORM(lcValue) == '1' ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > ClassPerFileCheck: ' + TRANSFORM(lcValue) ) + ENDIF + + CASE LEFT( laConfig(I), 27 ) == LOWER('RedirectClassPerFileToMain:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 28 ) ) + IF INLIST( lcValue, '0', '1' ) THEN + .l_RedirectClassPerFileToMain = ( TRANSFORM(lcValue) == '1' ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > RedirectClassPerFileToMain: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 22 ) == LOWER('DropNullCharsFromCode:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 23 ) ) IF INLIST( lcValue, '0', '1' ) THEN .l_DropNullCharsFromCode = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('PJX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.PJX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(lo_CFG.PJX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(lo_CFG.PJX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('VCX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.VCX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(lo_CFG.VCX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(lo_CFG.VCX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('SCX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.SCX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(lo_CFG.SCX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(lo_CFG.SCX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('FRX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.FRX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(lo_CFG.FRX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(lo_CFG.FRX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('LBX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.LBX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(lo_CFG.LBX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(lo_CFG.LBX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('MNX_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.MNX_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(lo_CFG.MNX_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(lo_CFG.MNX_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('DBF_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2', '4' ) THEN lo_CFG.DBF_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(lo_CFG.DBF_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(lo_CFG.DBF_Conversion_Support) ) ENDIF CASE LEFT( laConfig(I), 24 ) == LOWER('DBF_Conversion_Included:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) ) IF NOT EMPTY(lcValue) THEN lo_CFG.DBF_Conversion_Included = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Included: ' + TRANSFORM(lo_CFG.DBF_Conversion_Included) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Included: ' + TRANSFORM(lo_CFG.DBF_Conversion_Included) ) ENDIF CASE LEFT( laConfig(I), 24 ) == LOWER('DBF_Conversion_Excluded:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) ) IF NOT EMPTY(lcValue) THEN lo_CFG.DBF_Conversion_Excluded = lcValue - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Excluded: ' + TRANSFORM(lo_CFG.DBF_Conversion_Excluded) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Excluded: ' + TRANSFORM(lo_CFG.DBF_Conversion_Excluded) ) ENDIF CASE LEFT( laConfig(I), 23 ) == LOWER('DBC_Conversion_Support:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) ) IF INLIST( lcValue, '0', '1', '2' ) THEN lo_CFG.DBC_Conversion_Support = INT( VAL( lcValue ) ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) ) ENDIF ENDCASE @@ -1369,15 +1461,18 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF .writeLog( '---' ) - .writeLog( '> l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) - .writeLog( '> l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) - .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) - .writeLog( '> l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) - .writeLog( '> l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) - .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) - .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) - .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) - .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) + .writeLog( '> l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) + .writeLog( '> l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) + .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) + .writeLog( '> l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) + .writeLog( '> l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) + .writeLog( '> l_UseClassPerFile: ' + TRANSFORM(.l_UseClassPerFile) ) + .writeLog( '> l_ClassPerFileCheck: ' + TRANSFORM(.l_ClassPerFileCheck) ) + .writeLog( '> l_RedirectClassPerFileToMain: ' + TRANSFORM(.l_RedirectClassPerFileToMain) ) + .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) + .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) + .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) + .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) lo_CFG = NULL RELEASE lo_CFG @@ -1388,7 +1483,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .n_CFG_Actual = 0 ENDIF - .writeLog( '> l_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) + ' ( InputFile=' + tc_InputFile + ', CFG=' + FORCEPATH( 'foxbin2prg.cfg', lc_CFG_Path ) + ' )' ) + .writeLog( '> l_CFG_CachedAccess: ' + TRANSFORM(.l_CFG_CachedAccess) + ' ( InputFile=' + tc_InputFile + ', CFG=' + FORCEPATH( 'foxbin2prg.cfg', lc_CFG_Path ) + ' )' ) IF NOT llExisteConfig OR .n_CFG_Actual = 0 THEN .l_CFG_CachedAccess = .T. && Es acceso cacheado porque usa config.por defecto sin archivo CFG @@ -1410,8 +1505,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THROW FINALLY - STORE NULL TO lo_Configuration, lo_CFG - RELEASE lo_Configuration, lo_CFG + STORE NULL TO lo_Configuration, lo_CFG, loEx + RELEASE tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; + , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile ; + , lcConfigFile, llExisteConfig, laConfig, I, lcConfData, lcExt, lcValue, lc_CFG_Path ; + , lo_CFG, lo_Configuration, loEx ENDTRY @@ -1437,6 +1535,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDFOR + RELEASE tcFileName, tcFilters, llFound, laFiltros RETURN llFound ENDFUNC @@ -1458,6 +1557,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , 'XXX' ) ENDWITH && THIS + RELEASE tcExt RETURN lcExt2 ENDPROC @@ -1465,6 +1565,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE TieneSoporte_Bin2Prg LPARAMETERS tcExt LOCAL llTieneSoporte + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' llTieneSoporte = ICASE( tcExt == 'PJX', .PJX_Conversion_Support >= 1 ; , tcExt == 'VCX', .VCX_Conversion_Support >= 1 ; @@ -1476,6 +1577,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , tcExt == 'DBC', .DBC_Conversion_Support >= 1 ; , .F. ) ENDWITH && THIS + + RELEASE tcExt RETURN llTieneSoporte ENDPROC @@ -1483,6 +1586,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE TieneSoporte_Prg2Bin LPARAMETERS tcExt LOCAL llTieneSoporte + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' llTieneSoporte = ICASE( tcExt == .c_PJ2, .PJX_Conversion_Support = 2 ; , tcExt == .c_VC2, .VCX_Conversion_Support = 2 ; @@ -1494,6 +1598,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , tcExt == .c_DC2, .DBC_Conversion_Support = 2 ; , .F. ) ENDWITH && THIS + + RELEASE tcExt RETURN llTieneSoporte ENDPROC @@ -1501,8 +1607,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE ejecutar *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * tc_InputFile (v! IN ) Nombre del archivo de entrada - * tcType (v? IN ) Tipo de archivo de entrada. SIN USO. Compatibilidad con SCCTEXT.PRG // Si se indica "*" y tc_InputFile es un PJX, se procesa todo el proyecto + * tc_InputFile (v! IN ) Nombre del archivo de entrada, o Tipo de archivo cuando SourceSafe consulta por tipo de Soporte habilitado + * tcType (v? IN ) Tipo de archivo de entrada. Compatibilidad con SCCTEXT.PRG // Si se indica "*" y tc_InputFile es un PJX, se procesa todo el proyecto * tcTextName (v? IN ) Nombre del archivo texto. Compatibilidad con SCCTEXT.PRG * tlGenText (v? IN ) .T.=Genera Texto, .F.=Genera Binario. Compatibilidad con SCCTEXT.PRG * tcDontShowErrors (v? IN ) '1' para no mostrar mensajes de error (MESSAGEBOX) @@ -1574,10 +1680,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnCodError = 1 OTHERWISE - *-- Ejecución normal + *-- EJECUCIÓN NORMAL *-- ARCHIVO DE CONFIGURACIÓN PRINCIPAL - IF NOT THIS.l_ConfigEvaluated THEN + IF NOT .l_ConfigEvaluated THEN .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ; , @tcClearUniqueID, @tcOptimizeByFilestamp ) ENDIF @@ -1860,7 +1966,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF CD (JUSTPATH(THIS.c_CurDir)) STORE NULL TO loFSO - RELEASE loFSO + RELEASE tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; + , toModulo, toEx, tlRelanzarError, tcOriginalFileName, tcRecompile, tcNoTimestamps ; + , tcBackupLevels, tcClearUniqueID, tcOptimizeByFilestamp ; + , I, lcPath, lcFileSpec, lcFile, laFiles, lnFileCount, lcErrorInfo, loEx, loFSO ENDTRY RETURN lnCodError @@ -1899,6 +2008,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- ARCHIVO DE CONFIGURACIÓN SECUNDARIO .EvaluarConfiguracion() + IF .l_UseClassPerFile + *-- Verifico si se debe forzar la redirección al archivo principal + IF .l_RedirectClassPerFileToMain AND '.' $ JUSTSTEM(.c_InputFile) + .c_InputFile = FORCEPATH( FORCEEXT( JUSTSTEM( JUSTSTEM(.c_InputFile) ), JUSTEXT(.c_InputFile) ) , JUSTPATH(.c_InputFile) ) + ENDIF + ENDIF + IF NOT EMPTY(tcOriginalFileName) tcOriginalFileName = loFSO.GetAbsolutePathName( tcOriginalFileName ) ENDIF @@ -2160,6 +2276,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *THIS.writeLog_Flush() ENDIF + RELEASE tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ; + , lcErrorInfo, laDirFile, lcExtension, lnFileCount, laFiles, I ; + , ltFilestamp, lcExtA, lcExtB ; + , loFSO ENDTRY RETURN lnCodError @@ -2213,16 +2333,26 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ******************************************************************************************************************* PROCEDURE normalizarCapitalizacionArchivos - LPARAMETERS tl_NormalizeInputFile + LPARAMETERS tl_NormalizeInputFile, tcFileName TRY - LOCAL lcPath, lcEXE_CAPS, lcOutputFile, loEx AS EXCEPTION ; - , loFSO AS Scripting.FileSystemObject, lcType + LOCAL lcPath, lcEXE_CAPS, lcOutputFile, llRelanzarError, lcType ; + , loEx AS EXCEPTION ; + , loFSO AS Scripting.FileSystemObject WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - lcPath = JUSTPATH(.c_Foxbin2prg_FullPath) - lcEXE_CAPS = FORCEPATH( 'filename_caps.exe', lcPath ) - loFSO = .o_FSO + lcPath = JUSTPATH(.c_Foxbin2prg_FullPath) + lcEXE_CAPS = FORCEPATH( 'filename_caps.exe', lcPath ) + loFSO = .o_FSO + llRelanzarError = NOT tl_NormalizeInputFile + + IF tl_NormalizeInputFile + tcFileName = EVL( tcFileName, .c_InputFile ) + lcType = UPPER( JUSTEXT( tcFileName ) ) + ELSE + tcFileName = EVL( tcFileName, .c_OutputFile ) + lcType = .c_Type + ENDIF DO CASE CASE .n_ExisteCapitalizacion = -1 @@ -2230,6 +2360,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF FILE(lcEXE_CAPS) *.writeLog( '* Se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) .writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC) ) + SET PROCEDURE TO (lcEXE_CAPS) ADDITIVE + .o_FNC = CREATEOBJECT( 'cl_FileName_Caps' ) + .n_ExisteCapitalizacion = 1 ELSE *-- No existe el programa de capitalización, así que no se capitalizan los nombres. @@ -2248,82 +2381,42 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE - IF tl_NormalizeInputFile - lcType = UPPER( JUSTEXT( .c_InputFile ) ) - *-- Normalizar archivo(s) de entrada. El primero siempre se normaliza (??2, ??X, DBF, DBC) - .RenameFile( .c_InputFile, lcEXE_CAPS, loFSO, .F. ) + .RenameFile( tcFileName, lcEXE_CAPS, loFSO, llRelanzarError ) DO CASE CASE lcType = 'PJX' - .RenameFile( FORCEEXT(.c_InputFile,'PJT'), lcEXE_CAPS, loFSO, .F. ) + .RenameFile( FORCEEXT(tcFileName,'PJT'), lcEXE_CAPS, loFSO, llRelanzarError ) CASE lcType = 'VCX' - .RenameFile( FORCEEXT(.c_InputFile,'VCT'), lcEXE_CAPS, loFSO, .F. ) + .RenameFile( FORCEEXT(tcFileName,'VCT'), lcEXE_CAPS, loFSO, llRelanzarError ) CASE lcType = 'SCX' - .RenameFile( FORCEEXT(.c_InputFile,'SCT'), lcEXE_CAPS, loFSO, .F. ) + .RenameFile( FORCEEXT(tcFileName,'SCT'), lcEXE_CAPS, loFSO, llRelanzarError ) CASE lcType = 'FRX' - .RenameFile( FORCEEXT(.c_InputFile,'FRT'), lcEXE_CAPS, loFSO, .F. ) + .RenameFile( FORCEEXT(tcFileName,'FRT'), lcEXE_CAPS, loFSO, llRelanzarError ) CASE lcType = 'LBX' - .RenameFile( FORCEEXT(.c_InputFile,'LBT'), lcEXE_CAPS, loFSO, .F. ) + .RenameFile( FORCEEXT(tcFileName,'LBT'), lcEXE_CAPS, loFSO, llRelanzarError ) CASE lcType = 'DBF' - IF FILE( FORCEEXT(.c_InputFile,'FPT') ) - .RenameFile( FORCEEXT(.c_InputFile,'FPT'), lcEXE_CAPS, loFSO, .F. ) + IF FILE( FORCEEXT(tcFileName,'FPT') ) + .RenameFile( FORCEEXT(tcFileName,'FPT'), lcEXE_CAPS, loFSO, llRelanzarError ) ENDIF - IF FILE( FORCEEXT(.c_InputFile,'CDX') ) - .RenameFile( FORCEEXT(.c_InputFile,'CDX'), lcEXE_CAPS, loFSO, .F. ) + IF FILE( FORCEEXT(tcFileName,'CDX') ) + .RenameFile( FORCEEXT(tcFileName,'CDX'), lcEXE_CAPS, loFSO, llRelanzarError ) ENDIF CASE lcType = 'DBC' - .RenameFile( FORCEEXT(.c_InputFile,'DCX'), lcEXE_CAPS, loFSO, .F. ) - .RenameFile( FORCEEXT(.c_InputFile,'DCT'), lcEXE_CAPS, loFSO, .F. ) + .RenameFile( FORCEEXT(tcFileName,'DCX'), lcEXE_CAPS, loFSO, llRelanzarError ) + .RenameFile( FORCEEXT(tcFileName,'DCT'), lcEXE_CAPS, loFSO, llRelanzarError ) CASE lcType = 'MNX' - .RenameFile( FORCEEXT(.c_InputFile,'MNT'), lcEXE_CAPS, loFSO, .F. ) + .RenameFile( FORCEEXT(tcFileName,'MNT'), lcEXE_CAPS, loFSO, llRelanzarError ) ENDCASE - ELSE - *-- Normalizar archivo(s) de salida. El primero siempre se normaliza (??2, ??X, DBF, DBC) - .RenameFile( .c_OutputFile, lcEXE_CAPS, loFSO, .T. ) - - DO CASE - CASE .c_Type = 'PJX' - .RenameFile( FORCEEXT(.c_OutputFile,'PJT'), lcEXE_CAPS, loFSO, .T. ) - - CASE .c_Type = 'VCX' - .RenameFile( FORCEEXT(.c_OutputFile,'VCT'), lcEXE_CAPS, loFSO, .T. ) - - CASE .c_Type = 'SCX' - .RenameFile( FORCEEXT(.c_OutputFile,'SCT'), lcEXE_CAPS, loFSO, .T. ) - - CASE .c_Type = 'FRX' - .RenameFile( FORCEEXT(.c_OutputFile,'FRT'), lcEXE_CAPS, loFSO, .T. ) - - CASE .c_Type = 'LBX' - .RenameFile( FORCEEXT(.c_OutputFile,'LBT'), lcEXE_CAPS, loFSO, .T. ) - - CASE .c_Type = 'DBF' - IF FILE( FORCEEXT(.c_OutputFile,'FPT') ) - .RenameFile( FORCEEXT(.c_OutputFile,'FPT'), lcEXE_CAPS, loFSO, .T. ) - ENDIF - IF FILE( FORCEEXT(.c_OutputFile,'CDX') ) - .RenameFile( FORCEEXT(.c_OutputFile,'CDX'), lcEXE_CAPS, loFSO, .T. ) - ENDIF - - CASE .c_Type = 'DBC' - .RenameFile( FORCEEXT(.c_OutputFile,'DCX'), lcEXE_CAPS, loFSO, .T. ) - .RenameFile( FORCEEXT(.c_OutputFile,'DCT'), lcEXE_CAPS, loFSO, .T. ) - - CASE .c_Type = 'MNX' - .RenameFile( FORCEEXT(.c_OutputFile,'MNT'), lcEXE_CAPS, loFSO, .T. ) - - ENDCASE - ENDIF ENDWITH && THIS CATCH TO loEx @@ -2331,6 +2424,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY loFSO = NULL + RELEASE lcPath, lcEXE_CAPS, lcOutputFile, llRelanzarError, lcType, loFSO ENDTRY @@ -2347,7 +2441,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.writeLog( TEXTMERGE(C_REQUESTING_CAPITALIZATION_OF_FILE_LOC) ) THIS.ChangeFileAttribute( tcFileName, '+N' ) lcLog = '' - DO (tcEXE_CAPS) WITH tcFileName, '', 'F', lcLog, tlRelanzarError, '1' + THIS.o_FNC.Capitalize( tcFileName, '', 'F', lcLog, tlRelanzarError, '1' ) THIS.writeLog( lcLog ) ENDPROC @@ -2583,6 +2677,8 @@ DEFINE CLASS c_conversor_base AS SESSION THIS.c_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) THIS.SortSpecialProps() + RELEASE lcSys16, lnPosProg + RETURN ENDPROC @@ -2618,7 +2714,9 @@ DEFINE CLASS c_conversor_base AS SESSION * tnLEN_TAG_F (v! IN ) Longitud del tag de fin *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcPropName, tcValue, taProps, tnProp_Count, I, tcTAG_I, tcTAG_F, tnLEN_TAG_I, tnLEN_TAG_F + EXTERNAL ARRAY taProps + LOCAL llBloqueEncontrado, loEx AS EXCEPTION TRY @@ -2678,6 +2776,8 @@ DEFINE CLASS c_conversor_base AS SESSION THROW + FINALLY + RELEASE tcPropName, tcValue, taProps, tnProp_Count, I, tcTAG_I, tcTAG_F, tnLEN_TAG_I, tnLEN_TAG_F, loEx ENDTRY RETURN llBloqueEncontrado @@ -2734,6 +2834,8 @@ DEFINE CLASS c_conversor_base AS SESSION THROW + FINALLY + RELEASE tcNombreObjeto, toClase, I, X, N, lcRutaDelNombre, loObjeto ENDTRY RETURN lnObjeto @@ -2751,6 +2853,9 @@ DEFINE CLASS c_conversor_base AS SESSION CATCH TO loEx llError = .T. tnCodError = loEx.ERRORNO + + FINALLY + RELEASE tcAsignacion, tnCodError, tcExpNormalizada, loEx ENDTRY RETURN NOT llError @@ -2770,6 +2875,8 @@ DEFINE CLASS c_conversor_base AS SESSION #ENDIF THIS.writeLog( '' ) THIS.writeLog( C_CONVERTING_FILE_LOC + ' ' + THIS.c_OutputFile + '...' ) + RELEASE toModulo, toEx, toFoxBin2Prg + RETURN ENDPROC @@ -2777,23 +2884,29 @@ DEFINE CLASS c_conversor_base AS SESSION LPARAMETERS taCodeLines, I LOCAL lcPrevLine, llIsContinuation + *-- Analizo la línea anterior para saber si termina con ";" o "," y la actual es continuación IF I > 1 lcPrevLine = taCodeLines(I-1) ELSE lcPrevLine = '' ENDIF - .get_SeparatedLineAndComment( @lcPrevLine ) + + THIS.get_SeparatedLineAndComment( @lcPrevLine ) + IF INLIST( RIGHT( lcPrevLine,1 ), ';', ',' ) && Esta línea es continuación de la anterior llIsContinuation = .T. ENDIF + + RELEASE taCodeLines, I, lcPrevLine + RETURN llIsContinuation ENDPROC PROCEDURE elTextoEvaluadoEsElTokenIndicado LPARAMETERS tcLine, ta_ID_Bloques, tnLen_IDFinBQ, X, tnIniFin - LOCAL llEncontrado, lcWord + LOCAL llEncontrado, lcWord, lcLine TRY *-- Pre-normalización @@ -2837,6 +2950,9 @@ DEFINE CLASS c_conversor_base AS SESSION llEncontrado = .T. ENDIF ENDIF + + FINALLY + RELEASE tcLine, ta_ID_Bloques, tnLen_IDFinBQ, X, tnIniFin, lcLine ENDTRY RETURN llEncontrado @@ -2853,6 +2969,7 @@ DEFINE CLASS c_conversor_base AS SESSION FOR I = 0 TO 31 tcText = STRTRAN( tcText, '{' + TRANSFORM(I) + '}', CHR(I) ) ENDFOR + RELEASE I RETURN tcText ENDPROC @@ -2865,7 +2982,7 @@ DEFINE CLASS c_conversor_base AS SESSION lcComentario = '' THIS.desnormalizarValorPropiedad( @lcPropName, @lcValor, @lcComentario ) tcAsignacion = lcPropName + ' = ' + lcValor - + RELEASE lcPropName, lcValor, lnCodError, lcExpNormalizada, lnPos, lcComentario RETURN tcAsignacion ENDPROC @@ -2914,6 +3031,7 @@ DEFINE CLASS c_conversor_base AS SESSION ENDCASE + RELEASE tcProp, tcComentario, lnCodError, lnPos, lcValue RETURN tcValue ENDPROC @@ -2951,6 +3069,7 @@ DEFINE CLASS c_conversor_base AS SESSION tcValor = STUFF(tcValor, lnPos, lnPos2 - lnPos + 1, CHR(lnAscii)) && ASCII ENDDO + RELEASE lnPos, lnPos2, lnAscii RETURN tcValor ENDPROC @@ -2962,6 +3081,7 @@ DEFINE CLASS c_conversor_base AS SESSION FOR I = 0 TO 31 tcText = STRTRAN( tcText, CHR(I), '{' + TRANSFORM(I) + '}' ) ENDFOR + RELEASE I RETURN tcText ENDPROC @@ -2973,6 +3093,7 @@ DEFINE CLASS c_conversor_base AS SESSION lcError = 'Error ' + TRANSFORM(toEx.ERRORNO) + ', ' + toEx.MESSAGE + CHR(13) + CHR(13) ; + toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) + CHR(13) + CHR(13) ; + toEx.LINECONTENTS + RELEASE toEx RETURN lcError ENDPROC @@ -3087,9 +3208,10 @@ DEFINE CLASS c_conversor_base AS SESSION * tcRightTag (v! IN ) TAG de fin de los metadatos *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcLineWithMetadata, taPropsAndValues, tnPropsAndValues_Count, tcLeftTag, tcRightTag + EXTERNAL ARRAY taPropsAndValues - LOCAL lcMetadatos, I, lnEqualSigns, lcNextVar, lcStr, lcVirtualMeta, lnPos1, lnPos2, lnLastPos, lnCantComillas + LOCAL lcMetadatos, I, lcVirtualMeta, lnPos1, lnPos2, lnLastPos, lnCantComillas STORE '' TO lcVirtualMeta STORE 0 TO lnPos1, lnPos2, lnLastPos, tnPropsAndValues_Count, I @@ -3126,6 +3248,8 @@ DEFINE CLASS c_conversor_base AS SESSION lnLastPos = lnPos2 + 1 ENDFOR + RELEASE tcLineWithMetadata, taPropsAndValues, tnPropsAndValues_Count, tcLeftTag, tcRightTag ; + , lcMetadatos, I, lcVirtualMeta, lnPos1, lnPos2, lnLastPos, lnCantComillas RETURN ENDPROC @@ -3138,14 +3262,16 @@ DEFINE CLASS c_conversor_base AS SESSION *--------------------------------------------------------------------------------------------------- LPARAMETERS tcLine, tcComment LOCAL ln_AT_Cmt - tcComment = '' ln_AT_Cmt = AT( '&'+'&', tcLine) IF ln_AT_Cmt > 0 tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) ) tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9) ) && Quito TABS + ELSE + tcComment = '' ENDIF + RELEASE tcLine, tcComment RETURN (ln_AT_Cmt > 0) ENDPROC @@ -3194,6 +3320,7 @@ DEFINE CLASS c_conversor_base AS SESSION ENDIF ENDIF + RELEASE tcAsignacion, tcPropName, tcValue, toClase, taCodeLines, tnCodeLines, I, ln_AT_Cmt RETURN ENDPROC @@ -3208,6 +3335,7 @@ DEFINE CLASS c_conversor_base AS SESSION ELSE lcValue = CHRTRAN( LEFT( tcNullTerminatedValue, lnNullPos - 1 ), ['], ["] ) ENDIF + RELEASE tcNullTerminatedValue, lnNullPos RETURN lcValue ENDPROC @@ -3254,6 +3382,9 @@ DEFINE CLASS c_conversor_base AS SESSION lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) IF .lineIsOnlyCommentAndNoMetadata( @lcLine ) + *-- Optimización: Excluyo las líneas que solo son comentarios + taLineasExclusion(I) = .T. + *-- LOOP ENDIF @@ -3262,7 +3393,7 @@ DEFINE CLASS c_conversor_base AS SESSION FOR X = 1 TO lnID_Bloques_Count lnLen_IDFinBQ = LEN( ta_ID_Bloques(X,2) ) IF .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 ) ; - AND NOT THIS.currentLineIsPreviousLineContinuation( @taCodeLines, I ) + AND NOT .currentLineIsPreviousLineContinuation( @taCodeLines, I ) lnPrimerID = X lnAnidamientos = 1 EXIT @@ -3288,7 +3419,7 @@ DEFINE CLASS c_conversor_base AS SESSION DO CASE CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 ) ; - AND NOT THIS.currentLineIsPreviousLineContinuation( @taCodeLines, I ) + AND NOT .currentLineIsPreviousLineContinuation( @taCodeLines, I ) *-- Busca el primer marcador (#IF o TEXT) lnAnidamientos = lnAnidamientos + 1 @@ -3322,6 +3453,9 @@ DEFINE CLASS c_conversor_base AS SESSION THROW + FINALLY + RELEASE taCodeLines, tnCodeLines, ta_ID_Bloques, taLineasExclusion, tnBloquesExclusion, taBloquesExclusion ; + , lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine ENDTRY RETURN @@ -3332,17 +3466,6 @@ DEFINE CLASS c_conversor_base AS SESSION PROCEDURE lineaExcluida LPARAMETERS tn_Linea, tnBloquesExclusion, taLineasExclusion - EXTERNAL ARRAY taLineasExclusion - *LOCAL X, llExcluida - - *FOR X = 1 TO tnBloquesExclusion - * IF BETWEEN( tn_Linea, taBloquesExclusion(X,1), taBloquesExclusion(X,2) ) - * llExcluida = .T. - * EXIT - * ENDIF - *ENDFOR - - *RETURN llExcluida RETURN taLineasExclusion(tn_Linea) ENDPROC @@ -3363,6 +3486,7 @@ DEFINE CLASS c_conversor_base AS SESSION ENDCASE + RELEASE tcLine, tcComment, ln_AT_Cmt RETURN lllineIsOnlyCommentAndNoMetadata ENDPROC @@ -3375,6 +3499,7 @@ DEFINE CLASS c_conversor_base AS SESSION tcComentario = '' THIS.normalizarValorPropiedad( @lcPropName, @lcValor, @tcComentario ) tcAsignacion = lcPropName + ' = ' + lcValor + RELEASE tcComentario, lcPropName, lcValor, lnCodError, lcExpNormalizada, lnPos RETURN tcAsignacion ENDPROC @@ -3420,6 +3545,7 @@ DEFINE CLASS c_conversor_base AS SESSION ENDCASE + RELEASE tcProp, lcValue, I, tcComentario RETURN tcValue ENDPROC @@ -3628,6 +3754,8 @@ DEFINE CLASS c_conversor_base AS SESSION THROW + FINALLY + RELEASE tcOperation, tcPropName, lnPos, loEx ENDTRY RETURN lcPropName @@ -3650,6 +3778,7 @@ DEFINE CLASS c_conversor_base AS SESSION * 2=Sort completo de propiedades con "Name" al final (para la versión BIN) *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taPropsAndValues, tnPropsAndValues_Count, tnSortType + EXTERNAL ARRAY taPropsAndValues TRY @@ -3755,6 +3884,9 @@ DEFINE CLASS c_conversor_base AS SESSION THROW + FINALLY + RELEASE taPropsAndValues, tnPropsAndValues_Count, tnSortType ; + , I, X, lnArrayCols, laPropsAndValues, lcPropName, lcSortedMemo, lcMethods ENDTRY RETURN @@ -3954,9 +4086,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base + [] ; + [] ; + [] ; + + [] ; + [] + ******************************************************************************************************************* PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- @@ -3973,6 +4107,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* FUNCTION get_ValueByName_FromListNamesWithValues *-- ASIGNO EL VALOR DEL ARRAY DE DATOS Y VALORES PARA LA PROPIEDAD INDICADA @@ -4009,10 +4144,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDCASE + RELEASE tcPropName, tcValueType, taPropsAndValues, lnPos RETURN luPropValue ENDFUNC + ******************************************************************************************************************* PROCEDURE analizarBloque_FoxBin2Prg *------------------------------------------------------ @@ -4031,11 +4168,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base toModulo._SourceFile = THIS.get_ValueByName_FromListNamesWithValues( 'SourceFile', 'C', @laPropsAndValues ) ENDIF + RELEASE toModulo, tcLine, taCodeLines, I, tnCodeLines RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_LIBCOMMENT *------------------------------------------------------ *-- Analiza el bloque * @@ -4051,10 +4190,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base toModulo._Comment = ALLTRIM( STREXTRACT( tcLine, C_LIBCOMMENT_I, C_LIBCOMMENT_F ) ) ENDIF + RELEASE toModulo, tcLine, taCodeLines, I, tnCodeLines, laPropsAndValues, lnPropsAndValues_Count RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE createProject @@ -4414,8 +4555,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- Fin: ESTRUCTURA A ANALIZAR: TRY - LOCAL lcDefinedPAM, lnPos, lnPos2, laProps(1,2), lcLine, lcPropName, lcValue, I, lcAsignacion, lcMemo ; - , laPropsAndValues(1,2), lnPropsAndValues_Count + LOCAL I, lcMemo, laPropsAndValues(1,2), lnPropsAndValues_Count lcMemo = '' IF toClase._Prop_Count > 0 @@ -4433,7 +4573,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lcMemo = lcMemo + laPropsAndValues(I,1) + ' = ' + laPropsAndValues(I,2) + CR_LF ENDFOR - ENDIF && laProps > 0 + ENDIF && toClase._Prop_Count > 0 CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -4442,6 +4582,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base THROW + FINALLY + RELEASE toClase, I, laPropsAndValues, lnPropsAndValues_Count ENDTRY RETURN lcMemo @@ -4458,7 +4600,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' #ENDIF - LOCAL lcMemo, I, laPropsAndValues(1,2), lcPropName, lcValue + LOCAL lcMemo, I, laPropsAndValues(1,2) lcMemo = '' IF toObjeto._Prop_Count > 0 @@ -4478,6 +4620,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF + RELEASE toObjeto, toClase, I, laPropsAndValues RETURN lcMemo ENDPROC @@ -4535,7 +4678,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDFOR loProcedure = NULL - RELEASE loProcedure + RELEASE toClase, I, X, lcNombreObjeto, loProcedure RETURN lcMemo ENDPROC @@ -4576,7 +4719,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDFOR loProcedure = NULL - RELEASE loProcedure + RELEASE toObjeto, toClase, I, X, lcNombreObjeto, loProcedure RETURN lcMemo ENDPROC @@ -4601,6 +4744,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF ENDFOR + RELEASE tcPropName, toClase, I RETURN lcComentario ENDPROC @@ -4628,7 +4772,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDFOR loProcedure = NULL - RELEASE loProcedure + RELEASE tcMethodName, toClase, loProcedure, I RETURN lcComentario ENDPROC @@ -4656,6 +4800,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE defined_PAM2Memo *-------------------------------------------------------------------------------------------------------------- @@ -4667,6 +4812,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE strip_Dimensions LPARAMETERS tcSeparatedCommaVars @@ -4677,9 +4823,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lnPos2 = AT( ']', tcSeparatedCommaVars, I ) tcSeparatedCommaVars = STUFF( tcSeparatedCommaVars, lnPos1, lnPos2 - lnPos1 + 1, '' ) ENDFOR + + RELEASE tcSeparatedCommaVars, lnPos1, lnPos2, I + RETURN ENDPROC + ******************************************************************************************************************* PROCEDURE hiddenAndProtected_PAM LPARAMETERS toClase @@ -4698,10 +4848,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base .Evaluate_PAM( @lcMemo, toClase._HiddenMethods, 'method', 'hidden' ) ENDWITH && THIS + RELEASE toClase, I, lcPAM, lcComentario RETURN lcMemo ENDPROC + ******************************************************************************************************************* PROCEDURE Evaluate_PAM LPARAMETERS tcMemo AS STRING, tcPAM AS STRING, tcPAM_Type AS STRING, tcPAM_Visibility AS STRING @@ -4722,9 +4874,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDTEXT ENDIF ENDFOR + + RELEASE tcMemo, tcPAM, tcPAM_Type, tcPAM_Visibility, lcPAM, I + RETURN ENDPROC + ******************************************************************************************************************* PROCEDURE insert_Object LPARAMETERS toClase, toObjeto, toFoxBin2Prg @@ -4742,7 +4898,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lcMethodsMemo = .objectMethods2Memo( toObjeto, toClase ) IF EMPTY(toObjeto._TimeStamp) - toObjeto._TimeStamp = THIS.RowTimeStamp( {^2013/11/04 20:00:00} ) + toObjeto._TimeStamp = .RowTimeStamp( {^2013/11/04 20:00:00} ) ENDIF IF EMPTY(toObjeto._UniqueID) toObjeto._UniqueID = toFoxBin2Prg.Unique_ID() @@ -4797,9 +4953,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , toObjeto._User ) ENDIF ENDWITH && THIS + + RELEASE toClase, toObjeto, toFoxBin2Prg, lcPropsMemo, lcMethodsMemo + RETURN ENDPROC + ******************************************************************************************************************* PROCEDURE insert_AllObjects *-- Recorro primero los objetos con ZOrder definido, y luego los demás @@ -4827,7 +4987,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base loObjeto = toClase._AddObjects( X ) IF EMPTY(loObjeto._TimeStamp) - loObjeto._TimeStamp = THIS.RowTimeStamp( {^2013/11/04 20:00:00} ) + loObjeto._TimeStamp = .RowTimeStamp( {^2013/11/04 20:00:00} ) ENDIF IF EMPTY(loObjeto._UniqueID) loObjeto._UniqueID = toFoxBin2Prg.Unique_ID() @@ -4876,7 +5036,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base FINALLY loObjeto = NULL - RELEASE loObjeto + RELEASE toClase, toFoxBin2Prg, N, X, lcObjName, loObjeto ENDTRY @@ -4884,6 +5044,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE set_Line LPARAMETERS tcLine, taCodeLines, I @@ -4891,10 +5052,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarLineasDeProcedure LPARAMETERS toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ; , taLineasExclusion, tnBloquesExclusion + EXTERNAL ARRAY taCodeLines #IF .F. @@ -4961,7 +5124,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base FINALLY loProcedure = NULL - RELEASE loProcedure + RELEASE toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ; + , taLineasExclusion, tnBloquesExclusion, llEsProcedureDeClase, loProcedure ENDTRY @@ -4969,6 +5133,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_ADD_OBJECT LPARAMETERS toModulo, toClase, tcLine, I, taCodeLines, tnCodeLines @@ -5088,12 +5253,16 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base THROW + FINALLY + RELEASE toModulo, toClase, tcLine, I, taCodeLines, tnCodeLines ; + , laPropsAndValues, lnPropsAndValues_Count, Z, lcProp, lcValue, lcNombre, lcObjName ENDTRY RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_DEFINED_PAM *-------------------------------------------------------------------------------------------------------------- @@ -5188,12 +5357,16 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base THROW + FINALLY + RELEASE toClase, tcLine, taCodeLines, tnCodeLines, I ; + , lcDefinedPAM, lnPos, lnPos2, lcPAM_Name, lcItem, lcMethods, lcPAM_Type ENDTRY RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_DEFINE_CLASS LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; @@ -5353,6 +5526,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base THROW + FINALLY + RELEASE toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; + , taLineasExclusion, tnBloquesExclusion, tc_Comentario, Z, lcProp, lcValue, loEx ; + , llCLASSMETADATA_Completed, llPROTECTED_Completed, llHIDDEN_Completed, llDEFINED_PAM_Completed ; + , llINCLUDE_Completed, llCLASS_PROPERTY_Completed, llOBJECTMETADATA_Completed ; + , llCLASSCOMMENTS_Completed, loObjeto ENDTRY ENDIF @@ -5360,6 +5539,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_ENDDEFINE LPARAMETERS toClase, tcLine, I, tcProcedureAbierto @@ -5387,10 +5567,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base STORE '' TO tcProcedureAbierto ENDIF + RELEASE toClase, tcLine, I, tcProcedureAbierto RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_HIDDEN LPARAMETERS toClase, tcLine @@ -5406,10 +5588,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base toClase._HiddenProps = LOWER( ALLTRIM( SUBSTR( tcLine, 8 ) ) ) ENDIF + RELEASE toClase, tcLine RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_INCLUDE LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto @@ -5429,10 +5613,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF ENDIF + RELEASE toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto RETURN llBloqueEncontrado ENDPROC + + ******************************************************************************************************************* PROCEDURE analizarBloque_CLASSCOMMENTS LPARAMETERS toClase, tcLine ,taCodeLines, tnCodeLines, I @@ -5478,12 +5665,16 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base THROW + FINALLY + RELEASE toClase, tcLine ,taCodeLines, tnCodeLines, I ENDTRY RETURN llBloqueEncontrado ENDPROC + + ******************************************************************************************************************* PROCEDURE analizarBloque_CLASSMETADATA LPARAMETERS toClase, tcLine @@ -5517,10 +5708,44 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF ENDIF + RELEASE toClase, tcLine, laPropsAndValues, lnPropsAndValues_Count RETURN llBloqueEncontrado ENDPROC + + ******************************************************************************************************************* + PROCEDURE analizarBloque_EXTERNAL_CLASS + *------------------------------------------------------ + *-- Analiza el bloque *< EXTERNAL_CLASS: Name="nombre-clase" Baseclass="clase-base" /> + *------------------------------------------------------ + LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines + + #IF .F. + LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + #ENDIF + + LOCAL llBloqueEncontrado + + IF LEFT(tcLine, C_LEN_EXTERNAL_CLASS_I) == C_EXTERNAL_CLASS_I + LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count + llBloqueEncontrado = .T. + + WITH THIS + .get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_EXTERNAL_CLASS_I, C_EXTERNAL_CLASS_F ) + + toModulo._ExternalClasses_Count = toModulo._ExternalClasses_Count + 1 + DIMENSION toModulo._ExternalClasses( toModulo._ExternalClasses_Count ) + toModulo._ExternalClasses( toModulo._ExternalClasses_Count ) = .get_ValueByName_FromListNamesWithValues( 'Name', 'C', @laPropsAndValues ) + ENDWITH && THIS + ENDIF + + RETURN llBloqueEncontrado + ENDPROC + + + + ******************************************************************************************************************* PROCEDURE analizarBloque_OBJECTMETADATA LPARAMETERS toClase, tcLine @@ -5548,13 +5773,14 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDWITH && THIS loObjeto = NULL - RELEASE laPropsAndValues, lnPropsAndValues_Count, loObjeto + RELEASE toClase, tcLine, laPropsAndValues, lnPropsAndValues_Count, loObjeto ENDIF RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_OLE_DEF LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto @@ -5600,10 +5826,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base RELEASE loOle, laPropsAndValues, lnPropsAndValues_Count ENDIF + RELEASE toModulo, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_PROCEDURE LPARAMETERS toModulo, toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; @@ -5645,10 +5873,13 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , @tc_Comentario, @taLineasExclusion, @tnBloquesExclusion ) ENDIF + RELEASE toModulo, toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; + , tc_Comentario, taLineasExclusion, tnBloquesExclusion RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_PROTECTED LPARAMETERS toClase, tcLine @@ -5664,10 +5895,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base toClase._ProtectedProps = LOWER( ALLTRIM( SUBSTR( tcLine, 11 ) ) ) ENDIF + RELEASE toClase, tcLine RETURN llBloqueEncontrado ENDPROC + ******************************************************************************************************************* PROCEDURE evaluarDefinicionDeProcedure LPARAMETERS toClase, tnX, tc_Comentario, tcProcName, tcProcType, toObjeto @@ -5733,14 +5966,15 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base FINALLY STORE NULL TO loProcedure - RELEASE loProcedure, I, lcNombreObjeto, lnObjProc - + RELEASE loProcedure, I, lcNombreObjeto, lnObjProc ; + , toClase, tnX, tc_Comentario, tcProcName, tcProcType, toObjeto ENDTRY RETURN ENDPROC + ******************************************************************************************************************* PROCEDURE identificarBloquesDeCodigo *-------------------------------------------------------------------------------------------------------------- @@ -5750,21 +5984,23 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base * taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no * tnBloquesExclusion (@! IN ) Cantidad de bloques de exclusión * toModulo (@? OUT) Objeto con toda la información del módulo analizado + * toFoxBin2Prg (@? IN ) Referencia al objeto principal * * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo + LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo, toFoxBin2Prg EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY LOCAL I, loEx AS EXCEPTION ; - , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed ; + , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed, llEXTERNAL_CLASS_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine ; , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' @@ -5776,8 +6012,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF tnCodeLines > 1 *-- Defino el objeto de módulo y sus propiedades - toModulo = NULL - toModulo = CREATEOBJECT('CL_MODULO') + *toModulo = NULL + *toModulo = CREATEOBJECT('CL_MODULO') + + *IF NOT (toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain) + * llEXTERNAL_CLASS_Completed = .T. + *ENDIF *-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE) FOR I = 1 TO tnCodeLines @@ -5788,28 +6028,36 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base CASE .lineaExcluida( I, tnBloquesExclusion, @taLineasExclusion ) ; OR .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios - CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) - llFoxBin2Prg_Completed = .T. + *CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + * llFoxBin2Prg_Completed = .T. - CASE NOT llLIBCOMMENT_Completed AND .analizarBloque_LIBCOMMENT( toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) - llLIBCOMMENT_Completed = .T. + *CASE NOT llEXTERNAL_CLASS_Completed AND .analizarBloque_EXTERNAL_CLASS( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + *-- Puede haber varias clases externas - CASE NOT llOLE_DEF_Completed AND .analizarBloque_OLE_DEF( @toModulo, @lcLine, @taCodeLines ; + *CASE NOT llLIBCOMMENT_Completed AND .analizarBloque_LIBCOMMENT( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + * llLIBCOMMENT_Completed = .T. + * llEXTERNAL_CLASS_Completed = .T. + + *CASE NOT llOLE_DEF_Completed AND .analizarBloque_OLE_DEF( @toModulo, @lcLine, @taCodeLines ; , @I, tnCodeLines, @lcProcedureAbierto ) - *-- Puede haber varios + *-- Puede haber varios objetos OLE - CASE NOT llINCLUDE_SCX_Completed AND .c_Type = 'SCX' AND .analizarBloque_INCLUDE( @toModulo, @loClase, @lcLine ; + *CASE NOT llINCLUDE_SCX_Completed AND .c_Type = 'SCX' AND .analizarBloque_INCLUDE( @toModulo, @loClase, @lcLine ; , @taCodeLines, @I, tnCodeLines, @lcProcedureAbierto ) * Específico para SCX que lo tiene al inicio - llINCLUDE_SCX_Completed = .T. + * llINCLUDE_SCX_Completed = .T. + * llEXTERNAL_CLASS_Completed = .T. CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ; , @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario ) - *-- Puede haber varias + *-- Puede haber varias clases definidas + * llEXTERNAL_CLASS_Completed = .T. ENDCASE ENDFOR + + .verificar_CLASES_EXTERNAS( @toModulo, @toFoxBin2Prg ) ENDIF ENDWITH && THIS @@ -5831,9 +6079,167 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* + PROCEDURE identificarBloquesDeCabecera + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * taCodeLines (@! IN ) El array con las líneas del código donde buscar + * tnCodeLines (@! IN ) Cantidad de líneas de código + * taLineasExclusion (@! IN ) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no + * tnBloquesExclusion (@! IN ) Cantidad de bloques de exclusión + * toModulo (@? OUT) Objeto con toda la información del módulo analizado + * toFoxBin2Prg (@? IN ) Referencia al objeto principal + * + * NOTA: + * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo, toFoxBin2Prg + + EXTERNAL ARRAY taCodeLines, taLineasExclusion + + #IF .F. + LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + 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' + + WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' + STORE '' TO lcProcedureAbierto + + .c_Type = UPPER(JUSTEXT(.c_OutputFile)) + + IF tnCodeLines > 1 + + *-- Defino el objeto de módulo y sus propiedades + *toModulo = NULL + *toModulo = CREATEOBJECT('CL_MODULO') + + IF NOT (toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_RedirectClassPerFileToMain) + llEXTERNAL_CLASS_Completed = .T. + ENDIF + + *-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE) + FOR I = 1 TO tnCodeLines + STORE '' TO lc_Comentario + .set_Line( @lcLine, @taCodeLines, I ) + + DO CASE + CASE .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios + + CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + llFoxBin2Prg_Completed = .T. + + CASE NOT llEXTERNAL_CLASS_Completed AND .analizarBloque_EXTERNAL_CLASS( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + *-- Puede haber varias clases externas + + CASE NOT llLIBCOMMENT_Completed AND .analizarBloque_LIBCOMMENT( @toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) + llLIBCOMMENT_Completed = .T. + llEXTERNAL_CLASS_Completed = .T. + + CASE NOT llOLE_DEF_Completed AND .analizarBloque_OLE_DEF( @toModulo, @lcLine, @taCodeLines ; + , @I, tnCodeLines, @lcProcedureAbierto ) + *-- Puede haber varios objetos OLE + + CASE NOT llINCLUDE_SCX_Completed AND .c_Type = 'SCX' AND .analizarBloque_INCLUDE( @toModulo, @loClase, @lcLine ; + , @taCodeLines, @I, tnCodeLines, @lcProcedureAbierto ) + * Específico para SCX que lo tiene al inicio + llINCLUDE_SCX_Completed = .T. + llEXTERNAL_CLASS_Completed = .T. + + *CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ; + , @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario ) + *-- Puede haber varias clases definidas + * llEXTERNAL_CLASS_Completed = .T. + + ENDCASE + + ENDFOR + + ENDIF + ENDWITH && THIS + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + 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 + ENDTRY + + RETURN + ENDPROC + + + + ******************************************************************************************************************* + PROCEDURE verificar_CLASES_EXTERNAS + *-------------------------------------------------------------------------------- + *-- Compara las clases definidas en la cabecera con las clases encontradas luego + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * toModulo (@? OUT) Objeto con toda la información del módulo analizado + * toFoxBin2Prg (@? IN ) Referencia al objeto principal + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS toModulo, toFoxBin2Prg + + #IF .F. + LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + LOCAL lnItem, I, X + + *-- Verificación de las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_UseClassPerFile AND toFoxBin2Prg.l_ClassPerFileCheck + DO CASE + CASE toModulo._ExternalClasses_Count = 0 AND toModulo._ExternalClasses_Count <> toModulo._Clases_Count + *ERROR 'El conteo de clases externas (' + TRANSFORM(toModulo._ExternalClasses_Count) + ') no coincide con la cantidad encontrada (' + TRANSFORM(toModulo._Clases_Count) + ') en el archivo [' + toFoxBin2Prg.c_InputFile + ']' + ERROR (TEXTMERGE(C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES)) + + CASE toModulo._Clases_Count =0 AND toModulo._ExternalClasses_Count <> toModulo._Clases_Count + *ERROR 'El conteo de clases externas (' + TRANSFORM(toModulo._ExternalClasses_Count) + ') no coincide con la cantidad encontrada (' + TRANSFORM(toModulo._Clases_Count) + ') en el archivo [' + toFoxBin2Prg.c_InputFile + ']' + ERROR (TEXTMERGE(C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES)) + + *CASE toModulo._ExternalClasses_Count <> toModulo._Clases_Count THEN + ENDCASE + + FOR I = 1 TO toModulo._ExternalClasses_Count + lnItem = 0 + + FOR X = 1 TO toModulo._Clases_Count + IF LOWER( toModulo._Clases(X)._objname ) == LOWER( toModulo._ExternalClasses(I) ) + lnItem = X + EXIT + ENDIF + ENDFOR + + IF lnItem = 0 THEN + *ERROR 'No se ha encontrado la clase externa [' + toModulo._ExternalClasses(I) + '] en el archivo [' + toFoxBin2Prg.c_InputFile + ']' + ERROR (TEXTMERGE(C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND)) + ENDIF + + toModulo._Clases(lnItem)._Checked = .T. + ENDFOR + ENDIF + ENDPROC + + + ENDDEFINE + ******************************************************************************************************************* DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin #IF .F. @@ -5847,38 +6253,63 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * toModulo (!@ OUT) Objeto generado de clase CL_MODULO con la información leida del texto - * toEx (!@ OUT) Objeto con información del error - * toFoxBin2Prg (v! IN ) Referencia al objeto principal + * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toEx (@! OUT) Objeto con información del error + * toFoxBin2Prg (@? IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg #IF .F. + LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, lcLine, laCodeLines(1), lnCodeLines ; + LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ; , laLineasExclusion(1), lnBloquesExclusion, I WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError, lnCodeLines - STORE '' TO lcLine + STORE '' TO C_FB2PRG_CODE STORE NULL TO toModulo + toModulo = CREATEOBJECT('CL_MODULO') C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) - *-- Creo la librería - .createClasslib() + IF toFoxBin2Prg.l_UseClassPerFile + *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes + lcInputFile = FORCEPATH( JUSTSTEM( .c_InputFile ), JUSTPATH( .c_InputFile ) ) + '.*.' + JUSTEXT( .c_InputFile ) + lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) + ASORT( laFiles, 1, 0, 0, 1) + + FOR I = 1 TO lnFileCount + lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + + *-- Verificación de las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 + LOOP && Salteo esta clase + ENDIF + + toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) + C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) + ENDFOR + ENDIF + + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase - .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo ) + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + + .createClasslib() .escribirArchivoBin( @toModulo, @toFoxBin2Prg ) ENDWITH && THIS @@ -5893,13 +6324,15 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin FINALLY USE IN (SELECT("TABLABIN")) - RELEASE lnCodError, lcLine, laCodeLines, lnCodeLines, laLineasExclusion, lnBloquesExclusion, I + RELEASE lnCodError, laCodeLines, lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles ; + , laLineasExclusion, lnBloquesExclusion, I ENDTRY RETURN ENDPROC + ******************************************************************************************************************* PROCEDURE escribirArchivoBin LPARAMETERS toModulo, toFoxBin2Prg @@ -5999,7 +6432,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ENDIF IF EMPTY(loClase._TimeStamp) - loClase._TimeStamp = THIS.RowTimeStamp( {^2013/11/04 20:00:00} ) + loClase._TimeStamp = .RowTimeStamp( {^2013/11/04 20:00:00} ) ENDIF IF EMPTY(loClase._UniqueID) loClase._UniqueID = toFoxBin2Prg.Unique_ID() @@ -6138,6 +6571,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ENDDEFINE + ******************************************************************************************************************* DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin #IF .F. @@ -6151,37 +6585,63 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * toModulo (!@ OUT) Objeto generado de clase CL_MODULO con la información leida del texto - * toEx (!@ OUT) Objeto con información del error - * toFoxBin2Prg (v! IN ) Referencia al objeto principal + * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toEx (@! OUT) Objeto con información del error + * toFoxBin2Prg (@! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxBin2Prg #IF .F. + LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, laCodeLines(1), lnCodeLines, lnFB2P_Version ; + LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles(1,5) ; , laLineasExclusion(1), lnBloquesExclusion, I WITH THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG' - STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version + STORE 0 TO lnCodError, lnCodeLines + STORE '' TO C_FB2PRG_CODE STORE NULL TO toModulo + toModulo = CREATEOBJECT('CL_MODULO') C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) - *-- Creo el form - .createForm() + IF toFoxBin2Prg.l_UseClassPerFile + *-- Esto crea la máscara de búsqueda "filename.*.ext" para encontrar las partes + lcInputFile = FORCEPATH( JUSTSTEM( .c_InputFile ), JUSTPATH( .c_InputFile ) ) + '.*.' + JUSTEXT( .c_InputFile ) + lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) + ASORT( laFiles, 1, 0, 0, 1) + + FOR I = 1 TO lnFileCount + lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + + *-- Verificación de las Clases, si son Externas y se indicó chequearlas + IF toFoxBin2Prg.l_ClassPerFileCheck AND ASCAN( toModulo._ExternalClasses , JUSTEXT( JUSTSTEM( lcInputFile_Class ) ), 1, 0, 1, 1+2+4 ) = 0 + LOOP && Salteo esta clase + ENDIF + + toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) + C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) + ENDFOR + ENDIF + + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase - .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo ) + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + + .createForm() .escribirArchivoBin( @toModulo, @toFoxBin2Prg ) ENDWITH && THIS @@ -6196,12 +6656,15 @@ 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 ; + , laLineasExclusion, lnBloquesExclusion, I ENDTRY RETURN ENDPROC + ******************************************************************************************************************* PROCEDURE escribirArchivoBin LPARAMETERS toModulo, toFoxBin2Prg @@ -6302,7 +6765,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDIF IF EMPTY(loClase._TimeStamp) - loClase._TimeStamp = THIS.RowTimeStamp( {^2013/11/04 20:00:00} ) + loClase._TimeStamp = .RowTimeStamp( {^2013/11/04 20:00:00} ) ENDIF IF EMPTY(loClase._UniqueID) loClase._UniqueID = toFoxBin2Prg.Unique_ID() @@ -6437,6 +6900,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDDEFINE + ******************************************************************************************************************* DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin #IF .F. @@ -6541,7 +7005,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin ENDIF IF EMPTY(toProject._TimeStamp) - toProject._TimeStamp = THIS.RowTimeStamp( {^2013/11/04 20:00:00} ) + toProject._TimeStamp = .RowTimeStamp( {^2013/11/04 20:00:00} ) ENDIF IF EMPTY(toProject._ID) toProject._ID = toFoxBin2Prg.Unique_ID('N') @@ -6581,7 +7045,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin FOR EACH loFile IN toProject FOXOBJECT IF EMPTY(loFile._TimeStamp) - loFile._TimeStamp = THIS.RowTimeStamp( {^2013/11/04 20:00:00} ) + loFile._TimeStamp = .RowTimeStamp( {^2013/11/04 20:00:00} ) ENDIF IF EMPTY(loFile._ID) loFile._ID = toFoxBin2Prg.Unique_ID('N') @@ -6718,6 +7182,11 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin THROW + FINALLY + RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toProject ; + , I, lc_Comentario, lcLine, llBuildProj_Completed, llDevInfo_Completed ; + , llServerHead_Completed, llFileComments_Completed, llFoxBin2Prg_Completed ; + , llExcludedFiles_Completed, llTextFiles_Completed, llProjectProperties_Completed ENDTRY RETURN @@ -6798,7 +7267,8 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin FINALLY STORE NULL TO loFile - RELEASE lcComment, lcMetadatos, luValor, laPropsAndValues, lnPropsAndValues_Count, loFile + RELEASE toProject, tcLine, taCodeLines, I, tnCodeLines ; + , lcComment, lcMetadatos, luValor, laPropsAndValues, lnPropsAndValues_Count, loFile ENDTRY RETURN llBloqueEncontrado @@ -6985,6 +7455,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin LPARAMETERS toProject, tcLine, taCodeLines, I, tnCodeLines EXTERNAL ARRAY toProject + #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7047,6 +7518,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin LPARAMETERS toProject, tcLine, taCodeLines, I, tnCodeLines EXTERNAL ARRAY toProject + #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7109,6 +7581,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin LPARAMETERS toProject, tcLine, taCodeLines, I, tnCodeLines EXTERNAL ARRAY toProject + #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7258,7 +7731,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin #ENDIF TRY - LOCAL lnCodError, loEx AS EXCEPTION, laCodeLines(1), lnCodeLines, lnFB2P_Version ; + LOCAL lnCodError, loEx AS EXCEPTION, laCodeLines(1), lnCodeLines ; , laLineasExclusion(1), lnBloquesExclusion, I WITH THIS AS c_conversor_prg_a_frx OF 'FOXBIN2PRG.PRG' @@ -7323,7 +7796,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin * loReg.UNIQUEID = '' *ENDIF IF EMPTY(loReg.TIMESTAMP) - loReg.TIMESTAMP = THIS.RowTimeStamp( {^2013/11/04 20:00:00} ) + loReg.TIMESTAMP = .RowTimeStamp( {^2013/11/04 20:00:00} ) ENDIF IF EMPTY(loReg.UNIQUEID) OR ALLTRIM(loReg.UNIQUEID) = '0' loReg.UNIQUEID = toFoxBin2Prg.Unique_ID() @@ -7506,6 +7979,9 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin THROW + FINALLY + RELEASE toReport, tcLine, taCodeLines, I, tnCodeLines, toReg, tcPropName ; + , lcValue, loEx ENDTRY RETURN llBloqueEncontrado @@ -7524,9 +8000,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin #ENDIF TRY - LOCAL llBloqueEncontrado, X, lnPos, lnPos2, lcValue, lnLenPropName, laProps(1) ; - , lcComment, lcMetadatos, luValor ; - , laPropsAndValues(1,2), lnPropsAndValues_Count + LOCAL llBloqueEncontrado, X, lnPos, lnPos2, lcValue, lnLenPropName, laProps(1) IF LOWER( LEFT(tcLine, 10) ) == 'platform="' llBloqueEncontrado = .T. @@ -7555,6 +8029,9 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin THROW + FINALLY + RELEASE toReport, tcLine, taCodeLines, I, tnCodeLines, toReg ; + , X, lnPos, lnPos2, lcValue, lnLenPropName, laProps ENDTRY RETURN llBloqueEncontrado @@ -7886,6 +8363,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin * toTable (@? OUT) Objeto con toda la información de la tabla analizada *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toTable + EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. @@ -7929,6 +8407,9 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin THROW + FINALLY + RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toTable ; + , I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueTable_Completed ENDTRY RETURN @@ -8062,6 +8543,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase + EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. @@ -8105,6 +8587,9 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin THROW + FINALLY + RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase ; + , I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueDatabase_Completed ENDTRY RETURN @@ -8196,6 +8681,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toMenu + EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. @@ -8239,6 +8725,9 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin THROW + FINALLY + RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toMenu ; + , I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueMenu_Completed ENDTRY RETURN @@ -8328,9 +8817,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] @@ -8358,6 +8849,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base , toFoxBin2Prg EXTERNAL ARRAY taPropsAndComments, taProtected + #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -8408,6 +8900,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE toRegObj, toRegClass, tcMethods, taMethods, taCode, tnMethodCount ; + , taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count ; + , toFoxBin2Prg, lcMethodName, lnMethodCount ENDTRY RETURN @@ -8475,6 +8972,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE tnMethodCount, taMethods, taCode, taProtected, taPropsAndComments ; + , lcMethod, lcMethodName, lnProtectedItem, lnCommentRow, lcProcDef, lcMethods, lnLen ENDTRY RETURN @@ -8505,6 +9006,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * tcSortedMemo (@? OUT) Contenido del campo memo ordenado *--------------------------------------------------------------------------------------------------- LPARAMETERS tcMemo, tlSort, taPropsAndComments, tnPropsAndComments_Count, tcSortedMemo + EXTERNAL ARRAY taPropsAndComments TRY @@ -8541,6 +9043,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE tcMemo, tlSort, taPropsAndComments, tnPropsAndComments_Count, tcSortedMemo ; + , laLines, I, lnPos, loEx ENDTRY RETURN @@ -8564,7 +9070,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * tcSortedMemo (@? OUT) Contenido del campo memo ordenado *--------------------------------------------------------------------------------------------------- LPARAMETERS tcMemo, tnSort, taPropsAndValues, tnPropsAndValues_Count, tcSortedMemo + EXTERNAL ARRAY taPropsAndValues + TRY LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods tcSortedMemo = '' @@ -8652,6 +9160,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE tcMemo, tnSort, taPropsAndValues, tnPropsAndValues_Count, tcSortedMemo ; + , laItems, I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods ENDTRY RETURN @@ -8670,8 +9182,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * tcSortedMemo (@? OUT) Contenido del campo memo ordenado *--------------------------------------------------------------------------------------------------- LPARAMETERS tcMemo, tlSort, taProtected, tnProtected_Count, tcSortedMemo + EXTERNAL ARRAY taProtected + LOCAL I tcSortedMemo = '' tnProtected_Count = ALINES(taProtected, tcMemo, 1+4) @@ -8695,6 +9209,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base DIMENSION taProtected(tnProtected_Count) ENDIF + RELEASE tcMemo, tlSort, taProtected, tnProtected_Count, tcSortedMemo, I RETURN ENDPROC @@ -8760,6 +9275,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE tcMethod, tcIndentation, tlKeepProcHeader ; + , I, X, llProcedure, lnInicio, lnFin, laLineas, lnOffset ENDTRY RETURN lcMethod @@ -8767,7 +9286,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* - PROCEDURE MemoInOneLine( tcMethod ) + PROCEDURE MemoInOneLine + LPARAMETERS tcMethod + TRY LOCAL lcLine, I lcLine = '' @@ -8786,6 +9307,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE tcMethod, I ENDTRY RETURN lcLine @@ -8795,6 +9319,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE set_MultilineMemoWithAddObjectProperties LPARAMETERS taPropsAndValues, tnPropCount, tcLeftIndentation, tlNormalizeLine + EXTERNAL ARRAY taPropsAndValues TRY @@ -8821,6 +9346,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE taPropsAndValues, tnPropCount, tcLeftIndentation, tlNormalizeLine ; + , I, lcComentarios, laLines, lcFinDeLinea ENDTRY RETURN lcLine @@ -8833,6 +9362,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base , taProtected, tnProtected_Count, toFoxBin2Prg EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected + #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -8884,6 +9414,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; + , taProtected, tnProtected_Count, toFoxBin2Prg ; + , I, I2, laMethods, lnDeleted, lcMethodName, lnMethodPos, lcMethodType, loEx ENDTRY RETURN @@ -8898,6 +9433,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Se tiene en cuenta la posibilidad de que haya un PROC/ENDPROC dentro de un TEXT/ENDTEXT *-- cuando es usado en un generador de código o similar. EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected + #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -9101,6 +9637,13 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; + , taProtected, tnProtected_Count, toFoxBin2Prg ; + , lnLineCount, laLine, I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod, lnLine_Len, lcLine, llProcOpen ; + , laLineasExclusion, lnBloquesExclusion ; + , loEx ENDTRY RETURN @@ -9109,7 +9652,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_ADD_OBJECTS_WithProperties - LPARAMETERS toRegObj + LPARAMETERS toRegObj, tcCodigo #IF .F. LOCAL toRegObj AS CL_OBJETO OF 'FOXBIN2PRG.PRG' @@ -9124,40 +9667,40 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base IF '.' $ toRegObj.PARENT *-- Este caso: clase.objeto.objeto ==> se quita clase - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ADD OBJECT '<>.<>' AS <> <<>> ENDTEXT ELSE *-- Este caso: objeto - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ADD OBJECT '<>' AS <> <<>> ENDTEXT ENDIF IF NOT EMPTY(lcMemo) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <> ; <> ENDTEXT ENDIF - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <><> <<>> ENDTEXT IF NOT EMPTY(toRegObj.CLASSLOC) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 ClassLib="<>" <<>> ENDTEXT ENDIF - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 BaseClass="<>" <<>> ENDTEXT *-- Agrego metainformación para objetos OLE IF toRegObj.BASECLASS == 'olecontrol' - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 <<>> Nombre="<>" Parent="<>" ObjName="<>" @@ -9166,7 +9709,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDTEXT ENDIF - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <> <<>> ENDTEXT @@ -9177,6 +9720,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE toRegObj, lcMemo, laPropsAndValues, lnPropsAndValues_Count ENDTRY RETURN @@ -9185,7 +9731,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_ALL_OBJECT_METHODS - LPARAMETERS tcMethods, taMethods, taCode, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count, toFoxBin2Prg + LPARAMETERS tcMethods, taMethods, taCode, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; + , taProtected, tnProtected_Count, toFoxBin2Prg, tcCodigo *-- Finalmente, todos los métodos los ordeno y escribo juntos LOCAL laMethods(1), laCode(1), lnMethodCount, I, lcMethods @@ -9212,9 +9759,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDFOR ENDWITH && THIS - C_FB2PRG_CODE = C_FB2PRG_CODE + lcMethods + tcCodigo = tcCodigo + lcMethods ENDIF + RELEASE tcMethods, taMethods, taCode, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count, toFoxBin2Prg ; + , laMethods, laCode, lnMethodCount, I, lcMethods RETURN ENDPROC @@ -9222,13 +9771,14 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_CLASS_PROPERTIES LPARAMETERS toRegClass, taPropsAndValues, taPropsAndComments, taProtected ; - , tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count + , tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count, tcCodigo EXTERNAL ARRAY taPropsAndValues, taPropsAndComments TRY LOCAL lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd, I ; - , lcPropName, lnProtectedItem, lcComentarios + , lcPropName, lnProtectedItem, lcComentarios ; + , loEx as Exception WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' *-- DEFINIR PROPIEDADES ( HIDDEN, PROTECTED, *DEFINED_PAM ) @@ -9288,28 +9838,28 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF ENDFOR - .write_DEFINED_PAM( @taPropsAndComments, tnPropsAndComments_Count ) + .write_DEFINED_PAM( @taPropsAndComments, tnPropsAndComments_Count, @tcCodigo ) - .write_HIDDEN_Properties( @lcHiddenProp ) + .write_HIDDEN_Properties( @lcHiddenProp, @tcCodigo ) - .write_PROTECTED_Properties( @lcProtectedProp ) + .write_PROTECTED_Properties( @lcProtectedProp, @tcCodigo ) *-- Escribo las propiedades de la clase y sus comentarios (los comentarios aquí son redundantes) FOR I = 1 TO ALEN(taPropsAndValues, 1) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> = <> ENDTEXT lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+8) IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <<>> && <> ENDTEXT ENDIF ENDFOR - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT ENDIF @@ -9321,6 +9871,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE toRegClass, taPropsAndValues, taPropsAndComments, taProtected ; + , tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count ; + , lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd, I ; + , lcPropName, lnProtectedItem, lcComentarios, loEx ENDTRY RETURN @@ -9330,7 +9886,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_DEFINED_PAM *-- Escribo propiedades DEFINED (Reserved3) en este formato: - LPARAMETERS taPropsAndComments, tnPropsAndComments_Count + LPARAMETERS taPropsAndComments, tnPropsAndComments_Count, tcCodigo * *m: *metodovacio_con_comentarios && Este método no tiene código, pero tiene comentarios. A ver que pasa! @@ -9346,7 +9902,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOCAL I, lcPropsMethodsDefd, lcType lcPropsMethodsDefd = '' - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> ENDTEXT @@ -9361,37 +9917,39 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base , 'p' ) IF lcType == 'p' THEN - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> *<>: <> ENDTEXT ELSE - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> *<>: <> ENDTEXT ENDIF IF NOT EMPTY(taPropsAndComments(I,2)) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <<>> <<'&'>><<'&'>> <> ENDTEXT ENDIF ENDFOR - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> ENDTEXT - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + tcCodigo = tcCodigo + CR_LF + RELEASE I, lcPropsMethodsDefd, lcType ENDIF + RELEASE taPropsAndComments, tnPropsAndComments_Count RETURN ENDPROC ******************************************************************************************************************* PROCEDURE write_DEFINE_CLASS - LPARAMETERS ta_NombresObjsOle, toRegClass + LPARAMETERS ta_NombresObjsOle, toRegClass, tcCodigo LOCAL lcOF_Classlib, llOleObject lcOF_Classlib = '' @@ -9402,7 +9960,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF *-- DEFINICIÓN DE LA CLASE ( DEFINE CLASS 'className' AS 'classType' [OF 'classLib'] [OLEPUBLIC] ) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<'DEFINE CLASS'>> <> AS <> <> ENDTEXT @@ -9412,18 +9970,18 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_DEFINE_CLASS_COMMENTS - LPARAMETERS toRegClass + LPARAMETERS toRegClass, tcCodigo *-- Comentario de la clase IF NOT EMPTY(toRegClass.RESERVED7) THEN *-- Si es multilínea, debe ir en un tag aparte IF OCCURS( CHR(13), toRegClass.RESERVED7 ) > 0 THEN - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> <> <<>> <> ENDTEXT ELSE && Comentario in-line - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <<>> <<'&'+'&'>> <> ENDTEXT ENDIF @@ -9435,9 +9993,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_ENDDEFINE_SiCorresponde - LPARAMETERS tnLastClass + LPARAMETERS tnLastClass, tcCodigo IF tnLastClass = 1 - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<'ENDDEFINE'>> <<>> ENDTEXT @@ -9447,12 +10005,34 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDPROC + ******************************************************************************************************************* + PROCEDURE write_EXTERNAL_CLASS_HEADER + LPARAMETERS toRegClass, toFoxBin2Prg, tcCodigo + *-- < EXTERNAL_CLASS Name = "class-name" Baseclass="base-class" /> + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + IF EMPTY(tcCodigo) THEN + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + *-- EXTERNAL_CLASS identify external member Class names / EXTERNAL_CLASS identifica los nombres de las Clases externas + ENDTEXT + ENDIF + + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> Name="<>" Baseclass="<>" <> + ENDTEXT + + RETURN + ENDPROC + + ******************************************************************************************************************* PROCEDURE write_INCLUDE - LPARAMETERS toReg + LPARAMETERS toReg, tcCodigo *-- #INCLUDE IF NOT EMPTY(toReg.RESERVED8) THEN - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> #INCLUDE "<>" ENDTEXT ENDIF @@ -9463,14 +10043,14 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_CLASSMETADATA - LPARAMETERS toRegClass + LPARAMETERS toRegClass, tcCodigo *-- Agrego Metadatos de la clase (Baseclass, Timestamp, Scale, Uniqueid) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 <<>> <> Baseclass="<>" Timestamp="<>" @@ -9479,7 +10059,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDTEXT IF NOT EMPTY(toRegClass.OLE2) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 <<>> Nombre="<>" Parent="<>" ObjName="<>" @@ -9489,22 +10069,22 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF IF NOT EMPTY(toRegClass.RESERVED5) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 ProjectClassIcon="<>" ENDTEXT ENDIF IF NOT EMPTY(toRegClass.RESERVED4) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 ClassIcon="<>" ENDTEXT ENDIF - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 <> ENDTEXT - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + tcCodigo = tcCodigo + CR_LF RETURN ENDPROC @@ -9512,11 +10092,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_OBJECTMETADATA - LPARAMETERS toRegObj + LPARAMETERS toRegObj, tcCodigo LOCAL lcNombre *-- Agrego Metadatos de los objetos (Timestamp, UniqueID) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> ENDTEXT @@ -9528,14 +10108,14 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lcNombre = toRegObj.OBJNAME ENDIF - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 <<>> <> ObjPath="<>" UniqueID="<>" Timestamp="<>" ENDTEXT - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2+4+8 <> ENDTEXT @@ -9546,10 +10126,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_HIDDEN_Properties *-- Escribo la definición HIDDEN de propiedades - LPARAMETERS tcHiddenProp + LPARAMETERS tcHiddenProp, tcCodigo IF NOT EMPTY(tcHiddenProp) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> HIDDEN <> ENDTEXT ENDIF @@ -9561,10 +10141,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_PROTECTED_Properties *-- Escribo la definición PROTECTED de propiedades - LPARAMETERS tcProtectedProp + LPARAMETERS tcProtectedProp, tcCodigo IF NOT EMPTY(tcProtectedProp) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> PROTECTED <> ENDTEXT ENDIF @@ -9914,66 +10494,99 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Crea la definición del tag *< OLE: /> con la información de todos los objetos OLE LPARAMETERS toFoxBin2Prg - LOCAL lnOLECount, lcOLEChecksum, llOleExistente, loReg + *!* LOCAL lnOLECount, lcOLEChecksum, llOleExistente, loReg - #IF .F. - LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - #ENDIF + *!* #IF .F. + *!* LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + *!* #ENDIF - TRY - SELECT TABLABIN - SET ORDER TO PARENT_OBJ - lnOLECount = 0 + *!* TRY + *!* SELECT TABLABIN + *!* SET ORDER TO PARENT_OBJ + *!* lnOLECount = 0 - SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS = 'olecontrol' - loReg = NULL - SCATTER MEMO NAME loReg + *!* SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS = 'olecontrol' + *!* loReg = NULL + *!* SCATTER MEMO NAME loReg - IF toFoxBin2Prg.l_NoTimestamps - loReg.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loReg.UNIQUEID = '' - ENDIF + *!* IF toFoxBin2Prg.l_NoTimestamps + *!* loReg.TIMESTAMP = 0 + *!* ENDIF + *!* IF toFoxBin2Prg.l_ClearUniqueID + *!* loReg.UNIQUEID = '' + *!* ENDIF - lcOLEChecksum = SYS(2007, loReg.OLE, 0, 1) - llOleExistente = .F. + *!* lcOLEChecksum = SYS(2007, loReg.OLE, 0, 1) + *!* llOleExistente = .F. - IF lnOLECount > 0 AND ASCAN(laOLE, lcOLEChecksum, 1, 0, 0, 0) > 0 - llOleExistente = .T. - ENDIF + *!* IF lnOLECount > 0 AND ASCAN(laOLE, lcOLEChecksum, 1, 0, 0, 0) > 0 + *!* llOleExistente = .T. + *!* ENDIF - lnOLECount = lnOLECount + 1 - DIMENSION laOLE( lnOLECount ) - laOLE( lnOLECount ) = lcOLEChecksum + *!* lnOLECount = lnOLECount + 1 + *!* DIMENSION laOLE( lnOLECount ) + *!* laOLE( lnOLECount ) = lcOLEChecksum - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - ENDTEXT + *!* TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + *!* <<>> + *!* ENDTEXT - ENDSCAN + *!* ENDSCAN TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 * ENDTEXT - CATCH TO loEx - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF + *!* CATCH TO loEx + *!* IF THIS.l_Debug AND _VFP.STARTMODE = 0 + *!* SET STEP ON + *!* ENDIF - THROW + *!* THROW - FINALLY - loReg = NULL - RELEASE loReg + *!* FINALLY + *!* loReg = NULL + *!* RELEASE loReg - ENDTRY + *!* ENDTRY - RETURN + *!* RETURN ENDPROC + + PROCEDURE write_OutputFile + LPARAMETERS tcCodigo, tcOutputFile, toFoxBin2Prg + + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + LOCAL llFileExists + + llFileExists = FILE(tcOutputFile) + + IF llFileExists AND FILETOSTR( tcOutputFile ) == tcCodigo THEN + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + + ELSE + IF llFileExists THEN + toFoxBin2Prg.doBackup( .F., .T., '', '', '', tcOutputFile ) + toFoxBin2Prg.ChangeFileAttribute( tcOutputFile, '-R' ) + ENDIF + + IF STRTOFILE( tcCodigo, tcOutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDIF + ENDIF + + toFoxBin2Prg.normalizarCapitalizacionArchivos( .F., tcOutputFile ) + ENDPROC + + + ******************************************************************************************************************* PROCEDURE FixOle2Fields ******************************************************************************************************************* @@ -10066,10 +10679,12 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg TRY LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ; - , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count + , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ; + , lnClassCount, lcOutputFile, lcExternalHeader STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; - , lnMethodCount - STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs + , lnMethodCount, lnClassCount + STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses(1,2), lcOutputFile ; + , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' @@ -10080,8 +10695,6 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE SET ORDER TO 0 IN TABLABIN - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) .write_DefinicionObjetosOLE( toFoxBin2Prg ) @@ -10108,7 +10721,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" AND TABLABIN.RESERVED1=="Class" STORE 0 TO lnMethodCount - STORE '' TO laMethods, laCode + STORE '' TO laMethods, laCode, lcCodigo + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,2) loRegClass = NULL SCATTER MEMO NAME loRegClass @@ -10123,14 +10738,17 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDIF lcObjName = ALLTRIM(loRegClass.OBJNAME) + laClasses(lnClassCount,1) = LOWER(lcObjName) - .write_ENDDEFINE_SiCorresponde( lnLastClass ) + .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) - .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass ) + .write_DEFINE_CLASS_COMMENTS( @loRegClass, @lcCodigo ) - .write_DEFINE_CLASS_COMMENTS( @loRegClass ) + .write_CLASSMETADATA( @loRegClass, @lcCodigo ) - .write_CLASSMETADATA( @loRegClass ) + IF toFoxBin2Prg.l_UseClassPerFile + .write_EXTERNAL_CLASS_HEADER( @loRegClass, @toFoxBin2Prg, @lcExternalHeader ) + ENDIF *------------------------------------------------------------------------------- *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA EXPORTAR SU DEFINICIÓN @@ -10164,24 +10782,24 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ASORT(laObjs, 2, -1, 0, 0) && Orden por ZOrder IF lnObjCount > 0 - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + ' *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder ' + lcCodigo = lcCodigo + CR_LF + ' *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder ' FOR I = 1 TO lnObjCount - .write_OBJECTMETADATA( laObjs(I,1) ) + .write_OBJECTMETADATA( laObjs(I,1), @lcCodigo ) ENDFOR - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + lcCodigo = lcCodigo + CR_LF ENDIF - .write_INCLUDE( @loRegClass ) + .write_INCLUDE( @loRegClass, @lcCodigo ) .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; - , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count ) + , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo ) ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético (del SCAN original) FOR I = 1 TO lnObjCount - .write_ADD_OBJECTS_WithProperties( laObjs(I,1) ) + .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo ) ENDFOR @@ -10223,28 +10841,42 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDSCAN .write_ALL_OBJECT_METHODS( @lcMethods, @laMethods, @laCode, @lnMethodCount, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; - , lnProtected_Count, @toFoxBin2Prg ) + , lnProtected_Count, @toFoxBin2Prg, @lcCodigo ) GOTO RECORD (lnRecno) + .write_ENDDEFINE_SiCorresponde( lnLastClass, @lcCodigo ) + laClasses(lnClassCount,2) = lcCodigo ENDSCAN - .write_ENDDEFINE_SiCorresponde( lnLastClass ) + IF toFoxBin2Prg.l_UseClassPerFile + lcExternalHeader = lcExternalHeader + CR_LF + ENDIF *-- Genero el VC2 + lcOutputFile = .c_OutputFile + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE + IF .l_Test - toModulo = C_FB2PRG_CODE + FOR I = 1 TO lnClassCount + lcCodigo = lcCodigo + laClasses(I,2) + ENDFOR + toModulo = lcCodigo ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + IF toFoxBin2Prg.l_UseClassPerFile + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + + FOR I = 1 TO lnClassCount + lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDFOR + ELSE + FOR I = 1 TO lnClassCount + lcCodigo = lcCodigo + laClasses(I,2) + ENDFOR + + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDIF ENDIF ENDWITH && THIS @@ -10259,9 +10891,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) STORE NULL TO loRegClass, loRegObj - RELEASE lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods, laCode, laProtected, lnLen, lnObjCount ; + RELEASE toModulo, toEx, toFoxBin2Prg ; + , lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods, laCode, laProtected, lnLen, lnObjCount ; , laPropsAndValues, laPropsAndComments, lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle ; - , laObjs, I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count + , laObjs, I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; + , lcCodigo, laClasses, lnClassCount, lcOutputFile ENDTRY @@ -10295,10 +10929,12 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg TRY LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen, lnObjCount ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) ; - , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count + , laObjs(1,3), I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count, lcCodigo, laClasses(1,2) ; + , lnClassCount, lcOutputFile, lcExternalHeader STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; - , lnMethodCount - STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs + , lnMethodCount, lnClassCount + STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses(1,2), lcOutputFile ; + , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' @@ -10309,8 +10945,6 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE SET ORDER TO 0 IN TABLABIN - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) .write_DefinicionObjetosOLE( toFoxBin2Prg ) @@ -10350,7 +10984,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) STORE 0 TO lnMethodCount - STORE '' TO laMethods, laCode + STORE '' TO laMethods, laCode, lcCodigo + lnClassCount = lnClassCount + 1 + DIMENSION laClasses(lnClassCount,2) loRegClass = NULL SCATTER MEMO NAME loRegClass @@ -10365,14 +11001,17 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDIF lcObjName = ALLTRIM(loRegClass.OBJNAME) + laClasses(lnClassCount,1) = LOWER(lcObjName) - .write_ENDDEFINE_SiCorresponde( lnLastClass ) + .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) - .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass ) + .write_DEFINE_CLASS_COMMENTS( @loRegClass, @lcCodigo ) - .write_DEFINE_CLASS_COMMENTS( @loRegClass ) + .write_CLASSMETADATA( @loRegClass, @lcCodigo ) - .write_CLASSMETADATA( @loRegClass ) + IF toFoxBin2Prg.l_UseClassPerFile + .write_EXTERNAL_CLASS_HEADER( @loRegClass, @toFoxBin2Prg, @lcExternalHeader ) + ENDIF *------------------------------------------------------------------------------- *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA EXPORTAR SU DEFINICIÓN @@ -10406,25 +11045,25 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ASORT(laObjs, 2, -1, 0, 0) && Orden por ZOrder IF lnObjCount > 0 - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + ' *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder ' + lcCodigo = lcCodigo + CR_LF + ' *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder ' FOR I = 1 TO lnObjCount - .write_OBJECTMETADATA( laObjs(I,1) ) + .write_OBJECTMETADATA( laObjs(I,1), @lcCodigo ) ENDFOR - C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + lcCodigo = lcCodigo + CR_LF ENDIF - .write_INCLUDE( @loRegClass ) + .write_INCLUDE( @loRegClass, @lcCodigo ) .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; - , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count ) + , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo ) ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético de objetos (del SCAN original) FOR I = 1 TO lnObjCount - .write_ADD_OBJECTS_WithProperties( laObjs(I,1) ) + .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo ) ENDFOR @@ -10468,28 +11107,42 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDSCAN .write_ALL_OBJECT_METHODS( @lcMethods, @laMethods, @laCode, @lnMethodCount, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; - , lnProtected_Count, @toFoxBin2Prg ) + , lnProtected_Count, @toFoxBin2Prg, @lcCodigo ) GOTO RECORD (lnRecno) + .write_ENDDEFINE_SiCorresponde( lnLastClass, @lcCodigo ) + laClasses(lnClassCount,2) = lcCodigo ENDSCAN - .write_ENDDEFINE_SiCorresponde( lnLastClass ) + IF toFoxBin2Prg.l_UseClassPerFile + lcExternalHeader = lcExternalHeader + CR_LF + ENDIF *-- Genero el SC2 + lcOutputFile = .c_OutputFile + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE + IF .l_Test - toModulo = C_FB2PRG_CODE + FOR I = 1 TO lnClassCount + lcCodigo = lcCodigo + laClasses(I,2) + ENDFOR + toModulo = lcCodigo ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + IF toFoxBin2Prg.l_UseClassPerFile + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + + FOR I = 1 TO lnClassCount + lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDFOR + ELSE + FOR I = 1 TO lnClassCount + lcCodigo = lcCodigo + laClasses(I,2) + ENDFOR + + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDIF ENDIF ENDWITH && THIS @@ -10504,9 +11157,11 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) STORE NULL TO loRegClass, loRegObj - RELEASE lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods, laCode, laProtected, lnLen, lnObjCount ; + RELEASE toModulo, toEx, toFoxBin2Prg ; + , lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods, laCode, laProtected, lnLen, lnObjCount ; , laPropsAndValues, laPropsAndComments, lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle ; - , laObjs, I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count + , laObjs, I, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; + , lcCodigo, laClasses, lnClassCount, lcOutputFile ENDTRY @@ -10815,17 +11470,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg IF .l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) ENDIF ENDWITH && THIS @@ -10848,7 +11493,8 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) STORE NULL TO loProject, loReg, loServerHead, loServerData - RELEASE lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; + RELEASE toModulo, toEx, toFoxBin2Prg ; + , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; , loProject, loServerHead, loServerData ENDTRY @@ -11196,17 +11842,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg IF .l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) ENDIF ENDWITH && THIS @@ -11229,7 +11865,8 @@ 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 - RELEASE lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; + RELEASE toModulo, toEx, toFoxBin2Prg ; + , lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; , lcStrPJM, laLines, laProps, loProject, loServerHead, loServerData ENDTRY @@ -11371,17 +12008,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg IF .l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) ENDIF ENDWITH && THIS @@ -11397,7 +12024,8 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg USE IN (SELECT("TABLABIN")) USE IN (SELECT("TABLABIN_0")) STORE NULL TO loRegObj, loRegCab, loRegDataEnv, loRegCur - RELEASE lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods, laCode, laProtected, lnLen ; + RELEASE toModulo, toEx, toFoxBin2Prg ; + , lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods, laCode, laProtected, lnLen ; , laPropsAndValues, laPropsAndComments, lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle ENDTRY @@ -11471,17 +12099,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg IF .l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) ENDIF *-- Hook para permitir ejecución externa (por ejemplo, para exportar datos) @@ -11534,7 +12152,8 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg ENDFOR STORE NULL TO loTable, loDBFUtils - RELEASE lnCodError, laDatabases, lnDatabases_Count, laDatabases2, lnLen, lc_FileTypeDesc ; + RELEASE toModulo, toEx, toFoxBin2Prg ; + , lnCodError, laDatabases, lnDatabases_Count, laDatabases2, lnLen, lc_FileTypeDesc ; , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ; , loTable, loDBFUtils ENDTRY @@ -11588,17 +12207,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg IF .l_Test toModulo = C_FB2PRG_CODE ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) ENDIF ENDWITH && THIS @@ -11613,7 +12222,8 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) CLOSE DATABASES - + RELEASE toDatabase, toEx, toFoxBin2Prg ; + , lnCodError, laDatabases, lnDatabases_Count, lnLen ENDTRY RETURN @@ -11670,17 +12280,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg IF .l_Test toMenu = C_FB2PRG_CODE ELSE - lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE + .write_OutputFile( (C_FB2PRG_CODE), .c_OutputFile, @toFoxBin2Prg ) ENDIF ENDWITH && THIS @@ -11694,7 +12294,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) - + RELEASE toMenu, toEx, toFoxBin2Prg, lnCodError, lnLen ENDTRY RETURN @@ -11762,15 +12362,16 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM *--------------------------------------------------------------------------------------------------- LPARAMETERS tcLine, tcComment LOCAL ln_AT_Cmt - tcComment = '' ln_AT_Cmt = AT( '&'+'&', tcLine) IF ln_AT_Cmt > 0 tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) ) - *tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, ' ', CHR(9) ) && Quito espacios y TABS tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9) ) && Quito TABS + ELSE + tcComment = '' ENDIF + RELEASE tcLine, tcComment RETURN (ln_AT_Cmt > 0) ENDPROC @@ -11841,8 +12442,11 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION IF ln_AT_Cmt > 0 tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) ) tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9) ) && Quito TABS + ELSE + tcComment = '' ENDIF + RELEASE tcLine, tcComment RETURN (ln_AT_Cmt > 0) ENDPROC @@ -11869,6 +12473,8 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -11878,13 +12484,14 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE + [] - DIMENSION _Ole_Objs[1], _Clases[1] - _Version = 0 - _SourceFile = '' - _Ole_Obj_count = 0 - _Clases_Count = 0 - _includeFile = '' - _Comment = '' + DIMENSION _Ole_Objs[1], _Clases[1], _ExternalClasses(1) + _Version = 0 + _SourceFile = '' + _ExternalClasses_Count = 0 + _Ole_Obj_count = 0 + _Clases_Count = 0 + _includeFile = '' + _Comment = '' ************************************************************************************************ @@ -11977,6 +12584,7 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -12029,6 +12637,7 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE _Nombre = '' _ObjName = '' _Parent = '' + _Checked = .F. && Solo para Clases Externas: Permite saber si la clase fue checkeada contra la Clase Externa. _Definicion = '' _Class = '' _ClassLoc = '' @@ -13662,7 +14271,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE IF NOT EMPTY(._StoredProcedures) UPDATE TABLABIN ; - SET CODE = THIS._StoredProcedures ; + SET CODE = ._StoredProcedures ; WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ENDIF @@ -18911,7 +19520,8 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE FINALLY STORE NULL TO loReg - RELEASE lcText, loReg, lnPos, lcPadName, lcExpr, lcComment, lcProcName, lcProcCode, lnNegContainer, lnNegObject + RELEASE tcLine, taCodeLines, I, tnCodeLines, toConversor ; + , lcText, loReg, lnPos, lcPadName, lcExpr, lcComment, lcProcName, lcProcCode, lnNegContainer, lnNegObject ENDTRY @@ -19979,18 +20589,21 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -20009,35 +20622,38 @@ DEFINE CLASS CL_CFG AS CUSTOM *-- Configuration class. By default asumes master value, except when overriding one. - c_Foxbin2prg_FullPath = '' - c_Foxbin2prg_ConfigFile = '' - c_CurDir = '' - l_Debug = NULL - l_ShowErrors = NULL - l_ShowProgress = NULL - l_Recompile = NULL - l_NoTimestamps = NULL - l_ClearUniqueID = NULL - l_OptimizeByFilestamp = 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 - PJX_Conversion_Support = NULL - VCX_Conversion_Support = NULL - SCX_Conversion_Support = NULL - FRX_Conversion_Support = NULL - LBX_Conversion_Support = NULL - MNX_Conversion_Support = NULL - DBF_Conversion_Support = NULL - DBF_Conversion_Included = NULL - DBF_Conversion_Excluded = NULL - DBC_Conversion_Support = NULL + c_Foxbin2prg_FullPath = '' + c_Foxbin2prg_ConfigFile = '' + c_CurDir = '' + l_Debug = NULL + l_ShowErrors = NULL + l_ShowProgress = NULL + l_Recompile = NULL + l_NoTimestamps = NULL + l_ClearUniqueID = NULL + l_OptimizeByFilestamp = NULL + l_RedirectClassPerFileToMain = NULL + l_UseClassPerFile = NULL + 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 + PJX_Conversion_Support = NULL + VCX_Conversion_Support = NULL + SCX_Conversion_Support = NULL + FRX_Conversion_Support = NULL + LBX_Conversion_Support = NULL + MNX_Conversion_Support = NULL + DBF_Conversion_Support = NULL + DBF_Conversion_Included = NULL + DBF_Conversion_Excluded = NULL + DBC_Conversion_Support = NULL ENDDEFINE diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index 7d8eb60..b811b7b 100644 --- a/foxbin2prg_en.h +++ b/foxbin2prg_en.h @@ -14,11 +14,13 @@ #DEFINE C_DUPLICATED_FILE_LOC "Duplicated file" #DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "Cannot find end marker [ENDDEFINE] of line <> for ID [<>]" #DEFINE C_END_MARKER_NOT_FOUND_LOC "Cannot find end marker [<>] that closes start marker [<>] on line <>" +#DEFINE C_EXTENSION_RECONFIGURATION_LOC "Extension Reconfiguration:" +#DEFINE C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES "External class count (<>) does not match found classes (<>) for file [<>]" +#DEFINE C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND "External class [<>] is not found in file [<>]" #DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "Field [<>] not found in structure of file <>" #DEFINE C_FILE_DOESNT_EXIST_LOC 'File does not exist:' #DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC "File [<<.c_InputFile>>] is not supported" #DEFINE C_FILE_NOT_FOUND_LOC "File not found" -#DEFINE C_EXTENSION_RECONFIGURATION_LOC "Extension Reconfiguration:" #DEFINE C_FOXBIN2PRG_ERROR_CAPTION_LOC "FOXBIN2PRG: ERROR!!" #DEFINE C_FOXBIN2PRG_INFO_SINTAX_LOC "FOXBIN2PRG: SYNTAX INFO" #DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ; diff --git a/foxbin2prg_de.h b/foxbin2prg_ge.h similarity index 91% rename from foxbin2prg_de.h rename to foxbin2prg_ge.h index 1b3637c..ce53faf 100644 --- a/foxbin2prg_de.h +++ b/foxbin2prg_ge.h @@ -15,10 +15,12 @@ #DEFINE C_ENDDEFINE_MARKER_NOT_FOUND_LOC "Kann keinen Ende Marker [ENDDEFINE] in Zeile <> für die ID [<>] finden" #DEFINE C_END_MARKER_NOT_FOUND_LOC "Kann keinen Ende Marker [<>] welcher den Start Marker [<>] in Zeile <> schließt" #DEFINE C_FIELD_NOT_FOUND_ON_FILE_STRUCTURE_LOC "Feld [<>] nicht in der Struktur von Datei <> gefunden" -#DEFINE C_FILE_DOESNT_EXIST_LOC 'Datei existiert nicht:' +#DEFINE C_FILE_DOESNT_EXIST_LOC "Datei existiert nicht:" #DEFINE C_FILE_NAME_IS_NOT_SUPPORTED_LOC "Datei [<<.c_InputFile>>] wird nicht unterstützt" #DEFINE C_FILE_NOT_FOUND_LOC "Datei nicht gefunden" #DEFINE C_EXTENSION_RECONFIGURATION_LOC "Erweiterungsneukonfiguration:" +#DEFINE C_EXTERNAL_CLASS_COUNT_DOES_NOT_MATCH_FOUND_CLASSES "Externe Klassenzahl (<< toModulo._ExternalClasses_Count >>) nicht gefunden Klassen entsprechen (<< toModulo._Clases_Count >>) für Datei [<< toFoxBin2Prg.c_InputFile >>]" +#DEFINE C_EXTERNAL_CLASS_NAME_DOES_NOT_FOUND "Externe Klasse (<>) nicht in der Datei [<>] gefunden" #DEFINE C_FOXBIN2PRG_ERROR_CAPTION_LOC "FOXBIN2PRG: FEHLER!!" #DEFINE C_FOXBIN2PRG_INFO_SINTAX_LOC "FOXBIN2PRG: SYNTAX INFO" #DEFINE C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC "FOXBIN2PRG [,cType ,cTextName ,cGenText ,cDontShowErrors ,cDebug, cDontShowProgress, cOriginalFileName, cRecompile, cNoTimestamps]" + CR_LF + CR_LF ;