From b724b71e02c9c177947125afdaceac08a767dae6 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Fri, 6 Mar 2015 17:57:30 +0100 Subject: [PATCH] Changeset: 682 - Bug Fix pjx/pj2: Si se usa fin de linea (CR+LF) en los datos de las propiedades "Build" del pjx, se genera un pj2 corrupto --- foxbin2prg.prg | 140 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 125 insertions(+), 15 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9f219d5..03e5e96 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -132,6 +132,7 @@ * 13/01/2015 FDBOZZO v1.19.41 Bug Fix scx/vcx: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros en LPARAMETERS (Ryan Harris) * 13/01/2015 FDBOZZO v1.19.41 Bug Fix db2: Detección errónea de tabla inválida cuando el tamaño es inferior a 328 bytes. Límite mínimo cambiado a 65 bytes. * 20/01/2015 FDBOZZO v1.19.42 Mejora: Validación de versión de Visual FoxPro, para evitar problemas ajenos a FoxBin2Prg +* 06/03/2015 FDBOZZO v1.19.42 Bug Fix pjx: Permitir usar fin de linea (CR/LF) en los atributos de versión del PJX * * *--------------------------------------------------------------------------------------------------- @@ -4474,6 +4475,7 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION ELSE lcValue = CHRTRAN( LEFT( tcNullTerminatedValue, lnNullPos - 1 ), ['], ["] ) ENDIF + lcValue = THIS.encode_SpecialCodes_1_31(lcValue) RELEASE tcNullTerminatedValue, lnNullPos RETURN lcValue ENDPROC @@ -12787,6 +12789,10 @@ ENDDEFINE DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg + _MEMBERDATA = [] ; + + [] ; + + [] + #IF .F. LOCAL THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF @@ -13161,6 +13167,15 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg RETURN ENDPROC + + + PROCEDURE strExtract_CR + LPARAMETERS tcText + tcText = THIS.decode_SpecialCodes_1_31( STREXTRACT( tcText, 'Comments=', CR_LF ) ) + RETURN tcText + ENDPROC + + ENDDEFINE @@ -14307,6 +14322,8 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -14366,6 +14383,34 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE + PROCEDURE decode_SpecialCodes_1_31 + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcText (!@ IN ) Decodifica los primeros 31 caracteres ASCII de {nCode} a CHR(nCode) + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcText + LOCAL I + FOR I = 0 TO 31 + tcText = STRTRAN( tcText, '{' + TRANSFORM(I) + '}', CHR(I) ) + ENDFOR + RELEASE I + RETURN tcText + ENDPROC + + + + PROCEDURE encode_SpecialCodes_1_31 + LPARAMETERS tcText + LOCAL I + FOR I = 0 TO 31 + tcText = STRTRAN( tcText, CHR(I), '{' + TRANSFORM(I) + '}' ) + ENDFOR + RELEASE I + RETURN tcText + ENDPROC + + + PROCEDURE setParsedProjInfoLine LPARAMETERS tcProjInfoLine THIS.setParsedInfoLine( THIS, tcProjInfoLine ) @@ -14375,14 +14420,31 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE PROCEDURE setParsedInfoLine LPARAMETERS toObject, tcInfoLine - LOCAL lcAsignacion, lcCurDir - lcCurDir = ADDBS(THIS._HomeDir) - IF LEFT(tcInfoLine,1) == '.' - lcAsignacion = 'toObject' + tcInfoLine - ELSE - lcAsignacion = 'toObject.' + tcInfoLine - ENDIF - &lcAsignacion. + + LOCAL lcAsignacion, lcCurDir, lcValue, loEx as Exception + + TRY + lcCurDir = ADDBS(THIS._HomeDir) + IF LEFT(tcInfoLine,1) == '.' + lcAsignacion = 'toObject' + tcInfoLine + ELSE + lcAsignacion = 'toObject.' + tcInfoLine + ENDIF + + lcValue = GETWORDNUM(lcAsignacion, 2, '=') + + IF TYPE(lcValue) = "C" THEN + lcAsignacion = GETWORDNUM(lcAsignacion, 1, '=') + '= THIS.encode_SpecialCodes_1_31(' + lcValue + ')' + ENDIF + + &lcAsignacion. + + CATCH TO loEx + loEx.UserValue = loEx.UserValue + 'lcAsignacion = [' + TRANSFORM(lcAsignacion) + ']' + CR_LF + THROW + ENDTRY + + RETURN ENDPROC @@ -14397,6 +14459,7 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE ELSE lcValue = CHRTRAN( LEFT( lcStr, MIN(tnLen, lnNullPos - 1 ) ), ['], ["] ) ENDIF + lcValue = THIS.encode_SpecialCodes_1_31(lcValue) RETURN lcValue ENDPROC @@ -19097,6 +19160,8 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -19120,6 +19185,34 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE + PROCEDURE decode_SpecialCodes_1_31 + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT) + * tcText (!@ IN ) Decodifica los primeros 31 caracteres ASCII de {nCode} a CHR(nCode) + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcText + LOCAL I + FOR I = 0 TO 31 + tcText = STRTRAN( tcText, '{' + TRANSFORM(I) + '}', CHR(I) ) + ENDFOR + RELEASE I + RETURN tcText + ENDPROC + + + + PROCEDURE encode_SpecialCodes_1_31 + LPARAMETERS tcText + LOCAL I + FOR I = 0 TO 31 + tcText = STRTRAN( tcText, CHR(I), '{' + TRANSFORM(I) + '}' ) + ENDFOR + RELEASE I + RETURN tcText + ENDPROC + + + PROCEDURE setParsedHeadInfoLine LPARAMETERS tcHeadInfoLine THIS.setParsedInfoLine( THIS, tcHeadInfoLine ) @@ -19129,13 +19222,30 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE PROCEDURE setParsedInfoLine LPARAMETERS toObject, tcInfoLine - LOCAL lcAsignacion, lcCurDir - IF LEFT(tcInfoLine,1) == '.' - lcAsignacion = 'toObject' + tcInfoLine - ELSE - lcAsignacion = 'toObject.' + tcInfoLine - ENDIF - &lcAsignacion. + + LOCAL lcAsignacion, lcCurDir, lcValue, loEx as Exception + + TRY + IF LEFT(tcInfoLine,1) == '.' + lcAsignacion = 'toObject' + tcInfoLine + ELSE + lcAsignacion = 'toObject.' + tcInfoLine + ENDIF + + lcValue = GETWORDNUM(lcAsignacion, 2, '=') + + IF TYPE(lcValue) = "C" THEN + lcAsignacion = GETWORDNUM(lcAsignacion, 1, '=') + '= THIS.encode_SpecialCodes_1_31(' + GETWORDNUM(lcAsignacion, 2, '=') + ')' + ENDIF + + &lcAsignacion. + + CATCH TO loEx + loEx.UserValue = loEx.UserValue + 'lcAsignacion = [' + TRANSFORM(lcAsignacion) + ']' + CR_LF + THROW + ENDTRY + + RETURN ENDPROC