From 050fd9001ccc85e6c30ea5b216c9a010efa616c7 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 13 Jan 2015 19:39:45 +0100 Subject: [PATCH 01/10] =?UTF-8?q?Changeset:=20629=20v1.19.41=20-=20Bug=20F?= =?UTF-8?q?ix=20db2:=20Detecci=C3=B3n=20err=C3=B3nea=20de=20tabla=20inv?= =?UTF-8?q?=C3=A1lida=20cuando=20el=20tama=C3=B1o=20es=20inferior=20a=2032?= =?UTF-8?q?8=20bytes.=20L=C3=ADmite=20m=C3=ADnimo=20cambiado=20a=2065=20by?= =?UTF-8?q?tes.=20-=20Bug=20Fix=20vcx/scx:=20Detecci=C3=B3n=20err=C3=B3nea?= =?UTF-8?q?=20de=20estructuras=20PROCEDURE/ENDPROC=20cuando=20se=20usan=20?= =?UTF-8?q?como=20par=C3=A1metros=20en=20LPARAMETERS=20(Ryan=20Harris)=20-?= =?UTF-8?q?=20Bug=20Fix=20db2:=20Detecci=C3=B3n=20err=C3=B3nea=20de=20tabl?= =?UTF-8?q?a=20inv=C3=A1lida=20cuando=20el=20tama=C3=B1o=20es=20inferior?= =?UTF-8?q?=20a=20328=20bytes.=20L=C3=ADmite=20m=C3=ADnimo=20cambiado=20a?= =?UTF-8?q?=2065=20bytes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rg__c_foxbin2prg__EvaluarConfiguracion.prg | 6 +- foxbin2prg.prg | 344 +++++++++--------- 2 files changed, 180 insertions(+), 170 deletions(-) diff --git a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg index 52b42c5..afabb67 100644 --- a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg +++ b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg @@ -238,7 +238,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O STRTOFILE( 'MNX_Conversion_Support: 1' + CRLF, 'TESTS\DATOS_TEST\foxbin2prg.cfg', 1 ) STRTOFILE( 'DBF_Conversion_Support: 2' + CRLF, 'TESTS\DATOS_TEST\foxbin2prg.cfg', 1 ) STRTOFILE( 'DBC_Conversion_Support: 1' + CRLF, 'TESTS\DATOS_TEST\foxbin2prg.cfg', 1 ) - STRTOFILE( 'ShowProgressbar: 0' + CRLF, 'TESTS\DATOS_TEST\foxbin2prg.cfg', 1 ) + STRTOFILE( 'DontShowProgress: 1' + CRLF, 'TESTS\DATOS_TEST\foxbin2prg.cfg', 1 ) STRTOFILE( 'DontShowErrors: 1' + CRLF, 'TESTS\DATOS_TEST\foxbin2prg.cfg', 1 ) *STRTOFILE( 'Recompile: ' + CRLF, 'TESTS\DATOS_TEST\foxbin2prg.cfg', 1 ) STRTOFILE( 'NoTimestamps: 0' + CRLF, 'TESTS\DATOS_TEST\foxbin2prg.cfg', 1 ) @@ -290,7 +290,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O ADDPROPERTY( loFB2P_Esperado, 'MNX_Conversion_Support', 1 ) ADDPROPERTY( loFB2P_Esperado, 'DBF_Conversion_Support', 2 ) ADDPROPERTY( loFB2P_Esperado, 'DBC_Conversion_Support', 1 ) - ADDPROPERTY( loFB2P_Esperado, 'n_ShowProgressbar', 1 ) + ADDPROPERTY( loFB2P_Esperado, 'n_ShowProgressbar', 0 ) ADDPROPERTY( loFB2P_Esperado, 'l_ShowErrors', .T. ) ADDPROPERTY( loFB2P_Esperado, 'l_Recompile', .T. ) ADDPROPERTY( loFB2P_Esperado, 'l_NoTimestamps', .T. ) @@ -999,7 +999,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O *-- DATOS DE ENTRADA STORE 0 TO lnCodError lcSeteo = 'n_ShowProgressbar' - leValorEsperado = 1 + leValorEsperado = .T. *-- TEST diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b075263..b99f0fa 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -10585,7 +10585,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE *-- 1.Bloque de código del método en su posición original TRY LOCAL lnLineCount, laLine(1), I, lnTextNodes, tcSorted, lnProtectedLine, lcMethod, lnLine_Len, lcLine, llProcOpen ; - , laLineasExclusion(1), lnBloquesExclusion ; + , laLineasExclusion(1), lnBloquesExclusion, lcLastLine ; , loEx AS EXCEPTION IF NOT EMPTY(m.tcMethod) AND LEFT(m.tcMethod,9) == "ENDPROC"+CHR(13)+CHR(10) @@ -10593,187 +10593,197 @@ DEFINE CLASS c_conversor_bin_a_prg AS C_CONVERSOR_BASE ENDIF IF NOT EMPTY(m.tcMethod) - DIMENSION laLine(1) - STORE '' TO laLine - STORE 0 TO lnTextNodes + WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' + DIMENSION laLine(1) + STORE '' TO laLine, lcLine, lcLastLine + STORE 0 TO lnTextNodes - lnLineCount = ALINES(laLine, m.tcMethod) && NO aplicar nungún formato ni limpieza, que es el CÓDIGO FUENTE + lnLineCount = ALINES(laLine, m.tcMethod) && NO aplicar nungún formato ni limpieza, que es el CÓDIGO FUENTE - *-- Delete beginning empty lines before first "PROCEDURE", that is the first not empty line. - FOR I = 1 TO lnLineCount - IF EMPTY(laLine(I)) OR LEFT( LTRIM(laLine(I)),1 ) = '*' - *-- Skip empty and commented lines - ELSE - IF I > 1 - FOR X = I-1 TO 1 STEP -1 - ADEL(laLine, X) - ENDFOR - lnLineCount = lnLineCount - I + 1 - DIMENSION laLine(lnLineCount) - ENDIF - EXIT - ENDIF - ENDFOR - - *-- Delete ending empty lines after last "ENDPROC", that is the last not empty line. - FOR I = lnLineCount TO 1 STEP -1 - IF EMPTY(laLine(I)) OR LEFT( LTRIM(laLine(I)),1 ) = '*' - ADEL(laLine, I) - ELSE - IF I < lnLineCount - lnLineCount = I - DIMENSION laLine(lnLineCount) - ENDIF - EXIT - ENDIF - ENDFOR - - *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF - THIS.identificarBloquesDeExclusion( @laLine, lnLineCount, .F., @laLineasExclusion, @lnBloquesExclusion ) - - *-- Analyze and count line methods, get method names and consolidate block code - FOR I = 1 TO lnLineCount - IF toFoxBin2Prg.l_DropNullCharsFromCode - laLine(I) = CHRTRAN( laLine(I), C_NULL_CHAR, '' ) - ENDIF - - lnLine_Len = LEN( laLine(I) ) - lcLine = LTRIM( laLine(I), 0, C_TAB, ' ' ) - - DO CASE - CASE laLineasExclusion(I) - IF tnMethodCount > 0 AND llProcOpen - taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF + *-- Delete beginning empty lines before first "PROCEDURE", that is the first not empty line. + FOR I = 1 TO lnLineCount + IF EMPTY(laLine(I)) OR LEFT( LTRIM(laLine(I)),1 ) = '*' + *-- Skip empty and commented lines ELSE - *-- Invalid method code, as outer code added for tools like ReFox or others, is cleaned up - ENDIF - - CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 10) ) == 'PROCEDURE ' - tnMethodCount = tnMethodCount + 1 - DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) - taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 11) ) - taMethods(tnMethodCount, 2) = tnMethodCount - taMethods(tnMethodCount, 3) = '' - taCode(tnMethodCount) = 'PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF - llProcOpen = .T. - - CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 9) ) == 'FUNCTION ' && NOT VALID WITH VFP IDE, BUT 3rd. PARTY SOFTWARE CAN USE IT - tnMethodCount = tnMethodCount + 1 - DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) - taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 10) ) - taMethods(tnMethodCount, 2) = tnMethodCount - taMethods(tnMethodCount, 3) = '' - taCode(tnMethodCount) = 'PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF - llProcOpen = .T. - - CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 17) ) == 'HIDDEN PROCEDURE ' - tnMethodCount = tnMethodCount + 1 - DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) - taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 18) ) - taMethods(tnMethodCount, 2) = tnMethodCount - taMethods(tnMethodCount, 3) = 'HIDDEN ' - taCode(tnMethodCount) = 'HIDDEN PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF - llProcOpen = .T. - - CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 16) ) == 'HIDDEN FUNCTION ' && NOT VALID WITH VFP IDE, BUT 3rd. PARTY SOFTWARE CAN USE IT - tnMethodCount = tnMethodCount + 1 - DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) - taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 17) ) - taMethods(tnMethodCount, 2) = tnMethodCount - taMethods(tnMethodCount, 3) = 'HIDDEN ' - taCode(tnMethodCount) = 'HIDDEN PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF - llProcOpen = .T. - - CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 20) ) == 'PROTECTED PROCEDURE ' - tnMethodCount = tnMethodCount + 1 - DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) - taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 21) ) - taMethods(tnMethodCount, 2) = tnMethodCount - taMethods(tnMethodCount, 3) = 'PROTECTED ' - taCode(tnMethodCount) = 'PROTECTED PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF - llProcOpen = .T. - - CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 19) ) == 'PROTECTED FUNCTION ' && NOT VALID WITH VFP IDE, BUT 3rd. PARTY SOFTWARE CAN USE IT - tnMethodCount = tnMethodCount + 1 - DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) - taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 20) ) - taMethods(tnMethodCount, 2) = tnMethodCount - taMethods(tnMethodCount, 3) = 'PROTECTED ' - taCode(tnMethodCount) = 'PROTECTED PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF - llProcOpen = .T. - - CASE lnTextNodes = 0 AND LEFT(lcLine, 7) == 'ENDPROC' - IF lnLine_Len >= 7 AND LEFT( UPPER( CHRTRAN( lcLine , '&'+CHR(9)+CHR(0), ' ') ) + ' ' ,8) == 'ENDPROC ' - *-- Es el final de estructura ENDPROC - IF NOT llProcOpen - *-- Esto no es normal, porque hay más de un ENDPROC, por lo que se ignora. - LOOP + IF I > 1 + FOR X = I-1 TO 1 STEP -1 + ADEL(laLine, X) + ENDFOR + lnLineCount = lnLineCount - I + 1 + DIMENSION laLine(lnLineCount) ENDIF - ELSE - *-- Es otra cosa (variable, etc) - taCode(tnMethodCount) = taCode(tnMethodCount) + lcLine + CR_LF - LOOP + EXIT ENDIF + ENDFOR - taCode(tnMethodCount) = taCode(tnMethodCount) + lcLine &&+ CR_LF - llProcOpen = .F. - - CASE lnTextNodes = 0 AND LEFT(laLine(I), 7) == 'ENDFUNC' && NOT VALID WITH VFP IDE, BUT 3rd. PARTY SOFTWARE CAN USE IT - IF lnLine_Len >= 7 AND LEFT( UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' ' ,8) == 'ENDFUNC ' - *-- Es el final de estructura ENDPROC - IF NOT llProcOpen - *-- Esto no es normal, porque hay más de un ENDFUNC, por lo que se ignora. - LOOP + *-- Delete ending empty lines after last "ENDPROC", that is the last not empty line. + FOR I = lnLineCount TO 1 STEP -1 + IF EMPTY(laLine(I)) OR LEFT( LTRIM(laLine(I)),1 ) = '*' + ADEL(laLine, I) + ELSE + IF I < lnLineCount + lnLineCount = I + DIMENSION laLine(lnLineCount) ENDIF - lcLine = STRTRAN( lcLine, 'ENDFUNC', 'ENDPROC' ) - ELSE - *-- Es otra cosa (variable, etc) - taCode(tnMethodCount) = taCode(tnMethodCount) + lcLine + CR_LF - LOOP + EXIT + ENDIF + ENDFOR + + *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF + .identificarBloquesDeExclusion( @laLine, lnLineCount, .F., @laLineasExclusion, @lnBloquesExclusion ) + + *-- Analyze and count line methods, get method names and consolidate block code + FOR I = 1 TO lnLineCount + IF toFoxBin2Prg.l_DropNullCharsFromCode + laLine(I) = CHRTRAN( laLine(I), C_NULL_CHAR, '' ) ENDIF - taCode(tnMethodCount) = taCode(tnMethodCount) + lcLine &&+ CR_LF - llProcOpen = .F. + lnLine_Len = LEN( laLine(I) ) + lcLastLine = lcLine + lcLine = laLine(I) + .get_SeparatedLineAndComment( @lcLine ) + lcLine = LTRIM( lcLine, 0, C_TAB, ' ' ) - *CASE tnMethodCount = 0 OR NOT llProcOpen AND LEFT( LTRIM(laLine(I)),1 ) = '*' - CASE tnMethodCount = 0 OR NOT llProcOpen - *-- Skip empty and commented lines before methods begin - *-- Aquí como condición podría poner: NOT llProcOpen AND LEFT(laLine(I), 7) # 'ENDPROC', pero abarcaría demasiado. - - OTHERWISE && Method Code - taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF - - ENDCASE - ENDFOR - - *-- Agrego los métodos definidos, pero sin código (Protected/Reserved3) - FOR I = 1 TO tnPropsAndComments_Count - lcMethod = CHRTRAN( taPropsAndComments(I,1), '*', '' ) - IF LEFT( taPropsAndComments(I,1), 1 ) == '*' AND ASCAN( taMethods, lcMethod, 1, 0, 1, 1+2+4+8 ) = 0 - tnMethodCount = tnMethodCount + 1 - DIMENSION taMethods(tnMethodCount, 3) &&, taCode(tnMethodCount) - taMethods(tnMethodCount, 1) = lcMethod - taMethods(tnMethodCount, 2) = 0 - - lnProtectedLine = ASCAN( taProtected, lcMethod, 1, 0, 1, 1+2+4+8 ) - - IF lnProtectedLine = 0 THEN - IF tnProtected_Count = 0 - lnProtectedLine = 0 + DO CASE + CASE laLineasExclusion(I) + IF tnMethodCount > 0 AND llProcOpen + taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF ELSE - lnProtectedLine = ASCAN( taProtected, lcMethod + '^', 1, 0, 1, 1+2+4+8 ) + *-- Invalid method code, as outer code added for tools like ReFox or others, is cleaned up ENDIF + CASE RIGHT(lcLastLine,1) == ';' + *-- Saltear el análisis de esta línea, que es continuación de la anterior (lcLastLine). + taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF + LOOP + + CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 10) ) == 'PROCEDURE ' + tnMethodCount = tnMethodCount + 1 + DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) + taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 11) ) + taMethods(tnMethodCount, 2) = tnMethodCount + taMethods(tnMethodCount, 3) = '' + taCode(tnMethodCount) = 'PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF + llProcOpen = .T. + + CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 9) ) == 'FUNCTION ' && NOT VALID WITH VFP IDE, BUT 3rd. PARTY SOFTWARE CAN USE IT + tnMethodCount = tnMethodCount + 1 + DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) + taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 10) ) + taMethods(tnMethodCount, 2) = tnMethodCount + taMethods(tnMethodCount, 3) = '' + taCode(tnMethodCount) = 'PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF + llProcOpen = .T. + + CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 17) ) == 'HIDDEN PROCEDURE ' + tnMethodCount = tnMethodCount + 1 + DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) + taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 18) ) + taMethods(tnMethodCount, 2) = tnMethodCount + taMethods(tnMethodCount, 3) = 'HIDDEN ' + taCode(tnMethodCount) = 'HIDDEN PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF + llProcOpen = .T. + + CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 16) ) == 'HIDDEN FUNCTION ' && NOT VALID WITH VFP IDE, BUT 3rd. PARTY SOFTWARE CAN USE IT + tnMethodCount = tnMethodCount + 1 + DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) + taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 17) ) + taMethods(tnMethodCount, 2) = tnMethodCount + taMethods(tnMethodCount, 3) = 'HIDDEN ' + taCode(tnMethodCount) = 'HIDDEN PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF + llProcOpen = .T. + + CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 20) ) == 'PROTECTED PROCEDURE ' + tnMethodCount = tnMethodCount + 1 + DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) + taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 21) ) + taMethods(tnMethodCount, 2) = tnMethodCount + taMethods(tnMethodCount, 3) = 'PROTECTED ' + taCode(tnMethodCount) = 'PROTECTED PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF + llProcOpen = .T. + + CASE lnTextNodes = 0 AND UPPER( LEFT(lcLine, 19) ) == 'PROTECTED FUNCTION ' && NOT VALID WITH VFP IDE, BUT 3rd. PARTY SOFTWARE CAN USE IT + tnMethodCount = tnMethodCount + 1 + DIMENSION taMethods(tnMethodCount, 3), taCode(tnMethodCount) + taMethods(tnMethodCount, 1) = RTRIM( SUBSTR(lcLine, 20) ) + taMethods(tnMethodCount, 2) = tnMethodCount + taMethods(tnMethodCount, 3) = 'PROTECTED ' + taCode(tnMethodCount) = 'PROTECTED PROCEDURE ' + taMethods(tnMethodCount, 1) + CR_LF && laLine(I) + CR_LF + llProcOpen = .T. + + CASE lnTextNodes = 0 AND LEFT(lcLine, 7) == 'ENDPROC' + IF lnLine_Len >= 7 AND LEFT( UPPER( CHRTRAN( lcLine , '&'+CHR(9)+CHR(0), ' ') ) + ' ' ,8) == 'ENDPROC ' + *-- Es el final de estructura ENDPROC + IF NOT llProcOpen + *-- Esto no es normal, porque hay más de un ENDPROC, por lo que se ignora. + LOOP + ENDIF + ELSE + *-- Es otra cosa (variable, etc) + taCode(tnMethodCount) = taCode(tnMethodCount) + lcLine + CR_LF + LOOP + ENDIF + + taCode(tnMethodCount) = taCode(tnMethodCount) + lcLine &&+ CR_LF + llProcOpen = .F. + + CASE lnTextNodes = 0 AND LEFT(laLine(I), 7) == 'ENDFUNC' && NOT VALID WITH VFP IDE, BUT 3rd. PARTY SOFTWARE CAN USE IT + IF lnLine_Len >= 7 AND LEFT( UPPER( CHRTRAN( laLine(I) , '&'+CHR(9)+CHR(0), ' ') ) + ' ' ,8) == 'ENDFUNC ' + *-- Es el final de estructura ENDPROC + IF NOT llProcOpen + *-- Esto no es normal, porque hay más de un ENDFUNC, por lo que se ignora. + LOOP + ENDIF + lcLine = STRTRAN( lcLine, 'ENDFUNC', 'ENDPROC' ) + ELSE + *-- Es otra cosa (variable, etc) + taCode(tnMethodCount) = taCode(tnMethodCount) + lcLine + CR_LF + LOOP + ENDIF + + taCode(tnMethodCount) = taCode(tnMethodCount) + lcLine &&+ CR_LF + llProcOpen = .F. + + *CASE tnMethodCount = 0 OR NOT llProcOpen AND LEFT( LTRIM(laLine(I)),1 ) = '*' + CASE tnMethodCount = 0 OR NOT llProcOpen + *-- Skip empty and commented lines before methods begin + *-- Aquí como condición podría poner: NOT llProcOpen AND LEFT(laLine(I), 7) # 'ENDPROC', pero abarcaría demasiado. + + OTHERWISE && Method Code + taCode(tnMethodCount) = taCode(tnMethodCount) + laLine(I) + CR_LF + + ENDCASE + ENDFOR + + *-- Agrego los métodos definidos, pero sin código (Protected/Reserved3) + FOR I = 1 TO tnPropsAndComments_Count + lcMethod = CHRTRAN( taPropsAndComments(I,1), '*', '' ) + IF LEFT( taPropsAndComments(I,1), 1 ) == '*' AND ASCAN( taMethods, lcMethod, 1, 0, 1, 1+2+4+8 ) = 0 + tnMethodCount = tnMethodCount + 1 + DIMENSION taMethods(tnMethodCount, 3) &&, taCode(tnMethodCount) + taMethods(tnMethodCount, 1) = lcMethod + taMethods(tnMethodCount, 2) = 0 + + lnProtectedLine = ASCAN( taProtected, lcMethod, 1, 0, 1, 1+2+4+8 ) + IF lnProtectedLine = 0 THEN - taMethods(tnMethodCount, 3) = '' + IF tnProtected_Count = 0 + lnProtectedLine = 0 + ELSE + lnProtectedLine = ASCAN( taProtected, lcMethod + '^', 1, 0, 1, 1+2+4+8 ) + ENDIF + + IF lnProtectedLine = 0 THEN + taMethods(tnMethodCount, 3) = '' + ELSE + taMethods(tnMethodCount, 3) = 'HIDDEN ' + ENDIF ELSE - taMethods(tnMethodCount, 3) = 'HIDDEN ' + taMethods(tnMethodCount, 3) = 'PROTECTED ' ENDIF - ELSE - taMethods(tnMethodCount, 3) = 'PROTECTED ' ENDIF - ENDIF - ENDFOR + ENDFOR + ENDWITH && THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' ENDIF CATCH TO loEx @@ -21297,8 +21307,8 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION lcStr = FREAD(lnHandle,1) && 0 File type tn_HexFileType = EVALUATE( TRANSFORM(ASC(lcStr),'@0') ) - IF lnFileLength < 328 OR .fileTypeDescription(tn_HexFileType) = 'Unknown' - ERROR 15, tc_FileName + IF lnFileLength < 65 OR .fileTypeDescription(tn_HexFileType) = 'Unknown' + ERROR 15, tc_FileName + ' (FileLength < 65)' ENDIF .n_HexFileType = tn_HexFileType From aa45c6c32be441da42fbb8c26b0dcbba6541a873 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 13 Jan 2015 20:08:50 +0100 Subject: [PATCH 02/10] =?UTF-8?q?Changeset:=20630=20-=20Actualizaci=C3=B3n?= =?UTF-8?q?=20log=20en=20cabecera=20prg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 3 +++ 1 file changed, 3 insertions(+) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b99f0fa..e75c4f0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -129,6 +129,8 @@ * 06/01/2015 FDBOZZO v1.19.40 Mejora: Permitir configurar la barra de progreso para que solamente aparezca cuando se procesan múltiples archivos y no cuando se procesa solo 1 (Jim Nelson) * 07/01/2015 FDBOZZO v1.19.40 Bug fix db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Mike Potjer) * 07/01/2015 FDBOZZO v1.19.40 Mejora scx/vcx: Detección de nombres de objeto duplicados para notificar casos de corrupción +* 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. * * *--------------------------------------------------------------------------------------------------- @@ -188,6 +190,7 @@ * 30/12/2014 Ryan Harris Reporte bug dbc v1.19.38: Los datos de DisplayClass y DisplayClassLibrary tenían el valor de "Default" en vez del propio (Agregado en v1.19.39) * 06/01/2015 Jim Nelson Mejora v1.19.39: Permitir configurar la barra de progreso para que solamente aparezca cuando se procesan múltiples archivos y no cuando se procesa solo 1 (Agregado en v1.19.40) * 06/01/2015 Mike Potjer Reporte bug db2: [Error 12, Variable "TCOUTPUTFILE" is not found] cuando DBF_Conversion_Support=4 y el archivo de salida es igual al generado (Agregado en v1.19.40) +* 13/01/2015 Ryan Harris Reporte bug vcx/scx v1.19.40: Detección errónea de estructuras PROCEDURE/ENDPROC cuando se usan como parámetros LPARAMETERS en línea aparte (Arreglado en v1.19.41) * * *--------------------------------------------------------------------------------------------------- From 7c4f053a6113cdda38bea48a00b540e6d4429154 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 13 Jan 2015 21:41:06 +0100 Subject: [PATCH 03/10] =?UTF-8?q?Changeset:=20631=20-=20Mejora=20gr=C3=A1f?= =?UTF-8?q?ica=20de=20la=20barra=20de=20progreso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 313 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 274 insertions(+), 39 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e75c4f0..6deb31d 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -3201,67 +3201,50 @@ DEFINE CLASS frm_avance AS FORM + [] ; + [] - ADD OBJECT shp_base AS shape WITH ; Top = 28, ; Left = 12, ; Height = 13, ; Width = 604, ; - Curvature = 15, ; + Curvature = 8, ; + BorderWidth = 8, ; + BackColor = 14215910, ; + BorderColor = 14215910, ; Name = "shp_base" - ADD OBJECT shp_avance AS shape WITH ; Top = 28, ; Left = 12, ; Height = 13, ; Width = 36, ; - Curvature = 15, ; - BackColor = RGB(255,255,128), ; - BorderColor = RGB(255,0,0), ; + Curvature = 8, ; + BackColor = 6734335, ; + BorderColor = 10476031, ; + BorderWidth = 1, ; Name = "shp_Avance" - - ADD OBJECT lbl_tarea AS label WITH ; - BackStyle = 0, ; - Caption = ".", ; - Height = 17, ; - Left = 12, ; - Top = 8, ; - Width = 604, ; - Name = "lbl_Tarea" - - ADD OBJECT shp_base2 AS shape WITH ; Top = 64, ; Left = 12, ; Height = 13, ; Width = 604, ; - Curvature = 15, ; + Curvature = 8, ; + BorderWidth = 0, ; + BackColor = 14215910, ; + BorderColor = 14215910, ; Name = "shp_base2" - ADD OBJECT shp_avance2 AS shape WITH ; Top = 64, ; Left = 12, ; Height = 13, ; Width = 36, ; - Curvature = 15, ; - BackColor = RGB(255,255,128), ; - BorderColor = RGB(255,0,0), ; + Curvature = 8, ; + BackColor = 6734335, ; + BorderColor = 10476031, ; + BorderWidth = 1, ; Name = "shp_Avance2" - - ADD OBJECT lbl_tarea2 AS label WITH ; - BackStyle = 0, ; - Caption = ".", ; - Height = 17, ; - Left = 12, ; - Top = 44, ; - Width = 604, ; - Name = "lbl_Tarea2" - - ADD OBJECT cmdCancel AS commandbutton WITH ; Top = 84, ; Left = 252, ; @@ -3271,6 +3254,255 @@ DEFINE CLASS frm_avance AS FORM Enabled = .F., ; Name = "cmdCancel" + ADD OBJECT lin_1 AS shape WITH ; + Top = 28, ; + Left = 32, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_1" + + ADD OBJECT lin_2 AS shape WITH ; + Top = 28, ; + Left = 52, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_2" + + ADD OBJECT lin_3 AS shape WITH ; + Top = 28, ; + Left = 72, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_3" + + ADD OBJECT lin_4 AS shape WITH ; + Top = 28, ; + Left = 92, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_4" + + ADD OBJECT lin_5 AS shape WITH ; + Top = 28, ; + Left = 112, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_5" + + ADD OBJECT lin_6 AS shape WITH ; + Top = 28, ; + Left = 132, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_6" + + ADD OBJECT lin_7 AS shape WITH ; + Top = 28, ; + Left = 152, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_7" + + ADD OBJECT lin_8 AS shape WITH ; + Top = 28, ; + Left = 172, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_8" + + ADD OBJECT lin_9 AS shape WITH ; + Top = 28, ; + Left = 192, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_9" + + ADD OBJECT lin_10 AS shape WITH ; + Top = 28, ; + Left = 212, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_10" + + ADD OBJECT lin_11 AS shape WITH ; + Top = 28, ; + Left = 232, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_11" + + ADD OBJECT lin_12 AS shape WITH ; + Top = 28, ; + Left = 252, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_12" + + ADD OBJECT lin_13 AS shape WITH ; + Top = 28, ; + Left = 272, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_13" + + ADD OBJECT lin_14 AS shape WITH ; + Top = 28, ; + Left = 292, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_14" + + ADD OBJECT lin_15 AS shape WITH ; + Top = 28, ; + Left = 312, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_15" + + ADD OBJECT lin_16 AS shape WITH ; + Top = 28, ; + Left = 332, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_16" + + ADD OBJECT lin_17 AS shape WITH ; + Top = 28, ; + Left = 352, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_17" + + ADD OBJECT lin_18 AS shape WITH ; + Top = 28, ; + Left = 372, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_18" + + ADD OBJECT lin_19 AS shape WITH ; + Top = 28, ; + Left = 392, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_19" + + ADD OBJECT lin_20 AS shape WITH ; + Top = 28, ; + Left = 412, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_20" + + ADD OBJECT lin_21 AS shape WITH ; + Top = 28, ; + Left = 432, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_21" + + ADD OBJECT lin_22 AS shape WITH ; + Top = 28, ; + Left = 452, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_22" + + ADD OBJECT lin_23 AS shape WITH ; + Top = 28, ; + Left = 472, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_23" + + ADD OBJECT lin_24 AS shape WITH ; + Top = 28, ; + Left = 492, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_24" + + ADD OBJECT lin_25 AS shape WITH ; + Top = 28, ; + Left = 512, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_25" + + ADD OBJECT lin_26 AS shape WITH ; + Top = 28, ; + Left = 532, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_26" + + ADD OBJECT lin_27 AS shape WITH ; + Top = 28, ; + Left = 552, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_27" + + ADD OBJECT lin_28 AS shape WITH ; + Top = 28, ; + Left = 572, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_28" + + ADD OBJECT lin_29 AS shape WITH ; + Top = 28, ; + Left = 592, ; + Height = 53, ; + Width = 0, ; + BorderColor = 16777215, ; + Name = "lin_29" + + ADD OBJECT lbl_tarea AS label WITH ; + BackStyle = 0, ; + Caption = ".", ; + Height = 17, ; + Left = 12, ; + Top = 8, ; + Width = 604, ; + Name = "lbl_Tarea" + + ADD OBJECT lbl_tarea2 AS label WITH ; + BackStyle = 0, ; + Caption = ".", ; + Height = 17, ; + Left = 12, ; + Top = 44, ; + Width = 604, ; + Name = "lbl_Tarea2" PROCEDURE AvanceDelProceso LPARAMETERS tcTexto, tnValor, tnTotal, tnTipo @@ -3334,10 +3566,10 @@ DEFINE CLASS frm_avance AS FORM PROCEDURE Init LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' - loLang = _SCREEN.o_FoxBin2Prg_Lang - THIS.CAPTION = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' - THIS.nValue = 0 - THIS.nValue2 = 0 + loLang = _SCREEN.o_FoxBin2Prg_Lang + THIS.CAPTION = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' + THIS.nValue = 0 + THIS.nValue2 = 0 ENDPROC @@ -21310,9 +21542,12 @@ DEFINE CLASS CL_DBF_UTILS AS SESSION lcStr = FREAD(lnHandle,1) && 0 File type tn_HexFileType = EVALUATE( TRANSFORM(ASC(lcStr),'@0') ) - IF lnFileLength < 65 OR .fileTypeDescription(tn_HexFileType) = 'Unknown' + DO CASE + CASE lnFileLength < 65 ERROR 15, tc_FileName + ' (FileLength < 65)' - ENDIF + CASE .fileTypeDescription(tn_HexFileType) = 'Unknown' + ERROR 15, tc_FileName + ENDCASE .n_HexFileType = tn_HexFileType lcStr = FREAD(lnHandle,3) && 1-3 Last update (YYMMDD) From 0c6626bec5e9560c43c4a5c30b3a6442cd027896 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Tue, 13 Jan 2015 23:27:50 +0100 Subject: [PATCH 04/10] =?UTF-8?q?Changeset:=20632=20-=20Actualizaci=C3=B3n?= =?UTF-8?q?=20versi=C3=B3n=20PJX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 2 +- foxbin2prg.pjt | Bin 677563 -> 676814 bytes foxbin2prg.pjx | Bin 9123 -> 9123 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index f5b98aa..be83bd0 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): _ProductName = "FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = "40" +_Revision = "41" _LanguageID = "1034" _AutoIncrement = "0" * diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 9f0b36729cbfc7592671427dd340f30c4de8394c..8d4a53a352b9297e5369b38dc8a9e692ad653cba 100644 GIT binary patch delta 42972 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 MLsN^%JCt4n0F<&%xBvhE delta 281 zcmZ4NzSy0`fS-|NBg-}x4l{ETBMT#A!^wwO{^)@?W){X43{c<}qM+cW00gEcCLkeJ z7iI>YcxDC#Gh;Jz^UZHqPl#~V1u`)x7#W#ZOkOA~Kly>QD&x$_4N?YdPqY{qF2+o@ zkdEOnF*X4jY-urhfs6!uzXk(CWDC>e-O}|;|LrH+$TTnuEn}LzU#6bvjOk_vStdr# z3-UlCjV;VfCl|8IPyQgUI=NrYl Date: Wed, 14 Jan 2015 20:11:07 +0100 Subject: [PATCH 05/10] =?UTF-8?q?Changeset:=20633=20-=20Arreglo=20de=20sep?= =?UTF-8?q?araci=C3=B3n=20de=20lineas=20y=20comentarios=20-=20Arreglo=20de?= =?UTF-8?q?=20test=20unitarios=20sobre=20configuraci=C3=B3n=20CFG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...n2prg__c_foxbin2prg__EvaluarConfiguracion.prg | 4 ++-- foxbin2prg.prg | 16 ++++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg index afabb67..d20a73a 100644 --- a/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg +++ b/TESTS/ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion.prg @@ -290,7 +290,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O ADDPROPERTY( loFB2P_Esperado, 'MNX_Conversion_Support', 1 ) ADDPROPERTY( loFB2P_Esperado, 'DBF_Conversion_Support', 2 ) ADDPROPERTY( loFB2P_Esperado, 'DBC_Conversion_Support', 1 ) - ADDPROPERTY( loFB2P_Esperado, 'n_ShowProgressbar', 0 ) + ADDPROPERTY( loFB2P_Esperado, 'n_ShowProgressbar', 1 ) ADDPROPERTY( loFB2P_Esperado, 'l_ShowErrors', .T. ) ADDPROPERTY( loFB2P_Esperado, 'l_Recompile', .T. ) ADDPROPERTY( loFB2P_Esperado, 'l_NoTimestamps', .T. ) @@ -999,7 +999,7 @@ DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__EvaluarConfiguracion AS FxuTestCase O *-- DATOS DE ENTRADA STORE 0 TO lnCodError lcSeteo = 'n_ShowProgressbar' - leValorEsperado = .T. + leValorEsperado = 1 *-- TEST diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 6deb31d..a6ddb03 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2853,7 +2853,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF ln_AT_Cmt > 0 tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) ) - tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9) ) && Quito TABS + tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9), ' ' ) && Quito TABS y espacios ENDIF RETURN (ln_AT_Cmt > 0) @@ -4393,13 +4393,12 @@ DEFINE CLASS C_CONVERSOR_BASE AS SESSION *--------------------------------------------------------------------------------------------------- LPARAMETERS tcLine, tcComment LOCAL ln_AT_Cmt + tcComment = '' ln_AT_Cmt = AT( '&'+'&', tcLine) IF ln_AT_Cmt > 0 tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) ) - tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9) ) && Quito TABS - ELSE - tcComment = '' + tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9), ' ' ) && Quito TABS y espacios ENDIF RELEASE tcLine, tcComment @@ -13703,13 +13702,12 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM *--------------------------------------------------------------------------------------------------- LPARAMETERS tcLine, tcComment LOCAL ln_AT_Cmt + tcComment = '' ln_AT_Cmt = AT( '&'+'&', tcLine) IF ln_AT_Cmt > 0 tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) ) - tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9) ) && Quito TABS - ELSE - tcComment = '' + tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9), ' ' ) && Quito TABS y espacios ENDIF RELEASE tcLine, tcComment @@ -13792,9 +13790,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION IF ln_AT_Cmt > 0 tcComment = LTRIM( SUBSTR( tcLine, ln_AT_Cmt + 2 ) ) - tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9) ) && Quito TABS - ELSE - tcComment = '' + tcLine = RTRIM( LEFT( tcLine, ln_AT_Cmt - 1 ), 0, CHR(9), ' ' ) && Quito TABS y espacios ENDIF RELEASE tcLine, tcComment From 5ee6024c7ce5820dff867ca5b61ba93deb510c72 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 14 Jan 2015 20:13:38 +0100 Subject: [PATCH 06/10] =?UTF-8?q?Changeset:=20634=20-=20Nuevo=20caso=20de?= =?UTF-8?q?=20prueba=20para=20probar=20la=20correcci=C3=B3n=20de=20la=20de?= =?UTF-8?q?tecci=C3=B3n=20entre=20l=C3=ADneas=20con=20";"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../procedure_in_lparameters.vc2 | 39 ++++++++++++++++++ .../procedure_in_lparameters.vct | Bin 0 -> 1516 bytes .../procedure_in_lparameters.vcx | Bin 0 -> 1359 bytes 3 files changed, 39 insertions(+) create mode 100644 TESTS/DATOS_READONLY/procedure_in_lparameters.vc2 create mode 100644 TESTS/DATOS_READONLY/procedure_in_lparameters.vct create mode 100644 TESTS/DATOS_READONLY/procedure_in_lparameters.vcx diff --git a/TESTS/DATOS_READONLY/procedure_in_lparameters.vc2 b/TESTS/DATOS_READONLY/procedure_in_lparameters.vc2 new file mode 100644 index 0000000..f250471 --- /dev/null +++ b/TESTS/DATOS_READONLY/procedure_in_lparameters.vc2 @@ -0,0 +1,39 @@ +*-------------------------------------------------------------------------------------------------------------------------------------------------------- +* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡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!! +*-------------------------------------------------------------------------------------------------------------------------------------------------------- +*< FOXBIN2PRG: Version="1.19" SourceFile="procedure_in_lparameters.vcx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +* +* +DEFINE CLASS custest AS custom + *< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" /> + + * + *m: createcsrhealthcodes + * + + Name = "custest" + + PROCEDURE createcsrhealthcodes + + + * + * Add values to cursor, row by row. + * + FOR lnIndex = 1 TO lnCount + + * + * Write values to csr + * + REPLACE CBO_Id WITH lnCBO_ID, Diagnosis WITH lcDiagnosis, AdmitDiagnosis WITH lcAdmitDiagnosis, ; && Try to Break FB2P + Procedure WITH lcProcedure IN csrHealthCareCodes + + ENDFOR + + * + * Return success flag. + * + RETURN llSuccess + ENDPROC + +ENDDEFINE diff --git a/TESTS/DATOS_READONLY/procedure_in_lparameters.vct b/TESTS/DATOS_READONLY/procedure_in_lparameters.vct new file mode 100644 index 0000000000000000000000000000000000000000..01fd5f3cfcdcf7b0072dd24361ac1d4f564bd437 GIT binary patch literal 1516 zcmeHG&2G~`5FV#ZQl|t}6#~SCQ6(yD(zXE_l^Z)oa8IZMKJJ4;%uuR-T z#K+q^JEW8Ps-K9Mi#Ugs?%<3EB1dHwcwzyR-Gz?~35PlQBf;%0KjL1@eG#2-FNjb4 zu+Ih7Yjbzy^Yq&cOLFHA^pW%G@#&5<-J^Lo_c3U#5Z=2GGhTuv=m8wSEqIsGDaSt) zWpaO!qQsNJS>8pc&0)rsWvUDs)%@u0vCMZnyL^m=vXR}>6Rlb*6@DXIy zE)U5c(mW+0@}=v*$_ zncu!;V=yvCeSSvWxQnhukcG)8uGdt0DV4f~htVMB7qf{dx7m8P(_}hk!mLmI0>e$l^n;#9|LRwzwSLC!B=Yl};_5@=PS! zFrzb@XEGI;j)Y>=x4RaB7PtWNEKWk-$*|~#dEZe zX%qB@RPS%6p#S6qk_cad6TDAnGp8DBT~GV()y_CdLOE8>v+Mi4anDn{-yaNI&-Y#b zVX?vYCS#Mu_zPnb*LZ!Or9bd69^&^}nmZ|tP0ep-%TJ-)n^~}ogIeKoex2tJdxltD literal 0 HcmV?d00001 From 9edb34290b7b830feefccabf1436211848497d7a Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 14 Jan 2015 22:09:16 +0100 Subject: [PATCH 07/10] Changeset: 635 - Mejora visual en el caption --- foxbin2prg.prg | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index a6ddb03..7a9c193 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2052,6 +2052,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF .n_ShowProgressbar <> 0 THEN .cargar_frm_avance() + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '>Txt -' ) ENDIF DO CASE @@ -2109,6 +2110,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF .n_ShowProgressbar <> 0 THEN .cargar_frm_avance() + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '>Bin -' ) ENDIF DO CASE @@ -2205,6 +2207,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO IF .n_ShowProgressbar <> 0 THEN .cargar_frm_avance() + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '>Txt -' ) ENDIF .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_BINARY_TO_TEXT_LOC ) @@ -2252,6 +2255,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO IF .n_ShowProgressbar <> 0 THEN .cargar_frm_avance() + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '>Bin -' ) ENDIF .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_TEXT_TO_BINARY_LOC ) @@ -3599,7 +3603,7 @@ DEFINE CLASS frm_interactive AS form DoCreate = .T. AutoCenter = .T. BorderStyle = 2 - Caption = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' - ' + _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_LOC + Caption = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' > - ' + _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_LOC ControlBox = .F. AlwaysOnTop = .T. BackColor = RGB(255,255,255) From 76f120da18d93d0d5cf4f4b4ad49f354f7c7387c Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Wed, 14 Jan 2015 22:24:48 +0100 Subject: [PATCH 08/10] Changeset: 636 - Mejora visual del caption --- foxbin2prg.prg | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 7a9c193..b04f0e4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2052,7 +2052,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF .n_ShowProgressbar <> 0 THEN .cargar_frm_avance() - .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '>Txt -' ) + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Bin>Txt) -' ) ENDIF DO CASE @@ -2110,7 +2110,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM IF .n_ShowProgressbar <> 0 THEN .cargar_frm_avance() - .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '>Bin -' ) + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Txt>Bin) -' ) ENDIF DO CASE @@ -2207,7 +2207,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- SE QUIEREN CONVERTIR A TEXTO TODOS LOS ARCHIVOS DE UN PROYECTO IF .n_ShowProgressbar <> 0 THEN .cargar_frm_avance() - .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '>Txt -' ) + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Bin>Txt) -' ) ENDIF .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_BINARY_TO_TEXT_LOC ) @@ -2255,7 +2255,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- SE QUIEREN CONVERTIR A BINARIO TODOS LOS ARCHIVOS DE UN PROYECTO IF .n_ShowProgressbar <> 0 THEN .cargar_frm_avance() - .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '>Bin -' ) + .o_Frm_Avance.Caption = STRTRAN( .o_Frm_Avance.Caption, '> -', '(Txt>Bin) -' ) ENDIF .writeLog( '> ' + loLang.C_CONVERT_ALL_FILES_IN_A_PROJECT_LOC + ': ' + loLang.C_TEXT_TO_BINARY_LOC ) @@ -3571,7 +3571,7 @@ DEFINE CLASS frm_avance AS FORM PROCEDURE Init LOCAL loLang as CL_LANG OF 'FOXBIN2PRG.PRG' loLang = _SCREEN.o_FoxBin2Prg_Lang - THIS.CAPTION = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' + THIS.CAPTION = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' > - ' + loLang.C_PROCESS_PROGRESS_LOC + ' (' + loLang.C_PRESS_ESC_TO_CANCEL + ')' THIS.nValue = 0 THIS.nValue2 = 0 ENDPROC @@ -3603,7 +3603,7 @@ DEFINE CLASS frm_interactive AS form DoCreate = .T. AutoCenter = .T. BorderStyle = 2 - Caption = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' > - ' + _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_LOC + Caption = 'FoxBin2Prg ' + _SCREEN.c_FB2PRG_EXE_Version + ' - ' + _SCREEN.o_FoxBin2Prg_Lang.C_CONVERT_FOLDER_LOC ControlBox = .F. AlwaysOnTop = .T. BackColor = RGB(255,255,255) From 0d3e185c404e1724bc0b848401c860e78bb74ce3 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 18 Jan 2015 21:25:45 +0100 Subject: [PATCH 09/10] Changeset: 637 EXE --- foxbin2prg.exe | Bin 505724 -> 508922 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/foxbin2prg.exe b/foxbin2prg.exe index 0e2604c5fe4deb5a6d6f87dc80aa904070f9d467..0b4964299ffdb97a5d3a410059b707862fc59347 100644 GIT binary patch delta 20811 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 K>c3vm(EkB<4n)@g delta 17860 zcmb`P2UHZ-+y9@L-I>{4dhbY66crUq>`GHn6a?%A39O3J1Wc@~U1K+Eys;#)Yt&ex z21|@Rn#78|w-^%>yAg?s@AvKiZhU{gbN=r+|2-M^`+1%_cW!;|otY*7Os)3%q5o$4 zJ~e8R3kgJ26NmcI;)`4O=XLc{!nkvOzndHN87$N{f6=F*P=D*`K1~gBc4vhmI+`5@ zdWv5cn`;dW@Yro5(anA`{c%jD@exG#2FauwPve(_Ia`#%$_v)rXxJM)vh zL2{aR`6JrM<}MRlx7OV!3t~U-t&R7W%3?2XbNJC^_}Y5<=m0^haW1cK-uSb}*7%>p zMIpgF`dH(7WLIuO3tvaye$kBHlxxYq+>Sgulu1r@Wl|@Ha%ZxAUFt!X1d4HeQzpq~ zyOZ8-Q6%4fQ4`74q+OBpb31e0v%$hRbHC#r!sq7U$D0Zz=8eZgyrYrKgC>rzibPPgsNe;p5SiXp=jg`!JcslLGm=H_O<6N5aK+m}h#?bVArQ<+v#9O3)H zy!eE72<#5Lz@DW#y8R;7QfOZkd~&%jH$M-c(st%cCxWZ8ri!dP@v;l;%{5Op5H#lA zCmYw_=J22Ee%PT*dh7Il-FG>e?N55WUwO%~Op15pl@}X1n)@Gj7eOB#|3IALXx?-@ z_`lYFffKL4bBFip|IpFwf1;zg#W8nt(FxhJyHlC;X+=riHAKFXdC3W{5IFvyTB7PA zl`ZksQWG?VQW7?xy-P(m)^#qEqFvNl6Yud1-s7E}%k3$p)EV7(yEG21Z5a_3zhy*Z zTl+iy%ioEgKg-;;#9NNy@*DFo$j)3IH_t2au93v$1M3XB{40a*+;3+-UE&?xQGl%L zVpWzzB-K%brOcHjEEC_p<%8H49-lI)n|DRk`nr@!HO)C^8nnIPh6+?iRhrUEfgF(O zdYAVHK?om5uS9Aczz0)TlA)Ui$Q+W)hO>UsBV^agT<2_v;BW4F)<jd&~H^DsZY(8snr-9N=!813k1?r||*{K?b2>S7ni4*x3gVNaB} zskz0aS`Ib6P}l0OOEtvn8e%TERL`}mw^dC9K8bsJnZLVKQ|Mv7ajCw%!K+OA$IDX2 zD_*>efbN$Y3U$rXFLw;>(+#&x5J7x7jhvLkrQz-2X}wmm;6?==aVuuelPh zugb;z`bwJ`Jj6KSx;%rHJamb^!OXiyqw~%{(x_?en8CB2v@LjJ%BJP$XxJWw6ta%G(%cwVE3P@Dzy=+_j_iQcm5+!YEm7SKX&mVVvyD-pPHn`tb^NsnM zt*!4&3=uyg7CB4f%C7g-G!Vuy$9@`bA%I2p(fG>UElU&Y+fNfwJVqyc=_V{^Jw6Rnqc1saLg#zmf zx#L2XAwNx>#pvDFuZUQDKTXusx{*S0-AHkHPjR3!jkR1S2C)fgTG!$^>%@f3{~xAL@yb4$5JBAjUnhCh-23cbb8jlcw}ID+KJ4*1moz zI=oR{BLJw8q@^f57Phgv8YxITFBW&zNPPwIgv2&!r5?gJ#fl_N6NE-=t}Kle+B17a z8X$PGTt(_9woxq2D@-fCqev5mxjC5BJ-(izb8|j2<`-t>ZyCo%jg-7SUM^N$HZ;gs z*u^-aFf}T&)8wz%`jJwwxMwLlHBzc67A|A|jFdve(`#73D9PJ>@jCS+10@-A(z1>1 zGP8^qHn7A|lAr6OjjB&a1;)bE_{<#R$W3hgD9J7E$R^d}LLcX678+yo^K);y_&o#<(@6<2C{RD`BwGosasCwu;IqkxR}vf+4Ta+v$fYY z?h?q3a=NEw!If4}kU1!4;&-Z9OK~}wh0et)*;gcrs7O_xrH+<7JrC|s-L{mGn_6JZ zGNu=1=H@)w!RCyXyiz=Oa<52El%AcDisd^3%XoNnR%ZIpffX)$i>pg+j#0I5tFYth zUE)&2T|5H~DHIc%oRXB#>)3AgdbAYkyW)G*;Yg7mrRAg>V~kme`MK%Fg4~>atj!py zhGG3aHH9a!d6y(l*H#Brw(4CEws?#bE`+h4$4Iq=+U)rlDNtN|lzEJmstJ1b!B})= zEhhmssl}DNqPy1B#?t;-RZ-MiIvIq-$(b zkyPF5!L`b(W?`hH;nG>dGc(eT{mLE`Nj3Tf-c{YMl#`pEotBk3DlI>fcV${S$`|*W z>h-kpqQ7(V(O`L*#*DO#qI+rz=l4_e>>Mw#Jd@-m5SwC>8gvZ(t1@LlZhj%ppdd0Q z!!mjb5?`u5M@oh-InS7$nZ`RMuVBbq)uXE#qf=~|Fb<>hA6q^EHDuK(!|hn@aZ)|; zh#fPHlRRwS?fn)wa7&=qGADkL7UMQO-feCVOteTd~elYHDed8=%wNY@T+_r#lpkC&>o?c%5UY%6?8#yr&N?+R<>8J&$e z!<|Fals06{&MO?5WK7S^&uGeKjhB2H4+vF#4wTNzU}=kp&c^KA5fu(c%KeZR{hjB2 zEp~0Z=iWHrVg@bc53M^-DsHgfocrdcmj-QWsH8MIkJKLC3*fc^-;8vAD zJ-xzRoh46@YBU+sNKNHP8ODJaR+ylXoh=v0Xk6(jD9q2yOO3(M%_+c8D)_81+cZJ) zuQ#xXn!=W1KSJn0C-9S9nyOYi%FHQ1c~TQBwHw!ry`CU>xejcly5GgTv`AKKBIewt zNVTtV1CyE%)iE|Y<#9WfJ5dTUT&|Hj^Y@Lv%vt&aquml4lI!93r+E!if+XHHWS~WCv(+o+$k+boitHd zxjaNB#K)$_#J2k^-{NO^3nd>V94c}zyOLq@SylQCJ%MJ$c;FB90* z$x@(OvuSGfR%83%bhc-*jZwrrWP2mVB+R+vz-;HC6If{>B3YfppAr$^AFj@u^a9?XPcJ zjO6it+vR1Y6%NEq+IY7z0V@(@5APnot8CR8vmSDjUai>ZCo1r(c%Q^h6dvo+IKAa2 zgPQmoQM3S0?AA(a0qevjg*})i1qltA<0q1jTfRL{VPl=5z=5^>1Y_Z_0~_>-*>6 zRIQ%Ax|+@w>t+UKVOl<)>ThbORy*Ppmy?iVOPC>fi_Xbx=nQOawxqDRGtf-6yR%|&lTF>#Q|&5Fjq4H} z-z_FKxTk8a*t4kZhvtiniA;&y){{BTlzhcaeOdTSshT*dKTDV?1^Fqd|1L&K&y>`p z*u;dSl-Ms)*=!^+3At(#$BN4(3@^+ZUdZ=R11mguHjp_YABJ@RtyQ04;HS12tbgU8GR7J~1EbFqVcc z*c0Ev-Mc_uXl{#xZ{aeA=Nk{cRL!=PX3O%{=^xcJ#YMn}gcC-13n{ky0S?AYMBi0;cB*|fP*4e^*W+swI-H#^0@ zv#PVlbEVp*UiEp#)zA+yQSD<>_{5(a@y?X2n%Xu~O`g2S*p^rBA!5=B)6`we)QS`m zPZ1Z>q@{X-Q$$NO;Y*&0$iEO?KP^>`Ojc)cs_UMvTE}s_vWL`+#g!yKe9mO_w)H^5x3W@O1JY1 zmOCH$cr9h~kk5cWmvVpYDu2*QmDP%-uHjVYf5oi^YgKz?TaWxkWvhzE?zEUJ&DAatCdqmZx z7d%(_{i2_K!R-x6HdPGfgJr7W{e&O9<@QEZ8IBdT7Jfh70EychSEWnRsr-JrYIxiw zP?M^3rv4R%_Y?MU;0ZsdO1P+sV{_6GT_Rjmzf~ya+u6!cyv>!nn_~V~Me0fyxv4J8 zGNDgRHs<4D&Q>?Jg<-eW&z)Uml8?_bcQug%?ZeERYN6cQf(#YG9(N(#=GRee zVR&jbTMi4_RKf2zOTz{{T}#5f&D^=NrU;U`aq=ut-($-bk-I=7ay0?z8+-ydr1m-hm^f(hn5cHy#=@HPLUSf;|>9}jvzNp6)Ufj<rf{drct|G7ZH ztodmv*pSMT_#ufu^E@KeuIa^_2QN_h!@Mliyc)P}WwYt|LqgTX`ka7?UxtciJ$O2Bwp6uKy*-gAUN(Jp{8E-?UaflFSf1(<* zxG`wD3QIYhn8hCBo1I4n;J9oZnc8##kbr=P1pK~ z2eUsbd$dfounk4Wr$%>6#*^;kSaeLcaR&CjgiIXOs_FR~uzWdA^)OFTJB7@vw=wIwOOEoEzagS*($@9-{i-8tDw47kG2KIPWRze?bn_%y=cSX&2-`&1#4Z7m#u^ zv9lMD!vbP2FW{1^Mdo!;4iGoXti?s}FEZ@E-Ib8K*iJaT{u;HA~`LYFEhR2KS)pXyf1oQr58+Pde>qdz#l^+lqoc8_k?zS3&jm|HQw;#1=z zyKwXHg2LSF9+BL9({77+%4Ul=UT7gSC{DjD_fVMqZ8=U6BgG(L3vno7vv12W{2%Y) zhqvYW8bK(o_M1Fe5SPkq^*y<-5Lm4FUH((F9WOWw;{`z+Pp7H)<$d|6hrLG1*F*}D z6eOI6k)0BiMqYP>0znW0#Yl=m;t~qPNvCmA6sx6Cekp#TQS5F1l^3&jRGQ86ig}Gi8}8lS|Ad2L<0?jw%bE= z7~B`!9J=#fqU+$n;1STj?jw2v&H=maCu)QPH^Gz#9tb@J2Og?R zeu*gbGSM&K*Wfhh-dBjuf<=L7KJ=`sMAyJN@Db>Jc%Snd*kljGD?sUWG&Kya;D{T@ z^d`|uFkVs6VCb}4c!Q!vw}9tCk9vdv2{wY)LC<b^yTMLc_=R)t?B~WwldKBUr^k;hn%F(0!vEQQI zfN<<@ChIXcP>6oeZC?xYrvc3m9t`~rp8vi9Uk2ZWUXN!mo;K(*@O|i-jw00shoVqv z&;wjWnh%Z!&w;+>CDQlc-e7~bNP)g0-7&$C4nsGLr40HWMfNI0M3Ta zsV0&$cr5r!=+FRU0-gZw0^KxFq%iOda60r$98JM=Or;Zb; z4!8tthHg3;H3mNf=RzB%h%^cO0^ABZ!8BE*xiGwjVHEW4PefV*7IX+o&|iIuegfA8 z--mWyiY@`S19yaOvO=V0jzme|Eax6j<_B$Zbp9j$`;A3F_L+E2H47I@Lz;B_~|AIn*{{&x!UU@wRjFV z4?GOq9C~21hIWDr!SkTM>ZGBQ;3Du*=(`CTs_lkV5bR(|)KF&}-C&prLlN|R9R0wv z!3Utv^w3Z`cr94$siEjT8d?r61{Xm8nxUb?;Ok&FBWj0Jj|YMAU!G!uXs8f8#|H7gHDJVi4UK_eKN5Tk zy<#1j4D65Ka~*od4)n7pq9phT^tm${`U$)qY=0K#pU2^a&<)-Q{px~-7J?6hBQ7HC zWesfvmw@Ff8k%%NLr1{RZ4v+X18!n1EQf(dGk-kzYWODxjyI7Hco=k-#~O+S*8@+6 zj(dq(f;)pJKzri$d+ zv=oMW;5E?CBebOW;ul8XO^viPvz?YA!Oaki_Cntg^t z4e(IH!Jp_1`1}%Fd?kLZP>tv**kzTLrf$(vN3bav!DJs`**+~DfuSq-BJ|*2v=kgb zG!Fa)^!Afl8V>#f`~dp;SuL#v?*+S`)6%ueTDk+i1NOLrpH1J=QeYs~e#Dj@&>8o% zGyq%=ycl}g11)_Oi2m;e!x6y8&ygt-i~_gDult^3cTgt?iNV$1YU!a~qM_gtaHv6| z=S~v+0)7Gxcb2G~C*EcUBTgW=jDharCsBKFeefjcyjl{C1P=z=)sg5}ghY3P(f<=+ zcmpuClgKv&s}pz!v_3(iJzyPzk$190KlGN!p*k)Oegr+DzeJtDEx=o#rw@`SAKV{& zB@=p>L_dN};IEgvFQYFfzG-t(Pgk6(d;wmW49y{YoSlU z(rpPF6`9(Dd9*tKJpnh4^}-Oe5S(^Gm$=F_8teg9++-RQfQQ4&VQ2#b3y_f+{!Rtl zAKVc7L~WVs)W*gVti#RT%y5|^!K1)Op{LZ7sV8_Mcpr492$=?gXM;b6?$uDHG2jK@ z8PMU)WSS1%1x|xDw=~JL8-|lG{L~U9Y$elG@CC3ZpsXO*^N5MV7lc2xKl<5&T1AGEHIZGy&y0~)!cY}Un!ap@& z7zRUFj!X_qWNHo$L-dRJLZ;Z`GG&Hi?FWxKA(MhF@A`U}c8GpQpgqGBDzA?qhTyfU zwnCw;6&f3XF@a#yw~az4dnpvs5ZiLFwvR$xK2+#9_;c{YbcIZBhbrXK2$2W|d6+_r zaSQ|h2>ucJ5RS3nBj7)v8)B<89{e+SD0GjH6`BP;4;~Nw5XTDeHE`Hyh4$h&489A# z5B)oi)8OC0c4HJ1^(a#491MTJFb8_pc!h3(Uw}75Crni6CHN(H>okQ)MZvwmkAFd7jwuxI z0h%8?82URLq2N^TZ_sy-D-;gS1pAs!C^Yn>LM>q^gkd3chjR*b0?z|~3@uz$C?C8H z+#I^qO@)?%FN2M@6>4x7Ee5^=PK7SQ@i+K4@TkAgolh0=Z;BgRtQRYx@0BXl4IBhE z1-(>g2YxL)3Wkqh_!D}fkB**$B`hf4K_3a%(X3|J(SntFI-1{5N7b8Sy9M3_?HQ?~ z_TXpW*3e%@>u3k~Z}1uDdvQ8C40gwYr0=MsKpg*oJ^c~?;{Yi*-ooIG1Y@A5;?TB0 z^MJpHK7vCJ_6NU(HgwXFJvac|2wLAoM=szG!1bVua5M$C0I!7ZouZ>Q;3ROrUhwtS z(PD5ff5iWEz#OBFR>Lp@3HCq-55bSE!C!#mpi8lT_G*a@1=zPhM;k}!s2}(d_zrZ? zSRE|`mw~$%>8Sn`9qk4OVnyu+eQAb{@D~ge4Nfxa=*A))4Q_?~qzMLbF>1R~M=M~M z3T_5He1ncogTDlS^^K19Z$p8=hrquFufL?I{zdLV({!fD8BB1kC9kqiY4Ltgqj`sYjqYUsg@J;9+{?yS* z@Fwuc$2xk9Kbe!;VmSu8yhInh)lnq)0r)laG_9Vpz;D18B|Z7u>1j4N1WSA*^a~d~ zooI{x?*v1XyPkIX=_x1@p%Hu)xFG>sJq?b+79LyxCp#xh@P$v(~}Xr3M}O7>Dv){S`9u1-cf`CPtg%`sc|g!bKn`!{@e7F z4PFiI4m}LVr{J~V)zF8&(-Q-K3y%687u=(#5^yoN5p>9ps08>nxIJ{qMf|`hxEB z2(8$b4S{Z!Y@i1sn+uTY>^E#|6Rt!E2y} z9R|7#J^^k59r^=Ws59~dcZ4=Yml$X(42d6U>$22TZ#`qe;wFAQ`Vd;{DT`i*EqT@$bkuZ2QtY$yoF8n8Qfvus1VTx{qdxF7hD ziw)NQIyO`<5t|JdW4h(-$1X&aR&SsIC+E(jm2S?j7Kowwa^o1+mJIj9^1IBv+?}x&EOI=JVD?s^EBfFr=ej@wZ8Q#K@YL+!z-Z)_+v)0Tb$$6*`y zdL}lec+7S|z>NxcP<4^c<0+ZZ7I7gQ_l~Bl<0HZx$rsa1cQ07M8&u>;WNSq{7sQWZ?Q?u#sKUIK9DVw z7dEMlP@6vBtI!G9q^9Fy{lU)Iq&i_^x(YfCM=Ep>HmNVMNzDM?g>HaNY5_K>gX$sv zKL=dGF4eywrVtV=>8(&t>{5?_v%x;trRuX3vcn!Q54;unH8z<&!K1*s1@B(XePE?CD?LBfLr{g(BKrT_uwS3 zb2sbgUtu^7yI@GIyNEKdHh806py#d^Al#b;eC`o9qj^RW1Az+$ti z9o7PH-+OvW#^O@FJ(>_KVR1QRW1z#}9^gV-18!Ih)S&~mZ{V#y20Dbb;t+TccsSOI z+Kmkq7KbJV8=BxzJP}+9eGs8|a!2&P8HR#XobaK69(BZ?4}1f<{saTrBJ{2T z--Mop$oCAq3mkJBenhstU9c{I^PzVl@N7)Loe=mjbSmP+Wdx!Z;Kk4xh!ZCeHykkX z=RADJ7I z1jXV&5vx8jH-1v#=wD^VEaAo%l6ppgwSyZE>bz9X6l>2xJcci`VaxU@E~YXYg+|$_ ziMCrO;>H*Ds^ceX2RANsP#ssS9o%@qlfD8xAt)3 zH6PVc-`c^AxxT8SjkSXtgM(BD-au7-WNti!7f8IV2Ut6}(R8M|>cQV+RDEP_6l$oB znbr<&>>sK+mRdWwaYZfFvDw Date: Sun, 18 Jan 2015 23:19:36 +0100 Subject: [PATCH 10/10] =?UTF-8?q?Changeset:=20638=20-=20Actualizaci=C3=B3n?= =?UTF-8?q?=20del=20archivo=20de=20versi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoxBin2PRGVersionFile.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/FoxBin2PRGVersionFile.txt b/FoxBin2PRGVersionFile.txt index aea4cd2..5d34353 100644 --- a/FoxBin2PRGVersionFile.txt +++ b/FoxBin2PRGVersionFile.txt @@ -2,8 +2,8 @@ Lparameters toUpdateInfo Local lcNote With toUpdateInfo - .VersionNumber = 'v1.19.40' - .VersionDate = Date(2015,01,11) + .VersionNumber = 'v1.19.41' + .VersionDate = Date(2015,01,18) .SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip' .Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG' @@ -17,6 +17,10 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg Change History ------------------------------------------------------------- +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. +- Bug Fix vcx/scx: Erroneous detection of PROCEDURE/ENDPROC structures when used as parameters of LPARAMETERS and start in new line (Ryan Harris) + 2015/01/11 v1.19.40 - Enhancement frx/lbx: Clean ASCII 0 from expression field for Dataenvironment, Cursors and Relations - Bug fix frx/lbx: When using Dataenvironment with more than one cursor, remaining cursors are lost