From faf06b5967ac8b5bbe4fd2451464d93596632899 Mon Sep 17 00:00:00 2001 From: fernando Date: Tue, 11 Feb 2014 21:10:30 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Changeset:=20164=20v1.19.11=20-=20Soporte?= =?UTF-8?q?=20de=20#IF=20#ENDIF=20anidados=20(se=20usa=20para=20saber=20qu?= =?UTF-8?q?=C3=A9=20c=C3=B3digo=20no=20evaluar=20en=20busca=20de=20los=20i?= =?UTF-8?q?dentificadores=20de=20PROCEDURE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ft__foxbin2prg__c_conversor_prg_a_dbf.prg | 4 -- TESTS/ut__foxbin2prg.prg | 4 -- foxbin2prg.prg | 70 +++++++++++++------ 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg b/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg index fdaffef..1cc0ea2 100644 --- a/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg +++ b/TESTS/ft__foxbin2prg__c_conversor_prg_a_dbf.prg @@ -107,7 +107,6 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) - loCnv.DBF_Conversion_Support = 2 oFXU_LIB.copiarArchivosParaTest( lc_File ) @@ -177,7 +176,6 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) - loCnv.DBF_Conversion_Support = 2 oFXU_LIB.copiarArchivosParaTest( lc_File ) @@ -248,7 +246,6 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) - loCnv.DBF_Conversion_Support = 2 oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) @@ -319,7 +316,6 @@ DEFINE CLASS ft__foxbin2prg__c_conversor_prg_a_dbf AS FxuTestCase OF FxuTestCase lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) - loCnv.DBF_Conversion_Support = 2 oFXU_LIB.copiarArchivosParaTest( FORCEEXT(lc_File,'*') ) diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index 2291856..302baec 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -291,8 +291,6 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) - loCnv.DBF_Conversion_Support = 2 - loCnv.l_UseTimestamps = .T. oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) @@ -367,8 +365,6 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) - loCnv.DBF_Conversion_Support = 2 - loCnv.l_UseTimestamps = .T. oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index b07b9cd..ef6d6d9 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -2785,28 +2785,47 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base EXTERNAL ARRAY ta_ID_Bloques, taBloquesExclusion TRY - LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ + LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord DIMENSION taBloquesExclusion(1,2) STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X, lnLen_IDFinBQ IF tnCodeLines > 1 IF EMPTY(ta_ID_Bloques) DIMENSION ta_ID_Bloques(2,2) - ta_ID_Bloques(1,1) = '#IF .F.' + ta_ID_Bloques(1,1) = '#IF' ta_ID_Bloques(1,2) = '#ENDI' - ta_ID_Bloques(2,1) = C_TEXT - ta_ID_Bloques(2,2) = C_ENDTEXT + ta_ID_Bloques(2,1) = 'TEXT' + ta_ID_Bloques(2,2) = 'ENDT' + lnID_Bloques_Count = ALEN( ta_ID_Bloques, 1 ) ENDIF *-- Búsqueda del ID de inicio de bloque FOR I = 1 TO tnCodeLines - lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) && Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt' + * Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt' + lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) IF THIS.lineIsOnlyCommentAndNoMetadata( @lcLine ) LOOP ENDIF - lnPrimerID = ASCAN( ta_ID_Bloques, lcLine, 1, 0, 1, 1+8 ) + lnPrimerID = 0 + + FOR X = 1 TO lnID_Bloques_Count + IF UPPER( LEFT( lcLine, LEN(ta_ID_Bloques(X,1)) ) ) == ta_ID_Bloques(X,1) + *-- Evaluar casos especiales + lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) ) + + DO CASE + CASE ta_ID_Bloques(X,1) == 'TEXT' AND NOT lcWord == 'TEXT' + LOOP + CASE ta_ID_Bloques(X,2) == 'ENDT' AND NOT lcWord == LEFT( 'ENDTEXT', LEN(lcWord) ) + LOOP + ENDCASE + + lnPrimerID = X + EXIT + ENDIF + ENDFOR IF lnPrimerID > 0 && Se ha identificado un ID de bloque excluyente tnBloquesExclusion = tnBloquesExclusion + 1 @@ -2816,13 +2835,20 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base * Búsqueda del ID de fin de bloque FOR I = I + 1 TO tnCodeLines - lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) && Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt' + * Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt' + lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) IF THIS.lineIsOnlyCommentAndNoMetadata( @lcLine ) LOOP ENDIF - IF LEFT( lcLine, lnLen_IDFinBQ ) == ta_ID_Bloques(lnPrimerID,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc) + lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) ) + + IF LEFT( UPPER(lcLine), lnLen_IDFinBQ ) == ta_ID_Bloques(lnPrimerID,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc) + *-- Evaluar casos especiales + IF ta_ID_Bloques(lnPrimerID,2) == 'ENDT' AND NOT lcWord == LEFT( 'ENDTEXT', LEN(lcWord) ) + LOOP + ENDIF taBloquesExclusion(tnBloquesExclusion,2) = I EXIT ENDIF @@ -3882,7 +3908,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF lnPos2 > 0 *-- Con comentarios - lcPAM_Name = RTRIM( SUBSTR( tcLine, lnPos+1, lnPos2 - lnPos - 1 ), 0, ' ', CHR(9) ) + lcPAM_Name = LOWER( RTRIM( SUBSTR( tcLine, lnPos+1, lnPos2 - lnPos - 1 ), 0, ' ', CHR(9) ) ) lcItem = lcPAM_Name + ' ' + SUBSTR( tcLine, lnPos2 + 3 ) + CR_LF *-- Separo propiedades y métodos @@ -3893,7 +3919,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF ELSE *-- Sin comentarios - lcPAM_Name = RTRIM( SUBSTR( tcLine, lnPos+1 ), 0, ' ', CHR(9) ) + lcPAM_Name = LOWER( RTRIM( SUBSTR( tcLine, lnPos+1 ), 0, ' ', CHR(9) ) ) lcItem = lcPAM_Name + IIF(ISALPHA(lcPAM_Name), '', ' ') + CR_LF *-- Separo propiedades y métodos @@ -3959,7 +3985,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ELSE toClase._Class = ALLTRIM( CHRTRAN( STREXTRACT( tcLine + ' OF ', ' AS ', ' OF ', 1, 1 ), ["'], [] ) ) ENDIF - toClase._ClassLoc = ALLTRIM( CHRTRAN( STREXTRACT( tcLine + ' OLEPUBLIC', ' OF ', ' OLEPUBLIC', 1, 1 ), ["'], [] ) ) + toClase._ClassLoc = LOWER( ALLTRIM( CHRTRAN( STREXTRACT( tcLine + ' OLEPUBLIC', ' OF ', ' OLEPUBLIC', 1, 1 ), ["'], [] ) ) ) toClase._OlePublic = ' OLEPUBLIC' $ UPPER(tcLine) toClase._Comentario = tc_Comentario toClase._Inicio = I @@ -4124,7 +4150,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF LEFT(tcLine, 7) == 'HIDDEN ' llBloqueEncontrado = .T. - toClase._HiddenProps = ALLTRIM( SUBSTR( tcLine, 8 ) ) + toClase._HiddenProps = LOWER( ALLTRIM( SUBSTR( tcLine, 8 ) ) ) ENDIF RETURN llBloqueEncontrado @@ -4144,9 +4170,9 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF LEFT(tcLine, 9) == '#INCLUDE ' llBloqueEncontrado = .T. IF THIS.c_Type = 'SCX' - toModulo._includeFile = ALLTRIM( CHRTRAN( SUBSTR( tcLine, 10 ), ["'], [] ) ) + toModulo._includeFile = LOWER( ALLTRIM( CHRTRAN( SUBSTR( tcLine, 10 ), ["'], [] ) ) ) ELSE - toClase._includeFile = ALLTRIM( CHRTRAN( SUBSTR( tcLine, 10 ), ["'], [] ) ) + toClase._includeFile = LOWER( ALLTRIM( CHRTRAN( SUBSTR( tcLine, 10 ), ["'], [] ) ) ) ENDIF ENDIF @@ -4296,7 +4322,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF LEFT(tcLine, 10) == 'PROTECTED ' llBloqueEncontrado = .T. - toClase._ProtectedProps = ALLTRIM( SUBSTR( tcLine, 11 ) ) + toClase._ProtectedProps = LOWER( ALLTRIM( SUBSTR( tcLine, 11 ) ) ) ENDIF RETURN llBloqueEncontrado @@ -7494,8 +7520,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base IF tnMethodCount > 0 THEN FOR I = 1 TO tnMethodCount lcMethod = CHRTRAN( taMethods(I,1), '^', '' ) - lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 0) - lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 8) + lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1) + lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 1+8) DO CASE CASE lnProtectedItem = 0 @@ -7581,17 +7607,17 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOOP ENDIF - lnProtectedItem = ASCAN(taProtected, taPropsAndValues(I,1), 1, 0, 0, 0) + lnProtectedItem = ASCAN(taProtected, taPropsAndValues(I,1), 1, 0, 0, 1) DO CASE CASE lnProtectedItem = 0 *-- Propiedad común - CASE taProtected(lnProtectedItem) == taPropsAndValues(I,1) + CASE LOWER( taProtected(lnProtectedItem) ) == LOWER( taPropsAndValues(I,1) ) *-- Propiedad protegida lcProtectedProp = lcProtectedProp + ',' + taPropsAndValues(I,1) - CASE taProtected(lnProtectedItem) == taPropsAndValues(I,1) + '^' + CASE LOWER( taProtected(lnProtectedItem) ) == LOWER( taPropsAndValues(I,1) + '^' ) *-- Propiedad oculta lcHiddenProp = lcHiddenProp + ',' + taPropsAndValues(I,1) @@ -7610,7 +7636,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base <<>> <> = <> ENDTEXT - lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 8) + lnComment = ASCAN( taPropsAndComments, taPropsAndValues(I,1), 1, 0, 1, 1+8) IF lnComment > 0 AND NOT EMPTY(taPropsAndComments(lnComment,2)) TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 @@ -7696,7 +7722,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOCAL lcOF_Classlib, llOleObject lcOF_Classlib = '' - llOleObject = ( ASCAN( ta_NombresObjsOle, toRegClass.OBJNAME, 1, 0, 1, 8) > 0 ) + llOleObject = ( ASCAN( ta_NombresObjsOle, toRegClass.OBJNAME, 1, 0, 1, 1+8) > 0 ) IF NOT EMPTY(toRegClass.CLASSLOC) lcOF_Classlib = 'OF "' + ALLTRIM(toRegClass.CLASSLOC) + '" ' From 4b2acb52cd0c5eecfc3204def2d3b276f6866b5f Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 13 Feb 2014 20:41:26 +0100 Subject: [PATCH 2/3] =?UTF-8?q?Changeset:=20165=20v.1.19.11=20-=20Optimiza?= =?UTF-8?q?ciones=20WITH/ENDWITH=20con=20una=20ganancia=20de=20velocidad?= =?UTF-8?q?=20de=20conversi=C3=B3n=20de=20hasta=20un=2016%=20m=C3=A1s=20r?= =?UTF-8?q?=C3=A1pido=20-=20Arreglo=20bug:=20Solo=20se=20contemplaba=20un?= =?UTF-8?q?=20nivel=20de=20#IF,=20dando=20un=20error=20si=20se=20enidaban?= =?UTF-8?q?=20m=C3=A1s=20niveles=20-=20Arreglo=20bug:=20Al=20regenerar=20e?= =?UTF-8?q?l=20PJX=20no=20siempre=20se=20establece=20el=20directorio=20por?= =?UTF-8?q?=20defecto=20correctamente=20-=20Agregado=20test=20unitario=20d?= =?UTF-8?q?e=20FoxUnit=20para=20comprobar=20el=20arreglo=20del=20#IF=20ani?= =?UTF-8?q?dado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...or_base__IdentificarBloquesDeExclusion.prg | 36 +- foxbin2prg.pj2 | 6 +- foxbin2prg.pjt | Bin 349888 -> 356224 bytes foxbin2prg.pjx | Bin 1583 -> 1583 bytes foxbin2prg.prg | 7393 +++++++++-------- 5 files changed, 3866 insertions(+), 3569 deletions(-) diff --git a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg index da7c064..b7570de 100644 --- a/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg +++ b/TESTS/ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion.prg @@ -8,7 +8,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as #DEFINE C_ENDPROC 'ENDPROC' #DEFINE C_TEXT 'TEXT' #DEFINE C_ENDTEXT 'ENDTEXT' - #DEFINE C_IF_F '#IF .F.' + #DEFINE C_IF_F '#IF' #DEFINE C_ENDIF '#ENDIF' icObj = NULL @@ -88,6 +88,40 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__IdentificarBloquesDeExclusion as ENDFUNC + ******************************************************************************************************************************************* + FUNCTION Deberia_ObtenerLaUbicacionDelBloque_IF_ENDIF_Externo_CuandoCodigoCon_IF_ENDIF_predominante_esEvaluado + LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(1,2) + LOCAL loObj AS c_conversor_prg_a_bin OF "FOXBIN2PRG.PRG" + loObj = THIS.icObj + + *-- Input and expected params + STORE '' TO lcMethod + laExpected_Pos(1,1) = 3 + laExpected_Pos(1,2) = 9 + + TEXT TO lcMethod NOSHOW TEXTMERGE FLAGS 1 PRETEXT 1+2+4 + <> myMethod_B + *-- Code Block + <> + <> + <> + *-- Code Block + <> + <> + <> + <> + ENDTEXT + + lnLineas = ALINES( laLineas, lcMethod ) + + *-- Test + loObj.identificarBloquesDeExclusion( @laLineas, lnLineas, , @laPos, @lnPos_Count ) + + THIS.Evaluate_results( @laExpected_Pos, @laPos, lnPos_Count ) + + ENDFUNC + + ******************************************************************************************************************************************* FUNCTION Deberia_ObtenerLaUbicacionDelBloque_TEXT_ENDTEXT_CuandoCodigoCon_TEXT_ENDTEXT_predominante_esEvaluado LOCAL lcMethod, laLineas(1), lnLineas, laPos(1,2), lnPos_Count, laExpected_Pos(2,2) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 7203a8a..f04a28a 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = " 253" +_Revision = " 260" _LanguageID = "1034" _AutoIncrement = "1" * @@ -50,8 +50,8 @@ MODIFY PROJECT 'foxbin2prg.pjx' NOWAIT NOSHOW NOPROJECTHOOK loProject = _VFP.Projects('foxbin2prg.pjx') WITH loProject.FILES - .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="0" ObjRev="0" /> - .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1145667342" ID="0" ObjRev="544" /> + .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="1131721714" ObjRev="0" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1145929891" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 24800a122278c26bdd6cde1e74002d098d97efc1..be6aaba8bcb20cc44aacf9067532bbe9a659a1d9 100644 GIT binary patch delta 56832 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 delta 52880 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 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index daa87501a3a8d3441dbba82278c5693003751d39..8569507c66d8413d59c5ef077bc86980c47b4575 100644 GIT binary patch delta 44 xcmZ3_vz~{=fRBlHBg+mJR!bvG3(Ls|S^l$uS%#C3u`03}nwVP{O@71b3;+n{3`YO} delta 44 xcmZ3_vz~{=fRBlDBg+mJRx>kmW0T1TS^l$uSw@qOu`05f7#mxfO@71b3;+g~3^4!z diff --git a/foxbin2prg.prg b/foxbin2prg.prg index ef6d6d9..1c22706 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -614,58 +614,60 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3 STORE '' TO tcBakFile_1, tcBakFile_2, tcBakFile_3 - lcNext_Bak = THIS.getNext_BAK( THIS.c_OutputFile ) - lcExt_1 = JUSTEXT( THIS.c_OutputFile ) - tcBakFile_1 = FORCEEXT(THIS.c_OutputFile, lcExt_1 + lcNext_Bak) - DO CASE - CASE INLIST( lcExt_1, THIS.c_PJ2, THIS.c_VC2, THIS.c_SC2, THIS.c_FR2 ; - , THIS.c_LB2, THIS.c_DB2, THIS.c_DC2, THIS.c_MN2, 'PJM' ) - *-- Extensiones TEXTO + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + lcNext_Bak = .getNext_BAK( .c_OutputFile ) + lcExt_1 = JUSTEXT( .c_OutputFile ) + tcBakFile_1 = FORCEEXT(.c_OutputFile, lcExt_1 + lcNext_Bak) - CASE lcExt_1 = 'DBF' - *-- DBF - lcExt_2 = 'FPT' - lcExt_3 = 'CDX' - tcBakFile_2 = FORCEEXT(THIS.c_OutputFile, lcExt_2 + lcNext_Bak) - tcBakFile_3 = FORCEEXT(THIS.c_OutputFile, lcExt_3 + lcNext_Bak) - - CASE lcExt_1 = 'DBC' - *-- DBC - lcExt_2 = 'DCT' - lcExt_3 = 'DCX' - tcBakFile_2 = FORCEEXT(THIS.c_OutputFile, lcExt_2 + lcNext_Bak) - tcBakFile_3 = FORCEEXT(THIS.c_OutputFile, lcExt_3 + lcNext_Bak) - - OTHERWISE - *-- PJX, VCX, SCX, FRX, LBX, MNX - lcExt_2 = LEFT(lcExt_1,2) + 'T' - tcBakFile_2 = FORCEEXT(THIS.c_OutputFile, lcExt_2 + lcNext_Bak) - - ENDCASE - - IF NOT EMPTY(lcExt_1) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) - *-- LOG DO CASE - CASE EMPTY(lcExt_2) - THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) ) - CASE EMPTY(lcExt_3) - THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 ) + CASE INLIST( lcExt_1, .c_PJ2, .c_VC2, .c_SC2, .c_FR2, .c_LB2, .c_DB2, .c_DC2, .c_MN2, 'PJM' ) + *-- Extensiones TEXTO + + CASE lcExt_1 = 'DBF' + *-- DBF + lcExt_2 = 'FPT' + lcExt_3 = 'CDX' + tcBakFile_2 = FORCEEXT(.c_OutputFile, lcExt_2 + lcNext_Bak) + tcBakFile_3 = FORCEEXT(.c_OutputFile, lcExt_3 + lcNext_Bak) + + CASE lcExt_1 = 'DBC' + *-- DBC + lcExt_2 = 'DCT' + lcExt_3 = 'DCX' + tcBakFile_2 = FORCEEXT(.c_OutputFile, lcExt_2 + lcNext_Bak) + tcBakFile_3 = FORCEEXT(.c_OutputFile, lcExt_3 + lcNext_Bak) + OTHERWISE - THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) + *-- PJX, VCX, SCX, FRX, LBX, MNX + lcExt_2 = LEFT(lcExt_1,2) + 'T' + tcBakFile_2 = FORCEEXT(.c_OutputFile, lcExt_2 + lcNext_Bak) + ENDCASE - *-- COPIA BACKUP - COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) + IF NOT EMPTY(lcExt_1) AND FILE( FORCEEXT(.c_OutputFile, lcExt_1) ) + *-- LOG + DO CASE + CASE EMPTY(lcExt_2) + .writeLog( C_BACKUP_OF_LOC + FORCEEXT(.c_OutputFile,lcExt_1) ) + CASE EMPTY(lcExt_3) + .writeLog( C_BACKUP_OF_LOC + FORCEEXT(.c_OutputFile,lcExt_1) + '/' + lcExt_2 ) + OTHERWISE + .writeLog( C_BACKUP_OF_LOC + FORCEEXT(.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) + ENDCASE - IF NOT EMPTY(lcExt_2) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) - COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) - ENDIF + *-- COPIA BACKUP + COPY FILE ( FORCEEXT(.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) - IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) - COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) + IF NOT EMPTY(lcExt_2) AND FILE( FORCEEXT(.c_OutputFile, lcExt_2) ) + COPY FILE ( FORCEEXT(.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) + ENDIF + + IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(.c_OutputFile, lcExt_3) ) + COPY FILE ( FORCEEXT(.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) + ENDIF ENDIF - ENDIF + ENDWITH && THIS CATCH TO toEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -685,109 +687,114 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE cargar_frm_avance THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") ENDPROC - - + + PROCEDURE EvaluarConfiguracion LPARAMETERS tcDontShowProgress, tcDontShowErrors, tcNoTimestamps, tcDebug, tcRecompile, tcExtraBackupLevels - + LOCAL lcConfigFile, llExisteConfig, laConfig(1), I, lcConfData, lcExt - lcConfigFile = FORCEEXT( THIS.c_Foxbin2prg_FullPath, 'CFG' ) - llExisteConfig = FILE( lcConfigFile ) - IF llExisteConfig - THIS.writeLog( C_CONFIGFILE_LOC + ' ' + lcConfigFile ) + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + lcConfigFile = FORCEEXT( .c_Foxbin2prg_FullPath, 'CFG' ) + llExisteConfig = FILE( lcConfigFile ) - FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) - laConfig(I) = LOWER( laConfig(I) ) + IF llExisteConfig + .writeLog( C_CONFIGFILE_LOC + ' ' + lcConfigFile ) - DO CASE - CASE LEFT( laConfig(I), 1 ) == '*' - LOOP + FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcConfigFile ), 1+4 ) + laConfig(I) = LOWER( laConfig(I) ) - CASE LEFT( laConfig(I), 10 ) == LOWER('Extension:') - lcConfData = ALLTRIM( SUBSTR( laConfig(I), 11 ) ) - lcExt = 'c_' + ALLTRIM( GETWORDNUM( lcConfData, 1, '=' ) ) - IF PEMSTATUS( THIS, lcExt, 5 ) - THIS.ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) - *THIS.writeLog( 'Reconfiguración de extensión:' + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > ' + C_EXTENSION_RECONFIGURATION_LOC + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) - ENDIF + DO CASE + CASE LEFT( laConfig(I), 1 ) == '*' + LOOP - CASE LEFT( laConfig(I), 17 ) == LOWER('DontShowProgress:') - tcDontShowProgress = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) ) + CASE LEFT( laConfig(I), 10 ) == LOWER('Extension:') + lcConfData = ALLTRIM( SUBSTR( laConfig(I), 11 ) ) + lcExt = 'c_' + ALLTRIM( GETWORDNUM( lcConfData, 1, '=' ) ) + IF PEMSTATUS( THIS, lcExt, 5 ) + .ADDPROPERTY( lcExt, UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) + *.writeLog( 'Reconfiguración de extensión:' + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > ' + C_EXTENSION_RECONFIGURATION_LOC + ' ' + lcExt + ' a ' + UPPER( ALLTRIM( GETWORDNUM( lcConfData, 2, '=' ) ) ) ) + ENDIF - CASE LEFT( laConfig(I), 15 ) == LOWER('DontShowErrors:') - tcDontShowErrors = ALLTRIM( SUBSTR( laConfig(I), 16 ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) ) + CASE LEFT( laConfig(I), 17 ) == LOWER('DontShowProgress:') + tcDontShowProgress = ALLTRIM( SUBSTR( laConfig(I), 18 ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) ) - CASE LEFT( laConfig(I), 13 ) == LOWER('NoTimestamps:') - tcNoTimestamps = ALLTRIM( SUBSTR( laConfig(I), 14 ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) + CASE LEFT( laConfig(I), 15 ) == LOWER('DontShowErrors:') + tcDontShowErrors = ALLTRIM( SUBSTR( laConfig(I), 16 ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) ) - CASE LEFT( laConfig(I), 6 ) == LOWER('Debug:') - tcDebug = ALLTRIM( SUBSTR( laConfig(I), 7 ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) ) + CASE LEFT( laConfig(I), 13 ) == LOWER('NoTimestamps:') + tcNoTimestamps = ALLTRIM( SUBSTR( laConfig(I), 14 ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) - CASE LEFT( laConfig(I), 18 ) == LOWER('ExtraBackupLevels:') - tcExtraBackupLevels = ALLTRIM( SUBSTR( laConfig(I), 19 ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) ) + CASE LEFT( laConfig(I), 6 ) == LOWER('Debug:') + tcDebug = ALLTRIM( SUBSTR( laConfig(I), 7 ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) ) - CASE LEFT( laConfig(I), 14 ) == LOWER('ClearUniqueID:') - THIS.l_ClearUniqueID = ( ALLTRIM( SUBSTR( laConfig(I), 15 ) ) == '1' ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(THIS.l_ClearUniqueID) ) + CASE LEFT( laConfig(I), 18 ) == LOWER('ExtraBackupLevels:') + tcExtraBackupLevels = ALLTRIM( SUBSTR( laConfig(I), 19 ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) ) - CASE LEFT( laConfig(I), 23 ) == LOWER('PJX_Conversion_Support:') - THIS.PJX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(THIS.PJX_Conversion_Support) ) + CASE LEFT( laConfig(I), 14 ) == LOWER('ClearUniqueID:') + .l_ClearUniqueID = ( ALLTRIM( SUBSTR( laConfig(I), 15 ) ) == '1' ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) - CASE LEFT( laConfig(I), 23 ) == LOWER('VCX_Conversion_Support:') - THIS.VCX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(THIS.VCX_Conversion_Support) ) + CASE LEFT( laConfig(I), 23 ) == LOWER('PJX_Conversion_Support:') + .PJX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(.PJX_Conversion_Support) ) - CASE LEFT( laConfig(I), 23 ) == LOWER('SCX_Conversion_Support:') - THIS.SCX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(THIS.SCX_Conversion_Support) ) + CASE LEFT( laConfig(I), 23 ) == LOWER('VCX_Conversion_Support:') + .VCX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(.VCX_Conversion_Support) ) - CASE LEFT( laConfig(I), 23 ) == LOWER('FRX_Conversion_Support:') - THIS.FRX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(THIS.FRX_Conversion_Support) ) + CASE LEFT( laConfig(I), 23 ) == LOWER('SCX_Conversion_Support:') + .SCX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(.SCX_Conversion_Support) ) - CASE LEFT( laConfig(I), 23 ) == LOWER('LBX_Conversion_Support:') - THIS.LBX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(THIS.LBX_Conversion_Support) ) + CASE LEFT( laConfig(I), 23 ) == LOWER('FRX_Conversion_Support:') + .FRX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(.FRX_Conversion_Support) ) - CASE LEFT( laConfig(I), 23 ) == LOWER('MNX_Conversion_Support:') - THIS.MNX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(THIS.MNX_Conversion_Support) ) + CASE LEFT( laConfig(I), 23 ) == LOWER('LBX_Conversion_Support:') + .LBX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(.LBX_Conversion_Support) ) - CASE LEFT( laConfig(I), 23 ) == LOWER('DBF_Conversion_Support:') - THIS.DBF_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(THIS.DBF_Conversion_Support) ) + CASE LEFT( laConfig(I), 23 ) == LOWER('MNX_Conversion_Support:') + .MNX_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(.MNX_Conversion_Support) ) - CASE LEFT( laConfig(I), 23 ) == LOWER('DBC_Conversion_Support:') - THIS.DBC_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) - THIS.writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(THIS.DBC_Conversion_Support) ) + CASE LEFT( laConfig(I), 23 ) == LOWER('DBF_Conversion_Support:') + .DBF_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(.DBF_Conversion_Support) ) - ENDCASE - ENDFOR - ENDIF + CASE LEFT( laConfig(I), 23 ) == LOWER('DBC_Conversion_Support:') + .DBC_Conversion_Support = INT( VAL( ALLTRIM( SUBSTR( laConfig(I), 24 ) ) ) ) + .writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(.DBC_Conversion_Support) ) - THIS.l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1') - THIS.l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1') - THIS.l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile)) - THIS.l_UseTimestamps = (TRANSFORM(tcNoTimestamps) == '0') - THIS.l_Debug = (TRANSFORM(tcDebug)=='1' OR FILE(FORCEEXT(THIS.c_Foxbin2prg_FullPath,'LOG'))) - THIS.n_ExtraBackupLevels = INT(VAL(TRANSFORM(tcExtraBackupLevels))) + ENDCASE + ENDFOR + ENDIF - THIS.writeLog( '---' ) - THIS.writeLog( '> l_ShowProgress: ' + TRANSFORM(THIS.l_ShowProgress) ) - THIS.writeLog( '> l_ShowErrors: ' + TRANSFORM(THIS.l_ShowErrors) ) - THIS.writeLog( '> l_Recompile: ' + TRANSFORM(THIS.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) - THIS.writeLog( '> l_UseTimestamps: ' + TRANSFORM(THIS.l_UseTimestamps) ) - THIS.writeLog( '> ClearUniqueID: ' + TRANSFORM(THIS.l_ClearUniqueID) ) - THIS.writeLog( '> l_Debug: ' + TRANSFORM(THIS.l_Debug) ) - THIS.writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(THIS.n_ExtraBackupLevels) ) + .l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1') + .l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1') + .l_Recompile = (EMPTY(tcRecompile) OR TRANSFORM(tcRecompile) == '1' OR DIRECTORY(tcRecompile)) + .l_UseTimestamps = (TRANSFORM(tcNoTimestamps) == '0') + .l_Debug = (TRANSFORM(tcDebug)=='1' OR FILE(FORCEEXT(.c_Foxbin2prg_FullPath,'LOG'))) + .n_ExtraBackupLevels = INT(VAL(TRANSFORM(tcExtraBackupLevels))) + + .writeLog( '---' ) + .writeLog( '> l_ShowProgress: ' + TRANSFORM(.l_ShowProgress) ) + .writeLog( '> l_ShowErrors: ' + TRANSFORM(.l_ShowErrors) ) + .writeLog( '> l_Recompile: ' + TRANSFORM(.l_Recompile) + ' (' + EVL(tcRecompile,'') + ')' ) + .writeLog( '> l_UseTimestamps: ' + TRANSFORM(.l_UseTimestamps) ) + .writeLog( '> ClearUniqueID: ' + TRANSFORM(.l_ClearUniqueID) ) + .writeLog( '> l_Debug: ' + TRANSFORM(.l_Debug) ) + .writeLog( '> n_ExtraBackupLevels: ' + TRANSFORM(.n_ExtraBackupLevels) ) + ENDWITH && THIS + + RETURN ENDPROC @@ -824,173 +831,175 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM , loEx AS EXCEPTION ; , loFSO AS Scripting.FileSystemObject - lnCodError = 0 + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + lnCodError = 0 - THIS.writeLog( THIS.c_Foxbin2prg_FullPath + CR_LF ; - + C_TAB + 'tc_InputFile: ' + TRANSFORM(tc_InputFile) + CR_LF ; - + C_TAB + 'tcType: ' + TRANSFORM(tcType) + CR_LF; - + C_TAB + 'tcTextName: ' + TRANSFORM(tcTextName) + CR_LF ; - + C_TAB + 'tlGenText: ' + TRANSFORM(tlGenText) + CR_LF ; - + C_TAB + 'tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) + CR_LF ; - + C_TAB + 'tcDebug: ' + TRANSFORM(tcDebug) + CR_LF ; - + C_TAB + 'tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) + CR_LF ; - + C_TAB + 'toModulo: ' + TRANSFORM(toModulo) + CR_LF ; - + C_TAB + 'toEx: ' + TRANSFORM(toEx) + CR_LF ; - + C_TAB + 'tlRelanzarError: ' + TRANSFORM(tlRelanzarError) + CR_LF ; - + C_TAB + 'tcOriginalFileName: ' + TRANSFORM(tcOriginalFileName) + CR_LF ; - + C_TAB + 'tcRecompile: ' + TRANSFORM(tcRecompile) + CR_LF ; - + C_TAB + 'tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) + .writeLog( .c_Foxbin2prg_FullPath + CR_LF ; + + C_TAB + 'tc_InputFile: ' + TRANSFORM(tc_InputFile) + CR_LF ; + + C_TAB + 'tcType: ' + TRANSFORM(tcType) + CR_LF; + + C_TAB + 'tcTextName: ' + TRANSFORM(tcTextName) + CR_LF ; + + C_TAB + 'tlGenText: ' + TRANSFORM(tlGenText) + CR_LF ; + + C_TAB + 'tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) + CR_LF ; + + C_TAB + 'tcDebug: ' + TRANSFORM(tcDebug) + CR_LF ; + + C_TAB + 'tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) + CR_LF ; + + C_TAB + 'toModulo: ' + TRANSFORM(toModulo) + CR_LF ; + + C_TAB + 'toEx: ' + TRANSFORM(toEx) + CR_LF ; + + C_TAB + 'tlRelanzarError: ' + TRANSFORM(tlRelanzarError) + CR_LF ; + + C_TAB + 'tcOriginalFileName: ' + TRANSFORM(tcOriginalFileName) + CR_LF ; + + C_TAB + 'tcRecompile: ' + TRANSFORM(tcRecompile) + CR_LF ; + + C_TAB + 'tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) ) - tcRecompile = EVL(tcRecompile,'1') - tcNoTimestamps = EVL(tcNoTimestamps,'0') + tcRecompile = EVL(tcRecompile,'1') + tcNoTimestamps = EVL(tcNoTimestamps,'0') - IF _VFP.STARTMODE > 0 - SET ESCAPE OFF - ENDIF - - loFSO = THIS.o_FSO - - DO CASE - CASE VERSION(5) < 900 - *-- '¡FOXBIN2PRG es solo para Visual FoxPro 9.0!' - MESSAGEBOX( C_FOXBIN2PRG_JUST_VFP_9_LOC, 0+64+4096, C_FOXBIN2PRG_WARN_CAPTION_LOC, 60000 ) - lnCodError = 1 - - CASE EMPTY(tc_InputFile) - *-- (Ejemplo de sintaxis y uso) - MESSAGEBOX( C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC, 0+64+4096, C_FOXBIN2PRG_INFO_SINTAX_LOC, 60000 ) - lnCodError = 1 - - OTHERWISE - *-- Ejecución normal - - *-- ARCHIVO DE CONFIGURACIÓN - THIS.EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ) - - IF THIS.l_ShowProgress - THIS.cargar_frm_avance() + IF _VFP.STARTMODE > 0 + SET ESCAPE OFF ENDIF - *-- Evaluación de FileSpec de entrada + loFSO = .o_FSO + DO CASE - CASE '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) - IF THIS.l_ShowErrors - *MESSAGEBOX( 'No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos).', 0+48+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) - MESSAGEBOX( C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) - ELSE - ERROR C_ASTERISK_EXT_NOT_ALLOWED_LOC - ENDIF + CASE VERSION(5) < 900 + *-- '¡FOXBIN2PRG es solo para Visual FoxPro 9.0!' + MESSAGEBOX( C_FOXBIN2PRG_JUST_VFP_9_LOC, 0+64+4096, C_FOXBIN2PRG_WARN_CAPTION_LOC, 60000 ) + lnCodError = 1 - CASE '*' $ JUSTSTEM( tc_InputFile ) - *-- SE QUIEREN TODOS LOS ARCHIVOS DE UNA EXTENSIÓN - lcFileSpec = FULLPATH( tc_InputFile ) - - DO CASE - CASE THIS.l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE tcRecompile == '1' - CD (JUSTPATH(lcFileSpec)) - ENDCASE - - THIS.c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' - - IF THIS.l_Debug - IF FILE( THIS.c_LogFile ) - ERASE ( THIS.c_LogFile ) - ENDIF - ENDIF - - lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) - - IF THIS.l_ShowProgress - THIS.o_Frm_Avance.nMAX_VALUE = lnFileCount - ENDIF - - FOR I = 1 TO lnFileCount - lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) - THIS.o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' - THIS.o_Frm_Avance.nVALUE = I - - IF THIS.l_ShowProgress - THIS.o_Frm_Avance.SHOW() - ENDIF - - IF FILE( lcFile ) - lnCodError = THIS.Convertir( lcFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) - ENDIF - ENDFOR + CASE EMPTY(tc_InputFile) + *-- (Ejemplo de sintaxis y uso) + MESSAGEBOX( C_FOXBIN2PRG_INFO_SINTAX_EXAMPLE_LOC, 0+64+4096, C_FOXBIN2PRG_INFO_SINTAX_LOC, 60000 ) + lnCodError = 1 OTHERWISE - *-- UN ARCHIVO INDIVIDUAL O CONSULTA DE SOPORTE DE ARCHIVO - IF LEN(NVL(tc_InputFile,'')) = 1 - *-- Consulta de soporte de conversión (compatibilidad con SourceSafe) - *-- SourceSafe consulta el tipo de soporte de cada archivo antes del Checkin/Checkout - *-- para saber si se puede hacer Diff y Merge. - *-- Para los códigos de tipo de archivo ver ayuda de "Type Property" + *-- Ejecución normal + + *-- ARCHIVO DE CONFIGURACIÓN + .EvaluarConfiguracion( @tcDontShowProgress, @tcDontShowErrors, @tcNoTimestamps, @tcDebug, @tcRecompile, @tcBackupLevels ) + + IF .l_ShowProgress + .cargar_frm_avance() + ENDIF + + *-- Evaluación de FileSpec de entrada + DO CASE + CASE '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) + IF .l_ShowErrors + *MESSAGEBOX( 'No se admiten extensiones * o ? porque es peligroso (se pueden pisar binarios con archivo xx2 vacíos).', 0+48+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) + MESSAGEBOX( C_ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, C_FOXBIN2PRG_ERROR_CAPTION_LOC, 60000 ) + ELSE + ERROR C_ASTERISK_EXT_NOT_ALLOWED_LOC + ENDIF + + CASE '*' $ JUSTSTEM( tc_InputFile ) + *-- SE QUIEREN TODOS LOS ARCHIVOS DE UNA EXTENSIÓN + lcFileSpec = FULLPATH( tc_InputFile ) + DO CASE - CASE tc_InputFile == FILETYPE_DATABASE - lnCodError = THIS.DBC_Conversion_Support - - CASE tc_InputFile == FILETYPE_FREETABLE - lnCodError = THIS.DBF_Conversion_Support - - CASE tc_InputFile == FILETYPE_FORM - lnCodError = THIS.SCX_Conversion_Support - - CASE tc_InputFile == FILETYPE_LABEL - lnCodError = THIS.LBX_Conversion_Support - - CASE tc_InputFile == FILETYPE_MENU - lnCodError = THIS.MNX_Conversion_Support - - CASE tc_InputFile == FILETYPE_REPORT - lnCodError = THIS.FRX_Conversion_Support - - CASE tc_InputFile == FILETYPE_CLASSLIB - lnCodError = THIS.VCX_Conversion_Support - - CASE tc_InputFile $ 'J' && PJX (J no exite en FoxPro, es un valor inventado para evitar conflicto con los tipos existentes) - lnCodError = THIS.PJX_Conversion_Support - - OTHERWISE - lnCodError = -1 + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE tcRecompile == '1' + CD (JUSTPATH(lcFileSpec)) ENDCASE - ELSE + .c_LogFile = ADDBS( JUSTPATH( lcFileSpec ) ) + STRTRAN( JUSTFNAME( lcFileSpec ), '*', '_ALL' ) + '.LOG' - IF EVL(tcType,'0') <> '0' AND EVL(tcTextName,'0') <> '0' - *-- Compatibilidad con SourceSafe - - IF NOT tlGenText - *-- COMPATIBILIDAD CON SOURCESAFE. 30/01/2014 - *-- Create BINARIO desde versión TEXTO - *-- Como el archivo de entrada siempre es el binario cuando se usa SCCAPI, - *-- para se debe regenerar el binario (tlGenText=.F.) se debe usar como - *-- archivo de entrada tcTextName en su lugar. Aquí los intercambio. - tc_InputFile = tcTextName - THIS.l_Recompile = .T. + IF .l_Debug + IF FILE( .c_LogFile ) + ERASE ( .c_LogFile ) ENDIF ENDIF - IF FILE(tc_InputFile) - ERASE ( tc_InputFile + '.ERR' ) + lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) + IF .l_ShowProgress + .o_Frm_Avance.nMAX_VALUE = lnFileCount + ENDIF + + FOR I = 1 TO lnFileCount + lcFile = FORCEPATH( laFiles(I,1), JUSTPATH( lcFileSpec ) ) + .o_Frm_Avance.lbl_TAREA.CAPTION = C_PROCESSING_LOC + ' ' + lcFile + '...' + .o_Frm_Avance.nVALUE = I + + IF .l_ShowProgress + .o_Frm_Avance.SHOW() + ENDIF + + IF FILE( lcFile ) + lnCodError = .Convertir( lcFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) + ENDIF + ENDFOR + + OTHERWISE + *-- UN ARCHIVO INDIVIDUAL O CONSULTA DE SOPORTE DE ARCHIVO + IF LEN(NVL(tc_InputFile,'')) = 1 + *-- Consulta de soporte de conversión (compatibilidad con SourceSafe) + *-- SourceSafe consulta el tipo de soporte de cada archivo antes del Checkin/Checkout + *-- para saber si se puede hacer Diff y Merge. + *-- Para los códigos de tipo de archivo ver ayuda de "Type Property" DO CASE - CASE THIS.l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) - CD (tcRecompile) - CASE tcRecompile == '1' - CD (JUSTPATH(tc_InputFile)) + CASE tc_InputFile == FILETYPE_DATABASE + lnCodError = .DBC_Conversion_Support + + CASE tc_InputFile == FILETYPE_FREETABLE + lnCodError = .DBF_Conversion_Support + + CASE tc_InputFile == FILETYPE_FORM + lnCodError = .SCX_Conversion_Support + + CASE tc_InputFile == FILETYPE_LABEL + lnCodError = .LBX_Conversion_Support + + CASE tc_InputFile == FILETYPE_MENU + lnCodError = .MNX_Conversion_Support + + CASE tc_InputFile == FILETYPE_REPORT + lnCodError = .FRX_Conversion_Support + + CASE tc_InputFile == FILETYPE_CLASSLIB + lnCodError = .VCX_Conversion_Support + + CASE tc_InputFile $ 'J' && PJX (J no exite en FoxPro, es un valor inventado para evitar conflicto con los tipos existentes) + lnCodError = .PJX_Conversion_Support + + OTHERWISE + lnCodError = -1 ENDCASE - THIS.c_LogFile = tc_InputFile + '.LOG' - ERASE ( THIS.c_LogFile ) + ELSE - lnCodError = THIS.Convertir( tc_InputFile, toModulo, toEx, .T., tcOriginalFileName ) + IF EVL(tcType,'0') <> '0' AND EVL(tcTextName,'0') <> '0' + *-- Compatibilidad con SourceSafe + + IF NOT tlGenText + *-- COMPATIBILIDAD CON SOURCESAFE. 30/01/2014 + *-- Create BINARIO desde versión TEXTO + *-- Como el archivo de entrada siempre es el binario cuando se usa SCCAPI, + *-- para se debe regenerar el binario (tlGenText=.F.) se debe usar como + *-- archivo de entrada tcTextName en su lugar. Aquí los intercambio. + tc_InputFile = tcTextName + .l_Recompile = .T. + ENDIF + ENDIF + + IF FILE(tc_InputFile) + ERASE ( tc_InputFile + '.ERR' ) + + DO CASE + CASE .l_Recompile AND LEN(tcRecompile) > 3 AND DIRECTORY(tcRecompile) + CD (tcRecompile) + CASE tcRecompile == '1' + CD (JUSTPATH(tc_InputFile)) + ENDCASE + + .c_LogFile = tc_InputFile + '.LOG' + ERASE ( .c_LogFile ) + + lnCodError = .Convertir( tc_InputFile, toModulo, toEx, .T., tcOriginalFileName ) + ENDIF ENDIF - ENDIF - ENDCASE + ENDCASE - ENDCASE + ENDCASE + ENDWITH && THIS CATCH TO toEx lnCodError = toEx.ERRORNO @@ -1047,7 +1056,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM lnCodError = 0 WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - loFSO = THIS.o_FSO + loFSO = .o_FSO .c_InputFile = FULLPATH( tc_InputFile ) IF ADIR( laDirFile, .c_InputFile, '', 1 ) = 0 @@ -1067,7 +1076,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .c_OriginalFileName = FORCEEXT(.c_OriginalFileName,'pjx') ENDIF - THIS.writeLog( '> c_OriginalFileName: ' + .c_OriginalFileName ) + .writeLog( '> c_OriginalFileName: ' + .c_OriginalFileName ) .o_Conversor = NULL IF NOT FILE(.c_InputFile) @@ -1078,7 +1087,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE lcExtension = 'VCX' - IF NOT INLIST(THIS.VCX_Conversion_Support, 1, 2) + IF NOT INLIST(.VCX_Conversion_Support, 1, 2) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_VC2 ) @@ -1086,7 +1095,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_VC2 ), '+N' ) CASE lcExtension = 'SCX' - IF NOT INLIST(THIS.SCX_Conversion_Support, 1, 2) + IF NOT INLIST(.SCX_Conversion_Support, 1, 2) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_SC2 ) @@ -1094,7 +1103,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_SC2 ), '+N' ) CASE lcExtension = 'PJX' - IF NOT INLIST(THIS.PJX_Conversion_Support, 1, 2) + IF NOT INLIST(.PJX_Conversion_Support, 1, 2) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 ) @@ -1102,7 +1111,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), '+N' ) CASE lcExtension = 'PJM' - IF NOT INLIST(THIS.PJX_Conversion_Support, 1, 2) + IF NOT INLIST(.PJX_Conversion_Support, 1, 2) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 ) @@ -1110,7 +1119,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_PJ2 ), '+N' ) CASE lcExtension = 'FRX' - IF NOT INLIST(THIS.FRX_Conversion_Support, 1, 2) + IF NOT INLIST(.FRX_Conversion_Support, 1, 2) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_FR2 ) @@ -1118,7 +1127,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_FR2 ), '+N' ) CASE lcExtension = 'LBX' - IF NOT INLIST(THIS.LBX_Conversion_Support, 1, 2) + IF NOT INLIST(.LBX_Conversion_Support, 1, 2) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_LB2 ) @@ -1126,7 +1135,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_LB2 ), '+N' ) CASE lcExtension = 'DBF' - IF NOT INLIST(THIS.DBF_Conversion_Support, 1, 2) + IF NOT INLIST(.DBF_Conversion_Support, 1, 2) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_DB2 ) @@ -1134,7 +1143,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DB2 ), '+N' ) CASE lcExtension = 'DBC' - IF NOT INLIST(THIS.DBC_Conversion_Support, 1, 2) + IF NOT INLIST(.DBC_Conversion_Support, 1, 2) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_DC2 ) @@ -1142,7 +1151,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_DC2 ), '+N' ) CASE lcExtension = 'MNX' - IF NOT INLIST(THIS.MNX_Conversion_Support, 1, 2) + IF NOT INLIST(.MNX_Conversion_Support, 1, 2) ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, .c_MN2 ) @@ -1150,7 +1159,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, .c_MN2 ), '+N' ) CASE lcExtension = .c_VC2 - IF THIS.VCX_Conversion_Support <> 2 + IF .VCX_Conversion_Support <> 2 ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'VCX' ) @@ -1159,7 +1168,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'VCT' ), '+N' ) CASE lcExtension = .c_SC2 - IF THIS.SCX_Conversion_Support <> 2 + IF .SCX_Conversion_Support <> 2 ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'SCX' ) @@ -1168,7 +1177,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'SCT' ), '+N' ) CASE lcExtension = .c_PJ2 - IF THIS.PJX_Conversion_Support <> 2 + IF .PJX_Conversion_Support <> 2 ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'PJX' ) @@ -1177,7 +1186,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'PJT' ), '+N' ) CASE lcExtension = .c_FR2 - IF THIS.FRX_Conversion_Support <> 2 + IF .FRX_Conversion_Support <> 2 ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'FRX' ) @@ -1186,7 +1195,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'FRT' ), '+N' ) CASE lcExtension = .c_LB2 - IF THIS.LBX_Conversion_Support <> 2 + IF .LBX_Conversion_Support <> 2 ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'LBX' ) @@ -1195,7 +1204,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'LBT' ), '+N' ) CASE lcExtension = .c_DB2 - IF THIS.DBF_Conversion_Support <> 2 + IF .DBF_Conversion_Support <> 2 ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'DBF' ) @@ -1205,7 +1214,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'CDX' ), '+N' ) CASE lcExtension = .c_DC2 - IF THIS.DBC_Conversion_Support <> 2 + IF .DBC_Conversion_Support <> 2 ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'DBC' ) @@ -1215,7 +1224,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .ChangeFileAttribute( FORCEEXT( .c_InputFile, 'DCT' ), '+N' ) CASE lcExtension = .c_MN2 - IF THIS.MNX_Conversion_Support <> 2 + IF .MNX_Conversion_Support <> 2 ERROR (TEXTMERGE(C_FILE_NAME_IS_NOT_SUPPORTED_LOC)) ENDIF .c_OutputFile = FORCEEXT( .c_InputFile, 'MNX' ) @@ -1325,54 +1334,57 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL lcPath, lcEXE_CAPS, lcOutputFile ; , loFSO AS Scripting.FileSystemObject - lcPath = JUSTPATH(THIS.c_Foxbin2prg_FullPath) - lcEXE_CAPS = FORCEPATH( 'filename_caps.exe', lcPath ) - loFSO = THIS.o_FSO - IF FILE(lcEXE_CAPS) - *THIS.writeLog( '* Se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) - THIS.writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC) ) - ELSE - *-- No existe el programa de capitalización, así que no se capitalizan los nombres. - *THIS.writeLog( '* No se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) - THIS.writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC) ) - EXIT - ENDIF + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + lcPath = JUSTPATH(.c_Foxbin2prg_FullPath) + lcEXE_CAPS = FORCEPATH( 'filename_caps.exe', lcPath ) + loFSO = .o_FSO - THIS.RenameFile( THIS.c_OutputFile, lcEXE_CAPS, loFSO ) - - DO CASE - CASE THIS.c_Type = 'PJX' - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'PJT'), lcEXE_CAPS, loFSO ) - - CASE THIS.c_Type = 'VCX' - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'VCT'), lcEXE_CAPS, loFSO ) - - CASE THIS.c_Type = 'SCX' - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'SCT'), lcEXE_CAPS, loFSO ) - - CASE THIS.c_Type = 'FRX' - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'FRT'), lcEXE_CAPS, loFSO ) - - CASE THIS.c_Type = 'LBX' - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'LBT'), lcEXE_CAPS, loFSO ) - - CASE THIS.c_Type = 'DBF' - IF FILE( FORCEEXT(THIS.c_OutputFile,'FPT') ) - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'FPT'), lcEXE_CAPS, loFSO ) - ENDIF - IF FILE( FORCEEXT(THIS.c_OutputFile,'CDX') ) - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'CDX'), lcEXE_CAPS, loFSO ) + IF FILE(lcEXE_CAPS) + *.writeLog( '* Se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) + .writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_FOUND_LOC) ) + ELSE + *-- No existe el programa de capitalización, así que no se capitalizan los nombres. + *.writeLog( '* No se ha encontrado el programa de capitalización de nombres [' + lcEXE_CAPS + ']' ) + .writeLog( TEXTMERGE(C_NAMES_CAPITALIZATION_PROGRAM_NOT_FOUND_LOC) ) + EXIT ENDIF - CASE THIS.c_Type = 'DBC' - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'DCX'), lcEXE_CAPS, loFSO ) - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'DCT'), lcEXE_CAPS, loFSO ) + .RenameFile( .c_OutputFile, lcEXE_CAPS, loFSO ) - CASE THIS.c_Type = 'MNX' - THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'MNT'), lcEXE_CAPS, loFSO ) + DO CASE + CASE .c_Type = 'PJX' + .RenameFile( FORCEEXT(.c_OutputFile,'PJT'), lcEXE_CAPS, loFSO ) - ENDCASE + CASE .c_Type = 'VCX' + .RenameFile( FORCEEXT(.c_OutputFile,'VCT'), lcEXE_CAPS, loFSO ) + + CASE .c_Type = 'SCX' + .RenameFile( FORCEEXT(.c_OutputFile,'SCT'), lcEXE_CAPS, loFSO ) + + CASE .c_Type = 'FRX' + .RenameFile( FORCEEXT(.c_OutputFile,'FRT'), lcEXE_CAPS, loFSO ) + + CASE .c_Type = 'LBX' + .RenameFile( FORCEEXT(.c_OutputFile,'LBT'), lcEXE_CAPS, loFSO ) + + CASE .c_Type = 'DBF' + IF FILE( FORCEEXT(.c_OutputFile,'FPT') ) + .RenameFile( FORCEEXT(.c_OutputFile,'FPT'), lcEXE_CAPS, loFSO ) + ENDIF + IF FILE( FORCEEXT(.c_OutputFile,'CDX') ) + .RenameFile( FORCEEXT(.c_OutputFile,'CDX'), lcEXE_CAPS, loFSO ) + ENDIF + + CASE .c_Type = 'DBC' + .RenameFile( FORCEEXT(.c_OutputFile,'DCX'), lcEXE_CAPS, loFSO ) + .RenameFile( FORCEEXT(.c_OutputFile,'DCT'), lcEXE_CAPS, loFSO ) + + CASE .c_Type = 'MNX' + .RenameFile( FORCEEXT(.c_OutputFile,'MNT'), lcEXE_CAPS, loFSO ) + + ENDCASE + ENDWITH && THIS ENDTRY RETURN @@ -1614,42 +1626,46 @@ DEFINE CLASS c_conversor_base AS SESSION llBloqueEncontrado = .T. LOCAL lcLine, lnArrayCols - *-- Propiedad especial - IF tcTAG_F $ tcValue && El fin de tag está "inline" - THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' ) - EXIT - ENDIF + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - tcValue = '' - lnArrayCols = ALEN(taProps,2) - - FOR I = I + 1 TO tnProp_Count - IF lnArrayCols = 0 - lcLine = LTRIM( taProps(I), 0, ' ', CHR(9) ) && Quito espacios y TABS de la izquierda - ELSE - lcLine = LTRIM( taProps(I,1), 0, ' ', CHR(9) ) && Quito espacios y TABS de la izquierda + *-- Propiedad especial + IF tcTAG_F $ tcValue && El fin de tag está "inline" + .desnormalizarValorPropiedad( @tcPropName, @tcValue, '' ) + EXIT ENDIF - DO CASE - CASE LEFT( lcLine, tnLEN_TAG_F ) == tcTAG_F - *-- - tcValue = tcTAG_I + SUBSTR( tcValue, 3 ) + tcTAG_F - THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' ) - I = I + 1 - EXIT + tcValue = '' + lnArrayCols = ALEN(taProps,2) - CASE tcTAG_F $ lcLine - *-- Data-Data-Data- - tcValue = tcTAG_I + SUBSTR( tcValue, 3 ) + LEFT( lcLine, AT( tcTAG_F, lcLine )-1 ) + tcTAG_F - THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' ) - I = I + 1 - EXIT + FOR I = I + 1 TO tnProp_Count + IF lnArrayCols = 0 + lcLine = LTRIM( taProps(I), 0, ' ', CHR(9) ) && Quito espacios y TABS de la izquierda + ELSE + lcLine = LTRIM( taProps(I,1), 0, ' ', CHR(9) ) && Quito espacios y TABS de la izquierda + ENDIF - OTHERWISE - *-- Data - tcValue = tcValue + CR_LF + lcLine - ENDCASE - ENDFOR + DO CASE + CASE LEFT( lcLine, tnLEN_TAG_F ) == tcTAG_F + *-- + tcValue = tcTAG_I + SUBSTR( tcValue, 3 ) + tcTAG_F + .desnormalizarValorPropiedad( @tcPropName, @tcValue, '' ) + I = I + 1 + EXIT + + CASE tcTAG_F $ lcLine + *-- Data-Data-Data- + tcValue = tcTAG_I + SUBSTR( tcValue, 3 ) + LEFT( lcLine, AT( tcTAG_F, lcLine )-1 ) + tcTAG_F + .desnormalizarValorPropiedad( @tcPropName, @tcValue, '' ) + I = I + 1 + EXIT + + OTHERWISE + *-- Data + tcValue = tcValue + CR_LF + lcLine + ENDCASE + ENDFOR + + ENDWITH && THIS I = I - 1 @@ -2016,20 +2032,22 @@ DEFINE CLASS c_conversor_base AS SESSION IF PCOUNT() > 3 *-- EVALUAR UNA ASIGNACIÓN QUE PUEDE SER MULTILÍNEA (memberdata, fb2p_value, etc) - DO CASE - CASE THIS.analizarAsignacion_TAG_Indicado( @tcPropName, @tcValue, @taCodeLines, tnCodeLines, @I ; - , C_FB2P_VALUE_I, C_FB2P_VALUE_F, C_LEN_FB2P_VALUE_I, C_LEN_FB2P_VALUE_F ) - *-- FB2P_VALUE + WITH THIS AS c_conversor_base OF 'FOXBIN2PRG.PRG' + DO CASE + CASE .analizarAsignacion_TAG_Indicado( @tcPropName, @tcValue, @taCodeLines, tnCodeLines, @I ; + , C_FB2P_VALUE_I, C_FB2P_VALUE_F, C_LEN_FB2P_VALUE_I, C_LEN_FB2P_VALUE_F ) + *-- FB2P_VALUE - CASE THIS.analizarAsignacion_TAG_Indicado( @tcPropName, @tcValue, @taCodeLines, tnCodeLines, @I ; - , C_MEMBERDATA_I, C_MEMBERDATA_F, C_LEN_MEMBERDATA_I, C_LEN_MEMBERDATA_F ) - *-- MEMBERDATA + CASE .analizarAsignacion_TAG_Indicado( @tcPropName, @tcValue, @taCodeLines, tnCodeLines, @I ; + , C_MEMBERDATA_I, C_MEMBERDATA_F, C_LEN_MEMBERDATA_I, C_LEN_MEMBERDATA_F ) + *-- MEMBERDATA - OTHERWISE - *-- Propiedad normal - THIS.desnormalizarValorPropiedad( @tcPropName, @tcValue, '' ) + OTHERWISE + *-- Propiedad normal + .desnormalizarValorPropiedad( @tcPropName, @tcValue, '' ) - ENDCASE + ENDCASE + ENDWITH && THIS ENDIF ENDIF @@ -2636,6 +2654,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -2769,7 +2788,42 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC - ******************************************************************************************************************* + PROCEDURE elTextoEvaluadoEsElTokenIndicado + LPARAMETERS tcLine, ta_ID_Bloques, tnLen_IDFinBQ, X, tnIniFin + LOCAL llEncontrado, lcWord + + TRY + IF tnIniFin = 1 + *-- TOKENS DE INICIO + IF UPPER( LEFT( tcLine, LEN(ta_ID_Bloques(X,1)) ) ) == ta_ID_Bloques(X,1) + *-- Evaluar casos especiales + lcWord = UPPER( ALLTRIM(GETWORDNUM(tcLine,1) ) ) + + IF ta_ID_Bloques(X,1) == 'TEXT' AND NOT lcWord == 'TEXT' + EXIT + ENDIF + + llEncontrado = .T. + ENDIF + ELSE + *-- TOKENS DE FIN + IF LEFT( UPPER( tcLine ), tnLen_IDFinBQ ) == ta_ID_Bloques(X,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc) + *-- Evaluar casos especiales + lcWord = UPPER( ALLTRIM(GETWORDNUM(tcLine,1) ) ) + + IF ta_ID_Bloques(X,2) == 'ENDT' AND NOT lcWord == LEFT( 'ENDTEXT', LEN(lcWord) ) + EXIT + ENDIF + + llEncontrado = .T. + ENDIF + ENDIF + ENDTRY + + RETURN llEncontrado + ENDPROC + + PROCEDURE identificarBloquesDeExclusion LPARAMETERS taCodeLines, tnCodeLines, ta_ID_Bloques, taBloquesExclusion, tnBloquesExclusion * LOS BLOQUES DE EXCLUSIÓN SON AQUELLOS QUE TIENEN TEXT/ENDTEXT OF #IF .F./#ENDIF Y SE USAN PARA NO BUSCAR @@ -2785,7 +2839,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base EXTERNAL ARRAY ta_ID_Bloques, taBloquesExclusion TRY - LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord + LOCAL lnBloques, I, X, lnPrimerID, lnLen_IDFinBQ, lnID_Bloques_Count, lcWord, lnAnidamientos DIMENSION taBloquesExclusion(1,2) STORE 0 TO tnBloquesExclusion, lnPrimerID, I, X, lnLen_IDFinBQ @@ -2800,69 +2854,65 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDIF *-- Búsqueda del ID de inicio de bloque - FOR I = 1 TO tnCodeLines - * Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt' - lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) + WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' + FOR I = 1 TO tnCodeLines + * Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt' + lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) - IF THIS.lineIsOnlyCommentAndNoMetadata( @lcLine ) - LOOP - ENDIF - - lnPrimerID = 0 - - FOR X = 1 TO lnID_Bloques_Count - IF UPPER( LEFT( lcLine, LEN(ta_ID_Bloques(X,1)) ) ) == ta_ID_Bloques(X,1) - *-- Evaluar casos especiales - lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) ) - - DO CASE - CASE ta_ID_Bloques(X,1) == 'TEXT' AND NOT lcWord == 'TEXT' - LOOP - CASE ta_ID_Bloques(X,2) == 'ENDT' AND NOT lcWord == LEFT( 'ENDTEXT', LEN(lcWord) ) - LOOP - ENDCASE - - lnPrimerID = X - EXIT + IF .lineIsOnlyCommentAndNoMetadata( @lcLine ) + LOOP ENDIF - ENDFOR - IF lnPrimerID > 0 && Se ha identificado un ID de bloque excluyente - tnBloquesExclusion = tnBloquesExclusion + 1 - lnLen_IDFinBQ = LEN( ta_ID_Bloques(lnPrimerID,2) ) - DIMENSION taBloquesExclusion(tnBloquesExclusion,2) - taBloquesExclusion(tnBloquesExclusion,1) = I + lnPrimerID = 0 - * Búsqueda del ID de fin de bloque - FOR I = I + 1 TO tnCodeLines - * Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt' - lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) - - IF THIS.lineIsOnlyCommentAndNoMetadata( @lcLine ) - LOOP - ENDIF - - lcWord = UPPER( ALLTRIM(GETWORDNUM(lcLine,1) ) ) - - IF LEFT( UPPER(lcLine), lnLen_IDFinBQ ) == ta_ID_Bloques(lnPrimerID,2) && Fin de bloque encontrado (#ENDI, ENDTEXT, etc) - *-- Evaluar casos especiales - IF ta_ID_Bloques(lnPrimerID,2) == 'ENDT' AND NOT lcWord == LEFT( 'ENDTEXT', LEN(lcWord) ) - LOOP - ENDIF - taBloquesExclusion(tnBloquesExclusion,2) = I + FOR X = 1 TO lnID_Bloques_Count + lnLen_IDFinBQ = LEN( ta_ID_Bloques(X,2) ) + IF .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 ) + lnPrimerID = X + lnAnidamientos = 1 EXIT ENDIF ENDFOR - *-- Validación - IF EMPTY(taBloquesExclusion(tnBloquesExclusion,2)) - *ERROR 'No se ha encontrado el marcador de fin [' + ta_ID_Bloques(lnPrimerID,2) ; - + '] que cierra al marcador de inicio [' + ta_ID_Bloques(lnPrimerID,1) ; - + '] de la línea ' + TRANSFORM(taBloquesExclusion(tnBloquesExclusion,1)) - ERROR (TEXTMERGE(C_END_MARKER_NOT_FOUND_LOC)) + IF lnPrimerID > 0 && Se ha identificado un ID de bloque excluyente + tnBloquesExclusion = tnBloquesExclusion + 1 + lnLen_IDFinBQ = LEN( ta_ID_Bloques(lnPrimerID,2) ) + DIMENSION taBloquesExclusion(tnBloquesExclusion,2) + taBloquesExclusion(tnBloquesExclusion,1) = I + + * Búsqueda del ID de fin de bloque + FOR I = I + 1 TO tnCodeLines + * Reduzco los espacios. Ej: '#IF .F. && cmt' ==> '#IF .F.&&cmt' + lcLine = LTRIM( STRTRAN( STRTRAN( CHRTRAN( taCodeLines(I), CHR(9), ' ' ), ' ', ' ' ), ' ', ' ' ) ) + + IF .lineIsOnlyCommentAndNoMetadata( @lcLine ) + LOOP + ENDIF + + DO CASE + CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 1 ) + lnAnidamientos = lnAnidamientos + 1 + + CASE .elTextoEvaluadoEsElTokenIndicado( @lcLine, @ta_ID_Bloques, lnLen_IDFinBQ, X, 2 ) + lnAnidamientos = lnAnidamientos - 1 + + IF lnAnidamientos = 0 + taBloquesExclusion(tnBloquesExclusion,2) = I + EXIT + ENDIF + ENDCASE + ENDFOR + + *-- Validación + IF EMPTY(taBloquesExclusion(tnBloquesExclusion,2)) + *ERROR 'No se ha encontrado el marcador de fin [' + ta_ID_Bloques(lnPrimerID,2) ; + + '] que cierra al marcador de inicio [' + ta_ID_Bloques(lnPrimerID,1) ; + + '] de la línea ' + TRANSFORM(taBloquesExclusion(tnBloquesExclusion,1)) + ERROR (TEXTMERGE(C_END_MARKER_NOT_FOUND_LOC)) + ENDIF ENDIF - ENDIF - ENDFOR + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -3512,10 +3562,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL lcMemo, I, lcPAM, lcComentario lcMemo = '' - THIS.Evaluate_PAM( @lcMemo, toClase._ProtectedProps, 'property', 'protected' ) - THIS.Evaluate_PAM( @lcMemo, toClase._HiddenProps, 'property', 'hidden' ) - THIS.Evaluate_PAM( @lcMemo, toClase._ProtectedMethods, 'method', 'protected' ) - THIS.Evaluate_PAM( @lcMemo, toClase._HiddenMethods, 'method', 'hidden' ) + WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' + .Evaluate_PAM( @lcMemo, toClase._ProtectedProps, 'property', 'protected' ) + .Evaluate_PAM( @lcMemo, toClase._HiddenProps, 'property', 'hidden' ) + .Evaluate_PAM( @lcMemo, toClase._ProtectedMethods, 'method', 'protected' ) + .Evaluate_PAM( @lcMemo, toClase._HiddenMethods, 'method', 'hidden' ) + ENDWITH && THIS RETURN lcMemo ENDPROC @@ -3554,55 +3606,61 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' #ENDIF - IF NOT THIS.l_Test - *-- Inserto el objeto - INSERT INTO TABLABIN ; - ( PLATFORM ; - , UNIQUEID ; - , TIMESTAMP ; - , CLASS ; - , CLASSLOC ; - , BASECLASS ; - , OBJNAME ; - , PARENT ; - , PROPERTIES ; - , PROTECTED ; - , METHODS ; - , OLE ; - , OLE2 ; - , RESERVED1 ; - , RESERVED2 ; - , RESERVED3 ; - , RESERVED4 ; - , RESERVED5 ; - , RESERVED6 ; - , RESERVED7 ; - , RESERVED8 ; - , USER) ; - VALUES ; - ( 'WINDOWS' ; - , IIF( toFoxBin2Prg.l_ClearUniqueID, '', toObjeto._UniqueID ) ; - , IIF( toFoxBin2Prg.l_UseTimestamps, toObjeto._TimeStamp, 0 ) ; - , toObjeto._Class ; - , toObjeto._ClassLib ; - , toObjeto._BaseClass ; - , toObjeto._ObjName ; - , toObjeto._Parent ; - , THIS.objectProps2Memo( toObjeto, toClase ) ; - , '' ; - , THIS.objectMethods2Memo( toObjeto, toClase ) ; - , toObjeto._Ole ; - , toObjeto._Ole2 ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , toObjeto._User ) - ENDIF + WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' + IF NOT .l_Test + LOCAL lcPropsMemo, lcMethodsMemo + lcPropsMemo = .objectProps2Memo( toObjeto, toClase ) + lcMethodsMemo = .objectMethods2Memo( toObjeto, toClase ) + + *-- Inserto el objeto + INSERT INTO TABLABIN ; + ( PLATFORM ; + , UNIQUEID ; + , TIMESTAMP ; + , CLASS ; + , CLASSLOC ; + , BASECLASS ; + , OBJNAME ; + , PARENT ; + , PROPERTIES ; + , PROTECTED ; + , METHODS ; + , OLE ; + , OLE2 ; + , RESERVED1 ; + , RESERVED2 ; + , RESERVED3 ; + , RESERVED4 ; + , RESERVED5 ; + , RESERVED6 ; + , RESERVED7 ; + , RESERVED8 ; + , USER) ; + VALUES ; + ( 'WINDOWS' ; + , IIF( toFoxBin2Prg.l_ClearUniqueID, '', toObjeto._UniqueID ) ; + , IIF( toFoxBin2Prg.l_UseTimestamps, toObjeto._TimeStamp, 0 ) ; + , toObjeto._Class ; + , toObjeto._ClassLib ; + , toObjeto._BaseClass ; + , toObjeto._ObjName ; + , toObjeto._Parent ; + , lcPropsMemo ; + , '' ; + , lcMethodsMemo ; + , toObjeto._Ole ; + , toObjeto._Ole2 ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , toObjeto._User ) + ENDIF + ENDWITH && THIS ENDPROC @@ -3621,45 +3679,47 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base TRY LOCAL N, X, lcObjName, loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' - IF toClase._AddObject_Count > 0 - N = 0 + WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' + IF toClase._AddObject_Count > 0 + N = 0 - *-- Armo array con el orden Z de los objetos - DIMENSION laObjNames( toClase._AddObject_Count, 2 ) + *-- Armo array con el orden Z de los objetos + DIMENSION laObjNames( toClase._AddObject_Count, 2 ) - FOR X = 1 TO toClase._AddObject_Count - loObjeto = toClase._AddObjects( X ) - laObjNames( X, 1 ) = loObjeto._Nombre - laObjNames( X, 2 ) = loObjeto._ZOrder - ENDFOR + FOR X = 1 TO toClase._AddObject_Count + loObjeto = toClase._AddObjects( X ) + laObjNames( X, 1 ) = loObjeto._Nombre + laObjNames( X, 2 ) = loObjeto._ZOrder + ENDFOR - ASORT( laObjNames, 2, -1, 0, 1 ) + ASORT( laObjNames, 2, -1, 0, 1 ) - *-- Escribo los objetos en el orden Z - FOR X = 1 TO toClase._AddObject_Count - lcObjName = laObjNames( X, 1 ) + *-- Escribo los objetos en el orden Z + FOR X = 1 TO toClase._AddObject_Count + lcObjName = laObjNames( X, 1 ) + FOR EACH loObjeto IN toClase._AddObjects FOXOBJECT + *-- Verifico que sea el objeto que corresponde + IF loObjeto._WriteOrder = 0 AND loObjeto._Nombre == lcObjName + N = N + 1 + loObjeto._WriteOrder = N + .insert_Object( toClase, loObjeto, toFoxBin2Prg ) + EXIT + ENDIF + ENDFOR + ENDFOR + + + *-- Recorro los objetos Desconocidos FOR EACH loObjeto IN toClase._AddObjects FOXOBJECT - *-- Verifico que sea el objeto que corresponde - IF loObjeto._WriteOrder = 0 AND loObjeto._Nombre == lcObjName - N = N + 1 - loObjeto._WriteOrder = N - THIS.insert_Object( toClase, loObjeto, toFoxBin2Prg ) - EXIT + IF loObjeto._WriteOrder = 0 + .insert_Object( toClase, loObjeto, toFoxBin2Prg ) ENDIF ENDFOR - ENDFOR - - *-- Recorro los objetos Desconocidos - FOR EACH loObjeto IN toClase._AddObjects FOXOBJECT - IF loObjeto._WriteOrder = 0 - THIS.insert_Object( toClase, loObjeto, toFoxBin2Prg ) - ENDIF - ENDFOR - - ENDIF && toClase._AddObject_Count > 0 + ENDIF && toClase._AddObject_Count > 0 + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -3702,7 +3762,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base loProcedure = toClase._Procedures(toClase._Procedure_Count) ENDIF - WITH THIS + WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) @@ -3718,12 +3778,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base IF llEsProcedureDeClase *ERROR 'Error de anidamiento de estructuras. Se esperaba ENDPROC y se encontró ENDDEFINE en la clase ' ; + toClase._Nombre + ' (' + loProcedure._Nombre + ')' ; - + ', línea ' + TRANSFORM(I) + ' del archivo ' + THIS.c_InputFile + + ', línea ' + TRANSFORM(I) + ' del archivo ' + .c_InputFile ERROR (TEXTMERGE(C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_LOC)) ELSE *ERROR 'Error de anidamiento de estructuras. Se esperaba ENDPROC y se encontró ENDDEFINE en la clase ' ; + toClase._Nombre + ' (' + toObjeto._Nombre + '.' + loProcedure._Nombre + ')' ; - + ', línea ' + TRANSFORM(I) + ' del archivo ' + THIS.c_InputFile + + ', línea ' + TRANSFORM(I) + ' del archivo ' + .c_InputFile ERROR (TEXTMERGE(C_STRUCTURE_NESTING_ERROR_ENDPROC_EXPECTED_2_LOC)) ENDIF ENDCASE @@ -4070,29 +4130,29 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDCASE ENDFOR + + *-- Validación + IF EMPTY( toClase._Fin ) + *ERROR 'No se ha encontrado el marcador de fin [ENDDEFINE] ' ; + + 'que cierra al marcador de inicio [DEFINE CLASS] ' ; + + 'de la línea ' + TRANSFORM( toClase._Inicio ) + ' ' ; + + 'para el identificador [' + toClase._Nombre + ']' + ERROR (TEXTMERGE(C_ENDDEFINE_MARKER_NOT_FOUND_LOC)) + ENDIF + + toClase._PROPERTIES = .classProps2Memo( toClase ) + toClase._PROTECTED = .hiddenAndProtected_PAM( toClase ) + toClase._METHODS = .classMethods2Memo( toClase ) + toClase._RESERVED1 = IIF( .c_Type = 'SCX', '', 'Class' ) + toClase._RESERVED2 = IIF( .c_Type = 'VCX' OR toClase._Nombre == 'Dataenvironment', TRANSFORM( toClase._AddObject_Count + 1 ), '' ) + toClase._RESERVED3 = .defined_PAM2Memo( toClase ) + toClase._RESERVED4 = toClase._ClassIcon + toClase._RESERVED5 = toClase._ProjectClassIcon + toClase._RESERVED6 = toClase._Scale + toClase._RESERVED7 = toClase._Comentario + toClase._RESERVED8 = toClase._includeFile ENDWITH && THIS - *-- Validación - IF EMPTY( toClase._Fin ) - *ERROR 'No se ha encontrado el marcador de fin [ENDDEFINE] ' ; - + 'que cierra al marcador de inicio [DEFINE CLASS] ' ; - + 'de la línea ' + TRANSFORM( toClase._Inicio ) + ' ' ; - + 'para el identificador [' + toClase._Nombre + ']' - ERROR (TEXTMERGE(C_ENDDEFINE_MARKER_NOT_FOUND_LOC)) - ENDIF - - toClase._PROPERTIES = THIS.classProps2Memo( toClase ) - toClase._PROTECTED = THIS.hiddenAndProtected_PAM( toClase ) - toClase._METHODS = THIS.classMethods2Memo( toClase ) - toClase._RESERVED1 = IIF( THIS.c_Type = 'SCX', '', 'Class' ) - toClase._RESERVED2 = IIF( THIS.c_Type = 'VCX' OR toClase._Nombre == 'Dataenvironment', TRANSFORM( toClase._AddObject_Count + 1 ), '' ) - toClase._RESERVED3 = THIS.defined_PAM2Memo( toClase ) - toClase._RESERVED4 = toClase._ClassIcon - toClase._RESERVED5 = toClase._ProjectClassIcon - toClase._RESERVED6 = toClase._Scale - toClase._RESERVED7 = toClase._Comentario - toClase._RESERVED8 = toClase._includeFile - CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON @@ -4428,24 +4488,24 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , lc_Comentario, lcProcedureAbierto, lcLine ; , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' - STORE '' TO lcProcedureAbierto + WITH THIS AS c_conversor_prg_a_bin OF 'FOXBIN2PRG.PRG' + STORE '' TO lcProcedureAbierto - THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) + .c_Type = UPPER(JUSTEXT(.c_OutputFile)) - IF tnCodeLines > 1 + IF tnCodeLines > 1 - *-- Defino el objeto de módulo y sus propiedades - toModulo = NULL - toModulo = CREATEOBJECT('CL_MODULO') + *-- Defino el objeto de módulo y sus propiedades + toModulo = NULL + toModulo = CREATEOBJECT('CL_MODULO') - *-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE) - WITH THIS + *-- Búsqueda del ID de inicio de bloque (DEFINE CLASS / PROCEDURE) FOR I = 1 TO tnCodeLines STORE '' TO lc_Comentario .set_Line( @lcLine, @taCodeLines, I ) DO CASE - CASE THIS.lineaExcluida( I, tnBloquesExclusion, @taBloquesExclusion ) ; + CASE .lineaExcluida( I, tnBloquesExclusion, @taBloquesExclusion ) ; OR .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Excluida, vacía o solo Comentarios CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toModulo, @lcLine, @taCodeLines, @I, tnCodeLines ) @@ -4467,8 +4527,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDCASE ENDFOR - ENDWITH && THIS - ENDIF + ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -4515,25 +4575,28 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loReg, lcLine, laCodeLines(1), lnCodeLines, lnFB2P_Version, lcSourceFile ; , laBloquesExclusion(1,2), lnBloquesExclusion, I - STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version - STORE '' TO lcLine, lcSourceFile - STORE NULL TO loReg, toModulo - C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' + STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version + STORE '' TO lcLine, lcSourceFile + STORE NULL TO loReg, toModulo - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - *-- Creo la librería - THIS.createClasslib() + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF - THIS.identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laBloquesExclusion, @lnBloquesExclusion ) + *-- Creo la librería + .createClasslib() - *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase - THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toModulo ) + *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF + .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laBloquesExclusion, @lnBloquesExclusion ) - THIS.escribirArchivoBin( @toModulo, toFoxBin2Prg ) + *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toModulo ) + + .escribirArchivoBin( @toModulo, toFoxBin2Prg ) + ENDWITH && THIS CATCH TO toEx @@ -4630,132 +4693,134 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin , loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' ; , loFSO AS Scripting.FileSystemObject - loFSO = THIS.oFSO + WITH THIS AS c_conversor_prg_a_vcx OF 'FOXBIN2PRG.PRG' + loFSO = .oFSO - *-- Creo el registro de cabecera - THIS.createClasslib_RecordHeader() + *-- Creo el registro de cabecera + .createClasslib_RecordHeader() - *-- Recorro las CLASES - FOR X = 1 TO 2 - FOR I = 1 TO toModulo._Clases_Count + *-- Recorro las CLASES + FOR X = 1 TO 2 + FOR I = 1 TO toModulo._Clases_Count - loClase = toModulo._Clases(I) + loClase = toModulo._Clases(I) - *-- El dataenvironment debe estar primero, luego lo demás. - IF X = 1 AND NOT loClase._BaseClass == 'dataenvironment' ; - OR X = 2 AND loClase._BaseClass == 'dataenvironment' - LOOP - ENDIF + *-- El dataenvironment debe estar primero, luego lo demás. + IF X = 1 AND NOT loClase._BaseClass == 'dataenvironment' ; + OR X = 2 AND loClase._BaseClass == 'dataenvironment' + LOOP + ENDIF - *-- Inserto la clase - INSERT INTO TABLABIN ; - ( PLATFORM ; - , UNIQUEID ; - , TIMESTAMP ; - , CLASS ; - , CLASSLOC ; - , BASECLASS ; - , OBJNAME ; - , PARENT ; - , PROPERTIES ; - , PROTECTED ; - , METHODS ; - , OLE ; - , OLE2 ; - , RESERVED1 ; - , RESERVED2 ; - , RESERVED3 ; - , RESERVED4 ; - , RESERVED5 ; - , RESERVED6 ; - , RESERVED7 ; - , RESERVED8 ; - , USER) ; - VALUES ; - ( 'WINDOWS' ; - , IIF( toFoxBin2Prg.l_ClearUniqueID, '', loClase._UniqueID ) ; - , IIF( toFoxBin2Prg.l_UseTimestamps, loClase._TimeStamp, 0 ) ; - , loClase._Class ; - , loClase._ClassLoc ; - , loClase._BaseClass ; - , loClase._ObjName ; - , loClase._Parent ; - , loClase._PROPERTIES ; - , loClase._PROTECTED ; - , loClase._METHODS ; - , loClase._Ole ; - , loClase._Ole2 ; - , loClase._RESERVED1 ; - , loClase._RESERVED2 ; - , loClase._RESERVED3 ; - , loClase._ClassIcon ; - , loClase._ProjectClassIcon ; - , loClase._Scale ; - , loClase._Comentario ; - , loClase._includeFile ; - , loClase._User ) + *-- Inserto la clase + INSERT INTO TABLABIN ; + ( PLATFORM ; + , UNIQUEID ; + , TIMESTAMP ; + , CLASS ; + , CLASSLOC ; + , BASECLASS ; + , OBJNAME ; + , PARENT ; + , PROPERTIES ; + , PROTECTED ; + , METHODS ; + , OLE ; + , OLE2 ; + , RESERVED1 ; + , RESERVED2 ; + , RESERVED3 ; + , RESERVED4 ; + , RESERVED5 ; + , RESERVED6 ; + , RESERVED7 ; + , RESERVED8 ; + , USER) ; + VALUES ; + ( 'WINDOWS' ; + , IIF( toFoxBin2Prg.l_ClearUniqueID, '', loClase._UniqueID ) ; + , IIF( toFoxBin2Prg.l_UseTimestamps, loClase._TimeStamp, 0 ) ; + , loClase._Class ; + , loClase._ClassLoc ; + , loClase._BaseClass ; + , loClase._ObjName ; + , loClase._Parent ; + , loClase._PROPERTIES ; + , loClase._PROTECTED ; + , loClase._METHODS ; + , loClase._Ole ; + , loClase._Ole2 ; + , loClase._RESERVED1 ; + , loClase._RESERVED2 ; + , loClase._RESERVED3 ; + , loClase._ClassIcon ; + , loClase._ProjectClassIcon ; + , loClase._Scale ; + , loClase._Comentario ; + , loClase._includeFile ; + , loClase._User ) - THIS.insert_AllObjects( @loClase, toFoxBin2Prg ) + .insert_AllObjects( @loClase, toFoxBin2Prg ) - *-- Inserto el COMMENT - INSERT INTO TABLABIN ; - ( PLATFORM ; - , UNIQUEID ; - , TIMESTAMP ; - , CLASS ; - , CLASSLOC ; - , BASECLASS ; - , OBJNAME ; - , PARENT ; - , PROPERTIES ; - , PROTECTED ; - , METHODS ; - , OLE ; - , OLE2 ; - , RESERVED1 ; - , RESERVED2 ; - , RESERVED3 ; - , RESERVED4 ; - , RESERVED5 ; - , RESERVED6 ; - , RESERVED7 ; - , RESERVED8 ; - , USER) ; - VALUES ; - ( 'COMMENT' ; - , 'RESERVED' ; - , 0 ; - , '' ; - , '' ; - , '' ; - , loClase._ObjName ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , IIF(loClase._OlePublic, 'OLEPublic', '') ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ) + *-- Inserto el COMMENT + INSERT INTO TABLABIN ; + ( PLATFORM ; + , UNIQUEID ; + , TIMESTAMP ; + , CLASS ; + , CLASSLOC ; + , BASECLASS ; + , OBJNAME ; + , PARENT ; + , PROPERTIES ; + , PROTECTED ; + , METHODS ; + , OLE ; + , OLE2 ; + , RESERVED1 ; + , RESERVED2 ; + , RESERVED3 ; + , RESERVED4 ; + , RESERVED5 ; + , RESERVED6 ; + , RESERVED7 ; + , RESERVED8 ; + , USER) ; + VALUES ; + ( 'COMMENT' ; + , 'RESERVED' ; + , 0 ; + , '' ; + , '' ; + , '' ; + , loClase._ObjName ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , IIF(loClase._OlePublic, 'OLEPublic', '') ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ) - ENDFOR && I = 1 TO toModulo._Clases_Count - ENDFOR && X = 1 TO 2 + ENDFOR && I = 1 TO toModulo._Clases_Count + ENDFOR && X = 1 TO 2 - USE IN (SELECT("TABLABIN")) + USE IN (SELECT("TABLABIN")) - IF toFoxBin2Prg.l_Recompile - toFoxBin2Prg.compileFoxProBinary() - ENDIF + IF toFoxBin2Prg.l_Recompile + toFoxBin2Prg.compileFoxProBinary() + ENDIF + ENDWITH && THIS CATCH TO loEx @@ -4804,25 +4869,28 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loReg, lcLine, laCodeLines(1), lnCodeLines, lnFB2P_Version, lcSourceFile ; , laBloquesExclusion(1,2), lnBloquesExclusion, I - STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version - STORE '' TO lcLine, lcSourceFile - STORE NULL TO loReg, toModulo - C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + WITH THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG' + STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version + STORE '' TO lcLine, lcSourceFile + STORE NULL TO loReg, toModulo - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - *-- Creo el form - THIS.createForm() + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF - THIS.identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laBloquesExclusion, @lnBloquesExclusion ) + *-- Creo el form + .createForm() - *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase - THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toModulo ) + *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF + .identificarBloquesDeExclusion( @laCodeLines, lnCodeLines, .F., @laBloquesExclusion, @lnBloquesExclusion ) - THIS.escribirArchivoBin( @toModulo, toFoxBin2Prg ) + *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toModulo ) + + .escribirArchivoBin( @toModulo, toFoxBin2Prg ) + ENDWITH && THIS CATCH TO toEx @@ -4918,134 +4986,136 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' ; , loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' - *-- Creo el registro de cabecera - THIS.createForm_RecordHeader() + WITH THIS AS c_conversor_prg_a_scx OF 'FOXBIN2PRG.PRG' + *-- Creo el registro de cabecera + .createForm_RecordHeader() - *-- El SCX tiene el INCLUDE en el primer registro - IF NOT EMPTY(toModulo._includeFile) - REPLACE RESERVED8 WITH toModulo._includeFile - ENDIF + *-- El SCX tiene el INCLUDE en el primer registro + IF NOT EMPTY(toModulo._includeFile) + REPLACE RESERVED8 WITH toModulo._includeFile + ENDIF - *-- Recorro las CLASES - FOR X = 1 TO 2 - FOR I = 1 TO toModulo._Clases_Count + *-- Recorro las CLASES + FOR X = 1 TO 2 + FOR I = 1 TO toModulo._Clases_Count - loClase = toModulo._Clases(I) + loClase = toModulo._Clases(I) - *-- El dataenvironment debe estar primero, luego lo demás. - IF X = 1 AND NOT loClase._BaseClass == 'dataenvironment' ; - OR X = 2 AND loClase._BaseClass == 'dataenvironment' - LOOP - ENDIF + *-- El dataenvironment debe estar primero, luego lo demás. + IF X = 1 AND NOT loClase._BaseClass == 'dataenvironment' ; + OR X = 2 AND loClase._BaseClass == 'dataenvironment' + LOOP + ENDIF - *-- Inserto la clase - INSERT INTO TABLABIN ; - ( PLATFORM ; - , UNIQUEID ; - , TIMESTAMP ; - , CLASS ; - , CLASSLOC ; - , BASECLASS ; - , OBJNAME ; - , PARENT ; - , PROPERTIES ; - , PROTECTED ; - , METHODS ; - , OLE ; - , OLE2 ; - , RESERVED1 ; - , RESERVED2 ; - , RESERVED3 ; - , RESERVED4 ; - , RESERVED5 ; - , RESERVED6 ; - , RESERVED7 ; - , RESERVED8 ; - , USER) ; - VALUES ; - ( 'WINDOWS' ; - , IIF( toFoxBin2Prg.l_ClearUniqueID, '', loClase._UniqueID ) ; - , IIF( toFoxBin2Prg.l_UseTimestamps, loClase._TimeStamp, 0 ) ; - , loClase._Class ; - , loClase._ClassLoc ; - , loClase._BaseClass ; - , loClase._ObjName ; - , loClase._Parent ; - , loClase._PROPERTIES ; - , loClase._PROTECTED ; - , loClase._METHODS ; - , loClase._Ole ; - , loClase._Ole2 ; - , loClase._RESERVED1 ; - , loClase._RESERVED2 ; - , loClase._RESERVED3 ; - , loClase._ClassIcon ; - , loClase._ProjectClassIcon ; - , loClase._Scale ; - , loClase._Comentario ; - , loClase._includeFile ; - , loClase._User ) + *-- Inserto la clase + INSERT INTO TABLABIN ; + ( PLATFORM ; + , UNIQUEID ; + , TIMESTAMP ; + , CLASS ; + , CLASSLOC ; + , BASECLASS ; + , OBJNAME ; + , PARENT ; + , PROPERTIES ; + , PROTECTED ; + , METHODS ; + , OLE ; + , OLE2 ; + , RESERVED1 ; + , RESERVED2 ; + , RESERVED3 ; + , RESERVED4 ; + , RESERVED5 ; + , RESERVED6 ; + , RESERVED7 ; + , RESERVED8 ; + , USER) ; + VALUES ; + ( 'WINDOWS' ; + , IIF( toFoxBin2Prg.l_ClearUniqueID, '', loClase._UniqueID ) ; + , IIF( toFoxBin2Prg.l_UseTimestamps, loClase._TimeStamp, 0 ) ; + , loClase._Class ; + , loClase._ClassLoc ; + , loClase._BaseClass ; + , loClase._ObjName ; + , loClase._Parent ; + , loClase._PROPERTIES ; + , loClase._PROTECTED ; + , loClase._METHODS ; + , loClase._Ole ; + , loClase._Ole2 ; + , loClase._RESERVED1 ; + , loClase._RESERVED2 ; + , loClase._RESERVED3 ; + , loClase._ClassIcon ; + , loClase._ProjectClassIcon ; + , loClase._Scale ; + , loClase._Comentario ; + , loClase._includeFile ; + , loClase._User ) - THIS.insert_AllObjects( @loClase, toFoxBin2Prg ) + .insert_AllObjects( @loClase, toFoxBin2Prg ) - ENDFOR && I = 1 TO toModulo._Clases_Count - ENDFOR && X = 1 TO 2 + ENDFOR && I = 1 TO toModulo._Clases_Count + ENDFOR && X = 1 TO 2 - *-- Inserto el COMMENT final - INSERT INTO TABLABIN ; - ( PLATFORM ; - , UNIQUEID ; - , TIMESTAMP ; - , CLASS ; - , CLASSLOC ; - , BASECLASS ; - , OBJNAME ; - , PARENT ; - , PROPERTIES ; - , PROTECTED ; - , METHODS ; - , OLE ; - , OLE2 ; - , RESERVED1 ; - , RESERVED2 ; - , RESERVED3 ; - , RESERVED4 ; - , RESERVED5 ; - , RESERVED6 ; - , RESERVED7 ; - , RESERVED8 ; - , USER) ; - VALUES ; - ( 'COMMENT' ; - , 'RESERVED' ; - , 0 ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ) + *-- Inserto el COMMENT final + INSERT INTO TABLABIN ; + ( PLATFORM ; + , UNIQUEID ; + , TIMESTAMP ; + , CLASS ; + , CLASSLOC ; + , BASECLASS ; + , OBJNAME ; + , PARENT ; + , PROPERTIES ; + , PROTECTED ; + , METHODS ; + , OLE ; + , OLE2 ; + , RESERVED1 ; + , RESERVED2 ; + , RESERVED3 ; + , RESERVED4 ; + , RESERVED5 ; + , RESERVED6 ; + , RESERVED7 ; + , RESERVED8 ; + , USER) ; + VALUES ; + ( 'COMMENT' ; + , 'RESERVED' ; + , 0 ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ) - USE IN (SELECT("TABLABIN")) + USE IN (SELECT("TABLABIN")) - IF toFoxBin2Prg.l_Recompile - toFoxBin2Prg.compileFoxProBinary() - ENDIF + IF toFoxBin2Prg.l_Recompile + toFoxBin2Prg.compileFoxProBinary() + ENDIF + ENDWITH && THIS CATCH TO loEx @@ -5103,25 +5173,28 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loReg, lcLine, laCodeLines(1), lnCodeLines, lnFB2P_Version, lcSourceFile ; , laBloquesExclusion(1,2), lnBloquesExclusion, I - STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version - STORE '' TO lcLine, lcSourceFile - STORE NULL TO loReg, toModulo - C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version + STORE '' TO lcLine, lcSourceFile + STORE NULL TO loReg, toModulo - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - *-- Creo solo la cabecera del proyecto - THIS.createProject() + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF - *THIS.identificarBloquesDeExclusion( @laCodeLines, .F., @laBloquesExclusion, @lnBloquesExclusion ) + *-- Creo solo la cabecera del proyecto + .createProject() - *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase - THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toProject ) + *-- Identifico los TEXT/ENDTEXT, #IF .F./#ENDIF + *.identificarBloquesDeExclusion( @laCodeLines, .F., @laBloquesExclusion, @lnBloquesExclusion ) - THIS.escribirArchivoBin( @toProject, toFoxBin2Prg ) + *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo de cada clase + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toProject ) + + .escribirArchivoBin( @toProject, toFoxBin2Prg ) + ENDWITH && THIS CATCH TO toEx @@ -5153,76 +5226,78 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin , loServerHead AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' ; , loFile AS CL_PROJ_FILE OF 'FOXBIN2PRG.PRG' - toProject._HomeDir = CHRTRAN( toProject._HomeDir, ['], [] ) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + toProject._HomeDir = CHRTRAN( toProject._HomeDir, ['], [] ) - *-- Creo solo el registro de cabecera del proyecto - THIS.createProject_RecordHeader( toProject ) + *-- Creo solo el registro de cabecera del proyecto + .createProject_RecordHeader( toProject ) - lcMainProg = '' + lcMainProg = '' - IF NOT EMPTY(toProject._MainProg) - lcMainProg = LOWER( SYS(2014, toProject._MainProg, ADDBS(toProject._HomeDir) ) ) - ENDIF + IF NOT EMPTY(toProject._MainProg) + lcMainProg = LOWER( SYS(2014, toProject._MainProg, ADDBS(toProject._HomeDir) ) ) + ENDIF - *-- Si hay ProjectHook de proyecto, lo inserto - IF NOT EMPTY(toProject._ProjectHookLibrary) - INSERT INTO TABLABIN ; - ( NAME ; - , TYPE ; - , EXCLUDE ; - , KEY ; - , RESERVED1 ) ; - VALUES ; - ( toProject._ProjectHookLibrary + CHR(0) ; - , 'W' ; - , .T. ; - , UPPER(JUSTSTEM(toProject._ProjectHookLibrary)) ; - , toProject._ProjectHookClass + CHR(0) ) - ENDIF + *-- Si hay ProjectHook de proyecto, lo inserto + IF NOT EMPTY(toProject._ProjectHookLibrary) + INSERT INTO TABLABIN ; + ( NAME ; + , TYPE ; + , EXCLUDE ; + , KEY ; + , RESERVED1 ) ; + VALUES ; + ( toProject._ProjectHookLibrary + CHR(0) ; + , 'W' ; + , .T. ; + , UPPER(JUSTSTEM(toProject._ProjectHookLibrary)) ; + , toProject._ProjectHookClass + CHR(0) ) + ENDIF - *-- Si hay ICONO de proyecto, lo inserto - IF NOT EMPTY(toProject._Icon) - INSERT INTO TABLABIN ; - ( NAME ; - , TYPE ; - , LOCAL ; - , KEY ) ; - VALUES ; - ( SYS(2014, toProject._Icon, ADDBS(JUSTPATH(toProject._HomeDir))) + CHR(0) ; - , 'i' ; - , .T. ; - , UPPER(JUSTSTEM(toProject._Icon)) ) - ENDIF + *-- Si hay ICONO de proyecto, lo inserto + IF NOT EMPTY(toProject._Icon) + INSERT INTO TABLABIN ; + ( NAME ; + , TYPE ; + , LOCAL ; + , KEY ) ; + VALUES ; + ( SYS(2014, toProject._Icon, ADDBS(JUSTPATH(ADDBS(toProject._HomeDir)))) + CHR(0) ; + , 'i' ; + , .T. ; + , UPPER(JUSTSTEM(toProject._Icon)) ) + ENDIF - *-- Agrego los ARCHIVOS - FOR EACH loFile IN toProject FOXOBJECT - INSERT INTO TABLABIN ; - ( NAME ; - , TYPE ; - , EXCLUDE ; - , MAINPROG ; - , COMMENTS ; - , LOCAL ; - , CPID ; - , ID ; - , TIMESTAMP ; - , OBJREV ; - , KEY ) ; - VALUES ; - ( loFile._Name + CHR(0) ; - , THIS.fileTypeCode(JUSTEXT(loFile._Name)) ; - , loFile._Exclude ; - , (loFile._Name == lcMainProg) ; - , loFile._Comments ; - , .T. ; - , loFile._CPID ; - , IIF( toFoxBin2Prg.l_ClearUniqueID, 0, loFile._ID ) ; - , IIF( toFoxBin2Prg.l_UseTimestamps, loFile._TimeStamp, 0 ) ; - , loFile._ObjRev ; - , UPPER(JUSTSTEM(loFile._Name)) ) - ENDFOR + *-- Agrego los ARCHIVOS + FOR EACH loFile IN toProject FOXOBJECT + INSERT INTO TABLABIN ; + ( NAME ; + , TYPE ; + , EXCLUDE ; + , MAINPROG ; + , COMMENTS ; + , LOCAL ; + , CPID ; + , ID ; + , TIMESTAMP ; + , OBJREV ; + , KEY ) ; + VALUES ; + ( loFile._Name + CHR(0) ; + , .fileTypeCode(JUSTEXT(loFile._Name)) ; + , loFile._Exclude ; + , (loFile._Name == lcMainProg) ; + , loFile._Comments ; + , .T. ; + , loFile._CPID ; + , IIF( toFoxBin2Prg.l_ClearUniqueID, 0, loFile._ID ) ; + , IIF( toFoxBin2Prg.l_UseTimestamps, loFile._TimeStamp, 0 ) ; + , loFile._ObjRev ; + , UPPER(JUSTSTEM(loFile._Name)) ) + ENDFOR - USE IN (SELECT("TABLABIN")) + USE IN (SELECT("TABLABIN")) + ENDWITH && THIS CATCH TO loEx @@ -5267,15 +5342,15 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin LOCAL I, lc_Comentario, lcLine, llBuildProj_Completed, llDevInfo_Completed ; , llServerHead_Completed, llFileComments_Completed, llFoxBin2Prg_Completed ; , llExcludedFiles_Completed, llTextFiles_Completed, llProjectProperties_Completed - STORE 0 TO I - THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + STORE 0 TO I + .c_Type = UPPER(JUSTEXT(.c_OutputFile)) - IF tnCodeLines > 1 - toProject = CREATEOBJECT('CL_PROJECT') - *toProject._HomeDir = ADDBS(JUSTPATH(THIS.c_OutputFile)) + IF tnCodeLines > 1 + toProject = CREATEOBJECT('CL_PROJECT') + *toProject._HomeDir = ADDBS(JUSTPATH(.c_OutputFile)) - WITH THIS FOR I = 1 TO tnCodeLines .set_Line( @lcLine, @taCodeLines, I ) @@ -5314,8 +5389,8 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin ENDCASE ENDFOR - ENDWITH && THIS - ENDIF + ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -5426,21 +5501,23 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin IF LEFT( tcLine, LEN(C_DEVINFO_I) ) == C_DEVINFO_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - .set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE LEFT( tcLine, LEN(C_DEVINFO_F) ) == C_DEVINFO_F - I = I + 1 - EXIT + DO CASE + CASE LEFT( tcLine, LEN(C_DEVINFO_F) ) == C_DEVINFO_F + I = I + 1 + EXIT - CASE THIS.lineIsOnlyCommentAndNoMetadata( @tcLine ) - LOOP && Saltear comentarios + CASE .lineIsOnlyCommentAndNoMetadata( @tcLine ) + LOOP && Saltear comentarios - OTHERWISE - toProject.setParsedProjInfoLine( @tcLine ) - ENDCASE - ENDFOR + OTHERWISE + toProject.setParsedProjInfoLine( @tcLine ) + ENDCASE + ENDFOR + ENDWITH && THIS I = I - 1 ENDIF @@ -5479,21 +5556,23 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin STORE NULL TO loServerHead, loServerData loServerHead = toProject._ServerHead - FOR I = I + 1 TO tnCodeLines - .set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE LEFT( tcLine, LEN(C_SRV_HEAD_F) ) == C_SRV_HEAD_F - I = I + 1 - EXIT + DO CASE + CASE LEFT( tcLine, LEN(C_SRV_HEAD_F) ) == C_SRV_HEAD_F + I = I + 1 + EXIT - CASE THIS.lineIsOnlyCommentAndNoMetadata( @tcLine ) - LOOP && Saltear comentarios + CASE .lineIsOnlyCommentAndNoMetadata( @tcLine ) + LOOP && Saltear comentarios - OTHERWISE - loServerHead.setParsedHeadInfoLine( @tcLine ) - ENDCASE - ENDFOR + OTHERWISE + loServerHead.setParsedHeadInfoLine( @tcLine ) + ENDCASE + ENDFOR + ENDWITH && THIS I = I - 1 ENDIF @@ -5534,21 +5613,23 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin loServerHead = toProject._ServerHead loServerData = loServerHead.getServerDataObject() - FOR I = I + 1 TO tnCodeLines - .set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE LEFT( tcLine, LEN(C_SRV_DATA_F) ) == C_SRV_DATA_F - I = I + 1 - EXIT + DO CASE + CASE LEFT( tcLine, LEN(C_SRV_DATA_F) ) == C_SRV_DATA_F + I = I + 1 + EXIT - CASE THIS.lineIsOnlyCommentAndNoMetadata( @tcLine ) - LOOP && Saltear comentarios + CASE .lineIsOnlyCommentAndNoMetadata( @tcLine ) + LOOP && Saltear comentarios - OTHERWISE - loServerHead.setParsedInfoLine( loServerData, @tcLine ) - ENDCASE - ENDFOR + OTHERWISE + loServerHead.setParsedInfoLine( loServerData, @tcLine ) + ENDCASE + ENDFOR + ENDWITH && THIS loServerHead.add_Server( loServerData ) I = I - 1 @@ -5586,25 +5667,27 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin IF LEFT( tcLine, LEN(C_FILE_CMTS_I) ) == C_FILE_CMTS_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - .set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE LEFT( tcLine, LEN(C_FILE_CMTS_F) ) == C_FILE_CMTS_F - I = I + 1 - EXIT + DO CASE + CASE LEFT( tcLine, LEN(C_FILE_CMTS_F) ) == C_FILE_CMTS_F + I = I + 1 + EXIT - CASE THIS.lineIsOnlyCommentAndNoMetadata( @tcLine ) - LOOP && Saltear comentarios + CASE .lineIsOnlyCommentAndNoMetadata( @tcLine ) + LOOP && Saltear comentarios - OTHERWISE - lcFile = LOWER( ALLTRIM( STRTRAN( CHRTRAN( NORMALIZE( STREXTRACT( tcLine, ".ITEM(", ")", 1, 1 ) ), ["], [] ), 'lcCurDir+', '', 1, 1, 1) ) ) - lcComment = ALLTRIM( CHRTRAN( STREXTRACT( tcLine, "=", "", 1, 2 ), ['], [] ) ) - loFile = toProject( lcFile ) - loFile._Comments = lcComment - loFile = NULL - ENDCASE - ENDFOR + OTHERWISE + lcFile = LOWER( ALLTRIM( STRTRAN( CHRTRAN( NORMALIZE( STREXTRACT( tcLine, ".ITEM(", ")", 1, 1 ) ), ["], [] ), 'lcCurDir+', '', 1, 1, 1) ) ) + lcComment = ALLTRIM( CHRTRAN( STREXTRACT( tcLine, "=", "", 1, 2 ), ['], [] ) ) + loFile = toProject( lcFile ) + loFile._Comments = lcComment + loFile = NULL + ENDCASE + ENDFOR + ENDWITH && THIS I = I - 1 ENDIF @@ -5641,25 +5724,27 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin IF LEFT( tcLine, LEN(C_FILE_EXCL_I) ) == C_FILE_EXCL_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - .set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE LEFT( tcLine, LEN(C_FILE_EXCL_F) ) == C_FILE_EXCL_F - I = I + 1 - EXIT + DO CASE + CASE LEFT( tcLine, LEN(C_FILE_EXCL_F) ) == C_FILE_EXCL_F + I = I + 1 + EXIT - CASE THIS.lineIsOnlyCommentAndNoMetadata( @tcLine ) - LOOP && Saltear comentarios + CASE .lineIsOnlyCommentAndNoMetadata( @tcLine ) + LOOP && Saltear comentarios - OTHERWISE - lcFile = LOWER( ALLTRIM( STRTRAN( CHRTRAN( NORMALIZE( STREXTRACT( tcLine, ".ITEM(", ")", 1, 1 ) ), ["], [] ), 'lcCurDir+', '', 1, 1, 1) ) ) - llExclude = EVALUATE( ALLTRIM( CHRTRAN( STREXTRACT( tcLine, "=", "", 1, 2 ), ['], [] ) ) ) - loFile = toProject( lcFile ) - loFile._Exclude = llExclude - loFile = NULL - ENDCASE - ENDFOR + OTHERWISE + lcFile = LOWER( ALLTRIM( STRTRAN( CHRTRAN( NORMALIZE( STREXTRACT( tcLine, ".ITEM(", ")", 1, 1 ) ), ["], [] ), 'lcCurDir+', '', 1, 1, 1) ) ) + llExclude = EVALUATE( ALLTRIM( CHRTRAN( STREXTRACT( tcLine, "=", "", 1, 2 ), ['], [] ) ) ) + loFile = toProject( lcFile ) + loFile._Exclude = llExclude + loFile = NULL + ENDCASE + ENDFOR + ENDWITH && THIS I = I - 1 ENDIF @@ -5696,25 +5781,27 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin IF LEFT( tcLine, LEN(C_FILE_TXT_I) ) == C_FILE_TXT_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - .set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE LEFT( tcLine, LEN(C_FILE_TXT_F) ) == C_FILE_TXT_F - I = I + 1 - EXIT + DO CASE + CASE LEFT( tcLine, LEN(C_FILE_TXT_F) ) == C_FILE_TXT_F + I = I + 1 + EXIT - CASE THIS.lineIsOnlyCommentAndNoMetadata( @tcLine ) - LOOP && Saltear comentarios + CASE .lineIsOnlyCommentAndNoMetadata( @tcLine ) + LOOP && Saltear comentarios - OTHERWISE - lcFile = LOWER( ALLTRIM( STRTRAN( CHRTRAN( NORMALIZE( STREXTRACT( tcLine, ".ITEM(", ")", 1, 1 ) ), ["], [] ), 'lcCurDir+', '', 1, 1, 1) ) ) - lcType = ALLTRIM( CHRTRAN( STREXTRACT( tcLine, "=", "", 1, 2 ), ['], [] ) ) - loFile = toProject( lcFile ) - loFile._Type = lcType - loFile = NULL - ENDCASE - ENDFOR + OTHERWISE + lcFile = LOWER( ALLTRIM( STRTRAN( CHRTRAN( NORMALIZE( STREXTRACT( tcLine, ".ITEM(", ")", 1, 1 ) ), ["], [] ), 'lcCurDir+', '', 1, 1, 1) ) ) + lcType = ALLTRIM( CHRTRAN( STREXTRACT( tcLine, "=", "", 1, 2 ), ['], [] ) ) + loFile = toProject( lcFile ) + loFile._Type = lcType + loFile = NULL + ENDCASE + ENDFOR + ENDWITH && THIS I = I - 1 ENDIF @@ -5749,33 +5836,35 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin IF LEFT( tcLine, LEN(C_PROJPROPS_I) ) == C_PROJPROPS_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - .set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS c_conversor_prg_a_pjx OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE LEFT( tcLine, LEN(C_PROJPROPS_F) ) == C_PROJPROPS_F - I = I + 1 - EXIT + DO CASE + CASE LEFT( tcLine, LEN(C_PROJPROPS_F) ) == C_PROJPROPS_F + I = I + 1 + EXIT - CASE THIS.lineIsOnlyCommentAndNoMetadata( @tcLine ) - LOOP && Saltear comentarios + CASE .lineIsOnlyCommentAndNoMetadata( @tcLine ) + LOOP && Saltear comentarios - CASE LEFT( tcLine ,2 ) == '*<' - *--- Se asigna con EVALUATE() tal cual está en el PJ2, pero quitando el marcador *< /> - lcLine = STUFF( ALLTRIM( STREXTRACT( tcLine, '*<', '/>' ) ), 2, 0, '_' ) - toProject.setParsedProjInfoLine( lcLine ) + CASE LEFT( tcLine ,2 ) == '*<' + *--- Se asigna con EVALUATE() tal cual está en el PJ2, pero quitando el marcador *< /> + lcLine = STUFF( ALLTRIM( STREXTRACT( tcLine, '*<', '/>' ) ), 2, 0, '_' ) + toProject.setParsedProjInfoLine( lcLine ) - CASE UPPER( LEFT( tcLine, 9 ) ) == '.SETMAIN(' - *-- Cambio "SetMain()" por "_MainProg =" - lcLine = '._MainProg = ' + LOWER( STREXTRACT( ALLTRIM( tcLine), '.SetMain(', ')', 1, 1 ) ) - toProject.setParsedProjInfoLine( lcLine ) + CASE UPPER( LEFT( tcLine, 9 ) ) == '.SETMAIN(' + *-- Cambio "SetMain()" por "_MainProg =" + lcLine = '._MainProg = ' + LOWER( STREXTRACT( ALLTRIM( tcLine), '.SetMain(', ')', 1, 1 ) ) + toProject.setParsedProjInfoLine( lcLine ) - OTHERWISE - *--- Se asigna con EVALUATE() tal cual está en el PJ2 - lcLine = STUFF( ALLTRIM( tcLine), 2, 0, '_' ) - toProject.setParsedProjInfoLine( lcLine ) - ENDCASE - ENDFOR + OTHERWISE + *--- Se asigna con EVALUATE() tal cual está en el PJ2 + lcLine = STUFF( ALLTRIM( tcLine), 2, 0, '_' ) + toProject.setParsedProjInfoLine( lcLine ) + ENDCASE + ENDFOR + ENDWITH && THIS I = I - 1 ENDIF @@ -5827,22 +5916,25 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin TRY LOCAL lnCodError, loEx AS EXCEPTION, loReg, lcLine, laCodeLines(1), lnCodeLines, lnFB2P_Version, lcSourceFile ; , laBloquesExclusion(1,2), lnBloquesExclusion, I - STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version - STORE '' TO lcLine, lcSourceFile - STORE NULL TO loReg, toModulo - C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + WITH THIS AS c_conversor_prg_a_frx OF 'FOXBIN2PRG.PRG' + STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version + STORE '' TO lcLine, lcSourceFile + STORE NULL TO loReg, toModulo - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - *-- Creo el reporte - THIS.createReport() + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte - THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toReport ) + *-- Creo el reporte + .createReport() - THIS.escribirArchivoBin( @toReport, toFoxBin2Prg ) + *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toReport ) + + .escribirArchivoBin( @toReport, toFoxBin2Prg ) + ENDWITH && THIS CATCH TO loEx @@ -5971,13 +6063,13 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin LOCAL I, lc_Comentario, lcLine, llFoxBin2Prg_Completed STORE 0 TO I - THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) + WITH THIS AS c_conversor_prg_a_frx OF 'FOXBIN2PRG.PRG' + .c_Type = UPPER(JUSTEXT(.c_OutputFile)) - IF tnCodeLines > 1 - toReport = NULL - toReport = CREATEOBJECT('CL_REPORT') + IF tnCodeLines > 1 + toReport = NULL + toReport = CREATEOBJECT('CL_REPORT') - WITH THIS FOR I = 1 TO tnCodeLines .set_Line( @lcLine, @taCodeLines, I ) @@ -5993,8 +6085,8 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin ENDCASE ENDFOR - ENDWITH && THIS - ENDIF + ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -6135,9 +6227,9 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin IF LEFT( tcLine, LEN(C_TAG_REPORTE) + 1 ) == '<' + C_TAG_REPORTE + '' llBloqueEncontrado = .T. - loReg = THIS.emptyRecord() + WITH THIS AS c_conversor_prg_a_frx OF 'FOXBIN2PRG.PRG' + loReg = .emptyRecord() - WITH THIS FOR I = I + 1 TO tnCodeLines lcComment = '' .set_Line( @tcLine, @taCodeLines, I ) @@ -6158,11 +6250,11 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin *-- ARREGLO ALGUNOS VALORES CAMBIADOS AL TEXTUALIZAR DO CASE CASE loReg.ObjType == "1" - loReg.TAG = THIS.decode_SpecialCodes_1_31( loReg.TAG ) + loReg.TAG = .decode_SpecialCodes_1_31( loReg.TAG ) CASE loReg.ObjType == "25" loReg.TAG = SUBSTR(loReg.TAG,3) && Quito el ENTER agregado antes OTHERWISE - loReg.TAG = THIS.decode_SpecialCodes_1_31( loReg.TAG ) + loReg.TAG = .decode_SpecialCodes_1_31( loReg.TAG ) ENDCASE CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'tag2' ) @@ -6236,15 +6328,17 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin STORE '' TO lcLine, lcSourceFile STORE NULL TO loReg, toModulo - C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG' + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte - THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toTable ) + *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toTable ) - THIS.escribirArchivoBin( @toTable ) + .escribirArchivoBin( @toTable ) + ENDWITH && THIS CATCH TO loEx @@ -6279,100 +6373,102 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin LOCAL lcCreateTable, lcLongDec, lcFieldDef, lcIndex, ldLastUpdate, lcTempDBC LOCAL loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG' - loDBFUtils = CREATEOBJECT('CL_DBF_UTILS') + WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG' + loDBFUtils = CREATEOBJECT('CL_DBF_UTILS') - STORE 0 TO lnCodError - STORE '' TO lcIndex, lcFieldDef + STORE 0 TO lnCodError + STORE '' TO lcIndex, lcFieldDef - ERASE (FORCEEXT(THIS.c_OutputFile, 'DBF')) - ERASE (FORCEEXT(THIS.c_OutputFile, 'FPT')) - ERASE (FORCEEXT(THIS.c_OutputFile, 'CDX')) + ERASE (FORCEEXT(.c_OutputFile, 'DBF')) + ERASE (FORCEEXT(.c_OutputFile, 'FPT')) + ERASE (FORCEEXT(.c_OutputFile, 'CDX')) - IF EMPTY(toTable._Database) - lcCreateTable = 'CREATE TABLE "' + THIS.c_OutputFile + '" FREE CodePage=' + toTable._CodePage + ' (' - ELSE - lcTempDBC = FORCEPATH( '_FB2P', JUSTPATH(THIS.c_OutputFile) ) - CREATE DATABASE ( lcTempDBC ) - lcCreateTable = 'CREATE TABLE "' + THIS.c_OutputFile + '" CodePage=' + toTable._CodePage + ' (' - ENDIF - - *-- Conformo los campos - FOR EACH loField IN toTable._Fields FOXOBJECT - lcLongDec = '' - - *-- Nombre, Tipo - lcFieldDef = lcFieldDef + ', ' + loField._Name + ' ' + loField._Type - - *-- Longitud - IF INLIST( loField._Type, 'C', 'N', 'F', 'Q', 'V' ) - lcLongDec = lcLongDec + '(' + loField._Width - ENDIF - - *-- Decimales - IF INLIST( loField._Type, 'B', 'N', 'F' ) AND loField._Decimals > '0' - IF EMPTY(lcLongDec) - lcLongDec = lcLongDec + '(' - ELSE - lcLongDec = lcLongDec + ',' - ENDIF - lcLongDec = lcLongDec + loField._Decimals - ENDIF - - IF NOT EMPTY(lcLongDec) - lcLongDec = lcLongDec + ')' - ENDIF - - lcFieldDef = lcFieldDef + lcLongDec - - *-- Null - lcFieldDef = lcFieldDef + IIF( loField._Null = '.T.', ' NULL', ' NOT NULL' ) - - *-- NoCPTran - IF loField._NoCPTran = '.T.' - lcFieldDef = lcFieldDef + ' NOCPTRANS' - ENDIF - - *-- AutoInc - IF loField._AutoInc_NextVal <> '0' - lcFieldDef = lcFieldDef + ' AUTOINC NEXTVAL ' + loField._AutoInc_NextVal + ' STEP ' + loField._AutoInc_Step - ENDIF - - loField = NULL - ENDFOR - - lcCreateTable = lcCreateTable + SUBSTR(lcFieldDef,3) + ')' - &lcCreateTable. - - *-- Regenero los índices - FOR EACH loIndex IN toTable._Indexes FOXOBJECT - lcIndex = 'INDEX ON ' + loIndex._Key + ' TAG ' + loIndex._TagName - - IF loIndex._TagType = 'BINARY' - lcIndex = lcIndex + ' BINARY' + IF EMPTY(toTable._Database) + lcCreateTable = 'CREATE TABLE "' + .c_OutputFile + '" FREE CodePage=' + toTable._CodePage + ' (' ELSE - lcIndex = lcIndex + ' COLLATE "' + loIndex._Collate + '"' - - IF NOT EMPTY(loIndex._Filter) - lcIndex = lcIndex + ' FOR ' + loIndex._Filter - ENDIF - - lcIndex = lcIndex + ' ' + loIndex._Order - - IF NOT INLIST(loIndex._TagType, 'NORMAL', 'REGULAR') - *-- Si es PRIMARY lo cambio a CANDIDATE y luego lo recodifico - lcIndex = lcIndex + ' ' + STRTRAN( loIndex._TagType, 'PRIMARY', 'CANDIDATE' ) - ENDIF + lcTempDBC = FORCEPATH( '_FB2P', JUSTPATH(.c_OutputFile) ) + CREATE DATABASE ( lcTempDBC ) + lcCreateTable = 'CREATE TABLE "' + .c_OutputFile + '" CodePage=' + toTable._CodePage + ' (' ENDIF - &lcIndex. - ENDFOR + *-- Conformo los campos + FOR EACH loField IN toTable._Fields FOXOBJECT + lcLongDec = '' + + *-- Nombre, Tipo + lcFieldDef = lcFieldDef + ', ' + loField._Name + ' ' + loField._Type + + *-- Longitud + IF INLIST( loField._Type, 'C', 'N', 'F', 'Q', 'V' ) + lcLongDec = lcLongDec + '(' + loField._Width + ENDIF + + *-- Decimales + IF INLIST( loField._Type, 'B', 'N', 'F' ) AND loField._Decimals > '0' + IF EMPTY(lcLongDec) + lcLongDec = lcLongDec + '(' + ELSE + lcLongDec = lcLongDec + ',' + ENDIF + lcLongDec = lcLongDec + loField._Decimals + ENDIF + + IF NOT EMPTY(lcLongDec) + lcLongDec = lcLongDec + ')' + ENDIF + + lcFieldDef = lcFieldDef + lcLongDec + + *-- Null + lcFieldDef = lcFieldDef + IIF( loField._Null = '.T.', ' NULL', ' NOT NULL' ) + + *-- NoCPTran + IF loField._NoCPTran = '.T.' + lcFieldDef = lcFieldDef + ' NOCPTRANS' + ENDIF + + *-- AutoInc + IF loField._AutoInc_NextVal <> '0' + lcFieldDef = lcFieldDef + ' AUTOINC NEXTVAL ' + loField._AutoInc_NextVal + ' STEP ' + loField._AutoInc_Step + ENDIF + + loField = NULL + ENDFOR + + lcCreateTable = lcCreateTable + SUBSTR(lcFieldDef,3) + ')' + &lcCreateTable. + + *-- Regenero los índices + FOR EACH loIndex IN toTable._Indexes FOXOBJECT + lcIndex = 'INDEX ON ' + loIndex._Key + ' TAG ' + loIndex._TagName + + IF loIndex._TagType = 'BINARY' + lcIndex = lcIndex + ' BINARY' + ELSE + lcIndex = lcIndex + ' COLLATE "' + loIndex._Collate + '"' + + IF NOT EMPTY(loIndex._Filter) + lcIndex = lcIndex + ' FOR ' + loIndex._Filter + ENDIF + + lcIndex = lcIndex + ' ' + loIndex._Order + + IF NOT INLIST(loIndex._TagType, 'NORMAL', 'REGULAR') + *-- Si es PRIMARY lo cambio a CANDIDATE y luego lo recodifico + lcIndex = lcIndex + ' ' + STRTRAN( loIndex._TagType, 'PRIMARY', 'CANDIDATE' ) + ENDIF + ENDIF + + &lcIndex. + ENDFOR - USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) + USE IN (SELECT(JUSTSTEM(.c_OutputFile))) - *-- La actualización de la fecha sirve para evitar diferencias al regenerar el DBF - ldLastUpdate = EVALUATE( '{^' + toTable._LastUpdate + '}' ) - loDBFUtils.write_DBC_BackLink( THIS.c_OutputFile, toTable._Database, ldLastUpdate ) + *-- La actualización de la fecha sirve para evitar diferencias al regenerar el DBF + ldLastUpdate = EVALUATE( '{^' + toTable._LastUpdate + '}' ) + loDBFUtils.write_DBC_BackLink( .c_OutputFile, toTable._Database, ldLastUpdate ) + ENDWITH && THIS CATCH TO loEx @@ -6424,13 +6520,13 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin LOCAL I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueTable_Completed STORE 0 TO I - THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) + WITH THIS AS c_conversor_prg_a_dbf OF 'FOXBIN2PRG.PRG' + .c_Type = UPPER(JUSTEXT(.c_OutputFile)) - IF tnCodeLines > 1 - toTable = NULL - toTable = CREATEOBJECT('CL_DBF_TABLE') + IF tnCodeLines > 1 + toTable = NULL + toTable = CREATEOBJECT('CL_DBF_TABLE') - WITH THIS FOR I = 1 TO tnCodeLines .set_Line( @lcLine, @taCodeLines, I ) @@ -6447,8 +6543,8 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin ENDCASE ENDFOR - ENDWITH && THIS - ENDIF + ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -6504,18 +6600,20 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin STORE '' TO lcLine, lcSourceFile STORE NULL TO loReg, toModulo - C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - *-- Creo la tabla - *THIS.createTable() + *-- Creo la tabla + *.createTable() - *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte - THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toDatabase ) + *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toDatabase ) - THIS.escribirArchivoBin( @toDatabase, toFoxBin2Prg ) + .escribirArchivoBin( @toDatabase, toFoxBin2Prg ) + ENDWITH && THIS CATCH TO loEx @@ -6595,13 +6693,13 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin LOCAL I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueDatabase_Completed STORE 0 TO I - THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) + WITH THIS AS c_conversor_prg_a_dbc OF 'FOXBIN2PRG.PRG' + .c_Type = UPPER(JUSTEXT(.c_OutputFile)) - IF tnCodeLines > 1 - toDatabase = NULL - toDatabase = CREATEOBJECT('CL_DBC') + IF tnCodeLines > 1 + toDatabase = NULL + toDatabase = CREATEOBJECT('CL_DBC') - WITH THIS FOR I = 1 TO tnCodeLines .set_Line( @lcLine, @taCodeLines, I ) @@ -6618,8 +6716,8 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDCASE ENDFOR - ENDWITH && THIS - ENDIF + ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -6674,18 +6772,20 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin STORE '' TO lcLine, lcSourceFile STORE NULL TO loReg, toModulo - C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) - lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) + WITH THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + C_FB2PRG_CODE = FILETOSTR( .c_InputFile ) + lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) + toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) - *-- Creo la tabla - THIS.createMenu() + *-- Creo la tabla + .createMenu() - *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte - THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toMenu ) + *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + .identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toMenu ) - THIS.escribirArchivoBin( @toMenu ) + .escribirArchivoBin( @toMenu ) + ENDWITH && THIS CATCH TO loEx @@ -6728,13 +6828,13 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin LOCAL I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueMenu_Completed STORE 0 TO I - THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) + WITH THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + .c_Type = UPPER(JUSTEXT(.c_OutputFile)) - IF tnCodeLines > 1 - toMenu = NULL - toMenu = CREATEOBJECT('CL_MENU') + IF tnCodeLines > 1 + toMenu = NULL + toMenu = CREATEOBJECT('CL_MENU') - WITH THIS FOR I = 1 TO tnCodeLines .set_Line( @lcLine, @taCodeLines, I ) @@ -6751,8 +6851,8 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin ENDCASE ENDFOR - ENDWITH && THIS - ENDIF + ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -6877,42 +6977,44 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LPARAMETERS toRegObj, toRegClass, tcMethods, taMethods, taCode, tnMethodCount TRY - THIS.SortMethod( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount ) + WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' + .SortMethod( toRegObj.METHODS, @taMethods, @taCode, '', @tnMethodCount ) - *-- Ubico los métodos protegidos y les cambio la definición. - *-- Los métodos se deben generar con la ruta completa, porque si no es imposible saber a que objeto corresponden, - *-- o si son de la clase. - IF tnMethodCount > 0 THEN - FOR I = 1 TO tnMethodCount - IF EMPTY(toRegObj.PARENT) - tcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1) - ELSE - DO CASE - CASE '.' $ toRegObj.PARENT - tcMethodName = SUBSTR(toRegObj.PARENT, AT('.', toRegObj.PARENT) + 1) + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1) - - CASE LEFT(toRegObj.PARENT + '.', LEN( toRegClass.OBJNAME + '.' ) ) == toRegClass.OBJNAME + '.' + *-- Ubico los métodos protegidos y les cambio la definición. + *-- Los métodos se deben generar con la ruta completa, porque si no es imposible saber a que objeto corresponden, + *-- o si son de la clase. + IF tnMethodCount > 0 THEN + FOR I = 1 TO tnMethodCount + IF EMPTY(toRegObj.PARENT) tcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1) + ELSE + DO CASE + CASE '.' $ toRegObj.PARENT + tcMethodName = SUBSTR(toRegObj.PARENT, AT('.', toRegObj.PARENT) + 1) + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1) - OTHERWISE - tcMethodName = toRegObj.PARENT + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1) + CASE LEFT(toRegObj.PARENT + '.', LEN( toRegClass.OBJNAME + '.' ) ) == toRegClass.OBJNAME + '.' + tcMethodName = toRegObj.OBJNAME + '.' + taMethods(I,1) - ENDCASE - ENDIF + OTHERWISE + tcMethodName = toRegObj.PARENT + '.' + toRegObj.OBJNAME + '.' + taMethods(I,1) - *-- Genero el método SIN indentar, ya que se hace luego - *tcMethods2 = tcMethods - *TEXT TO tcMethods2 ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<'PROCEDURE'>> <> - * <> - * <<'ENDPROC'>> - *ENDTEXT - *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso - tcMethods = tcMethods + CR_LF + 'PROCEDURE ' + tcMethodName - tcMethods = tcMethods + CR_LF + THIS.IndentarMemo( taCode(taMethods(I,2)) ) - tcMethods = tcMethods + CR_LF + 'ENDPROC' - ENDFOR - ENDIF + ENDCASE + ENDIF + + *-- Genero el método SIN indentar, ya que se hace luego + *tcMethods2 = tcMethods + *TEXT TO tcMethods2 ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<'PROCEDURE'>> <> + * <<.IndentarMemo( taCode(taMethods(I,2)) )>> + * <<'ENDPROC'>> + *ENDTEXT + *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso + tcMethods = tcMethods + CR_LF + 'PROCEDURE ' + tcMethodName + tcMethods = tcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)) ) + tcMethods = tcMethods + CR_LF + 'ENDPROC' + ENDFOR + ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -7016,88 +7118,90 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base tnPropsAndValues_Count = 0 IF NOT EMPTY(m.tcMemo) - lnItemCount = ALINES(laItems, m.tcMemo, 0, CR_LF) && Específicamente CR+LF para que no reconozca los CR o LF por separado - X = 0 + WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' + lnItemCount = ALINES(laItems, m.tcMemo, 0, CR_LF) && Específicamente CR+LF para que no reconozca los CR o LF por separado + X = 0 - IF lnItemCount <= 1 AND EMPTY(laItems) - lnItemCount = 0 - EXIT - ENDIF - - - *-- 1) OBTENCIÓN Y SEPARACIÓN DE PROPIEDADES Y VALORES - *-- Crear un array con los valores especiales que pueden estar repartidos entre varias lineas - FOR I = 1 TO m.lnItemCount - IF EMPTY( laItems(I) ) - LOOP + IF lnItemCount <= 1 AND EMPTY(laItems) + lnItemCount = 0 + EXIT ENDIF - X = X + 1 - DIMENSION taPropsAndValues(X,2) - IF C_MPROPHEADER $ laItems(I) - *-- Solo entrará por aquí cuando se evalúe una propiedad de PROPERTIES con un valor especial (largo) - lnLenAcum = 0 - lnPosEQ = AT( '=', laItems(I) ) - lcPropName = LEFT( laItems(I), lnPosEQ - 2 ) - lnLenVal = INT( VAL( SUBSTR( laItems(I), lnPosEQ + 2 + 517, 8) ) ) - lcValue = SUBSTR( laItems(I), lnPosEQ + 2 + 517 + 8 ) - - IF LEN( lcValue ) < lnLenVal - *-- Como el valor es multi-línea, debo agregarle los CR_LF que le quitó el ALINES() - FOR I = I + 1 TO m.lnItemCount - lcValue = lcValue + CR_LF + laItems(I) - - IF LEN( lcValue ) >= lnLenVal - EXIT - ENDIF - ENDFOR - - lcValue = C_FB2P_VALUE_I + CR_LF + lcValue + CR_LF + C_FB2P_VALUE_F - ELSE - lcValue = C_FB2P_VALUE_I + lcValue + C_FB2P_VALUE_F + *-- 1) OBTENCIÓN Y SEPARACIÓN DE PROPIEDADES Y VALORES + *-- Crear un array con los valores especiales que pueden estar repartidos entre varias lineas + FOR I = 1 TO m.lnItemCount + IF EMPTY( laItems(I) ) + LOOP ENDIF - *-- Es un valor especial, por lo que se encapsula en un marcador especial - taPropsAndValues(X,1) = lcPropName - taPropsAndValues(X,2) = THIS.normalizarValorPropiedad( lcPropName, lcValue, '' ) + X = X + 1 + DIMENSION taPropsAndValues(X,2) - ELSE - *-- Propiedad normal - *-- SI HACE FALTA QUE LOS MÉTODOS ESTÉN AL FINAL, DESCOMENTAR ESTO (Y EL DE MÁS ABAJO) - *IF LEFT(laItems(I), 1) == '*' && Only Reserved3 have this + IF C_MPROPHEADER $ laItems(I) + *-- Solo entrará por aquí cuando se evalúe una propiedad de PROPERTIES con un valor especial (largo) + lnLenAcum = 0 + lnPosEQ = AT( '=', laItems(I) ) + lcPropName = LEFT( laItems(I), lnPosEQ - 2 ) + lnLenVal = INT( VAL( SUBSTR( laItems(I), lnPosEQ + 2 + 517, 8) ) ) + lcValue = SUBSTR( laItems(I), lnPosEQ + 2 + 517 + 8 ) + + IF LEN( lcValue ) < lnLenVal + *-- Como el valor es multi-línea, debo agregarle los CR_LF que le quitó el ALINES() + FOR I = I + 1 TO m.lnItemCount + lcValue = lcValue + CR_LF + laItems(I) + + IF LEN( lcValue ) >= lnLenVal + EXIT + ENDIF + ENDFOR + + lcValue = C_FB2P_VALUE_I + CR_LF + lcValue + CR_LF + C_FB2P_VALUE_F + ELSE + lcValue = C_FB2P_VALUE_I + lcValue + C_FB2P_VALUE_F + ENDIF + + *-- Es un valor especial, por lo que se encapsula en un marcador especial + taPropsAndValues(X,1) = lcPropName + taPropsAndValues(X,2) = .normalizarValorPropiedad( lcPropName, lcValue, '' ) + + ELSE + *-- Propiedad normal + *-- SI HACE FALTA QUE LOS MÉTODOS ESTÉN AL FINAL, DESCOMENTAR ESTO (Y EL DE MÁS ABAJO) + *IF LEFT(laItems(I), 1) == '*' && Only Reserved3 have this + * LOOP + *ENDIF + + lnPosEQ = AT( '=', laItems(I) ) + taPropsAndValues(X,1) = LEFT( laItems(I), lnPosEQ - 2 ) + taPropsAndValues(X,2) = .normalizarValorPropiedad( taPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' ) + ENDIF + ENDFOR + + + tnPropsAndValues_Count = X + lcMethods = '' + + + *-- 2) SORT + .sortPropsAndValues( @taPropsAndValues, tnPropsAndValues_Count, tnSort ) + + + *-- Agregar propiedades primero + FOR I = 1 TO m.tnPropsAndValues_Count + *-- SI HACE FALTA QUE LOS MÉTODOS ESTÉN AL FINAL, DESCOMENTAR ESTO (Y EL DE MÁS ARRIBA) + *IF LEFT(taPropsAndValues(I,1), 1) == '*' && Only Reserved3 have this + * lcMethods = m.lcMethods + m.taPropsAndValues(I,1) + ' = ' + m.taPropsAndValues(I,2) + CR_LF * LOOP *ENDIF - lnPosEQ = AT( '=', laItems(I) ) - taPropsAndValues(X,1) = LEFT( laItems(I), lnPosEQ - 2 ) - taPropsAndValues(X,2) = THIS.normalizarValorPropiedad( taPropsAndValues(X,1), LTRIM( SUBSTR( laItems(I), lnPosEQ + 2 ) ), '' ) - ENDIF - ENDFOR + tcSortedMemo = m.tcSortedMemo + m.taPropsAndValues(I,1) + ' = ' + m.taPropsAndValues(I,2) + CR_LF + ENDFOR + *-- Agregar métodos al final + tcSortedMemo = m.tcSortedMemo + m.lcMethods - tnPropsAndValues_Count = X - lcMethods = '' - - - *-- 2) SORT - THIS.sortPropsAndValues( @taPropsAndValues, tnPropsAndValues_Count, tnSort ) - - - *-- Agregar propiedades primero - FOR I = 1 TO m.tnPropsAndValues_Count - *-- SI HACE FALTA QUE LOS MÉTODOS ESTÉN AL FINAL, DESCOMENTAR ESTO (Y EL DE MÁS ARRIBA) - *IF LEFT(taPropsAndValues(I,1), 1) == '*' && Only Reserved3 have this - * lcMethods = m.lcMethods + m.taPropsAndValues(I,1) + ' = ' + m.taPropsAndValues(I,2) + CR_LF - * LOOP - *ENDIF - - tcSortedMemo = m.tcSortedMemo + m.taPropsAndValues(I,1) + ' = ' + m.taPropsAndValues(I,2) + CR_LF - ENDFOR - - *-- Agregar métodos al final - tcSortedMemo = m.tcSortedMemo + m.lcMethods - + ENDWITH && THIS ENDIF CATCH TO loEx @@ -7482,22 +7586,25 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base IF NOT EMPTY(tcMethods) STORE '' TO lcMethods, lcMethods2 DIMENSION laMethods(1,3) - THIS.SortMethod( @tcMethods, @laMethods, @laCode, '', @lnMethodCount ) - FOR I = 1 TO lnMethodCount - *-- Genero los métodos indentados - *TEXT TO lcMethods2 ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <<>> <>PROCEDURE <> - * <> - * <<>> ENDPROC + WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' + .SortMethod( @tcMethods, @laMethods, @laCode, '', @lnMethodCount ) - *ENDTEXT - *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso - lcMethods = lcMethods + CR_LF + C_TAB + laMethods(I,3) + C_PROCEDURE + ' ' + laMethods(I,1) - lcMethods = lcMethods + CR_LF + THIS.IndentarMemo( laCode(laMethods(I,2)), CHR(9) + CHR(9) ) - lcMethods = lcMethods + CR_LF + C_TAB + C_ENDPROC - lcMethods = lcMethods + CR_LF - ENDFOR + FOR I = 1 TO lnMethodCount + *-- Genero los métodos indentados + *TEXT TO lcMethods2 ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<>> <>PROCEDURE <> + * <<.IndentarMemo( laCode(laMethods(I,2)), CHR(9) + CHR(9) )>> + * <<>> ENDPROC + + *ENDTEXT + *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso + lcMethods = lcMethods + CR_LF + C_TAB + laMethods(I,3) + C_PROCEDURE + ' ' + laMethods(I,1) + lcMethods = lcMethods + CR_LF + .IndentarMemo( laCode(laMethods(I,2)), CHR(9) + CHR(9) ) + lcMethods = lcMethods + CR_LF + C_TAB + C_ENDPROC + lcMethods = lcMethods + CR_LF + ENDFOR + ENDWITH && THIS C_FB2PRG_CODE = C_FB2PRG_CODE + lcMethods ENDIF @@ -7518,53 +7625,56 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base STORE '' TO lcMethod, lcProcDef, lcMethods, lcMethods2 IF tnMethodCount > 0 THEN - FOR I = 1 TO tnMethodCount - lcMethod = CHRTRAN( taMethods(I,1), '^', '' ) - lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1) - lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 1+8) + WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' + FOR I = 1 TO tnMethodCount + lcMethod = CHRTRAN( taMethods(I,1), '^', '' ) + lnProtectedItem = ASCAN( taProtected, taMethods(I,1), 1, 0, 0, 1) + lnCommentRow = ASCAN( taPropsAndComments, '*' + lcMethod, 1, 0, 1, 1+8) - DO CASE - CASE lnProtectedItem = 0 - *-- Método común - lcProcDef = 'PROCEDURE' + DO CASE + CASE lnProtectedItem = 0 + *-- Método común + lcProcDef = 'PROCEDURE' - CASE taProtected(lnProtectedItem) == taMethods(I,1) - *-- Método protegido - lcProcDef = 'PROTECTED PROCEDURE' + CASE taProtected(lnProtectedItem) == taMethods(I,1) + *-- Método protegido + lcProcDef = 'PROTECTED PROCEDURE' - CASE taProtected(lnProtectedItem) == taMethods(I,1) + '^' - *-- Método oculto - lcProcDef = 'HIDDEN PROCEDURE' + CASE taProtected(lnProtectedItem) == taMethods(I,1) + '^' + *-- Método oculto + lcProcDef = 'HIDDEN PROCEDURE' - ENDCASE + ENDCASE - *-- Nombre del método - TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> <> - ENDTEXT - - *-- Comentarios del método (si tiene) - IF lnCommentRow > 0 AND NOT EMPTY(taPropsAndComments(lnCommentRow,2)) - TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - <<>> && <> + *-- Nombre del método + TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> <> ENDTEXT - ENDIF - *-- Código del método - *TEXT TO lcMethods2 ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <> - * <<>> ENDPROC + *-- Comentarios del método (si tiene) + IF lnCommentRow > 0 AND NOT EMPTY(taPropsAndComments(lnCommentRow,2)) + TEXT TO lcMethods ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + <<>> && <> + ENDTEXT + ENDIF + *-- Código del método + *TEXT TO lcMethods2 ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <<.IndentarMemo( taCode(taMethods(I,2)), CHR(9) + CHR(9) )>> + * <<>> ENDPROC + + *ENDTEXT + *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso + lcMethods = lcMethods + CR_LF + .IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) + lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC' + lcMethods = lcMethods + CR_LF + ENDFOR + + *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * <> *ENDTEXT - *-- Sustituyo el TEXT/ENDTEXT aquí porque a veces quita espacios de la derecha, y eso es peligroso - lcMethods = lcMethods + CR_LF + THIS.IndentarMemo( taCode(taMethods(I,2)), C_TAB + C_TAB ) - lcMethods = lcMethods + CR_LF + C_TAB + 'ENDPROC' - lcMethods = lcMethods + CR_LF - ENDFOR - *TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * <> - *ENDTEXT + ENDWITH && THIS C_FB2PRG_CODE = C_FB2PRG_CODE + C_TAB + lcMethods &&+ CR_LF ENDIF @@ -7591,13 +7701,13 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base LOCAL lnPropsAndValues_Count, lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd, lnPropsAndComments_Count, I ; , lcPropName, lnProtectedItem, lcComentarios - WITH THIS + WITH THIS AS c_conversor_bin_a_prg OF 'FOXBIN2PRG.PRG' *-- DEFINIR PROPIEDADES ( HIDDEN, PROTECTED, *DEFINED_PAM ) DIMENSION taProtected(1) STORE '' TO lcHiddenProp, lcProtectedProp, lcPropsMethodsDefd - THIS.get_PropsAndValuesFrom_PROPERTIES( toRegClass.PROPERTIES, 1, @taPropsAndValues, @lnPropsAndValues_Count, '' ) - THIS.get_PropsAndCommentsFrom_RESERVED3( toRegClass.RESERVED3, .T., @taPropsAndComments, @lnPropsAndComments_Count, '' ) - THIS.get_PropsFrom_PROTECTED( toRegClass.PROTECTED, .T., @taProtected, 0, '' ) + .get_PropsAndValuesFrom_PROPERTIES( toRegClass.PROPERTIES, 1, @taPropsAndValues, @lnPropsAndValues_Count, '' ) + .get_PropsAndCommentsFrom_RESERVED3( toRegClass.RESERVED3, .T., @taPropsAndComments, @lnPropsAndComments_Count, '' ) + .get_PropsFrom_PROTECTED( toRegClass.PROTECTED, .T., @taProtected, 0, '' ) IF lnPropsAndValues_Count > 0 THEN *-- Recorro las propiedades (campo Properties) para ir conformando @@ -7624,11 +7734,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ENDCASE ENDFOR - THIS.write_DEFINED_PAM( @taPropsAndComments, lnPropsAndComments_Count ) + .write_DEFINED_PAM( @taPropsAndComments, lnPropsAndComments_Count ) - THIS.write_HIDDEN_Properties( @lcHiddenProp ) + .write_HIDDEN_Properties( @lcHiddenProp ) - THIS.write_PROTECTED_Properties( @lcProtectedProp ) + .write_PROTECTED_Properties( @lcProtectedProp ) *-- Escribo las propiedades de la clase y sus comentarios (los comentarios aquí son redundantes) FOR I = 1 TO ALEN(taPropsAndValues, 1) @@ -8335,129 +8445,131 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) STORE NULL TO loRegClass, loRegObj - USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG - SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - USE IN (SELECT("_TABLAORIG")) + WITH THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' + USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + USE IN (SELECT("_TABLAORIG")) - INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE - SET ORDER TO 0 IN TABLABIN + INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE + SET ORDER TO 0 IN TABLABIN - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - THIS.get_NombresObjetosOLEPublic( @la_NombresObjsOle ) + .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) - THIS.write_DefinicionObjetosOLE( toFoxBin2Prg ) + .write_DefinicionObjetosOLE( toFoxBin2Prg ) - *-- Escribo los métodos ordenados - lnLastClass = 0 + *-- Escribo los métodos ordenados + lnLastClass = 0 - *---------------------------------------------- - *-- RECORRO LAS CLASES - *---------------------------------------------- - SELECT TABLABIN - SET ORDER TO PARENT_OBJ + *---------------------------------------------- + *-- RECORRO LAS CLASES + *---------------------------------------------- + SELECT TABLABIN + SET ORDER TO PARENT_OBJ - SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" AND TABLABIN.RESERVED1=="Class" - SCATTER MEMO NAME loRegClass - - IF NOT toFoxBin2Prg.l_UseTimestamps - loRegClass.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegClass.UNIQUEID = '' - ENDIF - - lcObjName = ALLTRIM(loRegClass.OBJNAME) - - THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) - - THIS.write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass ) - - THIS.write_DEFINE_CLASS_COMMENTS( @loRegClass ) - - THIS.write_METADATA( @loRegClass ) - - THIS.write_INCLUDE( @loRegClass ) - - THIS.write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ) - - - *------------------------------------------------------------------------------- - *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA EXPORTAR SU DEFINICIÓN - *------------------------------------------------------------------------------- - lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName - - SCAN REST WHILE TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName - SCATTER MEMO NAME loRegObj + SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" AND TABLABIN.RESERVED1=="Class" + SCATTER MEMO NAME loRegClass IF NOT toFoxBin2Prg.l_UseTimestamps - loRegObj.TIMESTAMP = 0 + loRegClass.TIMESTAMP = 0 ENDIF IF toFoxBin2Prg.l_ClearUniqueID - loRegObj.UNIQUEID = '' + loRegClass.UNIQUEID = '' ENDIF - ADDPROPERTY( loRegObj, '_ZOrder', RECNO()*100 ) && Para permitir insertar objetos manualmente entre medias al integrar cambios - THIS.write_ADD_OBJECTS_WithProperties( @loRegObj ) + lcObjName = ALLTRIM(loRegClass.OBJNAME) + + .write_ENDDEFINE_SiCorresponde( lnLastClass ) + + .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass ) + + .write_DEFINE_CLASS_COMMENTS( @loRegClass ) + + .write_METADATA( @loRegClass ) + + .write_INCLUDE( @loRegClass ) + + .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ) + + + *------------------------------------------------------------------------------- + *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA EXPORTAR SU DEFINICIÓN + *------------------------------------------------------------------------------- + lnRecno = RECNO() + LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + + SCAN REST WHILE TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + SCATTER MEMO NAME loRegObj + + IF NOT toFoxBin2Prg.l_UseTimestamps + loRegObj.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegObj.UNIQUEID = '' + ENDIF + + ADDPROPERTY( loRegObj, '_ZOrder', RECNO()*100 ) && Para permitir insertar objetos manualmente entre medias al integrar cambios + .write_ADD_OBJECTS_WithProperties( @loRegObj ) + ENDSCAN + + GOTO RECORD (lnRecno) + + + *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO + DIMENSION laMethods(1,3) + lcMethods = '' + .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ) + + .write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) + + lnLastClass = 1 + lcMethods = '' + + *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS + lnRecno = RECNO() + LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + + SCAN REST ; + FOR TABLABIN.PLATFORM = "WINDOWS" AND NOT TABLABIN.RESERVED1=="Class" ; + WHILE ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + + SCATTER MEMO NAME loRegObj + + IF NOT toFoxBin2Prg.l_UseTimestamps + loRegObj.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegObj.UNIQUEID = '' + ENDIF + + .get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods ) + ENDSCAN + + .write_ALL_OBJECT_METHODS( @lcMethods ) + + GOTO RECORD (lnRecno) ENDSCAN - GOTO RECORD (lnRecno) + .write_ENDDEFINE_SiCorresponde( lnLastClass ) - - *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO - DIMENSION laMethods(1,3) - lcMethods = '' - THIS.SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ) - - THIS.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) - - lnLastClass = 1 - lcMethods = '' - - *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS - lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName - - SCAN REST ; - FOR TABLABIN.PLATFORM = "WINDOWS" AND NOT TABLABIN.RESERVED1=="Class" ; - WHILE ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName - - SCATTER MEMO NAME loRegObj - - IF NOT toFoxBin2Prg.l_UseTimestamps - loRegObj.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegObj.UNIQUEID = '' - ENDIF - - THIS.get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods ) - ENDSCAN - - THIS.write_ALL_OBJECT_METHODS( @lcMethods ) - - GOTO RECORD (lnRecno) - ENDSCAN - - THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) - - *-- Genero el VC2 - IF THIS.l_Test - toModulo = C_FB2PRG_CODE - ELSE - lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE - ENDIF + *-- Genero el VC2 + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE + ENDIF + ENDWITH && THIS CATCH TO toEx @@ -8506,143 +8618,145 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) STORE NULL TO loRegClass, loRegObj - USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG - SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - USE IN (SELECT("_TABLAORIG")) + WITH THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' + USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + USE IN (SELECT("_TABLAORIG")) - INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE - SET ORDER TO 0 IN TABLABIN + INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE + SET ORDER TO 0 IN TABLABIN - *toModulo = NULL - *toModulo = CREATEOBJECT('CL_MODULO') + *toModulo = NULL + *toModulo = CREATEOBJECT('CL_MODULO') - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - THIS.get_NombresObjetosOLEPublic( @la_NombresObjsOle ) + .get_NombresObjetosOLEPublic( @la_NombresObjsOle ) - THIS.write_DefinicionObjetosOLE( toFoxBin2Prg ) + .write_DefinicionObjetosOLE( toFoxBin2Prg ) - *-- Escribo los métodos ordenados - lnLastObj = 0 - lnLastClass = 0 + *-- Escribo los métodos ordenados + lnLastObj = 0 + lnLastClass = 0 - *---------------------------------------------- - *-- RECORRO LAS CLASES - *---------------------------------------------- - SELECT TABLABIN - SET ORDER TO PARENT_OBJ - GOTO RECORD 1 + *---------------------------------------------- + *-- RECORRO LAS CLASES + *---------------------------------------------- + SELECT TABLABIN + SET ORDER TO PARENT_OBJ + GOTO RECORD 1 - SCATTER FIELDS RESERVED8 MEMO NAME loRegClass + SCATTER FIELDS RESERVED8 MEMO NAME loRegClass - IF NOT EMPTY(loRegClass.RESERVED8) THEN - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - #INCLUDE "<>" - <<>> - ENDTEXT - ENDIF + IF NOT EMPTY(loRegClass.RESERVED8) THEN + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + #INCLUDE "<>" + <<>> + ENDTEXT + ENDIF - SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; - AND (EMPTY(TABLABIN.PARENT) ; - AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) + SCAN ALL FOR TABLABIN.PLATFORM = "WINDOWS" ; + AND (EMPTY(TABLABIN.PARENT) ; + AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) - *loRegClass = NULL - SCATTER MEMO NAME loRegClass + *loRegClass = NULL + SCATTER MEMO NAME loRegClass - lcObjName = ALLTRIM(loRegClass.OBJNAME) + lcObjName = ALLTRIM(loRegClass.OBJNAME) - THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) + .write_ENDDEFINE_SiCorresponde( lnLastClass ) - THIS.write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass ) + .write_DEFINE_CLASS( @la_NombresObjsOle, @loRegClass ) - THIS.write_DEFINE_CLASS_COMMENTS( @loRegClass ) + .write_DEFINE_CLASS_COMMENTS( @loRegClass ) - THIS.write_METADATA( @loRegClass ) + .write_METADATA( @loRegClass ) - THIS.write_INCLUDE( @loRegClass ) + .write_INCLUDE( @loRegClass ) - THIS.write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ) + .write_CLASS_PROPERTIES( @loRegClass, @laPropsAndValues, @laPropsAndComments, @laProtected ) - *------------------------------------------------------------------------------- - *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA EXPORTAR SU DEFINICIÓN - *------------------------------------------------------------------------------- - lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + *------------------------------------------------------------------------------- + *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA EXPORTAR SU DEFINICIÓN + *------------------------------------------------------------------------------- + lnRecno = RECNO() + LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName - SCAN REST WHILE TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName - SCATTER MEMO NAME loRegObj + SCAN REST WHILE TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + SCATTER MEMO NAME loRegObj - IF NOT toFoxBin2Prg.l_UseTimestamps - loRegObj.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegObj.UNIQUEID = '' - ENDIF + IF NOT toFoxBin2Prg.l_UseTimestamps + loRegObj.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegObj.UNIQUEID = '' + ENDIF - ADDPROPERTY( loRegObj, '_ZOrder', RECNO()*100 ) && Para permitir insertar objetos manualmente entre medias al integrar cambios - THIS.write_ADD_OBJECTS_WithProperties( @loRegObj ) + ADDPROPERTY( loRegObj, '_ZOrder', RECNO()*100 ) && Para permitir insertar objetos manualmente entre medias al integrar cambios + .write_ADD_OBJECTS_WithProperties( @loRegObj ) + ENDSCAN + + GOTO RECORD (lnRecno) + + + *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO + DIMENSION laMethods(1,3) + lcMethods = '' + .SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ) + + .write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) + + lnLastClass = 1 + lcMethods = '' + + *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS + lnRecno = RECNO() + LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + + SCAN REST ; + FOR TABLABIN.PLATFORM = "WINDOWS" ; + AND NOT (EMPTY(TABLABIN.PARENT) ; + AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) ; + WHILE ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName + + SCATTER MEMO NAME loRegObj + + IF NOT toFoxBin2Prg.l_UseTimestamps + loRegObj.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegObj.UNIQUEID = '' + ENDIF + + .get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods ) + ENDSCAN + + .write_ALL_OBJECT_METHODS( @lcMethods ) + + GOTO RECORD (lnRecno) ENDSCAN - GOTO RECORD (lnRecno) + .write_ENDDEFINE_SiCorresponde( lnLastClass ) - - *-- OBTENGO LOS MÉTODOS DE LA CLASE PARA POSTERIOR TRATAMIENTO - DIMENSION laMethods(1,3) - lcMethods = '' - THIS.SortMethod( loRegClass.METHODS, @laMethods, @laCode, '', @lnMethodCount ) - - THIS.write_CLASS_METHODS( @lnMethodCount, @laMethods, @laCode, @laProtected, @laPropsAndComments ) - - lnLastClass = 1 - lcMethods = '' - - *-- RECORRO LOS OBJETOS DENTRO DE LA CLASE ACTUAL PARA OBTENER SUS MÉTODOS - lnRecno = RECNO() - LOCATE FOR TABLABIN.PLATFORM = "WINDOWS" AND ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName - - SCAN REST ; - FOR TABLABIN.PLATFORM = "WINDOWS" ; - AND NOT (EMPTY(TABLABIN.PARENT) ; - AND (TABLABIN.BASECLASS == 'dataenvironment' OR TABLABIN.BASECLASS == 'form' OR TABLABIN.BASECLASS == 'formset' ) ) ; - WHILE ALLTRIM(GETWORDNUM(TABLABIN.PARENT, 1, '.')) == lcObjName - - SCATTER MEMO NAME loRegObj - - IF NOT toFoxBin2Prg.l_UseTimestamps - loRegObj.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegObj.UNIQUEID = '' - ENDIF - - THIS.get_ADD_OBJECT_METHODS( @loRegObj, @loRegClass, @lcMethods ) - ENDSCAN - - THIS.write_ALL_OBJECT_METHODS( @lcMethods ) - - GOTO RECORD (lnRecno) - ENDSCAN - - THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) - - *-- Genero el SC2 - IF THIS.l_Test - toModulo = C_FB2PRG_CODE - ELSE - lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE - ENDIF + *-- Genero el SC2 + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE + ENDIF + ENDWITH && THIS CATCH TO toEx @@ -8693,60 +8807,17 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg STORE NULL TO loProject, loReg, loServerHead, loServerData - USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG - SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - USE IN (SELECT("_TABLAORIG")) + WITH THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' + USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + USE IN (SELECT("_TABLAORIG")) - loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') + loServerHead = CREATEOBJECT('CL_PROJ_SRV_HEAD') - *-- Obtengo los archivos del proyecto - loProject = CREATEOBJECT('CL_PROJECT') - SCATTER MEMO NAME loReg - - IF NOT toFoxBin2Prg.l_UseTimestamps - loReg.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loReg.ID = 0 - ENDIF - - loProject._HomeDir = ['] + ALLTRIM( THIS.get_ValueFromNullTerminatedValue( loReg.HOMEDIR ) ) + ['] - - loProject._ServerInfo = loReg.RESERVED2 - loProject._Debug = loReg.DEBUG - loProject._Encrypted = loReg.ENCRYPT - lcDevInfo = loReg.DEVINFO - - - *--- Ubico el programa principal - LOCATE FOR MAINPROG - - IF FOUND() - loProject._MainProg = LOWER( ALLTRIM( THIS.get_ValueFromNullTerminatedValue( NAME ) ) ) - ENDIF - - - *-- Ubico el Project Hook - LOCATE FOR TYPE == 'W' - - IF FOUND() - loProject._ProjectHookLibrary = LOWER( ALLTRIM( THIS.get_ValueFromNullTerminatedValue( NAME ) ) ) - loProject._ProjectHookClass = LOWER( ALLTRIM( THIS.get_ValueFromNullTerminatedValue( RESERVED1 ) ) ) - ENDIF - - - *-- Ubico el icono del proyecto - LOCATE FOR TYPE == 'i' - - IF FOUND() - loProject._Icon = LOWER( ALLTRIM( THIS.get_ValueFromNullTerminatedValue( NAME ) ) ) - ENDIF - - - *-- Escaneo el proyecto - SCAN ALL FOR NOT INLIST(TYPE, 'H','W','i' ) - SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV MEMO NAME loReg + *-- Obtengo los archivos del proyecto + loProject = CREATEOBJECT('CL_PROJECT') + SCATTER MEMO NAME loReg IF NOT toFoxBin2Prg.l_UseTimestamps loReg.TIMESTAMP = 0 @@ -8755,221 +8826,266 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg loReg.ID = 0 ENDIF - loReg.NAME = LOWER( ALLTRIM( THIS.get_ValueFromNullTerminatedValue( loReg.NAME ) ) ) - loReg.COMMENTS = ALLTRIM( THIS.get_ValueFromNullTerminatedValue( loReg.COMMENTS ) ) + loProject._HomeDir = ['] + ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.HOMEDIR ) ) + ['] - *-- TIP: Si el "Name" del objeto está vacío, lo salteo - IF EMPTY(loReg.NAME) - LOOP + loProject._ServerInfo = loReg.RESERVED2 + loProject._Debug = loReg.DEBUG + loProject._Encrypted = loReg.ENCRYPT + lcDevInfo = loReg.DEVINFO + + + *--- Ubico el programa principal + LOCATE FOR MAINPROG + + IF FOUND() + loProject._MainProg = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) ) ENDIF - TRY - loProject.ADD( loReg, loReg.NAME ) - CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) - *-- Saltear y no agregar el archivo duplicado / Bypass and not add the duplicated file - ENDTRY - ENDSCAN + + *-- Ubico el Project Hook + LOCATE FOR TYPE == 'W' + + IF FOUND() + loProject._ProjectHookLibrary = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) ) + loProject._ProjectHookClass = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( RESERVED1 ) ) ) + ENDIF - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + *-- Ubico el icono del proyecto + LOCATE FOR TYPE == 'i' + + IF FOUND() + loProject._Icon = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( NAME ) ) ) + ENDIF - *-- Directorio de inicio - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - LPARAMETERS tcDir - <<>> - lcCurdir = SYS(5)+CURDIR() - CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) ) - <<>> - ENDTEXT + *-- Escaneo el proyecto + SCAN ALL FOR NOT INLIST(TYPE, 'H','W','i' ) + SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV MEMO NAME loReg + + IF NOT toFoxBin2Prg.l_UseTimestamps + loReg.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loReg.ID = 0 + ENDIF + + loReg.NAME = LOWER( ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.NAME ) ) ) + loReg.COMMENTS = ALLTRIM( .get_ValueFromNullTerminatedValue( loReg.COMMENTS ) ) + + *-- TIP: Si el "Name" del objeto está vacío, lo salteo + IF EMPTY(loReg.NAME) + LOOP + ENDIF + + TRY + loProject.ADD( loReg, loReg.NAME ) + CATCH TO loEx WHEN loEx.ERRORNO = 2062 && The specified key already exists ==> loProject.ADD( loReg, loReg.NAME ) + *-- Saltear y no agregar el archivo duplicado / Bypass and not add the duplicated file + ENDTRY + ENDSCAN - *-- Información del programa - loProject.parseDeviceInfo( lcDevInfo ) - C_FB2PRG_CODE = C_FB2PRG_CODE + loProject.getFormattedDeviceInfoText() + CR_LF + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - *-- Información de los Servidores definidos - IF NOT EMPTY(loProject._ServerInfo) - loServerHead.parseServerInfo( loProject._ServerInfo ) - C_FB2PRG_CODE = C_FB2PRG_CODE + loServerHead.getFormattedServerText() + CR_LF - loServerHead = NULL - ENDIF + *-- Directorio de inicio + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + LPARAMETERS tcDir + <<>> + lcCurdir = SYS(5)+CURDIR() + CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) ) + <<>> + ENDTEXT - *-- Generación del proyecto - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - <<>>*<.HomeDir = <> /> - <<>> - FOR EACH loProject IN _VFP.Projects FOXOBJECT - <<>> loProject.Close() + *-- Información del programa + loProject.parseDeviceInfo( lcDevInfo ) + C_FB2PRG_CODE = C_FB2PRG_CODE + loProject.getFormattedDeviceInfoText() + CR_LF + + + *-- Información de los Servidores definidos + IF NOT EMPTY(loProject._ServerInfo) + loServerHead.parseServerInfo( loProject._ServerInfo ) + C_FB2PRG_CODE = C_FB2PRG_CODE + loServerHead.getFormattedServerText() + CR_LF + loServerHead = NULL + ENDIF + + + *-- Generación del proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <<>>*<.HomeDir = <> /> + <<>> + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + STRTOFILE( '', '__newproject.f2b' ) + BUILD PROJECT <> FROM '__newproject.f2b' + ENDTEXT + + + *-- Abro el proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK + <<>> + loProject = _VFP.Projects('<>') + <<>> + WITH loProject.FILES + ENDTEXT + + + *-- Definir archivos del proyecto y metadata: CPID, Timestamp, ID, etc. + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ADD('<>') + ENDTEXT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 + <<>> <<'&'>><<'&'>> <> + Type="<>" + Cpid="<>" + Timestamp="<>" + ID="<>" + ObjRev="<>" + <> + ENDTEXT ENDFOR - <<>> - STRTOFILE( '', '__newproject.f2b' ) - BUILD PROJECT <> FROM '__newproject.f2b' - ENDTEXT + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> .ITEM('__newproject.f2b').Remove() + <<>> + ENDTEXT - *-- Abro el proyecto - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - FOR EACH loProject IN _VFP.Projects FOXOBJECT - <<>> loProject.Close() + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + ENDTEXT + + + *-- Agrego los comentarios + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF NOT EMPTY(loReg.COMMENTS) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ITEM(lcCurdir + '<>').Description = '<>' + ENDTEXT + ENDIF ENDFOR - <<>> - MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK - <<>> - loProject = _VFP.Projects('<>') - <<>> - WITH loProject.FILES - ENDTEXT - *-- Definir archivos del proyecto y metadata: CPID, Timestamp, ID, etc. - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT + *-- Exclusiones TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ADD('<>') + <<>> <> + <<>> + <<>> <> ENDTEXT - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 - <<>> <<'&'>><<'&'>> <> - Type="<>" - Cpid="<>" - Timestamp="<>" - ID="<>" - ObjRev="<>" - <> + + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF loReg.EXCLUDE + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + ENDTEXT + ENDIF + ENDFOR + + + *-- Tipos de archivos especiales + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> <> ENDTEXT - ENDFOR - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> .ITEM('__newproject.f2b').Remove() - <<>> - ENDTEXT + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ITEM(lcCurdir + '<>').Type = 'T' + ENDTEXT + ENDIF + ENDFOR - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - ENDTEXT + *-- ProjectHook, Debug, Encrypt, Build y cierre + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <> + <<>> + <> loProject + <<>> <> + ENDTEXT - - *-- Agrego los comentarios - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF NOT EMPTY(loReg.COMMENTS) + IF NOT EMPTY(loProject._MainProg) TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Description = '<>' + <<>> .SetMain(lcCurdir + '<>') ENDTEXT ENDIF - ENDFOR - - *-- Exclusiones - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> <> - ENDTEXT - - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF loReg.EXCLUDE + IF NOT EMPTY(loProject._Icon) TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + <<>> .Icon = lcCurdir + '<>' ENDTEXT ENDIF - ENDFOR + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .Debug = <> + <<>> .Encrypted = <> + <<>> *<.CmntStyle = <> /> + <<>> *<.NoLogo = <> /> + <<>> *<.SaveCode = <> /> + <<>> .ProjectHookLibrary = '<>' + <<>> .ProjectHookClass = '<>' + <<>> <> + <> + <<>> + ENDTEXT - *-- Tipos de archivos especiales - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> <> - ENDTEXT + *-- Build y cierre + * _VFP.Projects('<>').FILES('__newproject.f2b').Remove() + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + _VFP.Projects('<>').Close() + ENDTEXT - loProject.KEYSORT = 2 + *-- Restauro Directorio de inicio + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + *ERASE '__newproject.f2b' + CD (lcCurdir) + RETURN + ENDTEXT - FOR EACH loReg IN loProject &&FOXOBJECT - IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Type = 'T' - ENDTEXT + + *-- Genero el PJ2 + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE ENDIF - ENDFOR - - - *-- ProjectHook, Debug, Encrypt, Build y cierre - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <> - <<>> - <> loProject - <<>> <> - ENDTEXT - - IF NOT EMPTY(loProject._MainProg) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .SetMain(lcCurdir + '<>') - ENDTEXT - ENDIF - - IF NOT EMPTY(loProject._Icon) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .Icon = lcCurdir + '<>' - ENDTEXT - ENDIF - - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .Debug = <> - <<>> .Encrypted = <> - <<>> *<.CmntStyle = <> /> - <<>> *<.NoLogo = <> /> - <<>> *<.SaveCode = <> /> - <<>> .ProjectHookLibrary = '<>' - <<>> .ProjectHookClass = '<>' - <<>> <> - <> - <<>> - ENDTEXT - - - *-- Build y cierre - * _VFP.Projects('<>').FILES('__newproject.f2b').Remove() - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - _VFP.Projects('<>').Close() - ENDTEXT - - *-- Restauro Directorio de inicio - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - *ERASE '__newproject.f2b' - CD (lcCurdir) - RETURN - ENDTEXT - - - *-- Genero el PJ2 - IF THIS.l_Test - toModulo = C_FB2PRG_CODE - ELSE - lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE - ENDIF + ENDWITH && THIS CATCH TO toEx @@ -9169,179 +9285,181 @@ DEFINE CLASS c_conversor_pjm_a_prg AS c_conversor_bin_a_prg loServerHead = NULL ENDIF + WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' - *-- Generación del proyecto - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - <<>>*<.HomeDir = <> /> - <<>> - FOR EACH loProject IN _VFP.Projects FOXOBJECT - <<>> loProject.Close() + *-- Generación del proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <<>>*<.HomeDir = <> /> + <<>> + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + STRTOFILE( '', '__newproject.f2b' ) + BUILD PROJECT <> FROM '__newproject.f2b' + ENDTEXT + + + *-- Abro el proyecto + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() + ENDFOR + <<>> + MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK + <<>> + loProject = _VFP.Projects('<>') + <<>> + WITH loProject.FILES + ENDTEXT + + + *-- Definir archivos del proyecto y metadata: CPID, Timestamp, ID, etc. + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ADD('<>') + ENDTEXT + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 + <<>> <<'&'>><<'&'>> <> + Type="<>" + Cpid="<>" + Timestamp="<>" + ID="<>" + ObjRev="<>" + <> + ENDTEXT ENDFOR - <<>> - STRTOFILE( '', '__newproject.f2b' ) - BUILD PROJECT <> FROM '__newproject.f2b' - ENDTEXT + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> .ITEM('__newproject.f2b').Remove() + <<>> + ENDTEXT - *-- Abro el proyecto - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - FOR EACH loProject IN _VFP.Projects FOXOBJECT - <<>> loProject.Close() + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + ENDTEXT + + + *-- Agrego los comentarios + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF NOT EMPTY(loReg.COMMENTS) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ITEM(lcCurdir + '<>').Description = '<>' + ENDTEXT + ENDIF ENDFOR - <<>> - MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK - <<>> - loProject = _VFP.Projects('<>') - <<>> - WITH loProject.FILES - ENDTEXT - *-- Definir archivos del proyecto y metadata: CPID, Timestamp, ID, etc. - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT + *-- Exclusiones TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ADD('<>') + <<>> <> + <<>> + <<>> <> ENDTEXT - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8 - <<>> <<'&'>><<'&'>> <> - Type="<>" - Cpid="<>" - Timestamp="<>" - ID="<>" - ObjRev="<>" - <> + + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF loReg.EXCLUDE + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + ENDTEXT + ENDIF + ENDFOR + + + *-- Tipos de archivos especiales + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <<>> + <<>> <> ENDTEXT - ENDFOR - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> .ITEM('__newproject.f2b').Remove() - <<>> - ENDTEXT + loProject.KEYSORT = 2 + + FOR EACH loReg IN loProject &&FOXOBJECT + IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .ITEM(lcCurdir + '<>').Type = 'T' + ENDTEXT + ENDIF + ENDFOR - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - ENDTEXT + *-- ProjectHook, Debug, Encrypt, Build y cierre + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <> + <> + <<>> + <> loProject + <<>> <> + ENDTEXT - - *-- Agrego los comentarios - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF NOT EMPTY(loReg.COMMENTS) + IF NOT EMPTY(loProject._MainProg) TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Description = '<>' + <<>> .SetMain(lcCurdir + '<>') ENDTEXT ENDIF - ENDFOR - - *-- Exclusiones - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> <> - ENDTEXT - - loProject.KEYSORT = 2 - - FOR EACH loReg IN loProject &&FOXOBJECT - IF loReg.EXCLUDE + IF NOT EMPTY(loProject._Icon) TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Exclude = .T. + <<>> .Icon = lcCurdir + '<>' ENDTEXT ENDIF - ENDFOR + + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> .Debug = <> + <<>> .Encrypted = <> + <<>> *<.CmntStyle = <> /> + <<>> *<.NoLogo = <> /> + <<>> *<.SaveCode = <> /> + <<>> .ProjectHookLibrary = '<>' + <<>> .ProjectHookClass = '<>' + <<>> <> + <> + <<>> + ENDTEXT - *-- Tipos de archivos especiales - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> - <<>> <> - ENDTEXT + *-- Build y cierre + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + _VFP.Projects('<>').Close() + ENDTEXT - loProject.KEYSORT = 2 + *-- Restauro Directorio de inicio + TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + *ERASE '__newproject.f2b' + CD (lcCurdir) + RETURN + ENDTEXT - FOR EACH loReg IN loProject &&FOXOBJECT - IF INLIST( UPPER( JUSTEXT( loReg.NAME ) ), 'H','FPW' ) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .ITEM(lcCurdir + '<>').Type = 'T' - ENDTEXT + + *-- Genero el PJ2 + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE ENDIF - ENDFOR - - - *-- ProjectHook, Debug, Encrypt, Build y cierre - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <> - <<>> - <> loProject - <<>> <> - ENDTEXT - - IF NOT EMPTY(loProject._MainProg) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .SetMain(lcCurdir + '<>') - ENDTEXT - ENDIF - - IF NOT EMPTY(loProject._Icon) - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .Icon = lcCurdir + '<>' - ENDTEXT - ENDIF - - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> .Debug = <> - <<>> .Encrypted = <> - <<>> *<.CmntStyle = <> /> - <<>> *<.NoLogo = <> /> - <<>> *<.SaveCode = <> /> - <<>> .ProjectHookLibrary = '<>' - <<>> .ProjectHookClass = '<>' - <<>> <> - <> - <<>> - ENDTEXT - - - *-- Build y cierre - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - _VFP.Projects('<>').Close() - ENDTEXT - - *-- Restauro Directorio de inicio - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - *ERASE '__newproject.f2b' - CD (lcCurdir) - RETURN - ENDTEXT - - - *-- Genero el PJ2 - IF THIS.l_Test - toModulo = C_FB2PRG_CODE - ELSE - lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE - ENDIF + ENDWITH && THIS CATCH TO toEx @@ -9400,114 +9518,116 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) STORE NULL TO loRegObj, loRegCab, loRegDataEnv, loRegCur - USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG - SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 - USE IN (SELECT("_TABLAORIG")) + WITH THIS AS c_conversor_pjm_a_prg OF 'FOXBIN2PRG.PRG' + USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN_0 + USE IN (SELECT("_TABLAORIG")) - *-- Header - LOCATE FOR ObjType = 1 - IF FOUND() - SCATTER MEMO NAME loRegCab + *-- Header + LOCATE FOR ObjType = 1 + IF FOUND() + SCATTER MEMO NAME loRegCab - IF NOT toFoxBin2Prg.l_UseTimestamps - loRegCab.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegCab.UNIQUEID = '' - ENDIF - ENDIF - - *-- Dataenvironment - LOCATE FOR ObjType = 25 - IF FOUND() - SCATTER MEMO NAME loRegDataEnv - - IF NOT toFoxBin2Prg.l_UseTimestamps - loRegDataEnv.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegDataEnv.UNIQUEID = '' - ENDIF - ENDIF - - *-- Cursor1 (¿puede haber más de 1 cursor?) - LOCATE FOR ObjType = 26 - IF FOUND() - SCATTER MEMO NAME loRegCur - - IF NOT toFoxBin2Prg.l_UseTimestamps - loRegCur.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegCur.UNIQUEID = '' - ENDIF - ENDIF - - IF THIS.l_ReportSort_Enabled - *-- ORDENADO - SELECT * FROM TABLABIN_0 ; - WHERE ObjType NOT IN (1,25,26) ; - ORDER BY vpos,hpos ; - INTO CURSOR TABLABIN READWRITE - ELSE - *-- SIN ORDENAR (Sólo para poder comparar con el original) - SELECT * FROM TABLABIN_0 ; - WHERE ObjType NOT IN (1,25,26) ; - INTO CURSOR TABLABIN - ENDIF - - loRegObj = NULL - USE IN (SELECT("TABLABIN_0")) - - - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - - *-- Recorro los registros y genero el texto - IF VARTYPE(loRegCab) = "O" - THIS.write_CABECERA_REPORTE( @loRegCab ) - ENDIF - - SELECT TABLABIN - GOTO TOP - - SCAN ALL - SCATTER MEMO NAME loRegObj - - IF NOT toFoxBin2Prg.l_UseTimestamps - loRegObj.TIMESTAMP = 0 - ENDIF - IF toFoxBin2Prg.l_ClearUniqueID - loRegObj.UNIQUEID = '' + IF NOT toFoxBin2Prg.l_UseTimestamps + loRegCab.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegCab.UNIQUEID = '' + ENDIF ENDIF - THIS.write_DETALLE_REPORTE( @loRegObj ) - ENDSCAN + *-- Dataenvironment + LOCATE FOR ObjType = 25 + IF FOUND() + SCATTER MEMO NAME loRegDataEnv - IF VARTYPE(loRegDataEnv) = "O" - THIS.write_DATAENVIRONMENT_REPORTE( @loRegDataEnv ) - ENDIF + IF NOT toFoxBin2Prg.l_UseTimestamps + loRegDataEnv.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegDataEnv.UNIQUEID = '' + ENDIF + ENDIF - IF VARTYPE(loRegCur) = "O" - THIS.write_DETALLE_REPORTE( @loRegCur ) - ENDIF + *-- Cursor1 (¿puede haber más de 1 cursor?) + LOCATE FOR ObjType = 26 + IF FOUND() + SCATTER MEMO NAME loRegCur + + IF NOT toFoxBin2Prg.l_UseTimestamps + loRegCur.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegCur.UNIQUEID = '' + ENDIF + ENDIF + + IF .l_ReportSort_Enabled + *-- ORDENADO + SELECT * FROM TABLABIN_0 ; + WHERE ObjType NOT IN (1,25,26) ; + ORDER BY vpos,hpos ; + INTO CURSOR TABLABIN READWRITE + ELSE + *-- SIN ORDENAR (Sólo para poder comparar con el original) + SELECT * FROM TABLABIN_0 ; + WHERE ObjType NOT IN (1,25,26) ; + INTO CURSOR TABLABIN + ENDIF + + loRegObj = NULL + USE IN (SELECT("TABLABIN_0")) - *-- Genero el FR2 - IF THIS.l_Test - toModulo = C_FB2PRG_CODE - ELSE - lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE - ENDIF + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + + *-- Recorro los registros y genero el texto + IF VARTYPE(loRegCab) = "O" + .write_CABECERA_REPORTE( @loRegCab ) + ENDIF + + SELECT TABLABIN + GOTO TOP + + SCAN ALL + SCATTER MEMO NAME loRegObj + + IF NOT toFoxBin2Prg.l_UseTimestamps + loRegObj.TIMESTAMP = 0 + ENDIF + IF toFoxBin2Prg.l_ClearUniqueID + loRegObj.UNIQUEID = '' + ENDIF + + .write_DETALLE_REPORTE( @loRegObj ) + ENDSCAN + + IF VARTYPE(loRegDataEnv) = "O" + .write_DATAENVIRONMENT_REPORTE( @loRegDataEnv ) + ENDIF + + IF VARTYPE(loRegCur) = "O" + .write_DETALLE_REPORTE( @loRegCur ) + ENDIF + + + *-- Genero el FR2 + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE + ENDIF + ENDWITH && THIS CATCH TO toEx @@ -9557,35 +9677,37 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg STORE 0 TO lnCodError loDBFUtils = CREATEOBJECT('CL_DBF_UTILS') - loDBFUtils.getDBFmetadata( THIS.c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) - lc_FileTypeDesc = loDBFUtils.fileTypeDescription(ln_HexFileType) - lnDatabases_Count = ADATABASES(laDatabases) + WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG' + loDBFUtils.getDBFmetadata( .c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) + lc_FileTypeDesc = loDBFUtils.fileTypeDescription(ln_HexFileType) + lnDatabases_Count = ADATABASES(laDatabases) - USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN + USE (.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - *-- Header - loTable = CREATEOBJECT('CL_DBF_TABLE') - C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, THIS.c_InputFile, lc_FileTypeDesc ) + *-- Header + loTable = CREATEOBJECT('CL_DBF_TABLE') + C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc ) - *-- Genero el DB2 - IF THIS.l_Test - toModulo = C_FB2PRG_CODE - ELSE - lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE - ENDIF + *-- Genero el DB2 + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE + ENDIF + ENDWITH && THIS CATCH TO toEx @@ -9660,34 +9782,36 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg STORE 0 TO lnCodError - lnDatabases_Count = ADATABASES(laDatabases) + WITH THIS AS c_conversor_dbc_a_prg OF 'FOXBIN2PRG.PRG' + lnDatabases_Count = ADATABASES(laDatabases) - USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN - OPEN DATABASE (THIS.c_InputFile) SHARED NOUPDATE + USE (.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN + OPEN DATABASE (.c_InputFile) SHARED NOUPDATE - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - *-- Header - toDatabase = CREATEOBJECT('CL_DBC') - C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() + *-- Header + toDatabase = CREATEOBJECT('CL_DBC') + C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() - *-- Genero el DC2 - IF THIS.l_Test - toModulo = C_FB2PRG_CODE - ELSE - lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE - ENDIF + *-- Genero el DC2 + IF .l_Test + toModulo = C_FB2PRG_CODE + ELSE + lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE + ENDIF + ENDWITH && THIS CATCH TO toEx @@ -9734,40 +9858,42 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg LOCAL lnCodError, lnLen STORE 0 TO lnCodError - USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG - SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN - USE IN (SELECT("_TABLAORIG")) + WITH THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' + USE (.c_InputFile) SHARED NOUPDATE ALIAS _TABLAORIG + SELECT * FROM _TABLAORIG INTO CURSOR TABLABIN + USE IN (SELECT("_TABLAORIG")) - *-- Verificación de menú VFP 9 - IF FCOUNT() < 25 OR EMPTY(FIELD("RESNAME")) OR EMPTY(FIELD("SYSRES")) - *ERROR 'Menu [' + (THIS.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU ' + JUSTFNAME((THIS.c_InputFile)) - ERROR (TEXTMERGE(C_MENU_NOT_IN_VFP9_FORMAT_LOC)) - ENDIF + *-- Verificación de menú VFP 9 + IF FCOUNT() < 25 OR EMPTY(FIELD("RESNAME")) OR EMPTY(FIELD("SYSRES")) + *ERROR 'Menu [' + (.c_InputFile) + '] is NOT VFP 9 Format! - Please convert to VFP 9 with MODIFY MENU ' + JUSTFNAME((.c_InputFile)) + ERROR (TEXTMERGE(C_MENU_NOT_IN_VFP9_FORMAT_LOC)) + ENDIF - *-- Header - C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() + *-- Header + C_FB2PRG_CODE = C_FB2PRG_CODE + toFoxBin2Prg.get_PROGRAM_HEADER() - toMenu = CREATEOBJECT('CL_MENU') - toMenu.get_DataFromTablabin() - C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() + toMenu = CREATEOBJECT('CL_MENU') + toMenu.get_DataFromTablabin() + C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() - *-- Genero el MN2 - IF THIS.l_Test - toMenu = C_FB2PRG_CODE - ELSE - lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) - DO CASE - CASE FILE(THIS.c_OutputFile) AND SUBSTR( FILETOSTR( THIS.c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) - *THIS.writeLog( 'El archivo de salida [' + THIS.c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) - THIS.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) - CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; - AND toFoxBin2Prg.ChangeFileAttribute( THIS.c_OutputFile, '-R' ) ; - AND STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 - *ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) - ENDCASE - ENDIF + *-- Genero el MN2 + IF .l_Test + toMenu = C_FB2PRG_CODE + ELSE + lnLen = LEN( toFoxBin2Prg.get_PROGRAM_HEADER() ) + DO CASE + CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen ) + *.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' ) + .writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) ) + CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ; + AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ; + AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0 + *ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly' + ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC)) + ENDCASE + ENDIF + ENDWITH && THIS CATCH TO toEx @@ -9934,9 +10060,11 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE LOCAL toOle AS CL_OLE OF 'FOXBIN2PRG.PRG' #ENDIF - THIS._Ole_Obj_count = THIS._Ole_Obj_count + 1 - DIMENSION THIS._Ole_Objs( THIS._Ole_Obj_count ) - THIS._Ole_Objs( THIS._Ole_Obj_count ) = toOle + WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' + ._Ole_Obj_count = ._Ole_Obj_count + 1 + DIMENSION ._Ole_Objs( ._Ole_Obj_count ) + ._Ole_Objs( ._Ole_Obj_count ) = toOle + ENDWITH && THIS ENDPROC @@ -9948,9 +10076,11 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE LOCAL toClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' #ENDIF - THIS._Clases_Count = THIS._Clases_Count + 1 - DIMENSION THIS._Clases( THIS._Clases_Count ) - THIS._Clases( THIS._Clases_Count ) = toClase + WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' + ._Clases_Count = ._Clases_Count + 1 + DIMENSION ._Clases( ._Clases_Count ) + ._Clases( ._Clases_Count ) = toClase + ENDWITH && THIS ENDPROC @@ -9960,12 +10090,14 @@ DEFINE CLASS CL_MODULO AS CL_CUS_BASE LPARAMETERS tcNombre, X LOCAL llExiste - FOR X = 1 TO THIS._Ole_Obj_count - IF THIS._Ole_Objs(X)._Nombre == tcNombre - llExiste = .T. - EXIT - ENDIF - ENDFOR + WITH THIS AS CL_MODULO OF 'FOXBIN2PRG.PRG' + FOR X = 1 TO ._Ole_Obj_count + IF ._Ole_Objs(X)._Nombre == tcNombre + llExiste = .T. + EXIT + ENDIF + ENDFOR + ENDWITH && THIS RETURN llExiste ENDPROC @@ -10111,20 +10243,25 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE LOCAL toProcedure AS CL_PROCEDURE OF 'FOXBIN2PRG.PRG' #ENDIF - THIS._Procedure_Count = THIS._Procedure_Count + 1 - DIMENSION THIS._Procedures( THIS._Procedure_Count ) - THIS._Procedures( THIS._Procedure_Count ) = toProcedure + WITH THIS AS CL_CLASE OF 'FOXBIN2PRG.PRG' + ._Procedure_Count = ._Procedure_Count + 1 + DIMENSION ._Procedures( ._Procedure_Count ) + ._Procedures( ._Procedure_Count ) = toProcedure + ENDWITH && THIS ENDPROC ************************************************************************************************ PROCEDURE add_Property LPARAMETERS tcProperty AS STRING, tcValue AS STRING, tcComment AS STRING - THIS._Prop_Count = THIS._Prop_Count + 1 - DIMENSION THIS._Props( THIS._Prop_Count, 3 ) - THIS._Props( THIS._Prop_Count, 1 ) = tcProperty - THIS._Props( THIS._Prop_Count, 2 ) = tcValue - THIS._Props( THIS._Prop_Count, 3 ) = tcComment + + WITH THIS AS CL_CLASE OF 'FOXBIN2PRG.PRG' + ._Prop_Count = ._Prop_Count + 1 + DIMENSION ._Props( ._Prop_Count, 3 ) + ._Props( ._Prop_Count, 1 ) = tcProperty + ._Props( ._Prop_Count, 2 ) = tcValue + ._Props( ._Prop_Count, 3 ) = tcComment + ENDWITH && THIS ENDPROC @@ -10136,9 +10273,11 @@ DEFINE CLASS CL_CLASE AS CL_CUS_BASE LOCAL toObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' #ENDIF - THIS._AddObject_Count = THIS._AddObject_Count + 1 - DIMENSION THIS._AddObjects( THIS._AddObject_Count ) - THIS._AddObjects( THIS._AddObject_Count ) = toObjeto + WITH THIS AS CL_CLASE OF 'FOXBIN2PRG.PRG' + ._AddObject_Count = ._AddObject_Count + 1 + DIMENSION ._AddObjects( ._AddObject_Count ) + ._AddObjects( ._AddObject_Count ) = toObjeto + ENDWITH && THIS ENDPROC @@ -10170,9 +10309,12 @@ DEFINE CLASS CL_PROCEDURE AS CL_CUS_BASE ************************************************************************************************ PROCEDURE add_Line LPARAMETERS tcLine AS STRING - THIS._ProcLine_Count = THIS._ProcLine_Count + 1 - DIMENSION THIS._ProcLines( THIS._ProcLine_Count ) - THIS._ProcLines( THIS._ProcLine_Count ) = tcLine + + WITH THIS AS CL_CLASE OF 'FOXBIN2PRG.PRG' + ._ProcLine_Count = ._ProcLine_Count + 1 + DIMENSION ._ProcLines( ._ProcLine_Count ) + ._ProcLines( ._ProcLine_Count ) = tcLine + ENDWITH && THIS ENDPROC @@ -10233,23 +10375,28 @@ DEFINE CLASS CL_OBJETO AS CL_CUS_BASE LOCAL toProcedure AS CL_PROCEDURE OF 'FOXBIN2PRG.PRG' #ENDIF - IF '.' $ THIS._Nombre - toProcedure._Nombre = SUBSTR( toProcedure._Nombre, AT( '.', toProcedure._Nombre, OCCURS( '.', THIS._Nombre) ) + 1 ) - ENDIF + WITH THIS AS CL_OBJETO OF 'FOXBIN2PRG.PRG' + IF '.' $ ._Nombre + toProcedure._Nombre = SUBSTR( toProcedure._Nombre, AT( '.', toProcedure._Nombre, OCCURS( '.', ._Nombre) ) + 1 ) + ENDIF - THIS._Procedure_Count = THIS._Procedure_Count + 1 - DIMENSION THIS._Procedures( THIS._Procedure_Count ) - THIS._Procedures( THIS._Procedure_Count ) = toProcedure + ._Procedure_Count = ._Procedure_Count + 1 + DIMENSION ._Procedures( ._Procedure_Count ) + ._Procedures( ._Procedure_Count ) = toProcedure + ENDWITH && THIS ENDPROC ************************************************************************************************ PROCEDURE add_Property LPARAMETERS tcProperty AS STRING, tcValue AS STRING - THIS._Prop_Count = THIS._Prop_Count + 1 - DIMENSION THIS._Props( THIS._Prop_Count, 2 ) - THIS._Props( THIS._Prop_Count, 1 ) = tcProperty - THIS._Props( THIS._Prop_Count, 2 ) = tcValue + + WITH THIS AS CL_OBJETO OF 'FOXBIN2PRG.PRG' + ._Prop_Count = ._Prop_Count + 1 + DIMENSION ._Props( ._Prop_Count, 2 ) + ._Props( ._Prop_Count, 1 ) = tcProperty + ._Props( ._Prop_Count, 2 ) = tcValue + ENDWITH && THIS ENDPROC @@ -10632,44 +10779,47 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE LPARAMETERS tcPropertyName, teValue LOCAL lnPropertyID, tcDataType, leValue, llRetorno, lnDataLen - lnPropertyID = THIS.getDBCPropertyIDByName( SUBSTR(tcPropertyName,2) ) - IF lnPropertyID = -1 - IF PCOUNT()=1 - llRetorno = THIS.ADDPROPERTY( tcPropertyName ) + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + lnPropertyID = .getDBCPropertyIDByName( SUBSTR(tcPropertyName,2) ) + + IF lnPropertyID = -1 + IF PCOUNT()=1 + llRetorno = .ADDPROPERTY( tcPropertyName ) + ELSE + llRetorno = .ADDPROPERTY( tcPropertyName, teValue ) + ENDIF ELSE - llRetorno = THIS.ADDPROPERTY( tcPropertyName, teValue ) + tcDataType = .getDBCPropertyValueTypeByPropertyID( lnPropertyID ) + lnDataLen = LEN(teValue) + + DO CASE + CASE tcDataType = 'L' + IF lnDataLen = 0 + leValue = .F. + ELSE + leValue = CAST( teValue AS (tcDataType) ) + ENDIF + + CASE INLIST(tcDataType, 'N', 'B') + IF lnDataLen = 0 + leValue = 0 + ELSE + leValue = CAST( teValue AS (tcDataType) (lnDataLen) ) + ENDIF + + OTHERWISE && Asumo 'C' + IF lnDataLen = 0 + leValue = '' + ELSE + leValue = teValue + ENDIF + + ENDCASE + + llRetorno = .ADDPROPERTY( tcPropertyName, leValue ) ENDIF - ELSE - tcDataType = THIS.getDBCPropertyValueTypeByPropertyID( lnPropertyID ) - lnDataLen = LEN(teValue) - - DO CASE - CASE tcDataType = 'L' - IF lnDataLen = 0 - leValue = .F. - ELSE - leValue = CAST( teValue AS (tcDataType) ) - ENDIF - - CASE INLIST(tcDataType, 'N', 'B') - IF lnDataLen = 0 - leValue = 0 - ELSE - leValue = CAST( teValue AS (tcDataType) (lnDataLen) ) - ENDIF - - OTHERWISE && Asumo 'C' - IF lnDataLen = 0 - leValue = '' - ELSE - leValue = teValue - ENDIF - - ENDCASE - - llRetorno = THIS.ADDPROPERTY( tcPropertyName, leValue ) - ENDIF + ENDWITH && THIS RETURN llRetorno ENDFUNC @@ -10690,22 +10840,24 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE llBloqueEncontrado = .T. lcValue = STREXTRACT( taCodeLines(I), '', '', 1, 2 ) - IF NOT '' $ tcLine THEN - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + IF NOT '' $ tcLine THEN + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE '' $ tcLine && Fin - lcValue = lcValue + CR_LF + LEFT( taCodeLines(I), AT( '', taCodeLines(I) ) - 1 ) - EXIT + DO CASE + CASE '' $ tcLine && Fin + lcValue = lcValue + CR_LF + LEFT( taCodeLines(I), AT( '', taCodeLines(I) ) - 1 ) + EXIT - OTHERWISE && Línea de Stored Procedure - lcValue = lcValue + CR_LF + taCodeLines(I) - ENDCASE - ENDFOR - ENDIF + OTHERWISE && Línea de Stored Procedure + lcValue = lcValue + CR_LF + taCodeLines(I) + ENDCASE + ENDFOR + ENDIF - THIS.ADDPROPERTY( '_Comment', lcValue ) + .ADDPROPERTY( '_Comment', lcValue ) + ENDWITH && THIS ENDIF ENDPROC @@ -10725,92 +10877,95 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE TRY LOCAL lcValue, leValue, lnSelect, laProperty(1,1), lnRecordLen, lcBinRecord, lnPropertyID ; , lnLastPos, lnLenCCode, lcDataType, lcPropName, lcDBF, lnLenData, lnLenHeader - tnProperty_Count = 0 - lnSelect = SELECT() - leValue = '' - tcName = PROPER(RTRIM(tcName)) - tcType = PROPER(RTRIM(tcType)) - tcProperty = PROPER(RTRIM(tcProperty)) - lcDBF = DBF() - SELECT 0 - USE (lcDBF) AGAIN SHARED NOUPDATE ALIAS C_TABLABIN2 + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + tnProperty_Count = 0 + lnSelect = SELECT() + leValue = '' + tcName = PROPER(RTRIM(tcName)) + tcType = PROPER(RTRIM(tcType)) + tcProperty = PROPER(RTRIM(tcProperty)) + lcDBF = DBF() - IF INLIST( tcType, 'Index', 'Field' ) - SELECT TB.Property FROM C_TABLABIN2 TB ; - INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(JUSTEXT(tcName)),128) ; - AND TB2.objectName = PADR(LOWER(JUSTSTEM(tcName)),128) ; - INTO ARRAY laProperty + SELECT 0 + USE (lcDBF) AGAIN SHARED NOUPDATE ALIAS C_TABLABIN2 - ELSE - SELECT TB.Property FROM C_TABLABIN2 TB ; - INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(tcName),128) ; - INTO ARRAY laProperty + IF INLIST( tcType, 'Index', 'Field' ) + SELECT TB.Property FROM C_TABLABIN2 TB ; + INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(JUSTEXT(tcName)),128) ; + AND TB2.objectName = PADR(LOWER(JUSTSTEM(tcName)),128) ; + INTO ARRAY laProperty - ENDIF + ELSE + SELECT TB.Property FROM C_TABLABIN2 TB ; + INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(tcName),128) ; + INTO ARRAY laProperty - IF _TALLY > 0 - IF EMPTY(laProperty(1,1)) - EXIT ENDIF - lnLastPos = 1 + IF _TALLY > 0 + IF EMPTY(laProperty(1,1)) + EXIT + ENDIF - DO WHILE lnLastPos < LEN(laProperty(1,1)) - tnProperty_Count = tnProperty_Count + 1 - DIMENSION taProperties( tnProperty_Count,6 ) + lnLastPos = 1 - lnRecordLen = CTOBIN( SUBSTR(laProperty(1,1), lnLastPos, 4), "4RS" ) - lcBinRecord = SUBSTR(laProperty(1,1), lnLastPos, lnRecordLen) - lnLenCCode = CTOBIN( SUBSTR(lcBinRecord, 4+1, 2), "2RS" ) - lnPropertyID = ASC( SUBSTR(lcBinRecord, 4+2+1, lnLenCCode) ) - lcPropName = THIS.getDBCPropertyNameByID( lnPropertyID ) - lcDataType = THIS.getDBCPropertyValueTypeByPropertyID( lnPropertyID ) - lnLenHeader = 4 + 2 + lnLenCCode - lcValue = SUBSTR(lcBinRecord, lnLenHeader + 1) + DO WHILE lnLastPos < LEN(laProperty(1,1)) + tnProperty_Count = tnProperty_Count + 1 + DIMENSION taProperties( tnProperty_Count,6 ) - DO CASE - CASE lcDataType = 'B' - IF lnLenHeader = lnRecordLen - leValue = 0 - ELSE - leValue = ASC( lcValue ) - ENDIF + lnRecordLen = CTOBIN( SUBSTR(laProperty(1,1), lnLastPos, 4), "4RS" ) + lcBinRecord = SUBSTR(laProperty(1,1), lnLastPos, lnRecordLen) + lnLenCCode = CTOBIN( SUBSTR(lcBinRecord, 4+1, 2), "2RS" ) + lnPropertyID = ASC( SUBSTR(lcBinRecord, 4+2+1, lnLenCCode) ) + lcPropName = .getDBCPropertyNameByID( lnPropertyID ) + lcDataType = .getDBCPropertyValueTypeByPropertyID( lnPropertyID ) + lnLenHeader = 4 + 2 + lnLenCCode + lcValue = SUBSTR(lcBinRecord, lnLenHeader + 1) - CASE lcDataType = 'L' - IF lnLenHeader = lnRecordLen - leValue = .F. - ELSE - leValue = ( CTOBIN( lcValue, "1S" ) = 1 ) - ENDIF + DO CASE + CASE lcDataType = 'B' + IF lnLenHeader = lnRecordLen + leValue = 0 + ELSE + leValue = ASC( lcValue ) + ENDIF - CASE lcDataType = 'N' - IF lnLenHeader = lnRecordLen - leValue = 0 - ELSE - leValue = CTOBIN( lcValue, "4S" ) - ENDIF + CASE lcDataType = 'L' + IF lnLenHeader = lnRecordLen + leValue = .F. + ELSE + leValue = ( CTOBIN( lcValue, "1S" ) = 1 ) + ENDIF - OTHERWISE && Asume 'C' - IF lnLenHeader = lnRecordLen - leValue = '' - ELSE - leValue = LEFT( lcValue, AT( CHR(0), lcValue ) - 1 ) - ENDIF - ENDCASE + CASE lcDataType = 'N' + IF lnLenHeader = lnRecordLen + leValue = 0 + ELSE + leValue = CTOBIN( lcValue, "4S" ) + ENDIF - taProperties( tnProperty_Count,1 ) = lcPropName - taProperties( tnProperty_Count,2 ) = lnRecordLen - taProperties( tnProperty_Count,3 ) = lnLenCCode - taProperties( tnProperty_Count,4 ) = lnPropertyID - taProperties( tnProperty_Count,5 ) = lcDataType - taProperties( tnProperty_Count,6 ) = leValue + OTHERWISE && Asume 'C' + IF lnLenHeader = lnRecordLen + leValue = '' + ELSE + leValue = LEFT( lcValue, AT( CHR(0), lcValue ) - 1 ) + ENDIF + ENDCASE - lnLastPos = lnLastPos + lnRecordLen - ENDDO - ELSE - ERROR 1562, (tcName) - ENDIF + taProperties( tnProperty_Count,1 ) = lcPropName + taProperties( tnProperty_Count,2 ) = lnRecordLen + taProperties( tnProperty_Count,3 ) = lnLenCCode + taProperties( tnProperty_Count,4 ) = lnPropertyID + taProperties( tnProperty_Count,5 ) = lcDataType + taProperties( tnProperty_Count,6 ) = leValue + + lnLastPos = lnLastPos + lnRecordLen + ENDDO + ELSE + ERROR 1562, (tcName) + ENDIF + ENDWITH && THIS CATCH TO loEx @@ -11178,86 +11333,89 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE TRY LOCAL lcValue, leValue, lnSelect, laProperty(1,1), lnRecordLen, lcBinRecord, lnPropertyID ; , lnLastPos, lnLenCCode, lcDataType, lnSerchedDataCC, lcDBF, lnLenData, lnLenHeader - lnSelect = SELECT() - leValue = '' - tcName = PROPER(RTRIM(tcName)) - tcType = PROPER(RTRIM(tcType)) - tcProperty = PROPER(RTRIM(tcProperty)) - lcDBF = DBF() - SELECT 0 - USE (lcDBF) AGAIN SHARED NOUPDATE ALIAS C_TABLABIN2 + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + lnSelect = SELECT() + leValue = '' + tcName = PROPER(RTRIM(tcName)) + tcType = PROPER(RTRIM(tcType)) + tcProperty = PROPER(RTRIM(tcProperty)) + lcDBF = DBF() - IF INLIST( tcType, 'Index', 'Field' ) - SELECT TB.Property FROM C_TABLABIN2 TB ; - INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(JUSTEXT(tcName)),128) ; - AND TB2.objectName = PADR(LOWER(JUSTSTEM(tcName)),128) ; - INTO ARRAY laProperty + SELECT 0 + USE (lcDBF) AGAIN SHARED NOUPDATE ALIAS C_TABLABIN2 - ELSE - SELECT TB.Property FROM C_TABLABIN2 TB ; - INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(tcName),128) ; - INTO ARRAY laProperty + IF INLIST( tcType, 'Index', 'Field' ) + SELECT TB.Property FROM C_TABLABIN2 TB ; + INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(JUSTEXT(tcName)),128) ; + AND TB2.objectName = PADR(LOWER(JUSTSTEM(tcName)),128) ; + INTO ARRAY laProperty - ENDIF + ELSE + SELECT TB.Property FROM C_TABLABIN2 TB ; + INNER JOIN C_TABLABIN2 TB2 ON STR(TB.ParentID)+TB.ObjectType+LOWER(TB.objectName) = STR(TB2.ObjectID)+PADR(tcType,10)+PADR(LOWER(tcName),128) ; + INTO ARRAY laProperty - IF _TALLY > 0 - IF EMPTY(laProperty(1,1)) - EXIT ENDIF - lnLastPos = 1 - lnSerchedDataCC = THIS.getDBCPropertyIDByName( tcProperty, .T. ) - - DO WHILE lnLastPos < LEN(laProperty(1,1)) - lnRecordLen = CTOBIN( SUBSTR(laProperty(1,1), lnLastPos, 4), "4RS" ) - lcBinRecord = SUBSTR(laProperty(1,1), lnLastPos, lnRecordLen) - lnLenCCode = CTOBIN( SUBSTR(lcBinRecord, 4+1, 2), "2RS" ) - lnPropertyID = ASC( SUBSTR(lcBinRecord, 4+2+1, lnLenCCode) ) - - IF lnPropertyID = lnSerchedDataCC - lcDataType = THIS.getDBCPropertyValueTypeByPropertyID( lnPropertyID ) - lnLenHeader = 4 + 2 + lnLenCCode - lcValue = SUBSTR(lcBinRecord, lnLenHeader + 1) - - DO CASE - CASE lcDataType = 'B' - IF lnLenHeader = lnRecordLen - leValue = 0 - ELSE - leValue = ASC( lcValue ) - ENDIF - - CASE lcDataType = 'L' - IF lnLenHeader = lnRecordLen - leValue = .F. - ELSE - leValue = ( CTOBIN( lcValue, "1S" ) = 1 ) - ENDIF - - CASE lcDataType = 'N' - IF lnLenHeader = lnRecordLen - leValue = 0 - ELSE - leValue = CTOBIN( lcValue, "4S" ) - ENDIF - - OTHERWISE && Asume 'C' - IF lnLenHeader = lnRecordLen - leValue = '' - ELSE - leValue = LEFT( lcValue, AT( CHR(0), lcValue ) - 1 ) - ENDIF - ENDCASE - + IF _TALLY > 0 + IF EMPTY(laProperty(1,1)) EXIT ENDIF - lnLastPos = lnLastPos + lnRecordLen - ENDDO - ELSE - ERROR 1562, (tcName) - ENDIF + lnLastPos = 1 + lnSerchedDataCC = .getDBCPropertyIDByName( tcProperty, .T. ) + + DO WHILE lnLastPos < LEN(laProperty(1,1)) + lnRecordLen = CTOBIN( SUBSTR(laProperty(1,1), lnLastPos, 4), "4RS" ) + lcBinRecord = SUBSTR(laProperty(1,1), lnLastPos, lnRecordLen) + lnLenCCode = CTOBIN( SUBSTR(lcBinRecord, 4+1, 2), "2RS" ) + lnPropertyID = ASC( SUBSTR(lcBinRecord, 4+2+1, lnLenCCode) ) + + IF lnPropertyID = lnSerchedDataCC + lcDataType = .getDBCPropertyValueTypeByPropertyID( lnPropertyID ) + lnLenHeader = 4 + 2 + lnLenCCode + lcValue = SUBSTR(lcBinRecord, lnLenHeader + 1) + + DO CASE + CASE lcDataType = 'B' + IF lnLenHeader = lnRecordLen + leValue = 0 + ELSE + leValue = ASC( lcValue ) + ENDIF + + CASE lcDataType = 'L' + IF lnLenHeader = lnRecordLen + leValue = .F. + ELSE + leValue = ( CTOBIN( lcValue, "1S" ) = 1 ) + ENDIF + + CASE lcDataType = 'N' + IF lnLenHeader = lnRecordLen + leValue = 0 + ELSE + leValue = CTOBIN( lcValue, "4S" ) + ENDIF + + OTHERWISE && Asume 'C' + IF lnLenHeader = lnRecordLen + leValue = '' + ELSE + leValue = LEFT( lcValue, AT( CHR(0), lcValue ) - 1 ) + ENDIF + ENDCASE + + EXIT + ENDIF + + lnLastPos = lnLastPos + lnRecordLen + ENDDO + ELSE + ERROR 1562, (tcName) + ENDIF + ENDWITH && THIS CATCH TO loEx @@ -11371,33 +11529,35 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE getObjectType LOCAL lcType - DO CASE - CASE THIS.CLASS == 'Cl_dbc' - lcType = 'Database' + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + DO CASE + CASE .CLASS == 'Cl_dbc' + lcType = 'Database' - CASE THIS.CLASS == 'Cl_dbc_connection' - lcType = 'Connection' + CASE .CLASS == 'Cl_dbc_connection' + lcType = 'Connection' - CASE THIS.CLASS == 'Cl_dbc_table' - lcType = 'Table' + CASE .CLASS == 'Cl_dbc_table' + lcType = 'Table' - CASE THIS.CLASS == 'Cl_dbc_view' - lcType = 'View' + CASE .CLASS == 'Cl_dbc_view' + lcType = 'View' - CASE THIS.CLASS == 'Cl_dbc_index_db' OR THIS.CLASS == 'Cl_dbc_index_vw' - lcType = 'Index' + CASE .CLASS == 'Cl_dbc_index_db' OR .CLASS == 'Cl_dbc_index_vw' + lcType = 'Index' - CASE THIS.CLASS == 'Cl_dbc_relation' - lcType = 'Relation' + CASE .CLASS == 'Cl_dbc_relation' + lcType = 'Relation' - CASE THIS.CLASS == 'Cl_dbc_field_db' OR THIS.CLASS == 'Cl_dbc_field_vw' - lcType = 'Field' + CASE .CLASS == 'Cl_dbc_field_db' OR .CLASS == 'Cl_dbc_field_vw' + lcType = 'Field' - OTHERWISE - *ERROR 'Clase [' + THIS.CLASS + '] desconocida' - ERROR (TEXTMERGE(C_UNKNOWN_CLASS_NAME_LOC)) + OTHERWISE + *ERROR 'Clase [' + .CLASS + '] desconocida' + ERROR (TEXTMERGE(C_UNKNOWN_CLASS_NAME_LOC)) - ENDCASE + ENDCASE + ENDWITH && THIS RETURN lcType ENDPROC @@ -11505,9 +11665,11 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE PROCEDURE INIT DODEFAULT() *-- - THIS.ADDOBJECT("_Connections", "CL_DBC_CONNECTIONS") - THIS.ADDOBJECT("_Tables", "CL_DBC_TABLES") - THIS.ADDOBJECT("_Views", "CL_DBC_VIEWS") + WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG' + .ADDOBJECT("_Connections", "CL_DBC_CONNECTIONS") + .ADDOBJECT("_Tables", "CL_DBC_TABLES") + .ADDOBJECT("_Views", "CL_DBC_VIEWS") + ENDWITH && THIS ENDPROC @@ -11532,42 +11694,44 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE IF LEFT(tcLine, LEN(C_DATABASE_I)) == C_DATABASE_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_DATABASE_F $ tcLine && Fin - EXIT + CASE C_DATABASE_F $ tcLine && Fin + EXIT - CASE C_CONNECTIONS_I $ tcLine - loConnections = THIS._Connections - loConnections.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_CONNECTIONS_I $ tcLine + loConnections = ._Connections + loConnections.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE C_TABLES_I $ tcLine - loTables = THIS._Tables - loTables.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_TABLES_I $ tcLine + loTables = ._Tables + loTables.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE C_VIEWS_I $ tcLine - loViews = THIS._Views - loViews.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_VIEWS_I $ tcLine + loViews = ._Views + loViews.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE C_STORED_PROC_I $ tcLine - THIS.analizarBloque_SP( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_STORED_PROC_I $ tcLine + .analizarBloque_SP( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE '' $ tcLine - THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) - OTHERWISE && Otro valor - *-- Estructura a reconocer: - * ID - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.add_Property( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- Estructura a reconocer: + * ID + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .add_Property( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -11602,19 +11766,21 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE lcValue = '' llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE C_STORED_PROC_F $ tcLine && Fin - EXIT + DO CASE + CASE C_STORED_PROC_F $ tcLine && Fin + EXIT - OTHERWISE && Línea de Stored Procedure - lcValue = lcValue + CR_LF + taCodeLines(I) - ENDCASE - ENDFOR + OTHERWISE && Línea de Stored Procedure + lcValue = lcValue + CR_LF + taCodeLines(I) + ENDCASE + ENDFOR - THIS.ADDPROPERTY( '_StoredProcedures', SUBSTR(lcValue,3) ) + .ADDPROPERTY( '_StoredProcedures', SUBSTR(lcValue,3) ) + ENDWITH && THIS ENDIF ENDPROC @@ -11633,32 +11799,34 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE LOCAL loConnections AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' LOCAL loViews AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' - loTables = THIS._Tables - loConnections = THIS._Connections - loViews = THIS._Views + WITH THIS AS CL_DBC_BASE OF 'FOXBIN2PRG.PRG' + loTables = ._Tables + loConnections = ._Connections + loViews = ._Views - CREATE DATABASE (tc_OutputFile) - CLOSE DATABASES - OPEN DATABASE (tc_OutputFile) SHARED - USE (tc_OutputFile) SHARED AGAIN ALIAS TABLABIN - tnLastID = 5 - THIS.setNextID(0) - tnParentID = THIS.__ObjectID + CREATE DATABASE (tc_OutputFile) + CLOSE DATABASES + OPEN DATABASE (tc_OutputFile) SHARED + USE (tc_OutputFile) SHARED AGAIN ALIAS TABLABIN + tnLastID = 5 + .setNextID(0) + tnParentID = .__ObjectID - lcMemoWithProperties = THIS.getBinMemoFromProperties() - UPDATE TABLABIN ; - SET Property = lcMemoWithProperties ; - WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('Database'),128) - - IF NOT EMPTY(THIS._StoredProcedures) + lcMemoWithProperties = .getBinMemoFromProperties() UPDATE TABLABIN ; - SET CODE = THIS._StoredProcedures ; - WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) - ENDIF + SET Property = lcMemoWithProperties ; + WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('Database'),128) - loTables.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) - loViews.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) - loConnections.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + IF NOT EMPTY(._StoredProcedures) + UPDATE TABLABIN ; + SET CODE = THIS._StoredProcedures ; + WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) + ENDIF + + loTables.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + loViews.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + loConnections.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + ENDWITH && THIS CATCH TO loEx @@ -11686,44 +11854,47 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE LOCAL loTables AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' LOCAL loViews AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' LOCAL loRelations AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' - lcText = '' - lcDBC = JUSTSTEM(DBC()) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - ENDTEXT + WITH THIS AS CL_DBC OF 'FOXBIN2PRG.PRG' + lcText = '' + lcDBC = JUSTSTEM(DBC()) - *-- Connections - loConnections = THIS._Connections - lcText = lcText + loConnections.toText() + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + ENDTEXT - *-- Tables - loTables = THIS._Tables - lcText = lcText + loTables.toText() + *-- Connections + loConnections = ._Connections + lcText = lcText + loConnections.toText() - *-- Views - loViews = THIS._Views - lcText = lcText + loViews.toText() + *-- Tables + loTables = ._Tables + lcText = lcText + loTables.toText() - SELECT CODE ; - FROM TABLABIN ; - WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ; - INTO ARRAY laCode - THIS._StoredProcedures = laCode(1,1) + *-- Views + loViews = ._Views + lcText = lcText + loViews.toText() - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> <> - <> - <<>> <> - - ENDTEXT + SELECT CODE ; + FROM TABLABIN ; + WHERE STR(ParentID) + ObjectType + LOWER(objectName) = STR(1) + PADR('Database',10) + PADR(LOWER('StoredProceduresSource'),128) ; + INTO ARRAY laCode + ._StoredProcedures = laCode(1,1) + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> <> + <<._StoredProcedures>> + <<>> <> + + ENDTEXT + ENDWITH && THIS CATCH TO loEx @@ -11783,28 +11954,30 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE IF LEFT(tcLine, LEN(C_CONNECTIONS_I)) == C_CONNECTIONS_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_CONNECTIONS OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_CONNECTIONS_F $ tcLine && Fin - EXIT + CASE C_CONNECTIONS_F $ tcLine && Fin + EXIT - CASE C_CONNECTION_I $ tcLine - loConnection = CREATEOBJECT("CL_DBC_CONNECTION") - loConnection.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loConnection, loConnection._Name ) + CASE C_CONNECTION_I $ tcLine + loConnection = CREATEOBJECT("CL_DBC_CONNECTION") + loConnection.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + .ADD( loConnection, loConnection._Name ) - CASE '' $ tcLine - THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) - OTHERWISE && Otro valor - *-- No hay otros valores - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- No hay otros valores + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -11943,27 +12116,29 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE IF LEFT(tcLine, LEN(C_CONNECTION_I)) == C_CONNECTION_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_CONNECTION OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_CONNECTION_F $ tcLine && Fin - EXIT + CASE C_CONNECTION_F $ tcLine && Fin + EXIT - CASE '' $ tcLine - THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) - OTHERWISE && Propiedad de CONNECTION - *-- Estructura a reconocer: - * NOMBRE - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.add_Property( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Propiedad de CONNECTION + *-- Estructura a reconocer: + * NOMBRE + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .add_Property( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -12086,25 +12261,27 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE IF LEFT(tcLine, LEN(C_TABLES_I)) == C_TABLES_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_TABLES OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_TABLES_F $ tcLine && Fin - EXIT + CASE C_TABLES_F $ tcLine && Fin + EXIT - CASE C_TABLE_I $ tcLine - loTable = CREATEOBJECT("CL_DBC_TABLE") - loTable.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loTable, loTable._Name ) + CASE C_TABLE_I $ tcLine + loTable = CREATEOBJECT("CL_DBC_TABLE") + loTable.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + .ADD( loTable, loTable._Name ) - OTHERWISE && Otro valor - *-- No hay otros valores - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- No hay otros valores + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -12225,9 +12402,11 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE PROCEDURE INIT DODEFAULT() *-- - THIS.ADDOBJECT("_Fields", "CL_DBC_FIELDS_DB") - THIS.ADDOBJECT("_Indexes", "CL_DBC_INDEXES_DB") - THIS.ADDOBJECT("_Relations", "CL_DBC_RELATIONS") + WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' + .ADDOBJECT("_Fields", "CL_DBC_FIELDS_DB") + .ADDOBJECT("_Indexes", "CL_DBC_INDEXES_DB") + .ADDOBJECT("_Relations", "CL_DBC_RELATIONS") + ENDWITH && THIS ENDPROC @@ -12251,39 +12430,41 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE IF LEFT(tcLine, LEN(C_TABLE_I)) == C_TABLE_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_TABLE_F $ tcLine && Fin - EXIT + CASE C_TABLE_F $ tcLine && Fin + EXIT - CASE C_FIELDS_I $ tcLine - loFields = THIS._Fields - loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_FIELDS_I $ tcLine + loFields = ._Fields + loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE C_INDEXES_I $ tcLine - loIndexes = THIS._Indexes - loIndexes.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_INDEXES_I $ tcLine + loIndexes = ._Indexes + loIndexes.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE C_RELATIONS_I $ tcLine - loRelations = THIS._Relations - loRelations.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_RELATIONS_I $ tcLine + loRelations = ._Relations + loRelations.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE '' $ tcLine - THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) - OTHERWISE && Propiedad de TABLE - *-- Estructura a reconocer: - * NOMBRE - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.add_Property( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Propiedad de TABLE + *-- Estructura a reconocer: + * NOMBRE + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .add_Property( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -12370,10 +12551,13 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE LPARAMETERS tc_OutputFile, tnLastID, tnParentID DODEFAULT( tc_OutputFile, @tnLastID, tnParentID) - tnParentID = THIS.__ObjectID - THIS._Fields.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) - THIS._Indexes.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) - THIS._Relations.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + + WITH THIS AS CL_DBC_TABLE OF 'FOXBIN2PRG.PRG' + tnParentID = .__ObjectID + ._Fields.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + ._Indexes.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + ._Relations.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + ENDWITH && THIS ENDPROC @@ -12425,25 +12609,27 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE IF LEFT(tcLine, LEN(C_FIELDS_I)) == C_FIELDS_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_FIELDS_DB OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_FIELDS_F $ tcLine && Fin - EXIT + CASE C_FIELDS_F $ tcLine && Fin + EXIT - CASE C_FIELD_I $ tcLine - loField = CREATEOBJECT("CL_DBC_FIELD_DB") - loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loField, loField._Name ) + CASE C_FIELD_I $ tcLine + loField = CREATEOBJECT("CL_DBC_FIELD_DB") + loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + .ADD( loField, loField._Name ) - OTHERWISE && Otro valor - *-- No hay otros valores - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- No hay otros valores + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -12574,27 +12760,29 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE IF LEFT(tcLine, LEN(C_FIELD_I)) == C_FIELD_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_FIELD_DB OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_FIELD_F $ tcLine && Fin - EXIT + CASE C_FIELD_F $ tcLine && Fin + EXIT - CASE '' $ tcLine - THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) - OTHERWISE && Propiedad de FIELD - *-- Estructura a reconocer: - * NOMBRE - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.add_Property( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Propiedad de FIELD + *-- Estructura a reconocer: + * NOMBRE + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .add_Property( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -12709,25 +12897,27 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE IF LEFT(tcLine, LEN(C_INDEXES_I)) == C_INDEXES_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_INDEXES_DB OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_INDEXES_F $ tcLine && Fin - EXIT + CASE C_INDEXES_F $ tcLine && Fin + EXIT - CASE C_INDEX_I $ tcLine - loIndex = CREATEOBJECT("CL_DBC_INDEX_DB") - loIndex.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loIndex, loIndex._Name ) + CASE C_INDEX_I $ tcLine + loIndex = CREATEOBJECT("CL_DBC_INDEX_DB") + loIndex.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + .ADD( loIndex, loIndex._Name ) - OTHERWISE && Otro valor - *-- No hay otros valores - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- No hay otros valores + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -12844,27 +13034,29 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE IF LEFT(tcLine, LEN(C_INDEX_I)) == C_INDEX_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_INDEX_F $ tcLine && Fin - EXIT + CASE C_INDEX_F $ tcLine && Fin + EXIT - CASE '' $ tcLine - THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) - OTHERWISE && Propiedad de FIELD - *-- Estructura a reconocer: - * NOMBRE - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.add_Property( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Propiedad de FIELD + *-- Estructura a reconocer: + * NOMBRE + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .add_Property( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -12895,13 +13087,15 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE LOCAL lcText, loEx AS EXCEPTION lcText = '' - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> <> - <<>> <> - <<>> <> - <<>> - ENDTEXT + WITH THIS AS CL_DBC_INDEX_DB OF 'FOXBIN2PRG.PRG' + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> <> + <<>> <> + <<>> <<.DBGETPROP(tcIndex,'Index','IsUnique')>> + <<>> + ENDTEXT + ENDWITH && THIS CATCH TO loEx loEx.USERVALUE = loEx.USERVALUE + CR_LF + "tcIndex = " + RTRIM(TRANSFORM(tcIndex)) @@ -12968,25 +13162,27 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE IF LEFT(tcLine, LEN(C_VIEWS_I)) == C_VIEWS_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_VIEWS OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_VIEWS_F $ tcLine && Fin - EXIT + CASE C_VIEWS_F $ tcLine && Fin + EXIT - CASE C_VIEW_I $ tcLine - loView = CREATEOBJECT("CL_DBC_VIEW") - loView.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loView, loView._Name ) + CASE C_VIEW_I $ tcLine + loView = CREATEOBJECT("CL_DBC_VIEW") + loView.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + .ADD( loView, loView._Name ) - OTHERWISE && Otro valor - *-- No hay otros valores - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- No hay otros valores + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -13139,9 +13335,11 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE PROCEDURE INIT DODEFAULT() *-- - THIS.ADDOBJECT("_Fields", "CL_DBC_FIELDS_VW") - THIS.ADDOBJECT("_Indexes", "CL_DBC_INDEXES_VW") - THIS.ADDOBJECT("_Relations", "CL_DBC_RELATIONS") + WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' + .ADDOBJECT("_Fields", "CL_DBC_FIELDS_VW") + .ADDOBJECT("_Indexes", "CL_DBC_INDEXES_VW") + .ADDOBJECT("_Relations", "CL_DBC_RELATIONS") + ENDWITH && THIS ENDPROC @@ -13165,39 +13363,41 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE IF LEFT(tcLine, LEN(C_VIEW_I)) == C_VIEW_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_VIEW_F $ tcLine && Fin - EXIT + CASE C_VIEW_F $ tcLine && Fin + EXIT - CASE C_FIELDS_I $ tcLine - loFields = THIS._Fields - loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_FIELDS_I $ tcLine + loFields = ._Fields + loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE C_INDEXES_I $ tcLine - loIndexes = THIS._Indexes - loIndexes.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_INDEXES_I $ tcLine + loIndexes = ._Indexes + loIndexes.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE C_RELATIONS_I $ tcLine - loRelations = THIS._Relations - loRelations.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_RELATIONS_I $ tcLine + loRelations = ._Relations + loRelations.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE '' $ tcLine - THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) - OTHERWISE && Propiedad de VIEW - *-- Estructura a reconocer: - * NOMBRE - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.add_Property( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Propiedad de VIEW + *-- Estructura a reconocer: + * NOMBRE + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .add_Property( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -13231,57 +13431,59 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE LOCAL loRelations AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' lcText = '' - TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - <<>> <> - ENDTEXT - - *-- ALGUNOS VALORES QUE EL DBGETPROP OFICIAL NO DEVUELVE - *-- Path - *-- OfflineRecordCount - IF NOT EMPTY(THIS._Offline) AND EVALUATE(THIS._Offline) + WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> <> - <<>> <> + <<>> + <<>> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> + <<>> <> ENDTEXT - ENDIF - *-- - loFields = THIS._Fields - lcText = lcText + loFields.toText( tcView ) + *-- ALGUNOS VALORES QUE EL DBGETPROP OFICIAL NO DEVUELVE + *-- Path + *-- OfflineRecordCount + IF NOT EMPTY(._Offline) AND EVALUATE(._Offline) + TEXT TO lcText TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> <<.DBGETPROP(tcView,"VIEW","Path")>> + <<>> <<.DBGETPROP(tcView,"VIEW","RecordCount")>> + ENDTEXT + ENDIF + *-- - loIndexes = THIS._Indexes - lcText = lcText + loIndexes.toText( tcView ) + loFields = ._Fields + lcText = lcText + loFields.toText( tcView ) - loRelations = CREATEOBJECT('CL_DBC_RELATIONS') - lcText = lcText + loRelations.toText( tcView ) + loIndexes = ._Indexes + lcText = lcText + loIndexes.toText( tcView ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - ENDTEXT + loRelations = CREATEOBJECT('CL_DBC_RELATIONS') + lcText = lcText + loRelations.toText( tcView ) + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + ENDTEXT + ENDWITH && THIS CATCH TO loEx @@ -13309,10 +13511,13 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE LPARAMETERS tc_OutputFile, tnLastID, tnParentID DODEFAULT( tc_OutputFile, @tnLastID, tnParentID) - tnParentID = THIS.__ObjectID - THIS._Fields.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) - THIS._Indexes.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) - THIS._Relations.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + + WITH THIS AS CL_DBC_VIEW OF 'FOXBIN2PRG.PRG' + tnParentID = .__ObjectID + ._Fields.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + ._Indexes.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + ._Relations.updateDBC( tc_OutputFile, @tnLastID, tnParentID ) + ENDWITH && THIS ENDPROC @@ -13385,25 +13590,27 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE IF LEFT(tcLine, LEN(C_FIELDS_I)) == C_FIELDS_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_FIELDS_VW OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_FIELDS_F $ tcLine && Fin - EXIT + CASE C_FIELDS_F $ tcLine && Fin + EXIT - CASE C_FIELD_I $ tcLine - loField = CREATEOBJECT("CL_DBC_FIELD_VW") - loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loField, loField._Name ) + CASE C_FIELD_I $ tcLine + loField = CREATEOBJECT("CL_DBC_FIELD_VW") + loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + .ADD( loField, loField._Name ) - OTHERWISE && Otro valor - *-- No hay otros valores - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- No hay otros valores + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -13543,27 +13750,29 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE IF LEFT(tcLine, LEN(C_FIELD_I)) == C_FIELD_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_FIELD_VW OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_FIELD_F $ tcLine && Fin - EXIT + CASE C_FIELD_F $ tcLine && Fin + EXIT - CASE '' $ tcLine - THIS.analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE '' $ tcLine + .analizarBloque_Comment( @tcLine, @taCodeLines, @I, tnCodeLines ) - OTHERWISE && Propiedad de FIELD - *-- Estructura a reconocer: - * NOMBRE - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.add_Property( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Propiedad de FIELD + *-- Estructura a reconocer: + * NOMBRE + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .add_Property( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF @@ -13683,25 +13892,27 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE IF LEFT(tcLine, LEN(C_RELATIONS_I)) == C_RELATIONS_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_RELATIONS OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_RELATIONS_F $ tcLine && Fin - EXIT + CASE C_RELATIONS_F $ tcLine && Fin + EXIT - CASE C_RELATION_I $ tcLine - loRelation = CREATEOBJECT("CL_DBC_RELATION") - loRelation.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loRelation, loRelation._ChildTable + loRelation._ParentTable ) + CASE C_RELATION_I $ tcLine + loRelation = CREATEOBJECT("CL_DBC_RELATION") + loRelation.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + .ADD( loRelation, loRelation._ChildTable + loRelation._ParentTable ) - OTHERWISE && Otro valor - *-- No hay otros valores - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- No hay otros valores + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -13821,24 +14032,26 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE IF LEFT(tcLine, LEN(C_RELATION_I)) == C_RELATION_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBC_RELATION OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_RELATION_F $ tcLine && Fin - EXIT + CASE C_RELATION_F $ tcLine && Fin + EXIT - OTHERWISE && Propiedad de RELATION - *-- Estructura a reconocer: - * NOMBRE - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.add_Property( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Propiedad de RELATION + *-- Estructura a reconocer: + * NOMBRE + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .add_Property( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -13986,32 +14199,34 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE IF LEFT(tcLine, LEN(C_TABLE_I)) == C_TABLE_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_TABLE_F $ tcLine && Fin - EXIT + CASE C_TABLE_F $ tcLine && Fin + EXIT - CASE C_FIELDS_I $ tcLine - loFields = THIS._Fields - loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_FIELDS_I $ tcLine + loFields = ._Fields + loFields.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - CASE C_INDEXES_I $ tcLine - loIndexes = THIS._Indexes - loIndexes.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + CASE C_INDEXES_I $ tcLine + loIndexes = ._Indexes + loIndexes.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - OTHERWISE && Otro valor - *-- Estructura a reconocer: - * ID - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- Estructura a reconocer: + * ID + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .ADDPROPERTY( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -14118,25 +14333,27 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE IF LEFT(tcLine, LEN(C_FIELDS_I)) == C_FIELDS_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBF_FIELDS OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_FIELDS_F $ tcLine && Fin - EXIT + CASE C_FIELDS_F $ tcLine && Fin + EXIT - CASE C_FIELD_I $ tcLine - loField = CREATEOBJECT("CL_DBF_FIELD") - loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loField, loField._Name ) + CASE C_FIELD_I $ tcLine + loField = CREATEOBJECT("CL_DBF_FIELD") + loField.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + .ADD( loField, loField._Name ) - OTHERWISE && Otro valor - *-- No hay otros valores - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- No hay otros valores + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -14273,24 +14490,26 @@ DEFINE CLASS CL_DBF_FIELD AS CL_CUS_BASE IF LEFT(tcLine, LEN(C_FIELD_I)) == C_FIELD_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBF_FIELD OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_FIELD_F $ tcLine && Fin - EXIT + CASE C_FIELD_F $ tcLine && Fin + EXIT - OTHERWISE && Propiedad de FIELD - *-- Estructura a reconocer: - * NOMBRE - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Propiedad de FIELD + *-- Estructura a reconocer: + * NOMBRE + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .ADDPROPERTY( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -14389,25 +14608,27 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE IF LEFT(tcLine, LEN(C_INDEXES_I)) == C_INDEXES_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBF_INDEXES OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_INDEXES_F $ tcLine && Fin - EXIT + CASE C_INDEXES_F $ tcLine && Fin + EXIT - CASE C_INDEX_I $ tcLine - loIndex = CREATEOBJECT("CL_DBF_INDEX") - loIndex.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loIndex, loIndex._TagName ) + CASE C_INDEX_I $ tcLine + loIndex = CREATEOBJECT("CL_DBF_INDEX") + loIndex.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + .ADD( loIndex, loIndex._TagName ) - OTHERWISE && Otro valor - *-- No hay otros valores - ENDCASE - ENDFOR + OTHERWISE && Otro valor + *-- No hay otros valores + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -14523,24 +14744,26 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE IF LEFT(tcLine, LEN(C_INDEX_I)) == C_INDEX_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_DBF_INDEX OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE C_INDEX_F $ tcLine && Fin - EXIT + CASE C_INDEX_F $ tcLine && Fin + EXIT - OTHERWISE && Propiedad de INDEX - *-- Estructura a reconocer: - * NOMBRE - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) - ENDCASE - ENDFOR + OTHERWISE && Propiedad de INDEX + *-- Estructura a reconocer: + * NOMBRE + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + .ADDPROPERTY( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDWITH && THIS ENDIF CATCH TO loEx @@ -14668,9 +14891,11 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE LOCAL toServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' #ENDIF - THIS._ServerCount = THIS._ServerCount + 1 - DIMENSION THIS._Servers( THIS._ServerCount ) - THIS._Servers( THIS._ServerCount ) = toServerData + WITH THIS AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' + ._ServerCount = ._ServerCount + 1 + DIMENSION ._Servers( ._ServerCount ) + ._Servers( ._ServerCount ) = toServerData + ENDWITH && THIS ENDPROC @@ -14698,7 +14923,7 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE TRY LOCAL loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' - WITH THIS + WITH THIS AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' lcStr = '' lnPos = 1 lnLen = 4 @@ -14726,7 +14951,7 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE loServerData._CLSID = .getDataFromPair_LenData_Structure( @tcServerInfo, @lnPos, @lnLen ) loServerData._Interface = .getDataFromPair_LenData_Structure( @tcServerInfo, @lnPos, @lnLen ) - THIS.add_Server( loServerData ) + .add_Server( loServerData ) ENDFOR ENDWITH && THIS @@ -14753,11 +14978,11 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE lcStr = '' - IF THIS._ServerCount > 0 - WITH THIS + WITH THIS AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' + IF ._ServerCount > 0 lnPos = 1 lnLen = 4 - lnLenH = 8 + LEN(._LibraryName) + 4 + LEN(._InternalName) + 4 + LEN(._ProjectName) + 4 + LEN(._TypeLibDesc) - 1 + lnLenH = 103 && Al final es una constante fija :( 4 + 8 + 4 + LEN(._LibraryName) + 4 + LEN(._InternalName) + 4 + LEN(._ProjectName) + 4 + LEN(._TypeLibDesc) - 1 *-- Header lcStr = lcStr + PADL( 4, 4, ' ' ) + PADL( lnLenH, 4, ' ' ) @@ -14773,8 +14998,8 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE loServerData = ._Servers(I) lcStr = lcStr + loServerData.getRowServerInfo() ENDFOR - ENDWITH && THIS - ENDIF + ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -14796,23 +15021,25 @@ DEFINE CLASS CL_PROJ_SRV_HEAD AS CL_CUS_BASE , loServerData AS CL_PROJ_SRV_DATA OF 'FOXBIN2PRG.PRG' lcText = '' - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - _LibraryName = '<>' - _InternalName = '<>' - _ProjectName = '<>' - _TypeLibDesc = '<>' - _ServerType = '<>' - _TypeLib = '<>' - <> - ENDTEXT + WITH THIS AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + _LibraryName = '<<._LibraryName>>' + _InternalName = '<<._InternalName>>' + _ProjectName = '<<._ProjectName>>' + _TypeLibDesc = '<<._TypeLibDesc>>' + _ServerType = '<<._ServerType>>' + _TypeLib = '<<._TypeLib>>' + <> + ENDTEXT - *-- Recorro los servidores - FOR I = 1 TO THIS._ServerCount - loServerData = THIS._Servers(I) - lcText = lcText + loServerData.getFormattedServerText() - loServerData = NULL - ENDFOR + *-- Recorro los servidores + FOR I = 1 TO ._ServerCount + loServerData = ._Servers(I) + lcText = lcText + loServerData.getFormattedServerText() + loServerData = NULL + ENDFOR + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -14866,8 +15093,8 @@ DEFINE CLASS CL_PROJ_SRV_DATA AS CL_CUS_BASE lcStr = '' - IF NOT EMPTY(THIS._ServerName) - WITH THIS + WITH THIS + IF NOT EMPTY(._ServerName) lnPos = 1 lnLen = 4 @@ -14881,8 +15108,8 @@ DEFINE CLASS CL_PROJ_SRV_DATA AS CL_CUS_BASE lcStr = lcStr + PADL( LEN(._Instancing), 4, ' ' ) + ._Instancing lcStr = lcStr + PADL( LEN(._CLSID), 4, ' ' ) + ._CLSID lcStr = lcStr + PADL( LEN(._Interface), 4, ' ' ) + ._Interface - ENDWITH && THIS - ENDIF + ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -14993,73 +15220,75 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' - lnLastKey = 0 - THIS.oReg = toReg - lcLevelName = toReg.LevelName - lnLastKey = IIF( toCol_LastLevelName.COUNT=0, 0, toCol_LastLevelName.GETKEY(toReg.LevelName ) ) + WITH THIS AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + lnLastKey = 0 + .oReg = toReg + lcLevelName = toReg.LevelName + lnLastKey = IIF( toCol_LastLevelName.COUNT=0, 0, toCol_LastLevelName.GETKEY(toReg.LevelName ) ) - IF lnLastKey = 0 - toCol_LastLevelName.ADD( toReg.LevelName, toReg.LevelName ) - ENDIF - - DO WHILE NOT EOF() - loReg = NULL - SKIP 1 - - IF EOF() - EXIT + IF lnLastKey = 0 + toCol_LastLevelName.ADD( toReg.LevelName, toReg.LevelName ) ENDIF - SCATTER MEMO NAME loReg + DO WHILE NOT EOF() + loReg = NULL + SKIP 1 - lnLastKey = toCol_LastLevelName.GETKEY(loReg.LevelName) - - DO CASE - CASE EOF() - llRetorno = .T. - EXIT - - CASE lnLastKey > 0 AND lnLastKey < toCol_LastLevelName.COUNT - *-- El nombre del analizado actual ya existe y no es el último, - *-- así que corresponde a un nivel superior. - SKIP -1 - llRetorno = .F. - EXIT - - CASE loReg.ObjType = 3 AND toReg.ObjType = 3 OR loReg.ObjType = 2 AND toReg.ObjType = 2 - *-- Un objeto Option no puede anidar a otro Option, - *-- y un objeto Bar/Popup no puede anidar a otro Bar/Popup - SKIP -1 - llRetorno = .F. - EXIT - - CASE loReg.ObjType = 2 && Bar or Popup - loBarPop = CREATEOBJECT('CL_MENU_BARPOP') - llHayDatos = loBarPop.get_DataFromTablabin( loReg, toCol_LastLevelName ) - llRetorno = .T. - llRetorno = llHayDatos - THIS.ADD( loBarPop ) - loBarPop = NULL - IF NOT llHayDatos AND toReg.ObjType = 3 + IF EOF() EXIT ENDIF - CASE loReg.ObjType = 3 && Option - loOption = CREATEOBJECT('CL_MENU_OPTION') - llHayDatos = loOption.get_DataFromTablabin( loReg, toCol_LastLevelName ) - llRetorno = llHayDatos - THIS.ADD( loOption ) - loOption = NULL - IF NOT llHayDatos AND toReg.ObjType = 3 + SCATTER MEMO NAME loReg + + lnLastKey = toCol_LastLevelName.GETKEY(loReg.LevelName) + + DO CASE + CASE EOF() + llRetorno = .T. EXIT - ENDIF - OTHERWISE - llRetorno = .T. - EXIT + CASE lnLastKey > 0 AND lnLastKey < toCol_LastLevelName.COUNT + *-- El nombre del analizado actual ya existe y no es el último, + *-- así que corresponde a un nivel superior. + SKIP -1 + llRetorno = .F. + EXIT - ENDCASE - ENDDO + CASE loReg.ObjType = 3 AND toReg.ObjType = 3 OR loReg.ObjType = 2 AND toReg.ObjType = 2 + *-- Un objeto Option no puede anidar a otro Option, + *-- y un objeto Bar/Popup no puede anidar a otro Bar/Popup + SKIP -1 + llRetorno = .F. + EXIT + + CASE loReg.ObjType = 2 && Bar or Popup + loBarPop = CREATEOBJECT('CL_MENU_BARPOP') + llHayDatos = loBarPop.get_DataFromTablabin( loReg, toCol_LastLevelName ) + llRetorno = .T. + llRetorno = llHayDatos + .ADD( loBarPop ) + loBarPop = NULL + IF NOT llHayDatos AND toReg.ObjType = 3 + EXIT + ENDIF + + CASE loReg.ObjType = 3 && Option + loOption = CREATEOBJECT('CL_MENU_OPTION') + llHayDatos = loOption.get_DataFromTablabin( loReg, toCol_LastLevelName ) + llRetorno = llHayDatos + .ADD( loOption ) + loOption = NULL + IF NOT llHayDatos AND toReg.ObjType = 3 + EXIT + ENDIF + + OTHERWISE + llRetorno = .T. + EXIT + + ENDCASE + ENDDO + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -15231,58 +15460,61 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE llBloqueEncontrado = .T. - *-- CABECERA DEL MENU - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg + WITH THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' + *-- CABECERA DEL MENU + .oReg = toConversor.emptyRecord() + loReg = .oReg - FOR I = I + 0 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + FOR I = I + 0 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP - - CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) - LOOP && Saltear comentarios - - CASE NOT llBloque_MenuType_Analizado AND LEFT( tcLine, LEN(C_MENUTYPE_I) ) == C_MENUTYPE_I - toConversor.n_MenuType = INT( VAL( STREXTRACT( tcLine, C_MENUTYPE_I, C_MENUTYPE_F ) ) ) - loReg.ObjType = toConversor.n_MenuType - llBloque_MenuType_Analizado = .T. - - CASE NOT llBloque_MenuLocation_Analizado AND LEFT( tcLine, LEN(C_MENULOCATION_I) ) == C_MENULOCATION_I - toConversor.c_MenuLocation = STREXTRACT( tcLine, C_MENULOCATION_I, C_MENULOCATION_F ) DO CASE - CASE toConversor.c_MenuLocation == 'REPLACE' - loReg.Location = 0 - CASE toConversor.c_MenuLocation == 'APPEND' - loReg.Location = 1 - OTHERWISE - IF LEFT(toConversor.c_MenuLocation,7) == 'BEFORE' - loReg.Location = 2 - ELSE - loReg.Location = 3 - ENDIF - loReg.NAME = GETWORDNUM(toConversor.c_MenuLocation,2) + CASE EMPTY( tcLine ) + LOOP + + CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios + + CASE NOT llBloque_MenuType_Analizado AND LEFT( tcLine, LEN(C_MENUTYPE_I) ) == C_MENUTYPE_I + toConversor.n_MenuType = INT( VAL( STREXTRACT( tcLine, C_MENUTYPE_I, C_MENUTYPE_F ) ) ) + loReg.ObjType = toConversor.n_MenuType + llBloque_MenuType_Analizado = .T. + + CASE NOT llBloque_MenuLocation_Analizado AND LEFT( tcLine, LEN(C_MENULOCATION_I) ) == C_MENULOCATION_I + toConversor.c_MenuLocation = STREXTRACT( tcLine, C_MENULOCATION_I, C_MENULOCATION_F ) + DO CASE + CASE toConversor.c_MenuLocation == 'REPLACE' + loReg.Location = 0 + CASE toConversor.c_MenuLocation == 'APPEND' + loReg.Location = 1 + OTHERWISE + IF LEFT(toConversor.c_MenuLocation,7) == 'BEFORE' + loReg.Location = 2 + ELSE + loReg.Location = 3 + ENDIF + loReg.NAME = GETWORDNUM(toConversor.c_MenuLocation,2) + ENDCASE + llBloque_MenuLocation_Analizado = .T. + + CASE NOT llBloque_SetupCode_Analizado AND .analizarBloque_SetupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + llBloque_SetupCode_Analizado = .T. + + CASE NOT llBloque_MenuCode_Analizado AND .analizarBloque_MenuCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + llBloque_MenuCode_Analizado = .T. + + CASE NOT llBloque_CleanupCode_Analizado AND .analizarBloque_CleanupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + llBloque_CleanupCode_Analizado = .T. + + CASE NOT llBloque_Procedure_Analizado AND .analizarBloque_PROCEDURE( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + llBloque_Procedure_Analizado = .T. + + OTHERWISE && Otro valor + *EXIT ENDCASE - llBloque_MenuLocation_Analizado = .T. + ENDFOR + ENDWITH && THIS - CASE NOT llBloque_SetupCode_Analizado AND THIS.analizarBloque_SetupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - llBloque_SetupCode_Analizado = .T. - - CASE NOT llBloque_MenuCode_Analizado AND THIS.analizarBloque_MenuCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - llBloque_MenuCode_Analizado = .T. - - CASE NOT llBloque_CleanupCode_Analizado AND THIS.analizarBloque_CleanupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - llBloque_CleanupCode_Analizado = .T. - - CASE NOT llBloque_Procedure_Analizado AND THIS.analizarBloque_PROCEDURE( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - llBloque_Procedure_Analizado = .T. - - OTHERWISE && Otro valor - *EXIT - ENDCASE - ENDFOR CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -15319,21 +15551,23 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE IF LEFT(tcLine, LEN(C_SETUPCODE_I)) == C_SETUPCODE_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE C_SETUPCODE_F $ tcLine && Fin - I = I + 1 - EXIT + DO CASE + CASE C_SETUPCODE_F $ tcLine && Fin + I = I + 1 + EXIT - OTHERWISE && Líneas de procedure - lcText = lcText + CR_LF + taCodeLines(I) - ENDCASE - ENDFOR + OTHERWISE && Líneas de procedure + lcText = lcText + CR_LF + taCodeLines(I) + ENDCASE + ENDFOR - I = I - 1 - THIS.oReg.SETUP = SUBSTR( lcText, 3 ) && Quito el primer CR_LF + I = I - 1 + .oReg.SETUP = SUBSTR( lcText, 3 ) && Quito el primer CR_LF + ENDWITH && THIS ENDIF CATCH TO loEx @@ -15371,21 +15605,23 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE IF LEFT(tcLine, LEN(C_CLEANUPCODE_I)) == C_CLEANUPCODE_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + WITH THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE C_CLEANUPCODE_F $ tcLine && Fin - I = I + 1 - EXIT + DO CASE + CASE C_CLEANUPCODE_F $ tcLine && Fin + I = I + 1 + EXIT - OTHERWISE && Líneas de procedure - lcText = lcText + CR_LF + taCodeLines(I) - ENDCASE - ENDFOR + OTHERWISE && Líneas de procedure + lcText = lcText + CR_LF + taCodeLines(I) + ENDCASE + ENDFOR - I = I - 1 - THIS.oReg.Cleanup = SUBSTR( lcText, 3 ) && Quito el primer CR_LF + I = I - 1 + .oReg.Cleanup = SUBSTR( lcText, 3 ) && Quito el primer CR_LF + ENDWITH && THIS ENDIF CATCH TO loEx @@ -15422,42 +15658,73 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE LOCAL llBloqueEncontrado, lcExpr, lcProcName, lcProcCode, lcComment, loReg, loEx AS EXCEPTION ; , llBloque_SetupCode_Analizado STORE '' TO lcExpr, lcProcName, lcProcCode, lcComment - loReg = THIS.oReg - IF LEFT(tcLine, LEN(C_MENUCODE_I)) == C_MENUCODE_I - llBloqueEncontrado = .T. + WITH THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' + loReg = .oReg + + IF LEFT(tcLine, LEN(C_MENUCODE_I)) == C_MENUCODE_I + llBloqueEncontrado = .T. - FOR I = I + 0 TO tnCodeLines - STORE '' TO lcExpr, lcProcName, lcProcCode - THIS.set_Line( @tcLine, @taCodeLines, I ) + FOR I = I + 0 TO tnCodeLines + STORE '' TO lcExpr, lcProcName, lcProcCode + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) - LOOP && Saltear comentarios + CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios - CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F - EXIT + CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F + EXIT - CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I + CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I - CASE LEFT( tcLine, 12 ) == 'DEFINE MENU ' - loReg.OBJCODE = 22 - loReg.PROCTYPE = 1 - loReg.MARK = CHR(4) - loReg.SETUPTYPE = 1 - loReg.CLEANTYPE = 1 - loReg.ITEMNUM = STR(0,3) - lcMenuType = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) - *loReg.ObjType = IIF( UPPER(lcMenuType) = '_MSYSMENU', 1, 5 ) + CASE LEFT( tcLine, 12 ) == 'DEFINE MENU ' + loReg.OBJCODE = 22 + loReg.PROCTYPE = 1 + loReg.MARK = CHR(4) + loReg.SETUPTYPE = 1 + loReg.CLEANTYPE = 1 + loReg.ITEMNUM = STR(0,3) + lcMenuType = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) + *loReg.ObjType = IIF( UPPER(lcMenuType) = '_MSYSMENU', 1, 5 ) - lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION MENU _MSYSMENU ', CR_LF ) ) + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION MENU _MSYSMENU ', CR_LF ) ) - IF NOT EMPTY(lcExpr) - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) + IF NOT EMPTY(lcExpr) + .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) + + IF EMPTY(lcProcCode) + *-- Comando + loReg.PROCEDURE = lcExpr + ELSE + *-- Procedure + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + loReg.PROCEDURE = lcProcCode + ENDIF + ENDIF + + loBarPop = CREATEOBJECT('CL_MENU_BARPOP') + loBarPop.c_ParentName = '' + loBarPop.n_ParentCode = .oReg.OBJCODE + loBarPop.n_ParentType = .oReg.ObjType + loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, @tnCodeLines, toConversor ) + .ADD( loBarPop ) + EXIT + + CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' + loReg.OBJCODE = 22 + loReg.PROCTYPE = 1 + loReg.MARK = CHR(4) + loReg.SETUPTYPE = 1 + loReg.CLEANTYPE = 1 + loReg.ITEMNUM = STR(0,3) + loReg.SCHEME = 0 + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ALL ', CR_LF ) ) + .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) IF EMPTY(lcProcCode) *-- Comando @@ -15467,76 +15734,48 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) loReg.PROCEDURE = lcProcCode ENDIF - ENDIF - loBarPop = CREATEOBJECT('CL_MENU_BARPOP') - loBarPop.c_ParentName = '' - loBarPop.n_ParentCode = THIS.oReg.OBJCODE - loBarPop.n_ParentType = THIS.oReg.ObjType - loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, @tnCodeLines, toConversor ) - THIS.ADD( loBarPop ) - EXIT + loBarPop = CREATEOBJECT('CL_MENU_BARPOP') + loBarPop.c_ParentName = '' + loBarPop.n_ParentCode = .oReg.OBJCODE + loBarPop.n_ParentType = .oReg.ObjType + loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, @tnCodeLines, toConversor ) + .ADD( loBarPop ) - CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' - loReg.OBJCODE = 22 - loReg.PROCTYPE = 1 - loReg.MARK = CHR(4) - loReg.SETUPTYPE = 1 - loReg.CLEANTYPE = 1 - loReg.ITEMNUM = STR(0,3) - loReg.SCHEME = 0 - lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ALL ', CR_LF ) ) - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) + *-- Creo option + loOption = CREATEOBJECT("CL_MENU_OPTION") + loOption.oReg = toConversor.emptyRecord() + WITH loOption.oReg + .ObjType = 3 + .OBJCODE = 77 + .MARK = CHR(0) + .PROMPT = '\>', lcProcName ) - loReg.PROCEDURE = lcProcCode - ENDIF - - loBarPop = CREATEOBJECT('CL_MENU_BARPOP') - loBarPop.c_ParentName = '' - loBarPop.n_ParentCode = THIS.oReg.OBJCODE - loBarPop.n_ParentType = THIS.oReg.ObjType - loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, @tnCodeLines, toConversor ) - THIS.ADD( loBarPop ) - - *-- Creo option - loOption = CREATEOBJECT("CL_MENU_OPTION") - loOption.oReg = toConversor.emptyRecord() - WITH loOption.oReg - .ObjType = 3 - .OBJCODE = 77 - .MARK = CHR(0) - .PROMPT = '\><><> - <><><> - ENDTEXT + DO CASE + CASE loReg.Location = 0 + lcLocation = 'REPLACE' + CASE loReg.Location = 1 + lcLocation = 'APPEND' + CASE loReg.Location = 2 + lcLocation = 'BEFORE ' + loReg.NAME + CASE loReg.Location = 3 + lcLocation = 'AFTER ' + loReg.NAME + ENDCASE - IF NOT EMPTY(loReg.SETUP) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <> - <> - <> + <><><> + <><><> ENDTEXT - ENDIF - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <> - ENDTEXT - - DO CASE - CASE loHeader.ObjType = 1 && Menu Bar (Sistema) - *lcText = lcText + CR_LF + 'DEFINE MENU _MSYSMENU BAR' - lcText = lcText + CR_LF + 'DEFINE MENU ' + loBarPop.NAME + ' BAR' - - CASE loHeader.ObjType = 5 && Menu Bar (On top) - *lcText = lcText + CR_LF + 'DEFINE MENU _ONTOP BAR' - lcText = lcText + CR_LF + 'DEFINE MENU ' + loBarPop.NAME + ' BAR' - - CASE loHeader.ObjType = 4 && Shortcut - lcText = lcText + CR_LF + 'DEFINE POPUP ' + THIS.ITEM(1).ITEM(1).ITEM(1).oReg.NAME + ' SHORTCUT RELATIVE FROM MROW(),MCOL()' - - ENDCASE - - - *-- Bars and Popups - IF THIS.COUNT > 0 - FOR EACH loBarPop IN THIS FOXOBJECT - lcText = lcText + loBarPop.toText(loReg, lnNivel+0, @lcEndProcedures, loHeader) - ENDFOR - ENDIF - - loBarPop = THIS.ITEM(1).oReg - - DO CASE - CASE loHeader.ObjType = 1 OR loHeader.ObjType = 5 - *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) - IF NOT EMPTY(loHeader.PROCEDURE) - lcExpr = loHeader.PROCEDURE - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) - - IF EMPTY(lcProcCode) - *-- Comando - lcText = lcText + 'ON SELECTION MENU ' + loBarPop.NAME + ' ' + lcExpr + CR_LF - ELSE - *-- Procedure - lcProcName = EVL( lcProcName, CHRTRAN('SELECTION MENU ' + loBarPop.NAME, ' ', '_') + '_FB2P' ) - lcText = lcText + 'ON SELECTION MENU ' + loBarPop.NAME + ' DO ' + lcProcName + CR_LF - lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) - lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF - ENDIF + IF NOT EMPTY(loReg.SETUP) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <> + <> + <> + ENDTEXT ENDIF - CASE loHeader.ObjType = 4 - IF NOT EMPTY(loHeader.PROCEDURE) - lcExpr = loHeader.PROCEDURE - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) - - IF EMPTY(lcProcCode) - *-- Comando - lcText = lcText + 'ON SELECTION POPUP ALL ' + lcExpr + CR_LF - ELSE - *-- Procedure - lcText = lcText + 'ON SELECTION POPUP ALL ' + loBarPop.NAME + ' DO ' + lcProcName + CR_LF - lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) - lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF - ENDIF - ENDIF - - lcText = lcText + 'ACTIVATE POPUP ' + THIS.ITEM(1).ITEM(1).ITEM(1).oReg.NAME + CR_LF - ENDCASE - - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT - - *-- Procedimientos finales - IF NOT EMPTY(lcEndProcedures) - lcText = lcText + CR_LF + CR_LF ; - + C_PROC_CODE_I + CR_LF ; - + lcEndProcedures ; - + C_PROC_CODE_F + CR_LF - ENDIF - - IF NOT EMPTY(loReg.Cleanup) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> - <> - <> - <> + <> ENDTEXT - ENDIF + + DO CASE + CASE loHeader.ObjType = 1 && Menu Bar (Sistema) + *lcText = lcText + CR_LF + 'DEFINE MENU _MSYSMENU BAR' + lcText = lcText + CR_LF + 'DEFINE MENU ' + loBarPop.NAME + ' BAR' + + CASE loHeader.ObjType = 5 && Menu Bar (On top) + *lcText = lcText + CR_LF + 'DEFINE MENU _ONTOP BAR' + lcText = lcText + CR_LF + 'DEFINE MENU ' + loBarPop.NAME + ' BAR' + + CASE loHeader.ObjType = 4 && Shortcut + lcText = lcText + CR_LF + 'DEFINE POPUP ' + .ITEM(1).ITEM(1).ITEM(1).oReg.NAME + ' SHORTCUT RELATIVE FROM MROW(),MCOL()' + + ENDCASE + + + *-- Bars and Popups + IF .COUNT > 0 + FOR EACH loBarPop IN THIS FOXOBJECT + lcText = lcText + loBarPop.toText(loReg, lnNivel+0, @lcEndProcedures, loHeader) + ENDFOR + ENDIF + + loBarPop = .ITEM(1).oReg + + DO CASE + CASE loHeader.ObjType = 1 OR loHeader.ObjType = 5 + *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) + IF NOT EMPTY(loHeader.PROCEDURE) + lcExpr = loHeader.PROCEDURE + .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) + + IF EMPTY(lcProcCode) + *-- Comando + lcText = lcText + 'ON SELECTION MENU ' + loBarPop.NAME + ' ' + lcExpr + CR_LF + ELSE + *-- Procedure + lcProcName = EVL( lcProcName, CHRTRAN('SELECTION MENU ' + loBarPop.NAME, ' ', '_') + '_FB2P' ) + lcText = lcText + 'ON SELECTION MENU ' + loBarPop.NAME + ' DO ' + lcProcName + CR_LF + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF + ENDIF + ENDIF + + CASE loHeader.ObjType = 4 + IF NOT EMPTY(loHeader.PROCEDURE) + lcExpr = loHeader.PROCEDURE + .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) + + IF EMPTY(lcProcCode) + *-- Comando + lcText = lcText + 'ON SELECTION POPUP ALL ' + lcExpr + CR_LF + ELSE + *-- Procedure + lcText = lcText + 'ON SELECTION POPUP ALL ' + loBarPop.NAME + ' DO ' + lcProcName + CR_LF + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF + ENDIF + ENDIF + + lcText = lcText + 'ACTIVATE POPUP ' + .ITEM(1).ITEM(1).ITEM(1).oReg.NAME + CR_LF + ENDCASE + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + ENDTEXT + + *-- Procedimientos finales + IF NOT EMPTY(lcEndProcedures) + lcText = lcText + CR_LF + CR_LF ; + + C_PROC_CODE_I + CR_LF ; + + lcEndProcedures ; + + C_PROC_CODE_F + CR_LF + ENDIF + + IF NOT EMPTY(loReg.Cleanup) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <> + <> + <> + ENDTEXT + ENDIF + + ENDWITH && THIS CATCH TO loEx @@ -15777,16 +16022,18 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE SELECT TABLABIN - IF THIS.l_Debug - toConversor.writeLog( '' ) - toConversor.writeLog( REPLICATE('-',80) ) - ENDIF + WITH THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' + IF .l_Debug + toConversor.writeLog( '' ) + toConversor.writeLog( REPLICATE('-',80) ) + ENDIF - THIS.UpdateMenu_Recursivo( THIS, 0, @toConversor ) + .UpdateMenu_Recursivo( THIS, 0, @toConversor ) - IF THIS.l_Debug - toConversor.writeLog( REPLICATE('-',80) ) - ENDIF + IF .l_Debug + toConversor.writeLog( REPLICATE('-',80) ) + ENDIF + ENDWITH && THIS ENDPROC @@ -15806,40 +16053,42 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE #ENDIF TRY - IF VARTYPE( toObj.oReg ) = 'O' - loReg = toObj.oReg - INSERT INTO TABLABIN FROM NAME loReg + WITH THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' + IF VARTYPE( toObj.oReg ) = 'O' + loReg = toObj.oReg + INSERT INTO TABLABIN FROM NAME loReg + + IF .l_Debug + toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; + + 'ObjType=' + TRANSFORM(loReg.ObjType) ; + + ', ObjCode=' + TRANSFORM(loReg.OBJCODE) ; + + ', Name=' + TRANSFORM(loReg.NAME) ; + + ', LevelName=' + TRANSFORM(loReg.LevelName) ; + + ', ItemNum=' + TRANSFORM(loReg.ITEMNUM) ; + + ', Location=' + TRANSFORM(loReg.Location) ; + + ', Prompt=' + TRANSFORM(loReg.PROMPT) ; + + ', Message=' + TRANSFORM(loReg.MESSAGE) ; + + ', KeyName=' + TRANSFORM(loReg.KEYNAME) ; + + ', KeyLabel=' + TRANSFORM(loReg.KeyLabel) ; + + ', Comment=' + TRANSFORM(loReg.COMMENT) ; + + ', SkipFor=' + TRANSFORM(loReg.SKIPFOR) ) + ENDIF + + ELSE + IF .l_Debug + *toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; + + 'Objeto [' + toObj.CLASS + '] no contiene el objeto oReg (nivel ' + TRANSFORM(tnNivel) + ')' ) + toConversor.writeLog( REPLICATE(C_TAB,tnNivel) + TEXTMERGE(C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC) ) + ENDIF - IF THIS.l_Debug - toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; - + 'ObjType=' + TRANSFORM(loReg.ObjType) ; - + ', ObjCode=' + TRANSFORM(loReg.OBJCODE) ; - + ', Name=' + TRANSFORM(loReg.NAME) ; - + ', LevelName=' + TRANSFORM(loReg.LevelName) ; - + ', ItemNum=' + TRANSFORM(loReg.ITEMNUM) ; - + ', Location=' + TRANSFORM(loReg.Location) ; - + ', Prompt=' + TRANSFORM(loReg.PROMPT) ; - + ', Message=' + TRANSFORM(loReg.MESSAGE) ; - + ', KeyName=' + TRANSFORM(loReg.KEYNAME) ; - + ', KeyLabel=' + TRANSFORM(loReg.KeyLabel) ; - + ', Comment=' + TRANSFORM(loReg.COMMENT) ; - + ', SkipFor=' + TRANSFORM(loReg.SKIPFOR) ) ENDIF - ELSE - IF THIS.l_Debug - *toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; - + 'Objeto [' + toObj.CLASS + '] no contiene el objeto oReg (nivel ' + TRANSFORM(tnNivel) + ')' ) - toConversor.writeLog( REPLICATE(C_TAB,tnNivel) + TEXTMERGE(C_OBJECT_NAME_WITHOUT_OBJECT_OREG_LOC) ) + IF toObj.COUNT > 0 THEN + FOR EACH loReg IN toObj FOXOBJECT + .UpdateMenu_Recursivo( loReg, tnNivel + 1, @toConversor ) + ENDFOR ENDIF - - ENDIF - - IF toObj.COUNT > 0 THEN - FOR EACH loReg IN toObj FOXOBJECT - THIS.UpdateMenu_Recursivo( loReg, tnNivel + 1, @toConversor ) - ENDFOR - ENDIF + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -15895,88 +16144,89 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE , loEx AS EXCEPTION STORE '' TO lcSubName, lcComment, lcExpr, lcProcName, lcProcCode - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg - loReg.ObjType = 2 - loReg.PROCTYPE = 1 - loReg.MARK = CHR(0) - loReg.ITEMNUM = STR(0,3) - llBloqueEncontrado = .T. + WITH THIS AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + .oReg = toConversor.emptyRecord() + loReg = .oReg + loReg.ObjType = 2 + loReg.PROCTYPE = 1 + loReg.MARK = CHR(0) + loReg.ITEMNUM = STR(0,3) + llBloqueEncontrado = .T. - FOR I = I + 0 TO tnCodeLines - STORE '' TO lcExpr, lcProcName, lcProcCode - THIS.set_Line( @tcLine, @taCodeLines, I ) + FOR I = I + 0 TO tnCodeLines + STORE '' TO lcExpr, lcProcName, lcProcCode + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) - LOOP && Saltear comentarios + CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios - CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F - EXIT + CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F + EXIT - CASE LEFT( tcLine, LEN('ON SELECTION POPUP ' + loReg.NAME) ) == 'ON SELECTION POPUP ' + loReg.NAME - EXIT + CASE LEFT( tcLine, LEN('ON SELECTION POPUP ' + loReg.NAME) ) == 'ON SELECTION POPUP ' + loReg.NAME + EXIT - CASE LEFT( tcLine, 12 ) == 'DEFINE MENU ' - loReg.OBJCODE = 1 - loReg.NAME = STREXTRACT( tcLine, 'DEFINE MENU ', ' BAR' ) - *loReg.NAME = '_MSYSMENU' - loReg.LevelName = loReg.NAME - loReg.SCHEME = IIF( loReg.OBJCODE = 1, 3, 4 ) - - lcExpr = STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ALL ', CR_LF ) - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1 ) - loReg.PROCEDURE = EVL(lcProcCode, lcExpr) - - CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' - IF THIS.n_ParentCode = 22 + CASE LEFT( tcLine, 12 ) == 'DEFINE MENU ' loReg.OBJCODE = 1 - loReg.NAME = '_MSYSMENU' + loReg.NAME = STREXTRACT( tcLine, 'DEFINE MENU ', ' BAR' ) + *loReg.NAME = '_MSYSMENU' loReg.LevelName = loReg.NAME - loReg.SCHEME = 3 + loReg.SCHEME = IIF( loReg.OBJCODE = 1, 3, 4 ) - IF THIS.n_ParentType = 4 + lcExpr = STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ALL ', CR_LF ) + .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1 ) + loReg.PROCEDURE = EVL(lcProcCode, lcExpr) + + CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' + IF .n_ParentCode = 22 + loReg.OBJCODE = 1 + loReg.NAME = '_MSYSMENU' + loReg.LevelName = loReg.NAME + loReg.SCHEME = 3 + + IF .n_ParentType = 4 + EXIT + ENDIF + ELSE + loReg.OBJCODE = 0 + loReg.SCHEME = 4 + loReg.NAME = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) + IF RIGHT(loReg.NAME,5) == '_FB2P' && Originalmente era vacío y se la había puesto un nombre temporal. + loReg.NAME = '' + ENDIF + loReg.LevelName = loReg.NAME + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ' + loReg.NAME + ' ', CR_LF ) ) + .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1 ) + loReg.PROCEDURE = EVL(lcProcCode, lcExpr) + ENDIF + + CASE LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' + loOption = CREATEOBJECT("CL_MENU_OPTION") + lnLast_I = I + loOption.c_ParentName = loReg.LevelName + loOption.n_ParentCode = loReg.OBJCODE + loOption.n_ParentType = loReg.ObjType + IF NOT loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + I = lnLast_I + llBloqueEncontrado = .F. EXIT ENDIF - ELSE - loReg.OBJCODE = 0 - loReg.SCHEME = 4 - loReg.NAME = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) - IF RIGHT(loReg.NAME,5) == '_FB2P' && Originalmente era vacío y se la había puesto un nombre temporal. - loReg.NAME = '' - ENDIF - loReg.LevelName = loReg.NAME - lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ' + loReg.NAME + ' ', CR_LF ) ) - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1 ) - loReg.PROCEDURE = EVL(lcProcCode, lcExpr) - ENDIF + .ADD( loOption ) + loOption.oReg.ITEMNUM = STR(.COUNT,3) + loReg.NUMITEMS = .COUNT + loReg.SCHEME = IIF( loReg.OBJCODE = 1, 3, 4 ) + loOption = NULL - CASE LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' - loOption = CREATEOBJECT("CL_MENU_OPTION") - lnLast_I = I - loOption.c_ParentName = loReg.LevelName - loOption.n_ParentCode = loReg.OBJCODE - loOption.n_ParentType = loReg.ObjType - IF NOT loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - I = lnLast_I - llBloqueEncontrado = .F. + OTHERWISE && Otro valor + I = I - 1 EXIT - ENDIF - THIS.ADD( loOption ) - loOption.oReg.ITEMNUM = STR(THIS.COUNT,3) - loReg.NUMITEMS = THIS.COUNT - loReg.SCHEME = IIF( loReg.OBJCODE = 1, 3, 4 ) - loOption = NULL - - OTHERWISE && Otro valor - I = I - 1 - EXIT - ENDCASE - ENDFOR - *ENDIF + ENDCASE + ENDFOR + ENDWITH && THIS CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -16119,68 +16369,71 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE , llPadOBar_Analizado STORE '' TO lcComment - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg - loReg.MARK = CHR(0) - loReg.ITEMNUM = STR(0,3) + WITH THIS AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + .oReg = toConversor.emptyRecord() + loReg = .oReg + loReg.MARK = CHR(0) + loReg.ITEMNUM = STR(0,3) - llBloqueEncontrado = .T. + llBloqueEncontrado = .T. - FOR I = I + 0 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + FOR I = I + 0 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) - LOOP && Saltear comentarios + CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios - CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F - EXIT - - CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I - loReg.ObjType = 2 - loReg.OBJCODE = 1 - - CASE THIS.analizarBloque_DefinePAD( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - IF EMPTY(loReg.PROMPT) - *-- Esta opción no corresponde a este nivel. Debe subir. - llBloqueEncontrado = .F. + CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F EXIT - ENDIF - IF loReg.OBJCODE <> 77 - EXIT - ENDIF - CASE THIS.analizarBloque_DefineBAR( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - IF EMPTY(loReg.PROMPT) - *-- Esta opción no corresponde a este nivel. Debe subir. - llBloqueEncontrado = .F. - EXIT - ENDIF - IF loReg.OBJCODE <> 77 - EXIT - ENDIF + CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I + loReg.ObjType = 2 + loReg.OBJCODE = 1 - CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' - loBarPop = CREATEOBJECT("CL_MENU_BARPOP") - lnLast_I = I - loBarPop.c_ParentName = loReg.LevelName - loBarPop.n_ParentCode = loReg.OBJCODE - loBarPop.n_ParentType = loReg.ObjType - THIS.ADD( loBarPop ) - IF NOT loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + CASE .analizarBloque_DefinePAD( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + IF EMPTY(loReg.PROMPT) + *-- Esta opción no corresponde a este nivel. Debe subir. + llBloqueEncontrado = .F. + EXIT + ENDIF + IF loReg.OBJCODE <> 77 + EXIT + ENDIF + + CASE .analizarBloque_DefineBAR( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + IF EMPTY(loReg.PROMPT) + *-- Esta opción no corresponde a este nivel. Debe subir. + llBloqueEncontrado = .F. + EXIT + ENDIF + IF loReg.OBJCODE <> 77 + EXIT + ENDIF + + CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' + loBarPop = CREATEOBJECT("CL_MENU_BARPOP") + lnLast_I = I + loBarPop.c_ParentName = loReg.LevelName + loBarPop.n_ParentCode = loReg.OBJCODE + loBarPop.n_ParentType = loReg.ObjType + .ADD( loBarPop ) + IF NOT loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + I = I - 1 + ENDIF + loBarPop = NULL + EXIT + + OTHERWISE && Otro valor I = I - 1 - ENDIF - loBarPop = NULL - EXIT + EXIT + ENDCASE + ENDFOR + ENDWITH && THIS - OTHERWISE && Otro valor - I = I - 1 - EXIT - ENDCASE - ENDFOR CATCH TO loEx WHEN loEx.MESSAGE = 'Nivel_Anterior' *-- OK. Volver a evaluar en el nivel anterior @@ -16233,131 +16486,135 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE *-------------------------------- IF LEFT( tcLine, 11 ) == 'DEFINE PAD ' llBloqueEncontrado = .T. - loReg = THIS.oReg - loReg.ObjType = 3 - lcPadName = ALLTRIM( STREXTRACT( tcLine, 'PAD ' , ' OF' ) ) - loReg.NAME = lcPadName - loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - IF UPPER(loReg.LevelName) # UPPER(THIS.c_ParentName) - EXIT - ENDIF + WITH THIS AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + loReg = .oReg + loReg.ObjType = 3 + lcPadName = ALLTRIM( STREXTRACT( tcLine, 'PAD ' , ' OF' ) ) + loReg.NAME = lcPadName + loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - loReg.PROMPT = CHRTRAN( ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ' COLOR ' ) ), '"', '' ) + IF UPPER(loReg.LevelName) # UPPER(.c_ParentName) + EXIT + ENDIF - *-- ANALISIS DEL "DEFINE PAD" - IF ';' $ tcLine - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + loReg.PROMPT = CHRTRAN( ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ' COLOR ' ) ), '"', '' ) - IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe - lnPos = AT( '&'+'&', tcLine ) - IF lnPos > 0 - *-- Busco si tiene comentario - loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) - tcLine = LEFT( tcLine, lnPos - 1 ) - lnPos = 0 + *-- ANALISIS DEL "DEFINE PAD" + IF ';' $ tcLine + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) + + IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe + lnPos = AT( '&'+'&', tcLine ) + IF lnPos > 0 + *-- Busco si tiene comentario + loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) + tcLine = LEFT( tcLine, lnPos - 1 ) + lnPos = 0 + ENDIF ENDIF - ENDIF + + DO CASE + CASE LEFT( tcLine, 10 ) == 'NEGOTIATE ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, 'NEGOTIATE ', ';', 1, 2 ) ) + lnNegContainer = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 1, ',' )), 6, '_' ) ; + , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) + lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; + , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) + loReg.Location = lnNegContainer + lnNegObject * 2^4 + + CASE LEFT( tcLine, 4 ) == 'KEY ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) + lnPos = AT( ',', lcExpr ) + loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) + loReg.KeyLabel = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) + + CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' + loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) + + CASE LEFT( tcLine, 8 ) == 'MESSAGE ' + loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + + CASE LEFT( tcLine, 8 ) == 'PICTURE ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"' ) ) + + CASE LEFT( tcLine, 8 ) == 'PICTRES ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, 'PICTRES ', ';', 1, 2 ) ) + loReg.SYSRES = 1 + + OTHERWISE + * Nada + ENDCASE + + IF NOT ';' $ tcLine && Fin + EXIT + ENDIF + ENDFOR + ENDIF && ';' $ tcLine + + + * Estructuras ejemplo a analizar: + *-------------------------------- + * ON PAD _3YM1DR90Z OF _MSYSMENU ACTIVATE POPUP OpciónA_CS + * ON PAD _3YM1DR90Z OF _MSYSMENU wait window "algo" + * ON PAD _3YM1DR90Z OF _MSYSMENU DO Menu1_Opción_A_2_Sub_SNIPPET + *-------------------------------- + + *-- ANALISIS DEL "ON PAD" u "ON SELECTION PAD" + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) DO CASE - CASE LEFT( tcLine, 10 ) == 'NEGOTIATE ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, 'NEGOTIATE ', ';', 1, 2 ) ) - lnNegContainer = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 1, ',' )), 6, '_' ) ; - , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) - lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; - , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) - loReg.Location = lnNegContainer + lnNegObject * 2^4 + CASE EMPTY( tcLine ) + LOOP - CASE LEFT( tcLine, 4 ) == 'KEY ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) - lnPos = AT( ',', lcExpr ) - loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) - loReg.KeyLabel = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) + CASE LEFT( tcLine, 7 ) == 'ON PAD ' + loReg.OBJCODE = 77 && Submenu - CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' - loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) + I = I + 1 + EXIT - CASE LEFT( tcLine, 8 ) == 'MESSAGE ' - loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + CASE LEFT( tcLine, 17 ) == 'ON SELECTION PAD ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LevelName + ' ', '', 1, 2 ) ) + .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - CASE LEFT( tcLine, 8 ) == 'PICTURE ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"' ) ) + DO CASE + CASE EMPTY(lcProcCode) + loReg.OBJCODE = 67 + loReg.COMMAND = lcExpr - CASE LEFT( tcLine, 8 ) == 'PICTRES ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, 'PICTRES ', ';', 1, 2 ) ) - loReg.SYSRES = 1 + OTHERWISE + loReg.PROCEDURE = STRTRAN( lcProcCode, '<>', lcProcName ) + + IF EMPTY( loReg.PROCEDURE ) + loReg.OBJCODE = 67 + loReg.COMMAND = lcExpr + ELSE + loReg.OBJCODE = 80 + loReg.PROCTYPE = 1 + ENDIF + + ENDCASE + + I = I + 1 + EXIT OTHERWISE * Nada ENDCASE IF NOT ';' $ tcLine && Fin + I = I + 1 EXIT ENDIF ENDFOR - ENDIF && ';' $ tcLine - - * Estructuras ejemplo a analizar: - *-------------------------------- - * ON PAD _3YM1DR90Z OF _MSYSMENU ACTIVATE POPUP OpciónA_CS - * ON PAD _3YM1DR90Z OF _MSYSMENU wait window "algo" - * ON PAD _3YM1DR90Z OF _MSYSMENU DO Menu1_Opción_A_2_Sub_SNIPPET - *-------------------------------- - - *-- ANALISIS DEL "ON PAD" u "ON SELECTION PAD" - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) - - DO CASE - CASE EMPTY( tcLine ) - LOOP - - CASE LEFT( tcLine, 7 ) == 'ON PAD ' - loReg.OBJCODE = 77 && Submenu - - I = I + 1 - EXIT - - CASE LEFT( tcLine, 17 ) == 'ON SELECTION PAD ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LevelName + ' ', '', 1, 2 ) ) - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - - DO CASE - CASE EMPTY(lcProcCode) - loReg.OBJCODE = 67 - loReg.COMMAND = lcExpr - - OTHERWISE - loReg.PROCEDURE = STRTRAN( lcProcCode, '<>', lcProcName ) - - IF EMPTY( loReg.PROCEDURE ) - loReg.OBJCODE = 67 - loReg.COMMAND = lcExpr - ELSE - loReg.OBJCODE = 80 - loReg.PROCTYPE = 1 - ENDIF - - ENDCASE - - I = I + 1 - EXIT - - OTHERWISE - * Nada - ENDCASE - - IF NOT ';' $ tcLine && Fin - I = I + 1 - EXIT - ENDIF - ENDFOR - - I = I - 1 + I = I - 1 + ENDWITH && THIS ENDIF + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON @@ -16411,139 +16668,142 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE *-------------------------------- IF LEFT( tcLine, 11 ) == 'DEFINE BAR ' llBloqueEncontrado = .T. - loReg = THIS.oReg - loReg.ObjType = 3 - lcBarName = ALLTRIM( STREXTRACT( tcLine, 'BAR ' , ' OF' ) ) - IF NOT ISDIGIT(lcBarName) - *-- Es un BAR del sistema - loReg.NAME = lcBarName - ENDIF + WITH THIS AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + loReg = .oReg + loReg.ObjType = 3 + lcBarName = ALLTRIM( STREXTRACT( tcLine, 'BAR ' , ' OF' ) ) - loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + IF NOT ISDIGIT(lcBarName) + *-- Es un BAR del sistema + loReg.NAME = lcBarName + ENDIF - IF UPPER(loReg.LevelName) # UPPER(THIS.c_ParentName) - EXIT - ENDIF + loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - loReg.PROMPT = CHRTRAN( ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ';', 1, 2 ) ), '"', '' ) + IF UPPER(loReg.LevelName) # UPPER(.c_ParentName) + EXIT + ENDIF - *-- ANALISIS DEL "DEFINE BAR" - IF ';' $ tcLine - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + loReg.PROMPT = CHRTRAN( ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ';', 1, 2 ) ), '"', '' ) - IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe - lnPos = AT( '&'+'&', tcLine ) - IF lnPos > 0 - *-- Busco si tiene comentario - loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) - tcLine = LEFT( tcLine, lnPos - 1 ) - lnPos = 0 + *-- ANALISIS DEL "DEFINE BAR" + IF ';' $ tcLine + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) + + IF EMPTY(loReg.COMMENT) && No volver a buscar el comentario si ya existe + lnPos = AT( '&'+'&', tcLine ) + IF lnPos > 0 + *-- Busco si tiene comentario + loReg.COMMENT = SUBSTR( tcLine, lnPos + 3 ) + tcLine = LEFT( tcLine, lnPos - 1 ) + lnPos = 0 + ENDIF ENDIF - ENDIF + + DO CASE + CASE LEFT( tcLine, 10 ) == 'NEGOTIATE ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, 'NEGOTIATE ', ';', 1, 2 ) ) + lnNegContainer = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 1, ',' )), 6, '_' ) ; + , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) + lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; + , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) + loReg.Location = lnNegContainer + lnNegObject * 2^4 + + CASE LEFT( tcLine, 4 ) == 'KEY ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) + lnPos = AT( ',', lcExpr ) + loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) + loReg.KeyLabel = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) + + CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' + loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) + + CASE LEFT( tcLine, 8 ) == 'MESSAGE ' + loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + + CASE LEFT( tcLine, 8 ) == 'PICTURE ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"' ) ) + + CASE LEFT( tcLine, 8 ) == 'PICTRES ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, 'PICTRES ', ';', 1, 2 ) ) + loReg.SYSRES = 1 + + OTHERWISE + * Nada + ENDCASE + + IF NOT ';' $ tcLine && Fin + EXIT + ENDIF + ENDFOR + ENDIF && ';' $ tcLine + + IF LEFT(lcBarName,1) == '_' + *-- Es un BAR del Sistema, así que no tiene ON BAR ni nada más. + loReg.OBJCODE = 78 && Bar# + I = I + 1 + EXIT + ENDIF + + + * Estructuras ejemplo a analizar: + *-------------------------------- + * ON BAR _3YM1DR90Z OF _MSYSMENU ACTIVATE POPUP OpciónA_CS + * ON BAR _3YM1DR90Z OF _MSYSMENU wait window "algo" + * ON BAR _3YM1DR90Z OF _MSYSMENU DO Menu1_Opción_A_2_Sub_SNIPPET + *-------------------------------- + + *-- ANALISIS DEL "ON BAR" u "ON SELECTION BAR" + FOR I = I + 1 TO tnCodeLines + .set_Line( @tcLine, @taCodeLines, I ) DO CASE - CASE LEFT( tcLine, 10 ) == 'NEGOTIATE ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, 'NEGOTIATE ', ';', 1, 2 ) ) - lnNegContainer = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 1, ',' )), 6, '_' ) ; - , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) - lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; - , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) - loReg.Location = lnNegContainer + lnNegObject * 2^4 + CASE EMPTY( tcLine ) + LOOP - CASE LEFT( tcLine, 4 ) == 'KEY ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) - lnPos = AT( ',', lcExpr ) - loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) - loReg.KeyLabel = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) + CASE LEFT( tcLine, 7 ) == 'ON BAR ' + loReg.OBJCODE = 77 && Submenu - CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' - loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) + I = I + 1 + EXIT - CASE LEFT( tcLine, 8 ) == 'MESSAGE ' - loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + CASE LEFT( tcLine, 17 ) == 'ON SELECTION BAR ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LevelName + ' ', '', 1, 2 ) ) + .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - CASE LEFT( tcLine, 8 ) == 'PICTURE ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"' ) ) + DO CASE + CASE NOT EMPTY(lcProcCode) + loReg.PROCEDURE = STRTRAN( lcProcCode, '<>', lcProcName ) - CASE LEFT( tcLine, 8 ) == 'PICTRES ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, 'PICTRES ', ';', 1, 2 ) ) - loReg.SYSRES = 1 + IF EMPTY( loReg.PROCEDURE ) + loReg.OBJCODE = 67 + loReg.COMMAND = lcExpr + ELSE + loReg.OBJCODE = 80 + loReg.PROCTYPE = 1 + ENDIF + + OTHERWISE + loReg.OBJCODE = 67 && Command + loReg.COMMAND = lcExpr + + ENDCASE + + I = I + 1 + EXIT OTHERWISE * Nada ENDCASE IF NOT ';' $ tcLine && Fin + I = I + 1 EXIT ENDIF ENDFOR - ENDIF && ';' $ tcLine - - IF LEFT(lcBarName,1) == '_' - *-- Es un BAR del Sistema, así que no tiene ON BAR ni nada más. - loReg.OBJCODE = 78 && Bar# - I = I + 1 - EXIT - ENDIF - - - * Estructuras ejemplo a analizar: - *-------------------------------- - * ON BAR _3YM1DR90Z OF _MSYSMENU ACTIVATE POPUP OpciónA_CS - * ON BAR _3YM1DR90Z OF _MSYSMENU wait window "algo" - * ON BAR _3YM1DR90Z OF _MSYSMENU DO Menu1_Opción_A_2_Sub_SNIPPET - *-------------------------------- - - *-- ANALISIS DEL "ON BAR" u "ON SELECTION BAR" - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) - - DO CASE - CASE EMPTY( tcLine ) - LOOP - - CASE LEFT( tcLine, 7 ) == 'ON BAR ' - loReg.OBJCODE = 77 && Submenu - - I = I + 1 - EXIT - - CASE LEFT( tcLine, 17 ) == 'ON SELECTION BAR ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LevelName + ' ', '', 1, 2 ) ) - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - - DO CASE - CASE NOT EMPTY(lcProcCode) - loReg.PROCEDURE = STRTRAN( lcProcCode, '<>', lcProcName ) - - IF EMPTY( loReg.PROCEDURE ) - loReg.OBJCODE = 67 - loReg.COMMAND = lcExpr - ELSE - loReg.OBJCODE = 80 - loReg.PROCTYPE = 1 - ENDIF - - OTHERWISE - loReg.OBJCODE = 67 && Command - loReg.COMMAND = lcExpr - - ENDCASE - - I = I + 1 - EXIT - - OTHERWISE - * Nada - ENDCASE - - IF NOT ';' $ tcLine && Fin - I = I + 1 - EXIT - ENDIF - ENDFOR + ENDWITH && THIS I = I - 1 ENDIF @@ -16578,52 +16838,55 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lcText = '' lcProcName = '' - loReg = THIS.oReg - lcTab = REPLICATE(CHR(9),tnNivel) - loBarPop = toParentReg - *-- Options (ObjType:3) - DO CASE - CASE toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 0 - *-- Define Bar - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT + WITH THIS AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + loReg = .oReg + lcTab = REPLICATE(CHR(9),tnNivel) + loBarPop = toParentReg - CASE toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 1 AND (toHeader.ObjType = 1 OR toHeader.ObjType = 5) - *-- Define Pad - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT + *-- Options (ObjType:3) + DO CASE + CASE toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 0 + *-- Define Bar + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<.get_DefineBarText(loReg, loBarPop, tnNivel, toHeader)>> + ENDTEXT - ENDCASE + CASE toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 1 AND (toHeader.ObjType = 1 OR toHeader.ObjType = 5) + *-- Define Pad + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<.get_DefinePadText(loReg, loBarPop, tnNivel, toHeader)>> + ENDTEXT - IF loReg.OBJCODE = 80 && Procedure de BAR o PAD - *-- Reemplazo el nombre definitivo - lcExpr = loReg.PROCEDURE - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) + ENDCASE - IF EMPTY(lcProcName) - lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) + '_FB2P' + IF loReg.OBJCODE = 80 && Procedure de BAR o PAD + *-- Reemplazo el nombre definitivo + lcExpr = loReg.PROCEDURE + .AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) + + IF EMPTY(lcProcName) + lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) + '_FB2P' + ENDIF + + lcText = STRTRAN( lcText, '<>', lcProcName ) + tcEndProcedures = tcEndProcedures + STRTRAN( lcProcCode, '<>', lcProcName ) + CR_LF ENDIF - lcText = STRTRAN( lcText, '<>', lcProcName ) - tcEndProcedures = tcEndProcedures + STRTRAN( lcProcCode, '<>', lcProcName ) + CR_LF - ENDIF - - *-- Menu Bar or Popup (ObjType:2, ObjCode:0 ó 1) - IF THIS.COUNT > 0 - FOR EACH loBarPop IN THIS FOXOBJECT - IF toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 1 AND toHeader.ObjType = 4 - *-- Shortcut - lcText = lcText + loBarPop.toText(loReg, tnNivel + 0, @tcEndProcedures, toHeader) - ELSE - *-- Menu - lcText = lcText + loBarPop.toText(loReg, tnNivel + 1, @tcEndProcedures, toHeader) - ENDIF - ENDFOR - ENDIF + *-- Menu Bar or Popup (ObjType:2, ObjCode:0 ó 1) + IF .COUNT > 0 + FOR EACH loBarPop IN THIS FOXOBJECT + IF toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 1 AND toHeader.ObjType = 4 + *-- Shortcut + lcText = lcText + loBarPop.toText(loReg, tnNivel + 0, @tcEndProcedures, toHeader) + ELSE + *-- Menu + lcText = lcText + loBarPop.toText(loReg, tnNivel + 1, @tcEndProcedures, toHeader) + ENDIF + ENDFOR + ENDIF + ENDWITH && THIS CATCH TO loEx From 0dc3467d86db2f4ba9c320bd6c4e2ea21ac91d3a Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 13 Feb 2014 20:46:20 +0100 Subject: [PATCH 3/3] =?UTF-8?q?Changeset:=20167=20Recompilaci=C3=B3n=20EXE?= =?UTF-8?q?=20y=20PJ2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 4 ++-- foxbin2prg.pjt | Bin 356224 -> 356224 bytes foxbin2prg.pjx | Bin 1583 -> 1583 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index f04a28a..f8338fa 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "19" -_Revision = " 260" +_Revision = " 261" _LanguageID = "1034" _AutoIncrement = "1" * @@ -51,7 +51,7 @@ loProject = _VFP.Projects('foxbin2prg.pjx') WITH loProject.FILES .ADD('config\config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="1132857145" ID="1131721714" ObjRev="0" /> - .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1145929891" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1145939245" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index be6aaba8bcb20cc44aacf9067532bbe9a659a1d9..db66c09b9ee56bec00dbe597a70812ce4a70d8f3 100644 GIT binary patch delta 140 zcmZp;FWPWlbi-OsM#IhPIB!Y`fB5(5zXB5@0|Uc#FII*|AP$=-D9ZG;Z1P4G86MrG zzAh#}xj*%c+LIN#WhdvfaW$#7sWP^yGPS8Px2dvhQ)T7xk}fSyEh>&F&&*57FE5Ts eEGS4xEJ=*X$xlwqna-Wh>MEiNGz1PfAuIp}swkcS delta 125 zcmZp;FWPWlbi-OsMuW}kIB!Y`U-|dxzXB5@0|UcuFII*|Ahwz)D9W^b+vJTZGCYeL zd|f1fa)0U>wI?ff%TCT|<7!fEQ)O&ZWolDpZc}C1rpn6WHC-d0)rE%>s1OFG`{%QY M@~;9K2LezT0M39Pod5s; diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 8569507c66d8413d59c5ef077bc86980c47b4575..d554483303d60ccd05151b8f22f1326328b3d6ab 100644 GIT binary patch delta 27 icmZ3_vz}+eUKUnkOJj5M$%k0}16f8Urjw7cW&!|$8VMx; delta 27 gcmZ3_vz}+eUKUm(OAAZm$%k0}gIR`?kFjO~0D@}?EdT%j