Changeset: 23 Changeset: 23
This commit is contained in:
@@ -1,4 +1,2 @@
|
|||||||
RESOURCE=OFF
|
SCREEN=OFF
|
||||||
TALK=OFF
|
RESOURCE=OFF
|
||||||
SAFETY=OFF
|
|
||||||
VISIBLE=OFF
|
|
||||||
79
README.txt
Normal file
79
README.txt
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
02/12/2013 FOXBIN2PRG VER.1.7 FOR VISUAL FOXPRO 9 Fernando D. Bozzo (fdbozzo@gmail.com)
|
||||||
|
|
||||||
|
ESPA<EFBFBD>OL --------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
<EFBFBD>Que es FOXBIN2PRG?
|
||||||
|
Es un programa pensado para ser usado con herramientas SCM (Source Code Managers) que pretende
|
||||||
|
sustituir a SCCTEXT y mejorarlo, generando versiones TEXTO bidireccionales que permiten volver
|
||||||
|
a generar el archivo binario original.
|
||||||
|
|
||||||
|
Ventajas:
|
||||||
|
- Genera versiones tipo "PRG" (no compilables), para comparaci<63>n visual
|
||||||
|
- Permite modificar la versi<73>n TEXTO tan f<>cilmente como si se modificara un PRG
|
||||||
|
- Todo el c<>digo del programa est<73> en un solo PRG, para simplificar su copia y mantenimiento
|
||||||
|
- Con las versiones TEXTO se pueden volver a generar los binarios, lo que sirve como backup
|
||||||
|
- Las extensiones son configurables si se crea un archivo FOXBIN2PRG.CFG
|
||||||
|
- Los m<>todos y propiedades de la versi<73>n TEXTO se ordenan alfab<61>ticamente para facilitar su comparaci<63>n
|
||||||
|
- Tiene compatibilidad con SCCTEXT a nivel de par<61>metros para usarlo como sustituto en SourceSafe
|
||||||
|
|
||||||
|
Actualmente soporta las conversiones de archivos SCX, VCX y PJX, para los que genera las versiones TEXTO
|
||||||
|
con extensi<73>n SC2,VC2 y PJ2, que pueden reconfigurarse para compatibilizar con SourceSafe.
|
||||||
|
|
||||||
|
Estructura del archivo de configuraci<63>n FOXBIN2PRG.CFG
|
||||||
|
extension: SC2=SCA
|
||||||
|
extension: VC2=VCA
|
||||||
|
extension: PJ2=PJA
|
||||||
|
|
||||||
|
USO:
|
||||||
|
DO FOXBIN2PRG.PRG WITH "<ruta>\archivo.scx" ==> Genera la versi<73>n TEXTO con extensi<73>n sc2
|
||||||
|
DO FOXBIN2PRG.PRG WITH "<ruta>\archivo.sc2" ==> Regenera la versi<73>n binaria con extensi<73>n scx
|
||||||
|
|
||||||
|
|
||||||
|
NOTA FINAL:
|
||||||
|
Este programa es Open Source y "libre", y como tal no ofrezco garant<6E>as de que cumpla con sus espectativas
|
||||||
|
o de que est<73> libre de fallos, que intentar<61> solucionar si me reporta y mis obligaciones me lo permiten.
|
||||||
|
|
||||||
|
|
||||||
|
LICENCIA:
|
||||||
|
Esta obra est<73> sujeta a la licencia Reconocimiento-CompartirIgual 4.0 Internacional de Creative Commons.
|
||||||
|
Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-sa/4.0/deed.es_ES.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ENGLISH --------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
What is FOXBIN2PRG?
|
||||||
|
It is a program intended to be used with SCM tools (Source Code Managers), that pretends to sustitute
|
||||||
|
SCCTEXT and enhance it, generating bidirectional TEXT versions that permits to recreate the original
|
||||||
|
binary file.
|
||||||
|
|
||||||
|
Advantages:
|
||||||
|
- It generates "PRG" style programas (no compilables), for visual comparison
|
||||||
|
- It enables the the change of the TEXT version as easy as modifying a PRG
|
||||||
|
- All the program code is in just one PRG, to simplify its copy and maintainability
|
||||||
|
- With TEXT versions you can regenerate the original binaries, so it is useful as backup
|
||||||
|
- The extensions are configurable if you create the FOXBIN2PRG.CFG file
|
||||||
|
- Methods and properties of TEXT version are alphabetically sorted for easy comparison
|
||||||
|
- It has compatibility with SCCTEXT at parameter level so can be used as sustitute with SourceSafe
|
||||||
|
|
||||||
|
Actually supports conversions between SCX, VCX and PJX files, for which it generates TEXT versions
|
||||||
|
with extension SC2,VC2 and PJ2, that can be reconfigured to compatibilize with SourceSafe.
|
||||||
|
|
||||||
|
Structure of configuration file FOXBIN2PRG.CFG
|
||||||
|
extension: SC2=SCA
|
||||||
|
extension: VC2=VCA
|
||||||
|
extension: PJ2=PJA
|
||||||
|
|
||||||
|
USE:
|
||||||
|
DO FOXBIN2PRG.PRG WITH "<ruta>\archivo.scx" ==> Generates the TEXT version sc2 extension
|
||||||
|
DO FOXBIN2PRG.PRG WITH "<ruta>\archivo.sc2" ==> Regenerates the binary version with scx extension
|
||||||
|
|
||||||
|
|
||||||
|
FINAL NOTE:
|
||||||
|
This program is Open Source and "libre", and I don't make any garanties that it fulfills your espectations
|
||||||
|
or that it will be free of bugs, that I will try to fix if my obligations let me do it.
|
||||||
|
|
||||||
|
|
||||||
|
LICENCE:
|
||||||
|
This work is licensed under the Creative Commons Attribution 4.0 International License.
|
||||||
|
To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/.
|
||||||
373
foxbin2prg.prg
373
foxbin2prg.prg
@@ -21,9 +21,9 @@
|
|||||||
* * CONFIGURACI<43>N: SI SE CREA UN ARCHIVO FOXBIN2PRG.CFG, SE PUEDEN CAMBIAR LAS EXTENSIONES
|
* * CONFIGURACI<43>N: SI SE CREA UN ARCHIVO FOXBIN2PRG.CFG, SE PUEDEN CAMBIAR LAS EXTENSIONES
|
||||||
* PARA PODER USARLO CON SOURCESAFE PONIENDO LAS EQUIVALENCIAS AS<41>:
|
* PARA PODER USARLO CON SOURCESAFE PONIENDO LAS EQUIVALENCIAS AS<41>:
|
||||||
*
|
*
|
||||||
* VC2=VCA
|
* extension: VC2=VCA
|
||||||
* SC2=SCA
|
* extension: SC2=SCA
|
||||||
* PJ2=PJA
|
* extension: PJ2=PJA
|
||||||
*
|
*
|
||||||
* USO/USE:
|
* USO/USE:
|
||||||
* DO FOXBIN2PRG.PRG WITH "<path>\FILE.VCX" && Genera "<path>\FILE.VC2" (BIN TO PRG CONVERSION)
|
* DO FOXBIN2PRG.PRG WITH "<path>\FILE.VCX" && Genera "<path>\FILE.VC2" (BIN TO PRG CONVERSION)
|
||||||
@@ -45,12 +45,14 @@
|
|||||||
* 27/11/2013 FDBOZZO v1.5 Arreglo bug que no generaba form completo
|
* 27/11/2013 FDBOZZO v1.5 Arreglo bug que no generaba form completo
|
||||||
* 01/12/2013 FDBOZZO v1.6 Refactorizaci<63>n completa generaci<63>n BIN y PRG, cambio de algoritmos, arreglo de bugs, Unit Testing con FoxUnit
|
* 01/12/2013 FDBOZZO v1.6 Refactorizaci<63>n completa generaci<63>n BIN y PRG, cambio de algoritmos, arreglo de bugs, Unit Testing con FoxUnit
|
||||||
* 02/12/2013 FDBOZZO v1.7 Arreglo bug "Name", barra de progreso, agregado mensaje de ayuda si se llama sin par<61>metros, verificaci<63>n y logueo de archivos READONLY con debug activa
|
* 02/12/2013 FDBOZZO v1.7 Arreglo bug "Name", barra de progreso, agregado mensaje de ayuda si se llama sin par<61>metros, verificaci<63>n y logueo de archivos READONLY con debug activa
|
||||||
|
* 03/12/2013 FDBOZZO v1.8 Arreglo bug "Name" (otra vez), sort encapsulado y reutilizado para versiones TEXTO y BIN por seguridad
|
||||||
*
|
*
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
* TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)
|
* TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)
|
||||||
* 23/11/2013 Luis Mart<72>nez REPORTE BUG: En algunos forms solo se generaba el dataenvironment (arreglado en v.1.5)
|
* 23/11/2013 Luis Mart<72>nez REPORTE BUG: En algunos forms solo se generaba el dataenvironment (arreglado en v.1.5)
|
||||||
* 27/11/2013 Fidel Charny REPORTE BUG: Error en el guardado de ciertas propiedades de array (arreglado en v.1.6)
|
* 27/11/2013 Fidel Charny REPORTE BUG: Error en el guardado de ciertas propiedades de array (arreglado en v.1.6)
|
||||||
* 02/12/2013 Fidel Charny REPORTE BUG: Se pierden algunas propiedades y no muestra picture si "Name" no es la <20>ltima (arreglado en v.1.7)
|
* 02/12/2013 Fidel Charny REPORTE BUG: Se pierden algunas propiedades y no muestra picture si "Name" no es la <20>ltima (arreglado en v.1.7)
|
||||||
|
* 03/12/2013 Fidel Charny REPORTE BUG: Se siguen perdiendo algunas propiedades por implementaci<63>n defectuosa del arreglo anterior (arreglado en v.1.8)
|
||||||
*
|
*
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
* TRAMIENTOS ESPECIALES DE ASIGNACIONES DE PROPIEDADES:
|
* TRAMIENTOS ESPECIALES DE ASIGNACIONES DE PROPIEDADES:
|
||||||
@@ -157,7 +159,7 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro
|
|||||||
TRY
|
TRY
|
||||||
LOCAL lcSys16, I, lcPath, lnResp, lcFileSpec, lcFile, laFiles(1,5), laConfig(1), lcConfigFile, lcExt ;
|
LOCAL lcSys16, I, lcPath, lnResp, lcFileSpec, lcFile, laFiles(1,5), laConfig(1), lcConfigFile, lcExt ;
|
||||||
, llExisteConfig, llShowProgress, lcConfData, lnFileCount ;
|
, llExisteConfig, llShowProgress, lcConfData, lnFileCount ;
|
||||||
, loEx as Exception
|
, loEx AS EXCEPTION
|
||||||
|
|
||||||
PUBLIC goFrm_Avance AS frm_avance OF 'FOXBIN2PRG.PRG' ;
|
PUBLIC goFrm_Avance AS frm_avance OF 'FOXBIN2PRG.PRG' ;
|
||||||
, goCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
|
, goCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG'
|
||||||
@@ -218,7 +220,7 @@ TRY
|
|||||||
CASE '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile )
|
CASE '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile )
|
||||||
MESSAGEBOX( 'No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vac<61>os).' ;
|
MESSAGEBOX( 'No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vac<61>os).' ;
|
||||||
, 0+48+4096, 'FOXBIN2PRG: ERROR!!', 10000 )
|
, 0+48+4096, 'FOXBIN2PRG: ERROR!!', 10000 )
|
||||||
|
|
||||||
CASE '*' $ JUSTSTEM( tc_InputFile )
|
CASE '*' $ JUSTSTEM( tc_InputFile )
|
||||||
*-- Se quieren todos los archivos de una extensi<73>n
|
*-- Se quieren todos los archivos de una extensi<73>n
|
||||||
lcFileSpec = FULLPATH( tc_InputFile )
|
lcFileSpec = FULLPATH( tc_InputFile )
|
||||||
@@ -240,14 +242,14 @@ TRY
|
|||||||
IF llShowProgress
|
IF llShowProgress
|
||||||
goFrm_Avance.nMAX_VALUE = lnFileCount
|
goFrm_Avance.nMAX_VALUE = lnFileCount
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
FOR I = 1 TO lnFileCount
|
FOR I = 1 TO lnFileCount
|
||||||
lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) )
|
lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) )
|
||||||
goFrm_Avance.lbl_TAREA.Caption = 'Procesando archivo ' + lcFile + '...'
|
goFrm_Avance.lbl_TAREA.CAPTION = 'Procesando archivo ' + lcFile + '...'
|
||||||
goFrm_Avance.nVALUE = I
|
goFrm_Avance.nVALUE = I
|
||||||
|
|
||||||
IF llShowProgress
|
IF llShowProgress
|
||||||
goFrm_Avance.Show()
|
goFrm_Avance.SHOW()
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
IF FILE( lcFile )
|
IF FILE( lcFile )
|
||||||
@@ -279,8 +281,8 @@ TRY
|
|||||||
CATCH TO loEx
|
CATCH TO loEx
|
||||||
|
|
||||||
FINALLY
|
FINALLY
|
||||||
goFrm_Avance.Hide()
|
goFrm_Avance.HIDE()
|
||||||
goFrm_Avance.Release()
|
goFrm_Avance.RELEASE()
|
||||||
STORE NULL TO goCnv, goFrm_Avance
|
STORE NULL TO goCnv, goFrm_Avance
|
||||||
RELEASE goCnv, goFrm_Avance
|
RELEASE goCnv, goFrm_Avance
|
||||||
ENDTRY
|
ENDTRY
|
||||||
@@ -325,7 +327,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
|
|||||||
l_ShowErrors = .F.
|
l_ShowErrors = .F.
|
||||||
lFileMode = .F.
|
lFileMode = .F.
|
||||||
nClassTimeStamp = ''
|
nClassTimeStamp = ''
|
||||||
n_FB2PRG_Version = 1.6
|
n_FB2PRG_Version = 1.8
|
||||||
o_Conversor = NULL
|
o_Conversor = NULL
|
||||||
c_VC2 = 'VC2'
|
c_VC2 = 'VC2'
|
||||||
c_SC2 = 'SC2'
|
c_SC2 = 'SC2'
|
||||||
@@ -473,63 +475,63 @@ ENDDEFINE
|
|||||||
|
|
||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
DEFINE CLASS frm_avance AS form
|
DEFINE CLASS frm_avance AS FORM
|
||||||
Height = 79
|
HEIGHT = 79
|
||||||
Width = 628
|
WIDTH = 628
|
||||||
ShowWindow = 2
|
SHOWWINDOW = 2
|
||||||
DoCreate = .T.
|
DOCREATE = .T.
|
||||||
AutoCenter = .T.
|
AUTOCENTER = .T.
|
||||||
BorderStyle = 2
|
BORDERSTYLE = 2
|
||||||
Caption = "Avance del proceso"
|
CAPTION = "Avance del proceso"
|
||||||
ControlBox = .F.
|
CONTROLBOX = .F.
|
||||||
BackColor = RGB(255,255,255)
|
BACKCOLOR = RGB(255,255,255)
|
||||||
nmax_value = 100
|
nMAX_VALUE = 100
|
||||||
nvalue = 0
|
nVALUE = 0
|
||||||
Name = "FRM_AVANCE"
|
NAME = "FRM_AVANCE"
|
||||||
|
|
||||||
|
|
||||||
ADD OBJECT shp_base AS shape WITH ;
|
ADD OBJECT shp_base AS SHAPE WITH ;
|
||||||
Top = 40, ;
|
TOP = 40, ;
|
||||||
Left = 12, ;
|
LEFT = 12, ;
|
||||||
Height = 21, ;
|
HEIGHT = 21, ;
|
||||||
Width = 601, ;
|
WIDTH = 601, ;
|
||||||
Curvature = 15, ;
|
CURVATURE = 15, ;
|
||||||
Name = "shp_base"
|
NAME = "shp_base"
|
||||||
|
|
||||||
|
|
||||||
ADD OBJECT shp_avance AS shape WITH ;
|
ADD OBJECT shp_avance AS SHAPE WITH ;
|
||||||
Top = 40, ;
|
TOP = 40, ;
|
||||||
Left = 12, ;
|
LEFT = 12, ;
|
||||||
Height = 21, ;
|
HEIGHT = 21, ;
|
||||||
Width = 36, ;
|
WIDTH = 36, ;
|
||||||
Curvature = 15, ;
|
CURVATURE = 15, ;
|
||||||
BackColor = RGB(255,255,128), ;
|
BACKCOLOR = RGB(255,255,128), ;
|
||||||
BorderColor = RGB(255,0,0), ;
|
BORDERCOLOR = RGB(255,0,0), ;
|
||||||
Name = "shp_Avance"
|
NAME = "shp_Avance"
|
||||||
|
|
||||||
|
|
||||||
ADD OBJECT lbl_tarea AS label WITH ;
|
ADD OBJECT lbl_TAREA AS LABEL WITH ;
|
||||||
BackStyle = 0, ;
|
BACKSTYLE = 0, ;
|
||||||
Caption = ".", ;
|
CAPTION = ".", ;
|
||||||
Height = 17, ;
|
HEIGHT = 17, ;
|
||||||
Left = 12, ;
|
LEFT = 12, ;
|
||||||
Top = 20, ;
|
TOP = 20, ;
|
||||||
Width = 604, ;
|
WIDTH = 604, ;
|
||||||
Name = "lbl_Tarea"
|
NAME = "lbl_Tarea"
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE nvalue_assign
|
PROCEDURE nvalue_assign
|
||||||
LPARAMETERS vNewVal
|
LPARAMETERS vNewVal
|
||||||
|
|
||||||
WITH THIS
|
WITH THIS
|
||||||
.nvalue = m.vNewVal
|
.nVALUE = m.vNewVal
|
||||||
.shp_Avance.Width = m.vNewVal * .shp_base.Width / .nMax_Value
|
.shp_avance.WIDTH = m.vNewVal * .shp_base.WIDTH / .nMAX_VALUE
|
||||||
ENDWITH
|
ENDWITH
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE Init
|
PROCEDURE INIT
|
||||||
THIS.nvalue = 0
|
THIS.nVALUE = 0
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
@@ -559,6 +561,7 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
+ [<memberdata name="normalizarasignacion" type="method" display="normalizarAsignacion"/>] ;
|
+ [<memberdata name="normalizarasignacion" type="method" display="normalizarAsignacion"/>] ;
|
||||||
+ [<memberdata name="normalizarvalorpropiedad" type="method" display="normalizarValorPropiedad"/>] ;
|
+ [<memberdata name="normalizarvalorpropiedad" type="method" display="normalizarValorPropiedad"/>] ;
|
||||||
+ [<memberdata name="normalizarvalorxml" type="method" display="normalizarValorXML"/>] ;
|
+ [<memberdata name="normalizarvalorxml" type="method" display="normalizarValorXML"/>] ;
|
||||||
|
+ [<memberdata name="sortpropsandvalues" type="method" display="sortPropsAndValues"/>] ;
|
||||||
+ [<memberdata name="writelog" type="method" display="writeLog"/>] ;
|
+ [<memberdata name="writelog" type="method" display="writeLog"/>] ;
|
||||||
+ [<memberdata name="c_curdir" type="property" display="c_CurDir"/>] ;
|
+ [<memberdata name="c_curdir" type="property" display="c_CurDir"/>] ;
|
||||||
+ [<memberdata name="c_inputfile" type="property" display="c_InputFile"/>] ;
|
+ [<memberdata name="c_inputfile" type="property" display="c_InputFile"/>] ;
|
||||||
@@ -859,7 +862,7 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
IF VARTYPE(m.ltDateTime) <> 'T'
|
IF VARTYPE(m.ltDateTime) <> 'T'
|
||||||
m.ltDateTime = DATETIME()
|
m.ltDateTime = DATETIME()
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
tnTimeStamp = ( YEAR(m.ltDateTime) - 1980) * 2^25 ;
|
tnTimeStamp = ( YEAR(m.ltDateTime) - 1980) * 2^25 ;
|
||||||
+ MONTH(m.ltDateTime) * 2^21 ;
|
+ MONTH(m.ltDateTime) * 2^21 ;
|
||||||
+ DAY(m.ltDateTime) * 2^16 ;
|
+ DAY(m.ltDateTime) * 2^16 ;
|
||||||
@@ -899,7 +902,7 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
*lcTimeStamp_Ret = DTOC(laDir[1,3])+" "+lcTime
|
*lcTimeStamp_Ret = DTOC(laDir[1,3])+" "+lcTime
|
||||||
|
|
||||||
ltTimeStamp = EVALUATE( '{^' + DTOC(laDir(1,3)) + ' ' + TRANSFORM(laDir(1,4)) + '}' )
|
ltTimeStamp = EVALUATE( '{^' + DTOC(laDir(1,3)) + ' ' + TRANSFORM(laDir(1,4)) + '}' )
|
||||||
|
|
||||||
*-- En mi arreglo, si la hora pasada tiene 32 segundos o m<>s, redondeo al siguiente minuto, ya que
|
*-- En mi arreglo, si la hora pasada tiene 32 segundos o m<>s, redondeo al siguiente minuto, ya que
|
||||||
*-- la descodificaci<63>n posterior de GetTimeStamp tiene ese margen de error.
|
*-- la descodificaci<63>n posterior de GetTimeStamp tiene ese margen de error.
|
||||||
IF SEC(m.ltTimeStamp) >= 32
|
IF SEC(m.ltTimeStamp) >= 32
|
||||||
@@ -935,7 +938,7 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
+ STR(lnHour,2) + ":" + STR(lnMinutes,2) + ":" + STR(lnSeconds,2)
|
+ STR(lnHour,2) + ":" + STR(lnMinutes,2) + ":" + STR(lnSeconds,2)
|
||||||
|
|
||||||
ltTimeStamp = EVALUATE( "{^" + lcTimeStamp + "}" )
|
ltTimeStamp = EVALUATE( "{^" + lcTimeStamp + "}" )
|
||||||
|
|
||||||
lcTimeStamp_Ret = TTOC( ltTimeStamp )
|
lcTimeStamp_Ret = TTOC( ltTimeStamp )
|
||||||
|
|
||||||
CATCH TO loEx
|
CATCH TO loEx
|
||||||
@@ -1131,6 +1134,126 @@ DEFINE CLASS c_conversor_base AS SESSION
|
|||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
|
*******************************************************************************************************************
|
||||||
|
PROCEDURE sortPropsAndValues
|
||||||
|
* KNOWLEDGE BASE:
|
||||||
|
* 02/12/2013 FDBOZZO Fidel Charny me pas<61> un ejemplo donde se pierden propiedades f<>sicamente
|
||||||
|
* si se ordenan alfab<61>ticamente en un ADD OBJECT. Pierde "picture" y otras m<>s.
|
||||||
|
* Pareciera que la <20>ltima debe ser "Name".
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
* PAR<41>METROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT)
|
||||||
|
* taPropsAndValues (!@ IN ) El array con las propiedades y valores del objeto o clase
|
||||||
|
* tnPropsAndValues_Count (!v IN ) Cantidad de propiedades
|
||||||
|
* tnSortType (!v IN ) Tipo de sort:
|
||||||
|
* 0=Solo separar propiedades de clase y de objetos (.)
|
||||||
|
* 1=Sort completo de propiedades (para la versi<73>n TEXTO)
|
||||||
|
* 2=Sort completo de propiedades con "Name" al final (para la versi<73>n BIN)
|
||||||
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
LPARAMETERS taPropsAndValues, tnPropsAndValues_Count, tnSortType
|
||||||
|
EXTERNAL ARRAY taPropsAndValues
|
||||||
|
|
||||||
|
TRY
|
||||||
|
LOCAL I, X, laPropsAndValues(1,2)
|
||||||
|
DIMENSION laPropsAndValues( tnPropsAndValues_Count, 2 )
|
||||||
|
ACOPY( taPropsAndValues, laPropsAndValues )
|
||||||
|
|
||||||
|
IF m.tnSortType >= 1
|
||||||
|
* CON SORT:
|
||||||
|
* - A las que no tienen '.' les pongo 'A' por delante, y al resto 'B' por delante para que queden al final
|
||||||
|
FOR I = 1 TO m.tnPropsAndValues_Count
|
||||||
|
IF '.' $ laPropsAndValues(I,1)
|
||||||
|
IF m.tnSortType = 2 AND JUSTEXT( laPropsAndValues(I,1) ) == 'Name'
|
||||||
|
laPropsAndValues(I,1) = JUSTSTEM( laPropsAndValues(I,1) ) + '.' + CHR(255) + 'Name'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
laPropsAndValues(I,1) = 'B' + laPropsAndValues(I,1)
|
||||||
|
ELSE
|
||||||
|
IF m.tnSortType = 2 AND laPropsAndValues(I,1) == 'Name'
|
||||||
|
laPropsAndValues(I,1) = CHR(255) + 'Name'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
laPropsAndValues(I,1) = 'A' + laPropsAndValues(I,1)
|
||||||
|
ENDIF
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
ASORT( laPropsAndValues, 1, -1, 0, 1)
|
||||||
|
|
||||||
|
*-- Quitar el agregado
|
||||||
|
|
||||||
|
FOR I = 1 TO m.tnPropsAndValues_Count
|
||||||
|
taPropsAndValues(I,1) = SUBSTR( laPropsAndValues(I,1), 2 )
|
||||||
|
taPropsAndValues(I,2) = laPropsAndValues(I,2)
|
||||||
|
|
||||||
|
DO CASE
|
||||||
|
CASE m.tnSortType <> 2
|
||||||
|
*-- Saltear
|
||||||
|
CASE taPropsAndValues(I,1) == CHR(255) + 'Name'
|
||||||
|
taPropsAndValues(I,1) = 'Name'
|
||||||
|
CASE JUSTEXT( taPropsAndValues(I,1) ) == CHR(255) + 'Name'
|
||||||
|
taPropsAndValues(I,1) = JUSTSTEM( taPropsAndValues(I,1) ) + '.Name'
|
||||||
|
ENDCASE
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
ELSE && m.tnSortType = 0
|
||||||
|
*-- SIN SORT: Creo 2 arrays, el bueno y el temporal, y al terminar agrego el temporal al bueno.
|
||||||
|
*-- Debo separar las props.normales de las de los objetos (ocurre cuando es un ADD OBJECT)
|
||||||
|
X = 0
|
||||||
|
|
||||||
|
*-- PRIMERO las que no tienen punto
|
||||||
|
FOR I = 1 TO m.tnPropsAndValues_Count
|
||||||
|
IF EMPTY( laPropsAndValues(I,1) )
|
||||||
|
LOOP
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF NOT '.' $ laPropsAndValues(I,1)
|
||||||
|
X = X + 1
|
||||||
|
taPropsAndValues(X,1) = laPropsAndValues(I,1)
|
||||||
|
taPropsAndValues(X,2) = laPropsAndValues(I,2)
|
||||||
|
ENDIF
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
*-- LUEGO las dem<65>s props.
|
||||||
|
FOR I = 1 TO m.tnPropsAndValues_Count
|
||||||
|
IF EMPTY( laPropsAndValues(I,1) )
|
||||||
|
LOOP
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF '.' $ laPropsAndValues(I,1)
|
||||||
|
X = X + 1
|
||||||
|
taPropsAndValues(X,1) = laPropsAndValues(I,1)
|
||||||
|
taPropsAndValues(X,2) = laPropsAndValues(I,2)
|
||||||
|
ENDIF
|
||||||
|
ENDFOR
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
*-- VER ESTO SI HACE FALTA, SOBRE LO DE PONER LOS METODOS AL FINAL Y ADAPTAR
|
||||||
|
*-- Agregar propiedades primero
|
||||||
|
*FOR I = 1 TO m.tnPropsAndValues_Count
|
||||||
|
* *-- SI HACE FALTA QUE LOS M<>TODOS EST<53>N AL FINAL, DESCOMENTAR ESTO (Y EL DE M<>S ARRIBA)
|
||||||
|
* *IF LEFT(taPropsAndValues(I), 1) == '*' && Only Reserved3 have this
|
||||||
|
* * lcMethods = m.lcMethods + m.taPropsAndValues(I,1) + ' = ' + m.taPropsAndValues(I,2) + CR_LF
|
||||||
|
* * LOOP
|
||||||
|
* *ENDIF
|
||||||
|
|
||||||
|
* tcSortedMemo = m.tcSortedMemo + m.laPropsAndValues(I,1) + ' = ' + m.laPropsAndValues(I,2) + CR_LF
|
||||||
|
*ENDFOR
|
||||||
|
|
||||||
|
*-- Agregar m<>todos al final
|
||||||
|
*tcSortedMemo = m.tcSortedMemo + m.lcMethods
|
||||||
|
|
||||||
|
CATCH TO loEx
|
||||||
|
IF THIS.l_Debug AND _VFP.STARTMODE = 0
|
||||||
|
SET STEP ON
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
THROW
|
||||||
|
|
||||||
|
ENDTRY
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
ENDDEFINE
|
ENDDEFINE
|
||||||
|
|
||||||
|
|
||||||
@@ -1281,6 +1404,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
* LOS BLOQUES DE EXCLUSI<53>N SON AQUELLOS QUE TIENEN TEXT/ENDTEXT OF #IF .F./#ENDIF Y SE USAN PARA NO BUSCAR
|
* LOS BLOQUES DE EXCLUSI<53>N SON AQUELLOS QUE TIENEN TEXT/ENDTEXT OF #IF .F./#ENDIF Y SE USAN PARA NO BUSCAR
|
||||||
* INSTRUCCIONES COMO "DEFINE CLASS" O "PROCEDURE" EN LOS MISMOS.
|
* INSTRUCCIONES COMO "DEFINE CLASS" O "PROCEDURE" EN LOS MISMOS.
|
||||||
*--------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------
|
||||||
|
* PAR<41>METROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT)
|
||||||
* taCodeLines (!@ IN ) El array con las l<>neas del c<>digo de texto donde buscar
|
* taCodeLines (!@ IN ) El array con las l<>neas del c<>digo de texto donde buscar
|
||||||
* tnCodeLines (?@ IN ) Cantidad de l<>neas de c<>digo
|
* tnCodeLines (?@ IN ) Cantidad de l<>neas de c<>digo
|
||||||
* ta_ID_Bloques (?@ IN ) Array de pares de identificadores (2 cols). Ej: '#IF .F.','#ENDI' ; 'TEXT','ENDTEXT' ; etc
|
* ta_ID_Bloques (?@ IN ) Array de pares de identificadores (2 cols). Ej: '#IF .F.','#ENDI' ; 'TEXT','ENDTEXT' ; etc
|
||||||
@@ -1344,8 +1468,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
CATCH TO loEx
|
CATCH TO loEx
|
||||||
lnCodError = loEx.ERRORNO
|
|
||||||
|
|
||||||
IF THIS.l_Debug AND _VFP.STARTMODE = 0
|
IF THIS.l_Debug AND _VFP.STARTMODE = 0
|
||||||
SET STEP ON
|
SET STEP ON
|
||||||
ENDIF
|
ENDIF
|
||||||
@@ -1579,14 +1701,17 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
*-- Fin: ESTRUCTURA A ANALIZAR:
|
*-- Fin: ESTRUCTURA A ANALIZAR:
|
||||||
|
|
||||||
TRY
|
TRY
|
||||||
LOCAL lcDefinedPAM, lnPos, lnPos2, laProps(1,2), lcLine, lcPropName, lcValue, I, lcAsignacion, lcMemo
|
LOCAL lcDefinedPAM, lnPos, lnPos2, laProps(1,2), lcLine, lcPropName, lcValue, I, lcAsignacion, lcMemo ;
|
||||||
|
, laPropsAndValues(1,2), lnPropsAndValues_Count
|
||||||
lcMemo = ''
|
lcMemo = ''
|
||||||
|
|
||||||
IF toClase._Prop_Count > 0
|
IF toClase._Prop_Count > 0
|
||||||
DIMENSION laProps( toClase._Prop_Count, 2 )
|
DIMENSION laProps( toClase._Prop_Count, 2 )
|
||||||
ACOPY( toClase._Props, laProps )
|
ACOPY( toClase._Props, laProps )
|
||||||
|
lnPropsAndValues_Count = 0
|
||||||
|
|
||||||
WITH THIS
|
WITH THIS
|
||||||
|
*-- OBTENGO LAS PROPIEDADES Y SUS VALORES
|
||||||
FOR I = 1 TO toClase._Prop_Count
|
FOR I = 1 TO toClase._Prop_Count
|
||||||
.get_SeparatedPropAndValue( toClase._Props(I,1), @lcPropName, @lcValue )
|
.get_SeparatedPropAndValue( toClase._Props(I,1), @lcPropName, @lcValue )
|
||||||
|
|
||||||
@@ -1597,20 +1722,36 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
CASE THIS.analizarAsignacion_TAG_Indicado( @lcPropName, @lcValue, @laProps, toClase._Prop_Count, @I ;
|
CASE THIS.analizarAsignacion_TAG_Indicado( @lcPropName, @lcValue, @laProps, toClase._Prop_Count, @I ;
|
||||||
, C_FB2P_VALUE_I, C_FB2P_VALUE_F, C_LEN_FB2P_VALUE_I, C_LEN_FB2P_VALUE_F, @lcAsignacion )
|
, C_FB2P_VALUE_I, C_FB2P_VALUE_F, C_LEN_FB2P_VALUE_I, C_LEN_FB2P_VALUE_F, @lcAsignacion )
|
||||||
*-- FB2P_VALUE
|
*-- FB2P_VALUE
|
||||||
|
lnPropsAndValues_Count = lnPropsAndValues_Count + 1
|
||||||
|
|
||||||
CASE THIS.analizarAsignacion_TAG_Indicado( @lcPropName, @lcValue, @laProps, toClase._Prop_Count, @I ;
|
CASE THIS.analizarAsignacion_TAG_Indicado( @lcPropName, @lcValue, @laProps, toClase._Prop_Count, @I ;
|
||||||
, C_MEMBERDATA_I, C_MEMBERDATA_F, C_LEN_MEMBERDATA_I, C_LEN_MEMBERDATA_F, @lcAsignacion )
|
, C_MEMBERDATA_I, C_MEMBERDATA_F, C_LEN_MEMBERDATA_I, C_LEN_MEMBERDATA_F, @lcAsignacion )
|
||||||
*-- MEMBERDATA
|
*-- MEMBERDATA
|
||||||
|
lnPropsAndValues_Count = lnPropsAndValues_Count + 1
|
||||||
|
|
||||||
OTHERWISE
|
OTHERWISE
|
||||||
*-- Propiedad normal
|
*-- Propiedad normal
|
||||||
THIS.desnormalizarValorPropiedad( @lcPropName, @lcValue, '' )
|
THIS.desnormalizarValorPropiedad( @lcPropName, @lcValue, '' )
|
||||||
|
lnPropsAndValues_Count = lnPropsAndValues_Count + 1
|
||||||
|
|
||||||
ENDCASE
|
ENDCASE
|
||||||
|
|
||||||
lcMemo = lcMemo + lcPropName + ' = ' + lcValue + CR_LF
|
DIMENSION laPropsAndValues(lnPropsAndValues_Count,2)
|
||||||
|
laPropsAndValues(lnPropsAndValues_Count,1) = lcPropName
|
||||||
|
laPropsAndValues(lnPropsAndValues_Count,2) = lcValue
|
||||||
|
|
||||||
ENDFOR
|
ENDFOR
|
||||||
|
|
||||||
|
|
||||||
|
*-- REORDENO LAS PROPIEDADES
|
||||||
|
THIS.sortPropsAndValues( @laPropsAndValues, lnPropsAndValues_Count, 2 )
|
||||||
|
|
||||||
|
|
||||||
|
*-- ARMO EL MEMO A DEVOLVER
|
||||||
|
FOR I = 1 TO lnPropsAndValues_Count
|
||||||
|
lcMemo = lcMemo + laPropsAndValues(I,1) + ' = ' + laPropsAndValues(I,2) + CR_LF
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
ENDWITH && THIS
|
ENDWITH && THIS
|
||||||
ENDIF && laProps > 0
|
ENDIF && laProps > 0
|
||||||
|
|
||||||
@@ -1629,6 +1770,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
|
|
||||||
*******************************************************************************************************************
|
*******************************************************************************************************************
|
||||||
PROCEDURE objectProps2Memo
|
PROCEDURE objectProps2Memo
|
||||||
|
*-- ARMA EL MEMO DE PROPERTIES CON LAS PROPIEDADES Y SUS VALORES
|
||||||
LPARAMETERS toObjeto, toClase
|
LPARAMETERS toObjeto, toClase
|
||||||
|
|
||||||
#IF .F.
|
#IF .F.
|
||||||
@@ -1636,15 +1778,31 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base
|
|||||||
, toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG'
|
, toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG'
|
||||||
#ENDIF
|
#ENDIF
|
||||||
|
|
||||||
LOCAL lcMemo, I
|
LOCAL lcMemo, I, laPropsAndValues(1,2), lcPropName, lcValue
|
||||||
lcMemo = ''
|
lcMemo = ''
|
||||||
|
|
||||||
FOR I = 1 TO toObjeto._Prop_Count
|
IF toObjeto._Prop_Count > 0
|
||||||
TEXT TO lcMemo ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2
|
DIMENSION laPropsAndValues( toObjeto._Prop_Count, 2 )
|
||||||
<<toObjeto._Props(I,1)>>
|
|
||||||
|
|
||||||
ENDTEXT
|
WITH THIS
|
||||||
ENDFOR
|
FOR I = 1 TO toObjeto._Prop_Count
|
||||||
|
.get_SeparatedPropAndValue( toObjeto._Props(I,1), @lcPropName, @lcValue )
|
||||||
|
laPropsAndValues(I,1) = lcPropName
|
||||||
|
laPropsAndValues(I,2) = lcValue
|
||||||
|
ENDFOR
|
||||||
|
ENDWITH && THIS
|
||||||
|
|
||||||
|
|
||||||
|
*-- REORDENO LAS PROPIEDADES
|
||||||
|
THIS.sortPropsAndValues( @laPropsAndValues, toObjeto._Prop_Count, 2 )
|
||||||
|
|
||||||
|
|
||||||
|
*-- ARMO EL MEMO A DEVOLVER
|
||||||
|
FOR I = 1 TO toObjeto._Prop_Count
|
||||||
|
lcMemo = lcMemo + laPropsAndValues(I,1) + ' = ' + laPropsAndValues(I,2) + CR_LF
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
RETURN lcMemo
|
RETURN lcMemo
|
||||||
ENDPROC
|
ENDPROC
|
||||||
@@ -4309,7 +4467,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg
|
|||||||
* (ES) AUTOGENERADO - PARA MANTENER INFORMACI<43>N DE SERVIDORES DLL USAR "FOXBIN2PRG", SI NO IMPORTAN, EJECUTAR DIRECTAMENTE PARA REGENERAR EL PROYECTO.
|
* (ES) AUTOGENERADO - PARA MANTENER INFORMACI<43>N DE SERVIDORES DLL USAR "FOXBIN2PRG", SI NO IMPORTAN, EJECUTAR DIRECTAMENTE PARA REGENERAR EL PROYECTO.
|
||||||
* (EN) AUTOGENERATED - TO KEEP DLL SERVER INFORMATION USE "FOXBIN2PRG", OTHERWISE YOU CAN EXECUTE DIRECTLY TO REGENERATE PROJECT.
|
* (EN) AUTOGENERATED - TO KEEP DLL SERVER INFORMATION USE "FOXBIN2PRG", OTHERWISE YOU CAN EXECUTE DIRECTLY TO REGENERATE PROJECT.
|
||||||
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
<<C_FB2PRG_META_I>> Version="<<TRANSFORM(THIS.n_FB2PRG_Version)>>" SourceFile="<<THIS.c_InputFile>>" <<C_FB2PRG_META_F>> (Para uso con Visual FoxPro 9.0)
|
<<C_FB2PRG_META_I>> Version="<<TRANSFORM(THIS.n_FB2PRG_Version)>>" SourceFile="<<THIS.c_InputFile>>" Generated="<<TTOC(DATETIME())>>" <<C_FB2PRG_META_F>> (Para uso con Visual FoxPro 9.0)
|
||||||
*
|
*
|
||||||
ENDTEXT
|
ENDTEXT
|
||||||
ENDPROC
|
ENDPROC
|
||||||
@@ -4860,7 +5018,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
|
* (ES) AUTOGENERADO - <20><>ATENCI<43>N!! - <20><>NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
|
||||||
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
|
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
|
||||||
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
<<C_FB2PRG_META_I>> Version="<<TRANSFORM(THIS.n_FB2PRG_Version)>>" SourceFile="<<THIS.c_InputFile>>" <<C_FB2PRG_META_F>> (Para uso con Visual FoxPro 9.0)
|
<<C_FB2PRG_META_I>> Version="<<TRANSFORM(THIS.n_FB2PRG_Version)>>" SourceFile="<<THIS.c_InputFile>>" Generated="<<TTOC(DATETIME())>>" <<C_FB2PRG_META_F>> (Para uso con Visual FoxPro 9.0)
|
||||||
*
|
*
|
||||||
ENDTEXT
|
ENDTEXT
|
||||||
ENDPROC
|
ENDPROC
|
||||||
@@ -5251,9 +5409,6 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
* los objetos contenidos, causa un error. Se deben ordenar primero las
|
* los objetos contenidos, causa un error. Se deben ordenar primero las
|
||||||
* props.nativas (sin punto) y luego las de los objetos (con punto)
|
* props.nativas (sin punto) y luego las de los objetos (con punto)
|
||||||
*
|
*
|
||||||
* 02/12/2013 FDBOZZO Fidel Charny me pas<61> un ejemplo donde se pierden propiedades f<>sicamente
|
|
||||||
* si se ordenan alfab<61>ticamente en un ADD OBJECT. Pierde "picture" y otras m<>s.
|
|
||||||
* Pareciera que la <20>ltima debe ser "Name".
|
|
||||||
*---------------------------------------------------------------------------------------------------
|
*---------------------------------------------------------------------------------------------------
|
||||||
* PAR<41>METROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT)
|
* PAR<41>METROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT)
|
||||||
* tcMemo (v! IN ) Contenido de un campo MEMO
|
* tcMemo (v! IN ) Contenido de un campo MEMO
|
||||||
@@ -5265,7 +5420,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
LPARAMETERS tcMemo, tnSort, taPropsAndValues, tnPropsAndValues_Count, tcSortedMemo
|
LPARAMETERS tcMemo, tnSort, taPropsAndValues, tnPropsAndValues_Count, tcSortedMemo
|
||||||
EXTERNAL ARRAY taPropsAndValues
|
EXTERNAL ARRAY taPropsAndValues
|
||||||
TRY
|
TRY
|
||||||
LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods, laPropsAndValues(1,2)
|
LOCAL laItems(1), I, X, lnLenAcum, lnPosEQ, lcPropName, lnLenVal, lcValue, lcMethods
|
||||||
tcSortedMemo = ''
|
tcSortedMemo = ''
|
||||||
tnPropsAndValues_Count = 0
|
tnPropsAndValues_Count = 0
|
||||||
|
|
||||||
@@ -5287,7 +5442,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
X = X + 1
|
X = X + 1
|
||||||
DIMENSION laPropsAndValues(X,2)
|
DIMENSION taPropsAndValues(X,2)
|
||||||
|
|
||||||
IF C_MPROPHEADER $ laItems(I)
|
IF C_MPROPHEADER $ laItems(I)
|
||||||
*-- Solo entrar<61> por aqu<71> cuando se eval<61>e una propiedad de PROPERTIES con un valor especial (largo)
|
*-- Solo entrar<61> por aqu<71> cuando se eval<61>e una propiedad de PROPERTIES con un valor especial (largo)
|
||||||
@@ -5313,8 +5468,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
*-- Es un valor especial, por lo que se encapsula en un marcador especial
|
*-- Es un valor especial, por lo que se encapsula en un marcador especial
|
||||||
laPropsAndValues(X,1) = lcPropName
|
taPropsAndValues(X,1) = lcPropName
|
||||||
laPropsAndValues(X,2) = THIS.normalizarValorPropiedad( lcPropName, lcValue, '' )
|
taPropsAndValues(X,2) = THIS.normalizarValorPropiedad( lcPropName, lcValue, '' )
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
*-- Propiedad normal
|
*-- Propiedad normal
|
||||||
@@ -5324,81 +5479,19 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base
|
|||||||
*ENDIF
|
*ENDIF
|
||||||
|
|
||||||
lnPosEQ = AT( '=', laItems(I) )
|
lnPosEQ = AT( '=', laItems(I) )
|
||||||
laPropsAndValues(X,1) = LEFT( laItems(I), lnPosEQ - 2 )
|
taPropsAndValues(X,1) = LEFT( laItems(I), lnPosEQ - 2 )
|
||||||
laPropsAndValues(X,2) = THIS.normalizarValorPropiedad( laPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' )
|
taPropsAndValues(X,2) = THIS.normalizarValorPropiedad( taPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' )
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDFOR
|
ENDFOR
|
||||||
|
|
||||||
|
|
||||||
*-- 2) SORT
|
|
||||||
tnPropsAndValues_Count = X
|
tnPropsAndValues_Count = X
|
||||||
lcMethods = ''
|
lcMethods = ''
|
||||||
|
|
||||||
DO CASE
|
|
||||||
CASE m.tnSort = 1
|
|
||||||
* CON SORT:
|
|
||||||
* - A las que no tienen '.' les pongo 'A' por delante, y al resto 'B' por delante para que queden al final
|
|
||||||
* - Las "Name" deben estar al final, por lo que les agrego "_" pro delante
|
|
||||||
FOR I = 1 TO m.tnPropsAndValues_Count
|
|
||||||
IF '.' $ laPropsAndValues(I,1)
|
|
||||||
laPropsAndValues(I,1) = 'B' + laPropsAndValues(I,1)
|
|
||||||
ELSE
|
|
||||||
laPropsAndValues(I,1) = 'A' + laPropsAndValues(I,1)
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
*-- "Name" debe ser la <20>ltima. La modifico temporalmente. 02/12/2013 FDBOZZO
|
*-- 2) SORT
|
||||||
IF JUSTEXT( laPropsAndValues(I,1) ) == 'Name'
|
THIS.sortPropsAndValues( @taPropsAndValues, tnPropsAndValues_Count, tnSort )
|
||||||
laPropsAndValues(I,1) = JUSTSTEM( laPropsAndValues(I,1) ) + '.' + CHR(255) + 'Name'
|
|
||||||
ENDIF
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
ASORT(laPropsAndValues,1,-1,0,1)
|
|
||||||
|
|
||||||
*-- Quitar el agregado
|
|
||||||
DIMENSION taPropsAndValues( tnPropsAndValues_Count, 2 )
|
|
||||||
|
|
||||||
FOR I = 1 TO m.tnPropsAndValues_Count
|
|
||||||
taPropsAndValues(I,1) = SUBSTR( laPropsAndValues(I,1), 2 )
|
|
||||||
taPropsAndValues(I,2) = laPropsAndValues(I,2)
|
|
||||||
|
|
||||||
*-- Restauro "Name". 02/12/2013 FDBOZZO
|
|
||||||
IF JUSTEXT( taPropsAndValues(I,1) ) == CHR(255) + 'Name'
|
|
||||||
taPropsAndValues(I,1) = JUSTSTEM( taPropsAndValues(I,1) ) + '.Name'
|
|
||||||
ENDIF
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
CASE m.tnSort = 0
|
|
||||||
*-- SIN SORT: Creo 2 arrays, el bueno y el temporal, y al terminar agrego el temporal al bueno.
|
|
||||||
*-- Debo separar las props.normales de las de los objetos (ocurre cuando es un ADD OBJECT)
|
|
||||||
X = 0
|
|
||||||
DIMENSION taPropsAndValues( tnPropsAndValues_Count, 2 )
|
|
||||||
|
|
||||||
*-- PRIMERO las que no tienen punto
|
|
||||||
FOR I = 1 TO m.tnPropsAndValues_Count
|
|
||||||
IF EMPTY( laPropsAndValues(I,1) )
|
|
||||||
LOOP
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
IF NOT '.' $ laPropsAndValues(I,1)
|
|
||||||
X = X + 1
|
|
||||||
taPropsAndValues(X,1) = laPropsAndValues(I,1)
|
|
||||||
taPropsAndValues(X,2) = laPropsAndValues(I,2)
|
|
||||||
ENDIF
|
|
||||||
ENDFOR
|
|
||||||
|
|
||||||
*-- LUEGO las dem<65>s props.
|
|
||||||
FOR I = 1 TO m.tnPropsAndValues_Count
|
|
||||||
IF EMPTY( laPropsAndValues(I,1) )
|
|
||||||
LOOP
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
IF '.' $ laPropsAndValues(I,1)
|
|
||||||
X = X + 1
|
|
||||||
taPropsAndValues(X,1) = laPropsAndValues(I,1)
|
|
||||||
taPropsAndValues(X,2) = laPropsAndValues(I,2)
|
|
||||||
ENDIF
|
|
||||||
ENDFOR
|
|
||||||
ENDCASE
|
|
||||||
|
|
||||||
*-- Agregar propiedades primero
|
*-- Agregar propiedades primero
|
||||||
FOR I = 1 TO m.tnPropsAndValues_Count
|
FOR I = 1 TO m.tnPropsAndValues_Count
|
||||||
|
|||||||
Reference in New Issue
Block a user