- Implementación de herencia de CFGs entre directorios

This commit is contained in:
fdbozzo
2015-04-02 16:00:33 +02:00
3 changed files with 326 additions and 67 deletions

View File

@@ -45,6 +45,7 @@ Change History -------------------------------------------------------------
- Feature: New property "l_ProcessFiles" that allow setting to .F. when using foxbin2prg as object to get Processing file info with get_Processed method without actual processing
- Bug Fix frx/lbx: Trimmed some extra CR,LF,TAB from FR2/LB2 tag that where included in previous versions (Ryan Harris)
- Bug Fix scx/vcx/dbc: Delete ERR files when processing with UseClassPerFile switch (Ryan Harris)
- Feature: Implemented CFG inheritance between directories
2015/01/18 v1.19.41
- Bug Fix db2: Erroneous detection of Invalid Table when size is less than 328 bytes. Lower limit was changed to 65 bytes.

View File

@@ -1805,6 +1805,85 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_SetearElSoporte_DBF_Como_2_CuandoExistaElArhivo_foxbin2prg_cfg_EnDirArchivo_YDirectorioPadreTengaOtroValor
LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ;
, loFB2P AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ;
, loEx AS EXCEPTION
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
TRY
loEx = NULL
loFB2P = THIS.ioFB2P
loFB2P.l_ShowErrors = .F.
loFB2P.c_Foxbin2prg_ConfigFile = FULLPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest )
STRTOFILE( 'DBF_Conversion_Support:0', FULLPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + '..\' ) ) && Escribe en \TESTS
STRTOFILE( 'DBF_Conversion_Support:2', loFB2P.c_Foxbin2prg_ConfigFile )
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError
lcSeteo = 'DBF_Conversion_Support:'
leValorEsperado = 2
*-- TEST
loFB2P.EvaluarConfiguracion()
leValor = loFB2P.DBF_Conversion_Support
CATCH TO loEx
FINALLY
THIS.Evaluate_results( loEx, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor )
ERASE (FULLPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + '..\' ))
ENDTRY
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_SetearElSoporte_DBF_Como_2_CuandoExistaElArhivo_foxbin2prg_cfg_EnDirectorioPadre
LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ;
, loFB2P AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ;
, loEx AS EXCEPTION
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
TRY
loEx = NULL
loFB2P = THIS.ioFB2P
loFB2P.l_ShowErrors = .F.
loFB2P.c_Foxbin2prg_ConfigFile = FULLPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + '..\' )
STRTOFILE( 'DBF_Conversion_Support:2', loFB2P.c_Foxbin2prg_ConfigFile )
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError
lcSeteo = 'DBF_Conversion_Support:'
leValorEsperado = 2
*-- TEST
loFB2P.EvaluarConfiguracion()
leValor = loFB2P.DBF_Conversion_Support
CATCH TO loEx
FINALLY
THIS.Evaluate_results( loEx, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor )
ERASE (loFB2P.c_Foxbin2prg_ConfigFile)
ENDTRY
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_SetearElSoporte_DBF_Como_1_CuandoNoExistaElArhivo_foxbin2prg_cfg
LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor ;
@@ -2419,7 +2498,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
loEx = NULL
loFB2P = THIS.ioFB2P
loFB2P.l_ShowErrors = .F.
loFB2P.l_AllowMultiConfig = .T.
loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest )
lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest )
STRTOFILE( 'LBX_Conversion_Support: 1', lcCFG_File )
@@ -2480,7 +2558,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
loEx = NULL
loFB2P = THIS.ioFB2P
loFB2P.l_ShowErrors = .F.
loFB2P.l_AllowMultiConfig = .T.
loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + 'noexiste' )
loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest )
lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest )
@@ -2546,7 +2623,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
loEx = NULL
loFB2P = THIS.ioFB2P
loFB2P.l_ShowErrors = .F.
loFB2P.l_AllowMultiConfig = .T.
lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest )
STRTOFILE( 'LBX_Conversion_Support: 1', lcCFG_File )
@@ -2561,16 +2637,86 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
*-- TEST
loFB2P.EvaluarConfiguracion() && Carga config.Principal
*loFB2P.EvaluarConfiguracion() && Carga config.Principal
*-- c:\desa\foxbin2prg\foxbin2prg.cfg
loFB2P.c_InputFile = loFB2P.c_Foxbin2prg_ConfigFile
loFB2P.EvaluarConfiguracion() && Carga config.secundaria
laCFG_CachedAccess(1) = loFB2P.get_l_CFG_CachedAccess()
*-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg
loFB2P.c_InputFile = FORCEPATH( 'test.vcx', ADDBS(oFXU_LIB.cPathDatosTest) + '..\otro' )
loFB2P.EvaluarConfiguracion() && Carga config.secundaria
laCFG_CachedAccess(2) = loFB2P.get_l_CFG_CachedAccess()
*-- c:\desa\foxbin2prg\tests\datos_test\otro\foxbin2prg.cfg
loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest )
loFB2P.EvaluarConfiguracion() && Carga config.secundaria
laCFG_CachedAccess(3) = loFB2P.get_l_CFG_CachedAccess()
leValor = loFB2P.LBX_Conversion_Support
CATCH TO loEx
FINALLY
THIS.Evaluate_results( loEx, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor )
THIS.messageout( 'Configuraci<63>n Principal: ' + loFB2P.c_Foxbin2prg_ConfigFile )
THIS.messageout( 'Configuraci<63>n Secundaria: ' + lcCFG_File )
FOR I = 1 TO ALEN(laCFG_CachedAccess_Esperado)
THIS.messageout( 'Configuraci<63>n cacheada en acceso ' + TRANSFORM(I) + ' esperada: ' + TRANSFORM( laCFG_CachedAccess_Esperado(I) ) )
THIS.assertequals( laCFG_CachedAccess_Esperado(I), laCFG_CachedAccess(I), 'CONFIGURACI<43>N CACHEADA EN ACCESO ' + TRANSFORM(I) )
ENDFOR
ENDTRY
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_SetearElSoporte_LBX_Como_0_CuandoExista_CFG_Secundario_EnElDirEvaluado_Y_UsarValorCacheadoEnSegundoAcceso
LOCAL lnCodError, lnCodError_Esperado, lcSeteo, leValorEsperado, leValor, lcCFG_File ;
, laCFG_CachedAccess(3), laCFG_CachedAccess_Esperado(3), I ;
, loFB2P AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ;
, loEx AS EXCEPTION
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
TRY
loEx = NULL
loFB2P = THIS.ioFB2P
loFB2P.l_ShowErrors = .F.
lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest )
STRTOFILE( 'LBX_Conversion_Support: 1', lcCFG_File )
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError
lcSeteo = 'LBX_Conversion_Support:'
leValorEsperado = 1
laCFG_CachedAccess_Esperado(1) = .T.
laCFG_CachedAccess_Esperado(2) = .T.
laCFG_CachedAccess_Esperado(3) = .T.
*-- TEST
*loFB2P.EvaluarConfiguracion() && Carga config.Principal
*-- c:\desa\foxbin2prg\foxbin2prg.cfg
loFB2P.c_InputFile = loFB2P.c_Foxbin2prg_ConfigFile
loFB2P.EvaluarConfiguracion() && Carga config.secundaria
laCFG_CachedAccess(1) = loFB2P.get_l_CFG_CachedAccess()
*-- c:\desa\foxbin2prg\tests\datos_test\otro\foxbin2prg.cfg
loFB2P.c_InputFile = FORCEPATH( 'test.vcx', ADDBS(oFXU_LIB.cPathDatosTest) + 'otro' )
loFB2P.EvaluarConfiguracion() && Carga config.secundaria
laCFG_CachedAccess(2) = loFB2P.get_l_CFG_CachedAccess()
*-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg (DEBE CACHEAR DE CUANDO PROCES<45> EL ANTERIOR)
loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest )
loFB2P.EvaluarConfiguracion() && Carga config.secundaria
laCFG_CachedAccess(3) = loFB2P.get_l_CFG_CachedAccess()
@@ -2611,7 +2757,6 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
loEx = NULL
loFB2P = THIS.ioFB2P
loFB2P.l_ShowErrors = .F.
loFB2P.l_AllowMultiConfig = .T.
*loFB2P.c_Foxbin2prg_ConfigFile = FORCEPATH( 'foxbin2prg.cfg', ADDBS(oFXU_LIB.cPathDatosTest) + 'noexiste' )
*loFB2P.c_InputFile = FORCEPATH( 'test.vcx', oFXU_LIB.cPathDatosTest )
lcCFG_File = FORCEPATH( 'foxbin2prg.cfg', oFXU_LIB.cPathDatosTest )
@@ -2628,18 +2773,21 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O
*-- TEST
loFB2P.EvaluarConfiguracion() && Carga config.Principal
*loFB2P.EvaluarConfiguracion() && Carga config.Principal
*loFB2P.c_InputFile = loFB2P.c_Foxbin2prg_ConfigFile
loFB2P.c_InputFile = FORCEPATH( 'test1.vcx', ADDBS(oFXU_LIB.cPathDatosTest) + 'otro' )
*-- c:\desa\foxbin2prg\foxbin2prg.cfg
loFB2P.c_InputFile = FORCEPATH( 'test1.vcx', loFB2P.c_Foxbin2prg_ConfigFile )
loFB2P.EvaluarConfiguracion() && Carga config.secundaria
laCFG_CachedAccess(1) = loFB2P.get_l_CFG_CachedAccess()
*-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg
loFB2P.c_InputFile = FORCEPATH( 'test2.vcx', oFXU_LIB.cPathDatosTest )
loFB2P.EvaluarConfiguracion() && Carga config.secundaria
laCFG_CachedAccess(2) = loFB2P.get_l_CFG_CachedAccess()
*-- c:\desa\foxbin2prg\tests\datos_test\foxbin2prg.cfg
loFB2P.c_InputFile = FORCEPATH( 'test3.vcx', oFXU_LIB.cPathDatosTest )
loFB2P.EvaluarConfiguracion() && Carga config.secundaria
laCFG_CachedAccess(3) = loFB2P.get_l_CFG_CachedAccess()

View File

@@ -155,6 +155,7 @@
* 23/03/2015 FDBOZZO v1.19.42 Bug Fix mnx: No se mantiene el Pad vac<61>o al regenerar el men<65> cuando se define un menu con un Pad sin nombre (Lutz Scheffler)
* 25/03/2015 FDBOZZO v1.19.42 Mejora: Nueva propiedad l_ProcessFiles que permite obtener la lista de archivos a procesar sin procesarlos realmente usando el valor .F.
* 25/03/2015 FDBOZZO v1.19.42 Bug Fix frx/lbx: Arreglo de CR,LF,TAB sobrantes en algunos archivos FR2/LB2 agregados en versiones anteriores (Ryan Harris)
* 02/04/2015 FDBOZZO v1.19.42 Mejora: Herencia de CFGs entre directorios
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
*
*---------------------------------------------------------------------------------------------------
@@ -569,14 +570,12 @@ DEFINE CLASS c_foxbin2prg AS SESSION
+ [<memberdata name="run_aftercreatetable" display="run_AfterCreateTable"/>] ;
+ [<memberdata name="run_aftercreate_db2" display="run_AfterCreate_DB2"/>] ;
+ [<memberdata name="lfilemode" display="lFileMode"/>] ;
+ [<memberdata name="l_allowmulticonfig" display="l_AllowMultiConfig"/>] ;
+ [<memberdata name="l_autoclearprocessedfiles" display="l_AutoClearProcessedFiles"/>] ;
+ [<memberdata name="l_cancelwithesckey" display="l_CancelWithEscKey"/>] ;
+ [<memberdata name="l_cfg_cachedaccess" display="l_CFG_CachedAccess"/>] ;
+ [<memberdata name="l_classperfilecheck" display="l_ClassPerFileCheck"/>] ;
+ [<memberdata name="l_clearuniqueid" display="l_ClearUniqueID"/>] ;
+ [<memberdata name="l_cleardbflastupdate" display="l_ClearDBFLastUpdate"/>] ;
+ [<memberdata name="l_configevaluated" display="l_ConfigEvaluated"/>] ;
+ [<memberdata name="l_debug" display="l_Debug"/>] ;
+ [<memberdata name="l_dropnullcharsfromcode" display="l_DropNullCharsFromCode"/>] ;
+ [<memberdata name="l_error" display="l_Error"/>] ;
@@ -640,7 +639,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
DIMENSION a_ProcessedFiles(1, 6)
PROTECTED l_ConfigEvaluated, n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess
PROTECTED n_CFG_Actual, l_Main_CFG_Loaded, o_Configuration, l_CFG_CachedAccess
*--
n_FB2PRG_Version = 1.19
*--
@@ -664,7 +663,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION
lFileMode = .F.
n_ExisteCapitalizacion = -1
l_CFG_CachedAccess = .F.
l_ConfigEvaluated = .F.
l_Debug = .F.
l_Error = .F.
c_TextErr = ''
@@ -672,7 +670,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION
l_ShowErrors = .T.
n_ShowProgressbar = 1
n_ForceWriteIfReadOnly = 0
l_AllowMultiConfig = .T.
l_AutoClearProcessedFiles = .T. && Por defecto limpia archivos procesados entre ejecuci<63>n y ejecuci<63>n
l_ProcessFiles = .T. && Por defecto procesa los archivos. En .F. sirve para obtener sus nombres sin reescribirlos.
l_CancelWithEscKey = .T.
@@ -780,9 +777,9 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ADDPROPERTY(_SCREEN, 'ExitCode', 0)
THIS.writeLog( REPLICATE( '*', 100 ) )
THIS.writeLog( 'FoxBin2Prg INIT' )
THIS.writeLog( 'FoxBin2Prg INIT -', 2 )
THIS.writeLog( REPLICATE( '*', 100 ) )
THIS.writeLog( 'FoxBin2Prg: [' + THIS.c_Foxbin2prg_FullPath + '] (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ')' )
THIS.writeLog( 'FoxBin2Prg: [' + THIS.c_Foxbin2prg_FullPath + '] (EXE Version: ' + THIS.c_FB2PRG_EXE_Version + ', FoxPro Version: ' + VERSION(4) + ')' )
THIS.ChangeLanguage()
THIS.o_FSO = CREATEOBJECT("Scripting.FileSystemObject")
@@ -801,7 +798,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ERASE ( lcFileCDX )
THIS.writeLog( 'FoxBin2Prg UNLOAD' )
THIS.writeLog( 'FoxBin2Prg UNLOAD -', 2 )
THIS.writeLog( REPLICATE( '*', 100 ) )
THIS.writeLog( )
THIS.writeLog_Flush()
@@ -936,7 +933,7 @@ DEFINE CLASS c_foxbin2prg AS SESSION
FUNCTION get_l_ConfigEvaluated
RETURN THIS.l_ConfigEvaluated
RETURN THIS.l_Main_CFG_Loaded
ENDFUNC
@@ -1531,11 +1528,17 @@ DEFINE CLASS c_foxbin2prg AS SESSION
* tcOptimizeByFilestamp (v? IN ) Indica si se debe optimizar por filestamp ('1') o no ('0' <20> vac<61>o)
* tc_InputFile (v! IN ) Nombre completo (fullpath) del archivo a convertir o nombre del directorio a procesar
* tc_InputFile_Type (@? IN ) Tipo de archivo de entrada: (D)irectory, (F)ile, (Q)uerySupport
* toParentCFG (@? IN ) (Uso interno) Si se pasa un valor, el nuevo CFG copiar<61> primero sus valores de aqu<71> para heredarlos
*--------------------------------------------------------------------------------------------------------------
LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels ;
, tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type
, tcClearUniqueID, tcOptimizeByFilestamp, tc_InputFile, tcInputFile_Type, toParentCFG
#IF .F.
LOCAL toParentCFG AS CL_CFG OF 'FOXBIN2PRG.PRG'
#ENDIF
LOCAL lcConfigFile, llExiste_CFG_EnDisco, laConfig(1), I, lcConfData, lcExt, lcValue, lc_CFG_Path, lcConfigLine, laDirInfo(1,5) ;
, lnDirs, laDirs(1) ;
, lo_CFG AS CL_CFG OF 'FOXBIN2PRG.PRG' ;
, lo_Configuration AS Collection ;
, loLang as CL_LANG OF 'FOXBIN2PRG.PRG' ;
@@ -1545,11 +1548,19 @@ DEFINE CLASS c_foxbin2prg AS SESSION
WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
STORE 0 TO lnKey
loLang = _SCREEN.o_FoxBin2Prg_Lang
tcRecompile = EVL(tcRecompile,.c_Recompile)
tcRecompile = EVL(tcRecompile, .c_Recompile)
lcConfigFile = .c_Foxbin2prg_ConfigFile
tc_InputFile = EVL(tc_InputFile, .c_InputFile)
.c_InputFile = tc_InputFile
tcInputFile_Type = EVL(tcInputFile_Type,'')
lo_Configuration = .o_Configuration
IF VARTYPE(toParentCFG) <> 'O' THEN
toParentCFG = NULL
ENDIF
IF ISNULL(toParentCFG) THEN
.c_InputFile = tc_InputFile
ENDIF
*-- Determino el tipo de InputFile (Archivo o Directorio)
IF EMPTY(tcInputFile_Type) AND NOT EMPTY(tc_InputFile)
@@ -1565,31 +1576,63 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ENDCASE
ENDIF
IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN
*IF EMPTY(tc_InputFile)
* ERROR loLang.C_FILE_NOT_FOUND_LOC + ': .c_InputFile = "' + tc_InputFile + '"'
*ENDIF
IF .l_Main_CFG_Loaded AND NOT EMPTY(tc_InputFile) AND NOT tcInputFile_Type == C_FILETYPE_QUERYSUPPORT THEN
IF tcInputFile_Type == C_FILETYPE_DIRECTORY THEN
lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', tc_InputFile )
lcConfigFile = FULLPATH( 'foxbin2prg.cfg', ADDBS(tc_InputFile) )
ELSE
lcConfigFile = FORCEPATH( 'foxbin2prg.cfg', JUSTPATH(tc_InputFile) )
lcConfigFile = FULLPATH( 'foxbin2prg.cfg', tc_InputFile )
ENDIF
ENDIF
lo_Configuration = .o_Configuration
.n_CFG_Actual = 0
.l_CFG_CachedAccess = .F.
lc_CFG_Path = UPPER( JUSTPATH( lcConfigFile ) )
lc_CFG_Path = UPPER( JUSTPATH( FULLPATH( lcConfigFile ) ) )
lo_CFG = THIS
IF .l_Main_CFG_Loaded AND lo_Configuration.Count > 0
.n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0=No hay CFG cacheada, +1=Hay CFG cacheada
*-- B<>squeda del CFG del PATH indicado en la cach<63>
IF .l_Main_CFG_Loaded
IF .n_CFG_Actual > 0 THEN
lo_CFG = lo_Configuration.Item(.n_CFG_Actual)
.l_CFG_CachedAccess = .T.
ELSE
.l_CFG_CachedAccess = .F.
IF lo_Configuration.Count > 0 THEN
.n_CFG_Actual = lo_Configuration.GetKey( lc_CFG_Path ) && 0 = No hay CFG cacheada, >0 = Hay CFG cacheada
IF .n_CFG_Actual > 0 THEN
lo_CFG = lo_Configuration.Item(.n_CFG_Actual)
.l_CFG_CachedAccess = .T.
ENDIF
ENDIF
*-- Si no se pas<61> un CFG padre y no hay CFGs o no encuentra el del PATH indicado, analizo la jararqu<71>a
IF ISNULL(toParentCFG) AND (lo_Configuration.Count = 0 OR .n_CFG_Actual = 0) THEN
toParentCFG = THIS
IF LEFT( lc_CFG_Path, 2 ) == '\\' THEN
lnDirs = OCCURS( '\', lc_CFG_Path ) - 3
ELSE
lnDirs = OCCURS( '\', lc_CFG_Path )
ENDIF
IF lnDirs > 0 THEN
DIMENSION laDirs(lnDirs)
*-- Creo el array con los PATH intermedios
FOR I = lnDirs TO 1 STEP -1
IF I = lnDirs THEN
laDirs(I) = JUSTPATH(lc_CFG_Path)
ELSE
laDirs(I) = JUSTPATH(laDirs(I+1))
ENDIF
ENDFOR
*-- Ahora eval<61>o las configuraciones de los PATH intermedios desde la ra<72>z en adelante
*-- y mantengo la <20>ltima configuraci<63>n CFG Padre en toParentCFG para usarla como base.
FOR I = 1 TO lnDirs
.EvaluarConfiguracion( '', '', '', '', '', '', '', '', laDirs(I), C_FILETYPE_DIRECTORY, @toParentCFG)
ENDFOR
.n_CFG_Actual = 0
.l_CFG_CachedAccess = .F.
ENDIF
ENDIF
ENDIF
@@ -1609,23 +1652,34 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ENDCASE
IF .l_Main_CFG_Loaded
IF .l_CFG_CachedAccess THEN
toParentCFG = lo_CFG
.writeLog( '> ' + UPPER(loLang.C_USING_THIS_SETTINGS_LOC) + ': ' + tc_InputFile + ' => (' + lo_CFG.c_Foxbin2prg_ConfigFile + ')' )
.writeLog()
EXIT
ENDIF
lo_CFG = CREATEOBJECT('CL_CFG')
lo_Configuration.Add( lo_CFG, lc_CFG_Path )
IF NOT ISNULL(toParentCFG)
lo_CFG.CopyFrom(toParentCFG)
toParentCFG = lo_CFG
ENDIF
ELSE
lo_Configuration.Add( NULL, lc_CFG_Path ) && La NULL se carga solo cuando no hay Main_CFG_loaded todav<61>a.
ENDIF
*-- NOTA: SOLO LOS QUE NO VENGAN DE PAR<41>METROS EXTERNOS DEBEN ASIGNARSE A lo_CFG AQU<51>.
IF llExiste_CFG_EnDisco
.writeLog( )
.writeLog( '> ' + loLang.C_READING_CFG_VALUES_FROM_DISK_LOC + ':' )
.writeLog( C_TAB + loLang.C_CONFIGFILE_LOC + ' ' + lcConfigFile )
IF .l_AllowMultiConfig AND .l_ConfigEvaluated AND .l_Main_CFG_Loaded
lo_CFG = CREATEOBJECT('CL_CFG')
lo_Configuration.Add( lo_CFG, lc_CFG_Path )
ELSE
lo_Configuration.Add( NULL, lc_CFG_Path ) && La NULL se carga solo cuando no hay Main_CFG_loaded todav<61>a.
ENDIF
.n_CFG_Actual = lo_Configuration.Count
*lo_CFG.c_Foxbin2prg_FullPath = ''
lo_CFG.c_Foxbin2prg_ConfigFile = lcConfigFile
*lo_CFG.c_CurDir = ''
FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 )
.set_Line( @lcConfigLine, @laConfig, I )
@@ -1639,8 +1693,8 @@ DEFINE CLASS c_foxbin2prg AS SESSION
CASE LEFT( laConfig(I), 10 ) == LOWER('Extension:')
lcConfData = ALLTRIM( SUBSTR( laConfig(I), 11 ) )
lcExt = 'c_' + ALLTRIM( GETWORDNUM( lcConfData, 1, '=' ) )
IF PEMSTATUS( THIS, lcExt, 5 )
.ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) )
IF PEMSTATUS( lo_CFG, lcExt, 5 )
lo_CFG.ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) )
*.writeLog( 'Reconfiguraci<63>n de extensi<73>n:' + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) )
.writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > ' + loLang.C_EXTENSION_RECONFIGURATION_LOC + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) )
ENDIF
@@ -1712,13 +1766,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION
.writeLog( C_TAB + 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
lo_CFG.l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' )
.writeLog( C_TAB + JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) )
ENDIF
CASE LEFT( laConfig(I), 16 ) == LOWER('UseClassPerFile:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 17 ) )
IF INLIST( lcValue, '0', '1', '2' ) THEN
@@ -1835,9 +1882,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION
ENDCASE
ENDFOR
*IF .l_AllowMultiConfig AND .l_Main_CFG_Loaded AND lo_Configuration.Count > 0
* .n_CFG_Actual = lo_Configuration.Count &&lo_Configuration.GetKey( UPPER( JUSTPATH( lcConfigFile ) ) )
*ENDIF
.writeLog( )
ENDIF && llExiste_CFG_EnDisco
@@ -1895,7 +1939,6 @@ DEFINE CLASS c_foxbin2prg AS SESSION
.l_Main_CFG_Loaded = .T.
ENDIF
.l_ConfigEvaluated = .T.
.writeLog( )
ENDWITH && THIS
@@ -3621,13 +3664,24 @@ DEFINE CLASS c_foxbin2prg AS SESSION
LPARAMETERS tcText, tnTimestamp
TRY
IF EVL(tnTimestamp,0) = 1 THEN
THIS.c_TextErr = THIS.c_TextErr + TTOC(DATETIME(),3) + ' '
ENDIF
WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
IF EVL(tnTimestamp,0) = 1 THEN
*-- Format: Timestamp__Text
.c_TextErr = .c_TextErr + TTOC(DATETIME(),3) + ' '
ENDIF
THIS.c_TextErr = THIS.c_TextErr + EVL(tcText,'') + CR_LF
THIS.errOut(tcText)
THIS.l_Error = .T.
*-- Format: Text
.c_TextErr = .c_TextErr + EVL(tcText,'')
IF EVL(tnTimestamp,0) = 2 THEN
*-- Format: Text__Timestamp
.c_TextErr = .c_TextErr + ' ' + TTOC(DATETIME(),3)
ENDIF
.c_TextErr = .c_TextErr + CR_LF
.errOut(tcText)
.l_Error = .T.
ENDWITH
CATCH
ENDTRY
ENDPROC
@@ -3646,11 +3700,22 @@ DEFINE CLASS c_foxbin2prg AS SESSION
LPARAMETERS tcText, tnTimestamp
TRY
IF EVL(tnTimestamp,0) = 1 THEN
THIS.c_TextLog = THIS.c_TextLog + TTOC(DATETIME(),3) + ' '
ENDIF
WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
IF EVL(tnTimestamp,0) = 1 THEN
*-- Format: Timestamp__Text
.c_TextLog = .c_TextLog + TTOC(DATETIME(),3) + ' '
ENDIF
THIS.c_TextLog = THIS.c_TextLog + EVL(tcText,'') + CR_LF
*-- Format: Text
.c_TextLog = .c_TextLog + EVL(tcText,'')
IF EVL(tnTimestamp,0) = 2 THEN
*-- Format: Text__Timestamp
.c_TextLog = .c_TextLog + ' ' + TTOC(DATETIME(),3)
ENDIF
.c_TextLog = .c_TextLog + CR_LF
ENDWITH
CATCH
ENDTRY
ENDPROC
@@ -24518,6 +24583,7 @@ DEFINE CLASS CL_CFG AS CUSTOM
+ [<memberdata name="dbf_conversion_excluded" display="DBF_Conversion_Excluded"/>] ;
+ [<memberdata name="dbc_conversion_support" display="DBC_Conversion_Support"/>] ;
+ [<memberdata name="c_backgroundimage" display="c_BackgroundImage"/>] ;
+ [<memberdata name="copyfrom" display="CopyFrom"/>] ;
+ [</VFPData>]
#IF .F.
@@ -24535,8 +24601,8 @@ DEFINE CLASS CL_CFG AS CUSTOM
l_Recompile = NULL
l_NoTimestamps = NULL
l_ClearUniqueID = NULL
l_ClearDBFLastUpdate = NULL
l_OptimizeByFilestamp = NULL
l_ClearDBFLastUpdate = NULL
l_OptimizeByFilestamp = NULL
l_RedirectClassPerFileToMain = NULL
n_UseClassPerFile = NULL
l_ClassPerFileCheck = NULL
@@ -24561,6 +24627,50 @@ DEFINE CLASS CL_CFG AS CUSTOM
DBC_Conversion_Support = NULL
c_BackgroundImage = NULL
PROCEDURE CopyFrom
*-- Copia las propiedades del CFG indicado
LPARAMETERS toParentCFG
WITH THIS AS CL_CFG OF 'FOXBIN2PRG.PRG'
.c_Foxbin2prg_FullPath = toParentCFG.c_Foxbin2prg_FullPath
.c_Foxbin2prg_ConfigFile = toParentCFG.c_Foxbin2prg_ConfigFile
.c_CurDir = toParentCFG.c_CurDir
.l_Debug = toParentCFG.l_Debug
.l_ShowErrors = toParentCFG.l_ShowErrors
.n_ShowProgressbar = toParentCFG.n_ShowProgressbar
.l_Recompile = toParentCFG.l_Recompile
.l_NoTimestamps = toParentCFG.l_NoTimestamps
.l_ClearUniqueID = toParentCFG.l_ClearUniqueID
.l_ClearDBFLastUpdate = toParentCFG.l_ClearDBFLastUpdate
.l_OptimizeByFilestamp = toParentCFG.l_OptimizeByFilestamp
.l_RedirectClassPerFileToMain = toParentCFG.l_RedirectClassPerFileToMain
.n_UseClassPerFile = toParentCFG.n_UseClassPerFile
.l_ClassPerFileCheck = toParentCFG.l_ClassPerFileCheck
.n_ExtraBackupLevels = toParentCFG.n_ExtraBackupLevels
.c_VC2 = toParentCFG.c_VC2
.c_SC2 = toParentCFG.c_SC2
.c_PJ2 = toParentCFG.c_PJ2
.c_FR2 = toParentCFG.c_FR2
.c_LB2 = toParentCFG.c_LB2
.c_DB2 = toParentCFG.c_DB2
.c_DC2 = toParentCFG.c_DC2
.c_MN2 = toParentCFG.c_MN2
.PJX_Conversion_Support = toParentCFG.PJX_Conversion_Support
.VCX_Conversion_Support = toParentCFG.VCX_Conversion_Support
.SCX_Conversion_Support = toParentCFG.SCX_Conversion_Support
.FRX_Conversion_Support = toParentCFG.FRX_Conversion_Support
.LBX_Conversion_Support = toParentCFG.LBX_Conversion_Support
.MNX_Conversion_Support = toParentCFG.MNX_Conversion_Support
.DBF_Conversion_Support = toParentCFG.DBF_Conversion_Support
.DBF_Conversion_Included = toParentCFG.DBF_Conversion_Included
.DBF_Conversion_Excluded = toParentCFG.DBF_Conversion_Excluded
.DBC_Conversion_Support = toParentCFG.DBC_Conversion_Support
.c_BackgroundImage = toParentCFG.c_BackgroundImage
ENDWITH
ENDPROC
ENDDEFINE