From 2663ce163d09033ce737545c4e7bffab96b329aa Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 22 Oct 2014 20:28:02 +0200 Subject: [PATCH 01/60] Changeset: 453 fdbozzo - 22/10/2014 20:26:09: - Agregado log interno v1.19.36 --- foxbin2prg.prg | 1 + 1 file changed, 1 insertion(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9c707d2..1e10043 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -106,6 +106,7 @@ * 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) * * *--------------------------------------------------------------------------------------------------- From ab97a5e7b196eda209a332a471483da4ea977aab Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 26 Oct 2014 14:54:15 +0100 Subject: [PATCH 02/60] =?UTF-8?q?Changeset:=20454=20fdbozzo=20-=2025/10/20?= =?UTF-8?q?14=2019:08:08:=20-=20Generaci=C3=B3n=20de=20VC2/SC2=20por=20cla?= =?UTF-8?q?se?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 300 ++++++++++++++++++++++++++++++------------------- 1 file changed, 184 insertions(+), 116 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1e10043..c1e16a0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -153,6 +153,7 @@ * 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) +* 21/10/2014 Ryan Harris MEJORA v1.19.36: Permitir generar una clase por archivo () * * *--------------------------------------------------------------------------------------------------- @@ -524,6 +525,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -587,6 +589,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_AllowMultiConfig = .T. l_DropNullCharsFromCode = .T. l_Recompile = .T. + l_UseFilePerClass = .F. l_NoTimestamps = .T. l_ClearUniqueID = .T. l_OptimizeByFilestamp = .F. @@ -729,6 +732,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE l_UseFilePerClass_ACCESS + IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) + RETURN THIS.l_UseFilePerClass + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_UseFilePerClass, THIS.l_UseFilePerClass ) + 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 @@ -1258,6 +1270,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) ENDIF + CASE LEFT( laConfig(I), 16 ) == LOWER('UseFilePerClass:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) ) + IF INLIST( lcValue, '0', '1' ) THEN + .l_UseFilePerClass = ( TRANSFORM(lcValue) == '1' ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > UseFilePerClass: ' + TRANSFORM(lcValue) ) + ENDIF + CASE LEFT( laConfig(I), 22 ) == LOWER('DropNullCharsFromCode:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 23 ) ) IF INLIST( lcValue, '0', '1' ) THEN @@ -1375,6 +1394,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) .writeLog( '> l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) .writeLog( '> l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) + .writeLog( '> l_UseFilePerClass: ' + TRANSFORM(.l_UseFilePerClass) ) .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) @@ -8332,6 +8352,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base + [] ; + [] ; + [] ; + + [] ; + [] ; + [] @@ -9110,7 +9131,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' @@ -9125,40 +9146,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="<>" @@ -9167,7 +9188,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 @@ -9186,7 +9207,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 @@ -9213,7 +9235,7 @@ 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 RETURN @@ -9223,7 +9245,7 @@ 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 @@ -9289,28 +9311,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 @@ -9331,7 +9353,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! @@ -9347,7 +9369,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 @@ -9362,27 +9384,27 @@ 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 ENDIF @@ -9392,7 +9414,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_DEFINE_CLASS - LPARAMETERS ta_NombresObjsOle, toRegClass + LPARAMETERS ta_NombresObjsOle, toRegClass, tcCodigo LOCAL lcOF_Classlib, llOleObject lcOF_Classlib = '' @@ -9403,7 +9425,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 @@ -9413,18 +9435,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 @@ -9436,9 +9458,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 @@ -9450,10 +9472,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* 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 @@ -9464,14 +9486,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="<>" @@ -9480,7 +9502,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="<>" @@ -9490,22 +9512,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 @@ -9513,11 +9535,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 @@ -9529,14 +9551,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 @@ -9547,10 +9569,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 @@ -9562,10 +9584,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 @@ -9975,6 +9997,25 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDPROC + + PROCEDURE write_OutputFile + LPARAMETERS tcCodigo, tcOutputFile, toFoxBin2Prg + + DO CASE + CASE FILE(tcOutputFile) AND FILETOSTR( tcOutputFile ) == tcCodigo + *.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) ) + + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( tcOutputFile, '-R' ) ; + AND 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)) + ENDCASE + ENDPROC + + + ******************************************************************************************************************* PROCEDURE FixOle2Fields ******************************************************************************************************************* @@ -10067,10 +10108,11 @@ 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 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 STORE NULL TO loRegClass, loRegObj WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' @@ -10085,8 +10127,6 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) - .write_DefinicionObjetosOLE( toFoxBin2Prg ) - *-- Escribo los métodos ordenados lnLastClass = 0 @@ -10109,7 +10149,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 @@ -10124,14 +10166,13 @@ 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 ) + .write_CLASSMETADATA( @loRegClass, @lcCodigo ) *------------------------------------------------------------------------------- *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA EXPORTAR SU DEFINICIÓN @@ -10165,24 +10206,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 @@ -10224,28 +10265,40 @@ 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 ) - *-- Genero el VC2 + lcOutputFile = .c_OutputFile + lcCodigo = 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_UseFilePerClass + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + + FOR I = 1 TO lnClassCount + .c_OutputFile = FORCEPATH( JUSTSTEM( lcOutputFile ), JUSTPATH( lcOutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( lcOutputFile ) + lcCodigo = laClasses(I,2) + .write_OutputFile( @lcCodigo, .c_OutputFile, @toFoxBin2Prg ) + ENDFOR + + .c_OutputFile = lcOutputFile + ELSE + FOR I = 1 TO lnClassCount + lcCodigo = lcCodigo + laClasses(I,2) + ENDFOR + + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDIF ENDIF ENDWITH && THIS @@ -10262,7 +10315,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg STORE NULL TO loRegClass, loRegObj RELEASE 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 @@ -10296,10 +10350,11 @@ 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 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 STORE NULL TO loRegClass, loRegObj WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' @@ -10314,8 +10369,6 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) - .write_DefinicionObjetosOLE( toFoxBin2Prg ) - *-- Escribo los métodos ordenados lnLastObj = 0 lnLastClass = 0 @@ -10351,7 +10404,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 @@ -10366,14 +10421,13 @@ 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 ) + .write_CLASSMETADATA( @loRegClass, @lcCodigo ) *------------------------------------------------------------------------------- *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA EXPORTAR SU DEFINICIÓN @@ -10407,25 +10461,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 @@ -10469,28 +10523,39 @@ 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 ) - *-- Genero el SC2 + lcOutputFile = .c_OutputFile + lcCodigo = 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_UseFilePerClass + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + + FOR I = 1 TO lnClassCount + .c_OutputFile = FORCEPATH( JUSTSTEM( lcOutputFile ), JUSTPATH( lcOutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( lcOutputFile ) + lcCodigo = laClasses(I,2) + .write_OutputFile( @lcCodigo, .c_OutputFile, @toFoxBin2Prg ) + ENDFOR + + ELSE + FOR I = 1 TO lnClassCount + lcCodigo = lcCodigo + laClasses(I,2) + ENDFOR + + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) + ENDIF ENDIF ENDWITH && THIS @@ -10507,7 +10572,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg STORE NULL TO loRegClass, loRegObj RELEASE 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 @@ -19992,6 +20058,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -20020,6 +20087,7 @@ DEFINE CLASS CL_CFG AS CUSTOM l_NoTimestamps = NULL l_ClearUniqueID = NULL l_OptimizeByFilestamp = NULL + l_UseFilePerClass = NULL n_ExtraBackupLevels = NULL c_VC2 = NULL c_SC2 = NULL From 797d67a5ff68177d63986b14fd35822ca0d5e774 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 26 Oct 2014 14:55:08 +0100 Subject: [PATCH 03/60] =?UTF-8?q?Changeset:=20455=20fdbozzo=20-=2026/10/20?= =?UTF-8?q?14=2014:54:16:=20-=20Librer=C3=ADa=20de=20Clases=20de=20ejemplo?= =?UTF-8?q?=20fb2p=5Ftest.vcx=20actualizada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/DATOS_READONLY/fb2p_test.vc2 | 13 +++++++++++-- TESTS/DATOS_READONLY/fb2p_test.vct | Bin 83582 -> 86861 bytes TESTS/DATOS_READONLY/fb2p_test.vcx | Bin 6373 -> 7028 bytes 3 files changed, 11 insertions(+), 2 deletions(-) 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 b6955e7b017f4ecc6609646e2f012c4fa4831fce..30bcaa6664706e4bc04525ea3458de2fcecf1116 100644 GIT binary patch delta 549 zcmey@!+LfZD?0;Yuqy)t!(_!Ev5g9k87E&5W^ZO^+Ro0zSne`8Aep_MKR+imDZex? zB{@H@q$ocJsF)FmaR_rK=fuM_Kvf!gq-LgPlqlFL7#bMxa)oE6lw`m-eu=rMK(-Q+ zE+t+rs7A0^>QLM9TgzxTIe=MY@^x>%dMqx$;Z_{NSPUS+3s#_@Lh}QOUf@A?!Q?XWxJS#B2O%wu5}Sg9V*^YQ%THr`go8=HCf^qCpgOtumHuauZqoS9sZZfIm` z6qAygmS#{LlLm~llAKg%)EQ0`G~-Fi0SX($q~&Gi#7v$nR6etqK$uE~+C$&*(IYA$}tDh%XvYnU4vx>%YRIT{+88Jn6K zn46n%yE8I?z*ILzh95u-0{h)2UlbP;*9J-{L8ZasK*GYEaq?_IGbT58pc1Re0?Ztf z{aLv*P0$UtFnI>mSpcLjL)o)Hy2QlUJQx}Nq8Tjg!8mz6s~MA`2a>^}-e6~17?}SG pf;i0$sP!q7oeN|mgXKW}dZ3(WFe3vG5F-PnV2JSs!7$?)r2yb!I4uAG delta 30 mcmexj_SBHofRB~Sa3iZ1>*W2CT$3YNlPBv)X)b=sDhvRT&j~aD From 8abb4f215cd1547e554a3683c3416c39095d23de Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 26 Oct 2014 15:42:59 +0100 Subject: [PATCH 04/60] Changeset: 456 fdbozzo - 26/10/2014 14:55:10: - Ensamblado de archivos VC2/SC2 multiparte en uno solo --- foxbin2prg.prg | 46 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c1e16a0..388aef9 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -5879,16 +5879,28 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, lcLine, laCodeLines(1), lnCodeLines ; + LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, 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 - C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + + IF toFoxBin2Prg.l_UseFilePerClass + *-- 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 ) + ASORT( laFiles, 1, 0, 0, 1) + + FOR I = 1 TO lnFileCount + C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) ) + ENDFOR + ENDIF + + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -5914,7 +5926,8 @@ 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, laLineasExclusion, lnBloquesExclusion, I ; + , lcInputFile, lnFileCount, laFiles ENDTRY RETURN @@ -6183,14 +6196,27 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, laCodeLines(1), lnCodeLines, lnFB2P_Version ; + LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, 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 - C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + + IF toFoxBin2Prg.l_UseFilePerClass + *-- 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 ) + ASORT( laFiles, 1, 0, 0, 1) + + FOR I = 1 TO lnFileCount + C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) ) + ENDFOR + ENDIF + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -6217,6 +6243,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin FINALLY USE IN (SELECT("TABLABIN")) + RELEASE lnCodError, laCodeLines, lnCodeLines, laLineasExclusion, lnBloquesExclusion, I ; + , lcInputFile, lnFileCount, laFiles ENDTRY RETURN @@ -7279,7 +7307,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' From c277e62875808434f12d992593ba1e6f3576c43c Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 28 Oct 2014 20:29:02 +0100 Subject: [PATCH 05/60] =?UTF-8?q?Changeset:=20457=20fdbozzo=20-=2026/10/20?= =?UTF-8?q?14=2015:43:01:=20-=20Cr=C3=A9ditos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 388aef9..6f6d7d8 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -153,7 +153,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) -* 21/10/2014 Ryan Harris MEJORA v1.19.36: Permitir generar una clase por archivo () +* 21/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) * * *--------------------------------------------------------------------------------------------------- From a345d4447608c0b55ce5276bfae15600548b1f22 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 30 Oct 2014 16:02:00 +0100 Subject: [PATCH 06/60] Changeset: 458 fdbozzo - 30/10/2014 15:51:39: - Condicionamiento de EXTERNAL --- foxbin2prg.prg | 174 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 127 insertions(+), 47 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1e10043..6a02321 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -107,6 +107,7 @@ * 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) +* 30/10/2014 FDBOZZO v1.19.37 Mejora: Optimizaciones y condicionamiento de EXTERNAL * * *--------------------------------------------------------------------------------------------------- @@ -2619,7 +2620,10 @@ 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 + + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taProps + ENDIF LOCAL llBloqueEncontrado, loEx AS EXCEPTION TRY @@ -3088,7 +3092,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 + + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taPropsAndValues + ENDIF LOCAL lcMetadatos, I, lnEqualSigns, lcNextVar, lcStr, lcVirtualMeta, lnPos1, lnPos2, lnLastPos, lnCantComillas STORE '' TO lcVirtualMeta @@ -3231,7 +3238,9 @@ DEFINE CLASS c_conversor_base AS SESSION * taLineasExclusion (@? OUT) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no * tnBloquesExclusion (@? OUT) Cantidad de bloques de exclusión *-------------------------------------------------------------------------------------------------------------- - EXTERNAL ARRAY ta_ID_Bloques, taLineasExclusion + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY ta_ID_Bloques, taLineasExclusion + ENDIF TRY LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine @@ -3333,17 +3342,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 @@ -3651,7 +3649,10 @@ 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 + + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taPropsAndValues + ENDIF TRY LOCAL I, X, lnArrayCols, laPropsAndValues(1,2), lcPropName, lcSortedMemo, lcMethods @@ -4896,7 +4897,10 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base PROCEDURE analizarLineasDeProcedure LPARAMETERS toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ; , taLineasExclusion, tnBloquesExclusion - EXTERNAL ARRAY taCodeLines + + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines + ENDIF #IF .F. LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' @@ -4974,7 +4978,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base PROCEDURE analizarBloque_ADD_OBJECT LPARAMETERS toModulo, toClase, tcLine, I, taCodeLines, tnCodeLines - EXTERNAL ARRAY taCodeLines + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines + ENDIF #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' @@ -5200,7 +5206,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; , taLineasExclusion, tnBloquesExclusion, tc_Comentario - EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taLineasExclusion + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taLineasExclusion + ENDIF #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' @@ -5437,7 +5445,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base PROCEDURE analizarBloque_CLASSCOMMENTS LPARAMETERS toClase, tcLine ,taCodeLines, tnCodeLines, I - EXTERNAL ARRAY taCodeLines + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines + ENDIF #IF .F. LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' @@ -5757,7 +5767,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo - EXTERNAL ARRAY taCodeLines, taLineasExclusion + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines, taLineasExclusion + ENDIF #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' @@ -6652,7 +6664,9 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- - EXTERNAL ARRAY taCodeLines, taLineasExclusion + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines, taLineasExclusion + ENDIF #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' @@ -6985,7 +6999,10 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin *------------------------------------------------------ LPARAMETERS toProject, tcLine, taCodeLines, I, tnCodeLines - EXTERNAL ARRAY toProject + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY toProject + ENDIF + #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7047,7 +7064,10 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin *------------------------------------------------------ LPARAMETERS toProject, tcLine, taCodeLines, I, tnCodeLines - EXTERNAL ARRAY toProject + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY toProject + ENDIF + #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7109,7 +7129,10 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin *------------------------------------------------------ LPARAMETERS toProject, tcLine, taCodeLines, I, tnCodeLines - EXTERNAL ARRAY toProject + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY toProject + ENDIF + #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' #ENDIF @@ -7406,7 +7429,9 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- - EXTERNAL ARRAY taCodeLines, taLineasExclusion + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines, taLineasExclusion + ENDIF #IF .F. LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' @@ -7887,7 +7912,10 @@ 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. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines, taLineasExclusion + ENDIF #IF .F. LOCAL toTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' @@ -8063,7 +8091,10 @@ 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. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines, taLineasExclusion + ENDIF #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' @@ -8197,7 +8228,10 @@ 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. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taCodeLines, taLineasExclusion + ENDIF #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' @@ -8358,7 +8392,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base , taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count ; , toFoxBin2Prg - EXTERNAL ARRAY taPropsAndComments, taProtected + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taPropsAndComments, taProtected + ENDIF + #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -8420,7 +8457,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS tnMethodCount, taMethods, taCode, taProtected, taPropsAndComments *-- DEFINIR MÉTODOS DE LA CLASE *-- Ubico los métodos protegidos y les cambio la definición - EXTERNAL ARRAY taMethods, taCode, taProtected, taPropsAndComments + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taMethods, taCode, taProtected, taPropsAndComments + ENDIF TRY LOCAL lcMethod, lcMethodName, lnProtectedItem, lnCommentRow, lcProcDef, lcMethods, lnLen @@ -8506,7 +8545,10 @@ 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 + + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taPropsAndComments + ENDIF TRY LOCAL laLines(1), I, lnPos, loEx AS EXCEPTION @@ -8565,7 +8607,11 @@ 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 + + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taPropsAndValues + ENDIF + TRY LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods tcSortedMemo = '' @@ -8671,7 +8717,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 + + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taProtected + ENDIF tcSortedMemo = '' tnProtected_Count = ALINES(taProtected, tcMemo, 1+4) @@ -8796,7 +8845,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE set_MultilineMemoWithAddObjectProperties LPARAMETERS taPropsAndValues, tnPropCount, tcLeftIndentation, tlNormalizeLine - EXTERNAL ARRAY taPropsAndValues + + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taPropsAndValues + ENDIF TRY LOCAL lcLine, I, lcComentarios, laLines(1), lcFinDeLinea @@ -8833,7 +8885,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; , taProtected, tnProtected_Count, toFoxBin2Prg - EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected + ENDIF + #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -8898,7 +8953,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- 29/10/2013 Fernando D. Bozzo *-- 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. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected + ENDIF + #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -9225,7 +9283,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS toRegClass, taPropsAndValues, taPropsAndComments, taProtected ; , tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count - EXTERNAL ARRAY taPropsAndValues, taPropsAndComments + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taPropsAndValues, taPropsAndComments + ENDIF TRY LOCAL lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd, I ; @@ -12712,7 +12772,9 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS tcName, tcType, taProperties, tnProperty_Count - EXTERNAL ARRAY taProperties && STRUCTURE: PropName,RecordLen,DataIDLen,DataID,DataType,Data + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taProperties && STRUCTURE: PropName,RecordLen,DataIDLen,DataID,DataType,Data + ENDIF TRY LOCAL lcValue, leValue, lnSelect, laProperty(1,1), lnRecordLen, lcBinRecord, lnPropertyID ; @@ -14176,7 +14238,9 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taTables, tnTable_Count - EXTERNAL ARRAY taTables + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taTables + ENDIF TRY LOCAL I, lcText, loEx AS EXCEPTION ; @@ -15113,7 +15177,9 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taViews, tnView_Count - EXTERNAL ARRAY taViews + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taViews + ENDIF TRY LOCAL I, lcText, lcDBC, lnField_Count, laFields(1), loEx AS EXCEPTION ; @@ -15878,7 +15944,9 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS tcTable, taRelations, tnRelation_Count - EXTERNAL ARRAY taRelations + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taRelations + ENDIF TRY LOCAL I, X, lcText, loEx AS EXCEPTION ; @@ -16398,7 +16466,9 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, tnField_Count - EXTERNAL ARRAY taFields + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taFields + ENDIF TRY LOCAL I, lcText, loEx AS EXCEPTION ; @@ -16559,7 +16629,9 @@ DEFINE CLASS CL_DBF_FIELD AS CL_CUS_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, I - EXTERNAL ARRAY taFields + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taFields + ENDIF TRY LOCAL I, lcText, loEx AS EXCEPTION @@ -16685,7 +16757,9 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taTagInfo, tnTagInfo_Count, tc_InputFile - EXTERNAL ARRAY taTagInfo + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taTagInfo + ENDIF TRY LOCAL I, lcText, loEx AS EXCEPTION ; @@ -16825,7 +16899,9 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taTagInfo, I - EXTERNAL ARRAY taTagInfo + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taTagInfo + ENDIF TRY LOCAL I, lcText, loEx AS EXCEPTION @@ -16890,7 +16966,9 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, tnField_Count, tc_DBF_Conversion_Condition - EXTERNAL ARRAY taFields + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taFields + ENDIF TRY LOCAL lcText, loEx AS EXCEPTION ; @@ -16968,7 +17046,9 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, tnField_Count - EXTERNAL ARRAY taFields + IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. + EXTERNAL ARRAY taFields + ENDIF TRY LOCAL I, lcText, loEx AS EXCEPTION, lcField, luValue, lcFieldType From 6ccc52428a276525ac0c0f288822e8221e61e776 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 30 Oct 2014 16:31:02 +0100 Subject: [PATCH 07/60] Changeset: 459 fdbozzo - 30/10/2014 16:02:08: - Quitados THIS sobrantes --- foxbin2prg.prg | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 6a02321..2d009c6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1579,7 +1579,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- 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 @@ -3146,12 +3146,13 @@ 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 RETURN (ln_AT_Cmt > 0) @@ -3272,7 +3273,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 @@ -3298,7 +3299,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 @@ -4744,7 +4745,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() @@ -4829,7 +4830,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() @@ -6012,7 +6013,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() @@ -6315,7 +6316,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() @@ -6554,7 +6555,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') @@ -6594,7 +6595,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') @@ -7347,7 +7348,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() @@ -13725,7 +13726,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 From a8fab054e5990af1ab9d024f673ecaa608ced473 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 3 Nov 2014 22:38:43 +0100 Subject: [PATCH 08/60] =?UTF-8?q?Changeset:=20461=20fdbozzo=20-=2002/11/20?= =?UTF-8?q?14=2019:36:59:=20-=20Renombrado=20de=20FilePerClass=20a=20Class?= =?UTF-8?q?PerFile,=20que=20es=20l=C3=A9xicamente=20m=C3=A1s=20correcto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 6f6d7d8..85069c6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -153,7 +153,7 @@ * 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) -* 21/10/2014 Lutz Scheffler MEJORA v1.19.36: Permitir generar una clase por archivo (pregunta) +* 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) * * @@ -526,7 +526,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -590,7 +590,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_AllowMultiConfig = .T. l_DropNullCharsFromCode = .T. l_Recompile = .T. - l_UseFilePerClass = .F. + l_UseClassPerFile = .F. l_NoTimestamps = .T. l_ClearUniqueID = .T. l_OptimizeByFilestamp = .F. @@ -733,11 +733,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC - PROCEDURE l_UseFilePerClass_ACCESS + PROCEDURE l_UseClassPerFile_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) - RETURN THIS.l_UseFilePerClass + RETURN THIS.l_UseClassPerFile ELSE - RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_UseFilePerClass, THIS.l_UseFilePerClass ) + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_UseClassPerFile, THIS.l_UseClassPerFile ) ENDIF ENDPROC @@ -1271,11 +1271,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) ) ENDIF - CASE LEFT( laConfig(I), 16 ) == LOWER('UseFilePerClass:') + CASE LEFT( laConfig(I), 16 ) == LOWER('UseClassPerFile:') lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) ) IF INLIST( lcValue, '0', '1' ) THEN - .l_UseFilePerClass = ( TRANSFORM(lcValue) == '1' ) - .writeLog( JUSTFNAME(lcConfigFile) + ' > UseFilePerClass: ' + TRANSFORM(lcValue) ) + .l_UseClassPerFile = ( TRANSFORM(lcValue) == '1' ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > UseClassPerFile: ' + TRANSFORM(lcValue) ) ENDIF CASE LEFT( laConfig(I), 22 ) == LOWER('DropNullCharsFromCode:') @@ -1395,7 +1395,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) .writeLog( '> l_NoTimestamps: ' + TRANSFORM(.l_NoTimestamps) ) .writeLog( '> l_ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) - .writeLog( '> l_UseFilePerClass: ' + TRANSFORM(.l_UseFilePerClass) ) + .writeLog( '> l_UseClassPerFile: ' + TRANSFORM(.l_UseClassPerFile) ) .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) @@ -5890,7 +5890,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - IF toFoxBin2Prg.l_UseFilePerClass + 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 ) @@ -6207,7 +6207,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - IF toFoxBin2Prg.l_UseFilePerClass + 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 ) @@ -10311,7 +10311,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDFOR toModulo = lcCodigo ELSE - IF toFoxBin2Prg.l_UseFilePerClass + IF toFoxBin2Prg.l_UseClassPerFile .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) FOR I = 1 TO lnClassCount @@ -10569,7 +10569,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDFOR toModulo = lcCodigo ELSE - IF toFoxBin2Prg.l_UseFilePerClass + IF toFoxBin2Prg.l_UseClassPerFile .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) FOR I = 1 TO lnClassCount @@ -20087,7 +20087,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -20116,7 +20116,7 @@ DEFINE CLASS CL_CFG AS CUSTOM l_NoTimestamps = NULL l_ClearUniqueID = NULL l_OptimizeByFilestamp = NULL - l_UseFilePerClass = NULL + l_UseClassPerFile = NULL n_ExtraBackupLevels = NULL c_VC2 = NULL c_SC2 = NULL From ef5ee5a187ef6c699fd68259cb0bc2660ea281cf Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 3 Nov 2014 23:58:57 +0100 Subject: [PATCH 09/60] =?UTF-8?q?Changeset:=20462=20fdbozzo=20-=2003/11/20?= =?UTF-8?q?14=2022:38:45:=20-=20Normalizaci=C3=B3n=20del=20m=C3=A9todo=20d?= =?UTF-8?q?oBackup()=20-=20Normalizaci=C3=B3n=20del=20m=C3=A9todo=20normal?= =?UTF-8?q?izarCapitalizacionArchivos()=20-=20Encapsulaci=C3=B3n=20de=20fu?= =?UTF-8?q?ncionalidad=20en=20m=C3=A9todo=20write=5FOutputFile()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 276 ++++++++++++++++++------------------------------- 1 file changed, 101 insertions(+), 175 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 85069c6..74689ca 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1059,23 +1059,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' ) @@ -1085,43 +1088,55 @@ 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) ) - *-- LOG - DO CASE - CASE EMPTY(lcExt_2) - .writeLog( C_BACKUP_OF_LOC + FORCEEXT(.c_OutputFile,lcExt_1) ) - CASE EMPTY(lcExt_3) - .writeLog( C_BACKUP_OF_LOC + FORCEEXT(.c_OutputFile,lcExt_1) + '/' + lcExt_2 ) - OTHERWISE - .writeLog( C_BACKUP_OF_LOC + FORCEEXT(.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) - ENDCASE + IF NOT EMPTY(lcExt_1) + tcOutputFile_Ext1 = FORCEEXT(tcOutputFile, lcExt_1) - *-- COPIA BACKUP - COPY FILE ( FORCEEXT(.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) + IF FILE( tcOutputFile_Ext1 ) + *-- LOG + DO CASE + CASE EMPTY(lcExt_2) + .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 ) + CASE EMPTY(lcExt_3) + .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 ) + OTHERWISE + .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 + '/' + lcExt_3 ) + ENDCASE - IF NOT EMPTY(lcExt_2) AND FILE( FORCEEXT(.c_OutputFile, lcExt_2) ) - COPY FILE ( FORCEEXT(.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) - ENDIF + *-- COPIA BACKUP + COPY FILE ( tcOutputFile_Ext1 ) TO ( tcBakFile_1 ) - IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(.c_OutputFile, lcExt_3) ) - COPY FILE ( FORCEEXT(.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) + IF NOT EMPTY(lcExt_2) + tcOutputFile_Ext2 = FORCEEXT(tcOutputFile, lcExt_2) + + 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 @@ -1136,6 +1151,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THROW ENDIF + FINALLY + RELEASE lcNext_Bak, lcExt_1, lcExt_2, lcExt_3, tcOutputFile_Ext1, tcOutputFile_Ext2, tcOutputFile_Ext3 ; + , tcOutputFile ENDTRY RETURN @@ -2235,16 +2253,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 @@ -2270,82 +2298,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( tcFileName, lcEXE_CAPS, loFSO, llRelanzarError ) - *-- Normalizar archivo(s) de entrada. El primero siempre se normaliza (??2, ??X, DBF, DBC) - .RenameFile( .c_InputFile, lcEXE_CAPS, loFSO, .F. ) + DO CASE + CASE lcType = 'PJX' + .RenameFile( FORCEEXT(tcFileName,'PJT'), lcEXE_CAPS, loFSO, llRelanzarError ) - DO CASE - CASE lcType = 'PJX' - .RenameFile( FORCEEXT(.c_InputFile,'PJT'), lcEXE_CAPS, loFSO, .F. ) + CASE lcType = 'VCX' + .RenameFile( FORCEEXT(tcFileName,'VCT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'VCX' - .RenameFile( FORCEEXT(.c_InputFile,'VCT'), lcEXE_CAPS, loFSO, .F. ) + CASE lcType = 'SCX' + .RenameFile( FORCEEXT(tcFileName,'SCT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'SCX' - .RenameFile( FORCEEXT(.c_InputFile,'SCT'), lcEXE_CAPS, loFSO, .F. ) + CASE lcType = 'FRX' + .RenameFile( FORCEEXT(tcFileName,'FRT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'FRX' - .RenameFile( FORCEEXT(.c_InputFile,'FRT'), lcEXE_CAPS, loFSO, .F. ) + CASE lcType = 'LBX' + .RenameFile( FORCEEXT(tcFileName,'LBT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'LBX' - .RenameFile( FORCEEXT(.c_InputFile,'LBT'), lcEXE_CAPS, loFSO, .F. ) + CASE lcType = 'DBF' + IF FILE( FORCEEXT(tcFileName,'FPT') ) + .RenameFile( FORCEEXT(tcFileName,'FPT'), lcEXE_CAPS, loFSO, llRelanzarError ) + ENDIF + IF FILE( FORCEEXT(tcFileName,'CDX') ) + .RenameFile( FORCEEXT(tcFileName,'CDX'), lcEXE_CAPS, loFSO, llRelanzarError ) + ENDIF - CASE lcType = 'DBF' - IF FILE( FORCEEXT(.c_InputFile,'FPT') ) - .RenameFile( FORCEEXT(.c_InputFile,'FPT'), lcEXE_CAPS, loFSO, .F. ) - ENDIF - IF FILE( FORCEEXT(.c_InputFile,'CDX') ) - .RenameFile( FORCEEXT(.c_InputFile,'CDX'), lcEXE_CAPS, loFSO, .F. ) - ENDIF + CASE lcType = 'DBC' + .RenameFile( FORCEEXT(tcFileName,'DCX'), lcEXE_CAPS, loFSO, llRelanzarError ) + .RenameFile( FORCEEXT(tcFileName,'DCT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'DBC' - .RenameFile( FORCEEXT(.c_InputFile,'DCX'), lcEXE_CAPS, loFSO, .F. ) - .RenameFile( FORCEEXT(.c_InputFile,'DCT'), lcEXE_CAPS, loFSO, .F. ) + CASE lcType = 'MNX' + .RenameFile( FORCEEXT(tcFileName,'MNT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'MNX' - .RenameFile( FORCEEXT(.c_InputFile,'MNT'), lcEXE_CAPS, loFSO, .F. ) + ENDCASE - 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 @@ -2353,6 +2341,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY loFSO = NULL + RELEASE lcPath, lcEXE_CAPS, lcOutputFile, llRelanzarError, lcType, loFSO ENDTRY @@ -10035,7 +10024,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *.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) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '', tcOutputFile ) ; AND toFoxBin2Prg.ChangeFileAttribute( tcOutputFile, '-R' ) ; AND STRTOFILE( tcCodigo, tcOutputFile ) = 0 *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' @@ -10315,12 +10304,10 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) FOR I = 1 TO lnClassCount - .c_OutputFile = FORCEPATH( JUSTSTEM( lcOutputFile ), JUSTPATH( lcOutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( lcOutputFile ) + lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) lcCodigo = laClasses(I,2) - .write_OutputFile( @lcCodigo, .c_OutputFile, @toFoxBin2Prg ) + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) ENDFOR - - .c_OutputFile = lcOutputFile ELSE FOR I = 1 TO lnClassCount lcCodigo = lcCodigo + laClasses(I,2) @@ -10573,11 +10560,10 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) FOR I = 1 TO lnClassCount - .c_OutputFile = FORCEPATH( JUSTSTEM( lcOutputFile ), JUSTPATH( lcOutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( lcOutputFile ) + lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) lcCodigo = laClasses(I,2) - .write_OutputFile( @lcCodigo, .c_OutputFile, @toFoxBin2Prg ) + .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) ENDFOR - ELSE FOR I = 1 TO lnClassCount lcCodigo = lcCodigo + laClasses(I,2) @@ -10911,17 +10897,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 @@ -11292,17 +11268,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 @@ -11467,17 +11433,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 @@ -11567,17 +11523,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) @@ -11684,17 +11630,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 @@ -11766,17 +11702,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 From d0af318639e07009f0747ccc6503db9068c22e29 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 4 Nov 2014 00:14:19 +0100 Subject: [PATCH 10/60] =?UTF-8?q?Changeset:=20463=20fdbozzo=20-=2003/11/20?= =?UTF-8?q?14=2023:59:00:=20-=20Normalizaci=C3=B3n=20de=20los=20InputFile?= =?UTF-8?q?=5FClass?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 74689ca..907d7d5 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -5869,7 +5869,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lnFileCount, laFiles(1,5) ; + 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' @@ -5886,7 +5886,9 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ASORT( laFiles, 1, 0, 0, 1) FOR I = 1 TO lnFileCount - C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) ) + lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) + C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) ENDFOR ENDIF @@ -5917,7 +5919,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin FINALLY USE IN (SELECT("TABLABIN")) RELEASE lnCodError, laCodeLines, lnCodeLines, laLineasExclusion, lnBloquesExclusion, I ; - , lcInputFile, lnFileCount, laFiles + , lcInputFile, lcInputFile_Class, lnFileCount, laFiles ENDTRY RETURN @@ -6186,7 +6188,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, laCodeLines(1), lnCodeLines, lcInputFile, lnFileCount, laFiles(1,5) ; + 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' @@ -6203,7 +6205,9 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ASORT( laFiles, 1, 0, 0, 1) FOR I = 1 TO lnFileCount - C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) ) + lcInputFile_Class = FORCEPATH( JUSTSTEM( laFiles(I,1) ), JUSTPATH( .c_InputFile ) ) + '.' + JUSTEXT( .c_InputFile ) + toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) + C_FB2PRG_CODE = C_FB2PRG_CODE + FILETOSTR( lcInputFile_Class ) ENDFOR ENDIF @@ -6234,7 +6238,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin FINALLY USE IN (SELECT("TABLABIN")) RELEASE lnCodError, laCodeLines, lnCodeLines, laLineasExclusion, lnBloquesExclusion, I ; - , lcInputFile, lnFileCount, laFiles + , lcInputFile, lcInputFile_Class, lnFileCount, laFiles ENDTRY RETURN @@ -10019,17 +10023,25 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE write_OutputFile LPARAMETERS tcCodigo, tcOutputFile, toFoxBin2Prg - DO CASE - CASE FILE(tcOutputFile) AND FILETOSTR( tcOutputFile ) == tcCodigo + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + IF FILE(tcOutputFile) AND FILETOSTR( tcOutputFile ) == tcCodigo *.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) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '', tcOutputFile ) ; - AND toFoxBin2Prg.ChangeFileAttribute( tcOutputFile, '-R' ) ; - AND 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)) - ENDCASE + ELSE + toFoxBin2Prg.doBackup( .F., .T., '', '', '', tcOutputFile ) + toFoxBin2Prg.ChangeFileAttribute( tcOutputFile, '-R' ) + + 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)) + ELSE + toFoxBin2Prg.normalizarCapitalizacionArchivos( .F., tcOutputFile ) + ENDIF + ENDIF ENDPROC From 133aaea79c8a3db9af1198e51655bb7d948723d9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 5 Nov 2014 20:06:43 +0100 Subject: [PATCH 11/60] =?UTF-8?q?Changeset:=20464=20fdbozzo=20-=2004/11/20?= =?UTF-8?q?14=2021:45:13:=20-=20Arreglo=20problema=20capitalizaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 907d7d5..31d27f6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -5882,7 +5882,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin 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 ) + lnFileCount = ADIR( laFiles, lcInputFile, "", 1 ) ASORT( laFiles, 1, 0, 0, 1) FOR I = 1 TO lnFileCount @@ -6201,9 +6201,9 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin 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 ) + 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 ) toFoxBin2Prg.normalizarCapitalizacionArchivos( .T., lcInputFile_Class ) @@ -10026,22 +10026,28 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF + + LOCAL llFileExists + + llFileExists = FILE(tcOutputFile) - IF FILE(tcOutputFile) AND FILETOSTR( tcOutputFile ) == tcCodigo + 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 - toFoxBin2Prg.doBackup( .F., .T., '', '', '', tcOutputFile ) - toFoxBin2Prg.ChangeFileAttribute( tcOutputFile, '-R' ) - + 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)) - ELSE - toFoxBin2Prg.normalizarCapitalizacionArchivos( .F., tcOutputFile ) ENDIF ENDIF + + toFoxBin2Prg.normalizarCapitalizacionArchivos( .F., tcOutputFile ) ENDPROC From 56064ce7a771a38ce3e578a4482a816c6f22ad4e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 5 Nov 2014 20:50:58 +0100 Subject: [PATCH 12/60] Changeset: 465 fdbozzo - 05/11/2014 20:06:45: - Uso de Filename_caps como objeto --- filename_caps.exe | Bin 29493 -> 30077 bytes foxbin2prg.prg | 9 ++++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/filename_caps.exe b/filename_caps.exe index 125449623871366371f2f5a83154b2aa7491e73f..056049b1f26cc7f5a6d4cfe8b2f3bf547f12a1b5 100644 GIT binary patch delta 1299 zcmZWpTTC2P82--e?9A=}-G#y~vJ{qDtTeqL)+;2g!z_|)cX5}kw5Th}78V9rC?-}# zL}Oy(C8@{8;6odl_+a9V5*~T6_Ep=&KKNuztwwn8Qo=%Z=fr=8dW$FX@Ba7m{r@@V zU;c?%tLzI;zt;r`_Hyyc{*dQ^Z@*zk&0ppB_CLeg___W=tZnH^f2T+3s042Mxo@y` z_L1e3o-~YjM%S5|lMm%!V$mo%t)a7C&qO&EHSBoSBLKJ7P6%i59XewjG26gad>Fgad>FgkxRB zMj0&O#iJ$iw1f-ka%kw)quu<~eC#0&F=Dr&xe-f5<9Y@DQaD&$=t*|TWHS0R5cuxi zNUZyWF~f%jo8-JE-sf)*nyOj|P_;o`7(B#+d~f!xz%5Bsp}9nWiVRVowdG!6BFX25 zgZ%rfKKrXAe1yKnM!zZfpR%af=8{f|O-bu0YP4%YH#*ZvBV0|fJ0wv@?g6J63}M@k zNxL=~Q!L>@Xv=-4Br0xukk%418bpW`%nq^hQt*>S7xZY?>Qze;aR*BJq|Vm({K;YY zE?IOqs`{Z$X}8Ru9r}tb^1Z{Y>{EVxcn|w{>6PJ^8Jpt8T&r)~OPkd`w&ji}TkaQB zes-jW_l&qDQ{hjHw6G8O+{ixmCI4h(UvN!va8(hEf{#wXgL|BiNpruHQTYW^=TDC| zDreL!cbS*Bnl(z=F8DG(Kl&iE=r_b~jW$U4d-#RXI)1=xkS9E%o-d46?ek8#G98@^0`iVVtz6me@z4C-@ql&*80im`iI<#+E8{aAb;u}13H!s!x`ILo3Y}@i zwonhHsFKCZjc3D(ZrgW}_dgB|e0HLS-QedYjy*h9F3RZ4g4C=ZEvIj=`&LC*ea`i$ z#$nn!S1$aHSdIma4~v68Ues>Y>^$4CF!j69*$s< zy$0QT2@6t$UBetvg#Cdg*5r<04!?s*3v3Rg#U;j9Cci$?hKulPt#+pWES02y2J|%n lhlziK$nw(MA^9NxaO(8#n>2~+$rL5}d%YgH&Cbwp`xDo;oGbtU delta 723 zcmYL{Ur5tY6vxlG?)USz&H0_!#;Bm_)ZhG*B^f0s z(MvraDcE}m zoix^a*KtP}a~E;3r_ zM_(m|o zitfjH3h4FNO)GQ!LVQKnrUG;Q8j60R+h{JT(ZVum|%fSszBZ;<{iC%C|)CL`F#&(|4;Bz z)2I{2DLmS997+r;>*Hj7R&xcZATL!p^Qp|Dr7NI`t7ff+y%3hbtcBw>tKnyS7kwXX z!M#)+@1$E-rpYmO#`hCn;%#`Vyny|=YhKe)72r1{3-PZ2 diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 31d27f6..b58225c 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -535,6 +535,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -605,6 +606,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM o_Conversor = NULL o_Frm_Avance = NULL o_FSO = NULL + o_FNC = NULL && Filename_caps object o_Configuration = NULL run_AfterCreateTable = '' run_AfterCreate_DB2 = '' @@ -672,6 +674,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY THIS.o_FSO = NULL + THIS.o_FNC = NULL + SET PROCEDURE TO ENDTRY RETURN @@ -2280,6 +2284,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. @@ -2358,7 +2365,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 From 6b511185dad33e857940e7f8beaf3ca0d9fb4fc5 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 8 Nov 2014 23:59:53 +0100 Subject: [PATCH 13/60] Changeset: 466 fdbozzo - 06/11/2014 19:24:28: - Nuevo switch RedirectClassPerFileToMain, para forzar a que si se elije un archivo.clase.vc2 se redirija al archivo.vc2 principal - Nuevo switch ClassPerFileCheck, para verificar que las clases anotadas coinciden con las externas --- FoxBin2Prg__kompilieren_auf_Deutsch.vbs | 2 +- foxbin2prg.prg | 879 +++++++++++++++++------- foxbin2prg_en.h | 4 +- foxbin2prg_de.h => foxbin2prg_ge.h | 4 +- 4 files changed, 620 insertions(+), 269 deletions(-) rename foxbin2prg_de.h => foxbin2prg_ge.h (91%) 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/foxbin2prg.prg b/foxbin2prg.prg index b58225c..98c4273 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -196,6 +196,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) @@ -388,11 +391,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 ; @@ -510,29 +515,31 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + [] ; - + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; - + [] ; + + [] ; + [] ; + + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; - + [] ; + [] ; + [] ; + + [] ; + [] ; - + [] ; - + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -561,73 +568,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_UseClassPerFile = .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 = '' + 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 @@ -746,6 +755,24 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM 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 @@ -1239,7 +1266,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:') @@ -1248,133 +1275,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) ) + .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 @@ -1412,16 +1453,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_UseClassPerFile: ' + TRANSFORM(.l_UseClassPerFile) ) - .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 @@ -1432,7 +1475,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 @@ -1545,8 +1588,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) @@ -1618,7 +1661,7 @@ 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 @@ -1943,6 +1986,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 @@ -3972,9 +4022,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base + [] ; + [] ; + [] ; + + [] ; + [] + ******************************************************************************************************************* PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- @@ -3991,87 +4043,6 @@ 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 - LPARAMETERS tcPropName, tcValueType, taPropsAndValues - LOCAL lnPos, luPropValue - - lnPos = ASCAN( taPropsAndValues, tcPropName, 1, 0, 1, 1+2+4+8) - - IF lnPos = 0 OR EMPTY( taPropsAndValues( lnPos, 2 ) ) - *-- Valores no encontrados o vacíos - luPropValue = '' - ELSE - luPropValue = taPropsAndValues( lnPos, 2 ) - ENDIF - - DO CASE - CASE tcValueType = 'I' - luPropValue = CAST( luPropValue AS INTEGER ) - - CASE tcValueType = 'N' - luPropValue = CAST( luPropValue AS DOUBLE ) - - CASE tcValueType = 'T' - luPropValue = CAST( luPropValue AS DATETIME ) - - CASE tcValueType = 'D' - luPropValue = CAST( luPropValue AS DATE ) - - CASE tcValueType = 'E' - luPropValue = EVALUATE( luPropValue ) - - OTHERWISE && Asumo 'C' para lo demás - luPropValue = luPropValue - - ENDCASE - - RETURN luPropValue - ENDFUNC - - - ******************************************************************************************************************* - PROCEDURE analizarBloque_FoxBin2Prg - *------------------------------------------------------ - *-- Analiza el bloque - *------------------------------------------------------ - LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines - - LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count - - IF LEFT( tcLine + ' ', LEN(C_FB2PRG_META_I) + 1 ) == C_FB2PRG_META_I + ' ' - llBloqueEncontrado = .T. - - *-- Metadatos del módulo - THIS.get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_FB2PRG_META_I, C_FB2PRG_META_F ) - toModulo._Version = THIS.get_ValueByName_FromListNamesWithValues( 'Version', 'N', @laPropsAndValues ) - toModulo._SourceFile = THIS.get_ValueByName_FromListNamesWithValues( 'SourceFile', 'C', @laPropsAndValues ) - ENDIF - - RETURN llBloqueEncontrado - ENDPROC - - - - PROCEDURE analizarBloque_LIBCOMMENT - *------------------------------------------------------ - *-- Analiza el bloque * - *------------------------------------------------------ - LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines - - LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count - - IF LEFT( tcLine, LEN(C_LIBCOMMENT_I) ) == C_LIBCOMMENT_I - llBloqueEncontrado = .T. - - *-- Metadatos del módulo - toModulo._Comment = ALLTRIM( STREXTRACT( tcLine, C_LIBCOMMENT_I, C_LIBCOMMENT_F ) ) - ENDIF - - RETURN llBloqueEncontrado - ENDPROC - ******************************************************************************************************************* PROCEDURE createProject @@ -4674,6 +4645,48 @@ 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 + LPARAMETERS tcPropName, tcValueType, taPropsAndValues + LOCAL lnPos, luPropValue + + lnPos = ASCAN( taPropsAndValues, tcPropName, 1, 0, 1, 1+2+4+8) + + IF lnPos = 0 OR EMPTY( taPropsAndValues( lnPos, 2 ) ) + *-- Valores no encontrados o vacíos + luPropValue = '' + ELSE + luPropValue = taPropsAndValues( lnPos, 2 ) + ENDIF + + DO CASE + CASE tcValueType = 'I' + luPropValue = CAST( luPropValue AS INTEGER ) + + CASE tcValueType = 'N' + luPropValue = CAST( luPropValue AS DOUBLE ) + + CASE tcValueType = 'T' + luPropValue = CAST( luPropValue AS DATETIME ) + + CASE tcValueType = 'D' + luPropValue = CAST( luPropValue AS DATE ) + + CASE tcValueType = 'E' + luPropValue = EVALUATE( luPropValue ) + + OTHERWISE && Asumo 'C' para lo demás + luPropValue = luPropValue + + ENDCASE + + RETURN luPropValue + ENDFUNC + + + ******************************************************************************************************************* PROCEDURE defined_PAM2Memo *-------------------------------------------------------------------------------------------------------------- @@ -4685,6 +4698,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE strip_Dimensions LPARAMETERS tcSeparatedCommaVars @@ -4698,6 +4712,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE hiddenAndProtected_PAM LPARAMETERS toClase @@ -4720,6 +4735,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE Evaluate_PAM LPARAMETERS tcMemo AS STRING, tcPAM AS STRING, tcPAM_Type AS STRING, tcPAM_Visibility AS STRING @@ -4743,6 +4759,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE insert_Object LPARAMETERS toClase, toObjeto, toFoxBin2Prg @@ -4818,6 +4835,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE insert_AllObjects *-- Recorro primero los objetos con ZOrder definido, y luego los demás @@ -4902,6 +4920,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE set_Line LPARAMETERS tcLine, taCodeLines, I @@ -4909,6 +4928,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarLineasDeProcedure LPARAMETERS toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ; @@ -4987,6 +5007,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_ADD_OBJECT LPARAMETERS toModulo, toClase, tcLine, I, taCodeLines, tnCodeLines @@ -5112,6 +5133,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_DEFINED_PAM *-------------------------------------------------------------------------------------------------------------- @@ -5212,6 +5234,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_DEFINE_CLASS LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; @@ -5378,6 +5401,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_ENDDEFINE LPARAMETERS toClase, tcLine, I, tcProcedureAbierto @@ -5409,6 +5433,30 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + + ******************************************************************************************************************* + PROCEDURE analizarBloque_FoxBin2Prg + *------------------------------------------------------ + *-- Analiza el bloque + *------------------------------------------------------ + LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines + + LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count + + IF LEFT( tcLine + ' ', LEN(C_FB2PRG_META_I) + 1 ) == C_FB2PRG_META_I + ' ' + llBloqueEncontrado = .T. + + *-- Metadatos del módulo + THIS.get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_FB2PRG_META_I, C_FB2PRG_META_F ) + toModulo._Version = THIS.get_ValueByName_FromListNamesWithValues( 'Version', 'N', @laPropsAndValues ) + toModulo._SourceFile = THIS.get_ValueByName_FromListNamesWithValues( 'SourceFile', 'C', @laPropsAndValues ) + ENDIF + + RETURN llBloqueEncontrado + ENDPROC + + + ******************************************************************************************************************* PROCEDURE analizarBloque_HIDDEN LPARAMETERS toClase, tcLine @@ -5428,6 +5476,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_INCLUDE LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto @@ -5451,6 +5500,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + + ******************************************************************************************************************* PROCEDURE analizarBloque_CLASSCOMMENTS LPARAMETERS toClase, tcLine ,taCodeLines, tnCodeLines, I @@ -5502,6 +5553,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + + ******************************************************************************************************************* PROCEDURE analizarBloque_CLASSMETADATA LPARAMETERS toClase, tcLine @@ -5539,6 +5592,60 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base 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_LIBCOMMENT + *------------------------------------------------------ + *-- Analiza el bloque * + *------------------------------------------------------ + LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines + + LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count + + IF LEFT( tcLine, LEN(C_LIBCOMMENT_I) ) == C_LIBCOMMENT_I + llBloqueEncontrado = .T. + + *-- Metadatos del módulo + toModulo._Comment = ALLTRIM( STREXTRACT( tcLine, C_LIBCOMMENT_I, C_LIBCOMMENT_F ) ) + ENDIF + + RETURN llBloqueEncontrado + ENDPROC + + + + ******************************************************************************************************************* PROCEDURE analizarBloque_OBJECTMETADATA LPARAMETERS toClase, tcLine @@ -5573,6 +5680,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_OLE_DEF LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto @@ -5622,6 +5730,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_PROCEDURE LPARAMETERS toModulo, toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; @@ -5667,6 +5776,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE analizarBloque_PROTECTED LPARAMETERS toClase, tcLine @@ -5686,6 +5796,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE evaluarDefinicionDeProcedure LPARAMETERS toClase, tnX, tc_Comentario, tcProcName, tcProcType, toObjeto @@ -5759,6 +5870,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* PROCEDURE identificarBloquesDeCodigo *-------------------------------------------------------------------------------------------------------------- @@ -5768,21 +5880,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' @@ -5794,8 +5908,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 @@ -5806,28 +5924,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 @@ -5849,9 +5975,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 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. @@ -5865,12 +6149,13 @@ 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 ) @@ -5884,8 +6169,13 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin 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 ) + + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + 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 ) @@ -5894,6 +6184,12 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin 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 @@ -5901,16 +6197,15 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - - *-- Creo la librería - .createClasslib() - *-- 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 @@ -5933,6 +6228,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ENDPROC + ******************************************************************************************************************* PROCEDURE escribirArchivoBin LPARAMETERS toModulo, toFoxBin2Prg @@ -6171,6 +6467,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. @@ -6184,9 +6481,9 @@ 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. @@ -6203,8 +6500,13 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin 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 ) + + .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + 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 ) @@ -6213,6 +6515,12 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin 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 @@ -6220,16 +6528,15 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - - *-- Creo el form - .createForm() - *-- 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 @@ -6252,6 +6559,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDPROC + ******************************************************************************************************************* PROCEDURE escribirArchivoBin LPARAMETERS toModulo, toFoxBin2Prg @@ -6487,6 +6795,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. @@ -8378,6 +8687,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -9499,6 +9809,28 @@ 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, tcCodigo @@ -10152,10 +10484,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg 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, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile + , lnClassCount, lcOutputFile, lcExternalHeader STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount - STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses(1,2), lcOutputFile + 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' @@ -10166,8 +10499,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 ) *-- Escribo los métodos ordenados @@ -10217,6 +10548,10 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .write_CLASSMETADATA( @loRegClass, @lcCodigo ) + 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 *------------------------------------------------------------------------------- @@ -10317,7 +10652,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *-- Genero el VC2 lcOutputFile = .c_OutputFile - lcCodigo = C_FB2PRG_CODE + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + CR_LF + C_FB2PRG_CODE IF .l_Test FOR I = 1 TO lnClassCount @@ -10392,10 +10727,11 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg 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, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile + , lnClassCount, lcOutputFile, lcExternalHeader STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount - STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses(1,2), lcOutputFile + 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' @@ -10406,8 +10742,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 ) *-- Escribo los métodos ordenados @@ -10470,6 +10804,10 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .write_CLASSMETADATA( @loRegClass, @lcCodigo ) + 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 *------------------------------------------------------------------------------- @@ -10573,7 +10911,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *-- Genero el SC2 lcOutputFile = .c_OutputFile - lcCodigo = C_FB2PRG_CODE + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + CR_LF + C_FB2PRG_CODE IF .l_Test FOR I = 1 TO lnClassCount @@ -11916,6 +12254,8 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -11925,13 +12265,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 = '' ************************************************************************************************ @@ -12024,6 +12365,7 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -12076,6 +12418,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 = '' @@ -20026,18 +20369,20 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -20057,36 +20402,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 - l_UseClassPerFile = 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 ; From 6ba908cd6862d7bfc149eb2cb51de010635651e9 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 9 Nov 2014 00:36:26 +0100 Subject: [PATCH 14/60] Changeset: 467 fdbozzo - 08/11/2014 23:59:54: - Agregado de FB2P header en cada archivo de clase individual --- foxbin2prg.prg | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 98c4273..0e745c7 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -6169,17 +6169,17 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin STORE '' TO C_FB2PRG_CODE STORE NULL TO toModulo - toModulo = CREATEOBJECT('CL_MODULO') - C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + toModulo = CREATEOBJECT('CL_MODULO') + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) 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 ) + 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 @@ -6220,8 +6220,8 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin FINALLY USE IN (SELECT("TABLABIN")) - RELEASE lnCodError, laCodeLines, lnCodeLines, laLineasExclusion, lnBloquesExclusion, I ; - , lcInputFile, lcInputFile_Class, lnFileCount, laFiles + RELEASE lnCodError, laCodeLines, lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles ; + , laLineasExclusion, lnBloquesExclusion, I ENDTRY RETURN @@ -6487,6 +6487,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin *--------------------------------------------------------------------------------------------------- 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 ) @@ -6500,8 +6501,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin STORE '' TO C_FB2PRG_CODE STORE NULL TO toModulo - toModulo = CREATEOBJECT('CL_MODULO') - C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + toModulo = CREATEOBJECT('CL_MODULO') + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) @@ -6509,8 +6510,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin 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 ) + 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 @@ -6551,8 +6552,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin FINALLY USE IN (SELECT("TABLABIN")) - RELEASE lnCodError, laCodeLines, lnCodeLines, laLineasExclusion, lnBloquesExclusion, I ; - , lcInputFile, lcInputFile_Class, lnFileCount, laFiles + RELEASE lnCodError, laCodeLines, lnCodeLines, lcInputFile, lcInputFile_Class, lnFileCount, laFiles ; + , laLineasExclusion, lnBloquesExclusion, I ENDTRY RETURN @@ -10665,7 +10666,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg FOR I = 1 TO lnClassCount lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) - lcCodigo = laClasses(I,2) + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) ENDFOR ELSE @@ -10924,7 +10925,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg FOR I = 1 TO lnClassCount lcOutputFile = FORCEPATH( JUSTSTEM( .c_OutputFile ), JUSTPATH( .c_OutputFile ) ) + '.' + laClasses(I,1) + '.' + JUSTEXT( .c_OutputFile ) - lcCodigo = laClasses(I,2) + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + laClasses(I,2) .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) ENDFOR ELSE From ec6a185464a933f782b0f308954c81ab482f9708 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 9 Nov 2014 15:10:18 +0100 Subject: [PATCH 15/60] =?UTF-8?q?Changeset:=20468=20fdbozzo=20-=2009/11/20?= =?UTF-8?q?14=2000:36:27:=20-=20Adapto=20el=20script=20de=20conversi=C3=B3?= =?UTF-8?q?n=20PRG=20a=20BIN=20para=20ignorar=20los=20archivos=20de=20clas?= =?UTF-8?q?es=20individuales=20(archivo.clase.tx2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Convert_VFP9_PRG_2_BIN.vbs | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) 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 From c4f0d854af916d3581e50fae07363140cd65aaa2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 9 Nov 2014 18:22:31 +0100 Subject: [PATCH 16/60] =?UTF-8?q?Changeset:=20470=20fdbozzo=20-=2009/11/20?= =?UTF-8?q?14=2017:05:15:=20-=20Optimizaci=C3=B3n:=20Excluyo=20las=20l?= =?UTF-8?q?=C3=ADneas=20que=20solo=20son=20comentarios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 2d009c6..b6f93e9 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2782,16 +2782,22 @@ 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 lcPrevLine + RETURN llIsContinuation ENDPROC @@ -3265,6 +3271,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 From b1c15566598ba77ad683a5ce0c30952de37f657b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 9 Nov 2014 19:30:04 +0100 Subject: [PATCH 17/60] =?UTF-8?q?Changeset:=20471=20fdbozzo=20-=2009/11/20?= =?UTF-8?q?14=2019:26:22:=20-=20Quitado=20el=20condicionamiento=20de=20los?= =?UTF-8?q?=20EXTERNAL:=20Los=20IF=20.F.=20son=20m=C3=A1s=20lentos=20:(?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 145 +++++++++++++------------------------------------ 1 file changed, 37 insertions(+), 108 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b6f93e9..b7a3057 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2621,9 +2621,8 @@ DEFINE CLASS c_conversor_base AS SESSION *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcPropName, tcValue, taProps, tnProp_Count, I, tcTAG_I, tcTAG_F, tnLEN_TAG_I, tnLEN_TAG_F - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taProps - ENDIF + EXTERNAL ARRAY taProps + LOCAL llBloqueEncontrado, loEx AS EXCEPTION TRY @@ -3099,9 +3098,7 @@ DEFINE CLASS c_conversor_base AS SESSION *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tcLineWithMetadata, taPropsAndValues, tnPropsAndValues_Count, tcLeftTag, tcRightTag - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taPropsAndValues - ENDIF + EXTERNAL ARRAY taPropsAndValues LOCAL lcMetadatos, I, lnEqualSigns, lcNextVar, lcStr, lcVirtualMeta, lnPos1, lnPos2, lnLastPos, lnCantComillas STORE '' TO lcVirtualMeta @@ -3245,9 +3242,7 @@ DEFINE CLASS c_conversor_base AS SESSION * taLineasExclusion (@? OUT) Array unidimensional con un .T. o .F. según la línea sea de exclusión o no * tnBloquesExclusion (@? OUT) Cantidad de bloques de exclusión *-------------------------------------------------------------------------------------------------------------- - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY ta_ID_Bloques, taLineasExclusion - ENDIF + EXTERNAL ARRAY ta_ID_Bloques, taLineasExclusion TRY LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos, lcLine, lcPrevLine @@ -3660,9 +3655,7 @@ DEFINE CLASS c_conversor_base AS SESSION *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taPropsAndValues, tnPropsAndValues_Count, tnSortType - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taPropsAndValues - ENDIF + EXTERNAL ARRAY taPropsAndValues TRY LOCAL I, X, lnArrayCols, laPropsAndValues(1,2), lcPropName, lcSortedMemo, lcMethods @@ -4908,9 +4901,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LPARAMETERS toClase, toObjeto, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto, tc_Comentario ; , taLineasExclusion, tnBloquesExclusion - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines - ENDIF + EXTERNAL ARRAY taCodeLines #IF .F. LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' @@ -4988,9 +4979,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base PROCEDURE analizarBloque_ADD_OBJECT LPARAMETERS toModulo, toClase, tcLine, I, taCodeLines, tnCodeLines - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines - ENDIF + EXTERNAL ARRAY taCodeLines #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' @@ -5216,9 +5205,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LPARAMETERS toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto ; , taLineasExclusion, tnBloquesExclusion, tc_Comentario - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taLineasExclusion - ENDIF + EXTERNAL ARRAY taCodeLines, tnBloquesExclusion, taLineasExclusion #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' @@ -5455,9 +5442,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base PROCEDURE analizarBloque_CLASSCOMMENTS LPARAMETERS toClase, tcLine ,taCodeLines, tnCodeLines, I - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines - ENDIF + EXTERNAL ARRAY taCodeLines #IF .F. LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' @@ -5777,9 +5762,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines, taLineasExclusion - ENDIF + EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' @@ -6674,9 +6657,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines, taLineasExclusion - ENDIF + EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' @@ -7009,9 +6990,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin *------------------------------------------------------ LPARAMETERS toProject, tcLine, taCodeLines, I, tnCodeLines - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY toProject - ENDIF + EXTERNAL ARRAY toProject #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' @@ -7074,9 +7053,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin *------------------------------------------------------ LPARAMETERS toProject, tcLine, taCodeLines, I, tnCodeLines - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY toProject - ENDIF + EXTERNAL ARRAY toProject #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' @@ -7139,9 +7116,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin *------------------------------------------------------ LPARAMETERS toProject, tcLine, taCodeLines, I, tnCodeLines - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY toProject - ENDIF + EXTERNAL ARRAY toProject #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' @@ -7439,9 +7414,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines, taLineasExclusion - ENDIF + EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' @@ -7923,9 +7896,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toTable - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines, taLineasExclusion - ENDIF + EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. LOCAL toTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' @@ -8102,9 +8073,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toDatabase - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines, taLineasExclusion - ENDIF + EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' @@ -8239,9 +8208,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin *-------------------------------------------------------------------------------------------------------------- LPARAMETERS taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toMenu - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taCodeLines, taLineasExclusion - ENDIF + EXTERNAL ARRAY taCodeLines, taLineasExclusion #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' @@ -8402,9 +8369,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base , taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count ; , toFoxBin2Prg - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taPropsAndComments, taProtected - ENDIF + EXTERNAL ARRAY taPropsAndComments, taProtected #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -8467,9 +8432,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS tnMethodCount, taMethods, taCode, taProtected, taPropsAndComments *-- DEFINIR MÉTODOS DE LA CLASE *-- Ubico los métodos protegidos y les cambio la definición - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taMethods, taCode, taProtected, taPropsAndComments - ENDIF + EXTERNAL ARRAY taMethods, taCode, taProtected, taPropsAndComments TRY LOCAL lcMethod, lcMethodName, lnProtectedItem, lnCommentRow, lcProcDef, lcMethods, lnLen @@ -8556,9 +8519,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *--------------------------------------------------------------------------------------------------- LPARAMETERS tcMemo, tlSort, taPropsAndComments, tnPropsAndComments_Count, tcSortedMemo - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taPropsAndComments - ENDIF + EXTERNAL ARRAY taPropsAndComments TRY LOCAL laLines(1), I, lnPos, loEx AS EXCEPTION @@ -8618,9 +8579,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *--------------------------------------------------------------------------------------------------- LPARAMETERS tcMemo, tnSort, taPropsAndValues, tnPropsAndValues_Count, tcSortedMemo - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taPropsAndValues - ENDIF + EXTERNAL ARRAY taPropsAndValues TRY LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods @@ -8728,9 +8687,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *--------------------------------------------------------------------------------------------------- LPARAMETERS tcMemo, tlSort, taProtected, tnProtected_Count, tcSortedMemo - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taProtected - ENDIF + EXTERNAL ARRAY taProtected tcSortedMemo = '' tnProtected_Count = ALINES(taProtected, tcMemo, 1+4) @@ -8856,9 +8813,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE set_MultilineMemoWithAddObjectProperties LPARAMETERS taPropsAndValues, tnPropCount, tcLeftIndentation, tlNormalizeLine - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taPropsAndValues - ENDIF + EXTERNAL ARRAY taPropsAndValues TRY LOCAL lcLine, I, lcComentarios, laLines(1), lcFinDeLinea @@ -8895,9 +8850,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS tcMethod, taMethods, taCode, tcSorted, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count ; , taProtected, tnProtected_Count, toFoxBin2Prg - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected - ENDIF + EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -8963,9 +8916,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- 29/10/2013 Fernando D. Bozzo *-- 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. - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected - ENDIF + EXTERNAL ARRAY taMethods, taCode, taPropsAndComments, taProtected #IF .F. LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -9293,9 +9244,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS toRegClass, taPropsAndValues, taPropsAndComments, taProtected ; , tnPropsAndValues_Count, tnPropsAndComments_Count, tnProtected_Count - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taPropsAndValues, taPropsAndComments - ENDIF + EXTERNAL ARRAY taPropsAndValues, taPropsAndComments TRY LOCAL lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd, I ; @@ -12782,9 +12731,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS tcName, tcType, taProperties, tnProperty_Count - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taProperties && STRUCTURE: PropName,RecordLen,DataIDLen,DataID,DataType,Data - ENDIF + EXTERNAL ARRAY taProperties && STRUCTURE: PropName,RecordLen,DataIDLen,DataID,DataType,Data TRY LOCAL lcValue, leValue, lnSelect, laProperty(1,1), lnRecordLen, lcBinRecord, lnPropertyID ; @@ -14248,9 +14195,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taTables, tnTable_Count - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taTables - ENDIF + EXTERNAL ARRAY taTables TRY LOCAL I, lcText, loEx AS EXCEPTION ; @@ -15187,9 +15132,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taViews, tnView_Count - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taViews - ENDIF + EXTERNAL ARRAY taViews TRY LOCAL I, lcText, lcDBC, lnField_Count, laFields(1), loEx AS EXCEPTION ; @@ -15954,9 +15897,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS tcTable, taRelations, tnRelation_Count - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taRelations - ENDIF + EXTERNAL ARRAY taRelations TRY LOCAL I, X, lcText, loEx AS EXCEPTION ; @@ -16476,9 +16417,7 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, tnField_Count - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taFields - ENDIF + EXTERNAL ARRAY taFields TRY LOCAL I, lcText, loEx AS EXCEPTION ; @@ -16639,9 +16578,7 @@ DEFINE CLASS CL_DBF_FIELD AS CL_CUS_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, I - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taFields - ENDIF + EXTERNAL ARRAY taFields TRY LOCAL I, lcText, loEx AS EXCEPTION @@ -16767,9 +16704,7 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taTagInfo, tnTagInfo_Count, tc_InputFile - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taTagInfo - ENDIF + EXTERNAL ARRAY taTagInfo TRY LOCAL I, lcText, loEx AS EXCEPTION ; @@ -16909,9 +16844,7 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taTagInfo, I - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taTagInfo - ENDIF + EXTERNAL ARRAY taTagInfo TRY LOCAL I, lcText, loEx AS EXCEPTION @@ -16976,9 +16909,7 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, tnField_Count, tc_DBF_Conversion_Condition - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taFields - ENDIF + EXTERNAL ARRAY taFields TRY LOCAL lcText, loEx AS EXCEPTION ; @@ -17056,9 +16987,7 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE *--------------------------------------------------------------------------------------------------- LPARAMETERS taFields, tnField_Count - IF .F. && EXTERNAL consume ciclos de ejecución, pero no aporta nada fuera del proyecto. - EXTERNAL ARRAY taFields - ENDIF + EXTERNAL ARRAY taFields TRY LOCAL I, lcText, loEx AS EXCEPTION, lcField, luValue, lcFieldType From 2c88a261896975b9dd7f0fd46ccfc1dae3f5e39b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 9 Nov 2014 21:08:11 +0100 Subject: [PATCH 18/60] =?UTF-8?q?Changeset:=20472=20fdbozzo=20-=2009/11/20?= =?UTF-8?q?14=2019:30:05:=20-=20Agregado=20de=20varios=20RELEASE=20para=20?= =?UTF-8?q?recolecci=C3=B3n=20de=20basura=20manual?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 263 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 226 insertions(+), 37 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b7a3057..a2a2e82 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -652,6 +652,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 @@ -1008,6 +1009,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY CLEAR DLLS fb2p_SetFileAttributes, fb2p_GetFileAttributes + RELEASE tcFileName, tcAttrib, dwFileAttributes ENDTRY RETURN @@ -1037,6 +1039,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM COMPILE DATABASE (tcFileName) ENDCASE + + RELEASE tcFileName, lcType + RETURN ENDPROC @@ -1124,6 +1129,9 @@ 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 ENDTRY RETURN @@ -1412,8 +1420,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 @@ -1439,6 +1450,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDFOR + RELEASE tcFileName, tcFilters, llFound, laFiltros RETURN llFound ENDFUNC @@ -1460,6 +1472,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , 'XXX' ) ENDWITH && THIS + RELEASE tcExt RETURN lcExt2 ENDPROC @@ -1467,6 +1480,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 ; @@ -1478,6 +1492,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , tcExt == 'DBC', .DBC_Conversion_Support >= 1 ; , .F. ) ENDWITH && THIS + + RELEASE tcExt RETURN llTieneSoporte ENDPROC @@ -1485,6 +1501,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 ; @@ -1496,6 +1513,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , tcExt == .c_DC2, .DBC_Conversion_Support = 2 ; , .F. ) ENDWITH && THIS + + RELEASE tcExt RETURN llTieneSoporte ENDPROC @@ -1862,7 +1881,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 @@ -2162,6 +2184,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 @@ -2585,6 +2611,8 @@ DEFINE CLASS c_conversor_base AS SESSION THIS.c_Foxbin2prg_FullPath = SUBSTR( lcSys16, lnPosProg ) THIS.SortSpecialProps() + RELEASE lcSys16, lnPosProg + RETURN ENDPROC @@ -2682,6 +2710,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 @@ -2738,6 +2768,8 @@ DEFINE CLASS c_conversor_base AS SESSION THROW + FINALLY + RELEASE tcNombreObjeto, toClase, I, X, N, lcRutaDelNombre, loObjeto ENDTRY RETURN lnObjeto @@ -2755,6 +2787,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 @@ -2774,6 +2809,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 @@ -2795,7 +2832,7 @@ DEFINE CLASS c_conversor_base AS SESSION llIsContinuation = .T. ENDIF - RELEASE lcPrevLine + RELEASE taCodeLines, I, lcPrevLine RETURN llIsContinuation ENDPROC @@ -2803,7 +2840,7 @@ DEFINE CLASS c_conversor_base AS SESSION PROCEDURE elTextoEvaluadoEsElTokenIndicado LPARAMETERS tcLine, ta_ID_Bloques, tnLen_IDFinBQ, X, tnIniFin - LOCAL llEncontrado, lcWord + LOCAL llEncontrado, lcWord, lcLine TRY *-- Pre-normalización @@ -2847,6 +2884,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 @@ -2863,6 +2903,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 @@ -2875,7 +2916,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 @@ -2924,6 +2965,7 @@ DEFINE CLASS c_conversor_base AS SESSION ENDCASE + RELEASE tcProp, tcComentario, lnCodError, lnPos, lcValue RETURN tcValue ENDPROC @@ -2961,6 +3003,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 @@ -2972,6 +3015,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 @@ -2983,6 +3027,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 @@ -3100,7 +3145,7 @@ DEFINE CLASS c_conversor_base AS SESSION 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 @@ -3137,6 +3182,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 @@ -3158,6 +3205,7 @@ DEFINE CLASS c_conversor_base AS SESSION tcComment = '' ENDIF + RELEASE tcLine, tcComment RETURN (ln_AT_Cmt > 0) ENDPROC @@ -3206,6 +3254,7 @@ DEFINE CLASS c_conversor_base AS SESSION ENDIF ENDIF + RELEASE tcAsignacion, tcPropName, tcValue, toClase, taCodeLines, tnCodeLines, I, ln_AT_Cmt RETURN ENDPROC @@ -3220,6 +3269,7 @@ DEFINE CLASS c_conversor_base AS SESSION ELSE lcValue = CHRTRAN( LEFT( tcNullTerminatedValue, lnNullPos - 1 ), ['], ["] ) ENDIF + RELEASE tcNullTerminatedValue, lnNullPos RETURN lcValue ENDPROC @@ -3337,6 +3387,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 @@ -3367,6 +3420,7 @@ DEFINE CLASS c_conversor_base AS SESSION ENDCASE + RELEASE tcLine, tcComment, ln_AT_Cmt RETURN lllineIsOnlyCommentAndNoMetadata ENDPROC @@ -3379,6 +3433,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 @@ -3424,6 +3479,7 @@ DEFINE CLASS c_conversor_base AS SESSION ENDCASE + RELEASE tcProp, lcValue, I, tcComentario RETURN tcValue ENDPROC @@ -3632,6 +3688,8 @@ DEFINE CLASS c_conversor_base AS SESSION THROW + FINALLY + RELEASE tcOperation, tcPropName, lnPos, loEx ENDTRY RETURN lcPropName @@ -3760,6 +3818,9 @@ DEFINE CLASS c_conversor_base AS SESSION THROW + FINALLY + RELEASE taPropsAndValues, tnPropsAndValues_Count, tnSortType ; + , I, X, lnArrayCols, laPropsAndValues, lcPropName, lcSortedMemo, lcMethods ENDTRY RETURN @@ -4014,6 +4075,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDCASE + RELEASE tcPropName, tcValueType, taPropsAndValues, lnPos RETURN luPropValue ENDFUNC @@ -4036,6 +4098,7 @@ 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 @@ -4056,6 +4119,7 @@ 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 @@ -4419,8 +4483,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 @@ -4438,7 +4501,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 @@ -4447,6 +4510,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base THROW + FINALLY + RELEASE toClase, I, laPropsAndValues, lnPropsAndValues_Count ENDTRY RETURN lcMemo @@ -4463,7 +4528,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 @@ -4483,6 +4548,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF + RELEASE toObjeto, toClase, I, laPropsAndValues RETURN lcMemo ENDPROC @@ -4540,7 +4606,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 @@ -4581,7 +4647,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 @@ -4606,6 +4672,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF ENDFOR + RELEASE tcPropName, toClase, I RETURN lcComentario ENDPROC @@ -4633,7 +4700,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 @@ -4682,6 +4749,9 @@ 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 @@ -4703,6 +4773,7 @@ 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 @@ -4727,6 +4798,9 @@ 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 @@ -4802,6 +4876,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , toObjeto._User ) ENDIF ENDWITH && THIS + + RELEASE toClase, toObjeto, toFoxBin2Prg, lcPropsMemo, lcMethodsMemo + RETURN ENDPROC @@ -4881,7 +4958,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 @@ -4967,7 +5044,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 @@ -5094,6 +5172,9 @@ 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 @@ -5194,6 +5275,9 @@ 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 @@ -5359,6 +5443,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 @@ -5393,6 +5483,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base STORE '' TO tcProcedureAbierto ENDIF + RELEASE toClase, tcLine, I, tcProcedureAbierto RETURN llBloqueEncontrado ENDPROC @@ -5412,6 +5503,7 @@ 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 @@ -5435,6 +5527,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF ENDIF + RELEASE toModulo, toClase, tcLine, taCodeLines, I, tnCodeLines, tcProcedureAbierto RETURN llBloqueEncontrado ENDPROC @@ -5484,6 +5577,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base THROW + FINALLY + RELEASE toClase, tcLine ,taCodeLines, tnCodeLines, I ENDTRY RETURN llBloqueEncontrado @@ -5523,6 +5618,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF ENDIF + RELEASE toClase, tcLine, laPropsAndValues, lnPropsAndValues_Count RETURN llBloqueEncontrado ENDPROC @@ -5554,7 +5650,7 @@ 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 @@ -5606,6 +5702,7 @@ 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 @@ -5651,6 +5748,8 @@ 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 @@ -5670,6 +5769,7 @@ 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 @@ -5739,8 +5839,8 @@ 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 @@ -5828,7 +5928,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base FINALLY STORE NULL TO loClase - RELEASE loClase, I ; + RELEASE taCodeLines, tnCodeLines, taLineasExclusion, tnBloquesExclusion, toModulo, loClase, I ; , llFoxBin2Prg_Completed, llOLE_DEF_Completed, llINCLUDE_SCX_Completed, llLIBCOMMENT_Completed ; , lc_Comentario, lcProcedureAbierto, lcLine ENDTRY @@ -6724,6 +6824,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 @@ -6804,7 +6909,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 @@ -7515,6 +7621,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 @@ -7533,9 +7642,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. @@ -7564,6 +7671,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 @@ -7939,6 +8049,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 @@ -8116,6 +8229,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 @@ -8251,6 +8367,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 @@ -8421,6 +8540,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 @@ -8488,6 +8612,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 @@ -8555,6 +8683,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 @@ -8668,6 +8800,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 @@ -8689,6 +8825,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base EXTERNAL ARRAY taProtected + LOCAL I tcSortedMemo = '' tnProtected_Count = ALINES(taProtected, tcMemo, 1+4) @@ -8712,6 +8849,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 @@ -8777,6 +8915,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 @@ -8784,7 +8926,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* - PROCEDURE MemoInOneLine( tcMethod ) + PROCEDURE MemoInOneLine + LPARAMETERS tcMethod + TRY LOCAL lcLine, I lcLine = '' @@ -8803,6 +8947,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE tcMethod, I ENDTRY RETURN lcLine @@ -8839,6 +8986,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 @@ -8903,6 +9054,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 @@ -9121,6 +9277,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 @@ -9197,6 +9360,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF THROW + + FINALLY + RELEASE toRegObj, lcMemo, laPropsAndValues, lnPropsAndValues_Count ENDTRY RETURN @@ -9235,6 +9401,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base C_FB2PRG_CODE = C_FB2PRG_CODE + lcMethods ENDIF + RELEASE tcMethods, taMethods, taCode, tnMethodCount, taPropsAndComments, tnPropsAndComments_Count, taProtected, tnProtected_Count, toFoxBin2Prg ; + , laMethods, laCode, lnMethodCount, I, lcMethods RETURN ENDPROC @@ -9248,7 +9416,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base 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 ) @@ -9341,6 +9510,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 @@ -9403,8 +9578,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base C_FB2PRG_CODE = C_FB2PRG_CODE + CR_LF + RELEASE I, lcPropsMethodsDefd, lcType ENDIF + RELEASE taPropsAndComments, tnPropsAndComments_Count RETURN ENDPROC @@ -10279,7 +10456,8 @@ 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 @@ -10524,7 +10702,8 @@ 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 @@ -10868,7 +11047,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 @@ -11249,7 +11429,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 @@ -11417,7 +11598,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 @@ -11554,7 +11736,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 @@ -11633,7 +11816,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 @@ -11714,7 +11898,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 @@ -11782,15 +11966,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 @@ -11861,8 +12046,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 @@ -18931,7 +19119,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 From 3c944235a1218a26814d432e9c11d1d391b57a41 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 9 Nov 2014 21:31:45 +0100 Subject: [PATCH 19/60] =?UTF-8?q?Changeset:=20474=20fdbozzo=20-=2009/11/20?= =?UTF-8?q?14=2021:30:08:=20-=20Agregado=20de=20cr=C3=A9ditos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 1 + 1 file changed, 1 insertion(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 0e745c7..d137d24 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -107,6 +107,7 @@ * 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) * * *--------------------------------------------------------------------------------------------------- From c7ed26808d0e166445f77a02336dccaa987524ce Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 9 Nov 2014 22:28:54 +0100 Subject: [PATCH 20/60] Changeset: 477 fdbozzo - 09/11/2014 22:22:02: - Arreglo del header --- foxbin2prg.prg | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index d137d24..af42da8 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10652,9 +10652,13 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg laClasses(lnClassCount,2) = lcCodigo ENDSCAN + IF toFoxBin2Prg.l_UseClassPerFile + lcExternalHeader = lcExternalHeader + CR_LF + ENDIF + *-- Genero el VC2 lcOutputFile = .c_OutputFile - lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + CR_LF + C_FB2PRG_CODE + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE IF .l_Test FOR I = 1 TO lnClassCount @@ -10911,9 +10915,13 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg laClasses(lnClassCount,2) = lcCodigo ENDSCAN + IF toFoxBin2Prg.l_UseClassPerFile + lcExternalHeader = lcExternalHeader + CR_LF + ENDIF + *-- Genero el SC2 lcOutputFile = .c_OutputFile - lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + CR_LF + C_FB2PRG_CODE + lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE IF .l_Test FOR I = 1 TO lnClassCount From e4d6dda8fd39663d2b1592eaaf0a121c45fd03ae Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 10 Nov 2014 00:09:33 +0100 Subject: [PATCH 21/60] Changeset: 479 fdbozzo - 10/11/2014 00:08:15: - Restablecer escritura definiciones OLE --- foxbin2prg.prg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index af42da8..ac22458 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10503,6 +10503,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) + .write_DefinicionObjetosOLE( toFoxBin2Prg ) + *-- Escribo los métodos ordenados lnLastClass = 0 @@ -10750,6 +10752,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) + .write_DefinicionObjetosOLE( toFoxBin2Prg ) + *-- Escribo los métodos ordenados lnLastObj = 0 lnLastClass = 0 From f29cf42724d7efadf62d1a3ab30999c3e52f1f06 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Mon, 10 Nov 2014 00:40:47 +0100 Subject: [PATCH 22/60] =?UTF-8?q?Changeset:=20481=20fdbozzo=20-=2010/11/20?= =?UTF-8?q?14=2000:29:47:=20-=20Antiguo=20m=C3=A9todo=20de=20OLE=20que=20y?= =?UTF-8?q?a=20no=20se=20usa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 84 +++++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index ac22458..e47eebd 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10300,63 +10300,63 @@ 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 + 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 From 87b0e44975ba5c788dfdfa8f8fc3242e29d15413 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 13 Nov 2014 22:35:27 +0100 Subject: [PATCH 23/60] Changeset: 483 fdbozzo - 13/11/2014 00:00:48: --- foxbin2prg.prg | 128 ++++++++++++++++++++++++------------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e47eebd..afe63ce 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -4045,6 +4045,70 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base + ******************************************************************************************************************* + FUNCTION get_ValueByName_FromListNamesWithValues + *-- ASIGNO EL VALOR DEL ARRAY DE DATOS Y VALORES PARA LA PROPIEDAD INDICADA + LPARAMETERS tcPropName, tcValueType, taPropsAndValues + LOCAL lnPos, luPropValue + + lnPos = ASCAN( taPropsAndValues, tcPropName, 1, 0, 1, 1+2+4+8) + + IF lnPos = 0 OR EMPTY( taPropsAndValues( lnPos, 2 ) ) + *-- Valores no encontrados o vacíos + luPropValue = '' + ELSE + luPropValue = taPropsAndValues( lnPos, 2 ) + ENDIF + + DO CASE + CASE tcValueType = 'I' + luPropValue = CAST( luPropValue AS INTEGER ) + + CASE tcValueType = 'N' + luPropValue = CAST( luPropValue AS DOUBLE ) + + CASE tcValueType = 'T' + luPropValue = CAST( luPropValue AS DATETIME ) + + CASE tcValueType = 'D' + luPropValue = CAST( luPropValue AS DATE ) + + CASE tcValueType = 'E' + luPropValue = EVALUATE( luPropValue ) + + OTHERWISE && Asumo 'C' para lo demás + luPropValue = luPropValue + + ENDCASE + + RETURN luPropValue + ENDFUNC + + + + ******************************************************************************************************************* + PROCEDURE analizarBloque_FoxBin2Prg + *------------------------------------------------------ + *-- Analiza el bloque + *------------------------------------------------------ + LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines + + LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count + + IF LEFT( tcLine + ' ', LEN(C_FB2PRG_META_I) + 1 ) == C_FB2PRG_META_I + ' ' + llBloqueEncontrado = .T. + + *-- Metadatos del módulo + THIS.get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_FB2PRG_META_I, C_FB2PRG_META_F ) + toModulo._Version = THIS.get_ValueByName_FromListNamesWithValues( 'Version', 'N', @laPropsAndValues ) + toModulo._SourceFile = THIS.get_ValueByName_FromListNamesWithValues( 'SourceFile', 'C', @laPropsAndValues ) + ENDIF + + RETURN llBloqueEncontrado + ENDPROC + + + ******************************************************************************************************************* PROCEDURE createProject @@ -4647,47 +4711,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base - ******************************************************************************************************************* - FUNCTION get_ValueByName_FromListNamesWithValues - *-- ASIGNO EL VALOR DEL ARRAY DE DATOS Y VALORES PARA LA PROPIEDAD INDICADA - LPARAMETERS tcPropName, tcValueType, taPropsAndValues - LOCAL lnPos, luPropValue - - lnPos = ASCAN( taPropsAndValues, tcPropName, 1, 0, 1, 1+2+4+8) - - IF lnPos = 0 OR EMPTY( taPropsAndValues( lnPos, 2 ) ) - *-- Valores no encontrados o vacíos - luPropValue = '' - ELSE - luPropValue = taPropsAndValues( lnPos, 2 ) - ENDIF - - DO CASE - CASE tcValueType = 'I' - luPropValue = CAST( luPropValue AS INTEGER ) - - CASE tcValueType = 'N' - luPropValue = CAST( luPropValue AS DOUBLE ) - - CASE tcValueType = 'T' - luPropValue = CAST( luPropValue AS DATETIME ) - - CASE tcValueType = 'D' - luPropValue = CAST( luPropValue AS DATE ) - - CASE tcValueType = 'E' - luPropValue = EVALUATE( luPropValue ) - - OTHERWISE && Asumo 'C' para lo demás - luPropValue = luPropValue - - ENDCASE - - RETURN luPropValue - ENDFUNC - - - ******************************************************************************************************************* PROCEDURE defined_PAM2Memo *-------------------------------------------------------------------------------------------------------------- @@ -5435,29 +5458,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base - ******************************************************************************************************************* - PROCEDURE analizarBloque_FoxBin2Prg - *------------------------------------------------------ - *-- Analiza el bloque - *------------------------------------------------------ - LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines - - LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count - - IF LEFT( tcLine + ' ', LEN(C_FB2PRG_META_I) + 1 ) == C_FB2PRG_META_I + ' ' - llBloqueEncontrado = .T. - - *-- Metadatos del módulo - THIS.get_ListNamesWithValuesFrom_InLine_MetadataTag( @tcLine, @laPropsAndValues, @lnPropsAndValues_Count, C_FB2PRG_META_I, C_FB2PRG_META_F ) - toModulo._Version = THIS.get_ValueByName_FromListNamesWithValues( 'Version', 'N', @laPropsAndValues ) - toModulo._SourceFile = THIS.get_ValueByName_FromListNamesWithValues( 'SourceFile', 'C', @laPropsAndValues ) - ENDIF - - RETURN llBloqueEncontrado - ENDPROC - - - ******************************************************************************************************************* PROCEDURE analizarBloque_HIDDEN LPARAMETERS toClase, tcLine From a8ec4da75cd77e7a0804f4768568d074252ab727 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 13 Nov 2014 22:39:29 +0100 Subject: [PATCH 24/60] Changeset: 484 fdbozzo - 13/11/2014 22:35:28: --- foxbin2prg.prg | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index afe63ce..171d322 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -4109,6 +4109,27 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base + ******************************************************************************************************************* + PROCEDURE analizarBloque_LIBCOMMENT + *------------------------------------------------------ + *-- Analiza el bloque * + *------------------------------------------------------ + LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines + + LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count + + IF LEFT( tcLine, LEN(C_LIBCOMMENT_I) ) == C_LIBCOMMENT_I + llBloqueEncontrado = .T. + + *-- Metadatos del módulo + toModulo._Comment = ALLTRIM( STREXTRACT( tcLine, C_LIBCOMMENT_I, C_LIBCOMMENT_F ) ) + ENDIF + + RETURN llBloqueEncontrado + ENDPROC + + + ******************************************************************************************************************* PROCEDURE createProject @@ -5625,27 +5646,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base - ******************************************************************************************************************* - PROCEDURE analizarBloque_LIBCOMMENT - *------------------------------------------------------ - *-- Analiza el bloque * - *------------------------------------------------------ - LPARAMETERS toModulo, tcLine, taCodeLines, I, tnCodeLines - - LOCAL llBloqueEncontrado, laPropsAndValues(1,2), lnPropsAndValues_Count - - IF LEFT( tcLine, LEN(C_LIBCOMMENT_I) ) == C_LIBCOMMENT_I - llBloqueEncontrado = .T. - - *-- Metadatos del módulo - toModulo._Comment = ALLTRIM( STREXTRACT( tcLine, C_LIBCOMMENT_I, C_LIBCOMMENT_F ) ) - ENDIF - - RETURN llBloqueEncontrado - ENDPROC - - - ******************************************************************************************************************* PROCEDURE analizarBloque_OBJECTMETADATA LPARAMETERS toClase, tcLine From 0564007807033bd589ced603f0cf782dfc1841fa Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 13 Nov 2014 23:37:11 +0100 Subject: [PATCH 25/60] Changeset: 487 fdbozzo - 13/11/2014 23:17:11: - Arreglo de defectos introducidos --- foxbin2prg.prg | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index a2a2e82..3d37316 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1450,7 +1450,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDFOR - RELEASE tcFileName, tcFilters, llFound, laFiltros + RELEASE tcFileName, tcFilters, laFiltros RETURN llFound ENDFUNC @@ -13847,12 +13847,14 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE LOCAL loTables AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' ; , loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' ; , loViews AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' + LOCAL lcStoredProcedures STORE NULL TO loTables, loConnections, loViews - WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' - loTables = ._Tables - loConnections = ._Connections - loViews = ._Views + WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG' + loTables = ._Tables + loConnections = ._Connections + loViews = ._Views + lcStoredProcedures = ._StoredProcedures ERASE (tc_OutputFile) CREATE DATABASE (tc_OutputFile) @@ -13868,9 +13870,9 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE SET Property = lcMemoWithProperties ; WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('Database'),128) - IF NOT EMPTY(._StoredProcedures) + IF NOT EMPTY(lcStoredProcedures) UPDATE TABLABIN ; - SET CODE = ._StoredProcedures ; + SET CODE = lcStoredProcedures ; WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ENDIF From b9042ddcae4a774f471964999d986b7a39aa469d Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 13 Nov 2014 23:49:44 +0100 Subject: [PATCH 26/60] Changeset: 489 fdbozzo - 13/11/2014 23:46:26: - Arreglo de defectos introducidos --- foxbin2prg.prg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 171d322..8c882a3 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -685,7 +685,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY THIS.o_FSO = NULL THIS.o_FNC = NULL - SET PROCEDURE TO ENDTRY RETURN @@ -2337,6 +2336,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC) ) SET PROCEDURE TO (lcEXE_CAPS) ADDITIVE .o_FNC = CREATEOBJECT( 'cl_FileName_Caps' ) + RELEASE PROCEDURE (lcEXE_CAPS) .n_ExisteCapitalizacion = 1 ELSE From 8d7b02409e0d63b7b56a09db5192abad34e738df Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 19 Nov 2014 19:11:36 +0100 Subject: [PATCH 27/60] =?UTF-8?q?Changeset:=20492=20fdbozzo=20-=2016/11/20?= =?UTF-8?q?14=2019:30:16:=20-=20Actualizaci=C3=B3n=20versi=C3=B3n=20proyec?= =?UTF-8?q?to?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 2 +- foxbin2prg.pjt | Bin 614249 -> 624170 bytes foxbin2prg.pjx | Bin 9123 -> 9123 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index f4405c7..dff68b5 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): _ProductName = "FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = "36" +_Revision = "37" _LanguageID = "1034" _AutoIncrement = "0" * diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index ce434fb488b951a50111fe2b0495c693a3f36e0c..e3cbbe58f1357580ca4915492e0eebfd2a25c487 100644 GIT binary patch delta 51129 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 delta 42575 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 c1?eo2=>{P2+iTb9S7Q{Y7^WXpe36eUqTL1t6 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 2b168750f9bb8b879789afc3f48d7e0f92718616..677609bd4726b234110110f0f52318cfe27920d2 100644 GIT binary patch delta 1251 zcmYk6YlsbD7{{NPGka#)ox`5pwP&5(ov}K*i)1eEJ7>xi*m^p?>W29yi-&2d;kA==9&L9@0@Ns-KN=z zvcx6rnx?bB%i7$=9c_n}br?skG=-%lt0uC*wQbI5=xFVztMmMqddKM3=;D-Bo~@78Q5wDV{TOd70V38Rful^Im&tSBqb(XB^r7dTF#mCl-|73CfJYNVUvXijxUUs*HG2`uI~ z4-;x7T!)JSv$ktv)ab3HJ`0>M@NAr{OBs)56ZHq;+jU(Qh>%RYN@t*?t2O2YUf!Y) zj3>%f#1N*tV$2P3qOMjy(?YcKi;A1+uE@Bnlj!{m6;tb$#aS5IcHt56>u-t78Msxq zLi7IDTq|bt)K@X1e!0d2Kgbs~W{)QNDo(LE#4fy4W1`>8z-Xw7Ea&DB-L_P+yujz! zpbuJl8>(YGbTFpAHu3EZQQv1pIG8UiIddi|OsT@_1w`AP3Ej$y{&trQR)A#DU(F|a ze2?(JjGEKiJBZrO5;`pL#tVw<)39*r@-)DHDozOxSI%vs`VteN9x}?BtntmEuO|!ui4|m-}>FKHrdbc%$L?LuT ze93IrxbOIh!BB|T(TgIh0Zb)hr|784ulev=m z8X0-rS|H*{rZbGw0%y`uE<(?j@F31gsP;2N=Ilwi)w>M6f;sc-L^Jg*Lw-S8H*OqG zWzEB6)+-8f@Scv%wm6eDU zOY`^OnvCZVFOk&S7?98yoq02yfU)E#t)=NvlnD%#N{1s@80}8KWp%hEFqPv*)XtUg z0PYA3EiXVx+0kt7hRkyvhU?`~yh}D`-;BoBNr#yZ0iZwqJ zdlr9~dvRRMkuN?-F|F{l#OpC9F8Ao)MD#0P5nrrtSvZ+9)dR9ezqEnq*ct`T} From 32dd640de23bb644ebc8a12d33bbb617113f18ae Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 19 Nov 2014 21:33:22 +0100 Subject: [PATCH 28/60] Changeset: 493 fdbozzo - 19/11/2014 19:13:33: - Arreglo "Error 1903, String is too long to fit." --- foxbin2prg.prg | 108 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 86 insertions(+), 22 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1e10043..5000c69 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -107,6 +107,7 @@ * 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) +* 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: String is too long to fit (edyshor) * * *--------------------------------------------------------------------------------------------------- @@ -153,6 +154,7 @@ * 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) +* 19/11/2014 edyshor REPORTE BUG dbf v1.19.36: * * *--------------------------------------------------------------------------------------------------- @@ -530,6 +532,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -598,6 +601,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_ClassTimeStamp = 1130668032 && 2013/11/04 20:00:00 n_CFG_Actual = 0 n_ID = 0 + n_FileHandle = 0 o_Conversor = NULL o_Frm_Avance = NULL o_FSO = NULL @@ -11465,24 +11469,59 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Header loTable = CREATEOBJECT('CL_DBF_TABLE') - C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) + + IF toFoxBin2Prg.DBF_Conversion_Support = 4 + *-- Exportación de estructura y datos (para Diff solamente) + ERASE (.c_OutputFile + '.TMP' ) + toFoxBin2Prg.n_FileHandle = FCREATE( .c_OutputFile + '.TMP' ) + + IF toFoxBin2Prg.n_FileHandle = -1 THEN + ERROR 102, (.c_OutputFile) + ENDIF + + FWRITE( toFoxBin2Prg.n_FileHandle, C_FB2PRG_CODE ) + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) + FCLOSE( toFoxBin2Prg.n_FileHandle ) + *fdb* + + *-- Genero el DB2 + 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 + ENDIF - - *-- Genero el DB2 - 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 + C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) + + + *-- Genero el DB2 + 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 + ENDIF + ENDIF *-- Hook para permitir ejecución externa (por ejemplo, para exportar datos) @@ -16284,8 +16323,10 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE *** DH 06/02/2014: added _Records loRecords = THIS._Records - lcText = lcText + loRecords.toText(@laFields, lnFieldCount, lc_DBF_Conversion_Condition) - + *lcText = lcText + loRecords.toText(@laFields, lnFieldCount, lc_DBF_Conversion_Condition) + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + loRecords.toText(@laFields, lnFieldCount, lc_DBF_Conversion_Condition, @toFoxBin2Prg) + lcText = '' ENDIF TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -16293,6 +16334,11 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE <<>> ENDTEXT + IF toFoxBin2Prg.DBF_Conversion_Support = 4 && BIN2PRG (DATA EXPORT FOR DIFF) + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + lcText = '' + ENDIF + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -16887,21 +16933,29 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE * taFields (@! IN ) Array de información de campos * tnField_Count (v! IN ) Cantidad de campos * tc_DBF_Conversion_Condition (v? IN ) Condición de filtro para la conversión. Solo se exporta lo que la cumpla. + * toFoxBin2Prg (@! IN ) Referencia de toFoxBin2Prg *--------------------------------------------------------------------------------------------------- - LPARAMETERS taFields, tnField_Count, tc_DBF_Conversion_Condition + LPARAMETERS taFields, tnField_Count, tc_DBF_Conversion_Condition, toFoxBin2Prg EXTERNAL ARRAY taFields + #IF .F. + LOCAL toFoxBin2Prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + TRY - LOCAL lcText, loEx AS EXCEPTION ; + LOCAL lcText, loEx AS EXCEPTION, I ; , loRecord AS CL_DBF_RECORD OF 'FOXBIN2PRG.PRG' - lcText = '' + lcText = '' + I = 0 TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <<>> <> ENDTEXT + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + lcText = '' loRecord = CREATEOBJECT('CL_DBF_RECORD') IF EMPTY(tc_DBF_Conversion_Condition) @@ -16909,14 +16963,24 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE ENDIF SCAN FOR &tc_DBF_Conversion_Condition. - lcText = lcText + loRecord.toText(@taFields, tnField_Count) + I = I + 1 + lcText = loRecord.toText(@taFields, tnField_Count) + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + IF MOD(I,10000) = 0 THEN + FFLUSH( toFoxBin2Prg.n_FileHandle, .T. ) + ENDIF ENDSCAN + + lcText = '' TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> <<>> ENDTEXT + FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) + lcText = '' + CATCH TO loEx loEx.UserValue = loEx.UserValue + 'tc_DBF_Conversion_Condition = [' + TRANSFORM(tc_DBF_Conversion_Condition) + ']' + CR_LF From 34433479314c535ee97d66192f69428278270b10 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 20 Nov 2014 19:37:38 +0100 Subject: [PATCH 29/60] =?UTF-8?q?Changeset:=20494=20fdbozzo=20-=2019/11/20?= =?UTF-8?q?14=2021:33:23:=20-=20Nueva=20rutina=20FilesComparedAreEqual()?= =?UTF-8?q?=20para=20comparar=20archivos=20de=20cualquier=20tama=C3=B1o=20?= =?UTF-8?q?a=20bajo=20nivel=20cuando=20DBF=5FConversion=5FSupport=20=3D=20?= =?UTF-8?q?4=20-=20Nueva=20rutina=20RenameTmpFile2Tx2File()=20para=20renom?= =?UTF-8?q?brar=20el=20nuevo=20archivo=20temporal=20generado=20al=20tx2=20?= =?UTF-8?q?correspondiente=20cuando=20DBF=5FConversion=5FSupport=20=3D=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 114 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 109 insertions(+), 5 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5000c69..dea3142 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -502,6 +502,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -548,6 +549,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -1424,6 +1426,84 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + FUNCTION FilesComparedAreEqual + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcFilename1 (v! IN ) Nombre del archivo1 a comparar + * tcFilename2 (v! IN ) Nombre del archivo2 a comparar + * tcStrFileName2 (v! IN ) ***NO IMPLEMENTADO*** Contenido del archivo2 a comparar + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcFilename1, tcFilename2, tcStrFileName2 + + LOCAL lnComparacion, lnLen1, lnLen2, lnHandle1, lnHandle2, lnTipoComp, lnChunkSize ; + , loEx as Exception + + TRY + STORE -1 TO lnComparacion, lnHandle1, lnHandle2 + lnTipoComp = 0 + lnChunkSize = 65535 + + DO CASE + CASE NOT EMPTY(tcFilename1) AND NOT EMPTY(tcFilename2) + lnTipoComp = 1 + lnHandle1 = FOPEN( tcFilename1 ) + + IF lnHandle1 = -1 + EXIT + ENDIF + + lnHandle2 = FOPEN( tcFilename2 ) + + IF lnHandle2 = -1 + EXIT + ENDIF + + lnLen1 = FSEEK( lnHandle1, 0, 2 ) + lnLen2 = FSEEK( lnHandle2, 0, 2 ) + + *-- Comparación de tamaño + IF lnLen1 <> lnLen2 THEN + lnComparacion = 0 && Son distintos + EXIT + ENDIF + + *-- Comparación de contenido + FSEEK( lnHandle1, 0, 0 ) + FSEEK( lnHandle2, 0, 0 ) + + DO WHILE NOT ( FEOF(lnHandle1) OR FEOF(lnHandle2) ) + IF NOT SYS( 2007, FREAD( lnHandle1, lnChunkSize ), -1, 1 ) == SYS( 2007, FREAD( lnHandle2, lnChunkSize ), -1, 1 ) THEN + lnComparacion = 0 && Son distintos + EXIT + ENDIF + ENDDO + + IF lnComparacion = 0 THEN + EXIT + ENDIF + + lnComparacion = 1 && Son iguales + + ENDCASE + + CATCH TO loEx + lnComparacion = -1 && Error + THROW + + FINALLY + DO CASE + CASE lnTipoComp = 1 + FCLOSE( lnHandle1 ) + FCLOSE( lnHandle2 ) + + ENDCASE + + ENDTRY + + RETURN lnComparacion + ENDFUNC + + FUNCTION FilenameFoundInFilter *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) @@ -2357,6 +2437,30 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + ******************************************************************************************************************* + PROCEDURE RenameTmpFile2Tx2File + LPARAMETERS tcFileName + + LOCAL lcTmpFile, loFSO AS Scripting.FileSystemObject, loEx as Exception + + TRY + *loFSO = THIS.o_FSO + lcTmpFile = tcFileName + '.TMP' + THIS.ChangeFileAttribute( tcFileName, '+N' ) + ERASE (tcFileName) + RENAME (lcTmpFile) TO (tcFileName) + + CATCH TO loEx + THROW + + FINALLY + *loFSO = NULL + ENDTRY + + RETURN + ENDPROC + + ******************************************************************************************************************* PROCEDURE writeErrorLog LPARAMETERS tcText @@ -11482,20 +11586,20 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg FWRITE( toFoxBin2Prg.n_FileHandle, C_FB2PRG_CODE ) loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) FCLOSE( toFoxBin2Prg.n_FileHandle ) - *fdb* + - *-- Genero el DB2 + *-- Genero el DB2, renombrando el TMP 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 ) + CASE FILE(.c_OutputFile) AND toFoxBin2Prg.FilesComparedAreEqual( .c_OutputFile + '.TMP', .c_OutputFile ) = 1 + ERASE (.c_OutputFile + '.TMP') *.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 + AND NOT toFoxBin2Prg.RenameTmpFile2Tx2File( .c_OutputFile ) *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) ENDCASE From a299d356451c132c883fb4b3fc7f4dd6b70f3371 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 20 Nov 2014 19:39:46 +0100 Subject: [PATCH 30/60] =?UTF-8?q?Changeset:=20495=20fdbozzo=20-=2020/11/20?= =?UTF-8?q?14=2019:37:38:=20-=20Correcci=C3=B3n=20cr=C3=A9ditos=20y=20agra?= =?UTF-8?q?decimientos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index dea3142..c1b9fc4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -107,7 +107,7 @@ * 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) -* 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: String is too long to fit (edyshor) +* 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (edyshor) * * *--------------------------------------------------------------------------------------------------- @@ -154,7 +154,7 @@ * 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) -* 19/11/2014 edyshor REPORTE BUG dbf v1.19.36: +* 19/11/2014 edyshor REPORTE BUG dbf v1.19.36: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (Agregado en v1.19.37) * * *--------------------------------------------------------------------------------------------------- From 3db9453ad152345d1c369ccee697beb879e71752 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 20 Nov 2014 21:22:13 +0100 Subject: [PATCH 31/60] =?UTF-8?q?Changeset:=20496=20fdbozzo=20-=2020/11/20?= =?UTF-8?q?14=2019:39:47:=20-=20Nuevo=20par=C3=A1metro=20ClearDBFLastUpdat?= =?UTF-8?q?e=20para=20evitar=20diferencias=20por=20este=20dato=20(edyshor)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c1b9fc4..1ac51d0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -108,6 +108,7 @@ * 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) * 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (edyshor) +* 19/11/2014 FDBOZZO v1.19.37 Mejora dbf: Nuevo parámetro ClearDBFLastUpdate para evitar diferencias por este dato (edyshor) * * *--------------------------------------------------------------------------------------------------- @@ -155,6 +156,7 @@ * 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) * 19/11/2014 edyshor REPORTE BUG dbf v1.19.36: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (Agregado en v1.19.37) +* 19/11/2014 edyshor MEJORA dbf v1.19.36: Nuevo parámetro ClearDBFLastUpdate para evitar diferencias por este dato (Agregado en v1.19.37) * * *--------------------------------------------------------------------------------------------------- @@ -515,6 +517,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -594,6 +597,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_Recompile = .T. l_NoTimestamps = .T. l_ClearUniqueID = .T. + l_ClearDBFLastUpdate = .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 @@ -744,6 +748,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE l_ClearDBFLastUpdate_ACCESS + IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) + RETURN THIS.l_ClearDBFLastUpdate + ELSE + RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).l_ClearDBFLastUpdate, THIS.l_ClearDBFLastUpdate ) + ENDIF + ENDPROC + + PROCEDURE l_OptimizeByFilestamp_ACCESS IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) ) RETURN THIS.l_OptimizeByFilestamp @@ -1250,6 +1263,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) ) ENDIF + CASE LEFT( laConfig(I), 19 ) == LOWER('ClearDBFLastUpdate:') + lcValue = ALLTRIM( SUBSTR( laConfig(I), 20 ) ) + IF INLIST( lcValue, '0', '1' ) THEN + lo_CFG.l_ClearDBFLastUpdate = ( TRANSFORM(lcValue) == '1' ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearDBFLastUpdate: ' + 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 @@ -7947,7 +7967,12 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin USE IN (SELECT(JUSTSTEM(.c_OutputFile))) *-- La actualización de la fecha sirve para evitar diferencias al regenerar el DBF - ldLastUpdate = EVALUATE( '{^' + toTable._LastUpdate + '}' ) + IF toFoxBin2Prg.l_ClearDBFLastUpdate THEN + ldLastUpdate = EVALUATE( '{^2013/11/04}' ) + ELSE + ldLastUpdate = EVALUATE( '{^' + toTable._LastUpdate + '}' ) + ENDIF + loDBFUtils.write_DBC_BackLink( .c_OutputFile, toTable._Database, ldLastUpdate ) ENDWITH && THIS @@ -16374,7 +16399,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE <> <<>> <> <<>> <> - <<>> <> + <<>> <> <<>> <> <<>> <> <<>> <> @@ -20149,6 +20174,7 @@ DEFINE CLASS CL_CFG AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -20187,6 +20213,7 @@ DEFINE CLASS CL_CFG AS CUSTOM l_Recompile = NULL l_NoTimestamps = NULL l_ClearUniqueID = NULL + l_ClearDBFLastUpdate = NULL l_OptimizeByFilestamp = NULL n_ExtraBackupLevels = NULL c_VC2 = NULL From 9c7273d46b2be38cb60ed57f86a2d52665366b15 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 20 Nov 2014 21:52:36 +0100 Subject: [PATCH 32/60] Changeset: 497 fdbozzo - 20/11/2014 21:52:17: --- foxbin2prg.prg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3d37316..a1e49ff 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -107,7 +107,7 @@ * 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) -* 30/10/2014 FDBOZZO v1.19.37 Mejora: Optimizaciones y condicionamiento de EXTERNAL +* 30/10/2014 FDBOZZO v1.19.37 Mejora: Optimizaciones * * *--------------------------------------------------------------------------------------------------- From 1ec5c192d3a707a13f03f0cf30a4f31c2e949548 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Thu, 20 Nov 2014 22:32:59 +0100 Subject: [PATCH 33/60] =?UTF-8?q?Changeset:=20500=20fdbozzo=20-=2020/11/20?= =?UTF-8?q?14=2022:10:08:=20-=20Actualizaci=C3=B3n=20de=20foxbin2prg.cfg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.cfg | 32 ++++++++++++++++++++++++++++++-- foxbin2prg.exe | Bin 447279 -> 459895 bytes 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 6cd76ad..8f79247 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -2,8 +2,7 @@ * FOXBIN2PRG v1.19.26 * CONFIGURATION FILE / ARCHIVO DE CONFIGURACIÓN *--------------------------------------------------------------------------------------------------- -* EN: DON'T MODIFY THIS DOCUMENTATION SECTION, MODIFY *UNDER* THIS SECTION -* ES: NO MODIFIQUE ESTA SECCIÓN DE DOCUMENTACIÓN, MODIFIQUE *DEBAJO* DE ESTA SECCIÓN +* DON'T MODIFY THIS DOCUMENTATION SECTION / NO MODIFIQUE ESTA SECCIÓN DE DOCUMENTACIÓN * * DETAIL OF SUPPORTED VALUES / DETALLE DE VALORES SOPORTADOS * If no values given, this are the defaults / Si no se proporcionan valores, estos son los predeterminados @@ -15,6 +14,7 @@ * Debug: 0 && Don't Activate individual .Log by default / No Activar .Log por defecto * ExtraBackupLevels: 1 && By default 1 BAK is created. With this you can make more .N.BAK, or none / Por defecto 1 BAK es creado. Con esto puede crear más .N.BAK, o ninguno * ClearUniqueID: 1 && 0=Keep UniqueID, 1=Clear Unique ID. Useful for Diff and Merge / 0=Mantener UniqueID, 1=Borrar Unique ID. Util para Diff y Merge +* ClearDBFLastUpdate: 1 && 0=Keep DBF LastUpdate, 1=Clear DBF LastUpdate. Useful for Diff. / 0=Mantener DBF LastDate, , 1=Borrar DBF LastDate. Util para Diff. * OptimizeByFilestamp: 0 && Optimize file regeneration depending on file timestamp / Optimizar la regeneración de archivos dependiendo del timestamp de archivo * AllowMultiConfig: 1 && 1=Allow CFG files per directory. if no CFG found, then use Main CFG. 0=Only use Main CFG * DropNullCharsFromCode: 1 && 1=Drop NULL chars from source code / 0=Leave Nulls in code, if any @@ -53,3 +53,31 @@ *extension: db2=dba *extension: dc2=dca + +* EN: Uncomment to activate the new value, comment to deactivate and use the default +* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado +*--------------------------------------------------------------------------------------------------- +*DontShowProgress: 1 +*DontShowErrors: 1 +*NoTimestamps: 0 +*Debug: 1 +*ExtraBackupLevels: 0 +*ClearUniqueID: 0 +*ClearDBFLastUpdate: 0 +*OptimizeByFilestamp: 0 +*AllowMultiConfig: 0 +*DropNullCharsFromCode: 0 + + +* EN: Uncomment to activate the new value, comment to deactivate and use the default +* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado +* 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge), 4=Generate TXT with DATA for DIFF (DBF only) +*--------------------------------------------------------------------------------------------------- +*PJX_Conversion_Support: 2 +*VCX_Conversion_Support: 2 +*SCX_Conversion_Support: 2 +*FRX_Conversion_Support: 2 +*LBX_Conversion_Support: 2 +*MNX_Conversion_Support: 2 +*DBC_Conversion_Support: 2 +*DBF_Conversion_Support: 4 diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 607e255d785f5fb54b22305c78b8b7bedf539880..e88254e09a7fa7b0e103156f59c7ca4b2ed67d7f 100644 GIT binary patch delta 53030 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
$lE@3Xg=M?@Wg>@Jf82oW<^z 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 RY6LZCR+}fct~=V${{oBX+7$o* From 2b6deca4f8f281fd0cdd0851f9ad443d31d73490 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 17:32:18 +0100 Subject: [PATCH 34/60] Changeset: 501 fdbozzo - 21/11/2014 16:58:27: - Agregado soporte para comentarios && en las configuraciones de foxbin2prg.cfg --- foxbin2prg.prg | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1e10043..4c92918 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -107,6 +107,7 @@ * 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) +* 19/11/2014 FDBOZZO v1.19.37 Mejora: Las configuraciones de foxbin2prg.cfg no permiten comentarios && al final (edyshor) * * *--------------------------------------------------------------------------------------------------- @@ -153,6 +154,7 @@ * 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) +* 19/11/2014 edyshor MEJORA cfg v1.19.36: DBF_Conversion_Excluded no permite comentarios && al final (Agregado en v1.19.37) * * *--------------------------------------------------------------------------------------------------- @@ -504,6 +506,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -545,6 +548,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -1138,7 +1142,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile - LOCAL lcConfigFile, llExisteConfig, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path ; + LOCAL lcConfigFile, llExisteConfig, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine ; , lo_CFG AS CL_CFG OF 'FOXBIN2PRG.PRG' ; , lo_Configuration AS Collection ; , loEx as Exception @@ -1185,10 +1189,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) - laConfig(I) = LOWER( laConfig(I) ) + *laConfig(I) = LOWER( laConfig(I) ) + .set_Line( @lcConfigLine, @laConfig, I ) + .get_SeparatedLineAndComment( @lcConfigLine ) + laConfig(I) = LOWER( lcConfigLine ) DO CASE - CASE INLIST( LEFT( laConfig(I), 1 ), '*', '#', '/', "'" ) + CASE EMPTY( laConfig(I) ) OR INLIST( LEFT( laConfig(I), 1 ), '*', '#', '/', "'" ) LOOP CASE LEFT( laConfig(I), 10 ) == LOWER('Extension:') @@ -2212,6 +2219,26 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE get_SeparatedLineAndComment + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcLine (!@ IN/OUT) Línea a separar del comentario + * tcComment (@? OUT) Comentario + *--------------------------------------------------------------------------------------------------- + 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 + ENDIF + + RETURN (ln_AT_Cmt > 0) + ENDPROC + + ******************************************************************************************************************* PROCEDURE normalizarCapitalizacionArchivos LPARAMETERS tl_NormalizeInputFile @@ -2353,6 +2380,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + ******************************************************************************************************************* + PROCEDURE set_Line + LPARAMETERS tcLine, taCodeLines, I + tcLine = LTRIM( taCodeLines(I), 0, ' ', CHR(9) ) + ENDPROC + + ******************************************************************************************************************* PROCEDURE writeErrorLog LPARAMETERS tcText From 1330fee3f02ff0fc998e668fbed27b247ca4fb1b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 18:31:03 +0100 Subject: [PATCH 35/60] =?UTF-8?q?Changeset:=20503=20fdbozzo=20-=2021/11/20?= =?UTF-8?q?14=2017:52:46:=20-=20Vuelvo=20a=20renombrar=20el=20archivo=20de?= =?UTF-8?q?=20traducci=C3=B3n=20al=20alem=C3=A1n=20como=20"de",=20que=20es?= =?UTF-8?q?=20el=20c=C3=B3digo=20ISO=20est=C3=A1ndar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2Prg__kompilieren_auf_Deutsch.vbs | 2 +- foxbin2prg_ge.h => foxbin2prg_de.h | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename foxbin2prg_ge.h => foxbin2prg_de.h (100%) diff --git a/FoxBin2Prg__kompilieren_auf_Deutsch.vbs b/FoxBin2Prg__kompilieren_auf_Deutsch.vbs index f5c068c..e7a5ab1 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_ge.h") +cOrigFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg_de.h") cDestFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "foxbin2prg.h") cPath = FileSystemObject.GetParentFolderName( cOrigFile ) nRet = FileSystemObject.CopyFile( cOrigFile, cDestFile, True ) diff --git a/foxbin2prg_ge.h b/foxbin2prg_de.h similarity index 100% rename from foxbin2prg_ge.h rename to foxbin2prg_de.h From 7fe7739a89e7b414eba26e1293ad4962d3932eef Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 18:44:36 +0100 Subject: [PATCH 36/60] =?UTF-8?q?Changeset:=20505=20fdbozzo=20-=2021/11/20?= =?UTF-8?q?14=2018:41:03:=20-=20Algunas=20mejoras=20en=20foxbin2prg.cfg=20?= =?UTF-8?q?y=20cambio=20de=20versi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.cfg | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 8f79247..45ee918 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -1,8 +1,11 @@ **************************************************************************************************** -* FOXBIN2PRG v1.19.26 +* FOXBIN2PRG v1.19.37 * CONFIGURATION FILE / ARCHIVO DE CONFIGURACIÓN -*--------------------------------------------------------------------------------------------------- -* DON'T MODIFY THIS DOCUMENTATION SECTION / NO MODIFIQUE ESTA SECCIÓN DE DOCUMENTACIÓN +**************************************************************************************************** + + +**************************************************************************************************** +* DOCUMENTATION SECTION / SECCIÓN DE DOCUMENTACIÓN * * DETAIL OF SUPPORTED VALUES / DETALLE DE VALORES SOPORTADOS * If no values given, this are the defaults / Si no se proporcionan valores, estos son los predeterminados @@ -39,7 +42,7 @@ **************************************************************************************************** -* YOU CAN MODIFY FROM HERE! / PUEDE MODIFICAR DESDE AQUÍ! +* YOU CAN MODIFY FROM HERE / PUEDE MODIFICAR DESDE AQUÍ * EN: Uncomment for SourceSafe compatibility. You can change the extension on the right side. * ES: Descomentar para compatibilidad con SourceSafe. Puede cambiar la extensión del lado derecho. From f7f400cd0157175108e4d85385747c9247e431e4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 20:12:16 +0100 Subject: [PATCH 37/60] =?UTF-8?q?Changeset:=20506=20fdbozzo=20-=2021/11/20?= =?UTF-8?q?14=2018:49:02:=20-=20Normalizaci=C3=B3n=20de=20foxbin2prg.cfg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.cfg | 62 +++++++++++++++++--------------------------------- 1 file changed, 21 insertions(+), 41 deletions(-) diff --git a/foxbin2prg.cfg b/foxbin2prg.cfg index 45ee918..38cbbf8 100644 --- a/foxbin2prg.cfg +++ b/foxbin2prg.cfg @@ -3,14 +3,13 @@ * CONFIGURATION FILE / ARCHIVO DE CONFIGURACIÓN **************************************************************************************************** - **************************************************************************************************** -* DOCUMENTATION SECTION / SECCIÓN DE DOCUMENTACIÓN +* OPTION DOCUMENTATION SECTION / SECCIÓN DE DOCUMENTACIÓN DE OPCIONES * * DETAIL OF SUPPORTED VALUES / DETALLE DE VALORES SOPORTADOS -* If no values given, this are the defaults / Si no se proporcionan valores, estos son los predeterminados +* If no values given, these are the DEFAULTS / Si no se proporcionan valores, estos son los PREDETERMINADOS * -* extension: xx2 && Default FoxBin2Prg extensions ends in '2' / Las extensiones por defecto de FoxBin2Prg terminan en '2' +* extension: tx2=newext && Default FoxBin2Prg extensions ends in '2' (see at the bottom) / Las extensiones por defecto de FoxBin2Prg terminan en '2' (ver debajo de todo) * DontShowProgress: 0 && Show progress bar by default in multi-file processing / Mostrar barra de progreso por defecto en procesamiento multi-archivo * DontShowErrors: 0 && Show message errors by default / Mostrar mensajes de error por defecto * NoTimestamps: 1 && Crear timespampt by default for minimize differences / Vaciar Timestamps por defecto para minimizar diferencias @@ -21,18 +20,26 @@ * OptimizeByFilestamp: 0 && Optimize file regeneration depending on file timestamp / Optimizar la regeneración de archivos dependiendo del timestamp de archivo * AllowMultiConfig: 1 && 1=Allow CFG files per directory. if no CFG found, then use Main CFG. 0=Only use Main CFG * DropNullCharsFromCode: 1 && 1=Drop NULL chars from source code / 0=Leave Nulls in code, if any -* XXX_Conversion_Support: N && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge), 4=Generate TXT with DATA for DIFF (DBF only) -* PJX_Conversion_Support: 2 && Default value -* VCX_Conversion_Support: 2 && Default value -* SCX_Conversion_Support: 2 && Default value -* FRX_Conversion_Support: 2 && Default value -* LBX_Conversion_Support: 2 && Default value -* MNX_Conversion_Support: 2 && Default value -* DBC_Conversion_Support: 2 && Default value -* DBF_Conversion_Support: 1 && Default value >> EN: FoxBin2Prg support bi-directional convertion of DBFs, but does not keep data. Use with care. -* >> ES: FoxBin2Prg tiene soporte bi-direccional para convertir DBF, pero no mantiene los datos. Usar con cuidado. + +*-- CONVERTION OPTIONS / OPCIONES DE CONVERSIÓN +* XXX_Conversion_Support: N && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* PJX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* VCX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* SCX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* FRX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* LBX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* MNX_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* DBC_Conversion_Support: 2 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge) +* DBF_Conversion_Support: 1 && 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge), 4=Generate TXT with DATA for DIFF (No Bidirectional!) +* >>DBF_Conversion_Support NOTE: >> EN: FoxBin2Prg support bi-directional convertion of DBFs, but does not keep data. Use with care. +* >> ES: FoxBin2Prg tiene soporte bi-direccional para convertir DBF, pero no mantiene los datos. Usar con cuidado. * DBF_Conversion_Included: * && If DBF_Conversion_Support:4, you can specify mnultiple filemasks: www,fb2p_free.dbf / Si DBF_Conversion_Support:4, se pueden indicar múltiples máscaras de archivo: www,fb2p_free.dbf * DBF_Conversion_Excluded: && If DBF_Conversion_Support:4, you can specify mnultiple filemasks: www,fb2p_free.dbf / Si DBF_Conversion_Support:4, se pueden indicar múltiples máscaras de archivo: www,fb2p_free.dbf + +*-- "CLASS PER FILE" OPTIONS (UseClassPerFile: 1) / OPCIONES DE "CLASE POR ARCHIVO" (UseClassPerFile: 1) +* UseClassPerFile: 0 && 0=One library tx2 file, 1=Multiple file.class.tx2 files / 0=Una archivo librería tx2, 1=Múltiples archivo.clase.tx2 +* RedirectClassPerFileToMain: 0 && 0=Don't redirect to file.tx2, 1=Redirect to file.tx2 when selecting file.class.tx2 / 0=No redireccionar a archivo.tx2, 1=Redireccionar a archivo.tx2 cuando se seleccione archivo.clase.tx2 +* ClassPerFileCheck: 0 && 0=Don't check file.class.tx2 inclusion, 1=Check file.class.tx2 inclusion / 0=No verificar la inclusión de archivo.clase.tx2, 1=Verificar la inclusión de archivo.clase.tx2 * * EN: Note: This values have precedence over internal parameters and parameters used on scripts * ES: Nota: Estos valores tienen precedencia sobre los parámetros internos y los parámetros usados en los scripts @@ -57,30 +64,3 @@ *extension: dc2=dca -* EN: Uncomment to activate the new value, comment to deactivate and use the default -* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado -*--------------------------------------------------------------------------------------------------- -*DontShowProgress: 1 -*DontShowErrors: 1 -*NoTimestamps: 0 -*Debug: 1 -*ExtraBackupLevels: 0 -*ClearUniqueID: 0 -*ClearDBFLastUpdate: 0 -*OptimizeByFilestamp: 0 -*AllowMultiConfig: 0 -*DropNullCharsFromCode: 0 - - -* EN: Uncomment to activate the new value, comment to deactivate and use the default -* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado -* 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge), 4=Generate TXT with DATA for DIFF (DBF only) -*--------------------------------------------------------------------------------------------------- -*PJX_Conversion_Support: 2 -*VCX_Conversion_Support: 2 -*SCX_Conversion_Support: 2 -*FRX_Conversion_Support: 2 -*LBX_Conversion_Support: 2 -*MNX_Conversion_Support: 2 -*DBC_Conversion_Support: 2 -*DBF_Conversion_Support: 4 From d092ee398f9219ce80f2f5c17881d47cc7252115 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 20:17:27 +0100 Subject: [PATCH 38/60] Changeset: 507 fdbozzo - 21/11/2014 20:12:17: - Actualizado FoxBin2PRGVersionFile --- FoxBin2PRGVersionFile.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 0526886..0840076 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.36' - .VersionDate = Date(2014,10,08) + .VersionNumber = 'v1.19.37' + .VersionDate = Date(2014,11,22) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,13 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +2014/11/22 v1.19.37 +- Added Class per file support, configurable with UseClassPerFile:1 (Ryan Harris/Lutz Scheffler) +- Code Optimizations +- Enhancement: foxbin2prg.cfg configuration options can now have "&&" comments at the right of the values (edyshor) +- Bug Fix dbf: "Error 1903, String is too long to fit" when converting long DBF files with "DBF_Conversion_Support:4" to text (edyshor) +- Added support for the new "ClearDBFLastUpdate" setting in FoxBin2Prg.cfg, activated by default to minimize DB2 differences (edyshor) + 2014/10/08 v1.19.36 - Bug fix mnx: When generating mn2 text view, menu all pad IDs are generated as _000000000 (bug introduced in v1.19.36) - Enhancement: New "VFP9_FoxBin2Prg.vbs" script for "SendTo" menu, that replaces FoxBin2Prg.exe in this menu and adds a process status message From 34d0dca24e1667ff1bffda0a6b88c0778774c586 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 21 Nov 2014 22:49:04 +0100 Subject: [PATCH 39/60] Changeset: 508 fdbozzo - 21/11/2014 22:47:07: --- foxbin2prg.prg | 1 + 1 file changed, 1 insertion(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 1ac51d0..b5c78a2 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1405,6 +1405,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) + .writeLog( '> l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) lo_CFG = NULL RELEASE lo_CFG From ca7bc99d6356bc42a67a79ef000d516b02499f87 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 22 Nov 2014 11:41:05 +0100 Subject: [PATCH 40/60] =?UTF-8?q?Changeset:=20510=20fdbozzo=20-=2021/11/20?= =?UTF-8?q?14=2023:28:37:=20-=20Nuevo=20m=C3=A9todo=20"AvanceDelProceso"?= =?UTF-8?q?=20y=20propiedades=20"n=5Favance=5Fproceso"=20y=20"n=5Favance?= =?UTF-8?q?=5Fmaximo"=20-=20Implementaci=C3=B3n=20de=20la=20propiedad=20"n?= =?UTF-8?q?=5Favance=5Fmaximo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 95b393f..b3dd852 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2740,6 +2740,7 @@ DEFINE CLASS c_conversor_base AS SESSION #ENDIF _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -2781,6 +2782,8 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] @@ -2813,6 +2816,8 @@ DEFINE CLASS c_conversor_base AS SESSION c_OriginalFileName = '' c_ClaseActual = '' oFSO = NULL + n_Avance_Proceso = 0 + n_Avance_Maximo = 0 ******************************************************************************************************************* @@ -2947,6 +2952,11 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC + PROCEDURE AvanceDelProceso + LPARAMETERS tcTexto, tnValor, tnTotal + ENDPROC + + ******************************************************************************************************************* PROCEDURE buscarObjetoDelMetodoPorNombre LPARAMETERS tcNombreObjeto, toClase @@ -6462,7 +6472,8 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ENDFOR ENDIF - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) @@ -6795,6 +6806,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDIF lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) @@ -7107,6 +7119,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -7903,6 +7916,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8332,6 +8346,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8628,6 +8643,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8806,6 +8822,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -10858,6 +10875,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE @@ -11108,6 +11126,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE @@ -11370,6 +11389,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') @@ -12078,6 +12098,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) *-- Header @@ -12463,6 +12484,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) *-- Verificación de menú VFP 9 From a55b15c993c43b636774ecce4419760323a8e104 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 22 Nov 2014 19:36:54 +0100 Subject: [PATCH 41/60] =?UTF-8?q?Changeset:=20511=20fdbozzo=20-=2022/11/20?= =?UTF-8?q?14=2015:56:57:=20-=20Mejora=20en=20la=20b=C3=BAsqueda=20de=20re?= =?UTF-8?q?gistros=20ignorando=20la=20capitalizaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 95b393f..c7af5b1 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2825,6 +2825,7 @@ DEFINE CLASS c_conversor_base AS SESSION SET SAFETY OFF SET TABLEPROMPT OFF SET BLOCKSIZE TO 0 + SET EXACT ON PUBLIC C_FB2PRG_CODE C_FB2PRG_CODE = '' && Contendrá todo el código generado @@ -10887,7 +10888,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDIF - SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" AND TABLABIN.RESERVED1=="Class" + SCAN ALL FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND PROPER( TABLABIN.RESERVED1 ) == "Class" STORE 0 TO lnMethodCount STORE '' TO laMethods, laCode, lcCodigo lnClassCount = lnClassCount + 1 @@ -10905,8 +10906,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg loRegClass.UNIQUEID = ALLTRIM(loRegClass.UNIQUEID) ENDIF - lcObjName = ALLTRIM(loRegClass.OBJNAME) - laClasses(lnClassCount,1) = LOWER(lcObjName) + lcObjName = LOWER( ALLTRIM( loRegClass.OBJNAME ) ) + laClasses(lnClassCount,1) = lcObjName .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -10923,9 +10924,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *------------------------------------------------------------------------------- lnObjCount = 0 lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName - SCAN REST WHILE TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName lnObjCount = lnObjCount + 1 DIMENSION laObjs(lnObjCount,3) loRegObj = NULL @@ -10986,11 +10987,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName SCAN REST ; - FOR TABLABIN.PLATFORM = "WINDOWS" AND NOT TABLABIN.RESERVED1=="Class" ; - WHILE ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND NOT PROPER( TABLABIN.RESERVED1 ) == "Class" ; + WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName loRegObj = NULL SCATTER MEMO NAME loRegObj @@ -11148,8 +11149,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; - AND (EMPTY(TABLABIN.PARENT) ; - AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) + AND ( EMPTY( TABLABIN.PARENT ) ; + AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) STORE 0 TO lnMethodCount STORE '' TO laMethods, laCode, lcCodigo @@ -11168,8 +11169,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg loRegClass.UNIQUEID = ALLTRIM(loRegClass.UNIQUEID) ENDIF - lcObjName = ALLTRIM(loRegClass.OBJNAME) - laClasses(lnClassCount,1) = LOWER(lcObjName) + lcObjName = LOWER( ALLTRIM(loRegClass.OBJNAME) ) + laClasses(lnClassCount,1) = lcObjName .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11186,9 +11187,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *------------------------------------------------------------------------------- lnObjCount = 0 lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName - SCAN REST WHILE TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName lnObjCount = lnObjCount + 1 DIMENSION laObjs(lnObjCount,3) loRegObj = NULL @@ -11250,13 +11251,13 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName SCAN REST ; - FOR TABLABIN.PLATFORM = "WINDOWS" ; + FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" ; AND NOT (EMPTY(TABLABIN.PARENT) ; - AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) ; - WHILE ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + AND ( INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment' , 'form', 'formset' ) ) ) ; + WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName loRegObj = NULL SCATTER MEMO NAME loRegObj From 9251b41c05e86692f1b94582446fcfa9c99abcc2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 22 Nov 2014 19:42:30 +0100 Subject: [PATCH 42/60] =?UTF-8?q?Changeset:=20512=20fdbozzo=20-=2022/11/20?= =?UTF-8?q?14=2019:37:49:=20-=20Arreglo=20de=20l=C3=ADnea=20vac=C3=ADa=20f?= =?UTF-8?q?altante=20en=20la=20cabecera=20OLE=20del=20inicio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 1 + 1 file changed, 1 insertion(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 8c882a3..c59e524 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10340,6 +10340,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *!* ENDSCAN TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> * ENDTEXT From 6ca039c68b9c42eb8d762d84d80475b08da87405 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 02:27:03 +0100 Subject: [PATCH 43/60] =?UTF-8?q?Changeset:=20514=20fdbozzo=20-=2022/11/20?= =?UTF-8?q?14=2019:47:12:=20-=20Encapsulaci=C3=B3n=20y=20optimizaci=C3=B3n?= =?UTF-8?q?=20en=20nuevo=20m=C3=A9todo=20"Classify=5FPAM=5FHidden=5FProtec?= =?UTF-8?q?ted"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 102 +++++++++++++++++++++++++------------------------ 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c7af5b1..4794ae4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -8947,8 +8947,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base #IF .F. LOCAL THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF + _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -9011,6 +9013,54 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDPROC + PROCEDURE Classify_PAM_Hidden_Protected + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tnPropsAndValues_Count (@! IN ) + * taPropsAndValues (@! IN ) + * tnProtected_Count (@! IN ) + * taProtected (@! IN ) + * tnPropsAndComments_Count (@! IN ) + * taPropsAndComments (@! IN ) + * tcHiddenProp (@! OUT) Lista de propiedades Hidden + * tcProtectedProp (@! OUT) Lista de propiedades Protected + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tnPropsAndValues_Count, taPropsAndValues, tnProtected_Count, taProtected ; + , tnPropsAndComments_Count, taPropsAndComments, tcHiddenProp, tcProtectedProp + + IF tnPropsAndValues_Count > 0 THEN + *-- Recorro las propiedades (campo Properties) para ir conformando + *-- las definiciones HIDDEN y PROTECTED + LOCAL lcProp, I + + STORE '' TO tcHiddenProp, tcProtectedProp + + FOR I = 1 TO tnProtected_Count + DO CASE + CASE EMPTY( taProtected(I) ) + LOOP + + CASE RIGHT( taProtected(I), 1 ) == '^' + *-- Hidden Property or method + lcProp = CHRTRAN( taProtected(I), '^', '' ) + IF ASCAN(taPropsAndComments, '*' + lcProp, 1, 0, 1, 1+2+4) > 0 + LOOP && method + ENDIF + tcHiddenProp = tcHiddenProp + ',' + lcProp + + OTHERWISE + *-- Protected Property or method + IF ASCAN(taPropsAndComments, '*' + taProtected(I), 1, 0, 1, 1+2+4) > 0 + LOOP && method + ENDIF + tcProtectedProp = tcProtectedProp + ',' + taProtected(I) + ENDCASE + ENDFOR + + ENDIF + ENDPROC + + ******************************************************************************************************************* PROCEDURE get_ADD_OBJECT_METHODS LPARAMETERS toRegObj, toRegClass, tcMethods, taMethods, taCode, tnMethodCount ; @@ -9959,58 +10009,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base .get_PropsFrom_PROTECTED( toRegClass.PROTECTED, .T., @taProtected, @tnProtected_Count, '' ) IF tnPropsAndValues_Count > 0 THEN - *-- Recorro las propiedades (campo Properties) para ir conformando - *-- las definiciones HIDDEN y PROTECTED - FOR I = 1 TO tnPropsAndValues_Count - IF EMPTY(taPropsAndValues(I,1)) - LOOP - ENDIF - - IF tnProtected_Count = 0 - lnProtectedItem = 0 - ELSE - lnProtectedItem = ASCAN(taProtected, taPropsAndValues(I,1), 1, 0, 0, 1) - ENDIF - - DO CASE - CASE lnProtectedItem = 0 - *-- Propiedad común - - CASE LOWER( taProtected(lnProtectedItem) ) == LOWER( taPropsAndValues(I,1) ) - *-- Propiedad protegida - lcProtectedProp = lcProtectedProp + ',' + taPropsAndValues(I,1) - - CASE LOWER( taProtected(lnProtectedItem) ) == LOWER( taPropsAndValues(I,1) + '^' ) - *-- Propiedad oculta - lcHiddenProp = lcHiddenProp + ',' + taPropsAndValues(I,1) - - ENDCASE - ENDFOR - - *-- Segunda barrida para las propiedades Hidden/Protected que no estén definidas en Properties - FOR I = 1 TO tnProtected_Count - *-- La propiedad evaluada no debe ser vacía, debe estar en la lista de PROPERTIES y no debe ser un *Método - IF EMPTY(taProtected(I,1)) ; - OR ASCAN(taPropsAndValues, CHRTRAN( taProtected(I), '^', '' ), 1, 0, 1, 1) > 0 ; - OR ASCAN(taPropsAndComments, '*' + CHRTRAN( taProtected(I), '^', '' ), 1, 0, 1, 1) > 0 - LOOP - ENDIF - - IF RIGHT( taProtected(I), 1 ) == '^' - *-- Propiedad oculta - lcHiddenProp = lcHiddenProp + ',' + CHRTRAN( taProtected(I), '^', '' ) - - ELSE - *-- Propiedad protegida - lcProtectedProp = lcProtectedProp + ',' + taProtected(I) - - ENDIF - ENDFOR - + .Classify_PAM_Hidden_Protected( @tnPropsAndValues_Count, @taPropsAndValues, @tnProtected_Count, @taProtected ; + , @tnPropsAndComments_Count, @taPropsAndComments, @lcHiddenProp, @lcProtectedProp ) .write_DEFINED_PAM( @taPropsAndComments, tnPropsAndComments_Count, @tcCodigo ) - .write_HIDDEN_Properties( @lcHiddenProp, @tcCodigo ) - .write_PROTECTED_Properties( @lcProtectedProp, @tcCodigo ) *-- Escribo las propiedades de la clase y sus comentarios (los comentarios aquí son redundantes) From 5ab9309dd6cb2a1438b532945167f18886f5659e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 17:36:22 +0100 Subject: [PATCH 44/60] =?UTF-8?q?Changeset:=20515=20fdbozzo=20-=2023/11/20?= =?UTF-8?q?14=2012:07:18:=20-=20Mejoras=20en=20normalizaci=C3=B3n=20de=20c?= =?UTF-8?q?apitalizaci=C3=B3n=20-=20Quitados=20los=20datos=20innecesarios?= =?UTF-8?q?=20y=20redundantes=20de=20los=20objetos=20OLE=20(Nombre,=20Pare?= =?UTF-8?q?nt,=20ObjName)=20-=20Mejoras=20en=20ASCAN()=20para=20b=C3=BAsqu?= =?UTF-8?q?edas=20exactas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 90 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 26 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 4794ae4..2dec675 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -9205,11 +9205,19 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE get_NombresObjetosOLEPublic LPARAMETERS ta_NombresObjsOle *-- Obtengo los objetos "OLEPublic" + LOCAL I + SELECT PADR(OBJNAME,100) OBJNAME ; FROM TABLABIN ; WHERE TABLABIN.PLATFORM = "COMMENT" AND TABLABIN.RESERVED2 == "OLEPublic" ; ORDER BY 1 ; INTO ARRAY ta_NombresObjsOle + + FOR I = 1 TO _TALLY + ta_NombresObjsOle(I) = ALLTRIM( ta_NombresObjsOle(I) ) + ENDFOR + + RETURN ENDPROC @@ -9244,10 +9252,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lnPos = AT(' ', laLines(I)) && Un espacio separa la propiedad de su comentario (si tiene) IF lnPos = 0 - taPropsAndComments(I,1) = laLines(I) + taPropsAndComments(I,1) = LOWER( laLines(I) ) taPropsAndComments(I,2) = '' ELSE - taPropsAndComments(I,1) = LEFT( laLines(I), lnPos - 1 ) + taPropsAndComments(I,1) = LOWER( LEFT( laLines(I), lnPos - 1 ) ) taPropsAndComments(I,2) = SUBSTR( laLines(I), lnPos + 1 ) ENDIF ENDFOR @@ -9349,7 +9357,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Propiedad normal lnPosEQ = AT( '=', laItems(I) ) taPropsAndValues(X,1) = LEFT( laItems(I), lnPosEQ - 2 ) - taPropsAndValues(X,2) = .normalizarValorPropiedad( taPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' ) + taPropsAndValues(X,2) = .normalizarValorPropiedad( taPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' ) ENDIF ENDFOR @@ -9417,7 +9425,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base FOR I = tnProtected_Count TO 1 STEP -1 *-- El ASCAN es para evitar valores repetidos, que se eliminarán. v1.19.29 - IF ASCAN( taProtected, taProtected(I), 1, -1, 0,1+2+4 ) = I + taProtected(I) = LOWER( taProtected(I) ) + IF ASCAN( taProtected, taProtected(I), 1, -1, 0, 1+2+4 ) = I tcSortedMemo = tcSortedMemo + LOWER(taProtected(I)) + CR_LF ELSE ADEL( taProtected, I ) @@ -9920,10 +9929,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Agrego metainformación para objetos OLE IF toRegObj.BASECLASS == 'olecontrol' TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 - <<>> Nombre="<>" - Parent="<>" - ObjName="<>" - OLEObject="< 0 ) + llOleObject = ( ASCAN( ta_NombresObjsOle, toRegClass.OBJNAME, 1, 0, 1, 1+2+4+8) > 0 ) IF NOT EMPTY(toRegClass.CLASSLOC) lcOF_Classlib = 'OF "' + LOWER(ALLTRIM(toRegClass.CLASSLOC)) + '" ' @@ -10132,7 +10138,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- DEFINICIÓN DE LA CLASE ( DEFINE CLASS 'className' AS 'classType' [OF 'classLib'] [OLEPUBLIC] ) TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<'DEFINE CLASS'>> <> AS <> <> + <<'DEFINE CLASS'>> <> AS <> <> ENDTEXT RETURN @@ -10854,7 +10860,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg , lnClassCount, lcOutputFile, lcExternalHeader STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount - STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses(1,2), lcOutputFile ; + STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj @@ -10899,6 +10905,11 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg loRegClass = NULL SCATTER MEMO NAME loRegClass + *-- Normalización de capitalización y de datos según parametrización + loRegClass.BASECLASS = LOWER( loRegClass.BASECLASS ) + loRegClass.CLASSLOC = LOWER( loRegClass.CLASSLOC ) + loRegClass.CLASS = LOWER( loRegClass.CLASS ) + IF toFoxBin2Prg.l_NoTimestamps loRegClass.TIMESTAMP = 0 ENDIF @@ -10908,8 +10919,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg loRegClass.UNIQUEID = ALLTRIM(loRegClass.UNIQUEID) ENDIF - lcObjName = LOWER( ALLTRIM( loRegClass.OBJNAME ) ) - laClasses(lnClassCount,1) = lcObjName + lcObjName = ALLTRIM( loRegClass.OBJNAME ) + laClasses(lnClassCount,1) = LOWER( lcObjName ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -10926,13 +10937,19 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *------------------------------------------------------------------------------- lnObjCount = 0 lnRecno = RECNO() - LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) - SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) lnObjCount = lnObjCount + 1 DIMENSION laObjs(lnObjCount,3) loRegObj = NULL SCATTER MEMO NAME loRegObj + + *-- Normalización de capitalización y de datos según parametrización + loRegObj.BASECLASS = LOWER( loRegObj.BASECLASS ) + loRegObj.CLASSLOC = LOWER( loRegObj.CLASSLOC ) + loRegObj.CLASS = LOWER( loRegObj.CLASS ) + laObjs(lnObjCount,1) = loRegObj laObjs(lnObjCount,2) = RECNO() && ZOrder laObjs(lnObjCount,3) = lnObjCount && Alphabetic order @@ -10989,15 +11006,20 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS lnRecno = RECNO() - LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) SCAN REST ; FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND NOT PROPER( TABLABIN.RESERVED1 ) == "Class" ; - WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) loRegObj = NULL SCATTER MEMO NAME loRegObj + *-- Normalización de capitalización y de datos según parametrización + loRegObj.BASECLASS = LOWER( loRegObj.BASECLASS ) + loRegObj.CLASSLOC = LOWER( loRegObj.CLASSLOC ) + loRegObj.CLASS = LOWER( loRegObj.CLASS ) + IF toFoxBin2Prg.l_NoTimestamps loRegObj.TIMESTAMP = 0 ENDIF @@ -11104,7 +11126,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg , lnClassCount, lcOutputFile, lcExternalHeader STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount - STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses(1,2), lcOutputFile ; + STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj @@ -11162,6 +11184,11 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg loRegClass = NULL SCATTER MEMO NAME loRegClass + *-- Normalización de capitalización y de datos según parametrización + loRegClass.BASECLASS = LOWER( loRegClass.BASECLASS ) + loRegClass.CLASSLOC = LOWER( loRegClass.CLASSLOC ) + loRegClass.CLASS = LOWER( loRegClass.CLASS ) + IF toFoxBin2Prg.l_NoTimestamps loRegClass.TIMESTAMP = 0 ENDIF @@ -11171,8 +11198,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg loRegClass.UNIQUEID = ALLTRIM(loRegClass.UNIQUEID) ENDIF - lcObjName = LOWER( ALLTRIM(loRegClass.OBJNAME) ) - laClasses(lnClassCount,1) = lcObjName + lcObjName = ALLTRIM(loRegClass.OBJNAME) + laClasses(lnClassCount,1) = LOWER( lcObjName ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11189,13 +11216,19 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *------------------------------------------------------------------------------- lnObjCount = 0 lnRecno = RECNO() - LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) - SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + SCAN REST WHILE UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) lnObjCount = lnObjCount + 1 DIMENSION laObjs(lnObjCount,3) loRegObj = NULL SCATTER MEMO NAME loRegObj + + *-- Normalización de capitalización y de datos según parametrización + loRegObj.BASECLASS = LOWER( loRegObj.BASECLASS ) + loRegObj.CLASSLOC = LOWER( loRegObj.CLASSLOC ) + loRegObj.CLASS = LOWER( loRegObj.CLASS ) + laObjs(lnObjCount,1) = loRegObj laObjs(lnObjCount,2) = RECNO() && ZOrder laObjs(lnObjCount,3) = lnObjCount && Orden alfabético @@ -11253,17 +11286,22 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) SCAN REST ; FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" ; AND NOT (EMPTY(TABLABIN.PARENT) ; AND ( INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment' , 'form', 'formset' ) ) ) ; - WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == lcObjName + WHILE LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) loRegObj = NULL SCATTER MEMO NAME loRegObj + *-- Normalización de capitalización y de datos según parametrización + loRegObj.BASECLASS = LOWER( loRegObj.BASECLASS ) + loRegObj.CLASSLOC = LOWER( loRegObj.CLASSLOC ) + loRegObj.CLASS = LOWER( loRegObj.CLASS ) + IF toFoxBin2Prg.l_NoTimestamps loRegObj.TIMESTAMP = 0 ENDIF @@ -12350,7 +12388,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Cierro DBC FOR I = 1 TO ADATABASES(laDatabases2) - IF ASCAN( laDatabases, laDatabases2(I) ) = 0 + IF ASCAN( laDatabases, laDatabases2(I), 1, 0, 0, 1+2+4 ) = 0 SET DATABASE TO (laDatabases2(I)) CLOSE DATABASES EXIT From c0f84601f6c879e547a6cf2ead778074a679c400 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 17:40:49 +0100 Subject: [PATCH 45/60] =?UTF-8?q?Changeset:=20516=20fdbozzo=20-=2023/11/20?= =?UTF-8?q?14=2017:37:54:=20-=20Optimizaci=C3=B3n=20en=20m=C3=A9todo=20"wr?= =?UTF-8?q?ite=5FCLASS=5FPROPERTIES"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 2dec675..9bccdae 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10022,17 +10022,19 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base .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) + FOR I = 1 TO tnPropsAndValues_Count TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> = <> ENDTEXT - lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+2+4+8) + IF tnPropsAndComments_Count > 0 THEN + lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+2+4+8) - IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> && <> - ENDTEXT + IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) + TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + <<>> && <> + ENDTEXT + ENDIF ENDIF ENDFOR From 381051471b14a0c47585817f3a7324283fb8efde Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 18:09:03 +0100 Subject: [PATCH 46/60] =?UTF-8?q?Changeset:=20518=20fdbozzo=20-=2023/11/20?= =?UTF-8?q?14=2017:49:25:=20-=20Arreglo=20de=20capitalizaci=C3=B3n=20en=20?= =?UTF-8?q?DEFINE=20CLASS=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TESTS/ut__foxbin2prg.prg | 2 +- foxbin2prg.prg | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index bc66dcd..c6625b5 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -212,7 +212,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg THIS.assertequals( toReg_Esperado.Reserved8, toReg.Reserved8, "Valor de RESERVED8 para " + lcExtraData ) THIS.assertequals( LEN(toReg_Esperado.Reserved8), LEN(toReg.Reserved8), "Tamaño de RESERVED8 para " + lcExtraData ) - THIS.assertequals( toReg_Esperado.OLE2, toReg.OLE2, "Valor de OLE2 para " + lcExtraData ) + THIS.assertequals( LOWER(toReg_Esperado.OLE2), LOWER(toReg.OLE2), "Valor de OLE2 para " + lcExtraData ) THIS.assertequals( LEN(toReg_Esperado.OLE2), LEN(toReg.OLE2), "Tamaño de OLE2 para " + lcExtraData ) THIS.assertequals( SYS(2007, toReg_Esperado.OLE), SYS(2007, toReg.OLE), "Valor de OLE (Checksum) para " + lcExtraData ) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9bccdae..acb448a 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -5556,7 +5556,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base STORE '' TO tcProcedureAbierto toClase = CREATEOBJECT('CL_CLASE') - toClase._Nombre = ALLTRIM( STREXTRACT( tcLine, 'DEFINE CLASS ', ' AS ', 1, 1 ) ) + toClase._Nombre = LOWER( ALLTRIM( STREXTRACT( tcLine, 'DEFINE CLASS ', ' AS ', 1, 1 ) ) ) toClase._ObjName = toClase._Nombre toClase._Definicion = ALLTRIM( tcLine ) IF NOT ' OF ' $ UPPER(tcLine) && Puede no tener "OF libreria.vcx" @@ -12780,7 +12780,7 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' FOR X = 1 TO ._Ole_Obj_count - IF ._Ole_Objs(X)._Nombre == tcNombre + IF LOWER(._Ole_Objs(X)._Nombre) == LOWER(tcNombre) llExiste = .T. EXIT ENDIF From 3300547d7f5fce5e626e206cb0b7d6fe26c813c2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 23 Nov 2014 19:23:15 +0100 Subject: [PATCH 47/60] =?UTF-8?q?Changeset:=20520=20fdbozzo=20-=2023/11/20?= =?UTF-8?q?14=2019:16:28:=20-=20Arreglo=20bug=20introducido=20en=20el=20de?= =?UTF-8?q?sarrollo=20respecto=20de=20la=20l=C3=ADnea=20vac=C3=ADa=20en=20?= =?UTF-8?q?cabecera=20que=20solo=20debe=20crearse=20cuando=20hay=20OLE=20(?= =?UTF-8?q?por=20compatibilidad)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c59e524..782b822 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10300,6 +10300,7 @@ 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 laOLE(1) *!* LOCAL lnOLECount, lcOLEChecksum, llOleExistente, loReg *!* #IF .F. @@ -10339,10 +10340,21 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *!* ENDSCAN - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - * - ENDTEXT + SELECT COUNT(*) FROM TABLABIN WHERE TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS == 'olecontrol' INTO ARRAY laOLE + + IF laOLE(1) > 0 THEN + *-- Lo del <<>> para crear una línea vacía es solamente por compatibilidad con lo antiguo, + *-- donde se creaba esta línea cuando el form o clase tenía al menos un objeto OLE. + TEXT TO C_FB2PRG_CODE 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 + * + ENDTEXT + ENDIF *!* CATCH TO loEx *!* IF THIS.l_Debug AND _VFP.STARTMODE = 0 From 7e20d4a0fbdf4c717e5c496afb688881b4b7aa39 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 04:13:07 +0100 Subject: [PATCH 48/60] Changeset: 524 fdbozzo - 28/11/2014 09:32:22: - Varias optimizaciones reemplazando "TEXT TO" con "var = var + string" - Agregados indicadores de proceso --- TESTS/ut__foxbin2prg.prg | 28 +-- foxbin2prg.prg | 527 ++++++++++++++++++++++++++------------- 2 files changed, 364 insertions(+), 191 deletions(-) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index c6625b5..7426854 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -314,8 +314,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN @@ -555,8 +555,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_OutputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN @@ -640,8 +640,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_OutputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN @@ -735,8 +735,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN @@ -819,8 +819,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN @@ -903,8 +903,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - *loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + *loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) *-- Comparo resultados lcTXT0 = FORCEPATH( FORCEEXT(lc_File,'VC2'), ADDBS( oFXU_LIB.cPathDatosReadOnly ) ) @@ -961,8 +961,8 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) - loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) - loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + loCnv.Ejecutar( lc_OutputFile, '', '', '', '0', '0', '0', '', '', .T. ) + loCnv.Ejecutar( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), '', '', '', '0', '0', '0', '', '', .T. ) SELECT 0 USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIVOBIN_IN diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 34ea86b..f31e509 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -487,6 +487,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF _MEMBERDATA = [] ; + + [] ; + [] ; + [] ; + [] ; @@ -665,6 +666,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM SET TABLEPROMPT OFF SET POINT TO '.' SET SEPARATOR TO ',' + ON ESCAPE ERROR 1799 + SET ESCAPE ON + lcSys16 = SYS(16) IF LEFT(lcSys16,10) == 'PROCEDURE ' @@ -699,6 +703,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH FINALLY + ON ESCAPE THIS.o_FSO = NULL THIS.o_FNC = NULL ENDTRY @@ -707,6 +712,15 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE AvanceDelProceso + LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo + + IF THIS.l_ShowProgress AND PEMSTATUS(THIS, 'o_Frm_Avance', 5) THEN + THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) + ENDIF + ENDPROC + + FUNCTION get_l_ConfigEvaluated RETURN THIS.l_ConfigEvaluated ENDFUNC @@ -1223,6 +1237,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE cargar_frm_avance THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") + THIS.o_Frm_Avance.Show() ENDPROC @@ -1834,18 +1849,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) - IF .l_ShowProgress - .o_Frm_Avance.nMAX_VALUE = lnFileCount - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.nMAX_VALUE = lnFileCount + *ENDIF FOR I = 1 TO lnFileCount lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) - .o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - .o_Frm_Avance.nVALUE = I + *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' + *.o_Frm_Avance.nVALUE = I + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - IF .l_ShowProgress - .o_Frm_Avance.SHOW() - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.SHOW() + *ENDIF IF FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) @@ -1922,9 +1938,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM USE IN (SELECT("TABLABIN")) - IF .l_ShowProgress - .o_Frm_Avance.nMAX_VALUE = lnFileCount - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.nMAX_VALUE = lnFileCount + *ENDIF *-- Primero convierto el proyecto *IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(tc_InputFile)) ) @@ -1934,12 +1950,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I,1) - .o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - .o_Frm_Avance.nVALUE = I + *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' + *.o_Frm_Avance.nVALUE = I + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - IF .l_ShowProgress - .o_Frm_Avance.SHOW() - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.SHOW() + *ENDIF IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) @@ -1978,9 +1995,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDFOR - IF .l_ShowProgress - .o_Frm_Avance.nMAX_VALUE = lnFileCount - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.nMAX_VALUE = lnFileCount + *ENDIF *-- Primero convierto el proyecto *IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(tc_InputFile)) ) @@ -1990,12 +2007,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I) - .o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - .o_Frm_Avance.nVALUE = I + *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' + *.o_Frm_Avance.nVALUE = I + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - IF .l_ShowProgress - .o_Frm_Avance.SHOW() - ENDIF + *IF .l_ShowProgress + * .o_Frm_Avance.SHOW() + *ENDIF IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) @@ -2017,6 +2035,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE IF FILE(tc_InputFile) + tc_InputFile = LOCFILE(tc_InputFile) ERASE ( tc_InputFile + '.ERR' ) DO CASE @@ -2101,7 +2120,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL lnCodError, lcErrorInfo, laDirFile(1,5), lcExtension, lnFileCount, laFiles(1,1), I ; - , ltFilestamp, lcExtA, lcExtB ; + , ltFilestamp, lcExtA, lcExtB, laEvents(1,1) ; , loFSO AS Scripting.FileSystemObject lnCodError = 0 @@ -2353,6 +2372,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.c_OriginalFileName = .c_OriginalFileName .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 1, 1, 0 ) + BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) + .o_Conversor.Convertir( @toModulo, .F., THIS ) .c_TextLog = .c_TextLog + CR_LF + .o_Conversor.c_TextLog && Recojo el LOG que haya generado el conversor ELSE @@ -2379,6 +2401,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF FINALLY + IF AEVENTS( laEvents, THIS.o_Conversor ) > 0 THEN + UNBINDEVENTS( THIS.o_Conversor ) + ENDIF loFSO = NULL THIS.o_Conversor = NULL @@ -2671,62 +2696,143 @@ ENDDEFINE ******************************************************************************************************************* DEFINE CLASS frm_avance AS FORM - HEIGHT = 79 - WIDTH = 628 - SHOWWINDOW = 2 - DOCREATE = .T. - AUTOCENTER = .T. - BORDERSTYLE = 2 + Height = 100 + Width = 628 + ShowWindow = 2 + DoCreate = .T. + AutoCenter = .T. + BorderStyle = 2 CAPTION = C_PROCESS_PROGRESS_LOC + ' ' - CONTROLBOX = .F. - BACKCOLOR = RGB(255,255,255) - nMAX_VALUE = 100 - nVALUE = 0 - NAME = "FRM_AVANCE" + ControlBox = .F. + BackColor = RGB(255,255,255) + nmax_value = 100 + nmax_value2 = 100 + nvalue = 0 + nvalue2 = 0 + Name = "frm_avance" + _memberdata = [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] - ADD OBJECT shp_base AS SHAPE WITH ; - TOP = 50, ; - LEFT = 12, ; - HEIGHT = 13, ; - WIDTH = 601, ; - CURVATURE = 15, ; - NAME = "shp_base" + ADD OBJECT shp_base AS shape WITH ; + Top = 32, ; + Left = 12, ; + Height = 13, ; + Width = 604, ; + Curvature = 15, ; + Name = "shp_base" - ADD OBJECT shp_avance AS SHAPE WITH ; - TOP = 50, ; - LEFT = 12, ; - HEIGHT = 13, ; - WIDTH = 36, ; - CURVATURE = 15, ; - BACKCOLOR = RGB(255,255,128), ; - BORDERCOLOR = RGB(255,0,0), ; - NAME = "shp_Avance" + ADD OBJECT shp_avance AS shape WITH ; + Top = 32, ; + Left = 12, ; + Height = 13, ; + Width = 36, ; + Curvature = 15, ; + BackColor = RGB(255,255,128), ; + BorderColor = RGB(255,0,0), ; + Name = "shp_Avance" - ADD OBJECT lbl_TAREA AS LABEL WITH ; - BACKSTYLE = 0, ; - CAPTION = ".", ; - HEIGHT = 17, ; - LEFT = 12, ; - TOP = 20, ; - WIDTH = 604, ; - NAME = "lbl_Tarea" + ADD OBJECT lbl_tarea AS label WITH ; + BackStyle = 0, ; + Caption = ".", ; + Height = 17, ; + Left = 12, ; + Top = 12, ; + Width = 604, ; + Name = "lbl_Tarea" + + + ADD OBJECT shp_base2 AS shape WITH ; + Top = 68, ; + Left = 12, ; + Height = 13, ; + Width = 604, ; + Curvature = 15, ; + Name = "shp_base2" + + + ADD OBJECT shp_avance2 AS shape WITH ; + Top = 68, ; + Left = 12, ; + Height = 13, ; + Width = 36, ; + Curvature = 15, ; + BackColor = RGB(255,255,128), ; + BorderColor = RGB(255,0,0), ; + Name = "shp_Avance2" + + + ADD OBJECT lbl_tarea2 AS label WITH ; + BackStyle = 0, ; + Caption = ".", ; + Height = 17, ; + Left = 12, ; + Top = 48, ; + Width = 604, ; + Name = "lbl_Tarea2" + + + PROCEDURE AvanceDelProceso + LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo + + WITH THIS AS frm_avance OF foxbin2prg.prg + DO CASE + CASE tnTipo = 0 + .lbl_tarea.Caption = tcTexto + .nMax_Value = tnTotal + .nValue = tnValor + + CASE tnTipo = 1 + .lbl_tarea2.Caption = tcTexto + .nMax_Value2 = tnTotal + .nValue2 = tnValor + + CASE tnTipo = 2 + .lbl_tarea2.Caption = tcTexto + .nMax_Value2 = tnTotal + .nValue2 = tnValor + + ENDCASE + ENDWITH && THIS + + RETURN + ENDPROC PROCEDURE nvalue_assign LPARAMETERS vNewVal WITH THIS - .nVALUE = m.vNewVal - .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nMAX_VALUE + .nValue = m.vNewVal + .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nMax_Value ENDWITH ENDPROC - PROCEDURE INIT - THIS.nVALUE = 0 + PROCEDURE Init + THIS.nValue = 0 + THIS.nValue2 = 0 + ENDPROC + + + PROCEDURE nvalue2_assign + LPARAMETERS vNewVal + + WITH THIS + .nValue2 = m.vNewVal + .shp_avance2.WIDTH = m.vNewVal * .shp_base2.WIDTH / .nMax_Value2 + ENDWITH ENDPROC @@ -2954,7 +3060,7 @@ DEFINE CLASS c_conversor_base AS SESSION PROCEDURE AvanceDelProceso - LPARAMETERS tcTexto, tnValor, tnTotal + LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo ENDPROC @@ -3181,9 +3287,10 @@ DEFINE CLASS c_conversor_base AS SESSION lcValue = '' FOR I = 1 TO OCCURS( '/>', tcValue ) - TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <', I, 1+4 ), CR_LF, ' ' )>> - ENDTEXT + *TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <', I, 1+4 ), CR_LF, ' ' )>> + *ENDTEXT + lcValue = lcValue + CHR(13) + CHR(10) + CHRTRAN( STREXTRACT( tcValue, '', I, 1+4 ), CR_LF, ' ' ) ENDFOR TEXT TO tcValue TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 @@ -3697,9 +3804,10 @@ DEFINE CLASS c_conversor_base AS SESSION lcValue = '' FOR I = 1 TO OCCURS( '/>', tcValue ) - TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <', I, 1+4 ), CR_LF, ' ' )>> - ENDTEXT + *TEXT TO lcValue TEXTMERGE ADDITIVE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> <', I, 1+4 ), CR_LF, ' ' )>> + *ENDTEXT + lcValue = lcValue + CHR(13) + CHR(10) + CHR(9) + CHR(9) + CHRTRAN( STREXTRACT( tcValue, '', I, 1+4 ), CR_LF, ' ' ) ENDFOR TEXT TO tcValue TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 @@ -4733,6 +4841,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lcMemo = '' IF toClase._Prop_Count > 0 + THIS.AvanceDelProceso( 'Generating Props for Class ' + toClase._Nombre + '...', 0, 1, 2 ) THIS.c_ClaseActual = LOWER(toClase._BaseClass) DIMENSION laPropsAndValues( toClase._Prop_Count, 3 ) ACOPY( toClase._Props, laPropsAndValues ) @@ -4812,44 +4921,53 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lcMemo = '' *-- Recorrer los métodos - FOR I = 1 TO toClase._Procedure_Count - loProcedure = NULL - loProcedure = toClase._Procedures(I) + WITH THIS AS c_conversor_prg_a_bin OF foxbin2prg.prg + FOR I = 1 TO toClase._Procedure_Count + loProcedure = NULL + loProcedure = toClase._Procedures(I) - IF loProcedure._ProcLine_Count > 0 THEN - IF '.' $ loProcedure._Nombre - *-- cboNombre.InteractiveChange ==> No debe acortarse por ser método modificado de combobox heredado de la clase - *-- cntDatos.txtEdad.Valid ==> Debe acortarse si cntDatos es un objeto existente - lcNombreObjeto = LEFT( loProcedure._Nombre, AT('.', loProcedure._Nombre) - 1 ) + IF loProcedure._ProcLine_Count > 0 THEN + .AvanceDelProceso( 'Generating Procedure ' + toClase._Nombre + '.' + loProcedure._Nombre + '...', I, toClase._Procedure_Count, 2 ) - IF THIS.buscarObjetoDelMetodoPorNombre( lcNombreObjeto, toClase ) = 0 + IF '.' $ loProcedure._Nombre + *-- cboNombre.InteractiveChange ==> No debe acortarse por ser método modificado de combobox heredado de la clase + *-- cntDatos.txtEdad.Valid ==> Debe acortarse si cntDatos es un objeto existente + lcNombreObjeto = LEFT( loProcedure._Nombre, AT('.', loProcedure._Nombre) - 1 ) + + IF .buscarObjetoDelMetodoPorNombre( lcNombreObjeto, toClase ) = 0 + TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + <> <> + ENDTEXT + *lcMemo = lcMemo + C_PROCEDURE + ' ' + loProcedure._Nombre + ELSE + TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + <> <> + ENDTEXT + *lcMemo = lcMemo + C_PROCEDURE + ' ' + SUBSTR( loProcedure._Nombre, AT('.', loProcedure._Nombre) + 1 ) + ENDIF + ELSE TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 <> <> ENDTEXT - ELSE - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <> <> - ENDTEXT + *lcMemo = lcMemo + C_PROCEDURE + ' ' + loProcedure._Nombre ENDIF - ELSE - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <> <> + + *-- Incluir las líneas del método + *.AvanceDelProceso( 'Generating Lines of Procedure ' + toClase._Nombre + '.' + loProcedure._Nombre + '...', I, toClase._Procedure_Count, 2 ) + FOR X = 1 TO loProcedure._ProcLine_Count + *TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <> + *ENDTEXT + lcMemo = lcMemo + CHR(13) + CHR(10) + loProcedure._ProcLines(X) + ENDFOR + + TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <<>> ENDTEXT ENDIF - - *-- Incluir las líneas del método - FOR X = 1 TO loProcedure._ProcLine_Count - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT - ENDFOR - - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - <<>> - ENDTEXT - ENDIF - ENDFOR + ENDFOR + ENDWITH loProcedure = NULL RELEASE toClase, I, X, lcNombreObjeto, loProcedure @@ -4871,6 +4989,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base lcMemo = '' *-- Recorrer los métodos + THIS.AvanceDelProceso( 'Generating Object Methods for ' + toClase._Nombre + '.' + toObjeto._ObjName + '...', 0, 1, 2 ) FOR I = 1 TO toObjeto._Procedure_Count loProcedure = NULL loProcedure = toObjeto._Procedures(I) @@ -4881,9 +5000,10 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- Incluir las líneas del método FOR X = 1 TO loProcedure._ProcLine_Count - TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT + *TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <> + *ENDTEXT + lcMemo = lcMemo + CHR(13) + CHR(10) + loProcedure._ProcLines(X) ENDFOR TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -5325,54 +5445,55 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF LEFT( tcLine, 11 ) == 'ADD OBJECT ' *-- Estructura a reconocer: ADD OBJECT 'frm_a.Check1' AS check [WITH] - llBloqueEncontrado = .T. - LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, Z, lcProp, lcValue, lcNombre, lcObjName - tcLine = CHRTRAN( tcLine, ['], ["] ) + WITH THIS AS c_conversor_prg_a_bin OF foxbin2prg.prg + llBloqueEncontrado = .T. + LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, Z, lcProp, lcValue, lcNombre, lcObjName + tcLine = CHRTRAN( tcLine, ['], ["] ) - IF EMPTY(toClase._Fin_Cab) - toClase._Fin_Cab = I-1 - toClase._Ini_Cuerpo = I - ENDIF + IF EMPTY(toClase._Fin_Cab) + toClase._Fin_Cab = I-1 + toClase._Ini_Cuerpo = I + ENDIF - toObjeto = NULL - lcNombre = ALLTRIM( CHRTRAN( STREXTRACT(tcLine, 'ADD OBJECT ', ' AS ', 1, 1), ['"], [] ) ) - lcObjName = JUSTEXT( '.' + lcNombre ) + toObjeto = NULL + lcNombre = ALLTRIM( CHRTRAN( STREXTRACT(tcLine, 'ADD OBJECT ', ' AS ', 1, 1), ['"], [] ) ) + lcObjName = JUSTEXT( '.' + lcNombre ) + .AvanceDelProceso( 'Analyzing Block Add Object ' + toClase._Nombre + '.' + lcObjName + '...', I, tnCodeLines, 1 ) - IF toClase.l_ObjectMetadataInHeader - FOR Z = 1 TO toClase._AddObject_Count - IF LOWER(toClase._AddObjects(Z)._Nombre) == LOWER(lcNombre) THEN - toObjeto = toClase._AddObjects(Z) - EXIT - ENDIF - ENDFOR - ENDIF + IF toClase.l_ObjectMetadataInHeader + FOR Z = 1 TO toClase._AddObject_Count + IF LOWER(toClase._AddObjects(Z)._Nombre) == LOWER(lcNombre) THEN + toObjeto = toClase._AddObjects(Z) + EXIT + ENDIF + ENDFOR + ENDIF - IF ISNULL(toObjeto) - toObjeto = CREATEOBJECT('CL_OBJETO') - *-- Luego se reasigna el ZOrder, pero si no lo hace, se pone último como si se acabara de agregar. - *-- Puede pasar si se agrega manualmente al TX2 y se olvida agregar la metadata OBJECTDATA. - toObjeto._ZOrder = 9999 - toObjeto._Nombre = lcNombre - ENDIF + IF ISNULL(toObjeto) + toObjeto = CREATEOBJECT('CL_OBJETO') + *-- Luego se reasigna el ZOrder, pero si no lo hace, se pone último como si se acabara de agregar. + *-- Puede pasar si se agrega manualmente al TX2 y se olvida agregar la metadata OBJECTDATA. + toObjeto._ZOrder = 9999 + toObjeto._Nombre = lcNombre + ENDIF - toObjeto._ObjName = lcObjName + toObjeto._ObjName = lcObjName - IF '.' $ toObjeto._Nombre - toObjeto._Parent = toClase._ObjName + '.' + JUSTSTEM( toObjeto._Nombre ) - ELSE - toObjeto._Parent = toClase._ObjName - ENDIF + IF '.' $ toObjeto._Nombre + toObjeto._Parent = toClase._ObjName + '.' + JUSTSTEM( toObjeto._Nombre ) + ELSE + toObjeto._Parent = toClase._ObjName + ENDIF - toObjeto._Nombre = toObjeto._Parent + '.' + toObjeto._ObjName - toObjeto._Class = ALLTRIM( STREXTRACT(tcLine + ' WITH', ' AS ', ' WITH', 1, 1) ) + toObjeto._Nombre = toObjeto._Parent + '.' + toObjeto._ObjName + toObjeto._Class = ALLTRIM( STREXTRACT(tcLine + ' WITH', ' AS ', ' WITH', 1, 1) ) - IF NOT toClase.l_ObjectMetadataInHeader - toClase.add_Object( toObjeto ) - ENDIF + IF NOT toClase.l_ObjectMetadataInHeader + toClase.add_Object( toObjeto ) + ENDIF - *-- Propiedades del ADD OBJECT - WITH THIS + *-- Propiedades del ADD OBJECT FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -6043,6 +6164,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF llBloqueEncontrado *-- Evalúo todo el contenido del PROCEDURE + THIS.AvanceDelProceso( 'Analyzing Procedure ' + toClase._Nombre + '.' + tcProcedureAbierto + '...', I, tnCodeLines, 1 ) THIS.analizarLineasDeProcedure( @toClase, @toObjeto, @tcLine, @taCodeLines, @I, @tnCodeLines, @tcProcedureAbierto ; , @tc_Comentario, @taLineasExclusion, @tnBloquesExclusion ) ENDIF @@ -6452,8 +6574,10 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) 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 ) @@ -6477,11 +6601,13 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF + .AvanceDelProceso( 'Identifying Excluded Blocks...', 3, lnCodeLines, 1 ) .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, @toFoxBin2Prg ) + .AvanceDelProceso( 'Generating Binary...', 0, lnCodeLines, 1 ) toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createClasslib() @@ -6785,8 +6911,11 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + .AvanceDelProceso( 'Identifying Header Blocks...', 1, lnCodeLines, 1 ) .identificarBloquesDeCabecera( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toModulo, @toFoxBin2Prg ) + .AvanceDelProceso( 'Loading Code...', 2, lnCodeLines, 1 ) + 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 ) @@ -6810,11 +6939,14 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF + .AvanceDelProceso( 'Identifying Excluded Blocks...', 3, lnCodeLines, 1 ) .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, @toFoxBin2Prg ) + .AvanceDelProceso( 'Generating Binary...', 0, lnCodeLines, 1 ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) .createForm() @@ -7131,8 +7263,10 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin *.identificarBloquesDeExclusion( @laCodeLines, .F., @laLineasExclusion, @lnBloquesExclusion ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase + .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toProject ) + .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) .escribirArchivoBin( @toProject, toFoxBin2Prg ) ENDWITH && THIS @@ -7925,8 +8059,10 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin .createReport() *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toReport ) + .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) .escribirArchivoBin( @toReport, toFoxBin2Prg ) ENDWITH && THIS @@ -8652,8 +8788,10 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin *.createTable() *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toDatabase ) + .AvanceDelProceso( 'Generating Binary...', 2, 2, 1 ) .escribirArchivoBin( @toDatabase, toFoxBin2Prg ) ENDWITH && THIS @@ -8831,8 +8969,10 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin .createMenu() *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .AvanceDelProceso( 'Identifying Code Blocks...', 1, 2, 1 ) .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laLineasExclusion, lnBloquesExclusion, @toMenu ) + .AvanceDelProceso( 'Generating Binary...', 1, 2, 1 ) .escribirArchivoBin( @toMenu ) ENDWITH && THIS @@ -10040,17 +10180,19 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- Escribo las propiedades de la clase y sus comentarios (los comentarios aquí son redundantes) FOR I = 1 TO tnPropsAndValues_Count - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> = <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> <> = <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + taPropsAndValues(I,1) + ' = ' + taPropsAndValues(I,2) IF tnPropsAndComments_Count > 0 THEN lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+2+4+8) IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> && <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + * <<>> && <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) ENDIF ENDIF ENDFOR @@ -10113,19 +10255,22 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base , 'p' ) IF lcType == 'p' THEN - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> *<>: <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> *<>: <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + CHR(9) + '*' + lcType + ': ' + taPropsAndComments(I,1) ELSE - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> *<>: <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> *<>: <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + CHR(9) + '*' + lcType + ': ' + SUBSTR( taPropsAndComments(I,1), 2) ENDIF IF NOT EMPTY(taPropsAndComments(I,2)) - TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> <<'&'>><<'&'>> <> - ENDTEXT + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + * <<>> <<'&'>><<'&'>> <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(I,2) ENDIF ENDFOR @@ -10889,7 +11034,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg 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, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile, lcExternalHeader + , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; @@ -10928,6 +11073,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDTEXT ENDIF + COUNT ALL FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND PROPER( TABLABIN.RESERVED1 ) == "Class" TO lnClassTotal SCAN ALL FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND PROPER( TABLABIN.RESERVED1 ) == "Class" STORE 0 TO lnMethodCount @@ -10954,6 +11100,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM( loRegClass.OBJNAME ) laClasses(lnClassCount,1) = LOWER( lcObjName ) + .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnClassCount, lnClassTotal, 1 ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11079,6 +11226,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDIF *-- Genero el VC2 + .AvanceDelProceso( 'Writing VC2...', 2, 2, 1 ) lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -11156,7 +11304,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg 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, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile, lcExternalHeader + , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; , lnMethodCount, lnClassCount STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; @@ -11206,6 +11354,10 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDIF + COUNT ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; + AND ( EMPTY( TABLABIN.PARENT ) ; + AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) TO lnClassTotal + SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; AND ( EMPTY( TABLABIN.PARENT ) ; AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) @@ -11234,6 +11386,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM(loRegClass.OBJNAME) laClasses(lnClassCount,1) = LOWER( lcObjName ) + .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnClassCount, lnClassTotal, 1 ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11362,6 +11515,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDIF *-- Genero el SC2 + .AvanceDelProceso( 'Writing SC2...', 2, 2, 1 ) lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -11449,6 +11603,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg USE IN (SELECT("_TABLAORIG")) loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') + .AvanceDelProceso( 'Processing Project ' + '...', 1, 2, 1 ) *-- Obtengo los archivos del proyecto @@ -11614,9 +11769,10 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF NOT EMPTY(loReg.COMMENTS) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Description = '<>' - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Description = '<>' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Description = '" + loReg.COMMENTS + "'" ENDIF loReg = NULL ENDFOR @@ -11633,9 +11789,10 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF loReg.EXCLUDE - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Exclude = .T. - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Exclude = .T." ENDIF loReg = NULL ENDFOR @@ -11652,9 +11809,10 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Type = 'T' - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Type = 'T' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Type = 'T'" ENDIF loReg = NULL ENDFOR @@ -11711,6 +11869,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg *-- Genero el PJ2 + .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -11778,6 +11937,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg STORE NULL TO loProject, loReg, loServerHead, loServerData lcStrPJM = FILETOSTR( THIS.c_InputFile ) loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') + THIS.AvanceDelProceso( 'Scanning PJM...', 1, 2, 1 ) *-- Obtengo los archivos del proyecto @@ -11988,9 +12148,10 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF NOT EMPTY(loReg.COMMENTS) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Description = '<>' - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Description = '<>' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Description = '" + loReg.COMMENTS + "'" ENDIF ENDFOR @@ -12006,9 +12167,10 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF loReg.EXCLUDE - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Exclude = .T. - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Exclude = .T." ENDIF loReg = NULL ENDFOR @@ -12025,9 +12187,10 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg FOR EACH loReg IN loProject &&FOXOBJECT IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Type = 'T' - ENDTEXT + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> .ITEM(lcCurdir + '<>').Type = 'T' + *ENDTEXT + C_FB2PRG_CODE = C_FB2PRG_CODE + CHR(13) + CHR(10) + CHR(9) + ".ITEM(lcCurdir + '" + loReg.NAME + "').Type = 'T'" ENDIF loReg = NULL ENDFOR @@ -12083,6 +12246,7 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg *-- Genero el PJ2 + .AvanceDelProceso( 'Writing PJ2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12156,6 +12320,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) + THIS.AvanceDelProceso( 'Scanning FRX...', 1, 2, 1 ) *-- Header LOCATE FOR ObjType = 1 @@ -12250,6 +12415,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg *-- Genero el FR2 + .AvanceDelProceso( 'Writing FR2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12311,6 +12477,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' *-- EVALUAR OPCIONES ESPECÍFICAS DE DBF + .AvanceDelProceso( 'Scanning DBF Structure...', 1, 2, 1 ) *-- Include IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ; @@ -12353,6 +12520,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Genero el DB2, renombrando el TMP + .AvanceDelProceso( 'Writing DB2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12374,6 +12542,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Genero el DB2 + .AvanceDelProceso( 'Writing DB2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12475,6 +12644,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS TABLABIN OPEN DATABASE (.c_InputFile) SHARED NOUPDATE + .AvanceDelProceso( 'Analyzing DBC metadata...', 1, 2, 1 ) C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() @@ -12484,6 +12654,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg *-- Genero el DC2 + .AvanceDelProceso( 'Writing DC2...', 2, 2, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12542,6 +12713,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) + .AvanceDelProceso( 'Analyzing MNX...', 2, 2, 1 ) *-- Verificación de menú VFP 9 IF FCOUNT() < 25 OR EMPTY(FIELD("RESNAME")) OR EMPTY(FIELD("SYSRES")) @@ -12558,6 +12730,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg *-- Genero el MN2 + .AvanceDelProceso( 'Writing MN2...', 2, 2, 1 ) IF .l_Test toMenu = C_FB2PRG_CODE ELSE From cd23962bf256ba2ffb1d768b3eab439cddd46dd8 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 14:19:12 +0100 Subject: [PATCH 49/60] =?UTF-8?q?Changeset:=20525=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2004:13:08:=20-=20Arreglo=20para=20detecci=C3=B3n=20de=20END?= =?UTF-8?q?PROC=20redundantes=20-=20Arreglo=20de=20comentario=20PAM=20fuer?= =?UTF-8?q?a=20de=20l=C3=ADnea?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f31e509..3716cb8 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -9952,6 +9952,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lcLine = UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' ' IF lnLine_Len >= 7 AND LEFT(lcLine,8) == 'ENDPROC ' *-- Es el final de estructura ENDPROC + IF NOT llProcOpen + *-- Esto no es normal, porque hay más de un ENDPROC, por lo que se ignora. + LOOP + ENDIF ELSE *-- Es otra cosa (variable, etc) taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF @@ -9965,6 +9969,10 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base lcLine = UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' ' IF lnLine_Len >= 7 AND LEFT(lcLine,8) == 'ENDFUNC ' *-- Es el final de estructura ENDPROC + IF NOT llProcOpen + *-- Esto no es normal, porque hay más de un ENDFUNC, por lo que se ignora. + LOOP + ENDIF laLine(I) = STRTRAN( laLine(I), 'ENDFUNC', 'ENDPROC' ) ELSE *-- Es otra cosa (variable, etc) @@ -10192,7 +10200,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 * <<>> && <> *ENDTEXT - tcCodigo = tcCodigo + CHR(13) + CHR(10) + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) + tcCodigo = tcCodigo + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) ENDIF ENDIF ENDFOR From 702840ebf689f152a5c533227c510f5d64b04eee Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 15:56:15 +0100 Subject: [PATCH 50/60] =?UTF-8?q?Changeset:=20526=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2014:19:13:=20-=20Normalizaci=C3=B3n=20capitalizaci=C3=B3n?= =?UTF-8?q?=20nombre=20clases=20a=20min=C3=BAsculas=20(por=20compatibilida?= =?UTF-8?q?d=20con=20FoxBin2Prg=20anteriores)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3716cb8..7790ce0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -5301,7 +5301,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base FOR EACH loObjeto IN toClase._AddObjects FOXOBJECT *-- Verifico que sea el objeto que corresponde - IF loObjeto._WriteOrder = 0 AND loObjeto._Nombre == lcObjName + IF loObjeto._WriteOrder = 0 AND LOWER(loObjeto._Nombre) == LOWER(lcObjName) N = N + 1 loObjeto._WriteOrder = N .insert_Object( toClase, loObjeto, toFoxBin2Prg ) @@ -5688,7 +5688,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base STORE '' TO tcProcedureAbierto toClase = CREATEOBJECT('CL_CLASE') toClase._Nombre = LOWER( ALLTRIM( STREXTRACT( tcLine, 'DEFINE CLASS ', ' AS ', 1, 1 ) ) ) - toClase._ObjName = toClase._Nombre + toClase._ObjName = LOWER( toClase._Nombre ) toClase._Definicion = ALLTRIM( tcLine ) IF NOT ' OF ' $ UPPER(tcLine) && Puede no tener "OF libreria.vcx" toClase._Class = ALLTRIM( CHRTRAN( STREXTRACT( tcLine + ' OLEPUBLIC', ' AS ', ' OLEPUBLIC', 1, 1 ), ["'], [] ) ) @@ -9254,7 +9254,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base CASE '.' $ toRegObj.PARENT lcMethodName = SUBSTR(toRegObj.PARENT, AT('.', toRegObj.PARENT) + 1) + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1) - CASE LEFT(toRegObj.PARENT + '.', LEN( toRegClass.OBJNAME + '.' ) ) == toRegClass.OBJNAME + '.' + CASE LOWER( LEFT(toRegObj.PARENT + '.', LEN( toRegClass.OBJNAME + '.' ) ) ) == LOWER( toRegClass.OBJNAME + '.' ) lcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1) OTHERWISE @@ -11096,6 +11096,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg loRegClass.BASECLASS = LOWER( loRegClass.BASECLASS ) loRegClass.CLASSLOC = LOWER( loRegClass.CLASSLOC ) loRegClass.CLASS = LOWER( loRegClass.CLASS ) + loRegClass.OBJNAME = LOWER( loRegClass.OBJNAME ) IF toFoxBin2Prg.l_NoTimestamps loRegClass.TIMESTAMP = 0 @@ -11382,6 +11383,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg loRegClass.BASECLASS = LOWER( loRegClass.BASECLASS ) loRegClass.CLASSLOC = LOWER( loRegClass.CLASSLOC ) loRegClass.CLASS = LOWER( loRegClass.CLASS ) + loRegClass.OBJNAME = LOWER( loRegClass.OBJNAME ) IF toFoxBin2Prg.l_NoTimestamps loRegClass.TIMESTAMP = 0 From 4d0535e501f3f0fcafd371ac6a54ba6d6d74db7e Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 16:20:39 +0100 Subject: [PATCH 51/60] Changeset: 527 fdbozzo - 29/11/2014 15:56:16: - Nuevo: AutoFix para propiedades partidas debido a ediciones manuales del scx/vcx --- foxbin2prg.prg | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7790ce0..53bb96b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -9458,8 +9458,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base EXTERNAL ARRAY taPropsAndValues TRY - LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods - tcSortedMemo = '' + LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods, lcLastIncompletePropName + STORE '' TO tcSortedMemo, lcLastIncompletePropName tnPropsAndValues_Count = 0 IF NOT EMPTY(m.tcMemo) @@ -9480,14 +9480,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOOP ENDIF - X = X + 1 - DIMENSION taPropsAndValues(X,2) - IF C_MPROPHEADER $ laItems(I) *-- Solo entrará por aquí cuando se evalúe una propiedad de PROPERTIES con un valor especial (largo) lnLenAcum = 0 lnPosEQ = AT( '=', laItems(I) ) - lcPropName = LEFT( laItems(I), lnPosEQ - 2 ) + lcPropName = lcLastIncompletePropName + LEFT( laItems(I), lnPosEQ - 2 ) lnLenVal = INT( VAL( SUBSTR( laItems(I), lnPosEQ + 2 + 517, 8) ) ) lcValue = SUBSTR( laItems(I), lnPosEQ + 2 + 517 + 8 ) @@ -9507,15 +9504,37 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDIF *-- Es un valor especial, por lo que se encapsula en un marcador especial + X = X + 1 + DIMENSION taPropsAndValues(X,2) taPropsAndValues(X,1) = lcPropName taPropsAndValues(X,2) = .normalizarValorPropiedad( lcPropName, lcValue, '' ) ELSE *-- Propiedad normal lnPosEQ = AT( '=', laItems(I) ) - taPropsAndValues(X,1) = LEFT( laItems(I), lnPosEQ - 2 ) + + IF lnPosEQ = 0 THEN + *-- AUTOFIX DE PROPIEDAD PARTIDA: + *-- Esto solo puede ocurrir cuando en el memo de Propiedades hay alguna propiedad + *-- partida debido a una edición manual con un Enter erróneo, algo como esto: + * comm + * AND2.Caption = "Command2" + * + *-- En el caso anterior, las 2 líneas son realmente una: + * command2.Caption = "Command2" + * + *-- Solución: Guardar esta parte del nombre y agregarlo a la próxima propiedad. + lcLastIncompletePropName = laItems(I) + LOOP + ENDIF + + X = X + 1 + DIMENSION taPropsAndValues(X,2) + taPropsAndValues(X,1) = lcLastIncompletePropName + LEFT( laItems(I), lnPosEQ - 2 ) taPropsAndValues(X,2) = .normalizarValorPropiedad( taPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' ) ENDIF + + lcLastIncompletePropName = '' ENDFOR From fe40d8dd833ec298c297bda65fb2760354bfe1be Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 16:39:19 +0100 Subject: [PATCH 52/60] =?UTF-8?q?Changeset:=20528=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2016:20:40:=20-=20Quitada=20la=20l=C3=ADnea=20vac=C3=ADa=20e?= =?UTF-8?q?=20la=20cabecera=20cuando=20el=20form=20tiene=20objetos=20OLE?= =?UTF-8?q?=20(bug=20del=20antiguo=20manejo=20de=20OLE=20en=20cabecera,=20?= =?UTF-8?q?antes=20de=20encapsularlo=20en=20el=20objeto=20mismo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 53bb96b..aa8b9c6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10902,21 +10902,24 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *!* ENDSCAN - SELECT COUNT(*) FROM TABLABIN WHERE TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS == 'olecontrol' INTO ARRAY laOLE + *-- LO QUE SIGUE LO COMENTÉ PORQUE POR CADA OBJETO OLE SE AGREGABA UNA LÍNEA VACÍA QUE QUEDA MUY MAL Y ES INNECESARIA. + *-- COMO CONSECUENCIA, LOS FORMS O CLASES CON OBJETOS OLE DARÁN DIFERENCIA POR ÚNICA VEZ EN LA CABECERA. - fdbozzo. 29/11/2014 (v1.19.37) + * + *SELECT COUNT(*) FROM TABLABIN WHERE TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS == 'olecontrol' INTO ARRAY laOLE - IF laOLE(1) > 0 THEN - *-- Lo del <<>> para crear una línea vacía es solamente por compatibilidad con lo antiguo, - *-- donde se creaba esta línea cuando el form o clase tenía al menos un objeto OLE. - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - * - ENDTEXT - ELSE + *IF laOLE(1) > 0 THEN + * *-- Lo del <<>> para crear una línea vacía es solamente por compatibilidad con lo antiguo, + * *-- donde se creaba esta línea cuando el form o clase tenía al menos un objeto OLE. + * TEXT TO C_FB2PRG_CODE 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 * ENDTEXT - ENDIF + *ENDIF *!* CATCH TO loEx *!* IF THIS.l_Debug AND _VFP.STARTMODE = 0 From 5af062db63b4c224d5a2431a5ac75d19e380d79b Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sat, 29 Nov 2014 17:16:34 +0100 Subject: [PATCH 53/60] =?UTF-8?q?Changeset:=20529=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2016:39:20:=20-=20Arreglo=20defecto:=20Quitada=20la=20capita?= =?UTF-8?q?lizaci=C3=B3n=20a=20min=C3=BAsculas=20de=20propiedades=20Protec?= =?UTF-8?q?ted?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index aa8b9c6..711e2b8 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -9601,9 +9601,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base FOR I = tnProtected_Count TO 1 STEP -1 *-- El ASCAN es para evitar valores repetidos, que se eliminarán. v1.19.29 - taProtected(I) = LOWER( taProtected(I) ) + taProtected(I) = taProtected(I) IF ASCAN( taProtected, taProtected(I), 1, -1, 0, 1+2+4 ) = I - tcSortedMemo = tcSortedMemo + LOWER(taProtected(I)) + CR_LF + tcSortedMemo = tcSortedMemo + taProtected(I) + CR_LF ELSE ADEL( taProtected, I ) tnProtected_Count = tnProtected_Count - 1 From d464d6541c3da7fbd483f7ca7ab5b91b583c9db0 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 16:32:35 +0100 Subject: [PATCH 54/60] =?UTF-8?q?Changeset:=20530=20fdbozzo=20-=2029/11/20?= =?UTF-8?q?14=2017:16:34:=20-=20Agregado=20control=20para=20detectar=20rep?= =?UTF-8?q?ortes=20no=20compatibles=20con=20VFP=209=20-=20Agregada=20posib?= =?UTF-8?q?ilidad=20de=20cancelar=20proceso=20con=20tecla=20Esc=20-=20Vari?= =?UTF-8?q?as=20mejoras=20al=20indicador=20de=20progreso=20-=20Adaptados?= =?UTF-8?q?=20los=20scripts=20vbs=20para=20el=20nuevo=20funcionamiento=20d?= =?UTF-8?q?el=20indicador=20de=20progreso=20y=20cancelaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Convert_VFP9_BIN_2_PRG.vbs | 45 +++--- Convert_VFP9_PRG_2_BIN.vbs | 47 +++--- VFP9_FoxBin2Prg.vbs | 6 +- foxbin2prg.prg | 307 +++++++++++++++++++++++-------------- foxbin2prg_de.h | 3 +- foxbin2prg_en.h | 3 +- 6 files changed, 251 insertions(+), 160 deletions(-) diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index 47cc1f5..ecd0fe8 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -15,7 +15,7 @@ Const ForReading = 1 Dim WSHShell, FileSystemObject Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count -Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cNoTimestamps, cErrFile +Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile Set WSHShell = WScript.CreateObject("WScript.Shell") Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") Set oVFP9 = CreateObject("VisualFoxPro.Application.9") @@ -59,8 +59,6 @@ Else oVFP9.DoCmd( "SET PROCEDURE TO '" & cEXETool & "'" ) oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) - '.o_FoxBin2Prg.EvaluarConfiguracion( tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ) - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1' )" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) For i = 0 To WScript.Arguments.Count-1 @@ -82,17 +80,11 @@ Else cFlagDontShowErrMsg = "'1'" End If If GetBit(nDebug, 5) Then - cNoTimestamps = "'1'" + cFlagNoTimestamps = "'1'" End If - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nMAX_VALUE = " & nFile_Count ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & 0 ) - 'oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.AlwaysOnTop = .T." ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.SHOW()" ) - For i = 1 To nFile_Count - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.lbl_TAREA.CAPTION = oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...'" ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & i ) + oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" ) cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'" If nDebug = 0 Or nDebug = 2 Then @@ -100,22 +92,30 @@ Else Else cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','0','0','0'," _ & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ - & cFlagRecompile & "," & cNoTimestamps & " )" + & cFlagRecompile & "," & cFlagNoTimestamps & " )" End If + If cFlagJustShowCall = "1" Then MsgBox cCMD, 64, "PARAMETERS" Else oVFP9.DoCmd( cCMD ) nExitCode = oVFP9.Eval("_SCREEN.ExitCode") End If - + + If nExitCode = 1799 Then 'Conversion cancelled by user + Exit For + End If Next - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.HIDE()" ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance = NULL" ) - If GetBit(nDebug, 4) Then - If oVFP9.Eval("oFoxBin2prg.l_Error") Then + 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then + If nExitCode = 1799 Then + MsgBox "Conversion Cancelled by User!", 48, WScript.ScriptName + cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") + oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + WSHShell.run cErrFile + + ElseIf nExitCode > 0 Then MsgBox "End of Process! (with errors)", 48, WScript.ScriptName cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") @@ -126,15 +126,18 @@ Else End If oVFP9.DoCmd( "oFoxBin2prg = NULL" ) + oVFP9.DoCmd( "CLEAR ALL" ) + Set oVFP9 = Nothing End If -WScript.Quit(nExitCode) +WScript.Quit nExitCode Private Sub scanDirs( tcArgument ) Dim omFolder, oFolder If FileSystemObject.FolderExists( tcArgument ) Then '-- Es un directorio + oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso('Scanning file and directory information on " & tcArgument & "...', 0, 0, 0)" ) Set omFolder = FileSystemObject.GetFolder( tcArgument ) For Each oFile IN omFolder.Files evaluateFile( oFile.Path ) @@ -152,7 +155,11 @@ End Sub Private Sub evaluateFile( tcFile ) lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) oVFP9.SetVar "gc_Ext", lcExt - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '', '', '', '', '', '', '', '', '" & tcFile & "' )" ) + oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1', '', '', '', '', '', '', '" & tcFile & "' )" ) + + 'PROCEDURE EvaluarConfiguracion + ' LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcFlagNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; + ' , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Bin2Prg(gc_Ext)") Then nFile_Count = nFile_Count + 1 ReDim Preserve aFiles(nFile_Count) diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index 6f030d9..1b7d8bd 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -15,7 +15,7 @@ Const ForReading = 1 Dim WSHShell, FileSystemObject Dim oVFP9, nExitCode, cEXETool, cCMD, nDebug, lcExt, foxbin2prg_cfg, aFiles(), nFile_Count -Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cNoTimestamps, cErrFile +Dim i, x, str_cfg, aConf, cErrMsg, cFlagGenerateLog, cFlagDontShowErrMsg, cFlagJustShowCall, cFlagRecompile, cFlagNoTimestamps, cErrFile Set WSHShell = WScript.CreateObject("WScript.Shell") Set FileSystemObject = WScript.CreateObject("Scripting.FileSystemObject") Set oVFP9 = CreateObject("VisualFoxPro.Application.9") @@ -59,8 +59,6 @@ Else oVFP9.DoCmd( "SET PROCEDURE TO '" & cEXETool & "'" ) oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) - '.o_FoxBin2Prg.EvaluarConfiguracion( tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ) - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1' )" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) For i = 0 To WScript.Arguments.Count-1 @@ -77,7 +75,6 @@ Else cFlagGenerateLog = "'0'" cFlagDontShowErrMsg = "'0'" cFlagShowCall = "'0'" - 'cFlagRecompile = "'1'" If GetBit(nDebug, 1) Then cFlagGenerateLog = "'1'" @@ -89,17 +86,11 @@ Else cFlagDontShowErrMsg = "'1'" End If If GetBit(nDebug, 5) Then - cNoTimestamps = "'1'" + cFlagNoTimestamps = "'1'" End If - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nMAX_VALUE = " & nFile_Count ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & 0 ) - 'oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.AlwaysOnTop = .T." ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.SHOW()" ) - For i = 1 To nFile_Count - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.lbl_TAREA.CAPTION = oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...'" ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.nVALUE = " & i ) + oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" ) cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'" If nDebug = 0 Or nDebug = 2 Then @@ -107,22 +98,30 @@ Else Else cCMD = "oFoxBin2prg.ejecutar( '" & aFiles(i) & "','0','0','0'," _ & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ - & cFlagRecompile & "," & cNoTimestamps & " )" + & cFlagRecompile & "," & cFlagNoTimestamps & " )" End If + If cFlagJustShowCall = "1" Then MsgBox cCMD, 64, "PARAMETERS" Else oVFP9.DoCmd( cCMD ) nExitCode = oVFP9.Eval("_SCREEN.ExitCode") End If - + + If nExitCode = 1799 Then 'Conversion cancelled by user + Exit For + End If Next - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance.HIDE()" ) - oVFP9.DoCmd( "oFoxBin2prg.o_Frm_Avance = NULL" ) - If GetBit(nDebug, 4) Then - If oVFP9.Eval("oFoxBin2prg.l_Error") Then + 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then + If nExitCode = 1799 Then + MsgBox "Conversion Cancelled by User!", 48, WScript.ScriptName + cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") + oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + WSHShell.run cErrFile + + ElseIf nExitCode > 0 Then MsgBox "End of Process! (with errors)", 48, WScript.ScriptName cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") @@ -133,15 +132,18 @@ Else End If oVFP9.DoCmd( "oFoxBin2prg = NULL" ) + oVFP9.DoCmd( "CLEAR ALL" ) + Set oVFP9 = Nothing End If -WScript.Quit(nExitCode) +WScript.Quit nExitCode Private Sub scanDirs( tcArgument ) Dim omFolder, oFolder If FileSystemObject.FolderExists( tcArgument ) Then '-- Es un directorio + oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso('Scanning file and directory information on " & tcArgument & "...', 0, 0, 0)" ) Set omFolder = FileSystemObject.GetFolder( tcArgument ) For Each oFile IN omFolder.Files evaluateFile( oFile.Path ) @@ -160,16 +162,15 @@ Private Sub evaluateFile( tcFile ) lcExt = UCase( FileSystemObject.GetExtensionName( tcFile ) ) lcFileName = FileSystemObject.GetFileName( tcFile ) laPoints = Split( lcFileName, "." ) - lnPoints = UBound(laPoint) + lnPoints = UBound(laPoints) '-- 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 ; + ' LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcFlagNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ; ' , tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile - - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '', '', '', '', '', '', '', '', '" & tcFile & "' )" ) + oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1', '', '', '', '', '', '', '" & tcFile & "' )" ) If oVFP9.Eval("oFoxBin2prg.TieneSoporte_Prg2Bin(gc_Ext)") Then nFile_Count = nFile_Count + 1 ReDim Preserve aFiles(nFile_Count) diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index 82340e9..73899ab 100644 --- a/VFP9_FoxBin2Prg.vbs +++ b/VFP9_FoxBin2Prg.vbs @@ -61,7 +61,7 @@ Else oVFP9.DoCmd( "SET PROCEDURE TO '" & cEXETool & "'" ) oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) - oVFP9.DoCmd( "oFoxBin2prg.EvaluarConfiguracion( '1', '1' )" ) + oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) cFlagGenerateLog = "'0'" cFlagDontShowErrMsg = "'0'" @@ -87,7 +87,7 @@ Else cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "' )" Else cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "','0','0','0'," _ - & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'1','','',.F.,''," _ + & cFlagDontShowErrMsg & "," & cFlagGenerateLog & ",'0','','',.F.,''," _ & cFlagRecompile & "," & cNoTimestamps & " )" End If If cFlagJustShowCall = "1" Then @@ -113,7 +113,7 @@ Else Set oVFP9 = Nothing End If -WScript.Quit(nExitCode) +WScript.Quit nExitCode Function GetBit(lngValue, BitNum) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 711e2b8..c3e9ea5 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -415,7 +415,7 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb + " FOXBIN2PRG 'c:\desa\clases\*.vc2' '0' '0' '0' '1' '0'" #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "¡FOXBIN2PRG es solo para Visual FoxPro 9.0!" #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC "FOXBIN2PRG: ¡ATENCIÓN!" - #DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "El Menú [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY MENU <>" + #DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "El Menú [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY MENU '<>'" #DEFINE C_LANGUAGE_LOC "ES" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Se ha encontrado el programa de capitalización de nombres [<>]" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* No se ha encontrado el programa de capitalización de nombres [<>]" @@ -427,6 +427,7 @@ LPARAMETERS tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDeb #DEFINE C_PROCESSING_LOC "Procesando archivo" #DEFINE C_PROCESS_PROGRESS_LOC "Avance del proceso:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Propiedad [<>] no reconocida." + #DEFINE C_REPORT_NOT_IN_VFP9_FORMAT_LOC "El Reporte [<>] NO está en formato VFP 9! - Por favor convertirlo a VFP 9 con MODIFY REPORT '<>'" #DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Solicitado capitalizar el archivo [<>]" #DEFINE C_SOURCEFILE_LOC "Archivo origen: " #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC "Error de anidamiento de estructuras. Se esperaba ENDPROC pero se encontró ENDDEFINE en la clase <> (<>), línea <> del archivo <>" @@ -451,7 +452,7 @@ loCnv = CREATEOBJECT("c_foxbin2prg") loEx = NULL lnResp = loCnv.ejecutar( tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug ; - , '', NULL, @loEx, .F., tcOriginalFileName, tcRecompile, tcNoTimestamps ) + , tcDontShowProgress, NULL, @loEx, .F., tcOriginalFileName, tcRecompile, tcNoTimestamps ) ADDPROPERTY(_SCREEN, 'ExitCode', lnResp) *IF _VFP.STARTMODE <= 1 @@ -668,7 +669,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM SET SEPARATOR TO ',' ON ESCAPE ERROR 1799 SET ESCAPE ON - + lcSys16 = SYS(16) IF LEFT(lcSys16,10) == 'PROCEDURE ' @@ -699,11 +700,12 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ERASE ( lcFileCDX ) THIS.writeLog_Flush() - + THIS.descargar_frm_avance() CATCH FINALLY ON ESCAPE + THIS.o_Frm_Avance = NULL THIS.o_FSO = NULL THIS.o_FNC = NULL ENDTRY @@ -715,7 +717,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo - IF THIS.l_ShowProgress AND PEMSTATUS(THIS, 'o_Frm_Avance', 5) THEN + *IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O" THEN + *-- Si o_Frm_Avance se habilitó de forma externa, l_ShowProgress podría ser .F. para controlarlo desde fuera. + IF VARTYPE(THIS.o_Frm_Avance) = "O" THEN THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) ENDIF ENDPROC @@ -1183,17 +1187,17 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM tcOutputFile_Ext1 = FORCEEXT(tcOutputFile, lcExt_1) IF FILE( tcOutputFile_Ext1 ) - *-- LOG - DO CASE - CASE EMPTY(lcExt_2) + *-- LOG + DO CASE + CASE EMPTY(lcExt_2) .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 ) - CASE EMPTY(lcExt_3) + CASE EMPTY(lcExt_3) .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 ) - OTHERWISE + OTHERWISE .writeLog( C_BACKUP_OF_LOC + tcOutputFile_Ext1 + '/' + lcExt_2 + '/' + lcExt_3 ) - ENDCASE + ENDCASE - *-- COPIA BACKUP + *-- COPIA BACKUP COPY FILE ( tcOutputFile_Ext1 ) TO ( tcBakFile_1 ) IF NOT EMPTY(lcExt_2) @@ -1201,7 +1205,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF FILE( tcOutputFile_Ext2 ) COPY FILE ( tcOutputFile_Ext2 ) TO ( tcBakFile_2 ) - ENDIF + ENDIF ENDIF IF NOT EMPTY(lcExt_3) @@ -1209,11 +1213,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF FILE( tcOutputFile_Ext3 ) COPY FILE ( tcOutputFile_Ext3 ) TO ( tcBakFile_3 ) + ENDIF + ENDIF ENDIF ENDIF ENDIF - ENDIF - ENDIF ENDWITH && THIS CATCH TO toEx @@ -1236,8 +1240,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE cargar_frm_avance - THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") - THIS.o_Frm_Avance.Show() + IF VARTYPE(THIS.o_Frm_Avance) <> "O" THEN + THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") + THIS.o_Frm_Avance.Show() + ENDIF + ENDPROC + + + PROCEDURE descargar_frm_avance + IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O" THEN + THIS.o_Frm_Avance.Hide() + THIS.o_Frm_Avance.Release() + THIS.o_Frm_Avance = NULL + ENDIF ENDPROC @@ -1274,7 +1289,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .l_CFG_CachedAccess = (.n_CFG_Actual > 0) ENDIF - *IF NOT .l_ConfigEvaluated lo_CFG = THIS IF .n_CFG_Actual = 0 THEN @@ -1520,7 +1534,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) .writeLog( '> l_OptimizeByFilestamp: ' + TRANSFORM(.l_OptimizeByFilestamp) ) .writeLog( '> l_DropNullCharsFromCode: ' + TRANSFORM(.l_DropNullCharsFromCode) ) - .writeLog( '> l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) + .writeLog( '> l_ClearDBFLastUpdate: ' + TRANSFORM(.l_ClearDBFLastUpdate) ) lo_CFG = NULL RELEASE lo_CFG @@ -1573,7 +1587,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * tcStrFileName2 (v! IN ) ***NO IMPLEMENTADO*** Contenido del archivo2 a comparar *--------------------------------------------------------------------------------------------------- LPARAMETERS tcFilename1, tcFilename2, tcStrFileName2 - + LOCAL lnComparacion, lnLen1, lnLen2, lnHandle1, lnHandle2, lnTipoComp, lnChunkSize ; , loEx as Exception @@ -1605,30 +1619,30 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnComparacion = 0 && Son distintos EXIT ENDIF - + *-- Comparación de contenido FSEEK( lnHandle1, 0, 0 ) FSEEK( lnHandle2, 0, 0 ) - + DO WHILE NOT ( FEOF(lnHandle1) OR FEOF(lnHandle2) ) IF NOT SYS( 2007, FREAD( lnHandle1, lnChunkSize ), -1, 1 ) == SYS( 2007, FREAD( lnHandle2, lnChunkSize ), -1, 1 ) THEN lnComparacion = 0 && Son distintos EXIT ENDIF ENDDO - + IF lnComparacion = 0 THEN EXIT ENDIF - + lnComparacion = 1 && Son iguales ENDCASE - + CATCH TO loEx lnComparacion = -1 && Error THROW - + FINALLY DO CASE CASE lnTipoComp = 1 @@ -1638,7 +1652,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE ENDTRY - + RETURN lnComparacion ENDFUNC @@ -2069,7 +2083,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Escribo la información de error en el archivo log de errores TRY - STRTOFILE( lcErrorInfo, EVL(tc_InputFile,'foxbin2prg') + '.ERR' ) + STRTOFILE( STRCONV(lcErrorInfo,9), EVL(tc_InputFile,'foxbin2prg') + '.ERR' ) CATCH TO loEx2 ENDTRY @@ -2089,11 +2103,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY USE IN (SELECT("TABLABIN")) THIS.writeLog_Flush() - IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O" - THIS.o_Frm_Avance.HIDE() - THIS.o_Frm_Avance.RELEASE() - STORE NULL TO THIS.o_Frm_Avance - ENDIF + *THIS.descargar_frm_avance() CD (JUSTPATH(THIS.c_CurDir)) STORE NULL TO loFSO RELEASE tc_InputFile, tcType, tcTextName, tlGenText, tcDontShowErrors, tcDebug, tcDontShowProgress ; @@ -2372,7 +2382,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.c_OriginalFileName = .c_OriginalFileName .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- - .AvanceDelProceso( C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 1, 1, 0 ) + .AvanceDelProceso( C_PROCESSING_LOC + ' ' + .c_InputFile + '...', 0, 0, 0 ) BINDEVENT( .o_Conversor, 'AvanceDelProceso', THIS, 'AvanceDelProceso' ) .o_Conversor.Convertir( @toModulo, .F., THIS ) @@ -2538,41 +2548,41 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE - *-- Normalizar archivo(s) de entrada. El primero siempre se normaliza (??2, ??X, DBF, DBC) + *-- Normalizar archivo(s) de entrada. El primero siempre se normaliza (??2, ??X, DBF, DBC) .RenameFile( tcFileName, lcEXE_CAPS, loFSO, llRelanzarError ) - DO CASE - CASE lcType = 'PJX' + DO CASE + CASE lcType = 'PJX' .RenameFile( FORCEEXT(tcFileName,'PJT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'VCX' + CASE lcType = 'VCX' .RenameFile( FORCEEXT(tcFileName,'VCT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'SCX' + CASE lcType = 'SCX' .RenameFile( FORCEEXT(tcFileName,'SCT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'FRX' + CASE lcType = 'FRX' .RenameFile( FORCEEXT(tcFileName,'FRT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'LBX' + CASE lcType = 'LBX' .RenameFile( FORCEEXT(tcFileName,'LBT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'DBF' + CASE lcType = 'DBF' IF FILE( FORCEEXT(tcFileName,'FPT') ) .RenameFile( FORCEEXT(tcFileName,'FPT'), lcEXE_CAPS, loFSO, llRelanzarError ) - ENDIF + ENDIF IF FILE( FORCEEXT(tcFileName,'CDX') ) .RenameFile( FORCEEXT(tcFileName,'CDX'), lcEXE_CAPS, loFSO, llRelanzarError ) - ENDIF + ENDIF - CASE lcType = 'DBC' + CASE lcType = 'DBC' .RenameFile( FORCEEXT(tcFileName,'DCX'), lcEXE_CAPS, loFSO, llRelanzarError ) .RenameFile( FORCEEXT(tcFileName,'DCT'), lcEXE_CAPS, loFSO, llRelanzarError ) - CASE lcType = 'MNX' + CASE lcType = 'MNX' .RenameFile( FORCEEXT(tcFileName,'MNT'), lcEXE_CAPS, loFSO, llRelanzarError ) - ENDCASE + ENDCASE ENDWITH && THIS @@ -2608,7 +2618,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LPARAMETERS tcFileName LOCAL lcTmpFile, loFSO AS Scripting.FileSystemObject, loEx as Exception - + TRY *loFSO = THIS.o_FSO lcTmpFile = tcFileName + '.TMP' @@ -2659,7 +2669,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ******************************************************************************************************************* PROCEDURE writeLog_Flush IF THIS.l_Debug AND NOT EMPTY(THIS.c_TextLog) - STRTOFILE( THIS.c_TextLog + CR_LF, THIS.c_LogFile, 1 ) + STRTOFILE( STRCONV(THIS.c_TextLog + CR_LF,9), THIS.c_LogFile, 1 ) THIS.c_TextLog = '' ENDIF ENDPROC @@ -2702,7 +2712,7 @@ DEFINE CLASS frm_avance AS FORM DoCreate = .T. AutoCenter = .T. BorderStyle = 2 - CAPTION = C_PROCESS_PROGRESS_LOC + ' ' + CAPTION = C_PROCESS_PROGRESS_LOC + ' (Press Esc to Cancel)' ControlBox = .F. BackColor = RGB(255,255,255) nmax_value = 100 @@ -2785,23 +2795,38 @@ DEFINE CLASS frm_avance AS FORM PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo - + WITH THIS AS frm_avance OF foxbin2prg.prg DO CASE CASE tnTipo = 0 - .lbl_tarea.Caption = tcTexto - .nMax_Value = tnTotal - .nValue = tnValor + IF NOT EMPTY(tcTexto) THEN + .lbl_tarea.Caption = tcTexto + ENDIF + + IF tnTotal > 0 THEN + .nmax_value = tnTotal + .nvalue = tnValor + ENDIF CASE tnTipo = 1 - .lbl_tarea2.Caption = tcTexto - .nMax_Value2 = tnTotal - .nValue2 = tnValor + IF NOT EMPTY(tcTexto) THEN + .lbl_tarea2.Caption = tcTexto + ENDIF + + IF tnTotal > 0 THEN + .nmax_value2 = tnTotal + .nvalue2 = tnValor + ENDIF CASE tnTipo = 2 - .lbl_tarea2.Caption = tcTexto - .nMax_Value2 = tnTotal - .nValue2 = tnValor + IF NOT EMPTY(tcTexto) THEN + .lbl_tarea2.Caption = tcTexto + ENDIF + + IF tnTotal > 0 THEN + .nmax_value2 = tnTotal + .nvalue2 = tnValor + ENDIF ENDCASE ENDWITH && THIS @@ -2814,15 +2839,15 @@ DEFINE CLASS frm_avance AS FORM LPARAMETERS vNewVal WITH THIS - .nValue = m.vNewVal - .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nMax_Value + .nvalue = m.vNewVal + .shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nmax_value ENDWITH ENDPROC PROCEDURE Init - THIS.nValue = 0 - THIS.nValue2 = 0 + THIS.nvalue = 0 + THIS.nvalue2 = 0 ENDPROC @@ -2830,8 +2855,8 @@ DEFINE CLASS frm_avance AS FORM LPARAMETERS vNewVal WITH THIS - .nValue2 = m.vNewVal - .shp_avance2.WIDTH = m.vNewVal * .shp_base2.WIDTH / .nMax_Value2 + .nvalue2 = m.vNewVal + .shp_avance2.WIDTH = m.vNewVal * .shp_base2.WIDTH / .nmax_value2 ENDWITH ENDPROC @@ -2937,6 +2962,8 @@ DEFINE CLASS c_conversor_base AS SESSION SET TABLEPROMPT OFF SET BLOCKSIZE TO 0 SET EXACT ON + *ON ESCAPE ERROR 1799 + SET ESCAPE ON PUBLIC C_FB2PRG_CODE C_FB2PRG_CODE = '' && Contendrá todo el código generado @@ -6448,7 +6475,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base llEXTERNAL_CLASS_Completed = .T. *CASE .analizarBloque_DEFINE_CLASS( @toModulo, @loClase, @lcLine, @taCodeLines, @I, tnCodeLines ; - , @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario ) + , @lcProcedureAbierto, @taLineasExclusion, @tnBloquesExclusion, @lc_Comentario ) *-- Puede haber varias clases definidas * llEXTERNAL_CLASS_Completed = .T. @@ -9173,12 +9200,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE Classify_PAM_Hidden_Protected *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) - * tnPropsAndValues_Count (@! IN ) - * taPropsAndValues (@! IN ) - * tnProtected_Count (@! IN ) - * taProtected (@! IN ) - * tnPropsAndComments_Count (@! IN ) - * taPropsAndComments (@! IN ) + * tnPropsAndValues_Count (@! IN ) + * taPropsAndValues (@! IN ) + * tnProtected_Count (@! IN ) + * taProtected (@! IN ) + * tnPropsAndComments_Count (@! IN ) + * taPropsAndComments (@! IN ) * tcHiddenProp (@! OUT) Lista de propiedades Hidden * tcProtectedProp (@! OUT) Lista de propiedades Protected *--------------------------------------------------------------------------------------------------- @@ -9196,7 +9223,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base DO CASE CASE EMPTY( taProtected(I) ) LOOP - + CASE RIGHT( taProtected(I), 1 ) == '^' *-- Hidden Property or method lcProp = CHRTRAN( taProtected(I), '^', '' ) @@ -9369,7 +9396,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base WHERE TABLABIN.PLATFORM = "COMMENT" AND TABLABIN.RESERVED2 == "OLEPublic" ; ORDER BY 1 ; INTO ARRAY ta_NombresObjsOle - + FOR I = 1 TO _TALLY ta_NombresObjsOle(I) = ALLTRIM( ta_NombresObjsOle(I) ) ENDFOR @@ -10215,12 +10242,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base IF tnPropsAndComments_Count > 0 THEN lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+2+4+8) - IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) - *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - * <<>> && <> - *ENDTEXT - tcCodigo = tcCodigo + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) - ENDIF + IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) + *TEXT TO tcCodigo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + * <<>> && <> + *ENDTEXT + tcCodigo = tcCodigo + CHR(9) + CHR(9) + '&' + '& ' + taPropsAndComments(lnComment,2) + ENDIF ENDIF ENDFOR @@ -10906,7 +10933,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base *-- COMO CONSECUENCIA, LOS FORMS O CLASES CON OBJETOS OLE DARÁN DIFERENCIA POR ÚNICA VEZ EN LA CABECERA. - fdbozzo. 29/11/2014 (v1.19.37) * *SELECT COUNT(*) FROM TABLABIN WHERE TABLABIN.PLATFORM = "WINDOWS" AND BASECLASS == 'olecontrol' INTO ARRAY laOLE - + *IF laOLE(1) > 0 THEN * *-- Lo del <<>> para crear una línea vacía es solamente por compatibilidad con lo antiguo, * *-- donde se creaba esta línea cuando el form o clase tenía al menos un objeto OLE. @@ -10916,9 +10943,9 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * ENDTEXT *ELSE - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 * - ENDTEXT + ENDTEXT *ENDIF *!* CATCH TO loEx @@ -11064,9 +11091,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg 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, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal + , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal, lnStepCount, lnStep STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; - , lnMethodCount, lnClassCount + , lnMethodCount, lnClassCount, lnStepCount, lnStep STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj @@ -11075,6 +11102,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN .n_Avance_Maximo = _TALLY + lnStepCount = 7 USE IN (SELECT("_TABLAORIG")) INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE @@ -11131,7 +11159,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM( loRegClass.OBJNAME ) laClasses(lnClassCount,1) = LOWER( lcObjName ) - .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnClassCount, lnClassTotal, 1 ) + + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11192,17 +11222,26 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg .write_INCLUDE( @loRegClass, @lcCodigo ) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo ) ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético (del SCAN original) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Obtects with Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + FOR I = 1 TO lnObjCount .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo ) ENDFOR *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Getting Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + DIMENSION laMethods(1,3), laCode(1) STORE '' TO laMethods, laCode lnMethodCount = 0 @@ -11216,6 +11255,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg lcMethods = '' *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Getting Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + lnRecno = RECNO() LOCATE FOR UPPER( TABLABIN.PLATFORM ) = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) @@ -11244,6 +11286,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) ENDSCAN + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + .write_ALL_OBJECT_METHODS( @lcMethods, @laMethods, @laCode, @lnMethodCount, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; , lnProtected_Count, @toFoxBin2Prg, @lcCodigo ) @@ -11257,7 +11302,9 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDIF *-- Genero el VC2 - .AvanceDelProceso( 'Writing VC2...', 2, 2, 1 ) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Writing VC2...', lnStep, lnClassTotal*lnStepCount, 1 ) + lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -11281,7 +11328,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg ENDFOR .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) - ENDIF + ENDIF ENDIF ENDWITH && THIS @@ -11335,9 +11382,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg 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, lcCodigo, laClasses(1,2) ; - , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal + , lnClassCount, lcOutputFile, lcExternalHeader, lnClassTotal, lnStepCount, lnStep STORE 0 TO lnCodError, lnLastClass, lnObjCount, lnPropsAndValues_Count, lnPropsAndComments_Count, lnProtected_Count ; - , lnMethodCount, lnClassCount + , lnMethodCount, lnClassCount, lnStepCount, lnStep STORE '' TO laMethods, laCode, laProtected, laPropsAndComments, laObjs, lcCodigo, laClasses, lcOutputFile ; , C_FB2PRG_CODE, lcExternalHeader STORE NULL TO loRegClass, loRegObj @@ -11386,8 +11433,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg COUNT ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; - AND ( EMPTY( TABLABIN.PARENT ) ; - AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) TO lnClassTotal + AND ( EMPTY( TABLABIN.PARENT ) ; + AND INLIST( LOWER( TABLABIN.BASECLASS ), 'dataenvironment', 'form', 'formset' ) ) TO lnClassTotal SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; AND ( EMPTY( TABLABIN.PARENT ) ; @@ -11418,7 +11465,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcObjName = ALLTRIM(loRegClass.OBJNAME) laClasses(lnClassCount,1) = LOWER( lcObjName ) - .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnClassCount, lnClassTotal, 1 ) + + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + '...', lnStep, lnClassTotal*lnStepCount, 1 ) .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass, @lcCodigo ) @@ -11479,18 +11528,26 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg .write_INCLUDE( @loRegClass, @lcCodigo ) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ; , @lnPropsAndValues_Count, @lnPropsAndComments_Count, @lnProtected_Count, @lcCodigo ) - ASORT(laObjs, 3, -1, 0, 0) && Orden Alfabético de objetos (del SCAN original) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Obtects with Properties...', lnStep, lnClassTotal*lnStepCount, 1 ) + FOR I = 1 TO lnObjCount .write_ADD_OBJECTS_WithProperties( laObjs(I,1), @lcCodigo ) ENDFOR *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Getting Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + DIMENSION laMethods(1,3), laCode(1) STORE '' TO laMethods, laCode lnMethodCount = 0 @@ -11504,6 +11561,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg lcMethods = '' *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Getting Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + lnRecno = RECNO() LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND LOWER( ALLTRIM( GETWORDNUM( TABLABIN.PARENT, 1, '.' ) ) ) == LOWER(lcObjName) @@ -11534,6 +11594,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg , @laPropsAndComments, lnPropsAndComments_Count, @laProtected, lnProtected_Count, @toFoxBin2Prg ) ENDSCAN + lnStep = lnStep + 1 + .AvanceDelProceso( 'Processing Class ' + lcObjName + ' > Writing Objects Methods...', lnStep, lnClassTotal*lnStepCount, 1 ) + .write_ALL_OBJECT_METHODS( @lcMethods, @laMethods, @laCode, @lnMethodCount, @laPropsAndComments, lnPropsAndComments_Count, @laProtected ; , lnProtected_Count, @toFoxBin2Prg, @lcCodigo ) @@ -11547,7 +11610,9 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDIF *-- Genero el SC2 - .AvanceDelProceso( 'Writing SC2...', 2, 2, 1 ) + lnStep = lnStep + 1 + .AvanceDelProceso( 'Writing SC2...', lnStep, lnClassTotal*lnStepCount, 1 ) + lcOutputFile = .c_OutputFile lcCodigo = toFoxBin2Prg.get_PROGRAM_HEADER() + lcExternalHeader + C_FB2PRG_CODE @@ -11571,7 +11636,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg ENDFOR .write_OutputFile( @lcCodigo, lcOutputFile, @toFoxBin2Prg ) - ENDIF + ENDIF ENDIF ENDWITH && THIS @@ -12349,10 +12414,17 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG + THIS.AvanceDelProceso( 'Scanning FRX...', 1, 2, 1 ) + + *-- Verificación de REPORTE VFP 9 + IF FCOUNT() < 75 OR EMPTY(FIELD("USER")) + *ERROR 'Report [' + (.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT ' + JUSTFNAME((.c_InputFile)) + ERROR (TEXTMERGE(C_REPORT_NOT_IN_VFP9_FORMAT_LOC)) + ENDIF + SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) - THIS.AvanceDelProceso( 'Scanning FRX...', 1, 2, 1 ) *-- Header LOCATE FOR ObjType = 1 @@ -12509,7 +12581,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' *-- EVALUAR OPCIONES ESPECÍFICAS DE DBF - .AvanceDelProceso( 'Scanning DBF Structure...', 1, 2, 1 ) + .AvanceDelProceso( 'Scanning DBF Structure...', 1, 3, 1 ) *-- Include IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ; @@ -12536,23 +12608,23 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Header loTable = CREATEOBJECT('CL_DBF_TABLE') - + IF toFoxBin2Prg.DBF_Conversion_Support = 4 *-- Exportación de estructura y datos (para Diff solamente) ERASE (.c_OutputFile + '.TMP' ) toFoxBin2Prg.n_FileHandle = FCREATE( .c_OutputFile + '.TMP' ) - + IF toFoxBin2Prg.n_FileHandle = -1 THEN ERROR 102, (.c_OutputFile) ENDIF - + FWRITE( toFoxBin2Prg.n_FileHandle, C_FB2PRG_CODE ) loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg ) FCLOSE( toFoxBin2Prg.n_FileHandle ) - + *-- Genero el DB2, renombrando el TMP - .AvanceDelProceso( 'Writing DB2...', 2, 2, 1 ) + .AvanceDelProceso( 'Writing DB2...', 3, 3, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12574,7 +12646,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg *-- Genero el DB2 - .AvanceDelProceso( 'Writing DB2...', 2, 2, 1 ) + .AvanceDelProceso( 'Writing DB2...', 3, 3, 1 ) IF .l_Test toModulo = C_FB2PRG_CODE ELSE @@ -12745,7 +12817,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) - .AvanceDelProceso( 'Analyzing MNX...', 2, 2, 1 ) + .AvanceDelProceso( 'Analyzing MNX...', 1, 2, 1 ) *-- Verificación de menú VFP 9 IF FCOUNT() < 25 OR EMPTY(FIELD("RESNAME")) OR EMPTY(FIELD("SYSRES")) @@ -18001,10 +18073,11 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE #ENDIF TRY - LOCAL lcText, loEx AS EXCEPTION, I ; + LOCAL lcText, loEx AS EXCEPTION, I, lnReccount ; , loRecord AS CL_DBF_RECORD OF 'FOXBIN2PRG.PRG' - lcText = '' - I = 0 + lcText = '' + I = 0 + lnReccount = RECCOUNT() && Realmente no es muy exacto, pero al menos muestra el avance. TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -18023,11 +18096,15 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE I = I + 1 lcText = loRecord.toText(@taFields, tnField_Count) FWRITE( toFoxBin2Prg.n_FileHandle, lcText ) - IF MOD(I,10000) = 0 THEN - FFLUSH( toFoxBin2Prg.n_FileHandle, .T. ) + IF MOD(I,1000) = 0 THEN + toFoxBin2Prg.AvanceDelProceso( 'Exporting DBF Data...', 1+(I/lnReccount), 3, 2 ) + + IF MOD(I,10000) = 0 THEN + FFLUSH( toFoxBin2Prg.n_FileHandle, .T. ) + ENDIF ENDIF ENDSCAN - + lcText = '' TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -20615,7 +20692,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION , loField AS CL_DBF_UTILS_FIELD OF 'FOXBIN2PRG.PRG' STORE NULL TO loField tn_HexFileType = 0 - tcDBC_Name = '' + STORE '' TO tcDBC_Name, lcStr lnHandle = FOPEN(tc_FileName,0) IF lnHandle = -1 @@ -20696,6 +20773,10 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION ENDWITH CATCH TO loEx + loEx.UserValue = loEx.UserValue + 'lcStr = [' + TRANSFORM(lcStr) + '] / LenStr = ' + TRANSFORM(LEN(TRANSFORM(lcStr))) + CR_LF + IF loEx.ErrorNo = 11 THEN && + loEx.UserValue = loEx.UserValue + '> POSSIBLE CORRUPTED TABLE' + CR_LF + ENDIF IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF diff --git a/foxbin2prg_de.h b/foxbin2prg_de.h index ce53faf..e2d9e06 100644 --- a/foxbin2prg_de.h +++ b/foxbin2prg_de.h @@ -31,7 +31,7 @@ #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "FOXBIN2PRG ist nur für Visual FoxPro 9.0!" #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC "FOXBIN2PRG: WARNUNG!" #DEFINE C_LANGUAGE_LOC "DE" -#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU <>" +#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY MENU '<>'" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Programm für Großschreibungssetzung [<>] gefunden" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* Programm für Großschreibungssetzung [<>] nicht gefunden" #DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Objekt [<>] enthält nicht oReg Objekt (level <>)" @@ -42,6 +42,7 @@ #DEFINE C_PROCESSING_LOC "Bearbeite Datei" #DEFINE C_PROCESS_PROGRESS_LOC "Bearbeitungsfortschritt:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Eigenschaft [<>] nicht erkannt." +#DEFINE C_REPORT_NOT_IN_VFP9_FORMAT_LOC "Report [<>] ist NICHT in VFP 9 Format! - Bitte zuerst nach VFP 9 konvertieren mit MODIFY REPORT '<>'" #DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Forder Großschreibung für Datei [<>] an" #DEFINE C_SOURCEFILE_LOC "Source Datei: " #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC "Fehler in Verschachtelungsstruktur. ENDPROC erwartet, aber es wurde ENDDEFINE in Klasse <> (<>), Zeile <> der Datei <> gefunden" diff --git a/foxbin2prg_en.h b/foxbin2prg_en.h index b811b7b..bac361d 100644 --- a/foxbin2prg_en.h +++ b/foxbin2prg_en.h @@ -31,7 +31,7 @@ #DEFINE C_FOXBIN2PRG_JUST_VFP_9_LOC "FOXBIN2PRG is only for Visual FoxPro 9.0!" #DEFINE C_FOXBIN2PRG_WARN_CAPTION_LOC "FOXBIN2PRG: WARNING!" #DEFINE C_LANGUAGE_LOC "EN" -#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU <>" +#DEFINE C_MENU_NOT_IN_VFP9_FORMAT_LOC "Menu [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU '<>'" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC "* Names capitalization program [<>] found" #DEFINE C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC "* Names capitalization program [<>] not found" #DEFINE C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC "Object [<>] does not contain oReg object (level <>)" @@ -42,6 +42,7 @@ #DEFINE C_PROCESSING_LOC "Processing file" #DEFINE C_PROCESS_PROGRESS_LOC "Process Progress:" #DEFINE C_PROPERTY_NAME_NOT_RECOGNIZED_LOC "Property [<>] is not recognized." +#DEFINE C_REPORT_NOT_IN_VFP9_FORMAT_LOC "Report [<>] is NOT in VFP 9 Format! - Please convert to VFP 9 with MODIFY REPORT '<>'" #DEFINE C_REQUESTING_CAPITALIZATION_OF_FILE_LOC "- Requesting capitalization of file [<>]" #DEFINE C_SOURCEFILE_LOC "Source file: " #DEFINE C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC "Nesting structure error. ENDPROC expected but found ENDDEFINE on class <> (<>), line <> of file <>" From b93fbe67f1e550d088efbf20b75e4d0de50cad20 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 16:59:58 +0100 Subject: [PATCH 55/60] =?UTF-8?q?Changeset:=20531=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2016:32:36:=20-=20Actualizaci=C3=B3n=20del=20log=20interno?= =?UTF-8?q?=20de=20cambios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index c3e9ea5..7a2ae35 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -111,7 +111,12 @@ * 19/11/2014 FDBOZZO v1.19.37 Arreglo bug: "String is too long to fit" cuando se procesa un DBF grande con DBF_Conversion_Support = 4 (edyshor) * 19/11/2014 FDBOZZO v1.19.37 Mejora dbf: Nuevo parámetro ClearDBFLastUpdate para evitar diferencias por este dato (edyshor) * 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 +* 29/11/2014 FDBOZZO v1.19.37 Arreglo bug scx/vcx: Algunas propiedades a veces tomaban la descripción de otras propiedades similares +* 29/11/2014 FDBOZZO v1.19.37 Arreglo bug scx/vcx: Las propiedades "Protected" y "Hidden" no siempre estaban ordenadas alfabéticamente +* 30/10/2014 FDBOZZO v1.19.37 Mejora: Optimizaciones en velocidad de proceso para scx/vcx/dbf +* 30/11/2014 FDBOZZO v1.19.37 Mejora: Indicador de avance de proceso más informativo +* 30/11/2014 FDBOZZO v1.19.37 Mejora: Se puede cancelar el proceso con la tecla Esc +* 30/11/2014 FDBOZZO v1.19.37 Mejora: Agregado control para detectar reportes no compatibles con VFP 9 * * *--------------------------------------------------------------------------------------------------- From edc7bb67352e9b5c2fe5e76269df7872d8f46cf4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 17:13:18 +0100 Subject: [PATCH 56/60] =?UTF-8?q?Changeset:=20532=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2017:02:06:=20-=20Limpieza=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 52 ++++++-------------------------------------------- 1 file changed, 6 insertions(+), 46 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7a2ae35..6ccbab0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -722,7 +722,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo - *IF THIS.l_ShowProgress AND VARTYPE(THIS.o_Frm_Avance) = "O" THEN *-- Si o_Frm_Avance se habilitó de forma externa, l_ShowProgress podría ser .F. para controlarlo desde fuera. IF VARTYPE(THIS.o_Frm_Avance) = "O" THEN THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) @@ -1868,20 +1867,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) - *IF .l_ShowProgress - * .o_Frm_Avance.nMAX_VALUE = lnFileCount - *ENDIF - FOR I = 1 TO lnFileCount lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) - *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - *.o_Frm_Avance.nVALUE = I .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - *IF .l_ShowProgress - * .o_Frm_Avance.SHOW() - *ENDIF - IF FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) ENDIF @@ -1957,26 +1946,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM USE IN (SELECT("TABLABIN")) - *IF .l_ShowProgress - * .o_Frm_Avance.nMAX_VALUE = lnFileCount - *ENDIF - - *-- Primero convierto el proyecto - *IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(tc_InputFile)) ) - * lnCodError = .Convertir( tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) - *ENDIF - *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I,1) - *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - *.o_Frm_Avance.nVALUE = I .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - *IF .l_ShowProgress - * .o_Frm_Avance.SHOW() - *ENDIF - IF .TieneSoporte_Bin2Prg( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) ENDIF @@ -2014,26 +1988,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDFOR - *IF .l_ShowProgress - * .o_Frm_Avance.nMAX_VALUE = lnFileCount - *ENDIF - - *-- Primero convierto el proyecto - *IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(tc_InputFile)) ) - * lnCodError = .Convertir( tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) - *ENDIF - *-- Luego convierto los archivos incluidos FOR I = 1 TO lnFileCount lcFile = laFiles(I) - *.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - *.o_Frm_Avance.nVALUE = I .AvanceDelProceso( C_PROCESSING_LOC + ' ' + lcFile + '...', I, lnFileCount, 0 ) - *IF .l_ShowProgress - * .o_Frm_Avance.SHOW() - *ENDIF - IF .TieneSoporte_Prg2Bin( UPPER(JUSTEXT(lcFile)) ) AND FILE( lcFile ) lnCodError = .Convertir( lcFile, toModulo, @toEx, .T., tcOriginalFileName ) ENDIF @@ -2967,8 +2926,9 @@ DEFINE CLASS c_conversor_base AS SESSION SET TABLEPROMPT OFF SET BLOCKSIZE TO 0 SET EXACT ON - *ON ESCAPE ERROR 1799 - SET ESCAPE ON + IF NOT EMPTY( ON("ESCAPE") ) THEN + SET ESCAPE ON + ENDIF PUBLIC C_FB2PRG_CODE C_FB2PRG_CODE = '' && Contendrá todo el código generado @@ -5336,7 +5296,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF loObjeto._WriteOrder = 0 AND LOWER(loObjeto._Nombre) == LOWER(lcObjName) N = N + 1 loObjeto._WriteOrder = N - .insert_Object( toClase, loObjeto, toFoxBin2Prg ) + .insert_Object( @toClase, @loObjeto, @toFoxBin2Prg ) EXIT ENDIF ENDFOR @@ -5346,7 +5306,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *-- Recorro los objetos Desconocidos FOR EACH loObjeto IN toClase._AddObjects FOXOBJECT IF loObjeto._WriteOrder = 0 - .insert_Object( toClase, loObjeto, toFoxBin2Prg ) + .insert_Object( @toClase, @loObjeto, @toFoxBin2Prg ) ENDIF ENDFOR @@ -20779,7 +20739,7 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION CATCH TO loEx loEx.UserValue = loEx.UserValue + 'lcStr = [' + TRANSFORM(lcStr) + '] / LenStr = ' + TRANSFORM(LEN(TRANSFORM(lcStr))) + CR_LF - IF loEx.ErrorNo = 11 THEN && + IF loEx.ErrorNo = 11 THEN && Function argument value, type, or count is invalid loEx.UserValue = loEx.UserValue + '> POSSIBLE CORRUPTED TABLE' + CR_LF ENDIF IF THIS.l_Debug AND _VFP.STARTMODE = 0 From 111097fbc7d0e670978bb0d10f5c389e285541d4 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 17:18:34 +0100 Subject: [PATCH 57/60] =?UTF-8?q?Changeset:=20533=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2017:17:04:=20-=20Limpieza=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 6ccbab0..5922edd 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2877,8 +2877,6 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; - + [] ; - + [] ; + [] ; + [] @@ -2911,8 +2909,6 @@ DEFINE CLASS c_conversor_base AS SESSION c_OriginalFileName = '' c_ClaseActual = '' oFSO = NULL - n_Avance_Proceso = 0 - n_Avance_Maximo = 0 ******************************************************************************************************************* @@ -6590,7 +6586,6 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin ENDIF lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .AvanceDelProceso( 'Identifying Excluded Blocks...', 3, lnCodeLines, 1 ) @@ -6928,7 +6923,6 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin ENDIF lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF .AvanceDelProceso( 'Identifying Excluded Blocks...', 3, lnCodeLines, 1 ) @@ -7244,7 +7238,6 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8043,7 +8036,6 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8475,7 +8467,6 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8772,7 +8763,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -8953,7 +8943,6 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin WITH THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - .n_Avance_Maximo = lnCodeLines toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) @@ -11066,7 +11055,6 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - .n_Avance_Maximo = _TALLY lnStepCount = 7 USE IN (SELECT("_TABLAORIG")) @@ -11357,7 +11345,6 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE @@ -11661,7 +11648,6 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') @@ -12388,7 +12374,6 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg ENDIF SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 - .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) *-- Header @@ -12780,7 +12765,6 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg WITH THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' USE (.c_InputFile) SHARED AGAIN NOUPDATE ALIAS _TABLAORIG SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - .n_Avance_Maximo = _TALLY USE IN (SELECT("_TABLAORIG")) .AvanceDelProceso( 'Analyzing MNX...', 1, 2, 1 ) From 78ad48e005ca35d0fa8312e49bf3e865060bfd3c Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 17:25:59 +0100 Subject: [PATCH 58/60] =?UTF-8?q?Changeset:=20535=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2017:22:25:=20-=20Generaci=C3=B3n=20del=20EXE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.exe | Bin 459895 -> 467912 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index e88254e09a7fa7b0e103156f59c7ca4b2ed67d7f..5e7e9b5fbccae202217612ccaa1ba4d656d401fe 100644 GIT binary patch delta 47923 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 TxPd+6|2s`;axWkJ)Ykt2;#57! delta 41163 zcmdqKcVLyp(m%et&v~Boo|E1SX(WWuTOf^^0!a{%5&{WDLkpl{3t(4N;3x|!BH*=M zMG*CPt#G|!ML_Ic1!Bh*5Qz~u{64eKIVUHS_r34;`~H4^{H`}-XLfdXc6N7Wc6Rs4 zTW`j--x{~Q`(*F1ulI4brSkfny(fR<>pSN@gIT4)YP2=U;YE?J)s$41l~oR@8a_P0 zx4NvRYJ7D`89~!|5ld%`4O?wtyLaj=F4kcG%46)FS9BJ+DQEXXlRDMO^!VC(8UyT8u4d?r7Vhx!w6T+kx{k_>s9eNFOc(a!~^edSokky{xtlh$bPk(d91%U~I zEbLYM6gxCF-mpz?>Jg~3s=DDdRq9t|$N7eWfRdq#O z(IrKdC1vw$Pp``4^KGB5%JCU@%3vksbtS{)=4xRr@M;fb<4*aqlB)9ZvXa_SRh3@t zVZivXvWX>SV+jF1!TKvPj-Kq1)9vB51vh5~{v*Z_z($|`le06K?N-~JcP14^urrQu zR@?3k#!K*TYkMS%@jv5;VCkn@+oM>U4pcPrIn$wU;*KC-iE1;zE4ib{_RGE`o8Mhy z6GBnEwLJ!vK`gE9u>h$Rhd)7awq4%$O(%kPd#4`D7Il2OW=#dhfa8k*T~y5t*oj_sAZv-*Wv9Wku-q#rxo?$6F> z5FOa}XFv=)116(JcIZ>I4n5H7$YTD;bmq!;2V0`~ZMIpfv-x$lHLHgOhO_oSbWlG! z2OKZ69a^2hQ*4gam-0m0q%{R%pl;(ft8Kc}ZI7Z+R;g^6$;%|FTWHm&!bRZ*Ospk3#=;Z?xZ)K8`4? zg%H-BY71Le0)h$a`iMckieT%yT;9)iU>%j4v?k8hOGb!a%&h4$+UG}Ka|T4&Cf%28 z+bYvR_O|RP9`sYCL)J(8+~;SKq$!fx^+YoGo;cgO^^sznzirVyF}AnYhx=6cn`G&V z%xeRY6QMIk1&?ZEv>w#)|=X?Hhie^C&s$nrv+WOqG~Wc$`6%XO2**|ImqiQkDd#x`S9 zoZoLwa@L-wcz9%!syNSCV&A3#VoR7Bxx|M;{T>W+1e;>(VH^BVf9hHfH)W1o*vs(t z9ylxh-@4?-u&2b{os)X)qbxEhE;%xWk#4(`m zX;Nc3llri*IQ-n?Nb^((P;TcbrZHAWh)Xdkm1WD>lI(Yr)e&v>r@%I0OG>|I+;A`G zq>^^d>P~UiGhFjEnlWdvtB>u^EjfNu+;Cr8-qswy zH4&~w)z8+jH6Cfs&Gn+bCXWLNg2N5)-Ni6+sk8aKM^Nw`YI>7e%))dU-Gh6e# z3Y;PxsNS_icDbpx{89T+G_ziR*OHJw>AnxNN{_f#C+w_MGR2TcV zJg+n-b}Z8A&h$-4cXOs+M7p0d{TtHYTh*BMNS@aKXL`~jc_kTU8e`+KOQzk!tvWnSnHS!YL$+OeU zB9paep_lFC1z>^Lj_k4W>usxcB?a}x^hfrIY}TFw3fqod=`Cm6g}PIrU=;GGbA%rt zm`W;kGS{roIa$M5J{rB+&yj?ICRYLWFdW9#i$%eisAm|n){}Y8BD6rgSwV;XY#1gp z{Ed=!rY2{$f8n2;lc|5l-)UsG`*rAh{9&T~PlM<)&KgLY?Dw;s*&XdwO6fK~Tl_zx zTgFg2*q^42VxSe8fjkITxnj!C_slQol3zjjV?FbGb;+-${Dq$Ry*=|A*(F4<+LNG< zCjlGHk-yzDzc2EY9MC}*+a2QUSsJN0(>vK7=9I%B{|^28P}_U|in6W!XOvhTM1yYR z26X7x1lVHUNEK58Y(w9O5r8JYQ4#X*0O(jqwza*R8ktXRvtQ4N>&KJ>5P|VgzFQ!> zKJ0W!25GOkwr#JM@&2|GuV;Hsqs@Wt8FB73%D6VjVTG{6&Cw3VBH<^k=+gguV)YKX zz{E;YGou9cA3Zp$_2dB71_v2XKCQ#6g8t)~R)8sBJMga@u{u=A?ERn)JuaAJ#?ROa z--s0eAhOWwg1d@rS+MQJH=5$tgg9cs$tj)X6_u7|Dkm1*q`{mJVk_A*Iba|=y5H$c z-Wg*1`<{ND0(>^)q5@1?6^i-kA;AAb>6M25_tG2GMS8b}{>RemPSRWZW_s}V)C!cZ zri|U!p|&^Q%u9YU3_VDqm3hj-^2(~K4Y={9cN`toq0bIeQ*&gPnwo%Szg5NaZ1%U3 zdd;zt6QEY=32)Xu81sgPN(CWaD3N{9eLxB#V2cZWMN2nizF^KYkhFM_t;8?F>HtrcoJgH&gb z6}mnBG!%b=Qv5*uWi#H%6IE7Q-**OuHds;S71E|yqu43ViI59pMa1Rq7K_n*inGQP z))vHw5BQQtKZE|N3a0tnO5HaZBxPEH5}t4=;6T&9m_=1n~!uZYh0PWku1%x=V`6$Cuf-BRtSxl?t%1nvqo#c23ya#A7XNSi_mQ~`+D$T+FcIq9zlcD9)w|Oh0PWFJk)k{Uv^6^B>XnV&dkLf z_GhZjkBMMqC<}-mmdbro1xK5N+wdHPil@xvo>;vAVKjI)j3YH?f$eV zPHnzvo2^=F#m<~`m6Ce2ZSyB#a_<1c$JX?L|Bz7hj&k8H=2W&i_vo&+YRtCgTU>1= zdbSm2xnNsK=d@)@KWJ6WP{swD89Q2aDPMOrlkC~dM;C4;<=kezcQ!*A7imTf*YOKC zgPr(=BzImjkAGCfDI} z+kkHKoK{xbiI2n7P*cW5+9;tm&Um{zk>%NmE#4OtPIlL3GF20VykHX*l}i4v`M8?M z@ob{O=Ymai@7hF|?TSyWeMnlA;n9q8EGd{4uXNk}zA%Ke7o+pbSXM7zhq zT(DiF6lM$h+^`M!ET|T$QmyAMEyR-wP|H?j)^^EsH;*k08oScZ**vXF)%>aRn#USG zuX*cu)wIg;=vsK$HG3ZZKGk~Wmg@oJcI3) zM@JRq#aJ0T`Xa2PDOP#}I9Z{ErdZkOe;zAXmFKf!+xtb3DGHT+vG#{oU!?tRs(rse zXZy4uRr_}boY#JN@qgLA%D!0p<;53iKU1}D339ei>s7UXdEj~NV{xC;|CTSUu*#TZ zD(hlx4z|7%X6WzON0 zR`r#Kf(9s=s_cs~Q&HKK8MPUV55brXwK)!j!6gVioYEtgd9}9ZA;RF#l;hCu1KxNj zxSbJ>Kv!+MAKCYxu*Fu|!nUS0$;TS%m`|=qu5H!f#j$Z}4>;|7>NrN!{5{)^hnLu% zKH?u5XSyGz3*Q#np%1t1J<^>IxBYcwHNr4=w083@4tLB$qyDJ5sf9MG2%Hjs%E!o~ zAbF|j+mZVer&L1^1Z)rhXwSt@9t)+2%{mp$YeldR<-oVIVeE%mPee22Q<8r~J9rag zo)yG-V0yCP7U&&wn{N^optja_b7OB}C~nuQExy_R}}lm66v-LUg*nV#nJgOE?VCIc}1 zSiw#Nvy+3}yQY?45-VCzn;ifUQ-{7g!nN5Mf?1{3z$+0BgN^8!q}rzT12Bl#_ksH3 z2q0fk8EWgZFj7VKXhQ(6mNsyx*XiTZ(6{TV(qq`c1*fz2Lgq_jpBssoCh2_m?74r6 zvEztQXJ_TH+eEaSK1+nk)t8E3+5L9mBNwz;bUEx9ix(eiJNw<=cRu_53u5Q>NB#Ak zMQu-b+Xi%e)^{RPQ9Fd3I7RJBP9P=NW?$M0jAK|PXwSrXihXD0U*B-s7{}e+!Wadz zRdHu<#N*V?wTH^LJ$bh5-Wa};e@%yo;!pP6E`Hi#@6h>RAO5`T8^kB_yXD7&g|JMD=EiJ zak+Vy7S+N1|nedK}5cpmp%cR7#b zx{SJ(;vocO-VoS+BJ_lvE#ZAs(CJN%*g~y3lrAx`w2Yht@h}YDL&&AV{*tz` zIE-cNgfE?2I#>5FS=1t|vTXsk$ZHq!{)SRGuXkcC)7hy@JTvF)dv~Of^Tz>E0H9-;A=#(y`T5B^ikG?9!q&OaM805$_@Vnao?ld&^I+z)Aj- zOL$0-7ptqRswl25GtbmzNHb63+ht)hua#dn^HBNpyIkj2%TvufK?8qs%^vWdznG8l z@*!^fa>7LAWU^B!t~veRFe@t~EOD}MlEqKHznIr@Un%E-ox2zDq)x`{Z!h6_eqm9X zpPHRsn7if-eN6f;=T})D7UmdZPI$S-_#wMo&NDc_M839yXQWmOGjfFCrhqC7rh_X0 zfi#%mG%qV!rG((-Ft5)(9en>vOlE?8+w-B!rmhwp zSJtE-lK%3pJ9yug0ASQC$2v8R9(0;8ltm1xLw|r{pL!#f2PtlTCi67a3fBP=;ATV$ zOTmW$`)wGVN(?JOHR@3E9y9Pm4Z28Fyvf3n6*r`Wz?Hmf759SqJb)^Hl9>UHV({$&z`0krBBZc#Z<+&& zh+GWnOa!7^<5?b#M-|c0k6nI3m4Nj=htzB)(L__zR47u##|*P&lf+@=95jgU(U~XzS z@rji`-pPB1W$KRH&P;VCB=hg$(R0Y1OE+1;J{n_;P-Ij6;>G22XF#dJfkGfrg`yC# zBHj}fkq;}bU)-n&yHZhDjpSwaXRyUpcaq$37qvM78_LqSZXC zXQrB*YDg7UxszEyDuc04H-qWqWqB5hxNtGKZ8eVy$cE94FifKxBiHm1;Udsb2daF$ zbgbqH^3F67A(!uhZF;&+=m8k%(_}v#aK>`w*~fUCY*@p4%1t|Yw)}VvA1x2=gq<3{ zmZt=nCIPnL(yHpxvT9lXIS-So*YfaS(@c1?nzGuu@==v#^6XBYZ~tm7->&l)7&{ z<;?rx0}A=_{X81B;p6*x_qe6FC=^FgKwK1xQu4y-^+^Z{=Y=xi0baO9=F%`<4K2L=*G-O-)$lVWdtL0&D zN1Zy!UU!$pV%InGv5{J&=pomv=UKMtw_EHty}+Bf_>{|`FY*GPK#UJ9iXN^qhJ5rz z9>9a-b1(8Y?DxLJzY7sdHM!^uULbxFa>rhNjrd;3y!ZKBx%w-f7)s~NYFC0?j8f^7 zWaO882`0s=FZlq!P}Y{JJo>|7a{rgG^*Qp`mplqR^!*Bs!Sek`TjiZ!@e~okisMPe*w4|KIv+M}M2W#U`#sm1oJc zANdrXE?4}>XO2uXrLDmTSRipYDOkf%a9CPT(p+&52I-F0lR-eax3x4F)17X)x7_}_ z7S1P{j`%%X?$6hvq}S zm@NlcMXX$56=8DzQ65lWK@+!ewR0vzcEY0OoH_o!aD@+C+;d1*B(G9aM zBtkq*ZCBV6BgMUG;$O~Y$I2fEiAQ+3Ts>F}lYEGX#f8K3`b$9#cYlc)DHoQB$Oz26 zaA(_AciVTHZ9nU5J3@XkM7(UaeY{Y7U=c4k+b)$ICBnvs$vaEM7}d5vt*RjB#FuNV zB0TSouH7b1)UMf&;r5Ez?QnO~H<(R7=4{$3zbF%Sv*}~Q#afFtM(b1w^4$s%%HNS+ zRftl)N2XSa@p1nY%3C1s3f>P~vrcc}Re4XPm>f7vI1h_waN2O4sT7y=$R{mHo3{|t zWho(Ti%=T&I7ZT$9&9@ba_UM1*CS=IH0Xk`rh@ zJXXA_w@hQsEn6*HV1>g`TU1901w$O$Yc1maP1B;wHlp1)4H6Zq4NK_V8lzGcV z$3>XG56)g|%Bn9ZD=p|D4+{|!wAzBzU>c!Uxuct0bg77xuTBuR@tfqxi6S#GhmJdI zPYT>fg+(M^o2z@Nw75>{Os<(Ik}_9tnB@x)!M#;fYU6<|qWof_DB~~6G%Von+??> z(R-P4z1o9h@MKXC6GVd_sIG75Y%>{}NUmxKl2ay&Tm}AeVEj zlsq|bs>qU?CyQ8KAzzs+GNR$zz*B)^<06LdgRKX;#ixj={6kqcMMN5^+S}!|Q$%lm zv)nO7OtScDjy$<*3Ve*TshA`)r;0&-v`mysvtN_%P8QMWE&*as-YMntS{gV_4D_P1 zv_ZIanke8Q@}+4anopM>O%tAX}%4X?&6_su$H_B$rRsi_F|uuA;wmY>i1tvd|f($FOre zN7c8|=Vyqk{l$hrb!}cgI$uN^Z2^w4h+2HLDpGzqU)&>p4zMp?AU@!5n}#nEm+&C_ z#zo>~Lu~bx^~*$M1ntg~)E;!8uPL#`zL*e&SBnJs_|=Hj^}8DCxX&_?4XGNAqxi+ zt;?TRidez0?s3CWr0Vv>8^l|hX46v<14x#Bw}?>TtINbnHNx7{K(wFuhw-Kb6= zNFQN0XraZth(Zt8nqW>+;EA8)YR9rft!G*>=AatLQz7Sdraqv3e&?X>;STJeut~;3 z{|VbkkIGOb=>Fs_RQb^m)BiLNEk1!MnMXTWILT%-5B&TKdr08LAdEOtsKc3;c6|T3q*&&k>pm5iZaiOS%Y6 zW1EjuEU9xc&fMhHhsaQ26 z6tH&}15q`#MOJpCrW8$=UYY!~bTZ@$NnEbc*7JNpf_IS6&{I^!9V;NEW$vxXWp}!U z-cFQ<>+a)3k?S7so^hcx<&=QH?_RKa&>~xI6H#MFuv10OKqMlO2v}py)FTGDaBdQ)2&;V=1UgLn+F}SIJ0TKGuhqEh(#{DO_cZ)>89=q zmMbo^go^>r^?IvLM<-)=ynV>+WH!FIL(ES4QUtj}kzV9qP=o~2iFk*!-jp*|iEG3- zArGw**TZ90anUjlHkIsrvJuRkS-Wf@^wGczvunx{Lz`$?hR@BaMh$1DhB@FM7Wa$W2;BlKiDINS;V#eYL{fW z-_P-=+;vF&O*pdTnRi8oa14=o?};S&;kzP4kHryhynO$#h(RD^@q40Yn51hR8*T7XFW7wZs+cRh0X-}6u z_6lqNWR{7{eAjjW_gPMM!$MNK19KOKn~%yRbK6xfHoQGqUb|Oh#$_@rObRq%tCVTR ztWJ@F#~hEByY`AXaN4ie!cLz^X6-5DF;5s(Sz0xrCb$iOMBuX6XSx~JQ{KZ@KJxDO z#bkuJ5UqnlolO?wagBCl)B;^b$NV&Pg^Q*;(d>28z&#r6gq@9q*3TT-9>k58yBj_`KWxLTrA+683!G-wpC1wN>S)54wV(i zSHBfWa|&4Qg@h1^!6GrJ>t8fRM}NH^yBo;D(T`o9mU98QUA#z#-mc5Q17d)D=Q~k7 zUdirJUC9oy|BK7+T{lfv+5Mm^*`cf{J4(n!--}Te=H*x^dmeiUdAD z?mY@UidCY*{v}ms9RG8njfT)JBkFi|j<8k!i@L|(pN5dGo z$6JZ^5AXk8w9!5;ny#Yl>vO(n+5M1>to=mv^%|(e)FP+Qz$wG$dXW$ANEUS4jb|{s+$rqFKMs@4} zvq(;virz2rl`DP~`QvSV?mnu92K%|@bQHGTv1(qoo}@d}7pkSdpJRZNBf7USgdL?D zwL|26pNRx3po8Eg9t53C%Dtb7lx|cXS$^f4-%U+kfI~mI;y2N=ze!7;0{wWz=|1o? zZC?UwFLDMfipiL%JJs*_nV#z+|8;F*D=+B`(b@O4iLqQJbL_2t`nT91ANo@Cwb%VF z9^&Gb08=?X;{Ts3=N}J4Id7qhZ~qI*Ip;rD&Y7~uE4o#8tL6k5+$yX|Suh;g9y&VP z)X|Z2GuW-8U!u^hgx-eb}v$%0dxS!^u(PsZg->&*z>GGu(wP>6=`#gOQ_1vLvaMSeYqVJ!# zxb!{YmA>!s-|2hO^#FzM6-GIh1G5g z)Gir@2mRfwtAy`^C?-KtmhGD2_7>1gL0nmAdVVG$cs6Mx0xR07V-!QcJ zn})%py?|l((%)?uN}PtF)NL3(@;42`wE@a7lwH&?+$8^fTx5G%2cK}$I<$v6o{>HM zwRAb<5Aiu3Ow0Z!#bxr~Ns)sasSxcqDzr{dnQ)WreE$_sS2}cWq2>!{=zQ6|ZgGY4 z1S0TsBLLoE1{@YpkdGS4?x(jh8L+5y`Uo0z`iNY*3g|?|wxAr9ptE!*j?U5vMITy# zSFJYV1k(#zUvg60laTT!pT0NvdR*WFg{nUp1=Y6h5{&?E`cBrzW7fvhaj%T26CLp1^l8$Z~e62Dn~w_g}a`m}egp zrLE%l{Z_QLnOjgzZ}||{!hNnGM-?7Qp3E0otQ_mWP9e|!UaU40)bh?Gt(*MvteB1T zeeqghXTcWckM^BHbGkIgNVid4U7{|yZt0l7PK|R#T~rVvZ&YnrMP}2?lBLZJbDI%% z&7jL_2*~Eq2~A;PMpj;F z>QuDVe0obGrH=TG09PlmRgN2I#(n++7Rs)g*|fBw5zXh-(rj=y23gU4IBG1rPoR28 z@1AV*9*tIo#)glb@D!#(w?J3xmC0IMzyG*(iuO>?YrFIlL$WOl2XUdddmE zb`XTM5`w%QvL*z@^W|0atEb!;f^r4&jSy`(A`IigwQ!jfs%7^`r|T++x8O}Fz7fH2 zkzd_p<(TB%kA7}Gqy!S%T+(|&E(_Iqk8>Cpd31wr`qQh@lm3_(3PU&jff1b;y6F#$ z)`_8;{=iriCX(vuFCC#;MC1T7!%!KtEmd3DWSJAD)wXbNvjw``?=G#{9CTg_gH4Ry z+2#<>s#U2%6XU`AP!r?9`!EyZg?eI~9V{|Y-knt!%cyWIK8{`(dt9zGch)yK3gK)i zdG`(3>5DTGPf^SD;TVllc_>^v+ft?uaNhEPBJwazD}9{{?ubu^em!Y(f8}@}?5i=T zEgF;*U*(oyb&UXXq!!D-i(1q!i&n-?1hSJOfwnp;80GXeI`n?zC;PXkf(i?7p+m28 zS326GQgxuH*g!wdubd8Fl*tSri;4RdW8A9Y0XosdTkfY#x8LbNm`3y_Fc4jf>r&85 z<)#&_a9h!GnS7}hBZDHfRYh(Jbf)scCKOUgFjeG-e#&0D%iyVV71>K%w2st@eafRv z)mrW}p5T!38ET#crR2KM;W{wH^AQU?;JM9W8g-(Q*$vT26MfsO5rnObYEZ zspCu*$CK`bNiF~1HL2Y%Xj5G#6%&m7`{!Lff@xjS6Jom{)APvyAc~AhRZS+OF3eTz zf5q08lROs{U##`J!aa>|89klqYJ6M5UF`hd8(%e!JAy};L-Ul?qvrbH(Iz%3!i804 zx7=xV%RS6)xu@B!A(>@GcbeUDEJ3B!M$+`dBEs0i?2dPu-CEP^{t&Hp73%gBjOiE@ zGR^L?=nnlK(dU|7V4P<664UIKbuqj6w9y2o*`4U#vK@|AW|vn=?{3=VxcSh<;I5U4 z@9Nq1c^O)^CO*~8E!v+J$K|v|i;=(05We#FZ0+NS6BaOI#^|i(0ZIgOq{#duSZ4dW zYuRB@rs?S13!UK7KUa%y!8v1x{+_w1Ly(G$u6x7g+TX_#O`DsBUZ^QkY|h{Wgk)*k zgeF9Eu*a@xewU{p=f#~>%M*v2dqsq2F5dKIZkqq1=@`$Ze-P{PwD{htiCt!CJbt-& z3*WeD;^eqIEy63Fx;#{q^YgUG{!#2KQ^)&W=plY$KJvw7DB5*;ou<9!%ddD`ulmHC zSS^~Pzg(E7S@A^RV4gOng0`ISC)MUe`D1h;o<6qV{8|Ru`$}^iT;UT8CsQ%qNWv5a zO=1q6rDh>`e?9Kl&alYKd$`6f#|$2N{a4+qa?^AXp!3okT?|iCjnOuWn9@C%y4~Vp z3g1sWiCfo-DWa2J`C4GbGwyuDT@OtOdMb^xw+bqW3W!jSQ7^gNvxMW4uGJcSwf;#_ z7pXR#XsPjOeYNNax*tG$Ub5hD0esa5Cu8KDeYN>`K)iUwDF?fOG!HlHcZW6{VNqy#~wqh)O=7uiVLue{w;+b`?`KH6nqt7`}6}a0G zg7?mUYO}C5h}!wNOZC|rlN7Dn&Y15ch;JsZ?x%&cMBqqQ3GK8y3hg9WM=V4Tc!VZ;PY%!kt~BG^)jvCvTbt;t7kx z%h_?+x4*Wcghq21RghZ`MQ8q>ilno)5NBnA>e?z%*e zw#y;f9bCNUydgYFP8h1y;Ye2A-50@@gG05b5SsaPkrMx?neQjN57QEQxlwpef)`h= zS%&9IaOcgdTIwa2uWObSad}6nmgTeDd376S2an_G_EqK;;@x~*kyeIlg}A(&E5Toq zv=wP-GT%>2l|L70mEvJxYNb56pjaD+4dm`(ZH(+yqUHPE#~o6ADd2WFuSC0S(BQ$N z$Jf*jr$|j^CVf&jZ)V-7`3sjW89ukEk*;VQ{lmGosB`ov4F9Ok`AV-+Ep4nHnC_Bw zflhkS#boDA+*qazOEYQyMs=4)B zI0LZOOdVdYxaHf?n*H0+7M~Ej=sPyv5)qCY#I7f?J%yu;ZNub|PlsEqnpeA*>@&qu zBo96&BIU~iEP?XTDVCfVxXl()I-a+A(T!S=|2)N###3d;R7;U~k;~etmb4*W>?8@p z)L9y>NVB-Q>Ic^F{k@D4&Pn<_eM%UL`GlgYUw=k=O|#7A-g3b-OMKXK!cl>>f)3GC zQ@`b=X_n#$gpkgEiu;s$s@QEG`Az0G7rmJJj3j=MSk)^b+&gsO_I0528)1o&<#m?9 z@}4?NlKg2mg7!~OwhXmrPq)P0rrl*eY4pdK;_a|uIA-7u?6})w<*h$jrudU2=wUAT zaq`5EmK6Shj67=T&xL*LQA-xb<^HRG0(QQA<4=~UoX?V{ezr{HW%k-%EVpw0p8WDx z%XNuEoNt`)kn4OU(8ql7B(67P&o;|w1jnvzvrG~)IY5Nl&m6bB6VtL?Fvjt|(~Fgs z;d)fnq-l6VK?p0G-MFN#sjg(f{8@8nmtBGP;q^-z8KF9|nBQoCQ~wH8(G4UR)=q2kM6K^OAD{_4v9i zUS{Q?AgXShxnSNxEHq~YgS=gQHPuxvsGU2naq*J+c?%aivky44qfm6b^TpoS#%5Zn zPKwKXNRXbA@)Qgobu>l$w#WK-lg67hEGVv@dHK?XFC>_l5H_>Ed3Jqs-K^$$ zb@f-&&!5?NMVed@s>g|KX>wDj9xr|q^`JVOy$k;sW3e=;^te-OkY;rNLQd~_8q)a z{uHLiw+y=5%nM*wHqTwssOEq9g4y}2O|-X(2IgKTCeV$k8{V{Z@f@Eut_l#YZ&c?6 z1vN{WZ+D`7m^pvzMwQ;Q)W)Z#K&Jta_&S_Ca|Pq+8t;1C zg&onjgw}fvt@q!aFtK@RaAePDJZ0E7Lyr`BPs^A{G?Mg;92%)7i=)rT8IfS-mgnTE zNIgZ2cwTOg)YGH4KW|nLz?$%lfO>WGF}I=qr&r{!k$N}ZVXvCm;Y_wQ=;6L|UNhk+ zCWkfZQG+(_GT~4*AGcBJo913!-;7JX3z{cZl-Im&=J~Vg1y{N`uKbsY&6K;N!0h^2 zSc*&EkS|8*F-21jn0djh29vmEVdKoX^-b#T@D-n$Ii2%j?YAbzL-59T(i*Mz5EH+X z!=usXj34A&{7x=7N~9VKU^AN=p|w#XJsH00ClejRWce~ZCT8C+CLHJ_Q_q~6=FTW? zlZT@9)QCRE&3s>H{&4j8i{mmXMo%36KHg1H6VQUHiRwmLhD-nGTB4$H{?Zy4IHL4p zjq?^RSw?!jx#9OS3b`&tx5mXfOoAXblOANN?iW-v&RfvS!Q{3WJ#xTER6tcgTM$J> zL)^>?Wq5XgK6>UY(xn5u3Y(WqjK#cL?kx*r_4K$;e9SVztf6rhCP72p z*rEzm+iSkEC036TZN73ttez0H+s~x*XD$Osr1JyhzF6JbG4kC&6;FfYGJm)FH%-oBJA55+^r&ReYe zB=_%c7Pqqc`Q{ueZdw52RELjgmX=knA0Rh^)@M{@N%{EFvLORyR=gf36XS92|F=N| zq=`v|vML_Bdv6i_j+A%C>w)6O5-OM=o*qt(#dw#Lm5#42yM8o5N#d#s$rJQ6uhdG_ zx?B?pq5V8gjsa4%j+cuP^yHYalTFqx#~zRall07(aSxgK9t^**l~7*Pq}RMhRNCxp#FNsVgu!rZ zlV_6jNZ*A`^-Jj1nf469iPk5dRm7g`|NBMRGg*%jO|Qs`WIZKj*PBG*?MWiuC6tfq z;Rk!=Lqs+Mf3E~MPqK$UAe67k$;^-BDO79S@~J|4(rx`rj!S`1{`gETO3|amq_5S9#*osj=ucERn&wFikh42m;Kto<<3;thO<8M->DFFK(KVAf}>AE zWkQ-BolqMiREwde39B=2y4R_j?yKVE_%v`^kSMQC!~A>_FQ))U=O>$Goc6KKIkz89 zkzc04mFSZy|4PH?=4Z&Lbgb!9nQ}lnX3DKua%wu7PRN$mrDM9b^p_8$quRs6bHrUBZ)zT%-4P4=P$-C*+mI)I~iV#*c^D1O7p4*@lX6fAKr4!98+$(EdI)5fK zX;o8WLDVD@>oK7gD3rhFDE%^*r~*7utF9qbpeL$)?WKeZ^2GfEJ~_7Eo~XB9AXJDa zYQyV<3iU*d-b1J`r+t6(ZTVX_JtDf`9m0lVO1f0h023nYy+r(oQ>L~I3< zT@}yEPJCx2ubUWEN#Bt7%wh&xvY-}D(GO18i`6$Y)ZtO;Zwe6sZV90b&0Txtz6|(t z-QTCO5fBw+LHnEE@$ub9=qSuuCwd_??6PN^SYNYZrEK5bZ&Kpp@2G%u?ZN|ui9WZ= z*bfLD)3wUzWnl+Rv?+lO1;s%Ia`jufHGb%alp6=(LwtAxx45xk)cjcssF^!Hl-o1) zq#^YmnIu7MA?24gUNLuOBM}Y%*vtqfX9Ye%XU;!9Gjm{y>)*sOfBZ`m_F+pGHejCN zql8_#{Jv+12qN$2}@Qub1WwmgB$L=*cQTVV0p>7S3BeV6SVfzBi zES;JiReF7}2`cZHoH)`nTRoB3n<@3P(?rVEIeM(u>rS98Pfut(=p+xIDot}rF5%Zs zv=5B~Io_j6Q^H()xrH{*i89A>NCXiio;RB0$Q3+_+&TT+r8u&)GMY8l8N2*h{?|lrF@)9I9Je* z#U^Za+YfZeXzi+QFVGohrd#8ztq8V5$WsV-6z2mM6SJ!?I z;k&z;7`h&(S9(O`5BC#3*NxBFq+r#f>bo8>GtceOsmBSQ=PoqwDHA@Iu4X&oalg(v zX4O08PkFGZVb9Cp9(q#npy$neQxYw9Ijn~s5gPphVe{Rk%3e0{Gv6RQF5)?BJM@-Z z4f=sG?-IVijrV`wgwN$>`9Z?>a?|bkSRSVGkAFt^-fsN;|2E-s%g;GP_&#pBM-R#T zd_5v1?Q6pKb>nBc;j;NNp<7OUC+Fnr@delYKy>{sq@mw-W|`)~yqI+DkD9dS>zPU2 zj+*7dXqY=MEtx9k<)fNB3oeomIjLMa+$1FJzUVhqUM}pZN5_A4+^p<;vTy&;WK&N) zUR&^|CRg>;V*z$|E-Q!hLL_MG5ILup9zkx+Z#_2W+NDHZ2JtPm#4}^l*DdAAPl#H1_L}_RJx=SAdDVaj2KOsFH#+UidV|U6b|5&<<^q02Hk7K}h+@ zp_l5`u#gKEi08rb$;omWJT(aK)Zv{nS)_hP`H*{&ZmAAh#d~BPGkH=y>$nq>tne%Hi|$ zGQLHwnx`+dkC?9;!P1zo7uiQ%uiwmN_;URwzuVk}ZtVgQ?a`o-{E7phIRDW})9+5Nd&u%Q*<;Xkq1p8GRbc^bBsQl_a-K*s-suJ>M@RU^t-#!=d&bf$p&qcg< zE@JPwi1*J$>~kXQ4fpH6@WlNDs^$?5bEZCUrw-Z|Zq)rn!G~_lNAA?e?$jsl6yj#8 zPlBy`5JLUeCVi78CvVi_>@8dMsloEvO*pRnW2c^M;fL&zFX)qWzr*grN9@{P-QcUzjR$%uRuK z8j}SF^~v@x59&>tTze3cWBDigVn2Z>z9|FE?)XH{*X5{B^yqtkG4O%nFZEyiyxjTT z_K9EVAzDwwu$(1)-6=$?oH&1XDu7ZLW8Zs^8CI&ySN`LOKHCqmD<^G`J*QPaDdL0O zm=JdgVJubJ&sEwYH=NLeO}AJq$-v0nznaP;s0*uq z_e*n=r`xOkz#kq>?B>Q~xKo+#RF*xUU4K`zX1g&t?o@aA%U}8`zg#yW&wk@6{Ziep zhZ~ds+>b^)_v`6K6xc(A@g$e6f9auepJt4a%TDRxamnV2>*uEH?@kS{kG2@ETJSMo z*ANYIrv|%IL)@uCO38eSk!-)j$JnV!ZyzJb9u;6zT4bD$5p8b?G3JWyBisc>x>KXv zsnPD#7^LL%5F^o0)3?e#Al!JJ%j03F$r@q2C1h~8k!!ApiSAO9Xq<=HFO4>yGc1=< z6`w>Iy>!gHFmol=CmCOO@#*##E7R)n?Mr*C1*_FAp$;e0v{4^13rk{-zX46@O@aovT%SAMIVhy z>W_*R4gf{8ms~Xfwa0tQmj;0HY=r!ceg{X&)PeY&94RNz?}A8q2mLOIl&{h6+DQ33 z{cenu8H4cqiby$mkP&_9Es;1iMTm|5s%}*|j)ZE;aLvK}_jLQkP&VR4<#iQRrQ^%1 zOv>>!it^i7%2j`o7m<=KS%Z?~`-6;FaU@y(Gze0;ra<}+HsZvp-ZGnh&lo624mRS& z?Stg(!A6SsaiqLsu#q4fqvYQQ8_`DUSgKkswBeHbSA&fZ5l}0S4K~t5X041Ig5R?* zl|zQ0;+2=mX+w+*F>so^Wr&etjHhE@Cda+5g~=sDQ1F*}`4KWi+zi<<#K;z7X3F$J zqnoInDJu$%)Rajxseoc0(TBQAMwLx)10;?mGv(SsG%&wOzEp^MZflZ<2%fe`dJhG> zY?16f6pY-qSXK-*l7#I_xq#qpSIX5xjpWp%>#2TR%rCElFNf%0Y1zcCqPkvw2tv_& zxooEjs+P;>VMeN0vRoG8cj~VV~UJetl&{h>0-Z`r_672ko$|LX_cSfoze)}6?ng0%vAGAZP z;P3EfSgTxFWTZwO_U*}z@p`rc|JAGicC+2=xZG7_rxhJ3r!$V@uOQus0CuH}ogR$kA?@f9qY7qM!wnSa362)nh+xR%>(!;N7)yp@F@ ztC=6+^;!sTRn^MRMi{f4Iai^$M^4#DV_>#f<|>}-k%RX%q6m%tQ+&-n2CtMp&g90C zMm}F8-ydnD#w81m{~bXF=R4RE0~})OH(IP@HHKXqWvt@THrnVWUmI(^$mo z(X2hB(&#M!>?UBuSR+o8jWx#T>080qI9`k{r{c?Fi+GV%#8$9H_*P&Mc%W2IV2apQ z-(vr2F_HQmRIykSfAD(E8;97yer%Eq1Vzt-tGR1$g zkuH~BYRo?mZPQNj0{bJA4cv}>YPykR_o*`u3qs1adSj#IcaFi?G2Muef1hDAc<+K7 z-{j$3md!M};d`-7GmTrsa9od@X(V_Z;cGC17Rj^*Bg1k)9AL7l!HDq-#W!ACF`-uQ z9dcoV5gTCR^%%>Qe396#70D+Wj3RA|D6+RT7>9V+O7?*gSg6>6REV}lw8~#+8JoP5 zjYVROIH1eBXB!P;7L(K=%TRs*@+O&mfC-u^T6r^mijlLJmwFM!KY1})dq&}!afP&i zA4J(jmLi6ah(WHKr7_1SibBFUi1o-qCWyculQna&V7agTnmNW-!e=>3>_B$DY`EN* z8o0!Ft@uDY#&?RUKd@+Hr{R0DB$84_hu&@nSIBOWVSFVibzd zEdBen{J6;&qbn|Dw|T~Zp??@3{BJO~^`gwJ^Zp+(H$vVq-w2hP<{SSm#Hi>bdXn!F z%#mZP9^)!7135&MtcJzRTZFu1XI=K(Sjom|-^kj< zMo)2o%Uc#3-Mp&#Og>Ik5G@ZZHsXSMY0W-GtOjzV*+Mlx%{SY(FENIMr&n7Jpibyo zb_9b+Q~ZDuLJ?~fAsE;Yh~t<&<~C!9pTH`cbdPbH{pdZ$XWVa>UbJvAuja@3ahZQV zob<2P8O>g8d^5|(M4u*&3d`SETbSG-jfnF6$jxkQ*k%@t?Ctm&YiwrQ*g~ZKj{hFV zPa)Vif}b7u4{VAZte%*G{)*P`@cLZe%ASB8YZLYF%bfK_rq6zqeVpym(bRea9=N=E zz0rg3mrtxWY6A9an^}_B%vR&~a_PIlfG;fj;#Z$GV27dTYRhJ}5KK(R4{7W@##WZE z10UF#o{sdkf`?JVx(%p%q1=NSW-LUV(@{&X1^UV7AXwbW#sU|N8uLX@#90msqi4&w*AYh^doCKOSO-{Ja$SI^Opz`Sl=}ke;K;mvx3Pb}4YLPDdCu1FeF9Uo% z(zoG0iomCl7Xsde^!9(jLj!yT;IEN>^9@|^1bi*vvq&G`!&p4vm4I{JWGor+fo_0r z1w0Yykq8g;0DKqPXNv&zLwKM+5chy!I?~+`9Vh~PAK)satq2Z`2K*44=0APJxITX#KVC94Y&j8jywLIXcDHqe4G1|0bdXiqUV0q{M5&m!I9G&%zqcN*Aqq)V_rd>gP0!@30N za8%@DK>j%WWn}<{7UM$+xLb*HQFb}f-Ag%}5BO8SQ;~jeIA=EkJ`DH_(oNX$Z2q~HDsVdfSfihb^!4f5T^nB9w6B3fIkMDA1K&_Fu}e6+yQtM(yv+t3-yP1 zA?7&|f?1;kO9AW)_;sXTND!W$$o?yKJ4+Z=p(kmAVHUsb|z}|}lyMD1? zivUjmJYb1n&#VGdfS&_A;ZDJ}v}_WrZxF^0GxY${kJ|0{Q&rW zz#~3KT|Q9Efgy}-0^$jzzsLF-26!vrdyfdVt5vXiz>ff)`ZX%}7GeYZ1mM!|1Y7vM zVCw-t1vm(6G59yZwgKJ&_$j1cIWCwMiXH=={JUTq@Y4&WjRSlM;4x7e z+Z3a*8GvU19u|u*5G>2pfENR9NBX5SFa(%%M}4}+dgp;jz%KwkfOIx2&46%p5b&o+ zKRHliMSy<-d}+%djs3eqV{3sZ#9F?iQe*vLNy4nqQh;rUa8en{uf!(kiCv-Py>`K6)Sjx{JePETwwgJuo z+;Rhsh}W;t*vJ1*Q)dER)18L#H*(HB=iE>wCH5^s1to~sN;H}hl}Lz^*!Qia_HEqS zNkU5prM597l~!z3ttvCU18 z|GnoNjFuP)RGGRfgLMz?0-r>$SRbs4VWed^ZbPv8r0WIfwjz3s`(1Sh*PG*tR=f3f9e=!77Gh z;bpgiwKK#}`-;*ScvvaUvRKJb%Sz+{I1ioF($He~b9i`LLx;J_Rc2+XA3P%7(1jE{ zIFwC2qnn{o19`kEl=xEQ|MG(jWxs4_Eyh^xko1b7VdD(lh8M%3;|&@7kXDQTes6=f zqbJWa)CWEVNB9gy&NK8j`~c2JU&}Of4zA9&zBJ3w%w>iuR-@3tQEwV5TxF;yJkp2p z&Kg7Mf8|AB%z?GZ(1<)k7vT@#^4knuW|px{b?FSebdRAepBS13KZLvOHxzNm(1&n& za>p_Byki^;3May~P8yni)=-ZcG$nA2d_x;=8CnSYKEp^VHnicMp?Wo?8}N2NT~B09*_e#6u*I1CLXEgmclS!%bzw z^Wns1rb1&(1&8zbFT&UdOpV11XZ6BW+nd_Z$y87HqPswXsjig4^>86V;9J(rc4+;A`l-@un8Q8F1nRQ`aY&I$GODcZ>1YNv8Tv zGgZtT_Q3x^H<@j!T!eH1zJwl=Z7L0(LUL)6W9s$ordrqG3kbK`VX7N-HUmBcKSFyx zGqnTea6sjvzdCBFc3lz^Jnk3=%$#Hm`7l~w><6CvnzaCTgzuoYQ-|Mx-DK4FjH&NA zBkVf3H@xVasZj-{-iHUnWzM4uO&x?6!s*|cT71>iU3e`VbInw2k*TMimNvu1X!Cnh zzHp4K7|PF3%+9<7V;sBAsf7TmdxN39!pG#k!^N1`7# z^5_t}7hcoYqXsb^N;>U1d<@;TwMTX&SrLv!pKtB)sWQfCjB?LoqDzKb zDuge<9ng*ISSp5Zz@zI~3W~H;If{=DZh($t)P?WDN$6D#EY*j(a;Hw9kNFx|iopmb zyWK%Ajk1&on{ba9ORu)DGz~5ZKSY;nWhny=g*Tz^wYIbxt^wQ09NwM6J8VLO0-r?J z?{4XNxG}sNU6g968{7h(*vpcycbcUc7_sgh23X1*Wa%R~0S+5%DQbwNui$QQ&qk#SS|2rIP`T(mzHvA%4V!`xYROB4H&iIZ{ep`S*pI?QWw}m{!c+K-(+bn zTm?Rk9{RqeE$~=)6*}sOrSNFJ8ltMD7>D!Xj0g73kj-?z1s?)7813MKbzbjCrhWB|v(-yF8p7(NFt zL#O|2YXe-0nm!Y~h^uzqffL|u=t?1uI=5pphLh00ggNR5`zB#*tmxKBn;ktsqjsE2;(15!z!l;5;vGdNI{E^R zg?pm6b$8@#Px}V9W)|=D?@n_2>or9JT1cP6xc zqzU;PJ?o#2K82&;{$KHekFh-56fSq17kt){$vL9b7bA!3Begv5s2AKH?u|Zr+0jrq z6TXeUag`^5SHYW$9o=OV!fW8UKRD`t+tGD+GkgPG^Cw65;P>Ez=&Ugx!vI=n!?06#)+;Lk@p;mvRnx<_-bPak7kz$n|ws~w%ZYTS{`7eUX4 zuG`hC6>v1%7oF3CCxlbr0(A6fuS#^{-N7T#>Epc0hA+S~(Ua$URRDLWLzj(yW)c7O zN?^wZPDTGYi}{z?7-<-vX7P@ed$k^(4(Gk)RdTLZ58zYq1a#CMucmgU)Y4Yab4n}kmdphuW^q$xdwSr@4yNb{!<3p4O zzXbn+_H_@@8F&Z05$%ib6QZ77*=#T-qWcXC(GoZ$lH@QpM1#k3yiGFSYIw+-?0_(9 zbvcN{1kd~?NYj|4O7v1Y;K%}|;h3;k0(~^thG_^7vF1&L!huX6zv$`5H81RzghVs}^>0EtwjwE~p_I!6?r<6X z7UgpX+!gM8h|5?}9iOEdrop>T5@YO#)8XN#Yz<``f_uZ2sGbp2%Omgr_%ym?1qu$; za6Wt(-G<_pNpZ_;NdCVKWKq4!QLQ#|hYsSc~&v}^)*MkNxdJ#Pw~YYVY!!F^lEE7nHkRE-+BGYdlmKqlh1Hy zm{)_Fd({kX4nGy+)!#{Ml{>OF;VCPKlemf!m~%?S$Oei@EZ=mdKEt(Zhv;SUKnW7X z0(c909C;wWE0qr3h%PZFL=nk*^7ncU45%__MDGC{a6WVZ2aNU}I%dj14q+cVZdmUL z94NadrwZqG^8G2AEsIjZN_c$pxMpH!&u>2zr9QT4DqJ%<(H|HT7;w$ezXv7-23#|r zdE^w#%)o$aW~Z{9yODK)k?d4IHS^Q`fx^ImYtHEH58Mq5 zxaJ=AWPR?l8$tgMd0aPcfPWG9PlA8kJg&KAus_f|FyNYh8}1Lde|-Dn=K0MW;SanN z7)ZhNjBx{QpA#5y-JDnbi%ba&xaJ4r{DCEb0oT0pdtg&wz%|=X@GtRUV8Au!Px1$R zM*<_RTRhnxIU5*o&9|oe14V%W*Zh2jKky(h;F{H5^9M?n_+ypu6>`m@+5SK+=9wSg zJg&QppOV~)_#bLHfydA9ab0Jj zKav-?h-)5L(>`UCfW3-t3Z<#FA&m-!=1 sq(8oSelwT*15A29zIjqG2dwZ18U_Yjv)oF5Aa>=paI2g#d7Vf917}4Td;kCd From b9a1aa494e31a46424f2e4a414a12cd63c9fbcd2 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 17:45:27 +0100 Subject: [PATCH 59/60] =?UTF-8?q?Changeset:=20537=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2017:28:06:=20-=20Actualizaci=C3=B3n=20del=20archivo=20de=20?= =?UTF-8?q?log=20de=20versiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index 0840076..4976511 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -3,7 +3,7 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo .VersionNumber = 'v1.19.37' - .VersionDate = Date(2014,11,22) + .VersionDate = Date(2014,11,30) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,12 +17,19 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- -2014/11/22 v1.19.37 -- Added Class per file support, configurable with UseClassPerFile:1 (Ryan Harris/Lutz Scheffler) -- Code Optimizations -- Enhancement: foxbin2prg.cfg configuration options can now have "&&" comments at the right of the values (edyshor) +2014/11/30 v1.19.37 +- Feature: Added Class per file support, configurable with UseClassPerFile:1 (Ryan Harris/Lutz Scheffler) +- Feature: foxbin2prg.cfg configuration options can now have "&&" comments at the right of the values (edyshor) +- Feature: Added support for the new "ClearDBFLastUpdate" setting in FoxBin2Prg.cfg, activated by default to minimize DB2 differences (edyshor) +- Feature: Enhanced progressbar indication, with more detailed information +- Feature: vcx/scx broken properties autofix because an erroneous manual user edition on the vcx/scx +- Feature: vcx/scx autofix por Hidden and Protected duplicated properties (some type of corruption or bad manual user edit) +- Feature: Added a validation for FRX to notify the user if it is not a VFP 9 REPORT +- Feature: Batch convertions can now be interrupted with the Esc key - Bug Fix dbf: "Error 1903, String is too long to fit" when converting long DBF files with "DBF_Conversion_Support:4" to text (edyshor) -- Added support for the new "ClearDBFLastUpdate" setting in FoxBin2Prg.cfg, activated by default to minimize DB2 differences (edyshor) +- Bug Fix vcx/scx: Sometimes some properties get the description of a similarly named property +- Bug Fix vcx/scx: Hidden and Protected properties are not ordered alphabetically +- Various Code Optimizations for enhancing processing performance 2014/10/08 v1.19.36 - Bug fix mnx: When generating mn2 text view, menu all pad IDs are generated as _000000000 (bug introduced in v1.19.36) From cffb65c31030d1fe008b66a59fcfeaf961011941 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 30 Nov 2014 21:03:36 +0100 Subject: [PATCH 60/60] =?UTF-8?q?Changeset:=20539=20fdbozzo=20-=2030/11/20?= =?UTF-8?q?14=2018:55:29:=20-=20Agregado=20bot=C3=B3n=20Cancel=20en=20el?= =?UTF-8?q?=20form=20de=20progreso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Convert_VFP9_BIN_2_PRG.vbs | 3 ++ Convert_VFP9_PRG_2_BIN.vbs | 3 ++ VFP9_FoxBin2Prg.vbs | 12 +++++++- foxbin2prg.exe | Bin 467912 -> 468467 bytes foxbin2prg.prg | 60 +++++++++++++++++++++++++++++-------- 5 files changed, 64 insertions(+), 14 deletions(-) diff --git a/Convert_VFP9_BIN_2_PRG.vbs b/Convert_VFP9_BIN_2_PRG.vbs index ecd0fe8..8a6bebf 100644 --- a/Convert_VFP9_BIN_2_PRG.vbs +++ b/Convert_VFP9_BIN_2_PRG.vbs @@ -60,6 +60,7 @@ Else oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress" ) For i = 0 To WScript.Arguments.Count-1 scanDirs( WScript.Arguments(i) ) @@ -83,6 +84,8 @@ Else cFlagNoTimestamps = "'1'" End If + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress + ' (Press Esc to Cancel)'" ) + For i = 1 To nFile_Count oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" ) cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'" diff --git a/Convert_VFP9_PRG_2_BIN.vbs b/Convert_VFP9_PRG_2_BIN.vbs index 1b7d8bd..1790852 100644 --- a/Convert_VFP9_PRG_2_BIN.vbs +++ b/Convert_VFP9_PRG_2_BIN.vbs @@ -60,6 +60,7 @@ Else oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress" ) For i = 0 To WScript.Arguments.Count-1 scanDirs( WScript.Arguments(i) ) @@ -89,6 +90,8 @@ Else cFlagNoTimestamps = "'1'" End If + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress + ' (Press Esc to Cancel)'" ) + For i = 1 To nFile_Count oVFP9.DoCmd( "oFoxBin2Prg.AvanceDelProceso(oFoxBin2Prg.c_loc_processing_file + ' " & aFiles(i) & "...', " & i & ", " & nFile_Count & ", 0)" ) cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( aFiles(i) ) & "'" diff --git a/VFP9_FoxBin2Prg.vbs b/VFP9_FoxBin2Prg.vbs index 73899ab..5ef8430 100644 --- a/VFP9_FoxBin2Prg.vbs +++ b/VFP9_FoxBin2Prg.vbs @@ -62,6 +62,7 @@ Else oVFP9.DoCmd( "PUBLIC oFoxBin2prg" ) oVFP9.DoCmd( "oFoxBin2prg = CREATEOBJECT('c_foxbin2prg')" ) oVFP9.DoCmd( "oFoxBin2prg.cargar_frm_avance()" ) + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress" ) cFlagGenerateLog = "'0'" cFlagDontShowErrMsg = "'0'" @@ -83,6 +84,8 @@ Else cFlagRecompile = "'" & FileSystemObject.GetParentFolderName( WScript.Arguments(0) ) & "'" + oVFP9.DoCmd( "oFoxBin2prg.o_frm_avance.Caption = '" & FileSystemObject.GetBaseName( WScript.ScriptName ) & " - ' + oFoxBin2Prg.c_loc_process_progress + ' (Press Esc to Cancel)'" ) + If nDebug = 0 Or nDebug = 2 Then cCMD = "oFoxBin2prg.ejecutar( '" & WScript.Arguments(0) & "' )" Else @@ -98,7 +101,14 @@ Else End If If GetBit(nDebug, 4) Then - If oVFP9.Eval("oFoxBin2prg.l_Error") Then + 'If oVFP9.Eval("oFoxBin2prg.l_Error") Then + If nExitCode = 1799 Then + MsgBox "Conversion Cancelled by User!", 48, WScript.ScriptName + cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") + oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") + WSHShell.run cErrFile + + ElseIf nExitCode > 0 Then MsgBox "End of Process! (with errors)", 48, WScript.ScriptName cErrFile = oVFP9.Eval("FORCEPATH('FoxBin2Prg.LOG',GETENV('TEMP') )") oVFP9.DoCmd("STRTOFILE( oFoxBin2prg.c_ErrorLog, '" & cErrFile & "' )") diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 5e7e9b5fbccae202217612ccaa1ba4d656d401fe..bc0aabe3f03f11bd813ddb580aa320ab29c5b3fd 100644 GIT binary patch delta 17250 zcmZvj2YeJo8^+(;yV)!0A-xv@gwPUdfIvC~(oCU449NkJG?LH+JwZg83Pu=;fJm1j zML3bFf}$W`0Y0P`5s|8BsNs9&_HvwPbbtH&pLb??+gP)yrm;GS!E|hkcJxolJKe zDCvRp^l8m~mC8+z1VgCaKx-a9&}g+!aG;>to27vPTC(VR9qoL;-X-|EvF#C+(A9dC zb#ii`^n#>>%%qg`^pxbSnPpermX4^n+bUI~+8&Rao4!=lyNcS>sc4x22N_TG?%+%J zv{a`f;f$hs7s|65u8#|q<7vn&>QL`QK0P0>8T5edRn@zZH1c>a|-RyL;cHdS?Xc9E2;uwUA@&na6$s{Tk|LEhJnV1%)`FklJ;R z{W9`YN^<9aWOfmxvR)fowIoq3)KfWQYl$HaAQqDX+cs&`LL4VDPsytM;F!@i~DMouvbGkwMRixVbKUh{&E3R%IkNy&A|LL|f`**ZDW$k0RgST!qO7u{)M!mv zrEjP}X+dU1UP+m;x~8zKvf3Kf8I-UOvgTJClS&J#tFw(&sm}^n#xFaw7OFVz>cYZ9 zuQ)VR80S)IEUd~eFBvu3n3ilUZ!*twVU48#C;l?_s-1i(aaAW?e@qD2xYvSnVp(GEa+$1HilV3wXHHf>oVfTc05W6LOu-J9y>)n_S4{9sx zbk?)FAgrc_$vzF`)PBCqi(hbMTB)%we=H7lfcvU%sH~`}F%~42l*eRO4d2-NKck4mAjQ@UC8{IiOU9znHHB3dvJ^*8 zXv<@aRW&75`$s62yQLLp=VbNBNysSZnUav4lCx`ypAvKs!A#@0nu5fH-f7b;CJ**T zH7D`)jaZ~-rx{8@1LYXY3(Jh64ZgvzH)27in{$+qj;iq#rI(Z&FTJZcPBgZvq{f(1 zRaH@yUNO8)Z9_tf4QH;^aaIz-DM&3HT|GkoUPA#X3-Fut$& z|E@-x4|u#MYa*3>z(;tp5Ra!HDk<%5(JB7ECu=3WyMiC~WX+`7mHcm{l+2DgW? zM)WMXqGuVgS#eug8Uv5^WsUgJq0C!ay^Z^M;}{D*<=wqms8qCr5A{Y}XcwR5&B9ds z_{ZL?iErd?CBGAu;yxGR?v#!$DK0GD&u<}Y*s)&;dl0`<%sdPi4=C(IJl@EBx_Eu9 zusfAkRFxH$mb_e8)u*tuqN-m;`r>btm?Py>jI~vG{;MO8)&11J#>SIrl972A(^`grE&=Zld?By+YVvvkg-B|~TZ&CmO?a4*w+ zC2p|BQ*pu(54evX3r_WUq{PtUS`Lw86c7DgtJ{zx!&p9gu}ZXDH93&6tg>dj7(c3t z<1`j?UKsQAH!7OYY%QaMIQ^ImV_C&38ot4g`NZCql@icvi3AzOnh_PnN|LEMCFD*O zL&YiD$2L3idQ?@4bK$}MXmib7c{hI+5irS3$>WNiZWx+CaY1%MhUI`I?%d?he58f$ ze1Sg;@)_AkN$E%p1FA^sKyMEfVLXdioYWEQd@pLka_d6YNii;JzmM}NrmM~14}Hez#v%AGc7qe zCG&CuUyQW+w9KUR{N$8ri99lp1@PcNrc>SF%>r43v?7&fiM>xRvG?Y01u|!;UAo8@ zBt6U&$MVxAr6lL)qUz)T9|f~Oxu>zPc+^6nL#5os{JUTluG+)z2IDlNS8$&YWLdkKcMf6A{PgQA z#o8aKa-*=c;z-)s%@(bkV^=dbhu{u0{)|5fVcv$y(!!cyXy}o<1qXZnu-B5OoIbj);niwzgM<~{F z#TAQbpKj$Zym=UlP}TA5FtliwYkX7~^OeTl;IqO|clWz|a~Nx`y35aq-A=9zXCXda z9*J@s$Pt4^v9TOOt9YndKjGcOak;0ec%N|ACTgoBSyCA+U6AtpoYg3vBPkq{P*qhp z{ubXH&LX8KUw#I~OS6M`eK_vVz)&94nE3{6Z=z&!S9+|1PocZA&GOb(AfzHtE%^_}RwHU+UDFKWxkbq_%CjPXr5A)$>jf zC}n1QJ~#qL4(-5Si9j=*oXp>kz}30Tzd$(P&WlQ+uGWfVjjpL2T_Z;O{6em3!aPmo zMM?@c$|@R%aCJ$srH@Q5shU-+gd8caYIJ!KI?t?9V@zwK;@Y+BsTRx8{w_TpFH$+# zTh;Ff%h}#4TQxv09_SVKT!fGTY1{m32y})lbVP3w! zT@bDZnqO{S$THU{9$jTT@Qbj0&|s~0 zC3@BIWmgr~pcHKBV5k17csh$G=4(;cgyZ{sktg^I&6uapk>5nr&w80Yxh^OG=gemx zWS)T!t?VW)S9W1lwXry@d{~7jHuZPDsTm823%H?VaiK~PPd1JzDKd&gs+&r{Rm?^( z>OYIr+)*MJZ41A~V_ketVLgqmEJnLZPD~nnpLdO9zCNl4A{6-CiAO)+Ws#V^UgfhQ zS<^((Et-Uk76E?r7QotxGn31-@;ajhdjF#^Y&i8Mc6HE_SJ0`wwzE-+HNKI{0VK} zC;V2nOwINy{Cqm+uZ7>*md@#0{(CFTc8+kD)-2TZ@54%1X*!*c@c7ou%l)S#!fj*A zL_aEi&>7)J+x&&+`D~=`eEg#DV{HD{R}_A}GF`3Y$BtU*%{ zA!TI9HCAD@z|6O`Va=sN6~EX9D<{_c>x!qe#5XO}4NoM>O-@WLGu9Mhppy!B zaD6)#5H;#8k-8gZK8TC4BfD_8WenXkTM0BgvK~_pAV9QQD2s9KHH8R^llkKd02mTeSE5sbrmI~*jO4;sjQ=Pej=8n>-2~}k|-sYt9G+! zekYx!^0VJCrw)w}^g!?`7QifjPwIu``A^FMmKUs+mIdcJZ(f?g!khUhjtKfH(h1TJ z5--C~>V@wweEvlS>!2#+4>DMYswMZ!WFhHT8yE4W&x&XUX>}u?$>z_bT1hL85e130 z{wG+T&Z}#|CuFh!kCqk>#}x@$DZsa9vZkgOz!l|q8byjEZ6Pi76ws~#M1k!Es0qud z$^kkkjD=K%J1U&r%gUV;##*Wpk5w3}s1}Z@>#P{bR->+ql^Y7|sxa12`SdK7(OObY zA_=zTEJY2IEntnLhz#Nyi%6>Zeikc|R6Y2h95&m>i;@b`vyuuhy%Fo#V&4PbYI4mt za+s`fN|Hq$5~Zoj`O`iuzI8ebS(NBRsTJd_iQrWofR|SR58oTvCk}&hc?!Snakf*umwm zy~aFzUZ8oc>RjoCIyd^h&RtYg3V5QeYsB9kh|Z_w0H$>iE%v_T0@s;$AHX~tdH#3u zK$QnyKad5q6OA|NzWOP?x8VQlLqtxc#?>P#3zWsjC-sBHk-brr50321pA2L{X^kw0 zazqA8Ra81C@y+6adXUsmik?b`mKNj{Vm%0_Eei4bM}6Xv(60LJ?5Zy+fq5S)F|@GS zhz2uWWcUB?>m@n5II&kSTf`hb7b-t=7Ur568Dd&9HZ`FVL+nYNEfTU?tvSvo}XhQTb~g*%op zlLHFJO1k(2xP;FuW1D5m@rIg{%9+8{-1k+sTcudDx$A3ex&xNLMPg)oS23`#Z8hE# zhL<^W5{p*z=~GyNl5weGKb*owsrcxrtfgYFRP0ZtGEbG~DqA6|ZEB5@;NF{Tl;pYA zW`AT;>nsWQ>=|q~?>m#ZDCKT651q;Uoy~79U@6wBA5#*ZTgbHh?}e;V=Y*jfXYfDs z;6?17iVs}Oe3i^+%$19oqr|5!W#KNCG#AC;EFawFEy2m{U&@xMJulhnaM`A=n8z(= z#jgD7)`pt=YQDRbMQBvl%-)}}{>#p%uUU!FS2l@!C}$Ta@vNucV$nJ+`xBSWWyc2ZFzjm zQJ2`?QlPKR!D^zjv!+lUWbha5?%x;prUggl$=EU)XYB{G(H=EI2C{&&B25D)W@wQNcO(mLp zY2-Z`?yi>;l?5rSS5j2QB1Li&J}VXl_iV~{#vk z^CMkkf2k&c|K0@`#5spMc9jF9;5^=3?EmV|dv=urrNDuFcvm@0nmB^b>?#LIb4vKS zuClMZy+RbtD{Ivr{9ISrP5Pjk-|Z?lmUdQi?>Ouqj^}Z4DA@C5J|s?VDt-3~e=|-F zldrvE$@s#T>PEaK4jEsY#E&B&eLRUjh?AR3=O*)rZgLapm&rV%n;af?W3tF#sXW%4 z3i_m_^tFMw9NO3UyWMaA)hxcV8_Efo#m@`AJDcmegB|Da7Tr;ifLfl>T@I0&a9$xe zf%Dnj<s64N_T073S<9!047=9xwedJ|?+yIhc$}f%CjN)mvn|{&LH3uOw~2!09%CLn zD?!%z1n(AXxqV5gJ+RNu&CAM|e1KOZ$Q@K6d{u&+>z6=@cn6MFO{U2zcWD`hbCr}p zld(5z6J>+JbCVp6@DGxt3RT^OE&ls~`=!hI>UMO|T%Il$^ir#&KX{u(=#DSXlgDV| zRm&(uwTutp^3v9yYc^A%>U&cD+f1WWEh2o`OzqDsk}c9+XAjwOa#b&*k7yOP_U0z@ zb>|z9jkqoC9tPor4Vvu#^X$0=)to7DlNL z_$c%ud>FkA9t1uFz3Kqbeeh85|Dbn#g)f3?B7Cbi(KWz6d?_`+C`W=npnp6_)CgPy z*5OO(AJ_uGFN0(7jWq5MQ3Uuka1C_vVWL*xsbCI0;X9&^;920U(5sFR#e?ysp3Xxb zKT4Dao{!^`<1wPg*m7VjL4t_yiGIg65WE8H@dMG%*owho;-UVL=o@ThV0?C_KcGMT zi3qD;v>kjAdi8Of8h97@81%doL|Dk8FTi`D-@w=0IpBjhK5Ycl{13MP1}aAzp;wJybx{9WQe+S1xKg7WG0T^rL6osK{VYZ64gCBzrL3hqo(IKz~l`Md6 zKV3x^z=yyCq1W%iVx11xe;W>Z8n9=dibm*(J_lcgj@pki0RIRsf{y%JMRUPt!Dpbi z{-mOhz`=O>ru@JBwTO{~x@K}vR(OQY#0Ivlff{xQk zv>Ln-d>eY1heVse=fOvypI~!zMB(6#o)WDKkjNeU6r3L@(V`%U(!mb64WC0l43$h& z0K*MN*D#6NHkN1@xC44eyAx0a};y+mih z72tpl5`ErTA{Qr|Ah@&(e#g>PqW0ig@J8r;aVCipU@U-9&`qKb;w8!eF99Efu1S-q z2>dO0FZA?2I4kf)@aNDQ`b%^Td=q>by7y325-e%aP@#JjOVq|0k1MziI@2gocd!e1 z8gyIJIEj*B^nvjsbf@tW?Ev=&{|0TIfU^J_!9ynE7k{rxbOKxs-U?kXMWV~#DPYYT z5*>aMm)r%n5S%kjqJuLe3I)Fpeto7ykC#i-4g3(iY=uOo8`~wi3L{%btH@A53LGXR((HIC`0{;jO$FsT( zU%e)S&w%^hlIRM)bQ31It$ML-0!I%h*nU@v~N%=73Im ziG!NX!NBZ{;vLoW0!E%IU_bCZ==R=f3U5Rd2|fkgD^yLX;B4@1=rK*yG#xw)9D*-X z$@moY30VBx@dmUrzC3*go&??lorRI=I`|#%JriJM8?0MUEt_M5yQqwSOe}Pr# z8$5ce=~})Tk1A0#*fg(?nl6;6Dbo`j1B`cGQd8G)YB~nq1-=12zgA71yf8-KSxDx^ z^#2Ris%hf}HPym+4GCV{sHV8BYT5#R4}1-J{Z8C7@D_0YU23}hrJD3U7>2>`?^n~^ z18V9F{sH{qSE%q2TxRfNaF3&E8gyPw3&8&98yqg+HpOZvq@RZJ{fT_>?8jml zbiqP;ZUFjz@F&pCsx{SovRi#60V2$L0X38{J9fn@TG<-VVndXfNpg}Lmz=1(KnoiUUNc2x)2Pt;65ic zRE}XV6`Tq7Ij5oPmozj5{1W)R%Npv1!F@aUL-4P6H58ArJuDQB7W@nJa7RXYp}7D4 z=v+LU7#Teo{e=YGz+-$F9SvdBBMkQ&TocOZNn=Knz-8c%A{f2iiqRVIY;ezLMtwRl zdJJ9%eha!?0=96X@4!XSZzVGt13m{X%V!kRkJ0gP-2aO(N&zkfjIJQTeekEyZ;rt4 z@*Cq3LuV9K!f4|tMgzbZ;6YW$T+L`1I3GNthSAdrjJAQtg12G}j-Acu4p?+9QG5VOJ^7rHYI9_&gHGMj81>#z0GJ(9V3%} zGjtj-itaP2f5>PEcrJMTBSvlN8C8Q z5&Sv$DfEX1nRbDH0jFWmpWrOhP4Gi-go{kATxAnEM`E}{Z*3#4_XJyLd*qp>~+9@^*i>m!(nh4f`yF(uxDARXfAMmI_ zGO3DWx&@8^uYhhe+$58G6j5s!p2KC@j4c8j1HL{&rt6p~#DXt@gXhZBOJNhWbQ`=3ybk)SSG4pLyat^As+K-6Y00H6X4T-Y-_zm;eOmemybC-B z`a0LrXW#?in)zB2ty-X^gD}2>(QdJp{Fi9yF8H`euo9PSwU%17Lr(}k0exo;Dh0j< z_Wn#u1F`J~{|>$b-EF6q4uNlhk3t{WrKKOh_rb$lxhtOIrE@ zya?=eSxb4>wDbVH8T<}(#Coa^hum` z96BKkxox4{&gm!>+!cKI63+Izj@Ez+z{8;ZFx|Zjei@tveHznU=WaL{IO@KRMm@!S z2X6+y2c0JCsS^A@@LZjq99{LaA8dLAqcvcPhn}9oaKo6r1A48ep2E9hMgxxX(bKSC zEM9`+!PB8nMCj>t@Ca~x8$C6N){`L~9TWHkXuqy{@&tbfj)U&mTTjEm=fUOBr!w`l zFCO>*8Vu(wJ?$Q-r=O6(0ds)D!FpO=tS4;(x?*rwqn>V#L?Ph*;6F#<3*vY^Z2?aN zzXQEvvYu{%7lCg<$4%E$U?SQCc;pN{-J7GQ?%?BKZ%nnz=j+LoXu>2B#=}MU;J;i? zCy^j947ULKtJQjPNrDE~L;GU>-45IyoC#fum;YFBckuO(^|X1Do@&6!;4{#NF+YD5 zTmilf{W9j~2f${q#}Pd(KCY)sQ!-{GF!ljH`&m!#fa}4NFY9UAbv@k&2Z!TPgg$;( zPi;~#R)8P}H_N zjSOTegK-eXPk_$?4D>R%4xERji>o09`Vss9tPeHNgk}c10B(#~&HK>2xq(7@;1+>% zVhk8Z3^Wkj9vt1)Ku+xpG!)zo%%P98H&6vQ1zdrpkl2m}6PaM7!zk%!pm(uN2WNsq zI~nL$yn)^Uj|IP&V4y!!4fG9o0eE^31NG}|pa z;M?FWgAFwKB?IjNca1=22c1!h^_LcDs3DB^N)4o*V4(KkG2p$g8feJd2KorR8C(nf z(|h>mg}v~|f*s}>C~pxC2>u;B4f@h115E@EY=TC%*+4oou26532abYne8@og;IrU- z=+ma}40IF5RT$C{10{TKpvT}p!Bx;N{%j!MbTpWzC=`o3^|uUE4K4+T-Zs#=N4P5B zWnlIgCx9(216Kn)=c$1fIpQBvfUkp(L3fI9pzp!C&CnAa! z`B`X$;J(m54RD}O!5t$}!GZWO=LiRK%f>AMzYRSL+i383aJx|sGz8nn;0fUA(2J)! z&?n%Zz~4cCI?I7tynr`f@ReB(CNeI>0byifUN#N7#c~Ha0Uiq;2%WM4ze~@-1Osf` z?m)eEIM596cJN4!#)MU{-&N=Zqwul{y&sEM;|(}FaLpb3P7wI%{9~#EoESmnbQU> z9PEloW?qJt9)h=ly)nuBF&|Sr%qc$w&%+$EG3J<8!8^gGBY@kOG`7YZZa<90FKH=# zw3a4R;;Wrq=Eq?b#*OA}{=-)7$P6Iyye^{rZz8F56V02XDvKzE|GJ9h1 z0Xu=KyfCz4Ym3p)8Qj!cPZ8KUfnC6-ps!%Gj01asYn$ll5C*%iz_BJ6uMg7GBaCkN z-b3BM8%y=n8>80@a6VX#(Q6_`tJp-M0pQjPFqmNQ*#{mDZoUp<1qPS&Bur4ivES+G zAjXm&$waS!$DP*GWsDtPgXe+gV(iGnSTQ^W_kR%#4OWISF*sa@u^OC&W$c3(3x=iQ z5`)JF8fZEC`orK&;K@pl8&?w2(!EB;}Do+9}s4lHNfoy!Zdx0cW;qp zoqa@@F7uVZPWyl`$6!fc5N7CNC4et5wm(^zIau@;Id0eogt>Ydj}F64SiMZ9 z$`wi?Psx^6j0;B-}l0XX5!;&lzNr4oq*QE#oB7y-&dhgOM z%7P#Wh#*axA|OqQ(vf07DgQfr!n$((_j>NW&-;BdXHJ`$of94%4mx-sXj9$Zx>W6P zRY6qL>@AIZ|6q`}ZmW?_oji83mu75b|(`I7z`ugblJ-co0()D;Cg$t2Q4M5?wjp{V(mNk!MD zOEXoxTRn|urR8}{%So!2&g9qe8B3#QY`p5FJ2^eCQqxlvxxIMCKBt#%6!|=jRQ$|49@3t0(r? ze9@nEa8Zrrt6f-#DwH2^VWIw=wL~gh5*I4WO*Rjx7?hikl$4T{HIlz_VL>Vb4{}BF z65h&{1*%%|w?NWyJs;u9!c+zPQ&(13#rS?#7NPo#-*jc6s!m+*#%fB}oOlC#t0wSl zHx|(|!bRDQ6XoT0Pl~JF$sPwc%kFk_{X4g7r`Nex9NhMquiat%xEu3MQn~+KBsuYQ zaHgYcuRh%4@7%QX*SVW{Eq4~BO5hpzl78{zBivaeTE75jsOhZ~38u>a3w?O8JJYK6 z^VMBiPBc!<6c1E>$B%FJz}fteAN62Co;*aU zK}Y!|iKe_E6+^B3xd#hSRd8QV7Tos|o)~e3yeMV3sj$LSnp9FeuwYO{sVT3Zq_`+b ziF#A}fi&Wq12o*tin{7+}<%_hLTX zpMLy0Fru`e+}x#PP~S?$aiP~vZu`QDvcV^+eP>D;nP(naj#CnsRbJX-mXfZgoZ^CE z73SR3*rPr`v@wq;%mUMAB|Hg-fN$IQj4IdV2*ttq65lH;&0W45@yqeebWx6(>0`>}9o!#3W~4@cH{hpiM3tAYE)$p7QVqWsHuzTRyiuAm9mp|GML z-?VWb--)n6^NkYrBL2G%^HSC2Dt{IpV)|CGJ*c>(w8&IgFxphw-Bego+9R#YZwGlh zf954!{f>9{XAS!r4!_PVD=97ST3Rx+ETK3b*%jup-+xqMZj^;s)=+a^fvM1zV!WtC zboN^&`nKXYobq|M`Bi_`K)QRIdj;S?ci!dA@a=ctzDQN$F3Br3o660o5f4MTGankj zA_DRsDN&c|Xi_0=qQZg!XP)r&i2EGEz#&Q-s^jf(h(n+98v!h|Zr-0t3|*nE=1lWY zG~DplKTD*Uiz|L39vjF!3n#0^{i-GpGMD9*77QpTO(@M9Trj*Ov7mTUbp`e z9+ze=DmhpkaHEm|qUC=_TFOdw?n;p~bNS$s{4!gi6I#A0kOfH3jr>R;3za6j@VkMy z!zx_4QxJ;`I^w1jb)$UqKwRwn+^z{}wvwN_^Ryu5CtY{vgMwH{pRFEBrc-sVRc;ok zd0vX^Oa;Yd=tpuhY;8O4{klcfc0ysH5-Hp2uY`2;x{KHx%&!FDO1%o^nqU^Ls?DQ< zai{wAHr&C1G?LGZhK7hS9>Zg3F0O{=A$s=noapT=Lj7xEu7Eig<-0o z=exsLq~V=quXn;PO~k$PcqP|`vs$s)YZc$2(L2@)OZ%_KcySXqg|iyc`&;?MaNGeU z+xgmXTHzq{lD&U^H01O z#R3w}DLD?sCR`Af!FJ_iH(j>Dzt(a8suFW3``{XXS_89=L>>}>_V@agw~b)_(%##= zR|Jl$?*nd$U@@xJe69GB`415+tihx|MLkAx!nl=hF2-mrp8nC#71x;rr50xto5k>Y zf_TlEtYMv(D#=#JVCyuM9-x*+@tjaZ^aybYrKP4(Ex4s7t1S)p<7;bTC^{d^kJQ8z zaAg?3Q(4s81nmEAU8Rh3 zb(z%kq%JwhDG%%Mb&(j=Ce-H#BUzC2ZXCZ6i3w#Ym!nY2kBxbqDD1hg3GW<*F6n3z ze>(~%t3IEBa8RrMN~Lbqm1b0w53MK{bE3ul`S(%GJ9zs5CBvOE@Yv0bQmSFoE@!Q(}m^YXl+{|ELTUX`!~XJbF@Ys6_&eV z^-!i(SAG(nhhy5a^TP5(pOA`a$9I%+3qx{`w_@MQ|unmkeuJQ%7 znD3DK*F;$#oH`LgCz5B*uP8OUT^F_=?%-;BC`N`++p1lIQn78EIB`SC)Y&|7Ll6H| zIR0-|8O}p%Gw)9RH$^m{`n0{WQ4o$9LrGUtX_?v9k%`VqRF!f|BnRPQ*u$?wGjH*C zYvb-8bek`(&3uEp+)+~9#H=^7WCXgrf;_Xx-hH2+s?BP&-}p$$&{M_Gd`usb6O&fs zccO}dQGagru$P)#{rjNHQzi7zGw{w+-YNz^zG8W=7#5w_`-Mmf!TG~ZQJ)yl#feHy zP8^kviTy2&`d{NBmWZssT=~8jR;Si)0ZN{pk`p_mWMeSvdMfB|D@(DaM{u7yEUeWJ z5lV=Oy{0C=7p0(WzAvVcqI+56Xy#yC7v}aTJ`5FTzf*#IR|6K3f3`Z)S=6SC@M1oC zv)a~+Q!jo+q$by@{klo^6IfPlDfe$uU6By_KliVJ2h?Q&G5g|_u)_ry+gPz)-@4bD z+n67(%K|emw)yw!(%T6?4CAG8zgHzG{N}SaroHgP?Rnp)^22pmSn~nh6#vcq9XZ0U zVb8zcLt*9MzVFS))?+@AOZx~n!k%^1q_D$LEgHo8)x*8HbFi&Q%jQEwN=io|&eg9*{e|-_Y=L$QVhIz{r%TL@{iTq4m=2hFe{NJm4 zu~ztX?Ttv`Aq|+X@4d~!u4lJnzp%0G{)m~iQwhF#K&r2WU*BG+Y#*Q5fcbdz{8so4 z?0%2$`1S^v`uOt;4OqBa!Vx8`9QVYd+@&E3g&q@bLwljlCl$Zoyzpb~{`HHzAM#s< zT@ikq-S@br@SBaCbW`|^?0HA-@C~B;#{0r=Z19X* zzp357Y3G#UJai7@UMO+Q!NU!*cSH3n!Oi}yi_NGGDcyaRxfEle#3#hE80j{$f|mGI zrt~RkDd{;^efS4)EKYjq!*|CqA8C9bZ_^0#|9f#vFKw&ApT)5ns$d?}2#?s*Xb}r@ zr#MkhEBj$L;w6n(uy=>HitSjv2Va7a%9HO#rSaY=BBQmv;4f(kJC>-Ct$1%qPpZ;8V0;`YZvp7?Q=Xet#WbaBQ1hPs;aMQHFCCFHpO!{ZfC zxie3W=U+EwJ{>g^gxdyFkk@Mn$+q93wgs1+)0CjA*tr-Kx|#;rM#H~8QUb4^+i`Pw zND~&|ziP=p{njf4x1}@IZcSJXKYv%suF_#~^e>50vR+`JHruw)`c%dDY+)l^J;9y` z-@vLEK0GX)`MMcldc&+|TZ^so;l0vXL?d6t5kWsiipu;U@q7ElOW_Cnoe~IX;w#cw zQ&m0wb2MO5Kt3S%u);pPf= zNv!4;3S&7`iMOog*Y&kh7)zipoNUc(4dbaw;%|3lX*F;-qUlMBr$DkOAx@i!q*!ls zWqFdSJ@1soW;hurDYr{PdWW2Z4k?v0hWPNDGUjWolg*B*o!?`k0Ew#9`JDA&?Lu0? zkYSwlq=ez7;yiO$zPT`LsF)I#m9*sLJy>awFLInkj)4Z27Ui03c`si2N!e8{R_C5f zBk}grn5$nm`lNo9D|M@KqZ3u`VlPtI3vHDL|FjPaX(Voxr;;lSTV0se4j!62z*J^_ z@p7an==CoJZ}qV~vsZevATM!GB|TNY!kYp7cdMVMh`aZ}s(=ql`eK)UJQh0&^RVs6 z32~(jLSeT5{F%CsWGhtChxvH=|6_N_2q^6|I<%AT5t#x1lIhT}CjZtj?Cz}5c7)1V z#ij2j4l?i`O>OvQQyad~R8ftA3I`PCW@9ng6vyR$EC$odoFLw&ADhBY_hYj(|8w0=9Qg1JhqXb}(pL)Fa67qE>g%}+?+?G~|6 zYr!I>lQcgI9-w3-@l_|^wX3j%B{usZ$D;#J0Idu}aj_Cu!8c-OW&F?Lml7yZGGc-OTX^@OsW zs4uyjM)tAhS22r9Qy(_J@D%rf{EQt?d&k)eG_tG4{Fmo!nz4!9Xlfnxg7sp?W_G8! zRh&+hv4!1fX_YndXDVYWyVII~#pKL}@phw)P_`z8D|ao{NvkhwJG)A-ww2{w8ciY` zUS*IwSUVc!t!iT@dq!ug-c`=jcz3ZoX?B%v9qK6;Ntz5%`i!^S%^K$;?^b#DuxDUJ zw0fVt#8qi$ZSN;flQg|Wfg=HOywx*M{$17#5d1P+Zp43)@O-4zkgsV~gROBf@+jAU zgku`qua0AbhT3Ojrfq(}_qUKk<(w)Jul)VI7k}A8_LdG9`R10gAFtO^4v?<gEpn|kp0HmJW=Pu{1Ej3w29d~6#zM4CT{FK#3I%X^AM zrQChB+KZoRBfCrMhVdJ1@xo1KtY-7G<(Sz#l2R$Dn* z`e_V*r!DsIXbfN6R<0#|VBv=Ze`yiy&DHI2$!?D20qx`{>A_f@*iMd+s>bp`?a&;L zas2&usKjY1-_#C;qNnoHf}c<4F9iF3#KRNh(3I$zqBYJ+Yue|wPfh8PoTZ$lj4rn3 z#LjkTZ*|5$PGgtZd}4weF72AfSEEYl>^%OR;FAmZodh{dy1Rh8B%)~^3wa~)J#889 zk%+v$tN19v2iEX~g1fKdyAyFJksJ80;@fQ#cTJK5CI2nFZjv147qde&#C9c<+IPTr zPF8kC+K2miev;f&<;LeF$yqK}D1j33do5NqL8X$cx@6g4&_7_YFiuJ*cyzj)V;!3= z_v^$je=1MYcU3K+wX}j(@NskS49%D$8~EpQ#_jtzY_XqB#;#b2PIQ`m?Wzc7i*A&q6=nLv#|{1zc}0 zzOnrbP6xjWy$~A~5~(ZrJLuW_h_IYT-NE~z7vnYIeQ+P}N$4&6iLfk21Bfj23*bxf z!ca{#7zuZvj~>9&4=x5v2jOA!1eb&Ben-^o5E0h3Xf(JOx*uL5MuNwJXF^vTA*v6a z1YQrl_$bPNr-9Exe}9Y!i$C-+_D}NnM1NpQg@ISV6pFF_I<`#kLa@sTqSM%VgO`I} zK<_(Aln-7Dz61T=Q$$7JP2ls;OHLCF2X6%*f}ZgM4i${oskB{ayxE)#-i!UyYC!QB zv>XNwlvYD8!F*ya7!9TK(5KH5VHt!_7rC4x(w@g<0z*;)bW6-Pu%O0bI_+Q5gi9x9>Q?BjMIGurv}DTa0+z7FGRn9UxLR#mtQ5i4HgrJ z<PUxg!d6R?%26){dzW^kWQ99DENPi2-UBhNSi2KfwE; z8)vF$FZd<6Cv=0!Dmnw+k4EP}uiSyvHyzIZM(p$lz&5-~%GDF?0AGfV+=n9o9|iY? zj`&tZ)4*rIKSHlRrJ^NZe>~ltPUEHCk7%TUC>;D5wBJuyg9q0KZ-I6?ixntvtcXJg z;tf+{3yfwkwgTFo#|9R?`(^0iKdYz{I1wC-cTY_(swfNG0o(^V_L7SFfxCf!{8dG} zZ>i`YcqsTLbm?ssJp>O2S3+;Y_8dG4d=+}=9ThH<5swXwSe1n9D^VVJ9(bZgqAF|? z!HdCbm_)tZC7KS#pLfw@Xe+i`;8Wni9uk@TC3*n<9qbw)QBI&lF-~}5z+<3450NMy ztQMCE`fiwHp$r)AFk-?b>V{WNgTRf!lc2ZNl4v2gHF!X6iCpVQv;mv~{tCK&oJ2do zCh(8YW168-@PEKj%_Z7{&C?kN10LK$qR}lS3I%@v_HQLouXu|@bzsbZF+Ls@wwEXY zyc0YMIw?z{Dd1D!G0=m$OY|-H5_kbL%a!P7@MG`_XpKoC7Z;*e;LXsw0TKm+Ra#s| z=)2_-)c|({e^?>WLks?o!w`R~wQRUV!$wN92>cenJg7yz7M_tHsQU> z!e=`?Q`%0aH394 zJ+SQrKLr1&L#J$XQ`24;PI#6#K;Oqmqw*vQ1Xp^gNfV-`n&3q68t8@*Y8nLY0X_%) z5+l#Y;C%2(yzMwxOHJ#*W#Ex`uc5C44?GUM0Xnyynl6Fg18Xc8rp7l=(`^{jVbp7= zrg3p5-)@o`1-UUvIS5pk$PrM6$06qX6)mPk zpqFAKI}eV)v)?sKO>+mTsjfHC2(Tq}kedD|SJMU<8(^%gP*dg%HTn2p=*6@A3c8?D zP5Z!}V9!}<>OWge*T6ww<0sg`r)qizt_{wbqoxxJ@CPlvxZdFL3)Qq_g_=^q`69kj zO@pyWKMY)IME@VKPEA!C)ieXfBqS`|q^5z}aLvHW!JgaIv<55jzk+vwyYIp2-K!=) zKca8IefFWjht*UMd=IR`^1IK^Y8nA{MqjWWdg>jVa&S{{^Sf#~`-hs^`xE*e^#8M- z;wO`=p(!xlMZ$CFpePMp0j~$2h}O`@O*C{i0J9!&i>4YnhoP=fAdVi-{-d56`p%@G z*dTN|;Nk%q`lVPyh2XcqA7TA==(`%a37!ZJv}kDE6b+>W6Mb%hkv$d3(>26loB;b_ zX;nW~=gj5B$k$4Ncgfp*`R! z;HDViZhV1JD-@R)ynY)FV7G?S!Itk}SiaWKZ-+EA83z7*m1ZB-(124Y1P(@L;dWX> zwa#g%W*DYT;FHkHFChoq2b_LcLz+7pngyN(UUE-Ee?G@v;6p|i zDj9W;#EcmH&MZdB^BGM5KLuZdes>|GLlziL=zLl%V)S?^qnqGJ@XTe54z6Y79)&Xk zu2{#&|2QfH-vR#&J^w7Dw$Zq(=qoy$W7Pi=qYuE1!TQUL3T`v{FSrlb`3|Fzj~P7! zj{yfiVYICZ2h_S2(fcq4K4o<4PyDSmn1kp3#i++~oCWY=u#7=`<|{_S!J>B)Z>&63 zGED<-0dI%yqm^kc_zYOBlc|YOro-Sn;7icI;g7fPfFFZrJIl1*MYhmiFhp@J;C}sOI+`cb18_L_d*~tg7Mav_h{Rt3FE`7y91{Uw@M-YbnKC`uB~!Dy zm@uGsi}_lno;PKByB;b-XXJlNCZ|9x?W_+*=TakBOE2ncsbxc=ufcH*wWR5!rHf!M z^d&7Y#!tx9(tEMEMBr^%S~_j%t))XSdcf#}LH-i9nsFHK!3L9-bl4h#P2hUaBl5J= z7@QB@2t9A0mfC@bfzK3Zsqk$r6@y2CIrMC7qrs!WUqWk&wDd0cKj7BTmX<@cG!@2F z7=59i57W{T@HFtA5nB3rq?V3?E5YVbS{gfAOBcX%!LDPlvv;&~7rY8QZl;!Yf2^g+ zjnL76J6CFH`7AAc3buml&(>1^PqefWyc>LPj@Cjy%+=EOFb;@>rD)-DEjcwtPY9j? zy>^9`!ocUiC$?(I+p49d;0xfj&`+_g0bd4B*@m5O*U~2NEpXVES}NJ0rCs1B;Fr+r z_uzoQ9_Y^F_gb`c;GmWs!)OA-^qrRSk7}t#6HJ%D)4tbIkCR%;1LuP$L9f6z0z3%3 zOKLj6!cDb&lGvH<5ROn0irv=Z!cpF6?PjEmw9Sv`ax-foRumJ7_>d3Vj zZW0U-^@DWOH%v#Xz>(ky&{yi|=m5ABtgWx3K@D}(yg7c7f#*YSYO13Y@NDo&=v&xE zgE`ovnT~?7S-^9^DbQW9y$7BLwoC-fz%~WO0vHFOPhp!5UIcyteX^yFD#2U9PoX=s z($O~Xm*67khy)$&2A=>&wbzlVgN_1Q5d8$M3*94AM^Rt{2DC}gce?9nBseG-{lCXs zI{G?SM{{5#BcW%19o-(JqYL0-aM)lS<-V<>@RpcPfwhG=BV{^j1zrpuU9O{-qjdBx zcrSRwI2~!G=;$}_b#OFv?T^vOR_MeqBKCuxJ6A{Dz`-Ht|C`U(QLkla5ezY;K7xL} z21f{f8@zjij#h5eQ9x@vX5bUhIbZ5161)UF5;|m`j>^FY!O75@zSYrx!6(4ip?e+H z(YN5s;K@gHbm)|hu7R}{46%0shtKJ#W<0Jxc+w>uy||&HN#JhauwQj_`ks#VfD6I; z`#PHa2&WPJ4*2?G9o2cRBbPR~>A>mGYPFuy!H2*ZOi$lpcDodO7km@Cjk}&MfGui_ z*=2w{4?U^cVnze5^3qdSkeo$1~!3>_4RbRxt<<@ zXMwArrH*<^X@@fat_5A$Sx*bW=fDS{M_~H=-*&kEFJJ`r(oF#UBH;DK(8JLPa4|R)y3C@dBj69gtD&nV>gg}=VsPa9dfI^LbZ{d274Qk@TC=ea z@ICP7pX%w*B0YVPXhAQANyJ^i*yVb-+Lzkb?Q;`M60~oC@ z>nZV9J^cuFk3d%o{n0%=xujsQ0Do~`Pfz~PQ)h5*upi!<(+fR)0Jebrv05IA)rZUA z#o$EfKaB?RYmb8gpLI6S5H|yL27d{j4qfhVAWIJzH(|I08t^z7XfyaWcpr3=NCWKx z`(Ren9lBezfnI`Zf}I)|s28>t9dL%gx1kR-G*CNmLvXiP15J)IP#U-yxOO80J;K%( z+y)%c*g#zx8!R*kMmreiVN8uTP!YHQ9MHx<>yr$$3j6^$DcL|C9Sw8_{291!nt=kk z8K`DQqHn>Qpfj@#)CqhAT-eJ%tp^!sKDd4)X2#Ik0s|RR(LiuI^j9OW{^AK^FpN=S zaJoJ~tHH~_Y0%SW8t5MQYw&((mrt?7PUyG6iO}=c<1B#FqHvQz@7;nk1Re~&4t?=} z0gF|bY=B*{HZ%K>fewRz0`G+W%W~8}=U`liQTG^*=!}7?z;ZN^_c;UBY;fAUpw|MQ zhyL`bflh!c!MmZq!WNx|z8~Bfi#s`bEOCQ>22X{47;dDE;1tZVqH7rGt$6%-Upnq5 z@MvhuRs2Y6l!2QNhI2LN^u}>2nwbFuWHV>D3w| z-2%@Ahi);FW~-3~XW|(L58;@OW7P|bSJbu+DusR*t5`z~=$OFu@2cn$7BKJ^BeWX4 z2!Dcm6TkJ&xnV+zY1{_WS>UKD&g3ctm!Wozho0Im;=H8~o3jGs!OK{#Dt z>sI`!K7QFGhGKpIcD}2jdidq?1f5nqxRxiQ&iG;CgGV?8+`cZO9Q^P&0?q(;PGmGH zU#55PM9l!V#vF44=9uniTqSsz1(VEIm}JHRKEbwkw@i7MWaeX%IS0HM+9yy;TQSL; z4?YX6ZGbspLmVCW5VT7tE&T*u3O)h-VJ7Byu~?7-cf}<0Vs9;d16~cD+y}EI%o&|A zW!nt4yfsKma;cVj!T1u!7U*{{r~3?i7##H66lZ4X? zegr)pgGppECM@8%pY*fk;4fwIxD)K9~dr~&$WXy>&?>V=LZ z8k`F4fqtL~`hj-fMChgajWo`x{z`t8Z#j?Oet6>W=Zb%SWMO{xwoEumLPP8yS(ueY zN}#*lMxQIpL)C!-$AB=Kl`19PbqokoQ^Cj8(0W=l6*9FPsU)p&OcLgfQA*%z$AB=K zjZp%p9RtEVR~@+F7!aoSSfxajW59bXe#tJWj<}+GeEpGyseMl=Qrj^g%#g`Spp|1l zn478tog4$g%%8555bt?je`H}=7`ifXu7@~Agz5FM5*X(g5N2X^fI9|+xu{YpvCc6d z%xkli0AAPFKe8}8bM9Uf7ojs=3H>owNx~}?`$raL^n4|N5ySqGh561RCGg5IU^AC0 z0dL7(faDaI50)tbymYXC>pW} z&o(P1urP1`$im$8IbRZ~^=!N8bD4I3p(KT=?Kvb1vuvvpz{2+5p9u-o`rubG{U2@? B=l%cy diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5922edd..93ae46f 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -592,6 +592,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM n_FB2PRG_Version = 1.19 *-- Localized properties c_loc_processing_file = C_PROCESSING_LOC + c_loc_process_progress = C_PROCESS_PROGRESS_LOC *-- c_Language = 'ES' c_FB2PRG_EXE_Version = 0 @@ -710,7 +711,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY ON ESCAPE - THIS.o_Frm_Avance = NULL THIS.o_FSO = NULL THIS.o_FNC = NULL ENDTRY @@ -722,10 +722,19 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo - *-- Si o_Frm_Avance se habilitó de forma externa, l_ShowProgress podría ser .F. para controlarlo desde fuera. - IF VARTYPE(THIS.o_Frm_Avance) = "O" THEN - THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) - ENDIF + TRY + *-- Si o_Frm_Avance se habilitó de forma externa, l_ShowProgress podría ser .F. para controlarlo desde fuera. + IF VARTYPE(THIS.o_Frm_Avance) = "O" THEN + *-- Cuando esta rutina se invoca desde el script, este método es el #1 y no puede cancelarse todavía + IF THIS.o_Frm_Avance.l_Cancelled AND PROGRAM(-1) > 1 THEN + ERROR 1799 + ENDIF + THIS.o_Frm_Avance.AvanceDelProceso( tcTexto, tnValor, tnTotal, tnTipo ) + ENDIF + + CATCH + THROW + ENDTRY ENDPROC @@ -2670,19 +2679,20 @@ ENDDEFINE ******************************************************************************************************************* DEFINE CLASS frm_avance AS FORM - Height = 100 + Height = 110 Width = 628 ShowWindow = 2 DoCreate = .T. AutoCenter = .T. BorderStyle = 2 - CAPTION = C_PROCESS_PROGRESS_LOC + ' (Press Esc to Cancel)' + CAPTION = 'FoxBin2Prg - ' + C_PROCESS_PROGRESS_LOC + ' (Press Esc to Cancel)' ControlBox = .F. BackColor = RGB(255,255,255) nmax_value = 100 nmax_value2 = 100 nvalue = 0 nvalue2 = 0 + l_Cancelled = .F. Name = "frm_avance" _memberdata = [] ; + [] ; @@ -2694,11 +2704,12 @@ DEFINE CLASS frm_avance AS FORM + [] ; + [] ; + [] ; + + [] ; + [] ADD OBJECT shp_base AS shape WITH ; - Top = 32, ; + Top = 28, ; Left = 12, ; Height = 13, ; Width = 604, ; @@ -2707,7 +2718,7 @@ DEFINE CLASS frm_avance AS FORM ADD OBJECT shp_avance AS shape WITH ; - Top = 32, ; + Top = 28, ; Left = 12, ; Height = 13, ; Width = 36, ; @@ -2722,13 +2733,13 @@ DEFINE CLASS frm_avance AS FORM Caption = ".", ; Height = 17, ; Left = 12, ; - Top = 12, ; + Top = 8, ; Width = 604, ; Name = "lbl_Tarea" ADD OBJECT shp_base2 AS shape WITH ; - Top = 68, ; + Top = 64, ; Left = 12, ; Height = 13, ; Width = 604, ; @@ -2737,7 +2748,7 @@ DEFINE CLASS frm_avance AS FORM ADD OBJECT shp_avance2 AS shape WITH ; - Top = 68, ; + Top = 64, ; Left = 12, ; Height = 13, ; Width = 36, ; @@ -2752,15 +2763,33 @@ DEFINE CLASS frm_avance AS FORM Caption = ".", ; Height = 17, ; Left = 12, ; - Top = 48, ; + Top = 44, ; Width = 604, ; Name = "lbl_Tarea2" + ADD OBJECT cmdcancel AS commandbutton WITH ; + Top = 84, ; + Left = 252, ; + Height = 21, ; + Width = 100, ; + Caption = "Cancel", ; + Enabled = .F., ; + Name = "cmdCancel" + + PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo WITH THIS AS frm_avance OF foxbin2prg.prg + *-- Habilita el botón de cancelar una vez que se comienzan a pasar valores + IF NOT EMPTY(tnValor) THEN + IF NOT .cmdCancel.Enabled THEN + .cmdCancel.Enabled = .T. + ENDIF + DOEVENTS + ENDIF + DO CASE CASE tnTipo = 0 IF NOT EMPTY(tcTexto) THEN @@ -2825,6 +2854,11 @@ DEFINE CLASS frm_avance AS FORM ENDPROC + PROCEDURE cmdcancel.Click + THISFORM.l_Cancelled = .T. + ENDPROC + + ENDDEFINE