From ab97a5e7b196eda209a332a471483da4ea977aab Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 26 Oct 2014 14:54:15 +0100 Subject: [PATCH] =?UTF-8?q?Changeset:=20454=20fdbozzo=20-=2025/10/2014=201?= =?UTF-8?q?9:08:08:=20-=20Generaci=C3=B3n=20de=20VC2/SC2=20por=20clase?= 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