From 22021c64e99b06cb8413e064a0c32976a2b550d3 Mon Sep 17 00:00:00 2001 From: fernando Date: Wed, 18 Dec 2013 18:58:35 +0100 Subject: [PATCH 01/21] Changeset: 102 Inicio soporte MNX --- foxbin2prg.pjt | Bin 268950 -> 272844 bytes foxbin2prg.pjx | Bin 1713 -> 1582 bytes foxbin2prg.prg | 378 +++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 335 insertions(+), 43 deletions(-) diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 3799d9727e8cded28b345375adf79877f2f54999..25dda36bbc2ba19845c3c6b3bda99f0035b48073 100644 GIT binary patch delta 12461 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 delta 12023 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 Ud{j%Rn~(ZKbM+sV53m0FKaLK`{Qv*} diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 5eef802a8a169a733d96d568790d234956321775..2f1bf2bbd29928775b79735ca08221b79624cd54 100644 GIT binary patch delta 74 zcmdnUyN-v|fR{&zc_Zr%7FIKJGXvwvhgj?xgC=*dX-w8)6;%d_88ASBTZn>!n*tD+ RnwWrus(|=E!{j8^GXP4x4+a1L delta 149 zcmZ3-vyqq8fR{&zWh3hj7FH7@0~3SEhgj?xLngPdYEIT>6;U=Zw6HW}fC9G=1qC++ zATTvC0SVOrF(c#TB-S$y3c)~jh@qjek(s51iG=}(WnpS=U}*_b2m)Y@Ak9Dk;s=2U WAW$$gGBq=r{DxI-atEslqZ9!Ar5QN@ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 9111f14..2eb11d7 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -53,6 +53,7 @@ * 08/12/2013 FDBOZZO v1.13 Arreglo bug "Error 1924, TOREG is not an object" * 15/12/2013 FDBOZZO v1.14 Arreglo de bug AutoCenter y registro COMMENT en regeneración de forms * 08/12/2013 FDBOZZO v1.15 Agregado soporte preliminar de conversión de tablas, índices y bases de datos (DBF,CDX,DBC) +* 18/12/2013 FDBOZZO v1.16 Agregado soporte para menús (MNX) * * *--------------------------------------------------------------------------------------------------- @@ -117,7 +118,7 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro #DEFINE C_PROCEDURE 'PROCEDURE' #DEFINE C_ENDPROC 'ENDPROC' #DEFINE C_WITH 'WITH' -#DEFINE C_WNDWITH 'ENDWITH' +#DEFINE C_ENDWITH 'ENDWITH' #DEFINE C_SRV_HEAD_I '*' #DEFINE C_SRV_HEAD_F '*' #DEFINE C_SRV_DATA_I '*' @@ -270,11 +271,20 @@ LOCAL lnResp goCnv = CREATEOBJECT("c_foxbin2prg") lnResp = goCnv.ejecutar( tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress ) -IF _VFP.STARTMODE > 0 - QUIT +IF _VFP.STARTMODE = 0 + RETURN ENDIF -RETURN lnResp +*-- Muy útil para procesos batch que capturan el código de error +DECLARE ExitProcess in Win32API INTEGER ExitCode +IF EMPTY(lnResp) + ExitProcess(0) +ELSE + ExitProcess(1) +ENDIF + +QUIT + ******************************************************************************************************************* @@ -289,7 +299,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -333,15 +342,14 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM nClassTimeStamp = '' o_Conversor = NULL o_Frm_Avance = NULL - c_VC2 = 'VC2' - c_SC2 = 'SC2' - c_PJ2 = 'PJ2' - c_MN2 = 'MN2' - c_FR2 = 'FR2' - c_LB2 = 'LB2' - c_DB2 = 'DB2' - c_CD2 = 'CD2' - c_DC2 = 'DC2' + c_VC2 = 'VC2' && VCX + c_SC2 = 'SC2' && SCX + c_PJ2 = 'PJ2' && PJX + c_FR2 = 'FR2' && FRX + c_LB2 = 'LB2' && LBX + c_DB2 = 'DB2' && DBF + c_DC2 = 'DC2' && DBC + c_MN2 = 'MN2' && MNX PROCEDURE INIT @@ -584,6 +592,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_DC2 ) THIS.o_Conversor = CREATEOBJECT( 'c_conversor_dbc_a_prg' ) + CASE JUSTEXT(THIS.c_InputFile) = 'MNX' + THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_MN2 ) + THIS.o_Conversor = CREATEOBJECT( 'c_conversor_mnx_a_prg' ) + CASE JUSTEXT(THIS.c_InputFile) = THIS.c_VC2 THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'VCX' ) THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' ) @@ -612,6 +624,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'DBC' ) THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbc' ) + CASE JUSTEXT(THIS.c_InputFile) = THIS.c_MN2 + THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'MNX' ) + THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_mnx' ) + OTHERWISE ERROR 'El archivo [' + THIS.c_InputFile + '] no está soportado' @@ -988,8 +1004,12 @@ DEFINE CLASS c_conversor_base AS SESSION ENDFUNC - ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION THIS.writeLog( '' ) THIS.writeLog( C_CONVERTING_FILE_LOC + THIS.c_OutputFile + '...' ) @@ -2125,6 +2145,11 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION DODEFAULT( @toModulo, @toEx ) ENDPROC @@ -3856,8 +3881,12 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin + [] - ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION DODEFAULT( @toModulo, @toEx ) @@ -4120,8 +4149,12 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin + [] - ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION DODEFAULT( @toModulo, @toEx ) @@ -4396,6 +4429,11 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toProject (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toProject, toEx AS EXCEPTION DODEFAULT( @toProject, @toEx ) @@ -5103,8 +5141,12 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin + [] - ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toReport (@! OUT) Objeto generado de clase CL_REPORT con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toReport, toEx AS EXCEPTION DODEFAULT( @toReport, @toEx ) @@ -5492,8 +5534,12 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin + [] - ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toTable (@! OUT) Objeto generado de clase CL_TABLE con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toTable, toEx AS EXCEPTION DODEFAULT( @toTable, @toEx ) @@ -5730,8 +5776,12 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin + [] - ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toDatabase, toEx AS EXCEPTION DODEFAULT( @toDatabase, @toEx ) @@ -5873,6 +5923,170 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ENDDEFINE && CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin +******************************************************************************************************************* +DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin + #IF .F. + LOCAL THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF + _MEMBERDATA = [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] ; + + [] + + + ******************************************************************************************************************* + PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toMenu (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toMenu, toEx AS EXCEPTION + DODEFAULT( @toMenu, @toEx ) + + #IF .F. + LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' + #ENDIF + + 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 ) + + THIS.doBackup( .F., .T. ) + + *-- Creo la tabla + *THIS.createTable() + + *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte + THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toMenu ) + + THIS.escribirArchivoBin( @toMenu ) + + + CATCH TO loEx + lnCodError = loEx.ERRORNO + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lnCodError + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE escribirArchivoBin + LPARAMETERS toDatabase + *-- ----------------------------------------------------------------------------------------------------------- + #IF .F. + LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL lnCodError, lcCreateTable, lcLongDec, lcFieldDef, lcIndex, ldLastUpdate + lnCodError = 0 + STORE '' TO lcIndex, lcFieldDef + + toMenu.updateDBC( THIS.c_OutputFile ) + + *USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) + + + CATCH TO loEx + lnCodError = loEx.ERRORNO + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lnCodError + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE identificarBloquesDeCodigo + *-------------------------------------------------------------------------------------------------------------- + * taCodeLines (!@ IN ) El array con las líneas del código donde buscar + * tnCodeLines (!@ IN ) Cantidad de líneas de código + * taBloquesExclusion (?@ IN ) Sin uso + * tnBloquesExclusion (?@ IN ) Sin uso + * toMenu (?@ OUT) Objeto con toda la información del menú analizado + * + * NOTA: + * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toMenu + EXTERNAL ARRAY taCodeLines, taBloquesExclusion + + #IF .F. + LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueDatabase_Completed + STORE 0 TO I + + THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) + + IF tnCodeLines > 1 + toDatabase = NULL + toDatabase = CREATEOBJECT('CL_DBC') + + WITH THIS + FOR I = 1 TO tnCodeLines + .set_Line( @lcLine, @taCodeLines, I ) + + IF .lineIsOnlyCommentAndNoMetadata( @lcLine, @lc_Comentario ) && Vacía o solo Comentarios + LOOP + ENDIF + + DO CASE + CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) + llFoxBin2Prg_Completed = .T. + + CASE NOT llBloqueDatabase_Completed AND toDatabase.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines ) + llBloqueDatabase_Completed = .T. + + ENDCASE + ENDFOR + ENDWITH && THIS + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN + ENDPROC + + +ENDDEFINE && CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin + + ******************************************************************************************************************* DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base #IF .F. @@ -5925,6 +6139,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION DODEFAULT( @toModulo, @toEx ) ENDPROC @@ -6888,7 +7107,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- - <> Version="<>" SourceFile="<>" Generated="<>" <> (Para uso con Visual FoxPro 9.0) + <> Version="<>" SourceFile="<>" Generated="<>" <> (Para binarios Visual FoxPro 9.0 solamente) * ENDTEXT ENDPROC @@ -7382,12 +7601,14 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_vcx_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF - *_MEMBERDATA = [] ; - + [] ; - + [] - ******************************************************************************************************************* + PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION DODEFAULT( @toModulo, @toEx ) @@ -7511,13 +7732,14 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_scx_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF - *_MEMBERDATA = [] ; - + [] ; - + [] - ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION DODEFAULT( @toModulo, @toEx ) @@ -7669,12 +7891,8 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg #IF .F. LOCAL THIS AS c_conversor_pjx_a_prg OF 'FOXBIN2PRG.PRG' #ENDIF - *_MEMBERDATA = [] ; - * + [] ; - * + [] - ******************************************************************************************************************* PROCEDURE write_PROGRAM_HEADER *-- Cabecera del PRG e inicio de DEF_CLASS TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 @@ -7682,14 +7900,18 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg * (ES) AUTOGENERADO - PARA MANTENER INFORMACIÓN DE SERVIDORES DLL USAR "FOXBIN2PRG", SI NO IMPORTAN, EJECUTAR DIRECTAMENTE PARA REGENERAR EL PROYECTO. * (EN) AUTOGENERATED - TO KEEP DLL SERVER INFORMATION USE "FOXBIN2PRG", OTHERWISE YOU CAN EXECUTE DIRECTLY TO REGENERATE PROJECT. *-------------------------------------------------------------------------------------------------------------------------------------------------------- - <> Version="<>" SourceFile="<>" Generated="<>" <> (Para uso con Visual FoxPro 9.0) + <> Version="<>" SourceFile="<>" Generated="<>" <> (Para binarios Visual FoxPro 9.0 solamente) * ENDTEXT ENDPROC - ******************************************************************************************************************* PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- LPARAMETERS toModulo, toEx AS EXCEPTION DODEFAULT( @toModulo, @toEx ) @@ -8214,6 +8436,71 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg ENDDEFINE +******************************************************************************************************************* +DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg + #IF .F. + LOCAL THIS AS c_conversor_mnx_a_prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + + PROCEDURE Convertir + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto + * toEx (@! OUT) Objeto con información del error + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toDatabase, toEx AS EXCEPTION + DODEFAULT( @toDatabase, @toEx ) + + #IF .F. + LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1) ; + , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name + STORE 0 TO lnCodError + + lnDatabases_Count = ADATABASES(laDatabases) + THIS.getDBFmetadata( THIS.c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) + USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN + OPEN DATABASE (THIS.c_InputFile) SHARED NOUPDATE + + THIS.write_PROGRAM_HEADER() + + *-- 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 + IF STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 + ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' + ENDIF + ENDIF + + + CATCH TO toEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + USE IN (SELECT("TABLABIN")) + CLOSE DATABASES + + ENDTRY + + RETURN + ENDPROC +ENDDEFINE + + ******************************************************************************************************************* DEFINE CLASS CL_CUS_BASE AS CUSTOM *-- Propiedades (Se preservan: CONTROLCOUNT, CONTROLS, OBJECTS, PARENT, CLASS) @@ -8236,7 +8523,6 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM l_Debug = .F. - ******************************************************************************************************************* PROCEDURE INIT SET DELETED ON SET DATE YMD @@ -8249,12 +8535,10 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM ENDPROC - ******************************************************************************************************************* PROCEDURE analizarBloque ENDPROC - ******************************************************************************************************************* PROCEDURE fileTypeDescription *--------------------------------------------------------------------------------------------------- * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) @@ -8296,7 +8580,6 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM ENDPROC - ******************************************************************************************************************* PROCEDURE set_Line *--------------------------------------------------------------------------------------------------- * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) @@ -8309,8 +8592,12 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM ENDPROC - ******************************************************************************************************************* PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * taConnections (@? OUT) Array de conexiones + * tnConnection_Count (@? OUT) Cantidad de conexiones + *--------------------------------------------------------------------------------------------------- ENDPROC @@ -8330,13 +8617,13 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION _MEMBERDATA = [] ; + [] ; + [] ; + + [] ; + [] ; + [] l_Debug = .F. - ************************************************************************************************ PROCEDURE INIT SET DELETED ON SET DATE YMD @@ -8349,12 +8636,10 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION ENDPROC - ******************************************************************************************************************* PROCEDURE analizarBloque ENDPROC - ******************************************************************************************************************* PROCEDURE set_Line *--------------------------------------------------------------------------------------------------- * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) @@ -8367,6 +8652,13 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION ENDPROC + PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * taConnections (@? OUT) Array de conexiones + * tnConnection_Count (@? OUT) Cantidad de conexiones + *--------------------------------------------------------------------------------------------------- + ENDPROC ENDDEFINE From 76e656a6e69aac9384d12039e4fbdffaaa282597 Mon Sep 17 00:00:00 2001 From: fernando Date: Fri, 20 Dec 2013 19:09:47 +0100 Subject: [PATCH 02/21] Changeset: 104 - Terminado DIFF - Inicio de MERGE --- foxbin2prg.pjt | Bin 268917 -> 272679 bytes foxbin2prg.pjx | Bin 1713 -> 1582 bytes foxbin2prg.prg | 252 +++++++++++++++++++++++++------------------------ 3 files changed, 130 insertions(+), 122 deletions(-) diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index b55eeb4e5a087c047d8b163714af4ceb6e797f86..1c7b6bf51a17f50a84848322ae065d898facb163 100644 GIT binary patch delta 17216 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 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index d6e7160e14107ed8617ce923ae2e58afedfb8a93..8e05bdbb0a2d5b1b4b631d66012e59b4fd3b64a8 100644 GIT binary patch delta 84 zcmdnUyN-v|fR{&vc_Zs~7B+KBOA~Xm$%k0%8G|NwuxU)zVinN=3mP*(fm?`zf|~*m Zn3|Y?gsOn}KM*UJS{RrZOwM9G0s!gN5V-&V delta 159 zcmZ3-vyqq8fR{&zWh3i$7B(|83o|40$%k0%8AB$wuxd`$W);=}3L2OgF+hP^h=PKf z0uY#*n1F<8fS8eyfkDC0%+l0!au(|m2ZdmuScsvav5}djg^7g$h-G1FZeVE%(f|Tr f13-oV0f-+2B7i`_(8$!xX!09Yxyc=@DvVM9511O~ diff --git a/foxbin2prg.prg b/foxbin2prg.prg index e6f75ba..608f7e4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -85,10 +85,12 @@ * tcDontShowErrors (v? IN ) '1' para NO mostrar errores con MESSAGEBOX * tcDebug (v? IN ) '1' para depurar en el sitio donde ocurre el error (solo modo desarrollo) * tcDontShowProgress (v? IN ) '1' para NO mostrar la ventana de progreso +* tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar +* el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) * * Ej: DO FOXBIN2PRG.PRG WITH "C:\DESA\INTEGRACION\LIBRERIA.VCX" *--------------------------------------------------------------------------------------------------- -LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress +LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress, tcOriginalFileName *-- Internacionalización / Internationalization *-- Fin / End @@ -269,20 +271,14 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro PUBLIC goCnv AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' LOCAL lnResp goCnv = CREATEOBJECT("c_foxbin2prg") -lnResp = goCnv.ejecutar( tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress ) +lnResp = goCnv.ejecutar( tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug ; + , '', NULL, NULL, .F., tcOriginalFileName ) -IF _VFP.STARTMODE = 0 - RETURN +IF _VFP.STARTMODE > 0 + QUIT ENDIF -*-- Muy útil para procesos batch que capturan el código de error -DECLARE ExitProcess in Win32API INTEGER ExitCode -IF NOT EMPTY(lnResp) - ExitProcess(1) -ENDIF - -QUIT - +RETURN lnResp ******************************************************************************************************************* @@ -318,6 +314,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] @@ -340,6 +337,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM nClassTimeStamp = '' o_Conversor = NULL o_Frm_Avance = NULL + o_FSO = NULL c_VC2 = 'VC2' && VCX c_SC2 = 'SC2' && SCX c_PJ2 = 'PJ2' && PJX @@ -359,6 +357,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM SET TABLEPROMPT OFF THIS.c_Foxbin2prg_FullPath = SUBSTR( SYS(16), AT( 'C_FOXBIN2PRG.INIT', SYS(16) ) + LEN('C_FOXBIN2PRG.INIT') + 1 ) THIS.c_CurDir = SYS(5) + CURDIR() + THIS.o_FSO = NEWOBJECT("Scripting.FileSystemObject") ENDPROC @@ -388,14 +387,17 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * toModulo (?@ OUT) Referencia de objeto del módulo generado (para Unit Testing) * toEx (?@ OUT) Objeto con información del error * tlRelanzarError (?v IN ) Indica si el error debe relanzarse o no + * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar + * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) *-------------------------------------------------------------------------------------------------------------- LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErrors, tcDebug, tcDontShowProgress ; - , toModulo, toEx AS EXCEPTION, tlRelanzarError + , toModulo, toEx AS EXCEPTION, tlRelanzarError, tcOriginalFileName TRY LOCAL I, lcPath, lnResp, lcFileSpec, lcFile, laFiles(1,5), laConfig(1), lcConfigFile, lcExt ; , llExisteConfig, lcConfData, lnFileCount ; - , loEx AS EXCEPTION + , loEx AS EXCEPTION ; + , loFSO as Scripting.FileSystemObject lnResp = 0 @@ -410,6 +412,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM SET ESCAPE OFF ENDIF + loFSO = THIS.o_FSO + DO CASE CASE VERSION(5) < 900 *-- '¡FOXBIN2PRG es solo para Visual FoxPro 9.0!' @@ -452,7 +456,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) IF THIS.l_ShowErrors - MESSAGEBOX( ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) + MESSAGEBOX( ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, 'FOXBIN2PRG: ERROR!!', 10000 ) ELSE ERROR ASTERISK_EXT_NOT_ALLOWED_LOC ENDIF @@ -473,7 +477,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF ENDIF - lnFileCount = ADIR( laFiles, lcFileSpec ) + lnFileCount = ADIR( laFiles, lcFileSpec, '', 1 ) IF THIS.l_ShowProgress THIS.o_Frm_Avance.nMAX_VALUE = lnFileCount @@ -489,7 +493,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDIF IF FILE( lcFile ) - lnResp = THIS.Convertir( lcFile, toModulo, toEx, tlRelanzarError ) + lnResp = THIS.Convertir( lcFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) ENDIF ENDFOR @@ -506,7 +510,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.writeLog( THIS.c_Foxbin2prg_FullPath + ' - FileSpec: ' + EVL(tc_InputFile,'') ) ENDIF - lnResp = THIS.Convertir( tc_InputFile, toModulo, toEx, tlRelanzarError ) + lnResp = THIS.Convertir( tc_InputFile, toModulo, toEx, tlRelanzarError, tcOriginalFileName ) ENDIF ENDCASE @@ -531,8 +535,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (JUSTPATH(THIS.c_CurDir)) *SET PATH TO (lcPath) ENDTRY - - RETURN lnResp ENDPROC @@ -543,108 +545,126 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM * toModulo (?@ OUT) Referencia de objeto del módulo generado (para Unit Testing) * toEx (?@ OUT) Objeto con información del error * tlRelanzarError (?v IN ) Indica si el error debe relanzarse o no + * tcOriginalFileName (v? IN ) Sirve para los casos en los que inputFile es un nombre temporal y se quiere generar + * el nombre correcto dentro de la versión texto (por ej: en los PJ2 y las cabeceras) *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS tc_InputFile, toModulo, toEx AS EXCEPTION, tlRelanzarError + LPARAMETERS tc_InputFile, toModulo, toEx AS EXCEPTION, tlRelanzarError, tcOriginalFileName TRY - LOCAL lnCodError, lcErrorInfo + LOCAL lnCodError, lcErrorInfo, laDirFile(1,5), lcExtension ; + , loFSO as Scripting.FileSystemObject lnCodError = 0 - THIS.c_InputFile = FULLPATH( tc_InputFile ) - THIS.o_Conversor = NULL + + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + loFSO = THIS.o_FSO + .c_InputFile = FULLPATH( tc_InputFile ) + IF ADIR( laDirFile, .c_InputFile, '', 1 ) = 0 + ERROR 'No se encontró el archivo [' + .c_InputFile + ']' + ENDIF + .c_InputFile = loFSO.GetAbsolutePathName( FORCEPATH( laDirFile(1,1), JUSTPATH(.c_InputFile) ) ) + IF NOT EMPTY(tcOriginalFileName) + tcOriginalFileName = loFSO.GetAbsolutePathName( tcOriginalFileName ) + ENDIF + THIS.writeLog( 'c_InputFile=' + .c_InputFile ) + .o_Conversor = NULL - IF NOT FILE(THIS.c_InputFile) - ERROR C_FILE_DOESNT_EXIST_LOC + ' [' + THIS.c_InputFile + ']' - ENDIF + IF NOT FILE(.c_InputFile) + ERROR C_FILE_DOESNT_EXIST_LOC + ' [' + .c_InputFile + ']' + ENDIF - IF FILE( THIS.c_InputFile + '.ERR' ) - TRY - ERASE ( THIS.c_InputFile + '.ERR' ) - CATCH - ENDTRY - ENDIF + IF FILE( .c_InputFile + '.ERR' ) + TRY + ERASE ( .c_InputFile + '.ERR' ) + CATCH + ENDTRY + ENDIF + + lcExtension = UPPER( JUSTEXT(.c_InputFile) ) - DO CASE - CASE JUSTEXT(THIS.c_InputFile) = 'VCX' - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_VC2 ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_vcx_a_prg' ) + DO CASE + CASE lcExtension = 'VCX' + .c_OutputFile = FORCEEXT( .c_InputFile, .c_VC2 ) + .o_Conversor = CREATEOBJECT( 'c_conversor_vcx_a_prg' ) - CASE JUSTEXT(THIS.c_InputFile) = 'SCX' - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_SC2 ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_scx_a_prg' ) + CASE lcExtension = 'SCX' + .c_OutputFile = FORCEEXT( .c_InputFile, .c_SC2 ) + .o_Conversor = CREATEOBJECT( 'c_conversor_scx_a_prg' ) - CASE JUSTEXT(THIS.c_InputFile) = 'PJX' - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_PJ2 ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_pjx_a_prg' ) + CASE lcExtension = 'PJX' + .c_OutputFile = FORCEEXT( .c_InputFile, .c_PJ2 ) + .o_Conversor = CREATEOBJECT( 'c_conversor_pjx_a_prg' ) - CASE JUSTEXT(THIS.c_InputFile) = 'FRX' - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_FR2 ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) + CASE lcExtension = 'FRX' + .c_OutputFile = FORCEEXT( .c_InputFile, .c_FR2 ) + .o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) - CASE JUSTEXT(THIS.c_InputFile) = 'LBX' - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_LB2 ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) + CASE lcExtension = 'LBX' + .c_OutputFile = FORCEEXT( .c_InputFile, .c_LB2 ) + .o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) - CASE JUSTEXT(THIS.c_InputFile) = 'DBF' - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_DB2 ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_dbf_a_prg' ) + CASE lcExtension = 'DBF' + .c_OutputFile = FORCEEXT( .c_InputFile, .c_DB2 ) + .o_Conversor = CREATEOBJECT( 'c_conversor_dbf_a_prg' ) - CASE JUSTEXT(THIS.c_InputFile) = 'DBC' - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_DC2 ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_dbc_a_prg' ) + CASE lcExtension = 'DBC' + .c_OutputFile = FORCEEXT( .c_InputFile, .c_DC2 ) + .o_Conversor = CREATEOBJECT( 'c_conversor_dbc_a_prg' ) - CASE JUSTEXT(THIS.c_InputFile) = 'MNX' - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_MN2 ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_mnx_a_prg' ) + CASE lcExtension = 'MNX' + .c_OutputFile = FORCEEXT( .c_InputFile, .c_MN2 ) + .o_Conversor = CREATEOBJECT( 'c_conversor_mnx_a_prg' ) - CASE JUSTEXT(THIS.c_InputFile) = THIS.c_VC2 - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'VCX' ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' ) + CASE lcExtension = .c_VC2 + .c_OutputFile = FORCEEXT( .c_InputFile, 'VCX' ) + .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' ) - CASE JUSTEXT(THIS.c_InputFile) = THIS.c_SC2 - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'SCX' ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_scx' ) + CASE lcExtension = .c_SC2 + .c_OutputFile = FORCEEXT( .c_InputFile, 'SCX' ) + .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_scx' ) - CASE JUSTEXT(THIS.c_InputFile) = THIS.c_PJ2 - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'PJX' ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_pjx' ) + CASE lcExtension = .c_PJ2 + .c_OutputFile = FORCEEXT( .c_InputFile, 'PJX' ) + .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_pjx' ) - CASE JUSTEXT(THIS.c_InputFile) = THIS.c_FR2 - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'FRX' ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) + CASE lcExtension = .c_FR2 + .c_OutputFile = FORCEEXT( .c_InputFile, 'FRX' ) + .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) - CASE JUSTEXT(THIS.c_InputFile) = THIS.c_LB2 - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'LBX' ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) + CASE lcExtension = .c_LB2 + .c_OutputFile = FORCEEXT( .c_InputFile, 'LBX' ) + .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) - CASE JUSTEXT(THIS.c_InputFile) = THIS.c_DB2 - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'DBF' ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbf' ) + CASE lcExtension = .c_DB2 + .c_OutputFile = FORCEEXT( .c_InputFile, 'DBF' ) + .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbf' ) - CASE JUSTEXT(THIS.c_InputFile) = THIS.c_DC2 - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'DBC' ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbc' ) + CASE lcExtension = .c_DC2 + .c_OutputFile = FORCEEXT( .c_InputFile, 'DBC' ) + .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_dbc' ) - CASE JUSTEXT(THIS.c_InputFile) = THIS.c_MN2 - THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'MNX' ) - THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_mnx' ) + CASE lcExtension = .c_MN2 + .c_OutputFile = FORCEEXT( .c_InputFile, 'MNX' ) + .o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_mnx' ) - OTHERWISE - ERROR 'El archivo [' + THIS.c_InputFile + '] no está soportado' + OTHERWISE + ERROR 'El archivo [' + .c_InputFile + '] no está soportado' - ENDCASE + ENDCASE - THIS.o_Conversor.c_InputFile = THIS.c_InputFile - THIS.o_Conversor.c_OutputFile = THIS.c_OutputFile - THIS.o_Conversor.c_LogFile = THIS.c_LogFile - THIS.o_Conversor.l_Debug = THIS.l_Debug - THIS.o_Conversor.l_Test = THIS.l_Test - THIS.o_Conversor.n_FB2PRG_Version = THIS.n_FB2PRG_Version - THIS.o_Conversor.l_MethodSort_Enabled = THIS.l_MethodSort_Enabled - THIS.o_Conversor.l_PropSort_Enabled = THIS.l_PropSort_Enabled - THIS.o_Conversor.l_ReportSort_Enabled = THIS.l_ReportSort_Enabled - *-- - THIS.o_Conversor.Convertir( @toModulo ) - THIS.o_Conversor = NULL + .o_Conversor.c_InputFile = .c_InputFile + .o_Conversor.c_OutputFile = .c_OutputFile + .o_Conversor.c_LogFile = .c_LogFile + .o_Conversor.l_Debug = .l_Debug + .o_Conversor.l_Test = .l_Test + .o_Conversor.n_FB2PRG_Version = .n_FB2PRG_Version + .o_Conversor.l_MethodSort_Enabled = .l_MethodSort_Enabled + .o_Conversor.l_PropSort_Enabled = .l_PropSort_Enabled + .o_Conversor.l_ReportSort_Enabled = .l_ReportSort_Enabled + .o_Conversor.c_OriginalFileName = tcOriginalFileName + *-- + .o_Conversor.Convertir( @toModulo ) + .o_Conversor = NULL + ENDWITH && THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' CATCH TO toEx lnCodError = toEx.ERRORNO @@ -662,11 +682,16 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.writeLog( lcErrorInfo ) ENDIF IF THIS.l_Debug AND THIS.l_ShowErrors - MESSAGEBOX( lcErrorInfo, 0+16+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) + MESSAGEBOX( lcErrorInfo, 0+16+4096, 'FOXBIN2PRG: ERROR!!', 10000 ) ENDIF IF tlRelanzarError && Usado en Unit Testing THROW ENDIF + + FINALLY + loFSO = NULL + THIS.o_FSO = NULL + ENDTRY RETURN lnCodError @@ -799,6 +824,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -823,6 +849,7 @@ DEFINE CLASS c_conversor_base AS SESSION l_MethodSort_Enabled = .T. l_PropSort_Enabled = .T. l_ReportSort_Enabled = .T. + c_OriginalFileName = '' ******************************************************************************************************************* @@ -1154,16 +1181,13 @@ DEFINE CLASS c_conversor_base AS SESSION THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) ENDIF - *COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( FORCEEXT(THIS.c_OutputFile, lcExt_1 + lcNext_Bak) ) RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) IF NOT EMPTY(lcExt_2) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) - *COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) TO ( FORCEEXT(THIS.c_OutputFile, lcExt_2 + lcNext_Bak) ) RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) ENDIF IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) - *COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( FORCEEXT(THIS.c_OutputFile, lcExt_3 + lcNext_Bak) ) RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) ENDIF ENDIF @@ -7107,7 +7131,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- - <> Version="<>" SourceFile="<>" Generated="<>" <> (Para binarios Visual FoxPro 9.0 solamente) + <> Version="<>" SourceFile="<>" Generated="<>" <> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * ENDTEXT ENDPROC @@ -7893,19 +7917,6 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg #ENDIF - PROCEDURE write_PROGRAM_HEADER - *-- Cabecera del PRG e inicio de DEF_CLASS - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 - *-------------------------------------------------------------------------------------------------------------------------------------------------------- - * (ES) AUTOGENERADO - PARA MANTENER INFORMACIÓN DE SERVIDORES DLL USAR "FOXBIN2PRG", SI NO IMPORTAN, EJECUTAR DIRECTAMENTE PARA REGENERAR EL PROYECTO. - * (EN) AUTOGENERATED - TO KEEP DLL SERVER INFORMATION USE "FOXBIN2PRG", OTHERWISE YOU CAN EXECUTE DIRECTLY TO REGENERATE PROJECT. - *-------------------------------------------------------------------------------------------------------------------------------------------------------- - <> Version="<>" SourceFile="<>" Generated="<>" <> (Para binarios Visual FoxPro 9.0 solamente) - * - ENDTEXT - ENDPROC - - PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) @@ -7967,9 +7978,6 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV MEMO NAME loReg loReg.NAME = LOWER( ALLTRIM( loReg.NAME, 0, ' ', CHR(0) ) ) loReg.COMMENTS = CHRTRAN( ALLTRIM( loReg.COMMENTS, 0, ' ', CHR(0) ), ['], ["] ) - - *-- TIP: Por algún motivo el NAME puede estar vacío. Asigno uno temporal que muestre el error. - loReg.NAME = EVL(loReg.NAME, 'BadName_FixIt') TRY loProject.ADD( loReg, loReg.NAME ) @@ -8013,7 +8021,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg ENDFOR <<>> STRTOFILE( '', '__newproject.f2b' ) - BUILD PROJECT <> FROM '__newproject.f2b' + BUILD PROJECT <> FROM '__newproject.f2b' ENDTEXT @@ -8023,9 +8031,9 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg <<>> loProj.Close() ENDFOR <<>> - MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK + MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK <<>> - loProject = _VFP.Projects('<>') + loProject = _VFP.Projects('<>') <<>> WITH loProject.FILES ENDTEXT @@ -8149,7 +8157,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg * _VFP.Projects('<>').FILES('__newproject.f2b').Remove() TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> - _VFP.Projects('<>').Close() + _VFP.Projects('<>').Close() ENDTEXT *-- Restauro Directorio de inicio From 1bed39cacebef72cd971b63967d902957b11735b Mon Sep 17 00:00:00 2001 From: fernando Date: Fri, 20 Dec 2013 20:44:50 +0100 Subject: [PATCH 03/21] Changeset: 105 Algunas cosas que se estaban perdiendo --- foxbin2prg.pjt | Bin 272679 -> 272844 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 14 ++++++++++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 1c7b6bf51a17f50a84848322ae065d898facb163..2489faff0bb76e17a63b9f82e50706933989fd8b 100644 GIT binary patch delta 9938 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 delta 9654 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 0 - QUIT +IF _VFP.STARTMODE = 0 + RETURN ENDIF -RETURN lnResp +*-- Muy útil para procesos batch que capturan el código de error +DECLARE ExitProcess in Win32API INTEGER ExitCode +IF NOT EMPTY(lnResp) + ExitProcess(1) +ENDIF + +QUIT ******************************************************************************************************************* @@ -319,7 +325,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] *-- - n_FB2PRG_Version = 1.15 + n_FB2PRG_Version = 1.16 *-- c_Foxbin2prg_FullPath = '' c_CurDir = '' From 4d888d2449c6aeac2e3c19b626e25994a83c86b8 Mon Sep 17 00:00:00 2001 From: fernando Date: Sat, 21 Dec 2013 00:30:33 +0100 Subject: [PATCH 04/21] Changeset: 107 Arreglo retorno cod estado --- foxbin2prg.pjt | Bin 272844 -> 272910 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 9 ++++++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 2489faff0bb76e17a63b9f82e50706933989fd8b..0aa6cc29f2d053479af6d388091933684d823421 100644 GIT binary patch delta 9934 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 IxxV`U0*C!x&Hw-a delta 9721 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 P+Dab^z4?WOc&W$u6v~0Dy=HqyPW_ delta 31 lcmZ3-vyO+wfR{&PBg-xp7E?nDgUN?j>VOP$ Date: Sat, 21 Dec 2013 18:48:29 +0100 Subject: [PATCH 05/21] =?UTF-8?q?Changeset:=20108=20Actualizado=20el=20REA?= =?UTF-8?q?DME=20y=20pasado=20a=20UTF8=20(qu=C3=A9=20feo=20se=20ve)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.txt | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/README.txt b/README.txt index eb2ace1..0173611 100644 --- a/README.txt +++ b/README.txt @@ -1,41 +1,45 @@ -02/12/2013 FOXBIN2PRG VER.1.7 FOR VISUAL FOXPRO 9 Fernando D. Bozzo (fdbozzo@gmail.com) +21/12/2013 FOXBIN2PRG VER.1.15 FOR VISUAL FOXPRO 9 BINARIES Fernando D. Bozzo (fdbozzo@gmail.com) -ESPAÑOL -------------------------------------------------------------------------------------------- +ESPAÑOL -------------------------------------------------------------------------------------------- -¿Que es FOXBIN2PRG? +¿Que es FOXBIN2PRG? Es un programa pensado para ser usado con herramientas SCM (Source Code Managers) que pretende sustituir a SCCTEXT y mejorarlo, generando versiones TEXTO bidireccionales que permiten volver a generar el archivo binario original. Ventajas: -- Genera versiones tipo "PRG" (no compilables), para comparación visual -- Permite modificar la versión TEXTO tan fácilmente como si se modificara un PRG -- Todo el código del programa está en un solo PRG, para simplificar su copia y mantenimiento +- Genera versiones tipo "PRG" (no compilables), para comparación visual +- Permite modificar la versión TEXTO tan fácilmente como si se modificara un PRG +- Todo el código del programa está en un solo PRG, para simplificar su copia y mantenimiento - Con las versiones TEXTO se pueden volver a generar los binarios, lo que sirve como backup - Las extensiones son configurables si se crea un archivo FOXBIN2PRG.CFG -- Los métodos y propiedades de la versión TEXTO se ordenan alfabéticamente para facilitar su comparación -- Tiene compatibilidad con SCCTEXT a nivel de parámetros para usarlo como sustituto en SourceSafe +- Los métodos y propiedades de la versión TEXTO se ordenan alfabéticamente para facilitar su comparación +- Tiene compatibilidad con SCCTEXT a nivel de parámetros para usarlo como sustituto en SourceSafe -Actualmente soporta las conversiones de archivos SCX, VCX y PJX, para los que genera las versiones TEXTO -con extensión SC2,VC2 y PJ2, que pueden reconfigurarse para compatibilizar con SourceSafe. +Actualmente soporta las conversiones de archivos PJX,SCX,VCX,FRX,LBX,DBC y DBF para los que genera las +versiones TEXTO con extensión PJ2,SC2,VC2,FR2,LB2,DC2 y DB2, que pueden reconfigurarse para compatibilizar +con SourceSafe. -Estructura del archivo de configuración FOXBIN2PRG.CFG +Estructura del archivo de configuración FOXBIN2PRG.CFG extension: SC2=SCA extension: VC2=VCA extension: PJ2=PJA USO: -DO FOXBIN2PRG.PRG WITH "\archivo.scx" ==> Genera la versión TEXTO con extensión sc2 -DO FOXBIN2PRG.PRG WITH "\archivo.sc2" ==> Regenera la versión binaria con extensión scx +DO FOXBIN2PRG.PRG WITH "\archivo.scx" ==> Genera la versión TEXTO con extensión sc2 +DO FOXBIN2PRG.PRG WITH "\archivo.sc2" ==> Regenera la versión binaria con extensión scx +TRUCO UTIL: +Se puede crear un acceso directo en la carpeta "SendTo" del perfil del usuario, para poder "enviar" +el archivo elegido (pjx,pj2,etc) a Foxbin2prg.exe, y así se hacen conversiones al vuelo. NOTA FINAL: -Este programa es Open Source y "libre", y como tal no ofrezco garantías de que cumpla con sus espectativas -o de que esté libre de fallos, que intentaré solucionar si me reporta y mis obligaciones me lo permiten. +Este programa es Open Source y "libre", y como tal no ofrezco garantías de que cumpla con sus espectativas +o de que está libre de fallos, que intentaré solucionar si me reporta y mis obligaciones me lo permiten. LICENCIA: -Esta obra está sujeta a la licencia Reconocimiento-CompartirIgual 4.0 Internacional de Creative Commons. +Esta obra está sujeta a la licencia Reconocimiento-CompartirIgual 4.0 Internacional de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-sa/4.0/deed.es_ES. @@ -56,8 +60,9 @@ Advantages: - Methods and properties of TEXT version are alphabetically sorted for easy comparison - It has compatibility with SCCTEXT at parameter level so can be used as sustitute with SourceSafe -Actually supports conversions between SCX, VCX and PJX files, for which it generates TEXT versions -with extension SC2,VC2 and PJ2, that can be reconfigured to compatibilize with SourceSafe. +Actually supports conversions between PJX,SCX,VCX,FRX,LBX,DBC and DBF files, for which it generates +TEXT versions with extension PJ2,SC2,VC2,FR2,LB2,DC2 and DB2 that can be reconfigured to compatibilize +with SourceSafe. Structure of configuration file FOXBIN2PRG.CFG extension: SC2=SCA @@ -68,6 +73,10 @@ USE: DO FOXBIN2PRG.PRG WITH "\archivo.scx" ==> Generates the TEXT version sc2 extension DO FOXBIN2PRG.PRG WITH "\archivo.sc2" ==> Regenerates the binary version with scx extension +USEFUL TRICK: +You can create a shortcut in the "SendTo" folder on your user Windows Profile, so you can "send" +the selected file (pjx,pj2,etc) to Foxbin2prg.exe, and make on-the-fly conversions. + FINAL NOTE: This program is Open Source and "libre", and I don't make any garanties that it fulfills your espectations From d378147e372af01357a3b2b01557b818b74e224a Mon Sep 17 00:00:00 2001 From: fernando Date: Sun, 22 Dec 2013 20:49:36 +0100 Subject: [PATCH 06/21] Changeset: 109 Cambios en cabecera de comentarios --- foxbin2prg.prg | 174 ++++++++++++++++++++++++------------------------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3af8867..f552519 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -77,7 +77,7 @@ * _memberdata Se separan las definiciones en lineas para evitar una sola muy larga * *--------------------------------------------------------------------------------------------------- -* PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) +* PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_InputFile (v! IN ) Nombre completo (fullpath) del archivo a convertir * tcType_na ( ) Por ahora se mantiene por compatibilidad con SCCTEXT.PRG * tcTextName_na ( ) Por ahora se mantiene por compatibilidad con SCCTEXT.PRG @@ -382,7 +382,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE Ejecutar *-------------------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_InputFile (!v IN ) Nombre del archivo de entrada * tcType_na (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe * tcTextName_na (?v IN ) NO DISPONIBLE. Se mantiene por compatibilidad con SourceSafe @@ -548,7 +548,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE Convertir *-------------------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_InputFile (!v IN ) Nombre del archivo de entrada * toModulo (?@ OUT) Referencia de objeto del módulo generado (para Unit Testing) * toEx (?@ OUT) Objeto con información del error @@ -895,7 +895,7 @@ DEFINE CLASS c_conversor_base AS SESSION * Este es un valor especial * *-------------------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcPropName (!v IN ) Nombre de la propiedad * tcValue (!v IN ) Valor (o inicio del valor) de la propiedad * taProps (!@ IN ) El array con las líneas del código donde buscar @@ -1041,7 +1041,7 @@ DEFINE CLASS c_conversor_base AS SESSION PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -1289,7 +1289,7 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE getDBFmetadata *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_FileName (v! IN ) Nombre del DBF a analizar * tn_HexFileType (@? OUT) Tipo de archivo en hexadecimal (Está detallado en la ayuda de Fox) * tl_FileHasCDX (@? OUT) Indica si el archivo tiene CDX asociado @@ -1618,7 +1618,7 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE sortPropsAndValues_SetAndGetSCXPropNames *-------------------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcOperation (!v IN ) Operación a realizar ("SETNAME" o "GETNAME") * tcPropName (!v IN ) Nombre de la propiedad *-------------------------------------------------------------------------------------------------------------- @@ -1886,7 +1886,7 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE write_DBF_Metadata *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_FileName (v! IN ) Nombre del DBF a analizar * tcDBC_Name (v! IN ) Nombre del DBC a asociar * tdLastUpdate (v? IN ) Fecha de última actualización @@ -1957,7 +1957,7 @@ DEFINE CLASS c_conversor_base AS SESSION * si se ordenan alfabéticamente en un ADD OBJECT. Pierde "picture" y otras más. * Pareciera que la última debe ser "Name". *-------------------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taPropsAndValues (!@ IN ) El array con las propiedades y valores del objeto o clase * tnPropsAndValues_Count (!v IN ) Cantidad de propiedades * tnSortType (!v IN ) Tipo de sort: @@ -2178,7 +2178,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -2235,7 +2235,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base *< FileMetadata: Type="V" Cpid="1252" Timestamp="1131901580" ID="1129207528" ObjRev="544" /> *< OLE: Nombre="frm_form.Pageframe1.Page1.Cnt_controles_h.Olecontrol1" Parent="frm_form.Pageframe1.Page1.Cnt_controles_h" ObjName="Olecontrol1" Checksum="1685567300" Value="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPg...ADAP7AAAA==" /> *-------------------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLineWithMetadata (@! IN ) Línea con metadatos y un tag de metadatos * taPropsAndValues (@! OUT) Array a devolver con las propiedades y valores encontrados * tnPropsAndValues_Count (@! OUT) Cantidad de propiedades encontradas @@ -2291,7 +2291,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base * LOS BLOQUES DE EXCLUSIÓN SON AQUELLOS QUE TIENEN TEXT/ENDTEXT OF #IF .F./#ENDIF Y SE USAN PARA NO BUSCAR * INSTRUCCIONES COMO "DEFINE CLASS" O "PROCEDURE" EN LOS MISMOS. *-------------------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taCodeLines (!@ IN ) El array con las líneas del código de texto donde buscar * tnCodeLines (?@ IN ) Cantidad de líneas de código * ta_ID_Bloques (?@ IN ) Array de pares de identificadores (2 cols). Ej: '#IF .F.','#ENDI' ; 'TEXT','ENDTEXT' ; etc @@ -3915,7 +3915,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -4183,7 +4183,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -4462,7 +4462,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toProject (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -5175,7 +5175,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toReport (@! OUT) Objeto generado de clase CL_REPORT con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -5568,7 +5568,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toTable (@! OUT) Objeto generado de clase CL_TABLE con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -5810,7 +5810,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -5974,7 +5974,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toMenu (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -6172,7 +6172,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -6251,7 +6251,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE get_PropsAndCommentsFrom_RESERVED3 *-- Sirve para el memo RESERVED3 *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcMemo (v! IN ) Contenido de un campo MEMO * tlSort (v? IN ) Indica si se deben ordenar alfabéticamente los nombres * taPropsAndComments (@! OUT) Array con las propiedades y comentarios @@ -6311,7 +6311,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * props.nativas (sin punto) y luego las de los objetos (con punto) * *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcMemo (v! IN ) Contenido de un campo MEMO * tnSort (v? IN ) Indica si se deben ordenar alfabéticamente los objetos y props (1), o no (0) * taPropsAndValues (@! OUT) Array con las propiedades y comentarios @@ -6426,7 +6426,7 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base PROCEDURE get_PropsFrom_PROTECTED *-- Sirve para el memo PROTECTED *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcMemo (v! IN ) Contenido de un campo MEMO * tlSort (v? IN ) Indica si se deben ordenar alfabéticamente los nombres * taProtected (@! OUT) Array con las propiedades y comentarios @@ -7637,7 +7637,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -7768,7 +7768,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -7927,7 +7927,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -8335,7 +8335,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Contenido del texto generado * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -8404,7 +8404,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -8469,7 +8469,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- @@ -8565,7 +8565,7 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM PROCEDURE fileTypeDescription *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tn_HexFileType (@? IN ) Tipo de archivo en hexadecimal (Está detallado en la ayuda de Fox) *--------------------------------------------------------------------------------------------------- LPARAMETERS tn_HexFileType @@ -8606,7 +8606,7 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM PROCEDURE set_Line *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (v! IN ) Número de línea en análisis @@ -8618,7 +8618,7 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taConnections (@? OUT) Array de conexiones * tnConnection_Count (@? OUT) Cantidad de conexiones *--------------------------------------------------------------------------------------------------- @@ -8666,7 +8666,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION PROCEDURE set_Line *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (v! IN ) Número de línea en análisis @@ -8678,7 +8678,7 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taConnections (@? OUT) Array de conexiones * tnConnection_Count (@? OUT) Cantidad de conexiones *--------------------------------------------------------------------------------------------------- @@ -9353,7 +9353,7 @@ DEFINE CLASS CL_DBC_COL_BASE AS CL_COL_BASE PROCEDURE updateDBC *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_OutputFile (v! IN ) Nombre del archivo de salida * tnLastID (@! IN ) Último número de ID usado * tnParentID (v! IN ) ID del objeto Padre @@ -9411,7 +9411,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE FUNCTION add_Property *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcPropertyName (v! IN ) Nombre de la propiedad a agregar o modificar * teValue (v! IN ) Valor de la propiedad *--------------------------------------------------------------------------------------------------- @@ -9463,7 +9463,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE getAllPropertiesFromObjectname *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcName (v! IN ) Nombre del objeto * tcType (v! IN ) Tipo de objeto (Table, Index, Field, View, Relation) * taProperties (@! OUT) Array con las propiedades encontradas y sus valores @@ -9582,7 +9582,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE getDBCPropertyIDByName *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcPropertyName (v! IN ) Nombre de la propiedad * tlRethrowError (v? IN ) Indica si se debe relanzar el error o solo devolver -1 *--------------------------------------------------------------------------------------------------- @@ -9735,7 +9735,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE getDBCPropertyNameByID *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcPropertyID (v! IN ) Nombre de la propiedad * tlRethrowError (v? IN ) Indica si se debe relanzar el error o solo devolver -1 *--------------------------------------------------------------------------------------------------- @@ -9887,7 +9887,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE getDBCPropertyValueTypeByPropertyID *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tnPropertyID (v! IN ) ID de la Propiedad *--------------------------------------------------------------------------------------------------- LPARAMETERS tnPropertyID @@ -9918,7 +9918,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE DBGETPROP *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcName (v! IN ) Nombre del objeto * tcType (v! IN ) Tipo de objeto (Table, Index, Field, View, Relation) * tcProperty (v! IN ) Nombre de la propiedad @@ -10028,7 +10028,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE DBSETPROP *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcName (v! IN ) Nombre del objeto * tcType (v! IN ) Tipo de objeto (Table, Index, Field, View, Relation) * tcProperty (v! IN ) Nombre de la propiedad @@ -10041,7 +10041,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE getBinPropertyDataRecord *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * teData (v! IN ) Dato a codificar * tnPropertyID (v! IN ) ID de la propiedad a la que pertenece *--------------------------------------------------------------------------------------------------- @@ -10161,7 +10161,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE updateDBC *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_OutputFile (v! IN ) Nombre del archivo de salida * tnLastID (@! IN ) Último número de ID usado * tnParentID (v! IN ) ID del objeto Padre @@ -10262,7 +10262,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -10335,7 +10335,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE PROCEDURE analizarBloque_SP *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -10367,7 +10367,7 @@ DEFINE CLASS CL_DBC AS CL_DBC_BASE PROCEDURE updateDBC *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_OutputFile (v! IN ) Nombre del archivo de salida * tnLastID (@! IN ) Último número de ID usado * tnParentID (v! IN ) ID del objeto Padre @@ -10513,7 +10513,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE ******************************************************************************************************************* PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -10570,7 +10570,7 @@ DEFINE CLASS CL_DBC_CONNECTIONS AS CL_DBC_COL_BASE ******************************************************************************************************************* PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taConnections (@? OUT) Array de conexiones * tnConnection_Count (@? OUT) Cantidad de conexiones *--------------------------------------------------------------------------------------------------- @@ -10671,7 +10671,7 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -10725,7 +10725,7 @@ DEFINE CLASS CL_DBC_CONNECTION AS CL_DBC_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcConnection (v! IN ) Nombre de la Conexión *--------------------------------------------------------------------------------------------------- LPARAMETERS tcConnection @@ -10810,7 +10810,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE ******************************************************************************************************************* PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -10867,7 +10867,7 @@ DEFINE CLASS CL_DBC_TABLES AS CL_DBC_COL_BASE ******************************************************************************************************************* PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taTables (@? OUT) Array de conexiones * lnTable_Count (@? OUT) Cantidad de conexiones *--------------------------------------------------------------------------------------------------- @@ -10973,7 +10973,7 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -11042,7 +11042,7 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla *--------------------------------------------------------------------------------------------------- LPARAMETERS tcTable @@ -11099,7 +11099,7 @@ DEFINE CLASS CL_DBC_TABLE AS CL_DBC_BASE PROCEDURE updateDBC *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_OutputFile (v! IN ) Nombre del archivo de salida * tnLastID (@! IN ) Último número de ID usado * tnParentID (v! IN ) ID del objeto Padre @@ -11146,7 +11146,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -11202,7 +11202,7 @@ DEFINE CLASS CL_DBC_FIELDS_DB AS CL_DBC_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla *--------------------------------------------------------------------------------------------------- LPARAMETERS tcTable @@ -11296,7 +11296,7 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -11350,7 +11350,7 @@ DEFINE CLASS CL_DBC_FIELD_DB AS CL_DBC_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla * tcField (v! IN ) Nombre del campo *--------------------------------------------------------------------------------------------------- @@ -11427,7 +11427,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -11483,7 +11483,7 @@ DEFINE CLASS CL_DBC_INDEXES_DB AS CL_DBC_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcTable (v! IN ) Nombre de la Tabla *--------------------------------------------------------------------------------------------------- LPARAMETERS tcTable @@ -11563,7 +11563,7 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -11617,7 +11617,7 @@ DEFINE CLASS CL_DBC_INDEX_DB AS CL_DBC_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcIndex (v! IN ) Nombre del índice en la forma "tabla.indice" *--------------------------------------------------------------------------------------------------- LPARAMETERS tcIndex @@ -11683,7 +11683,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -11739,7 +11739,7 @@ DEFINE CLASS CL_DBC_VIEWS AS CL_DBC_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taViews (@? OUT) Array de vistas * tnView_Count (@? OUT) Cantidad de vistas *--------------------------------------------------------------------------------------------------- @@ -11878,7 +11878,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -11947,7 +11947,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcView (v! IN ) Vista en evaluación *--------------------------------------------------------------------------------------------------- LPARAMETERS tcView @@ -12030,7 +12030,7 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE PROCEDURE updateDBC *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_OutputFile (v! IN ) Nombre del archivo de salida * tnLastID (@! IN ) Último número de ID usado * tnParentID (v! IN ) ID del objeto Padre @@ -12098,7 +12098,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ******************************************************************************************************************* PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -12155,7 +12155,7 @@ DEFINE CLASS CL_DBC_FIELDS_VW AS CL_DBC_COL_BASE ******************************************************************************************************************* PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcView (v! IN ) Nombre de la Vista *--------------------------------------------------------------------------------------------------- LPARAMETERS tcView @@ -12257,7 +12257,7 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -12312,7 +12312,7 @@ DEFINE CLASS CL_DBC_FIELD_VW AS CL_DBC_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcView (v! IN ) Nombre de la Vista * tcField (v! IN ) Nombre del campo *--------------------------------------------------------------------------------------------------- @@ -12393,7 +12393,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -12449,7 +12449,7 @@ DEFINE CLASS CL_DBC_RELATIONS AS CL_DBC_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcTable (v! IN ) Tabla de la que obtener las relaciones * taRelations (@? OUT) Array de relaciones * tnRelation_Count (@? OUT) Cantidad de relaciones @@ -12532,7 +12532,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE ******************************************************************************************************************* PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -12586,7 +12586,7 @@ DEFINE CLASS CL_DBC_RELATION AS CL_DBC_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taRelations (@! IN ) Array de relaciones * I (@! IN ) Número de relación evaluado *--------------------------------------------------------------------------------------------------- @@ -12695,7 +12695,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -12759,7 +12759,7 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tn_HexFileType (v! IN ) Tipo de archivo (en Hex) * tl_FileHasCDX (v! IN ) Indica si el archivo tiene CDX asociado * tl_FileHasMemo (v! IN ) Indica si el archivo tiene MEMO (FPT) asociado @@ -12835,7 +12835,7 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE ******************************************************************************************************************* PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -12892,7 +12892,7 @@ DEFINE CLASS CL_DBF_FIELDS AS CL_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taFields (@? OUT) Array de información de campos * tnField_Count (@? OUT) Cantidad de campos *--------------------------------------------------------------------------------------------------- @@ -12992,7 +12992,7 @@ DEFINE CLASS CL_DBF_FIELD AS CL_CUS_BASE ******************************************************************************************************************* PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -13046,7 +13046,7 @@ DEFINE CLASS CL_DBF_FIELD AS CL_CUS_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taFields (@! IN ) Array de información de campos * I (@! IN ) Campo en evaluación *--------------------------------------------------------------------------------------------------- @@ -13107,7 +13107,7 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -13163,7 +13163,7 @@ DEFINE CLASS CL_DBF_INDEXES AS CL_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taTagInfo (@? OUT) Array de información de indices * tnTagInfo_Count (@? OUT) Cantidad de índices *--------------------------------------------------------------------------------------------------- @@ -13242,7 +13242,7 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tcLine (@! IN/OUT) Contenido de la línea en análisis * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis @@ -13296,7 +13296,7 @@ DEFINE CLASS CL_DBF_INDEX AS CL_CUS_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taTagInfo (@? IN ) Array de información de indices * I (@? IN ) Indice en evaluación *--------------------------------------------------------------------------------------------------- From 8d6f49d35da00685dfdc5355dc6fedfe327f1f41 Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 26 Dec 2013 19:24:34 +0100 Subject: [PATCH 07/21] =?UTF-8?q?Changeset:=20111=20-=20Optimizaciones=20p?= =?UTF-8?q?ara=20el=20log=20-=20Arreglo=20borrado=20TABLABIN.CDX=20-=20Agr?= =?UTF-8?q?egado=20del=20PJ2=20-=20Enganchada=20la=20normalizaci=C3=B3n=20?= =?UTF-8?q?de=20nombres=20de=20archivo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 86 ++++++++++++++++++++++++++ foxbin2prg.pjt | Bin 272910 -> 275715 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 163 +++++++++++++++++++++++++++++++++++++++---------- 4 files changed, 217 insertions(+), 32 deletions(-) create mode 100644 foxbin2prg.pj2 diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 new file mode 100644 index 0000000..e448b63 --- /dev/null +++ b/foxbin2prg.pj2 @@ -0,0 +1,86 @@ +*-------------------------------------------------------------------------------------------------------------------------------------------------------- +* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! +* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! +*-------------------------------------------------------------------------------------------------------------------------------------------------------- +*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2013/12/26 19:21:19" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +* +LPARAMETERS tcDir + +lcCurdir = SYS(5)+CURDIR() +CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) ) + +* +_Autor = "Fernando D. Bozzo" +_Company = "" +_Address = "" +_City = "Coslada" +_State = "MAD" +_PostalCode = "28823" +_Country = "Spain" +*-- +_Comments = "Conversor bidireccional de binarios FoxPro 9 (scx,vcx,pjx) a texto para sustituir al scctext :-)" +_CompanyName = "Fernando D. Bozzo" +_FileDescription = "Conversor bidireccional de binarios FoxPro 9 (scx,vcx,pjx) a texto para sustituir al scctext :-)" +_LegalCopyright = "Open Source - LICENCIA Creative Commons: Reconocimiento - CompartirIgual (by-sa): http://es.creativecommons.org/blog/licencias/" +_LegalTrademark = "Open Source" +_ProductName = " FOXBIN2PRG" +_MajorVer = "1" +_MinorVer = "16" +_Revision = " 127" +_LanguageID = "1034" +_AutoIncrement = "1" +* + + +* +FOR EACH loProj IN _VFP.Projects FOXOBJECT + loProj.Close() +ENDFOR + +STRTOFILE( '', '__newproject.f2b' ) +BUILD PROJECT foxbin2prg.pjx FROM '__newproject.f2b' +FOR EACH loProj IN _VFP.Projects FOXOBJECT + loProj.Close() +ENDFOR + +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="1131721714" ObjRev="0" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1134205420" ID="1130644423" ObjRev="544" /> + * + + .ITEM('__newproject.f2b').Remove() + + * + .ITEM(lcCurdir + 'foxbin2prg.prg').Description = 'Conversor' + * + + * + * + + * + .ITEM(lcCurdir + 'config\config.fpw').Type = 'T' + * +ENDWITH + +WITH loProject + * + .SetMain(lcCurdir + 'foxbin2prg.prg') + .Debug = .T. + .Encrypted = .F. + *<.CmntStyle = 1 /> + *<.NoLogo = .F. /> + *<.SaveCode = .T. /> + .ProjectHookLibrary = '' + .ProjectHookClass = '' + * +ENDWITH + + +_VFP.Projects('foxbin2prg.pjx').Close() +*ERASE '__newproject.f2b' +CD (lcCurdir) +RETURN \ No newline at end of file diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 0aa6cc29f2d053479af6d388091933684d823421..f5e1a5017ba7cce413024bb86fc7becd7ef67515 100644 GIT binary patch delta 15186 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 W?Mc(qcl`Be%`0-E7e5oN3HpCwz*Im0 delta 12997 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 RGB7BZ7#o=zPR?RI0suFh4Z#2a delta 75 zcmZ3-vyO+wfR{&fBg=Lcc4G@eOEYuR$%j~~bs=mM1}Ja~QBZJG00L7JuvisHoRNV+ OLBY_-!gz8P>k$Au_6^7Y diff --git a/foxbin2prg.prg b/foxbin2prg.prg index f552519..d56f24b 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -279,7 +279,7 @@ IF _VFP.STARTMODE = 0 ENDIF *-- Muy útil para procesos batch que capturan el código de error -DECLARE ExitProcess in Win32API INTEGER ExitCode +DECLARE ExitProcess IN Win32API INTEGER ExitCode IF NOT EMPTY(lnResp) ExitProcess(1) ENDIF @@ -298,7 +298,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -317,13 +319,17 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + + [] ; + [] + *-- n_FB2PRG_Version = 1.16 *-- @@ -331,7 +337,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM c_CurDir = '' c_InputFile = '' c_LogFile = '' + c_TextLog = '' c_OutputFile = '' + c_Type = '' lFileMode = .F. l_Debug = .F. l_Test = .F. @@ -370,10 +378,13 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE DESTROY TRY LOCAL lcFileCDX - lcFileCDX = FORCEPATH( "TABLABIN.CDX", THIS.c_CurDir ) + lcFileCDX = FORCEPATH( "TABLABIN.CDX", JUSTPATH(THIS.c_InputFile) ) + IF FILE( lcFileCDX ) ERASE ( lcFileCDX ) ENDIF + + THIS.writeLog_Flush() CATCH ENDTRY @@ -403,7 +414,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL I, lcPath, lnResp, lcFileSpec, lcFile, laFiles(1,5), laConfig(1), lcConfigFile, lcExt ; , llExisteConfig, lcConfData, lnFileCount ; , loEx AS EXCEPTION ; - , loFSO as Scripting.FileSystemObject + , loFSO AS Scripting.FileSystemObject lnResp = 0 @@ -462,7 +473,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM DO CASE CASE '*' $ JUSTEXT( tc_InputFile ) OR '?' $ JUSTEXT( tc_InputFile ) IF THIS.l_ShowErrors - MESSAGEBOX( ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, 'FOXBIN2PRG: ERROR!!', 10000 ) + MESSAGEBOX( ASTERISK_EXT_NOT_ALLOWED_LOC, 0+48+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) ELSE ERROR ASTERISK_EXT_NOT_ALLOWED_LOC ENDIF @@ -541,7 +552,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CD (JUSTPATH(THIS.c_CurDir)) *SET PATH TO (lcPath) ENDTRY - + RETURN lnResp ENDPROC @@ -560,9 +571,9 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM TRY LOCAL lnCodError, lcErrorInfo, laDirFile(1,5), lcExtension ; - , loFSO as Scripting.FileSystemObject + , loFSO AS Scripting.FileSystemObject lnCodError = 0 - + WITH THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' loFSO = THIS.o_FSO .c_InputFile = FULLPATH( tc_InputFile ) @@ -586,7 +597,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM CATCH ENDTRY ENDIF - + lcExtension = UPPER( JUSTEXT(.c_InputFile) ) DO CASE @@ -659,6 +670,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDCASE + .c_Type = UPPER(JUSTEXT(.c_OutputFile)) .o_Conversor.c_InputFile = .c_InputFile .o_Conversor.c_OutputFile = .c_OutputFile .o_Conversor.c_LogFile = .c_LogFile @@ -669,9 +681,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.l_PropSort_Enabled = .l_PropSort_Enabled .o_Conversor.l_ReportSort_Enabled = .l_ReportSort_Enabled .o_Conversor.c_OriginalFileName = tcOriginalFileName + .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- .o_Conversor.Convertir( @toModulo ) - .o_Conversor = NULL + .c_TextLog = .c_TextLog + CR_LF + .o_Conversor.c_TextLog && Recojo el LOG que haya generado el conversor + .normalizarCapitalizacionArchivos() ENDWITH && THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' CATCH TO toEx @@ -690,15 +704,17 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.writeLog( lcErrorInfo ) ENDIF IF THIS.l_Debug AND THIS.l_ShowErrors - MESSAGEBOX( lcErrorInfo, 0+16+4096, 'FOXBIN2PRG: ERROR!!', 10000 ) + MESSAGEBOX( lcErrorInfo, 0+16+4096, 'FOXBIN2PRG: ERROR!!', 60000 ) ENDIF IF tlRelanzarError && Usado en Unit Testing THROW ENDIF FINALLY - loFSO = NULL - THIS.o_FSO = NULL + loFSO = NULL + THIS.o_FSO = NULL + THIS.o_Conversor = NULL + THIS.writeLog_Flush() ENDTRY @@ -706,15 +722,92 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + ******************************************************************************************************************* + PROCEDURE normalizarCapitalizacionArchivos + 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 + ']' ) + 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 + ']' ) + EXIT + ENDIF + + 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 ) + 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 ) + + CASE THIS.c_Type = 'MNX' + THIS.RenameFile( FORCEEXT(THIS.c_OutputFile,'MNT'), lcEXE_CAPS, loFSO ) + + ENDCASE + ENDTRY + + RETURN + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE RenameFile + LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS SCRIPTING.FileSystemObject + + LOCAL lcLog + THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) + lcLog = '' + DO (tcEXE_CAPS) WITH tcFileName, '', 'F', lcLog + toFSO.MoveFile( tcFileName, tcFileName ) + THIS.writeLog( ' => Se renombrará a [' + tcFileName + ']' ) + ENDPROC + + ******************************************************************************************************************* PROCEDURE writeLog LPARAMETERS tcText - IF THIS.l_Debug - TRY - STRTOFILE( TTOC(DATETIME(),3) + ' ' + EVL(tcText,'') + CR_LF, THIS.c_LogFile, 1 ) - CATCH - ENDTRY + TRY + THIS.c_TextLog = THIS.c_TextLog + TTOC(DATETIME(),3) + ' ' + EVL(tcText,'') + CR_LF + CATCH + ENDTRY + ENDPROC + + + ******************************************************************************************************************* + PROCEDURE writeLog_Flush + IF THIS.l_Debug AND NOT EMPTY(THIS.c_TextLog) + STRTOFILE( THIS.c_TextLog + CR_LF, THIS.c_LogFile, 1 ) + THIS.c_TextLog = '' ENDIF ENDPROC @@ -830,10 +923,12 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -841,6 +936,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] @@ -851,13 +947,16 @@ DEFINE CLASS c_conversor_base AS SESSION lFileMode = .T. nClassTimeStamp = '' n_FB2PRG_Version = 1.0 + c_Foxbin2prg_FullPath = '' c_Type = '' c_CurDir = '' c_LogFile = '' + c_TextLog = '' l_MethodSort_Enabled = .T. l_PropSort_Enabled = .T. l_ReportSort_Enabled = .T. c_OriginalFileName = '' + oFSO = NULL ******************************************************************************************************************* @@ -872,6 +971,7 @@ DEFINE CLASS c_conversor_base AS SESSION PUBLIC C_FB2PRG_CODE C_FB2PRG_CODE = '' && Contendrá todo el código generado THIS.c_CurDir = SYS(5) + CURDIR() + THIS.oFSO = CREATEOBJECT( "Scripting.FileSystemObject") ENDPROC @@ -1024,7 +1124,8 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* - FUNCTION comprobarExpresionValida( tcAsignacion, tnCodError, tcExpNormalizada ) + FUNCTION comprobarExpresionValida + LPARAMETERS tcAsignacion, tnCodError, tcExpNormalizada LOCAL llError, loEx AS EXCEPTION TRY @@ -2116,12 +2217,10 @@ DEFINE CLASS c_conversor_base AS SESSION PROCEDURE writeLog LPARAMETERS tcText - IF THIS.l_Debug - TRY - STRTOFILE( TTOC(DATETIME(),3) + ' ' + EVL(tcText,'') + CR_LF, THIS.c_LogFile, 1 ) - CATCH - ENDTRY - ENDIF + TRY + THIS.c_TextLog = THIS.c_TextLog + TTOC(DATETIME(),3) + ' ' + EVL(tcText,'') + CR_LF + CATCH + ENDTRY ENDPROC @@ -4034,7 +4133,10 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin TRY LOCAL lcObjName, lnCodError, I, X, loEx AS EXCEPTION ; , loClase AS CL_CLASE OF 'FOXBIN2PRG.PRG' ; - , loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' + , loObjeto AS CL_OBJETO OF 'FOXBIN2PRG.PRG' ; + , loFSO AS Scripting.FileSystemObject + + loFSO = THIS.oFSO *-- Creo el registro de cabecera THIS.createClasslib_RecordHeader() @@ -4590,7 +4692,6 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin , UPPER(JUSTSTEM(loFile._Name)) ) ENDFOR - USE IN (SELECT("TABLABIN")) @@ -5871,7 +5972,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin STORE '' TO lcIndex, lcFieldDef toDatabase.updateDBC( THIS.c_OutputFile ) - *USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) @@ -6035,7 +6135,6 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin STORE '' TO lcIndex, lcFieldDef toMenu.updateDBC( THIS.c_OutputFile ) - *USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) @@ -7986,7 +8085,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg SCATTER FIELDS NAME,TYPE,EXCLUDE,COMMENTS,CPID,TIMESTAMP,ID,OBJREV MEMO NAME loReg loReg.NAME = LOWER( ALLTRIM( loReg.NAME, 0, ' ', CHR(0) ) ) loReg.COMMENTS = CHRTRAN( ALLTRIM( loReg.COMMENTS, 0, ' ', CHR(0) ), ['], ["] ) - + *-- TIP: Si el "Name" del objeto está vacío, lo salteo IF EMPTY(loReg.NAME) LOOP @@ -9470,7 +9569,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE * tnProperty_Count (@! OUT) Cantidad de propiedades encontradas *--------------------------------------------------------------------------------------------------- LPARAMETERS tcName, tcType, taProperties, tnProperty_Count - + EXTERNAL ARRAY taProperties && STRUCTURE: PropName,RecordLen,DataIDLen,DataID,DataType,Data TRY @@ -9510,7 +9609,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE DO WHILE lnLastPos < LEN(laProperty(1,1)) tnProperty_Count = tnProperty_Count + 1 DIMENSION taProperties( tnProperty_Count,6 ) - + lnRecordLen = CTOBIN( SUBSTR(laProperty(1,1), lnLastPos, 4), "4RS" ) lcBinRecord = SUBSTR(laProperty(1,1), lnLastPos, lnRecordLen) lnLenCCode = CTOBIN( SUBSTR(lcBinRecord, 4+1, 2), "2RS" ) @@ -9549,7 +9648,7 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE leValue = LEFT( lcValue, AT( CHR(0), lcValue ) - 1 ) ENDIF ENDCASE - + taProperties( tnProperty_Count,1 ) = lcPropName taProperties( tnProperty_Count,2 ) = lnRecordLen taProperties( tnProperty_Count,3 ) = lnLenCCode From 3f4d8acb4eb12b338978e2f42c0efa9a245a84b1 Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 26 Dec 2013 21:03:55 +0100 Subject: [PATCH 08/21] =?UTF-8?q?Changeset:=20112=20-=20Arreglos=20en=20ge?= =?UTF-8?q?neraci=C3=B3n=20PJX=20(nueva=20propiedad=20HomeDir)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 16 ++++++++------- foxbin2prg.pjt | Bin 275715 -> 276276 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 53 ++++++++++++++++++++++++++++++++++++------------- 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index e448b63..93c6094 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -2,7 +2,7 @@ * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- -*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2013/12/26 19:21:19" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2013/12/26 21:00:42" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * LPARAMETERS tcDir @@ -26,21 +26,23 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "16" -_Revision = " 127" +_Revision = " 130" _LanguageID = "1034" _AutoIncrement = "1" * * -FOR EACH loProj IN _VFP.Projects FOXOBJECT - loProj.Close() +*<.HomeDir = 'c:\desa\foxbin2prg' /> + +FOR EACH loProject IN _VFP.Projects FOXOBJECT + loProject.Close() ENDFOR STRTOFILE( '', '__newproject.f2b' ) BUILD PROJECT foxbin2prg.pjx FROM '__newproject.f2b' -FOR EACH loProj IN _VFP.Projects FOXOBJECT - loProj.Close() +FOR EACH loProject IN _VFP.Projects FOXOBJECT + loProject.Close() ENDFOR MODIFY PROJECT 'foxbin2prg.pjx' NOWAIT NOSHOW NOPROJECTHOOK @@ -49,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="1134205420" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1134208850" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index f5e1a5017ba7cce413024bb86fc7becd7ef67515..ca98681eb95e181cfae2d1b031fcd3066fc8b768 100644 GIT binary patch delta 12954 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] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -1586,6 +1587,20 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC + ************************************************************************************************ + PROCEDURE get_ValueFromNullTerminatedValue + LPARAMETERS tcNullTerminatedValue + LOCAL lcValue, lnNullPos + lnNullPos = AT(CHR(0), tcNullTerminatedValue ) + IF lnNullPos = 0 + lcValue = CHRTRAN( tcNullTerminatedValue, ['], ["] ) + ELSE + lcValue = CHRTRAN( LEFT( tcNullTerminatedValue, lnNullPos - 1 ), ['], ["] ) + ENDIF + RETURN lcValue + ENDPROC + + ******************************************************************************************************************* PROCEDURE identificarBloquesDeCodigo LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toModulo @@ -4625,13 +4640,15 @@ 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, ['], [] ) + *-- Creo solo el registro de cabecera del proyecto THIS.createProject_RecordHeader( toProject ) lcMainProg = '' IF NOT EMPTY(toProject._MainProg) - lcMainProg = LOWER( SYS(2014, toProject._MainProg, ADDBS(JUSTPATH(toProject._HomeDir)) ) ) + lcMainProg = LOWER( SYS(2014, toProject._MainProg, ADDBS(toProject._HomeDir) ) ) ENDIF *-- Si hay ProjectHook de proyecto, lo inserto @@ -4742,7 +4759,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin IF tnCodeLines > 1 toProject = CREATEOBJECT('CL_PROJECT') - toProject._HomeDir = ADDBS(JUSTPATH(THIS.c_OutputFile)) + *toProject._HomeDir = ADDBS(JUSTPATH(THIS.c_OutputFile)) WITH THIS FOR I = 1 TO tnCodeLines @@ -4853,6 +4870,10 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin loFile._ObjRev = .get_ValueByName_FromListNamesWithValues( 'ObjRev', 'I', @laPropsAndValues ) toProject.ADD( loFile, loFile._Name ) + + CASE UPPER( LEFT( tcLine, 10 ) ) == UPPER( '*<.HomeDir' ) + toProject._HomeDir = STREXTRACT( tcLine, "'", "'" ) + ENDCASE ENDFOR ENDWITH && THIS @@ -8048,7 +8069,8 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg *-- Obtengo los archivos del proyecto loProject = CREATEOBJECT('CL_PROJECT') SCATTER MEMO NAME loReg - loProject._HomeDir = ALLTRIM( loReg.HOMEDIR ) + loProject._HomeDir = ['] + ALLTRIM( THIS.get_ValueFromNullTerminatedValue( loReg.HOMEDIR ) ) + ['] + loProject._ServerInfo = loReg.RESERVED2 loProject._Debug = loReg.DEBUG loProject._Encrypted = loReg.ENCRYPT @@ -8059,7 +8081,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg LOCATE FOR MAINPROG IF FOUND() - loProject._MainProg = LOWER( ALLTRIM( NAME, 0, ' ', CHR(0) ) ) + loProject._MainProg = LOWER( ALLTRIM( THIS.get_ValueFromNullTerminatedValue( NAME ) ) ) ENDIF @@ -8067,8 +8089,8 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg LOCATE FOR TYPE == 'W' IF FOUND() - loProject._ProjectHookLibrary = LOWER( ALLTRIM( NAME, 0, ' ', CHR(0) ) ) - loProject._ProjectHookClass = LOWER( ALLTRIM( RESERVED1, 0, ' ', CHR(0) ) ) + loProject._ProjectHookLibrary = LOWER( ALLTRIM( THIS.get_ValueFromNullTerminatedValue( NAME ) ) ) + loProject._ProjectHookClass = LOWER( ALLTRIM( THIS.get_ValueFromNullTerminatedValue( RESERVED1 ) ) ) ENDIF @@ -8076,15 +8098,15 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg LOCATE FOR TYPE == 'i' IF FOUND() - loProject._Icon = LOWER( ALLTRIM( NAME, 0, ' ', CHR(0) ) ) + 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 - loReg.NAME = LOWER( ALLTRIM( loReg.NAME, 0, ' ', CHR(0) ) ) - loReg.COMMENTS = CHRTRAN( ALLTRIM( loReg.COMMENTS, 0, ' ', CHR(0) ), ['], ["] ) + loReg.NAME = LOWER( ALLTRIM( THIS.get_ValueFromNullTerminatedValue( loReg.NAME ) ) ) + loReg.COMMENTS = ALLTRIM( THIS.get_ValueFromNullTerminatedValue( loReg.COMMENTS ) ) *-- TIP: Si el "Name" del objeto está vacío, lo salteo IF EMPTY(loReg.NAME) @@ -8128,8 +8150,10 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg *-- Generación del proyecto TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> - FOR EACH loProj IN _VFP.Projects FOXOBJECT - <<>> loProj.Close() + <<>>*<.HomeDir = <> /> + <<>> + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() ENDFOR <<>> STRTOFILE( '', '__newproject.f2b' ) @@ -8139,8 +8163,8 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg *-- Abro el proyecto TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - FOR EACH loProj IN _VFP.Projects FOXOBJECT - <<>> loProj.Close() + FOR EACH loProject IN _VFP.Projects FOXOBJECT + <<>> loProject.Close() ENDFOR <<>> MODIFY PROJECT '<>' NOWAIT NOSHOW NOPROJECTHOOK @@ -9273,7 +9297,8 @@ DEFINE CLASS CL_PROJECT AS CL_COL_BASE PROCEDURE setParsedInfoLine LPARAMETERS toObject, tcInfoLine LOCAL lcAsignacion, lcCurDir - lcCurDir = ADDBS(JUSTPATH(THIS._SourceFile)) + *lcCurDir = ADDBS(JUSTPATH(THIS._SourceFile)) + lcCurDir = ADDBS(THIS._HomeDir) IF LEFT(tcInfoLine,1) == '.' lcAsignacion = 'toObject' + tcInfoLine ELSE From bf101ef41e8fe1f97108d6c210421d3c2d6e64ee Mon Sep 17 00:00:00 2001 From: fernando Date: Fri, 27 Dec 2013 00:25:35 +0100 Subject: [PATCH 09/21] Changeset: 113 - Condicionada la sobreescritura de los TXT (2) solo cuando el contenido sea distinto - Agregado soporte de Debug con archivo LOG bandera --- foxbin2prg.pj2 | 6 ++-- foxbin2prg.pjt | Bin 276276 -> 277794 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 95 +++++++++++++++++++++++++++++++++---------------- 4 files changed, 67 insertions(+), 34 deletions(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 93c6094..738808e 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -2,7 +2,7 @@ * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- -*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2013/12/26 21:00:42" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2013/12/27 00:21:18" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * LPARAMETERS tcDir @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "16" -_Revision = " 130" +_Revision = " 137" _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="1134208850" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1134231778" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index ca98681eb95e181cfae2d1b031fcd3066fc8b768..93d38b90bce607ca4be85fcd870651e0c24f3e77 100644 GIT binary patch delta 16646 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 delta 15107 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 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 396ec49f8a09d0b9c4a0688b583772e229708f6a..cea648327c9b8d06c8ca5042e9308f6b75541e9a 100644 GIT binary patch delta 33 ncmZ3-vyO+wfR{&lBg;+}R%1g8bK}W}SZaYRb90NyF08Krk5CB( delta 33 pcmZ3-vyO+wfR{&VBg;+}Rs%}|V}r?uSZY}fEG$e7CcCh{0sxMQ2=xE} diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 72ada43..5267ef7 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -446,7 +446,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM *-- Ejecución normal THIS.l_ShowProgress = NOT (TRANSFORM(tcDontShowProgress)=='1') THIS.l_ShowErrors = NOT (TRANSFORM(tcDontShowErrors) == '1') - THIS.l_Debug = (TRANSFORM(tcDebug)=='1') + THIS.l_Debug = (TRANSFORM(tcDebug)=='1' OR FILE(FORCEEXT(THIS.c_Foxbin2prg_FullPath,'LOG'))) IF THIS.l_ShowProgress THIS.o_Frm_Avance = CREATEOBJECT("frm_avance") @@ -786,7 +786,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM LOCAL lcLog THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) lcLog = '' - DO (tcEXE_CAPS) WITH tcFileName, '', 'F', lcLog + DO (tcEXE_CAPS) WITH tcFileName, '', 'F', lcLog, .T. toFSO.MoveFile( tcFileName, tcFileName ) THIS.writeLog( ' => Se renombrará a [' + tcFileName + ']' ) ENDPROC @@ -7253,8 +7253,11 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base ******************************************************************************************************************* PROCEDURE write_PROGRAM_HEADER + LOCAL lcText + lcText = '' + *-- Cabecera del PRG e inicio de DEF_CLASS - TEXT TO C_FB2PRG_CODE ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2 *-------------------------------------------------------------------------------------------------------------------------------------------------------- * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! @@ -7262,6 +7265,8 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base <> Version="<>" SourceFile="<>" Generated="<>" <> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * ENDTEXT + + RETURN lcText ENDPROC @@ -7765,7 +7770,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1) ; + LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) STORE 0 TO lnCodError, lnLastClass STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) @@ -7776,7 +7781,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg INDEX ON PADR(LOWER(PLATFORM + IIF(EMPTY(PARENT),'',ALLTRIM(PARENT)+'.')+OBJNAME),240) TAG PARENT_OBJ OF TABLABIN ADDITIVE SET ORDER TO 0 IN TABLABIN - THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() THIS.get_NombresObjetosOLEPublic( @la_NombresObjsOle ) @@ -7856,9 +7861,13 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - IF STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 + lnLen = LEN( THIS.write_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.' ) + CASE STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ENDIF + ENDCASE ENDIF @@ -7900,7 +7909,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1) ; + LOCAL lnCodError, loRegClass, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) STORE 0 TO lnCodError, lnLastClass STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) @@ -7914,7 +7923,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg *toModulo = NULL *toModulo = CREATEOBJECT('CL_MODULO') - THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() THIS.get_NombresObjetosOLEPublic( @la_NombresObjsOle ) @@ -8013,9 +8022,13 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - IF STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 + lnLen = LEN( THIS.write_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.' ) + CASE STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ENDIF + ENDCASE ENDIF @@ -8055,7 +8068,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo ; + LOCAL lnCodError, lcStr, lnPos, lnLen, lnServerCount, loReg, lcDevInfo, lnLen ; , loEx AS EXCEPTION ; , loProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' ; , loServerHead AS CL_PROJ_SRV_HEAD OF 'FOXBIN2PRG.PRG' ; @@ -8121,7 +8134,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg ENDSCAN - THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() *-- Directorio de inicio @@ -8308,9 +8321,13 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - IF STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 + lnLen = LEN( THIS.write_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.' ) + CASE STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ENDIF + ENDCASE *COMPILE ( THIS.c_outputFile ) ENDIF @@ -8355,7 +8372,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1) ; + LOCAL lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1), lnLen ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) STORE 0 TO lnCodError, lnLastClass STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) @@ -8398,7 +8415,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg USE IN (SELECT("TABLABIN_0")) - THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() *-- Recorro los registros y genero el texto IF VARTYPE(loRegCab) = "O" @@ -8425,9 +8442,13 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - IF STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 + lnLen = LEN( THIS.write_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.' ) + CASE STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ENDIF + ENDCASE ENDIF @@ -8466,7 +8487,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1) ; + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen ; , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name LOCAL loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' STORE 0 TO lnCodError @@ -8475,7 +8496,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg THIS.getDBFmetadata( THIS.c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN - THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() *-- Header loTable = CREATEOBJECT('CL_DBF_TABLE') @@ -8486,9 +8507,13 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - IF STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 + lnLen = LEN( THIS.write_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.' ) + CASE STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ENDIF + ENDCASE ENDIF @@ -8539,7 +8564,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1) ; + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen ; , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name STORE 0 TO lnCodError @@ -8548,7 +8573,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN OPEN DATABASE (THIS.c_InputFile) SHARED NOUPDATE - THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() *-- Header toDatabase = CREATEOBJECT('CL_DBC') @@ -8559,9 +8584,13 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - IF STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 + lnLen = LEN( THIS.write_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.' ) + CASE STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ENDIF + ENDCASE ENDIF @@ -8604,7 +8633,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1) ; + LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen ; , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name STORE 0 TO lnCodError @@ -8613,7 +8642,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN OPEN DATABASE (THIS.c_InputFile) SHARED NOUPDATE - THIS.write_PROGRAM_HEADER() + C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() *-- Header toDatabase = CREATEOBJECT('CL_DBC') @@ -8624,9 +8653,13 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE - IF STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 + lnLen = LEN( THIS.write_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.' ) + CASE STRTOFILE( C_FB2PRG_CODE, THIS.c_OutputFile ) = 0 ERROR 'No se puede generar el archivo [' + THIS.c_OutputFile + '] porque es ReadOnly' - ENDIF + ENDCASE ENDIF From d78889224dcf550e66e6669bc737436661edf94e Mon Sep 17 00:00:00 2001 From: fernando Date: Sat, 28 Dec 2013 12:50:16 +0100 Subject: [PATCH 10/21] Changeset: 114 Menu a PRG --- foxbin2prg.prg | 614 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 585 insertions(+), 29 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5267ef7..69e0adb 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -192,6 +192,18 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro #DEFINE C_INDEX_F '' #DEFINE C_INDEXES_I '' #DEFINE C_INDEXES_F '' +#DEFINE C_MENU_I '' +#DEFINE C_MENU_F '' +#DEFINE C_OPTION_I '' +#DEFINE C_BARPOP_I '' +#DEFINE C_BARPOP_F '' +#DEFINE C_SETUPCODE_I '*' +#DEFINE C_SETUPCODE_F '*' +#DEFINE C_CLEANUPCODE_I '*' +#DEFINE C_CLEANUPCODE_F '*' +#DEFINE C_MENUCODE_I '*' +#DEFINE C_MENUCODE_F '*' *-- #DEFINE C_TAB CHR(9) #DEFINE C_CR CHR(13) @@ -391,7 +403,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC - PROCEDURE Ejecutar + PROCEDURE ejecutar *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_InputFile (!v IN ) Nombre del archivo de entrada @@ -726,7 +738,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE normalizarCapitalizacionArchivos TRY LOCAL lcPath, lcEXE_CAPS, lcOutputFile ; - , loFSO AS SCRIPTING.FileSystemObject + , loFSO AS Scripting.FileSystemObject lcPath = JUSTPATH(THIS.c_Foxbin2prg_FullPath) lcEXE_CAPS = FORCEPATH( 'filename_caps.exe', lcPath ) loFSO = THIS.o_FSO @@ -781,7 +793,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ******************************************************************************************************************* PROCEDURE RenameFile - LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS SCRIPTING.FileSystemObject + LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS Scripting.FileSystemObject LOCAL lcLog THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) @@ -4873,7 +4885,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin CASE UPPER( LEFT( tcLine, 10 ) ) == UPPER( '*<.HomeDir' ) toProject._HomeDir = STREXTRACT( tcLine, "'", "'" ) - + ENDCASE ENDFOR ENDWITH && THIS @@ -6144,7 +6156,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE escribirArchivoBin - LPARAMETERS toDatabase + LPARAMETERS toMenu *-- ----------------------------------------------------------------------------------------------------------- #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' @@ -6155,7 +6167,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin lnCodError = 0 STORE '' TO lcIndex, lcFieldDef - toMenu.updateDBC( THIS.c_OutputFile ) + toMenu.updateMENU( THIS.c_OutputFile ) *USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) @@ -6200,8 +6212,8 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) IF tnCodeLines > 1 - toDatabase = NULL - toDatabase = CREATEOBJECT('CL_DBC') + toMenu = NULL + toMenu = CREATEOBJECT('CL_MENU') WITH THIS FOR I = 1 TO tnCodeLines @@ -6215,7 +6227,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) llFoxBin2Prg_Completed = .T. - CASE NOT llBloqueDatabase_Completed AND toDatabase.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llBloqueDatabase_Completed AND toMenu.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines ) llBloqueDatabase_Completed = .T. ENDCASE @@ -8083,7 +8095,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg loProject = CREATEOBJECT('CL_PROJECT') SCATTER MEMO NAME loReg loProject._HomeDir = ['] + ALLTRIM( THIS.get_ValueFromNullTerminatedValue( loReg.HOMEDIR ) ) + ['] - + loProject._ServerInfo = loReg.RESERVED2 loProject._Debug = loReg.DEBUG loProject._Encrypted = loReg.ENCRYPT @@ -8622,36 +8634,33 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto + * totoMenu (@! OUT) Objeto generado de clase CL_MENU con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- - LPARAMETERS toDatabase, toEx AS EXCEPTION - DODEFAULT( @toDatabase, @toEx ) + LPARAMETERS toMenu, toEx AS EXCEPTION + DODEFAULT( @toMenu, @toEx ) #IF .F. - LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen ; - , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name + LOCAL lnCodError, lnLen STORE 0 TO lnCodError - lnDatabases_Count = ADATABASES(laDatabases) - THIS.getDBFmetadata( THIS.c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN - OPEN DATABASE (THIS.c_InputFile) SHARED NOUPDATE - - C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() *-- Header - toDatabase = CREATEOBJECT('CL_DBC') - C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() + C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() + + toMenu = CREATEOBJECT('CL_MENU') + toMenu.get_Data() + C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() *-- Genero el DC2 IF THIS.l_Test - toModulo = C_FB2PRG_CODE + toMenu = C_FB2PRG_CODE ELSE lnLen = LEN( THIS.write_PROGRAM_HEADER() ) DO CASE @@ -8672,7 +8681,6 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) - CLOSE DATABASES ENDTRY @@ -8775,8 +8783,8 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * taConnections (@? OUT) Array de conexiones - * tnConnection_Count (@? OUT) Cantidad de conexiones + * taArray (@? OUT) Array de conexiones + * tnArray_Count (@? OUT) Cantidad de conexiones *--------------------------------------------------------------------------------------------------- ENDPROC @@ -8835,8 +8843,8 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * taConnections (@? OUT) Array de conexiones - * tnConnection_Count (@? OUT) Cantidad de conexiones + * taArray (@? OUT) Array de conexiones + * tnArray_Count (@? OUT) Cantidad de conexiones *--------------------------------------------------------------------------------------------------- ENDPROC ENDDEFINE @@ -13852,3 +13860,551 @@ DEFINE CLASS CL_PROJ_FILE AS CL_CUS_BASE _TimeStamp = 0 ENDDEFINE + + +******************************************************************************************************************* +DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE + _MEMBERDATA = [] ; + + [] ; + + [] ; + + [] ; + + [] + + + #IF .F. + LOCAL THIS AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + #ENDIF + + oReg = NULL + + + PROCEDURE get_Data + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toReg (v! IN ) Objeto de datos del registro + * toCol_LastLevelName (v! IN ) Objeto collection con la pila de niveles analizados + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toReg, toCol_LastLevelName AS COLLECTION + + TRY + LOCAL I, lcLevelName, lnLastKey, llRetorno, llHayDatos, loReg ; + , 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 ) ) + + IF lnLastKey = 0 + toCol_LastLevelName.ADD( toReg.LevelName, toReg.LevelName ) + ENDIF + + DO WHILE NOT EOF() + loReg = NULL + SKIP 1 + + IF EOF() + EXIT + ENDIF + + SCATTER MEMO NAME loReg + + IF EMPTY(loReg.NAME) + loReg.NAME = SYS(2015) + ENDIF + + 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 = 2 && Bar or Popup + loBarPop = CREATEOBJECT('CL_MENU_BARPOP') + llHayDatos = loBarPop.get_Data( loReg, toCol_LastLevelName ) + llRetorno = .T. + llRetorno = llHayDatos + THIS.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_Data( loReg, toCol_LastLevelName ) + llRetorno = llHayDatos + THIS.ADD( loOption ) + loOption = NULL + IF NOT llHayDatos AND toReg.ObjType = 3 + EXIT + ENDIF + + OTHERWISE + llRetorno = .T. + EXIT + + ENDCASE + ENDDO + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + STORE NULL TO loBarPop, loOption + IF toReg.ObjType = 2 + lnLastKey = toCol_LastLevelName.GETKEY(toReg.LevelName) + IF lnLastKey > 0 + toCol_LastLevelName.REMOVE(lnLastKey) + ENDIF + ENDIF + ENDTRY + + RETURN llRetorno + ENDPROC + + + PROCEDURE updateMENU + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tc_InputFile (v! IN ) Nombre del archivo de salida + *--------------------------------------------------------------------------------------------------- + ENDPROC + + +ENDDEFINE + + +******************************************************************************************************************* +DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE + #IF .F. + LOCAL THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' + #ENDIF + + _MEMBERDATA = [] ; + + [] ; + + [] ; + + [] ; + + [] + + + *-- Modulo + _Version = 0 + _SourceFile = '' + + + PROCEDURE INIT + DODEFAULT() + *-- + *THIS.ADDOBJECT("_Options", "CL_MENU_OPTIONS") + ENDPROC + + + PROCEDURE analizarBloque + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + TRY + LOCAL loOptions AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION + STORE '' TO lcPropName, lcValue + + IF LEFT(tcLine, LEN(C_MENU_I)) == C_MENU_I + llBloqueEncontrado = .T. + + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE EMPTY( tcLine ) + LOOP + + CASE C_MENU_F $ tcLine && Fin + EXIT + + CASE C_BARPOP_I $ tcLine + loOption = CREATEOBJECT("CL_MENU_OPTION") + loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + THIS.ADD( loOption, loOption._Name ) + + *CASE C_BARPOP_I $ tcLine + * loOptions = THIS._Options + * loOptions.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 + ENDIF + + CATCH TO loEx + IF loEx.ERRORNO = 1470 && Incorrect property name. + loEx.USERVALUE = 'I=' + TRANSFORM(I) + ', PropName=[' + TRANSFORM(lcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' + ENDIF + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tc_InputFile (v! IN ) Nombre del archivo de salida + *--------------------------------------------------------------------------------------------------- + *LPARAMETERS tn_HexFileType, tl_FileHasCDX, tl_FileHasMemo, tl_FileIsDBC, tc_DBC_Name, tc_InputFile + + *EXTERNAL ARRAY taOptions + + TRY + LOCAL lcText, lcLastLevelName ; + , loEx AS EXCEPTION ; + , loReg ; + , loCol_LastLevelName AS COLLECTION ; + , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; + , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + + STORE '' TO lcText, lcLastLevelName + loReg = THIS.oReg + loBarPop = THIS.Item(1) + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <> + <> + <> + <<>> + <> + ENDTEXT + + *-- Bars and Popups + IF THIS.COUNT > 0 + FOR EACH loBarPop IN THIS FOXOBJECT + lcText = lcText + loBarPop.toText() + ENDFOR + ENDIF + + IF NOT EMPTY(loReg.Procedure) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + ON SELECTION MENU <> <> + ENDTEXT + ENDIF + + IF NOT EMPTY(loBarPop.oReg.Procedure) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + ON SELECTION POPUP ALL <> + ENDTEXT + ENDIF + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <<>> + <> + <> + <> + <<>> + ENDTEXT + + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lcText + ENDPROC + + + PROCEDURE get_Data + LOCAL loReg, loCol_LastLevelName AS COLLECTION + GO TOP + SCATTER MEMO NAME loReg + loCol_LastLevelName = CREATEOBJECT('COLLECTION') + CL_MENU_COL_BASE::get_Data( loReg, loCol_LastLevelName ) + STORE NULL TO loReg, loCol_LastLevelName + ENDPROC + + + PROCEDURE updateMENU + ENDPROC + + +ENDDEFINE + + +******************************************************************************************************************* +DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE + _MEMBERDATA = [] ; + + [] ; + + [] + + #IF .F. + LOCAL THIS AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + #ENDIF + + + PROCEDURE analizarBloque + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + TRY + LOCAL loOption AS CL_MENU_OPTIONS OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION + STORE '' TO lcPropName, lcValue + + IF LEFT(tcLine, LEN(C_BARPOP_I)) == C_BARPOP_I + llBloqueEncontrado = .T. + + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE EMPTY( tcLine ) + LOOP + + CASE C_BARPOP_F $ tcLine && Fin + EXIT + + *CASE C_OPTION_I $ tcLine + * loOption = CREATEOBJECT("CL_MENU_OPTION") + * loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + * THIS.ADD( loOption, loOption._Name ) + + OTHERWISE && Otro valor + *-- Estructura a reconocer: + * ID + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDIF + + CATCH TO loEx + IF loEx.ERRORNO = 1470 && Incorrect property name. + loEx.USERVALUE = 'I=' + TRANSFORM(I) + ', tcLine=' + TRANSFORM(tcLine) + ENDIF + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * taOptions (@? OUT) Array de información de campos + * tnOption_Count (@? OUT) Cantidad de campos + *--------------------------------------------------------------------------------------------------- + *LPARAMETERS taOptions, tnOption_Count + + *EXTERNAL ARRAY taOptions + + TRY + LOCAL loReg, I, lcText, loEx AS EXCEPTION ; + , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; + , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + lcText = '' + loReg = THIS.oReg + + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> BARS Y POPUPS + ENDTEXT + + *-- Options + IF THIS.COUNT > 0 + FOR EACH loOption IN THIS FOXOBJECT + lcText = lcText + loOption.toText() + ENDFOR + ENDIF + + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lcText + ENDPROC + + + PROCEDURE updateMENU + ENDPROC + + +ENDDEFINE + + +DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE + _MEMBERDATA = [] ; + + [] ; + + [] + + #IF .F. + LOCAL THIS AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + #ENDIF + + + PROCEDURE analizarBloque + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + TRY + *LOCAL loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION + STORE '' TO lcPropName, lcValue + + IF LEFT(tcLine, LEN(C_OPTION_I)) == C_OPTION_I + llBloqueEncontrado = .T. + + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE EMPTY( tcLine ) + LOOP + + CASE C_OPTION_F $ tcLine && Fin + EXIT + + *CASE C_OPTION_I $ tcLine + * loOption = CREATEOBJECT("CL_MENU_OPTION") + * loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + * THIS.ADD( loOption, loOption._Name ) + + OTHERWISE && Otro valor + *-- Estructura a reconocer: + * ID + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDIF + + CATCH TO loEx + IF loEx.ERRORNO = 1470 && Incorrect property name. + loEx.USERVALUE = 'I=' + TRANSFORM(I) + ', tcLine=' + TRANSFORM(tcLine) + ENDIF + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * taOptions (@? OUT) Array de información de campos + * tnOption_Count (@? OUT) Cantidad de campos + *--------------------------------------------------------------------------------------------------- + *LPARAMETERS taOptions, tnOption_Count + + *EXTERNAL ARRAY taOptions + + TRY + LOCAL loReg, I, lcText, loEx AS EXCEPTION ; + , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; + , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + lcText = '' + loReg = THIS.oReg + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> Options + ENDTEXT + + *-- Bars and Popups + IF THIS.COUNT > 0 + FOR EACH loBarPop IN THIS FOXOBJECT + lcText = lcText + loBarPop.toText() + ENDFOR + ENDIF + + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lcText + ENDPROC + + + PROCEDURE updateMENU + ENDPROC + + +ENDDEFINE + + From 48a3f1edcac9fbd19ea0f4dff7157d6503c7b641 Mon Sep 17 00:00:00 2001 From: fernando Date: Sat, 28 Dec 2013 21:22:17 +0100 Subject: [PATCH 11/21] Changeset: 115 Ajustes finales para Menu a Texto --- foxbin2prg.prg | 237 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 203 insertions(+), 34 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 69e0adb..6825ae0 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -13928,6 +13928,13 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE 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_Data( loReg, toCol_LastLevelName ) @@ -14082,21 +14089,18 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_InputFile (v! IN ) Nombre del archivo de salida *--------------------------------------------------------------------------------------------------- - *LPARAMETERS tn_HexFileType, tl_FileHasCDX, tl_FileHasMemo, tl_FileIsDBC, tc_DBC_Name, tc_InputFile - - *EXTERNAL ARRAY taOptions TRY - LOCAL lcText, lcLastLevelName ; + LOCAL lcText, lcLastLevelName, loReg, lnNivel ; , loEx AS EXCEPTION ; - , loReg ; , loCol_LastLevelName AS COLLECTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' STORE '' TO lcText, lcLastLevelName loReg = THIS.oReg - loBarPop = THIS.Item(1) + loBarPop = THIS.ITEM(1) + lnNivel = 0 TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -14110,17 +14114,19 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE *-- Bars and Popups IF THIS.COUNT > 0 FOR EACH loBarPop IN THIS FOXOBJECT - lcText = lcText + loBarPop.toText() + lcText = lcText + loBarPop.toText(loReg, lnNivel+0) ENDFOR ENDIF - IF NOT EMPTY(loReg.Procedure) + *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) + IF NOT EMPTY(loReg.PROCEDURE) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 ON SELECTION MENU <> <> ENDTEXT ENDIF - IF NOT EMPTY(loBarPop.oReg.Procedure) + *-- Procedimiento del Menu Bar (ObjType:2, ObjCode:1) + IF NOT EMPTY(loBarPop.oReg.PROCEDURE) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 ON SELECTION POPUP ALL <> ENDTEXT @@ -14240,30 +14246,32 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * taOptions (@? OUT) Array de información de campos - * tnOption_Count (@? OUT) Cantidad de campos + * toParentReg (v? IN ) Objeto registro Padre + * tnNivel (v? IN ) Nivel para indentar *--------------------------------------------------------------------------------------------------- - *LPARAMETERS taOptions, tnOption_Count - - *EXTERNAL ARRAY taOptions + LPARAMETERS toParentReg, tnNivel TRY - LOCAL loReg, I, lcText, loEx AS EXCEPTION ; + LOCAL loReg, I, lcText, lcTab, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' lcText = '' loReg = THIS.oReg + lcTab = REPLICATE(CHR(9),tnNivel) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> BARS Y POPUPS - ENDTEXT + *-- Menu Bar or Popup (ObjType:2, ObjCode:0 ó 1) + IF loReg.OBJCODE=0 && (Menu Pad) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <>*---------------------------------- + <>DEFINE POPUP <> MARGIN RELATIVE SHADOW COLOR SCHEME <> + ENDTEXT + ENDIF - *-- Options + *-- Options (ObjType:3) IF THIS.COUNT > 0 FOR EACH loOption IN THIS FOXOBJECT - lcText = lcText + loOption.toText() + lcText = lcText + loOption.toText(loReg, tnNivel+0) ENDFOR ENDIF @@ -14290,7 +14298,8 @@ ENDDEFINE DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE _MEMBERDATA = [] ; - + [] ; + + [] ; + + [] ; + [] #IF .F. @@ -14361,29 +14370,54 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * taOptions (@? OUT) Array de información de campos - * tnOption_Count (@? OUT) Cantidad de campos + * toParentReg (v? IN ) Objeto registro Padre + * tnNivel (v? IN ) Nivel para indentar *--------------------------------------------------------------------------------------------------- - *LPARAMETERS taOptions, tnOption_Count - - *EXTERNAL ARRAY taOptions + LPARAMETERS toParentReg, tnNivel TRY - LOCAL loReg, I, lcText, loEx AS EXCEPTION ; + LOCAL loReg, I, lcText, lcTab, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' lcText = '' loReg = THIS.oReg + lcTab = REPLICATE(CHR(9),tnNivel) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <<>> - <<>> Options - ENDTEXT + *-- Options (ObjType:3) + DO CASE + CASE loReg.OBJCODE=67 && Command + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + ENDTEXT - *-- Bars and Popups + CASE loReg.OBJCODE=77 && Submenu + IF toParentReg.ObjType=2 AND toParentReg.OBJCODE=0 + *-- Define Bar + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + ENDTEXT + ELSE && Define Pad + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + ENDTEXT + ENDIF + + CASE loReg.OBJCODE=78 && BAR# + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + ENDTEXT + + CASE loReg.OBJCODE=80 && Procedure + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + ENDTEXT + + ENDCASE + + *-- Menu Bar or Popup (ObjType:2, ObjCode:0 ó 1) IF THIS.COUNT > 0 FOR EACH loBarPop IN THIS FOXOBJECT - lcText = lcText + loBarPop.toText() + lcText = lcText + loBarPop.toText(loReg, tnNivel+1) ENDFOR ENDIF @@ -14401,6 +14435,141 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDPROC + PROCEDURE get_DefineBarText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toReg (v? IN ) Objeto registro + * toBarPop (v? IN ) Bar o Popup hijo + * tnNivel (v? IN ) Nivel para indentar + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toReg, toBarPop, tnNivel + + TRY + LOCAL lcText, lcTab, loEx as Exception + lcTab = REPLICATE(CHR(9),tnNivel) + + *-- DEFINE BAR + lcText = lcTab + '*----------------------------------' + CR_LF + lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' PROMPT "' + toReg.PROMPT + '"' + + IF NOT EMPTY(toReg.KeyName) + lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KeyName + ', "' + toReg.KeyLabel + '"' + ENDIF + + IF NOT EMPTY(toReg.SKIPFOR) + lcText = lcText + ' ;' + CR_LF + lcTab + ' SKIP FOR ' + toReg.SKIPFOR + ENDIF + + IF NOT EMPTY(toReg.ResName) + IF toReg.SysRes = 1 + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES "' + toReg.ResName + '"' + ELSE + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.ResName + '"' + ENDIF + ENDIF + + IF NOT EMPTY(toReg.MESSAGE) + lcText = lcText + ' ;' + CR_LF + lcTab + ' MESSAGE ' + toReg.MESSAGE + ENDIF + + IF NOT EMPTY(toReg.COMMENT) + lcText = lcText + ' &' + '& ' + toReg.COMMENT + ENDIF + + *-- ON BAR + IF toReg.OBJCODE <> 78 + lcText = lcText + CR_LF + lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' ACTIVATE POPUP ' + ALLTRIM(toReg.Name) && VER ESTO + ENDIF + + lcText = lcText + CR_LF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lcText + ENDPROC + + + PROCEDURE get_DefinePadText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toReg (v? IN ) Objeto registro + * toBarPop (v? IN ) Bar o Popup hijo + * tnNivel (v? IN ) Nivel para indentar + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toReg, toBarPop, tnNivel + + TRY + LOCAL lcText, lcTab, lnContainer, lnObject, loEx as Exception + lcTab = REPLICATE(CHR(9),tnNivel) + + *-- DEFINE PAD + lcText = lcTab + '*----------------------------------' + CR_LF + lcText = lcText + lcTab + 'DEFINE PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' PROMPT "' + toReg.PROMPT + '"' ; + + ' COLOR SCHEME ' + TRANSFORM(toReg.SCHEME) && VER ESTO: Deberia ir toBarPop + + IF NOT EMPTY(toReg.Location) + lnContainer = toReg.Location % 2^4 + lnObject = INT( (toReg.Location - lnContainer) / 2^4 ) + lcText = lcText + ' ;' + CR_LF + lcTab + ' NEGOTIATE ' + GETWORDNUM('NONE,LEFT,MIDDLE,RIGHT',lnContainer+1,',') ; + + ', ' + GETWORDNUM('NONE,LEFT,MIDDLE,RIGHT',lnObject+1,',') + ENDIF + + IF NOT EMPTY(toReg.KeyName) + lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KeyName + ', "' + toReg.KeyLabel + '"' + ENDIF + + IF NOT EMPTY(toReg.SKIPFOR) + lcText = lcText + ' ;' + CR_LF + lcTab + ' SKIP FOR ' + toReg.SKIPFOR + ENDIF + + IF NOT EMPTY(toReg.ResName) + IF toReg.SysRes = 1 + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES "' + toReg.ResName + '"' + ELSE + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.ResName + '"' + ENDIF + ENDIF + + IF NOT EMPTY(toReg.MESSAGE) + lcText = lcText + ' ;' + CR_LF + lcTab + ' MESSAGE ' + toReg.MESSAGE + ENDIF + + IF NOT EMPTY(toReg.COMMENT) + lcText = lcText + ' &' + '& ' + toReg.COMMENT + ENDIF + + lcText = lcText + CR_LF + + *-- ON PAD + lcText = lcText + lcTab + 'ON PAD ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' ACTIVATE POPUP ' + ALLTRIM(toReg.LevelName) && VER ESTO: Deberia ir toBarPop + + lcText = lcText + CR_LF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lcText + ENDPROC + + PROCEDURE updateMENU ENDPROC From bf9ddb6cdd60d6c6d9e1bcbf03221e9e2717cd63 Mon Sep 17 00:00:00 2001 From: fernando Date: Sun, 29 Dec 2013 01:31:45 +0100 Subject: [PATCH 12/21] Changeset: 116 Menu a Texto finalizado --- foxbin2prg.prg | 204 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 137 insertions(+), 67 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 6825ae0..6a99f3c 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -13910,10 +13910,6 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE SCATTER MEMO NAME loReg - IF EMPTY(loReg.NAME) - loReg.NAME = SYS(2015) - ENDIF - lnLastKey = toCol_LastLevelName.GETKEY(loReg.LevelName) DO CASE @@ -14087,26 +14083,30 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * tc_InputFile (v! IN ) Nombre del archivo de salida *--------------------------------------------------------------------------------------------------- TRY - LOCAL lcText, lcLastLevelName, loReg, lnNivel ; + LOCAL lcText, loReg, lnNivel, lcEndProcedures ; , loEx AS EXCEPTION ; , loCol_LastLevelName AS COLLECTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' - STORE '' TO lcText, lcLastLevelName + STORE '' TO lcText, lcEndProcedures loReg = THIS.oReg - loBarPop = THIS.ITEM(1) + loBarPop = THIS.ITEM(1).oReg lnNivel = 0 + 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 @@ -14114,33 +14114,44 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE *-- Bars and Popups IF THIS.COUNT > 0 FOR EACH loBarPop IN THIS FOXOBJECT - lcText = lcText + loBarPop.toText(loReg, lnNivel+0) + lcText = lcText + loBarPop.toText(loReg, lnNivel+0, @lcEndProcedures) ENDFOR ENDIF + loBarPop = THIS.ITEM(1).oReg + *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) IF NOT EMPTY(loReg.PROCEDURE) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - ON SELECTION MENU <> <> + ON SELECTION MENU <> <> ENDTEXT ENDIF *-- Procedimiento del Menu Bar (ObjType:2, ObjCode:1) - IF NOT EMPTY(loBarPop.oReg.PROCEDURE) + IF NOT EMPTY(loBarPop.PROCEDURE) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - ON SELECTION POPUP ALL <> + ON SELECTION POPUP ALL <> ENDTEXT ENDIF - + + *-- Procedimientos finales + IF NOT EMPTY(lcEndProcedures) + lcText = lcText + CR_LF + CR_LF + lcEndProcedures + ENDIF + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> - <<>> - <> - <> - <> - <<>> ENDTEXT + IF NOT EMPTY(loReg.Cleanup) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <> + <> + <> + ENDTEXT + ENDIF + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -14248,8 +14259,9 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toParentReg (v? IN ) Objeto registro Padre * tnNivel (v? IN ) Nivel para indentar + * tcEndProcedures (@! OUT) Agregar aquí los procedimientos que irán al final *--------------------------------------------------------------------------------------------------- - LPARAMETERS toParentReg, tnNivel + LPARAMETERS toParentReg, tnNivel, tcEndProcedures TRY LOCAL loReg, I, lcText, lcTab, loEx AS EXCEPTION ; @@ -14271,7 +14283,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE *-- Options (ObjType:3) IF THIS.COUNT > 0 FOR EACH loOption IN THIS FOXOBJECT - lcText = lcText + loOption.toText(loReg, tnNivel+0) + lcText = lcText + loOption.toText(loReg, tnNivel+0, @tcEndProcedures) ENDFOR ENDIF @@ -14372,52 +14384,78 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toParentReg (v? IN ) Objeto registro Padre * tnNivel (v? IN ) Nivel para indentar + * tcEndProcedures (@! OUT) Agregar aquí los procedimientos que irán al final *--------------------------------------------------------------------------------------------------- - LPARAMETERS toParentReg, tnNivel + LPARAMETERS toParentReg, tnNivel, tcEndProcedures TRY - LOCAL loReg, I, lcText, lcTab, loEx AS EXCEPTION ; + LOCAL loReg, I, lcText, lcTab, lcProcName, lcProcCode, laProcLines(1), lnProcLines, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' - lcText = '' - loReg = THIS.oReg - lcTab = REPLICATE(CHR(9),tnNivel) + + lcText = '' + lcProcName = '' + loReg = THIS.oReg + lcTab = REPLICATE(CHR(9),tnNivel) + loBarPop = toParentReg + + *-- Actualización de procedimientos + IF loReg.OBJCODE = 80 && Procedure + *-- Si existe el snippet #NAME, lo usa + IF NOT EMPTY(loReg.Procedure) + lnProcLines = ALINES(laProcLines, loReg.Procedure) + FOR I = 1 TO lnProcLines + IF UPPER( LEFT( ALLTRIM(laProcLines(I)), 6 ) ) == '#NAME ' + lcProcName = ALLTRIM( SUBSTR( ALLTRIM(laProcLines(I)), 7 ) ) + ADEL(laProcLines,I) + lnProcLines = lnProcLines - 1 + DIMENSION laProcLines(lnProcLines) + EXIT + ENDIF + ENDFOR + + IF NOT EMPTY(lcProcName) + *-- Rearmo el Procedure sin el snippet + WITH loReg + .Procedure = '' + FOR I = 1 TO lnProcLines + .Procedure = .Procedure + laProcLines(I) + CR_LF + ENDFOR + ENDWITH + ENDIF + ENDIF + ENDIF *-- Options (ObjType:3) - DO CASE - CASE loReg.OBJCODE=67 && Command + IF toParentReg.ObjType=2 AND toParentReg.OBJCODE=0 + *-- Define Bar TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> ENDTEXT - - CASE loReg.OBJCODE=77 && Submenu - IF toParentReg.ObjType=2 AND toParentReg.OBJCODE=0 - *-- Define Bar - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT - ELSE && Define Pad - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT + ELSE && Define Pad (toParentReg.ObjType=2 AND toParentReg.OBJCODE=1) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + ENDTEXT + ENDIF + + IF loReg.OBJCODE = 80 && Procedure + *-- Reemplazo el nombre definitivo + IF EMPTY(lcProcName) + lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) ENDIF - CASE loReg.OBJCODE=78 && BAR# - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT - - CASE loReg.OBJCODE=80 && Procedure - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> - ENDTEXT - - ENDCASE - + lcText = STRTRAN( lcText, '<>', lcProcName ) + tcEndProcedures = tcEndProcedures ; + + 'PROCEDURE ' + lcProcName + CR_LF ; + + ALLTRIM(loReg.Procedure) + CR_LF ; + + 'ENDPROC' + CR_LF + CR_LF + ENDIF + + *-- Menu Bar or Popup (ObjType:2, ObjCode:0 ó 1) IF THIS.COUNT > 0 FOR EACH loBarPop IN THIS FOXOBJECT - lcText = lcText + loBarPop.toText(loReg, tnNivel+1) + lcText = lcText + loBarPop.toText(loReg, tnNivel+1, @tcEndProcedures) ENDFOR ENDIF @@ -14445,12 +14483,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE LPARAMETERS toReg, toBarPop, tnNivel TRY - LOCAL lcText, lcTab, loEx as Exception + LOCAL lcText, lcTab, loEx as Exception ; + , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' lcTab = REPLICATE(CHR(9),tnNivel) *-- DEFINE BAR lcText = lcTab + '*----------------------------------' + CR_LF - lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) ; + lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM(EVL(toReg.Name,toReg.ItemNum)) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' PROMPT "' + toReg.PROMPT + '"' IF NOT EMPTY(toReg.KeyName) @@ -14463,7 +14502,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE IF NOT EMPTY(toReg.ResName) IF toReg.SysRes = 1 - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES "' + toReg.ResName + '"' + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.ResName ELSE lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.ResName + '"' ENDIF @@ -14478,10 +14517,23 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDIF *-- ON BAR - IF toReg.OBJCODE <> 78 - lcText = lcText + CR_LF - lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) ; - + ' ACTIVATE POPUP ' + ALLTRIM(toReg.Name) && VER ESTO + IF toReg.OBJCODE <> 78 && Bar# + IF toReg.OBJCODE = 77 && Submenu + loBarPop = THIS.Item(1).oReg + lcText = lcText + CR_LF + lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.Name) + ELSE + lcText = lcText + CR_LF + lcText = lcText + lcTab + 'ON SELECTION BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) + + DO CASE + CASE toReg.OBJCODE = 67 && Command + lcText = lcText + ' ' + ALLTRIM(toReg.Command) + CASE toReg.OBJCODE = 80 && Procedure + lcText = lcText + ' DO <>' + ENDCASE + ENDIF ENDIF lcText = lcText + CR_LF @@ -14509,14 +14561,16 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE LPARAMETERS toReg, toBarPop, tnNivel TRY - LOCAL lcText, lcTab, lnContainer, lnObject, loEx as Exception + LOCAL lcText, lcTab, lnContainer, lnObject, loEx as Exception ; + , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' lcTab = REPLICATE(CHR(9),tnNivel) + toReg.Name = EVL(toReg.Name,SYS(2015)) *-- DEFINE PAD lcText = lcTab + '*----------------------------------' + CR_LF lcText = lcText + lcTab + 'DEFINE PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' PROMPT "' + toReg.PROMPT + '"' ; - + ' COLOR SCHEME ' + TRANSFORM(toReg.SCHEME) && VER ESTO: Deberia ir toBarPop + + ' COLOR SCHEME ' + TRANSFORM(toBarPop.SCHEME) IF NOT EMPTY(toReg.Location) lnContainer = toReg.Location % 2^4 @@ -14535,7 +14589,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE IF NOT EMPTY(toReg.ResName) IF toReg.SysRes = 1 - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES "' + toReg.ResName + '"' + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.ResName ELSE lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.ResName + '"' ENDIF @@ -14552,8 +14606,24 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lcText = lcText + CR_LF *-- ON PAD - lcText = lcText + lcTab + 'ON PAD ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) ; - + ' ACTIVATE POPUP ' + ALLTRIM(toReg.LevelName) && VER ESTO: Deberia ir toBarPop + IF toReg.OBJCODE <> 78 && Bar# + IF toReg.OBJCODE = 77 && Submenu + loBarPop = THIS.Item(1).oReg + lcText = lcText + CR_LF + lcText = lcText + lcTab + 'ON PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.Name) + ELSE + lcText = lcText + CR_LF + lcText = lcText + lcTab + 'ON SELECTION PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) + + DO CASE + CASE toReg.OBJCODE = 67 && Command + lcText = lcText + ' ' + ALLTRIM(toReg.Command) + CASE toReg.OBJCODE = 80 && Procedure + lcText = lcText + ' DO <>' + ENDCASE + ENDIF + ENDIF lcText = lcText + CR_LF From 136cd3c7e73b70b5fc88891ecda8365496f1f87e Mon Sep 17 00:00:00 2001 From: fernando Date: Sun, 29 Dec 2013 03:51:30 +0100 Subject: [PATCH 13/21] Changeset: 117 Agregado soporte de menus shortcut --- foxbin2prg.prg | 186 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 126 insertions(+), 60 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 6a99f3c..d692cc7 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -14086,7 +14086,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE *--------------------------------------------------------------------------------------------------- TRY - LOCAL lcText, loReg, lnNivel, lcEndProcedures ; + LOCAL lcText, loReg, loHeader, lnNivel, lcEndProcedures ; , loEx AS EXCEPTION ; , loCol_LastLevelName AS COLLECTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; @@ -14094,6 +14094,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE STORE '' TO lcText, lcEndProcedures loReg = THIS.oReg + loHeader = loReg loBarPop = THIS.ITEM(1).oReg lnNivel = 0 @@ -14114,25 +14115,40 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE *-- Bars and Popups IF THIS.COUNT > 0 FOR EACH loBarPop IN THIS FOXOBJECT - lcText = lcText + loBarPop.toText(loReg, lnNivel+0, @lcEndProcedures) + lcText = lcText + loBarPop.toText(loReg, lnNivel+0, @lcEndProcedures, loHeader) ENDFOR ENDIF loBarPop = THIS.ITEM(1).oReg - *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) - IF NOT EMPTY(loReg.PROCEDURE) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - ON SELECTION MENU <> <> - ENDTEXT - ENDIF + DO CASE + CASE loHeader.ObjType = 1 + *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) + IF NOT EMPTY(loReg.PROCEDURE) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + ON SELECTION MENU <> <> + ENDTEXT + ENDIF + + *-- Procedimiento del Menu Bar (ObjType:2, ObjCode:1) + IF NOT EMPTY(loBarPop.PROCEDURE) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + ON SELECTION POPUP ALL <> + ENDTEXT + ENDIF + + CASE loHeader.ObjType = 4 + *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) + IF NOT EMPTY(loReg.PROCEDURE) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + ON SELECTION POPUP <> <> + ENDTEXT + ENDIF - *-- Procedimiento del Menu Bar (ObjType:2, ObjCode:1) - IF NOT EMPTY(loBarPop.PROCEDURE) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - ON SELECTION POPUP ALL <> + ACTIVATE POPUP <> ENDTEXT - ENDIF + ENDCASE *-- Procedimientos finales IF NOT EMPTY(lcEndProcedures) @@ -14257,11 +14273,12 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * toParentReg (v? IN ) Objeto registro Padre - * tnNivel (v? IN ) Nivel para indentar + * toParentReg (v! IN ) Objeto registro Padre + * tnNivel (v! IN ) Nivel para indentar * tcEndProcedures (@! OUT) Agregar aquí los procedimientos que irán al final + * toHeader (v! IN ) Objeto Registro de cabecera del menu *--------------------------------------------------------------------------------------------------- - LPARAMETERS toParentReg, tnNivel, tcEndProcedures + LPARAMETERS toParentReg, tnNivel, tcEndProcedures, toHeader TRY LOCAL loReg, I, lcText, lcTab, loEx AS EXCEPTION ; @@ -14273,17 +14290,34 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE *-- Menu Bar or Popup (ObjType:2, ObjCode:0 ó 1) - IF loReg.OBJCODE=0 && (Menu Pad) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <>*---------------------------------- - <>DEFINE POPUP <> MARGIN RELATIVE SHADOW COLOR SCHEME <> - ENDTEXT + IF loReg.OBJCODE = 0 && (Menu Pad) + IF toHeader.ObjType = 4 + *-- Shortcut + IF NOT PEMSTATUS(toHeader,'_MenuInicializado', 5) && Header + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <>*---------------------------------- + <>DEFINE POPUP <> SHORTCUT RELATIVE FROM MROW(),MCOL() + ENDTEXT + ADDPROPERTY(toHeader,'_MenuInicializado', .T.) + ELSE && Rest + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <>*---------------------------------- + <>DEFINE POPUP <> SHORTCUT RELATIVE + ENDTEXT + ENDIF + ELSE + *-- Menu + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <>*---------------------------------- + <>DEFINE POPUP <> MARGIN RELATIVE SHADOW COLOR SCHEME <> + ENDTEXT + ENDIF ENDIF *-- Options (ObjType:3) IF THIS.COUNT > 0 FOR EACH loOption IN THIS FOXOBJECT - lcText = lcText + loOption.toText(loReg, tnNivel+0, @tcEndProcedures) + lcText = lcText + loOption.toText(loReg, tnNivel+0, @tcEndProcedures, toHeader) ENDFOR ENDIF @@ -14312,6 +14346,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE _MEMBERDATA = [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -14385,11 +14420,12 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE * toParentReg (v? IN ) Objeto registro Padre * tnNivel (v? IN ) Nivel para indentar * tcEndProcedures (@! OUT) Agregar aquí los procedimientos que irán al final + * toHeader (v! IN ) Objeto Registro de cabecera del menu *--------------------------------------------------------------------------------------------------- - LPARAMETERS toParentReg, tnNivel, tcEndProcedures + LPARAMETERS toParentReg, tnNivel, tcEndProcedures, toHeader TRY - LOCAL loReg, I, lcText, lcTab, lcProcName, lcProcCode, laProcLines(1), lnProcLines, loEx AS EXCEPTION ; + LOCAL loReg, I, lcText, lcTab, lcProcName, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' @@ -14400,43 +14436,23 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loBarPop = toParentReg *-- Actualización de procedimientos - IF loReg.OBJCODE = 80 && Procedure - *-- Si existe el snippet #NAME, lo usa - IF NOT EMPTY(loReg.Procedure) - lnProcLines = ALINES(laProcLines, loReg.Procedure) - FOR I = 1 TO lnProcLines - IF UPPER( LEFT( ALLTRIM(laProcLines(I)), 6 ) ) == '#NAME ' - lcProcName = ALLTRIM( SUBSTR( ALLTRIM(laProcLines(I)), 7 ) ) - ADEL(laProcLines,I) - lnProcLines = lnProcLines - 1 - DIMENSION laProcLines(lnProcLines) - EXIT - ENDIF - ENDFOR - - IF NOT EMPTY(lcProcName) - *-- Rearmo el Procedure sin el snippet - WITH loReg - .Procedure = '' - FOR I = 1 TO lnProcLines - .Procedure = .Procedure + laProcLines(I) + CR_LF - ENDFOR - ENDWITH - ENDIF - ENDIF - ENDIF + lcProcName = THIS.get_ProcNameFromSnippet(loReg) *-- Options (ObjType:3) - IF toParentReg.ObjType=2 AND toParentReg.OBJCODE=0 + 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 - ELSE && Define Pad (toParentReg.ObjType=2 AND toParentReg.OBJCODE=1) + + CASE toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 1 AND toHeader.ObjType = 1 + *-- Define Pad TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - <> + <> ENDTEXT - ENDIF + + ENDCASE IF loReg.OBJCODE = 80 && Procedure *-- Reemplazo el nombre definitivo @@ -14455,7 +14471,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE *-- Menu Bar or Popup (ObjType:2, ObjCode:0 ó 1) IF THIS.COUNT > 0 FOR EACH loBarPop IN THIS FOXOBJECT - lcText = lcText + loBarPop.toText(loReg, tnNivel+1, @tcEndProcedures) + 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 @@ -14471,6 +14493,48 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE RETURN lcText ENDPROC + + + PROCEDURE get_ProcNameFromSnippet + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toReg (v? IN ) Objeto registro + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toReg + + LOCAL lcProcName, lcProcCode, laProcLines(1), lnProcLines + + *-- Actualización de procedimientos + IF toReg.OBJCODE = 80 && Procedure + lcProcName = '' + + *-- Si existe el snippet #NAME, lo usa + IF NOT EMPTY(toReg.Procedure) + lnProcLines = ALINES(laProcLines, toReg.Procedure) + FOR I = 1 TO lnProcLines + IF UPPER( LEFT( ALLTRIM(laProcLines(I)), 6 ) ) == '#NAME ' + lcProcName = ALLTRIM( SUBSTR( ALLTRIM(laProcLines(I)), 7 ) ) + ADEL(laProcLines,I) + lnProcLines = lnProcLines - 1 + DIMENSION laProcLines(lnProcLines) + EXIT + ENDIF + ENDFOR + + IF NOT EMPTY(lcProcName) + *-- Rearmo el Procedure sin el snippet + WITH toReg + .Procedure = '' + FOR I = 1 TO lnProcLines + .Procedure = .Procedure + laProcLines(I) + CR_LF + ENDFOR + ENDWITH + ENDIF + ENDIF + ENDIF + + RETURN lcProcName + ENDPROC PROCEDURE get_DefineBarText @@ -14479,8 +14543,9 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE * toReg (v? IN ) Objeto registro * toBarPop (v? IN ) Bar o Popup hijo * tnNivel (v? IN ) Nivel para indentar + * toHeader (v! IN ) Objeto Registro de cabecera del menu *--------------------------------------------------------------------------------------------------- - LPARAMETERS toReg, toBarPop, tnNivel + LPARAMETERS toReg, toBarPop, tnNivel, toHeader TRY LOCAL lcText, lcTab, loEx as Exception ; @@ -14518,13 +14583,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE *-- ON BAR IF toReg.OBJCODE <> 78 && Bar# + lcText = lcText + CR_LF + IF toReg.OBJCODE = 77 && Submenu loBarPop = THIS.Item(1).oReg - lcText = lcText + CR_LF lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.Name) ELSE - lcText = lcText + CR_LF lcText = lcText + lcTab + 'ON SELECTION BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) DO CASE @@ -14557,8 +14622,9 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE * toReg (v? IN ) Objeto registro * toBarPop (v? IN ) Bar o Popup hijo * tnNivel (v? IN ) Nivel para indentar + * toHeader (v! IN ) Objeto Registro de cabecera del menu *--------------------------------------------------------------------------------------------------- - LPARAMETERS toReg, toBarPop, tnNivel + LPARAMETERS toReg, toBarPop, tnNivel, toHeader TRY LOCAL lcText, lcTab, lnContainer, lnObject, loEx as Exception ; @@ -14607,13 +14673,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE *-- ON PAD IF toReg.OBJCODE <> 78 && Bar# + lcText = lcText + CR_LF + IF toReg.OBJCODE = 77 && Submenu loBarPop = THIS.Item(1).oReg - lcText = lcText + CR_LF lcText = lcText + lcTab + 'ON PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.Name) ELSE - lcText = lcText + CR_LF lcText = lcText + lcTab + 'ON SELECTION PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) DO CASE From 30b5ba68e6c8b0c021dfca344a597639223e8c5f Mon Sep 17 00:00:00 2001 From: fernando Date: Sun, 29 Dec 2013 04:11:16 +0100 Subject: [PATCH 14/21] =?UTF-8?q?Changeset:=20118=20Adaptaci=C3=B3n=20para?= =?UTF-8?q?=20soportar=20los=20men=C3=BAs=20Top=20Level=20Form?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.prg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index d692cc7..ba22c5d 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -14122,7 +14122,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE loBarPop = THIS.ITEM(1).oReg DO CASE - CASE loHeader.ObjType = 1 + CASE loHeader.ObjType = 1 OR loHeader.ObjType = 5 *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) IF NOT EMPTY(loReg.PROCEDURE) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 @@ -14141,7 +14141,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) IF NOT EMPTY(loReg.PROCEDURE) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - ON SELECTION POPUP <> <> + ON SELECTION POPUP <> <> ENDTEXT ENDIF @@ -14446,7 +14446,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE <> ENDTEXT - CASE toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 1 AND toHeader.ObjType = 1 + 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 <> From ea2046652847ae098542af5ba4f529bef4356caf Mon Sep 17 00:00:00 2001 From: fernando Date: Mon, 30 Dec 2013 01:23:38 +0100 Subject: [PATCH 15/21] Changeset: 119 Menu Texto a BIN --- foxbin2prg.prg | 979 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 847 insertions(+), 132 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index ba22c5d..6ad5bd7 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -194,16 +194,14 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro #DEFINE C_INDEXES_F '' #DEFINE C_MENU_I '' #DEFINE C_MENU_F '' -#DEFINE C_OPTION_I '' -#DEFINE C_BARPOP_I '' -#DEFINE C_BARPOP_F '' #DEFINE C_SETUPCODE_I '*' #DEFINE C_SETUPCODE_F '*' #DEFINE C_CLEANUPCODE_I '*' #DEFINE C_CLEANUPCODE_F '*' #DEFINE C_MENUCODE_I '*' #DEFINE C_MENUCODE_F '*' +#DEFINE C_MENUTYPE_I '*' +#DEFINE C_MENUTYPE_F '' *-- #DEFINE C_TAB CHR(9) #DEFINE C_CR CHR(13) @@ -1560,6 +1558,7 @@ DEFINE CLASS c_conversor_base AS SESSION *-- Devuelve el valor separado de la propiedad. *-- Si se indican más de 3 parámetros, evalúa el valor completo a través de las líneas de código *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taCodeLines (!@ IN ) El array con las líneas del código donde buscar * tnCodeLines (!@ IN ) Cantidad de líneas de código * taBloquesExclusion (!@ IN ) Array con las posiciones de inicio/fin de los bloques de exclusion @@ -2282,6 +2281,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -2782,6 +2783,63 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* + PROCEDURE createMenu + + CREATE TABLE (THIS.c_OutputFile) ; + ( 'OBJTYPE' Numeric(2) ; + , 'OBJCODE' Numeric(2) ; + , 'NAME' Memo ; + , 'PROMPT' Memo ; + , 'COMMAND' Memo ; + , 'MESSAGE' Memo ; + , 'PROCTYPE' Numeric(1) ; + , 'PROCEDURE' Memo ; + , 'SETUPTYPE' Numeric(1) ; + , 'SETUP' Memo ; + , 'CLEANTYPE' Numeric(1) ; + , 'CLEANUP' Memo ; + , 'MARK' Character(1) ; + , 'KEYNAME' Memo ; + , 'KEYLABEL' Memo ; + , 'SKIPFOR' Memo ; + , 'NAMECHANGE' Logical ; + , 'NUMITEMS' Numeric(2) ; + , 'LEVELNAME' Character(10) ; + , 'ITEMNUM' Character(3) ; + , 'COMMENT' MEMORY(4) ; + , 'LOCATION' Numeric(2) ; + , 'SCHEME' Numeric(2) ; + , 'SYSRES' Numeric(1) ; + , 'RESNAME' MEMORY(4) ) + + USE (THIS.c_OutputFile) ALIAS TABLABIN AGAIN SHARED + + ENDPROC + + + PROCEDURE createMenu_RecordHeader + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tnMenuType (!v IN ) Indica el tipo de menu. 1=Menu, 4=Shortcut, 5=TopLevel Form Menu + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS tnMenuType + + INSERT INTO TABLABIN ; + ( 'OBJTYPE' ; + , 'OBJCODE' ; + , 'PROCTYPE' ; + , 'MARK' ; + , 'LOCATION' ) ; + VALUES ; + ( tnMenuType ; + , 22 ; + , 1 ; + , CHR(4) ; + , 1 ) + ENDPROC + + ******************************************************************************************************************* PROCEDURE emptyRecord LOCAL loReg @@ -3945,8 +4003,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ******************************************************************************************************************* PROCEDURE identificarBloquesDeCodigo - LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toModulo *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taCodeLines (!@ IN ) El array con las líneas del código donde buscar * tnCodeLines (!@ IN ) Cantidad de líneas de código * taBloquesExclusion (!@ IN ) Array con las posiciones de inicio/fin de los bloques de exclusion @@ -3956,6 +4014,8 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base * NOTA: * Como identificador se usa el nombre de clase o de procedimiento, según corresponda. *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toModulo + EXTERNAL ARRAY taCodeLines, taBloquesExclusion #IF .F. @@ -4746,6 +4806,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin PROCEDURE identificarBloquesDeCodigo LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toProject *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taCodeLines (!@ IN ) El array con las líneas del código donde buscar * tnCodeLines (!@ IN ) Cantidad de líneas de código * taBloquesExclusion (!@ IN ) Array con las posiciones de inicio/fin de los bloques de exclusion @@ -5438,6 +5499,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin PROCEDURE identificarBloquesDeCodigo LPARAMETERS taCodeLines, tnCodeLines, taBloquesExclusion, tnBloquesExclusion, toReport *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taCodeLines (!@ IN ) El array con las líneas del código donde buscar * tnCodeLines (!@ IN ) Cantidad de líneas de código * taBloquesExclusion (?@ IN ) Sin uso @@ -5867,6 +5929,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE identificarBloquesDeCodigo *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taCodeLines (!@ IN ) El array con las líneas del código donde buscar * tnCodeLines (!@ IN ) Cantidad de líneas de código * taBloquesExclusion (?@ IN ) Sin uso @@ -6026,6 +6089,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE identificarBloquesDeCodigo *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taCodeLines (!@ IN ) El array con las líneas del código donde buscar * tnCodeLines (!@ IN ) Cantidad de líneas de código * taBloquesExclusion (?@ IN ) Sin uso @@ -6094,16 +6158,12 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin LOCAL THIS AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' #ENDIF _MEMBERDATA = [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; - + [] ; + + [] ; + [] + n_MenuType = 0 + ******************************************************************************************************************* PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- @@ -6120,7 +6180,7 @@ DEFINE CLASS c_conversor_prg_a_mnx 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 + , laBloquesExclusion(1,2), lnBloquesExclusion STORE 0 TO lnCodError, lnCodeLines, lnFB2P_Version STORE '' TO lcLine, lcSourceFile STORE NULL TO loReg, toModulo @@ -6131,7 +6191,8 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin THIS.doBackup( .F., .T. ) *-- Creo la tabla - *THIS.createTable() + THIS.createMenu() + *THIS.createMenu_RecordHeader( lnMenuType ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toMenu ) @@ -6154,41 +6215,9 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin ENDPROC - ******************************************************************************************************************* - PROCEDURE escribirArchivoBin - LPARAMETERS toMenu - *-- ----------------------------------------------------------------------------------------------------------- - #IF .F. - LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' - #ENDIF - - TRY - LOCAL lnCodError, lcCreateTable, lcLongDec, lcFieldDef, lcIndex, ldLastUpdate - lnCodError = 0 - STORE '' TO lcIndex, lcFieldDef - - toMenu.updateMENU( THIS.c_OutputFile ) - *USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) - - - CATCH TO loEx - lnCodError = loEx.ERRORNO - - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - THROW - - ENDTRY - - RETURN lnCodError - ENDPROC - - - ******************************************************************************************************************* PROCEDURE identificarBloquesDeCodigo *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * taCodeLines (!@ IN ) El array con las líneas del código donde buscar * tnCodeLines (!@ IN ) Cantidad de líneas de código * taBloquesExclusion (?@ IN ) Sin uso @@ -6206,7 +6235,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin #ENDIF TRY - LOCAL I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueDatabase_Completed + LOCAL I, lc_Comentario, lcLine, llFoxBin2Prg_Completed, llBloqueMenu_Completed STORE 0 TO I THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) @@ -6224,11 +6253,11 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin ENDIF DO CASE - CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toMenu, @lcLine, @taCodeLines, @I, tnCodeLines ) llFoxBin2Prg_Completed = .T. - CASE NOT llBloqueDatabase_Completed AND toMenu.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines ) - llBloqueDatabase_Completed = .T. + CASE NOT llBloqueMenu_Completed AND toMenu.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines, THIS ) + llBloqueMenu_Completed = .T. ENDCASE ENDFOR @@ -6248,6 +6277,45 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin ENDPROC + PROCEDURE escribirArchivoBin + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toMenu (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toMenu + + #IF .F. + LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL lnCodError, lcCreateTable, lcLongDec, lcFieldDef, lcIndex, ldLastUpdate + lnCodError = 0 + STORE '' TO lcIndex, lcFieldDef + + *THIS.createMenu_RecordHeader( lnMenuType ) + + toMenu.updateMENU( THIS.c_OutputFile ) + + + CATCH TO loEx + lnCodError = loEx.ERRORNO + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) + + ENDTRY + + RETURN lnCodError + ENDPROC + + ENDDEFINE && CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin @@ -8654,7 +8722,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() toMenu = CREATEOBJECT('CL_MENU') - toMenu.get_Data() + toMenu.get_DataFromTablabin() C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() @@ -10205,12 +10273,12 @@ DEFINE CLASS CL_DBC_BASE AS CL_CUS_BASE PROCEDURE getBinPropertyDataRecord + LPARAMETERS teData, tnPropertyID *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * teData (v! IN ) Dato a codificar * tnPropertyID (v! IN ) ID de la propiedad a la que pertenece *--------------------------------------------------------------------------------------------------- - LPARAMETERS teData, tnPropertyID TRY LOCAL lcBinRecord, lnLen, lcDataType @@ -13866,7 +13934,7 @@ ENDDEFINE DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE _MEMBERDATA = [] ; + [] ; - + [] ; + + [] ; + [] ; + [] @@ -13878,7 +13946,7 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE oReg = NULL - PROCEDURE get_Data + PROCEDURE get_DataFromTablabin *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toReg (v! IN ) Objeto de datos del registro @@ -13933,7 +14001,7 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE CASE loReg.ObjType = 2 && Bar or Popup loBarPop = CREATEOBJECT('CL_MENU_BARPOP') - llHayDatos = loBarPop.get_Data( loReg, toCol_LastLevelName ) + llHayDatos = loBarPop.get_DataFromTablabin( loReg, toCol_LastLevelName ) llRetorno = .T. llRetorno = llHayDatos THIS.ADD( loBarPop ) @@ -13944,7 +14012,7 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE CASE loReg.ObjType = 3 && Option loOption = CREATEOBJECT('CL_MENU_OPTION') - llHayDatos = loOption.get_Data( loReg, toCol_LastLevelName ) + llHayDatos = loOption.get_DataFromTablabin( loReg, toCol_LastLevelName ) llRetorno = llHayDatos THIS.ADD( loOption ) loOption = NULL @@ -13998,6 +14066,10 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE #ENDIF _MEMBERDATA = [] ; + + [] ; + + [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -14023,44 +14095,224 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF TRY - LOCAL loOptions AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION - STORE '' TO lcPropName, lcValue + LOCAL loOptions AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + LOCAL loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, loReg, lcComment, loEx AS EXCEPTION ; + , llBloque_SetupCode_Analizado, llBloque_CleanupCode_Analizado, llBloque_MenuCode_Analizado ; + , llBloque_MenuType_Analizado + STORE '' TO lcComment - IF LEFT(tcLine, LEN(C_MENU_I)) == C_MENU_I + *IF LEFT(tcLine, LEN(C_MENU_I)) == C_MENU_I llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines + *-- CABECERA DEL MENU + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg + + WITH loReg + .OBJCODE = 22 + .PROCTYPE = 1 + .MARK = CHR(4) + .LOCATION = 1 + .SETUPTYPE = 1 + .CLEANTYPE = 1 + ENDWITH + + FOR I = I + 0 TO tnCodeLines THIS.set_Line( @tcLine, @taCodeLines, I ) DO CASE CASE EMPTY( tcLine ) LOOP - CASE C_MENU_F $ tcLine && Fin - EXIT + CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios - CASE C_BARPOP_I $ tcLine - loOption = CREATEOBJECT("CL_MENU_OPTION") - loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - THIS.ADD( loOption, loOption._Name ) + 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 C_BARPOP_I $ tcLine - * loOptions = THIS._Options - * loOptions.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + *CASE C_MENU_F $ tcLine && Fin + * EXIT + + 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 C_BARPOP_I $ tcLine + * loOption = CREATEOBJECT("CL_MENU_OPTION") + * loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + * THIS.ADD( loOption, loOption._Name ) OTHERWISE && Otro valor - *-- Estructura a reconocer: - * ID - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) + *-- No hay otros valores que reconocer ENDCASE ENDFOR + *ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE analizarBloque_SetupCode + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL llBloqueEncontrado, lcText, lcComment, loEx AS EXCEPTION + STORE '' TO lcText, lcComment + + IF LEFT(tcLine, LEN(C_SETUPCODE_I)) == C_SETUPCODE_I + llBloqueEncontrado = .T. + + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE C_SETUPCODE_F $ tcLine && Fin + I = I + 1 + EXIT + + OTHERWISE && Líneas de procedure + lcText = lcText + taCodeLines(I) + CR_LF + ENDCASE + ENDFOR + + I = I - 1 + THIS.oReg.Setup = lcText + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE analizarBloque_CleanupCode + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL llBloqueEncontrado, lcText, lcComment, loEx AS EXCEPTION + STORE '' TO lcText, lcComment + + IF LEFT(tcLine, LEN(C_CLEANUPCODE_I)) == C_CLEANUPCODE_I + llBloqueEncontrado = .T. + + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE C_CLEANUPCODE_F $ tcLine && Fin + I = I + 1 + EXIT + + OTHERWISE && Líneas de procedure + lcText = lcText + taCodeLines(I) + CR_LF + ENDCASE + ENDFOR + + I = I - 1 + THIS.oReg.Cleanup = lcText + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE analizarBloque_MenuCode + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL loOptions AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + LOCAL loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, lcPropName, lcValue, lcComment, loEx AS EXCEPTION ; + , llBloque_SetupCode_Analizado + STORE '' TO lcPropName, lcValue, lcComment + + IF LEFT(tcLine, LEN(C_MENUCODE_I)) == C_MENUCODE_I + llBloqueEncontrado = .T. + + loBarPop = CREATEOBJECT('CL_MENU_BARPOP') + loBarPop.c_ParentName = '' + loBarPop.n_ParentCode = THIS.oReg.OBJCODE + loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, @tnCodeLines, toConversor ) + THIS.Add( loBarPop ) + ENDIF CATCH TO loEx @@ -14080,6 +14332,58 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE ENDPROC + PROCEDURE analizarBloque_PROCEDURE + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL llBloqueEncontrado, lcText, lcComment, lcProcName, loEx AS EXCEPTION + STORE '' TO lcText, lcComment + + IF LEFT(tcLine, LEN(C_PROCEDURE)) == C_PROCEDURE + llBloqueEncontrado = .T. + + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE C_ENDPROC $ tcLine && Fin + I = I + 1 + EXIT + + OTHERWISE && Líneas de procedure + lcText = lcText + taCodeLines(I) + CR_LF + ENDCASE + ENDFOR + + I = I - 1 + THIS.oReg.Cleanup = lcText + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -14098,6 +14402,10 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE loBarPop = THIS.ITEM(1).oReg lnNivel = 0 + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <><><> + ENDTEXT + IF NOT EMPTY(loReg.Setup) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -14182,12 +14490,12 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE ENDPROC - PROCEDURE get_Data + PROCEDURE get_DataFromTablabin LOCAL loReg, loCol_LastLevelName AS COLLECTION GO TOP SCATTER MEMO NAME loReg loCol_LastLevelName = CREATEOBJECT('COLLECTION') - CL_MENU_COL_BASE::get_Data( loReg, loCol_LastLevelName ) + CL_MENU_COL_BASE::get_DataFromTablabin( loReg, loCol_LastLevelName ) STORE NULL TO loReg, loCol_LastLevelName ENDPROC @@ -14202,13 +14510,19 @@ ENDDEFINE ******************************************************************************************************************* DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE _MEMBERDATA = [] ; + + [] ; + [] ; + + [] ; + + [] ; + [] #IF .F. LOCAL THIS AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' #ENDIF + c_ParentName = '' + n_ParentCode = 0 + PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- @@ -14217,53 +14531,76 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF TRY - LOCAL loOption AS CL_MENU_OPTIONS OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION - STORE '' TO lcPropName, lcValue + LOCAL loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, lcSubName, lcComment, loReg, loEx AS EXCEPTION + STORE '' TO lcSubName, lcComment + + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg + loReg.OBJTYPE = 2 - IF LEFT(tcLine, LEN(C_BARPOP_I)) == C_BARPOP_I + *LEFT( tcLine, 13 ) == 'DEFINE POPUP ' llBloqueEncontrado = .T. - FOR I = I + 1 TO tnCodeLines + FOR I = I + 0 TO tnCodeLines THIS.set_Line( @tcLine, @taCodeLines, I ) DO CASE CASE EMPTY( tcLine ) LOOP - CASE C_BARPOP_F $ tcLine && Fin + CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios + + CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F EXIT - *CASE C_OPTION_I $ tcLine - * loOption = CREATEOBJECT("CL_MENU_OPTION") - * loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - * THIS.ADD( loOption, loOption._Name ) + CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I + loReg.OBJCODE = 1 + loReg.NAME = '_MSYSMENU' + loReg.LEVELNAME = loReg.NAME + + CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' + loReg.OBJCODE = 0 + loReg.NAME = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) + loReg.LEVELNAME = loReg.NAME + + CASE LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' + loOption = CREATEOBJECT("CL_MENU_OPTION") + loOption.c_ParentName = loReg.LEVELNAME + loOption.n_ParentCode = loReg.OBJCODE + loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + THIS.ADD( loOption ) + IF loOption.oReg.OBJCODE <> 77 + EXIT + ENDIF + loOption = NULL OTHERWISE && Otro valor - *-- Estructura a reconocer: - * ID - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) + *-- No ENDCASE ENDFOR - ENDIF + *ENDIF CATCH TO loEx - IF loEx.ERRORNO = 1470 && Incorrect property name. - loEx.USERVALUE = 'I=' + TRANSFORM(I) + ', tcLine=' + TRANSFORM(tcLine) - ENDIF - IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF THROW + FINALLY + loOption = NULL + ENDTRY RETURN llBloqueEncontrado @@ -14344,15 +14681,22 @@ ENDDEFINE DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE _MEMBERDATA = [] ; + + [] ; + + [] ; + [] ; + [] ; + [] ; + + [] ; + + [] ; + [] #IF .F. LOCAL THIS AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' #ENDIF + c_ParentName = '' + n_ParentCode = 0 + PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- @@ -14361,17 +14705,195 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE * taCodeLines (@! IN ) Array de líneas del programa analizado * I (@! IN/OUT) Número de línea en análisis * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF TRY - *LOCAL loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION - STORE '' TO lcPropName, lcValue + LOCAL loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, lcComment, loReg, loEx AS EXCEPTION ; + , llPadOBar_Analizado + STORE '' TO lcComment - IF LEFT(tcLine, LEN(C_OPTION_I)) == C_OPTION_I + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg + + *IF LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' llBloqueEncontrado = .T. + FOR I = I + 0 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE EMPTY( tcLine ) + LOOP + + CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios + + CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I + loReg.OBJTYPE = 2 + loReg.OBJCODE = 1 + + *CASE LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' + *lcSubname = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + *IF UPPER(lcSubname) + + CASE THIS.analizarBloque_DefinePAD( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + *llPadOBar_Analizado = .T. + IF loReg.OBJCODE <> 77 + EXIT + ENDIF + + CASE THIS.analizarBloque_DefineBAR( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + *llPadOBar_Analizado = .T. + IF loReg.OBJCODE <> 77 + EXIT + ENDIF + + CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' + loBarPop = CREATEOBJECT("CL_MENU_BARPOP") + loBarPop.c_ParentName = loReg.LEVELNAME + loBarPop.n_ParentCode = loReg.OBJCODE + loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + THIS.ADD( loBarPop ) + loBarPop = NULL + EXIT + + OTHERWISE && Otro valor + *-- No + ENDCASE + ENDFOR + *ENDIF + + CATCH TO loEx WHEN loEx.Message = 'Nivel_Anterior' + *-- OK. Volver a evaluar en el nivel anterior + llBloqueEncontrado = .F. + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE analizarBloque_DefinePAD + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL llBloqueEncontrado, lcText, loReg, lnPos, lcPadName, lcExpr, lcComment, lcProcName, loEx AS EXCEPTION ; + , lnNegContainer, lnNegObject + STORE '' TO lcText, lcComment, lcPadName + + * Estructura ejemplo a analizar: + *-------------------------------- + * DEFINE PAD _3YM1DR90Z OF _MSYSMENU PROMPT "Opción A con submenú" COLOR SCHEME 3 ; + * NEGOTIATE NONE, LEFT ; + * KEY DEL, "Pulsar " ; + * SKIP FOR SKIP_FOR() ; + * MESSAGE "Mensaje para Opción A con submenú" && Comentario + * + * ON PAD _3YM1DR90Z OF _MSYSMENU ACTIVATE POPUP OpciónA_CS + *-------------------------------- + IF LEFT( tcLine, 11 ) == 'DEFINE PAD ' + llBloqueEncontrado = .T. + loReg = THIS.oReg + loReg.OBJTYPE = 3 + lcPadName = ALLTRIM( STREXTRACT( tcLine, 'PAD ' , ' OF' ) ) + *IF LEFT(lcPadName,1) == '_' AND LEN(lcPadName) = 10 + * *-- Es un nombre temporal, no se guarda. + *ELSE + loReg.NAME = lcPadName + *ENDIF + loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + loReg.PROMPT = ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ' COLOR ' ) ) + loReg.SCHEME = INT( VAL( ALLTRIM( STREXTRACT( tcLine, ' COLOR SCHEME ', ';', 1, 2 ) ) ) ) + + *-- ANALISIS DEL "DEFINE PAD" + FOR I = I + 1 TO tnCodeLines + THIS.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 + + 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, '"', '"', 1, 4 ) ) + + CASE LEFT( tcLine, 8 ) == 'PICTRES ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.SYSRES = 1 + + OTHERWISE + * Nada + ENDCASE + + IF NOT ';' $ tcLine && Fin + I = I + 1 + EXIT + ENDIF + ENDFOR + + I = I - 1 + + + * 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 ) @@ -14379,29 +14901,216 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE CASE EMPTY( tcLine ) LOOP - CASE C_OPTION_F $ tcLine && Fin + CASE LEFT( tcLine, 7 ) == 'ON PAD ' + loReg.OBJCODE = 77 && Submenu + + I = I + 1 EXIT - *CASE C_OPTION_I $ tcLine - * loOption = CREATEOBJECT("CL_MENU_OPTION") - * loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - * THIS.ADD( loOption, loOption._Name ) + CASE LEFT( tcLine, 17 ) == 'ON SELECTION PAD ' + lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + lcPadName + ' ', '', 1, 2 ) ) + + DO CASE + CASE ' &'+'& ' $ lcExpr + loReg.OBJCODE = 80 - OTHERWISE && Otro valor - *-- Estructura a reconocer: - * ID - lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) - lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) - THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) + OTHERWISE + loReg.OBJCODE = 67 + + ENDCASE + + I = I + 1 + EXIT + + OTHERWISE + * Nada ENDCASE + + IF NOT ';' $ tcLine && Fin + I = I + 1 + EXIT + ENDIF ENDFOR + + I = I - 1 ENDIF CATCH TO loEx - IF loEx.ERRORNO = 1470 && Incorrect property name. - loEx.USERVALUE = 'I=' + TRANSFORM(I) + ', tcLine=' + TRANSFORM(tcLine) + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON ENDIF + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE analizarBloque_DefineBAR + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines, toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF + + TRY + LOCAL llBloqueEncontrado, lcText, loReg, lnPos, lcBarName, lcExpr, lcComment, lcProcName, loEx AS EXCEPTION ; + , lnNegContainer, lnNegObject + STORE '' TO lcText, lcComment, lcBarName + + * Estructura ejemplo a analizar: + *-------------------------------- + * DEFINE BAR _3YM1DR90Z OF _MSYSMENU PROMPT "Opción A con submenú" COLOR SCHEME 3 ; + * NEGOTIATE NONE, LEFT ; + * KEY DEL, "Pulsar " ; + * SKIP FOR SKIP_FOR() ; + * MESSAGE "Mensaje para Opción A con submenú" && Comentario + * + * ON BAR _3YM1DR90Z OF _MSYSMENU ACTIVATE POPUP OpciónA_CS + * + * DEFINE BAR 1 OF _MSYSMENU PROMPT "Opción A con submenú" ; + * NEGOTIATE NONE, LEFT ; + * KEY DEL, "Pulsar " ; + * SKIP FOR SKIP_FOR() ; + * MESSAGE "Mensaje para Opción A con submenú" && Comentario + * + * ON BAR 1 OF _MSYSMENU ACTIVATE POPUP OpciónA_CS + *-------------------------------- + IF LEFT( tcLine, 11 ) == 'DEFINE BAR ' + llBloqueEncontrado = .T. + loReg = THIS.oReg + loReg.OBJTYPE = 3 + lcBarName = ALLTRIM( STREXTRACT( tcLine, 'BAR ' , ' OF' ) ) + IF LEFT(lcBarName,1) == '_' + *-- Es un BAR del sistema + loReg.NAME = lcBarName + ENDIF + loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + loReg.PROMPT = ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ';', 1, 2 ) ) + + *-- ANALISIS DEL "DEFINE BAR" + FOR I = I + 1 TO tnCodeLines + THIS.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 + + 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, '"', '"', 1, 4 ) ) + + CASE LEFT( tcLine, 8 ) == 'PICTRES ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.SYSRES = 1 + + OTHERWISE + * Nada + ENDCASE + + IF NOT ';' $ tcLine && Fin + I = I + 1 + EXIT + ENDIF + ENDFOR + + I = I - 1 + + IF LEFT(lcBarName,1) == '_' + *-- Es un BAR del Sistema, así que no tiene ON BAR ni nada más. + loReg.ItemNum = 0 && *FDB* ASIGNAR ESTO BIEN!! + loReg.OBJCODE = 78 && Bar# + 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 ' + lcBarName + ' ', '', 1, 2 ) ) + + DO CASE + CASE ' &'+'& ' $ lcExpr + loReg.OBJCODE = 80 && Procedure + + OTHERWISE + loReg.OBJCODE = 67 && Command + + ENDCASE + + I = I + 1 + EXIT + + OTHERWISE + * Nada + ENDCASE + + IF NOT ';' $ tcLine && Fin + I = I + 1 + EXIT + ENDIF + ENDFOR + + I = I - 1 + *THIS.oReg.Cleanup = lcText + ENDIF + + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -14464,7 +15173,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE tcEndProcedures = tcEndProcedures ; + 'PROCEDURE ' + lcProcName + CR_LF ; + ALLTRIM(loReg.Procedure) + CR_LF ; - + 'ENDPROC' + CR_LF + CR_LF + + 'ENDPROC &' + '& ' + lcProcName + CR_LF + CR_LF ENDIF @@ -14508,21 +15217,25 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE IF toReg.OBJCODE = 80 && Procedure lcProcName = '' - *-- Si existe el snippet #NAME, lo usa IF NOT EMPTY(toReg.Procedure) lnProcLines = ALINES(laProcLines, toReg.Procedure) + FOR I = 1 TO lnProcLines - IF UPPER( LEFT( ALLTRIM(laProcLines(I)), 6 ) ) == '#NAME ' + *-- Si existe el snippet #NAME, lo usa + IF EMPTY(lcProcName) AND UPPER( LEFT( ALLTRIM(laProcLines(I)), 6 ) ) == '#NAME ' lcProcName = ALLTRIM( SUBSTR( ALLTRIM(laProcLines(I)), 7 ) ) - ADEL(laProcLines,I) - lnProcLines = lnProcLines - 1 - DIMENSION laProcLines(lnProcLines) - EXIT + *ADEL(laProcLines,I) + *lnProcLines = lnProcLines - 1 + *DIMENSION laProcLines(lnProcLines) + *EXIT ENDIF + + *-- Indento el código + laProcLines(I) = C_TAB + laProcLines(I) ENDFOR IF NOT EMPTY(lcProcName) - *-- Rearmo el Procedure sin el snippet + *-- Rearmo el Procedure WITH toReg .Procedure = '' FOR I = 1 TO lnProcLines @@ -14550,10 +15263,11 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE TRY LOCAL lcText, lcTab, loEx as Exception ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' - lcTab = REPLICATE(CHR(9),tnNivel) + lcTab = REPLICATE(CHR(9),tnNivel) + lcText = '' *-- DEFINE BAR - lcText = lcTab + '*----------------------------------' + CR_LF + *lcText = lcTab + '*----------------------------------' + CR_LF lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM(EVL(toReg.Name,toReg.ItemNum)) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' PROMPT "' + toReg.PROMPT + '"' @@ -14596,7 +15310,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE CASE toReg.OBJCODE = 67 && Command lcText = lcText + ' ' + ALLTRIM(toReg.Command) CASE toReg.OBJCODE = 80 && Procedure - lcText = lcText + ' DO <>' + lcText = lcText + ' DO <>' + ' &'+'& ' ENDCASE ENDIF ENDIF @@ -14629,11 +15343,12 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE TRY LOCAL lcText, lcTab, lnContainer, lnObject, loEx as Exception ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' - lcTab = REPLICATE(CHR(9),tnNivel) + lcTab = REPLICATE(CHR(9),tnNivel) toReg.Name = EVL(toReg.Name,SYS(2015)) + lcText = '' *-- DEFINE PAD - lcText = lcTab + '*----------------------------------' + CR_LF + *lcText = lcTab + '*----------------------------------' + CR_LF lcText = lcText + lcTab + 'DEFINE PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' PROMPT "' + toReg.PROMPT + '"' ; + ' COLOR SCHEME ' + TRANSFORM(toBarPop.SCHEME) @@ -14686,7 +15401,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE CASE toReg.OBJCODE = 67 && Command lcText = lcText + ' ' + ALLTRIM(toReg.Command) CASE toReg.OBJCODE = 80 && Procedure - lcText = lcText + ' DO <>' + lcText = lcText + ' DO <>' + ' &'+'& ' ENDCASE ENDIF ENDIF From a99bc6c5daee90246f8e3d4152652040b3b1b05d Mon Sep 17 00:00:00 2001 From: fernando Date: Mon, 30 Dec 2013 17:10:32 +0100 Subject: [PATCH 16/21] Changeset: 120 Ajustes al menu --- foxbin2prg.pjt | Bin 277794 -> 304062 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 526 +++++++++++++++++++++++++++++++++---------------- 3 files changed, 361 insertions(+), 165 deletions(-) diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 93d38b90bce607ca4be85fcd870651e0c24f3e77..e43a5b078375e68ad57104ec88c2deffbb332913 100644 GIT binary patch delta 44436 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 diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index cea648327c9b8d06c8ca5042e9308f6b75541e9a..f953f01b52bfff948f1384d977a4a5ef5b6d0489 100644 GIT binary patch delta 72 zcmZ3-vyO+wfR{&ZBg+mJHWL#|6GQXKhgfQ~!AuhdC~yl=P;gTK0#g&PSQSv5hmnCn N!Nl0yVsa+yQ2-Dt4Nd?6 delta 72 zcmZ3-vyO+wfR{&lBg+mJHX~z03v=VihgfQ~flPCA3kE1~3sF#TQvd=}6BCe76%aEs QGB7BZm>QW+&SX6b01f&LI{*Lx diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 6ad5bd7..0e372d4 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -693,7 +693,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM .o_Conversor.c_OriginalFileName = tcOriginalFileName .o_Conversor.c_Foxbin2prg_FullPath = .c_Foxbin2prg_FullPath *-- - .o_Conversor.Convertir( @toModulo ) + .o_Conversor.Convertir( @toModulo, .F., THIS ) .c_TextLog = .c_TextLog + CR_LF + .o_Conversor.c_TextLog && Recojo el LOG que haya generado el conversor .normalizarCapitalizacionArchivos() ENDWITH && THIS AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' @@ -793,12 +793,16 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE RenameFile LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS Scripting.FileSystemObject - LOCAL lcLog + LOCAL lcLog, laFile(1,5) THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) lcLog = '' DO (tcEXE_CAPS) WITH tcFileName, '', 'F', lcLog, .T. - toFSO.MoveFile( tcFileName, tcFileName ) - THIS.writeLog( ' => Se renombrará a [' + tcFileName + ']' ) + IF ADIR( laFile, tcFileName, '', 1 ) > 0 AND laFile(1,1) <> JUSTFNAME(tcFileName) + toFSO.MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(tcFileName) ), tcFileName ) + THIS.writeLog( ' => Se renombrará a [' + tcFileName + ']' ) + ELSE + THIS.writeLog( ' => No se renombrará a [' + tcFileName + '] porque ya estaba correcto.' ) + ENDIF ENDPROC @@ -1156,8 +1160,12 @@ DEFINE CLASS c_conversor_base AS SESSION * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF THIS.writeLog( '' ) THIS.writeLog( C_CONVERTING_FILE_LOC + THIS.c_OutputFile + '...' ) ENDPROC @@ -1263,7 +1271,20 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE doBackup - LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3 + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toEx (@? IN ) Objeto Exception con información del error + * tlRelanzarError (v? IN ) Indica si se debe relanzar el error + * tcBakFile_1 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,frx,lbx,dbf,dbc,mnx,vc2,sc2,pj2,etc) + * tcBakFile_2 (@? OUT) Nombre del archivo backup 2 (vct,sct,pjt,frt,lbt,fpt,dct,mnt,etc) + * tcBakFile_3 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,cdx,dcx,etc) + * toFoxbin2prg (v! IN ) Referencia al objeto principal + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3, toFoxbin2prg + + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF TRY LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3 @@ -1273,6 +1294,10 @@ DEFINE CLASS c_conversor_base AS SESSION tcBakFile_1 = FORCEEXT(THIS.c_OutputFile, lcExt_1 + lcNext_Bak) DO CASE + CASE INLIST( lcExt_1, toFoxbin2prg.c_PJ2, toFoxbin2prg.c_VC2, toFoxbin2prg.c_SC2, toFoxbin2prg.c_FR2 ; + , toFoxbin2prg.c_LB2, toFoxbin2prg.c_DB2, toFoxbin2prg.c_DC2, toFoxbin2prg.c_MN2 ) + *-- Extensiones TEXTO + CASE lcExt_1 = 'DBF' *-- DBF lcExt_2 = 'FPT' @@ -1295,20 +1320,25 @@ DEFINE CLASS c_conversor_base AS SESSION ENDCASE IF NOT EMPTY(lcExt_1) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) - IF EMPTY(lcExt_3) + *-- 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 ) - ELSE + OTHERWISE THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) - ENDIF + ENDCASE - RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) + *-- COPIA BACKUP + COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) IF NOT EMPTY(lcExt_2) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) - RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) + COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) ENDIF IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) - RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) + COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) ENDIF ENDIF @@ -1398,7 +1428,6 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* PROCEDURE getDBFmetadata *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -1456,8 +1485,12 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* - FUNCTION GetTimeStamp(tnTimeStamp) + FUNCTION GetTimeStamp + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tnTimeStamp (v! IN ) Timestamp en formato numérico + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tnTimeStamp *-- CONVIERTE UN DATO TIMESTAMP NUMERICO USADO POR LOS ARCHIVOS SCX/VCX/etc. EN TIPO DATETIME TRY LOCAL lcTimeStamp,lnYear,lnMonth,lnDay,lnHour,lnMinutes,lnSeconds,lcTime,lnHour,ltTimeStamp,lnResto ; @@ -1537,8 +1570,12 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* PROCEDURE get_SeparatedLineAndComment + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Línea a separar del comentario + * tcComment (@? OUT) Comentario + *--------------------------------------------------------------------------------------------------- LPARAMETERS tcLine, tcComment LOCAL ln_AT_Cmt tcComment = '' @@ -1553,7 +1590,6 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* PROCEDURE get_SeparatedPropAndValue *-- Devuelve el valor separado de la propiedad. *-- Si se indican más de 3 parámetros, evalúa el valor completo a través de las líneas de código @@ -2282,7 +2318,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -2308,8 +2343,12 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) ENDPROC @@ -2818,28 +2857,6 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC - PROCEDURE createMenu_RecordHeader - *-------------------------------------------------------------------------------------------------------------- - * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * tnMenuType (!v IN ) Indica el tipo de menu. 1=Menu, 4=Shortcut, 5=TopLevel Form Menu - *-------------------------------------------------------------------------------------------------------------- - LPARAMETERS tnMenuType - - INSERT INTO TABLABIN ; - ( 'OBJTYPE' ; - , 'OBJCODE' ; - , 'PROCTYPE' ; - , 'MARK' ; - , 'LOCATION' ) ; - VALUES ; - ( tnMenuType ; - , 22 ; - , 1 ; - , CHR(4) ; - , 1 ) - ENDPROC - - ******************************************************************************************************************* PROCEDURE emptyRecord LOCAL loReg @@ -4104,8 +4121,12 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -4118,7 +4139,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo la librería THIS.createClasslib() @@ -4139,6 +4160,8 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN @@ -4375,8 +4398,12 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -4389,7 +4416,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo el form THIS.createForm() @@ -4410,6 +4437,8 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN @@ -4654,12 +4683,14 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toProject (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toProject, toEx AS EXCEPTION + LPARAMETERS toProject, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toProject, @toEx ) #IF .F. LOCAL toProject AS CL_PROJECT OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -4672,7 +4703,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo solo la cabecera del proyecto THIS.createProject() @@ -4693,6 +4724,8 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN @@ -5373,12 +5406,14 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toReport (@! OUT) Objeto generado de clase CL_REPORT con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toReport, toEx AS EXCEPTION + LPARAMETERS toReport, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toReport, @toEx ) #IF .F. LOCAL toReport AS CL_REPORT OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -5391,7 +5426,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo el reporte THIS.createReport() @@ -5411,6 +5446,8 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN lnCodError @@ -5767,12 +5804,14 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toTable (@! OUT) Objeto generado de clase CL_TABLE con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toTable, toEx AS EXCEPTION + LPARAMETERS toTable, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toTable, @toEx ) #IF .F. LOCAL toTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -5785,7 +5824,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toTable ) @@ -5802,6 +5841,8 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN lnCodError @@ -6010,12 +6051,14 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toDatabase, toEx AS EXCEPTION + LPARAMETERS toDatabase, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toDatabase, @toEx ) #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -6028,7 +6071,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo la tabla *THIS.createTable() @@ -6048,6 +6091,8 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN lnCodError @@ -6068,7 +6113,6 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin STORE '' TO lcIndex, lcFieldDef toDatabase.updateDBC( THIS.c_OutputFile ) - *USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) CATCH TO loEx @@ -6170,12 +6214,14 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toMenu (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toMenu, toEx AS EXCEPTION + LPARAMETERS toMenu, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toMenu, @toEx ) #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -6188,11 +6234,10 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T. ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) *-- Creo la tabla THIS.createMenu() - *THIS.createMenu_RecordHeader( lnMenuType ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toMenu ) @@ -6209,6 +6254,8 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin THROW + FINALLY + USE IN (SELECT("TABLABIN")) ENDTRY RETURN lnCodError @@ -6293,8 +6340,6 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin lnCodError = 0 STORE '' TO lcIndex, lcFieldDef - *THIS.createMenu_RecordHeader( lnMenuType ) - toMenu.updateMENU( THIS.c_OutputFile ) @@ -6375,8 +6420,12 @@ DEFINE CLASS c_conversor_bin_a_prg AS c_conversor_base * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase correspondiente con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) ENDPROC @@ -7845,8 +7894,12 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -7937,6 +7990,8 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el VC2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -7980,12 +8035,14 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_MODULO con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toModulo, @toEx ) #IF .F. LOCAL toModulo AS CL_MODULO OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -8098,6 +8155,8 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el SC2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8143,8 +8202,12 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -8397,6 +8460,8 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg ENDTEXT + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el PJ2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8448,7 +8513,16 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg ******************************************************************************************************************* PROCEDURE Convertir - LPARAMETERS toModulo, toEx AS EXCEPTION + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toModulo (@! OUT) Objeto generado de clase CL_PROJECT con la información leida del texto + * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -8518,6 +8592,8 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg THIS.write_DETALLE_REPORTE( @loRegCur ) ENDIF + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el FR2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8562,8 +8638,12 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toModulo (@! OUT) Contenido del texto generado * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toModulo, toEx AS EXCEPTION + LPARAMETERS toModulo, toEx AS EXCEPTION, toFoxbin2prg + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF DODEFAULT( @toModulo, @toEx ) TRY @@ -8583,6 +8663,8 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, THIS.c_InputFile ) + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el DB2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8635,12 +8717,14 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toDatabase, toEx AS EXCEPTION + LPARAMETERS toDatabase, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toDatabase, @toEx ) #IF .F. LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -8660,6 +8744,8 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el DC2 IF THIS.l_Test toModulo = C_FB2PRG_CODE @@ -8704,12 +8790,14 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * totoMenu (@! OUT) Objeto generado de clase CL_MENU con la información leida del texto * toEx (@! OUT) Objeto con información del error + * toFoxbin2prg (v! IN ) Referencia al objeto principal *--------------------------------------------------------------------------------------------------- - LPARAMETERS toMenu, toEx AS EXCEPTION + LPARAMETERS toMenu, toEx AS EXCEPTION, toFoxbin2prg DODEFAULT( @toMenu, @toEx ) #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' #ENDIF TRY @@ -8726,6 +8814,8 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() + THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + *-- Genero el DC2 IF THIS.l_Test toMenu = C_FB2PRG_CODE @@ -14071,6 +14161,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] @@ -14125,6 +14216,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE .LOCATION = 1 .SETUPTYPE = 1 .CLEANTYPE = 1 + .ITEMNUM = STR(0,3) ENDWITH FOR I = I + 0 TO tnCodeLines @@ -14501,6 +14593,75 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE PROCEDURE updateMENU + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcOutputFile (@! IN/OUT) Contenido de la línea en análisis + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcOutputFile + + SELECT TABLABIN + + IF THIS.l_Debug + STRTOFILE( '', 'Opciones.txt' ) + ENDIF + + THIS.UpdateMenu_Recursivo( THIS, 0 ) + ENDPROC + + + PROCEDURE UpdateMenu_Recursivo + LPARAMETERS toObj as Collection, tnNivel + LOCAL loReg, loEx as Exception + + TRY + IF VARTYPE( toObj.oReg ) = 'O' + loReg = toObj.oReg + INSERT INTO TABLABIN FROM NAME loReg + *APPEND BLANK + *GATHER NAME loReg MEMO + + IF THIS.l_Debug + STRTOFILE( 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) ; + + CR_LF ; + , 'Opciones.txt', 1 ) + ENDIF + + ELSE + IF THIS.l_Debug + STRTOFILE( REPLICATE(C_TAB,tnNivel) ; + + 'Objeto [' + toObj.Class + '] sin registro oReg (nivel ' + TRANSFORM(tnNivel) + ')' ; + + CR_LF ; + , 'Opciones.txt', 1 ) + ENDIF + + ENDIF + + IF toObj.Count > 0 THEN + FOR EACH loReg IN toObj FOXOBJECT + THIS.UpdateMenu_Recursivo( loReg, tnNivel + 1 ) + ENDFOR + ENDIF + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY ENDPROC @@ -14514,6 +14675,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -14522,6 +14684,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 + n_ParentCount = 0 PROCEDURE analizarBloque @@ -14541,12 +14704,13 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE TRY LOCAL loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcSubName, lcComment, loReg, loEx AS EXCEPTION + LOCAL llBloqueEncontrado, lcSubName, lcComment, lnLast_I, loReg, loEx AS EXCEPTION STORE '' TO lcSubName, lcComment - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg - loReg.OBJTYPE = 2 + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg + loReg.OBJTYPE = 2 + loReg.ITEMNUM = STR(0,3) *LEFT( tcLine, 13 ) == 'DEFINE POPUP ' llBloqueEncontrado = .T. @@ -14576,13 +14740,18 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE 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.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - THIS.ADD( loOption ) - IF loOption.oReg.OBJCODE <> 77 + loOption.n_ParentCount = THIS.Count + IF NOT loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + I = lnLast_I + llBloqueEncontrado = .F. EXIT ENDIF + THIS.ADD( loOption ) + loOption.oReg.ITEMNUM = STR(THIS.Count,3) + loReg.NUMITEMS = THIS.Count loOption = NULL OTHERWISE && Otro valor @@ -14688,6 +14857,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -14696,6 +14866,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 + n_ParentCount = 0 PROCEDURE analizarBloque @@ -14715,12 +14886,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE TRY LOCAL loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcComment, loReg, loEx AS EXCEPTION ; + LOCAL llBloqueEncontrado, lcComment, loReg, lnLast_I, loEx AS EXCEPTION ; , llPadOBar_Analizado STORE '' TO lcComment - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg + loReg.ITEMNUM = STR(0,3) *IF LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' llBloqueEncontrado = .T. @@ -14745,22 +14917,36 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE CASE THIS.analizarBloque_DefinePAD( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) *llPadOBar_Analizado = .T. + 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 THIS.analizarBloque_DefineBAR( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) *llPadOBar_Analizado = .T. + 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.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + loBarPop.n_ParentCount = THIS.Count THIS.ADD( loBarPop ) + IF NOT loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + I = I - 1 + ENDIF loBarPop = NULL EXIT @@ -14781,6 +14967,8 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE THROW + FINALLY + loBarPop = NULL ENDTRY RETURN llBloqueEncontrado @@ -14828,62 +15016,66 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.NAME = lcPadName *ENDIF loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + + IF loReg.LEVELNAME # THIS.c_ParentName + EXIT + ENDIF + loReg.PROMPT = ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ' COLOR ' ) ) loReg.SCHEME = INT( VAL( ALLTRIM( STREXTRACT( tcLine, ' COLOR SCHEME ', ';', 1, 2 ) ) ) ) *-- ANALISIS DEL "DEFINE PAD" - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + IF ';' $ tcLine + FOR I = I + 1 TO tnCodeLines + THIS.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 + 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, '"', '"' ) ) + 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, 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 ) == 'MESSAGE ' + loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - CASE LEFT( tcLine, 8 ) == 'PICTURE ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + CASE LEFT( tcLine, 8 ) == 'PICTURE ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - CASE LEFT( tcLine, 8 ) == 'PICTRES ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - loReg.SYSRES = 1 + CASE LEFT( tcLine, 8 ) == 'PICTRES ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.SYSRES = 1 - OTHERWISE - * Nada - ENDCASE + OTHERWISE + * Nada + ENDCASE - IF NOT ';' $ tcLine && Fin - I = I + 1 - EXIT - ENDIF - ENDFOR - - I = I - 1 + IF NOT ';' $ tcLine && Fin + EXIT + ENDIF + ENDFOR + ENDIF && ';' $ tcLine * Estructuras ejemplo a analizar: @@ -14996,65 +15188,69 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.NAME = lcBarName ENDIF loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + + IF loReg.LEVELNAME # THIS.c_ParentName + EXIT + ENDIF + loReg.PROMPT = ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ';', 1, 2 ) ) + *loReg.ItemNum = STR(THIS.n_ParentCount + 1,3) *-- ANALISIS DEL "DEFINE BAR" - FOR I = I + 1 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + IF ';' $ tcLine + FOR I = I + 1 TO tnCodeLines + THIS.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 + 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, '"', '"' ) ) + 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, 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 ) == 'MESSAGE ' + loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - CASE LEFT( tcLine, 8 ) == 'PICTURE ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + CASE LEFT( tcLine, 8 ) == 'PICTURE ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - CASE LEFT( tcLine, 8 ) == 'PICTRES ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) - loReg.SYSRES = 1 + CASE LEFT( tcLine, 8 ) == 'PICTRES ' + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.SYSRES = 1 - OTHERWISE - * Nada - ENDCASE + OTHERWISE + * Nada + ENDCASE - IF NOT ';' $ tcLine && Fin - I = I + 1 - EXIT - ENDIF - ENDFOR - - I = I - 1 + 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.ItemNum = 0 && *FDB* ASIGNAR ESTO BIEN!! loReg.OBJCODE = 78 && Bar# EXIT ENDIF From 578a46f5a67f27e7ce7fb390af75b3064571f84a Mon Sep 17 00:00:00 2001 From: fernando Date: Wed, 1 Jan 2014 17:49:15 +0100 Subject: [PATCH 17/21] Changeset: 121 MNX>MN2>MNX Perfecto! Ahora a probar resto tipos de menus --- foxbin2prg.prg | 660 +++++++++++++++++++++++++++++++------------------ 1 file changed, 417 insertions(+), 243 deletions(-) diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 0e372d4..a17a5e6 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -192,8 +192,8 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro #DEFINE C_INDEX_F '' #DEFINE C_INDEXES_I '' #DEFINE C_INDEXES_F '' -#DEFINE C_MENU_I '' -#DEFINE C_MENU_F '' +#DEFINE C_PROC_CODE_I '*' +#DEFINE C_PROC_CODE_F '*' #DEFINE C_SETUPCODE_I '*' #DEFINE C_SETUPCODE_F '*' #DEFINE C_CLEANUPCODE_I '*' @@ -916,6 +916,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -1171,8 +1172,11 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* PROCEDURE decode_SpecialCodes_1_31 + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcText (@! IN ) Decodifica los primeros 31 caracteres ASCII de {nCode} a CHR(nCode) + *--------------------------------------------------------------------------------------------------- LPARAMETERS tcText LOCAL I FOR I = 0 TO 31 @@ -1182,6 +1186,26 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC + PROCEDURE DesindentarMemo + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcMemo (v! IN ) Memo a desindentar + * tcIndentacion (v! IN ) Indentación utilizada + * RETURN: Memo desindentado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcMemo, tcIndentacion + + LOCAL lcMemo, laLines(1), I + lcMemo = '' + + FOR I = 1 TO ALINES( laLines, tcMemo ) + lcMemo = lcMemo + SUBSTR( laLines(I), LEN(tcIndentacion) + 1 ) + CR_LF + ENDFOR + + RETURN lcMemo + ENDPROC + + ******************************************************************************************************************* PROCEDURE desnormalizarAsignacion LPARAMETERS tcAsignacion @@ -6340,7 +6364,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin lnCodError = 0 STORE '' TO lcIndex, lcFieldDef - toMenu.updateMENU( THIS.c_OutputFile ) + toMenu.updateMENU( THIS ) CATCH TO loEx @@ -12311,7 +12335,6 @@ DEFINE CLASS CL_DBC_VIEW AS CL_DBC_BASE ENDTEXT *-- ALGUNOS VALORES QUE EL DBGETPROP OFICIAL NO DEVUELVE - *fdb* *-- Path *-- OfflineRecordCount IF NOT EMPTY(THIS._Offline) AND EVALUATE(THIS._Offline) @@ -14024,6 +14047,7 @@ ENDDEFINE DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE _MEMBERDATA = [] ; + [] ; + + [] ; + [] ; + [] ; + [] @@ -14141,8 +14165,98 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE PROCEDURE updateMENU *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * tc_InputFile (v! IN ) Nombre del archivo de salida + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos *--------------------------------------------------------------------------------------------------- + LPARAMETERS toConversor + ENDPROC + + + PROCEDURE AnalizarSiExpresionEsComandoOProcedimiento + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcExpr (v! IN ) Expresión a analizar (puede ser una línea o un Procedure) + * tcProcName (@! OUT) Nombre del Procedimiento, si se encuentra uno + * tcProcCode (@! OUT) Código del Procedimiento, si se encuentra uno + * tcSourceCode (@? IN ) Si se indica, se buscará el nombre de Procedure para obtener su código + * tnIndentation (v? IN ) En caso de devolver código, indica si se debe indentar o quitar indentación + * tlAddProcEndproc (v? IN ) En caso de devolver código, indica si se debe encerrar con PROCEDURE/ENDPROC + *--------------------------------------------------------------------------------------------------- + * DETALLE: Los menus guardan en los primeros registros los Comandos o Procedimientos en el campo PROCEDURE, + * y luego al generar el código lo muestran como Comando si es una sola línea, y si no como Procedure. + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcExpr, tcProcName, tcProcCode, tcSourceCode, tnIndentation, tlAddProcEndproc + + LOCAL laProcLines(1), lnLine_Count, I + tcProcName = '' + tcProcCode = '' + tnIndentation = EVL(tnIndentation,0) + lnLine_Count = ALINES( laProcLines, tcExpr ) + + IF lnLine_Count > 1 + *-- ES UN PROCEDIMIENTO + tcProcCode = tcExpr + + FOR I = 1 TO lnLine_Count + *-- Si existe el snippet #NAME, lo usa + IF EMPTY(tcProcName) AND UPPER( LEFT( ALLTRIM(laProcLines(I)), 6 ) ) == '#NAME ' + tcProcName = ALLTRIM( SUBSTR( ALLTRIM(laProcLines(I)), 7 ) ) + EXIT + ENDIF + ENDFOR + ELSE + *-- ES UN COMANDO, PERO PODRÍA REFERENCIAR A UN PROCEDURE DEL MENU, SE VERIFICA. + IF NOT EMPTY(tcSourceCode) + IF LEFT( tcExpr, 3 ) == 'DO ' + *-- Parece un Procedimiento, vamos a confirmarlo. + tcProcName = ALLTRIM( STREXTRACT( tcExpr, 'DO ', '&'+'&', 1, 2 ) ) + tcProcCode = STREXTRACT( tcSourceCode, 'PROCEDURE ' + tcProcName + CR_LF, CR_LF + 'ENDPROC &'+'& ' + tcProcName ) + IF EMPTY(tcProcCode) + *-- Era un Command al final, o un Procedure externo, + *-- que para el caso es lo mismo porque no es del Menu. + tcProcName = '' + ENDIF + ENDIF + ENDIF + ENDIF + + *-- Si se indicó indentación, se reprocesa el código del procedimiento + IF NOT EMPTY(tcProcCode) AND (tnIndentation <> 0 OR tlAddProcEndproc) + lnLine_Count = ALINES( laProcLines, tcProcCode ) + tcProcCode = '' + + IF tlAddProcEndproc + tcProcCode = '*' + REPLICATE('-',34) + CR_LF + 'PROCEDURE <>' + CR_LF + ENDIF + + DO CASE + CASE tnIndentation = 0 + FOR I = 1 TO lnLine_Count + *-- No Indentar + tcProcCode = tcProcCode + laProcLines(I) + CR_LF + ENDFOR + + CASE tnIndentation > 0 + FOR I = 1 TO lnLine_Count + *-- Indentar + tcProcCode = tcProcCode + C_TAB + laProcLines(I) + CR_LF + ENDFOR + + OTHERWISE + FOR I = 1 TO lnLine_Count + *-- Quitar indentación + IF INLIST( LEFT(laProcLines(I),1), SPACE(1), C_TAB ) + tcProcCode = tcProcCode + SUBSTR( laProcLines(I), 2 ) + CR_LF + ELSE + tcProcCode = tcProcCode + laProcLines(I) + CR_LF + ENDIF + ENDFOR + ENDCASE + + IF tlAddProcEndproc + tcProcCode = tcProcCode + 'ENDPROC &' + '& <>' + CR_LF + ENDIF + ENDIF + ENDPROC @@ -14160,7 +14274,6 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -14197,65 +14310,72 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE TRY LOCAL loOptions AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' LOCAL loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, loReg, lcComment, loEx AS EXCEPTION ; + LOCAL llBloqueEncontrado, loReg, lcComment, lcExpr, lcProcName, lcProcCode, loEx AS EXCEPTION ; , llBloque_SetupCode_Analizado, llBloque_CleanupCode_Analizado, llBloque_MenuCode_Analizado ; - , llBloque_MenuType_Analizado + , llBloque_MenuType_Analizado, llBloque_Procedure_Analizado STORE '' TO lcComment - *IF LEFT(tcLine, LEN(C_MENU_I)) == C_MENU_I - llBloqueEncontrado = .T. + llBloqueEncontrado = .T. - *-- CABECERA DEL MENU - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg + *-- CABECERA DEL MENU + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg - WITH loReg - .OBJCODE = 22 - .PROCTYPE = 1 - .MARK = CHR(4) - .LOCATION = 1 - .SETUPTYPE = 1 - .CLEANTYPE = 1 - .ITEMNUM = STR(0,3) - ENDWITH + WITH loReg + .OBJCODE = 22 + .PROCTYPE = 1 + .MARK = CHR(4) + .LOCATION = 1 + .SETUPTYPE = 1 + .CLEANTYPE = 1 + .ITEMNUM = STR(0,3) + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION MENU _MSYSMENU ', CR_LF ) ) - FOR I = I + 0 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + IF NOT EMPTY(lcExpr) + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + IF EMPTY(lcProcCode) + *-- Comando + .PROCEDURE = lcExpr + ELSE + *-- Procedure + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + .PROCEDURE = lcProcCode + ENDIF + ENDIF + ENDWITH - CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) - LOOP && Saltear comentarios + FOR I = I + 0 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) - 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. + DO CASE + CASE EMPTY( tcLine ) + LOOP - *CASE C_MENU_F $ tcLine && Fin - * EXIT + CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios - CASE NOT llBloque_SetupCode_Analizado AND THIS.analizarBloque_SetupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - llBloque_SetupCode_Analizado = .T. + 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_MenuCode_Analizado AND THIS.analizarBloque_MenuCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - llBloque_MenuCode_Analizado = .T. + CASE NOT llBloque_SetupCode_Analizado AND THIS.analizarBloque_SetupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + llBloque_SetupCode_Analizado = .T. - CASE NOT llBloque_CleanupCode_Analizado AND THIS.analizarBloque_CleanupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - llBloque_CleanupCode_Analizado = .T. + CASE NOT llBloque_MenuCode_Analizado AND THIS.analizarBloque_MenuCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + llBloque_MenuCode_Analizado = .T. - *CASE C_BARPOP_I $ tcLine - * loOption = CREATEOBJECT("CL_MENU_OPTION") - * loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) - * THIS.ADD( loOption, loOption._Name ) + CASE NOT llBloque_CleanupCode_Analizado AND THIS.analizarBloque_CleanupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + llBloque_CleanupCode_Analizado = .T. - OTHERWISE && Otro valor - *-- No hay otros valores que reconocer - ENDCASE - ENDFOR - *ENDIF + CASE NOT llBloque_Procedure_Analizado AND THIS.analizarBloque_PROCEDURE( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + llBloque_Procedure_Analizado = .T. + + OTHERWISE && Otro valor + *-- No hay otros valores que reconocer + ENDCASE + ENDFOR CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 @@ -14301,12 +14421,12 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE EXIT OTHERWISE && Líneas de procedure - lcText = lcText + taCodeLines(I) + CR_LF + lcText = lcText + CR_LF + taCodeLines(I) ENDCASE ENDFOR I = I - 1 - THIS.oReg.Setup = lcText + THIS.oReg.Setup = SUBSTR( lcText, 3 ) && Quito el primer CR_LF ENDIF CATCH TO loEx @@ -14353,12 +14473,12 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE EXIT OTHERWISE && Líneas de procedure - lcText = lcText + taCodeLines(I) + CR_LF + lcText = lcText + CR_LF + taCodeLines(I) ENDCASE ENDFOR I = I - 1 - THIS.oReg.Cleanup = lcText + THIS.oReg.Cleanup = SUBSTR( lcText, 3 ) && Quito el primer CR_LF ENDIF CATCH TO loEx @@ -14408,10 +14528,6 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE ENDIF CATCH TO loEx - IF loEx.ERRORNO = 1470 && Incorrect property name. - loEx.USERVALUE = 'I=' + TRANSFORM(I) + ', PropName=[' + TRANSFORM(lcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' - ENDIF - IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON ENDIF @@ -14443,24 +14559,23 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE LOCAL llBloqueEncontrado, lcText, lcComment, lcProcName, loEx AS EXCEPTION STORE '' TO lcText, lcComment - IF LEFT(tcLine, LEN(C_PROCEDURE)) == C_PROCEDURE + IF LEFT(tcLine, LEN(C_PROC_CODE_I)) == C_PROC_CODE_I llBloqueEncontrado = .T. FOR I = I + 1 TO tnCodeLines THIS.set_Line( @tcLine, @taCodeLines, I ) DO CASE - CASE C_ENDPROC $ tcLine && Fin + CASE C_PROC_CODE_F $ tcLine && Fin I = I + 1 EXIT OTHERWISE && Líneas de procedure - lcText = lcText + taCodeLines(I) + CR_LF + *-- Las saltea ENDCASE ENDFOR I = I - 1 - THIS.oReg.Cleanup = lcText ENDIF CATCH TO loEx @@ -14482,7 +14597,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE *--------------------------------------------------------------------------------------------------- TRY - LOCAL lcText, loReg, loHeader, lnNivel, lcEndProcedures ; + LOCAL lcText, loReg, loHeader, lnNivel, lcEndProcedures, lcExpr, lcProcName, lcProcCode ; , loEx AS EXCEPTION ; , loCol_LastLevelName AS COLLECTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; @@ -14524,41 +14639,92 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE DO CASE CASE loHeader.ObjType = 1 OR loHeader.ObjType = 5 *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) - IF NOT EMPTY(loReg.PROCEDURE) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - ON SELECTION MENU <> <> - ENDTEXT + 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 + *TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * ON SELECTION MENU <> <> + *ENDTEXT + ELSE + *-- Procedure + lcProcName = EVL( lcProcName, CHRTRAN('SELECTION MENU ' + loBarPop.Name, ' ', '_') ) + lcText = lcText + 'ON SELECTION MENU ' + loBarPop.Name + ' DO ' + lcProcName + CR_LF + * ON SELECTION MENU <> DO <> && + *TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * ON SELECTION MENU <> DO <> + *ENDTEXT + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF + ENDIF ENDIF - *-- Procedimiento del Menu Bar (ObjType:2, ObjCode:1) - IF NOT EMPTY(loBarPop.PROCEDURE) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - ON SELECTION POPUP ALL <> - ENDTEXT - ENDIF +*!* *-- Procedimiento del Menu Bar (ObjType:2, ObjCode:1) +*!* IF NOT EMPTY(loBarPop.PROCEDURE) +*!* lcExpr = loBarPop.PROCEDURE +*!* THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) + +*!* IF EMPTY(lcProcCode) +*!* *-- Comando +*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 +*!* ON SELECTION POPUP ALL <> +*!* ENDTEXT +*!* ELSE +*!* *-- Procedure +*!* lcProcName = EVL( lcProcName, CHRTRAN('SELECTION POPUP ALL', ' ', '_') ) +*!* * ON SELECTION POPUP ALL DO <> && +*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 +*!* ON SELECTION POPUP ALL DO <> +*!* ENDTEXT +*!* lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) +*!* lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF +*!* ENDIF +*!* ENDIF CASE loHeader.ObjType = 4 *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) - IF NOT EMPTY(loReg.PROCEDURE) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - ON SELECTION POPUP <> <> - ENDTEXT - ENDIF +*!* IF NOT EMPTY(loReg.PROCEDURE) +*!* lcExpr = loReg.PROCEDURE +*!* THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) - TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - ACTIVATE POPUP <> - ENDTEXT +*!* IF EMPTY(lcProcCode) +*!* *-- Comando +*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 +*!* ON SELECTION POPUP <> <> +*!* ENDTEXT +*!* ELSE +*!* *-- Procedure +*!* lcProcName = EVL( lcProcName, CHRTRAN('SELECTION POPUP ' + THIS.Item(1).Item(1).Item(1).oReg.Name, ' ', '_') ) +*!* * ON SELECTION POPUP <> DO <> && +*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 +*!* ON SELECTION POPUP <> DO <> +*!* ENDTEXT +*!* 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 + *TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + * ACTIVATE POPUP <> + *ENDTEXT ENDCASE - *-- Procedimientos finales - IF NOT EMPTY(lcEndProcedures) - lcText = lcText + CR_LF + CR_LF + lcEndProcedures - ENDIF - 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 <<>> @@ -14583,6 +14749,9 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE PROCEDURE get_DataFromTablabin + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + *--------------------------------------------------------------------------------------------------- LOCAL loReg, loCol_LastLevelName AS COLLECTION GO TOP SCATTER MEMO NAME loReg @@ -14595,33 +14764,51 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE PROCEDURE updateMENU *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * tcOutputFile (@! IN/OUT) Contenido de la línea en análisis + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcOutputFile - + LPARAMETERS toConversor + + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF + SELECT TABLABIN IF THIS.l_Debug - STRTOFILE( '', 'Opciones.txt' ) + toConversor.writeLog( '' ) + toConversor.writeLog( REPLICATE('-',80) ) + ENDIF + + THIS.UpdateMenu_Recursivo( THIS, 0, @toConversor ) + + IF THIS.l_Debug + toConversor.writeLog( REPLICATE('-',80) ) ENDIF - THIS.UpdateMenu_Recursivo( THIS, 0 ) ENDPROC PROCEDURE UpdateMenu_Recursivo - LPARAMETERS toObj as Collection, tnNivel + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toObj (v! IN ) Referencia del objeto CL_MENU_BARPOP o CL_MENU_OPTION + * tnNivel (v! IN ) Nivel de indentación (solo para debug) + * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toObj as Collection, tnNivel, toConversor LOCAL loReg, loEx as Exception + #IF .F. + LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' + #ENDIF + TRY IF VARTYPE( toObj.oReg ) = 'O' loReg = toObj.oReg INSERT INTO TABLABIN FROM NAME loReg - *APPEND BLANK - *GATHER NAME loReg MEMO IF THIS.l_Debug - STRTOFILE( REPLICATE(C_TAB,tnNivel) ; + toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; + 'ObjType=' + TRANSFORM(loReg.ObjType) ; + ', ObjCode=' + TRANSFORM(loReg.ObjCode) ; + ', Name=' + TRANSFORM(loReg.NAME) ; @@ -14633,24 +14820,20 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE + ', KeyName=' + TRANSFORM(loReg.KEYNAME) ; + ', KeyLabel=' + TRANSFORM(loReg.KeyLabel) ; + ', Comment=' + TRANSFORM(loReg.Comment) ; - + ', SkipFor=' + TRANSFORM(loReg.SkipFor) ; - + CR_LF ; - , 'Opciones.txt', 1 ) + + ', SkipFor=' + TRANSFORM(loReg.SkipFor) ) ENDIF ELSE IF THIS.l_Debug - STRTOFILE( REPLICATE(C_TAB,tnNivel) ; - + 'Objeto [' + toObj.Class + '] sin registro oReg (nivel ' + TRANSFORM(tnNivel) + ')' ; - + CR_LF ; - , 'Opciones.txt', 1 ) + toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; + + 'Objeto [' + toObj.Class + '] sin registro oReg (nivel ' + TRANSFORM(tnNivel) + ')' ) ENDIF ENDIF IF toObj.Count > 0 THEN FOR EACH loReg IN toObj FOXOBJECT - THIS.UpdateMenu_Recursivo( loReg, tnNivel + 1 ) + THIS.UpdateMenu_Recursivo( loReg, tnNivel + 1, @toConversor ) ENDFOR ENDIF @@ -14675,7 +14858,6 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; - + [] ; + [] #IF .F. @@ -14684,7 +14866,6 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 - n_ParentCount = 0 PROCEDURE analizarBloque @@ -14704,18 +14885,21 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE TRY LOCAL loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcSubName, lcComment, lnLast_I, loReg, loEx AS EXCEPTION - STORE '' TO lcSubName, lcComment + LOCAL llBloqueEncontrado, lcSubName, lcComment, lnLast_I, loReg, lcExpr, lcProcName, lcProcCode ; + , loEx AS EXCEPTION + STORE '' TO lcSubName, lcComment, lcExpr, lcProcName, lcProcCode THIS.oReg = toConversor.emptyRecord() loReg = THIS.oReg loReg.OBJTYPE = 2 + loReg.PROCTYPE = 1 loReg.ITEMNUM = STR(0,3) *LEFT( tcLine, 13 ) == 'DEFINE POPUP ' llBloqueEncontrado = .T. FOR I = I + 0 TO tnCodeLines + STORE '' TO lcExpr, lcProcName, lcProcCode THIS.set_Line( @tcLine, @taCodeLines, I ) DO CASE @@ -14732,18 +14916,24 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE loReg.OBJCODE = 1 loReg.NAME = '_MSYSMENU' loReg.LEVELNAME = loReg.NAME + 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 ' loReg.OBJCODE = 0 loReg.NAME = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) 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) + 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_ParentCount = THIS.Count IF NOT loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) I = lnLast_I llBloqueEncontrado = .F. @@ -14752,6 +14942,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE 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 @@ -14787,10 +14978,11 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE LPARAMETERS toParentReg, tnNivel, tcEndProcedures, toHeader TRY - LOCAL loReg, I, lcText, lcTab, loEx AS EXCEPTION ; + LOCAL loReg, I, lcText, lcTab, lcExpr, lcProcName, lcProcCode, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' - lcText = '' + + STORE '' TO lcText, lcExpr, lcProcName, lcProcCode loReg = THIS.oReg lcTab = REPLICATE(CHR(9),tnNivel) @@ -14811,7 +15003,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE <>DEFINE POPUP <> SHORTCUT RELATIVE ENDTEXT ENDIF - ELSE + ELSE && ObjType = 1 ó 5 *-- Menu TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <>*---------------------------------- @@ -14826,6 +15018,20 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE lcText = lcText + loOption.toText(loReg, tnNivel+0, @tcEndProcedures, toHeader) ENDFOR ENDIF + + *-- Procedure del POPUP o MENU + IF NOT EMPTY(loReg.PROCEDURE) + lcExpr = loReg.PROCEDURE + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) + + IF EMPTY(lcProcName) + lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.Name, 'ALL' ) + ' ' + lcExpr + CR_LF + ELSE + lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.Name, 'ALL' ) + ' DO ' + lcProcName + CR_LF + tcEndProcedures = tcEndProcedures + STRTRAN( lcProcCode, '<>', lcProcName ) + CR_LF + ENDIF + + ENDIF CATCH TO loEx @@ -14857,7 +15063,6 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; - + [] ; + [] #IF .F. @@ -14866,7 +15071,6 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 - n_ParentCount = 0 PROCEDURE analizarBloque @@ -14894,67 +15098,58 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg = THIS.oReg loReg.ITEMNUM = STR(0,3) - *IF LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' - llBloqueEncontrado = .T. + llBloqueEncontrado = .T. - FOR I = I + 0 TO tnCodeLines - THIS.set_Line( @tcLine, @taCodeLines, I ) + FOR I = I + 0 TO tnCodeLines + THIS.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_I) ) == C_MENUCODE_I - loReg.OBJTYPE = 2 - loReg.OBJCODE = 1 - - *CASE LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' - *lcSubname = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - *IF UPPER(lcSubname) - - CASE THIS.analizarBloque_DefinePAD( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - *llPadOBar_Analizado = .T. - 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 THIS.analizarBloque_DefineBAR( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - *llPadOBar_Analizado = .T. - 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_ParentCount = THIS.Count - THIS.ADD( loBarPop ) - IF NOT loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - I = I - 1 - ENDIF - loBarPop = NULL + 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. 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, 13 ) == 'DEFINE POPUP ' + loBarPop = CREATEOBJECT("CL_MENU_BARPOP") + lnLast_I = I + loBarPop.c_ParentName = loReg.LEVELNAME + loBarPop.n_ParentCode = loReg.OBJCODE + THIS.ADD( loBarPop ) + IF NOT loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + I = I - 1 + ENDIF + loBarPop = NULL + EXIT - OTHERWISE && Otro valor - *-- No - ENDCASE - ENDFOR - *ENDIF + OTHERWISE && Otro valor + *-- No + ENDCASE + ENDFOR CATCH TO loEx WHEN loEx.Message = 'Nivel_Anterior' *-- OK. Volver a evaluar en el nivel anterior @@ -14991,7 +15186,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE #ENDIF TRY - LOCAL llBloqueEncontrado, lcText, loReg, lnPos, lcPadName, lcExpr, lcComment, lcProcName, loEx AS EXCEPTION ; + LOCAL llBloqueEncontrado, lcText, loReg, lnPos, lcPadName, lcExpr, lcComment, lcProcName, lcProcCode, loEx AS EXCEPTION ; , lnNegContainer, lnNegObject STORE '' TO lcText, lcComment, lcPadName @@ -15021,8 +15216,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT ENDIF - loReg.PROMPT = ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ' COLOR ' ) ) - loReg.SCHEME = INT( VAL( ALLTRIM( STREXTRACT( tcLine, ' COLOR SCHEME ', ';', 1, 2 ) ) ) ) + loReg.PROMPT = CHRTRAN( ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ' COLOR ' ) ), '"', '' ) *-- ANALISIS DEL "DEFINE PAD" IF ';' $ tcLine @@ -15061,10 +15255,10 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) CASE LEFT( tcLine, 8 ) == 'PICTURE ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"' ) ) CASE LEFT( tcLine, 8 ) == 'PICTRES ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, 'PICTRES ', ';', 1, 2 ) ) loReg.SYSRES = 1 OTHERWISE @@ -15100,14 +15294,26 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT CASE LEFT( tcLine, 17 ) == 'ON SELECTION PAD ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + lcPadName + ' ', '', 1, 2 ) ) + lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LEVELNAME + ' ', '', 1, 2 ) ) + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) DO CASE - CASE ' &'+'& ' $ lcExpr - loReg.OBJCODE = 80 + *CASE ' &'+'& ' $ lcExpr + CASE NOT EMPTY(lcProcCode) + *lcProcName = ALLTRIM( STREXTRACT( lcExpr, 'DO ', '&'+'&', 1, 2 ) ) + 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 + loReg.COMMAND = lcExpr ENDCASE @@ -15156,7 +15362,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE #ENDIF TRY - LOCAL llBloqueEncontrado, lcText, loReg, lnPos, lcBarName, lcExpr, lcComment, lcProcName, loEx AS EXCEPTION ; + LOCAL llBloqueEncontrado, lcText, loReg, lnPos, lcBarName, lcExpr, lcComment, lcProcName, lcProcCode, loEx AS EXCEPTION ; , lnNegContainer, lnNegObject STORE '' TO lcText, lcComment, lcBarName @@ -15183,7 +15389,8 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg = THIS.oReg loReg.OBJTYPE = 3 lcBarName = ALLTRIM( STREXTRACT( tcLine, 'BAR ' , ' OF' ) ) - IF LEFT(lcBarName,1) == '_' + *IF LEFT(lcBarName,1) == '_' + IF NOT ISDIGIT(lcBarName) *-- Es un BAR del sistema loReg.NAME = lcBarName ENDIF @@ -15193,8 +15400,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT ENDIF - loReg.PROMPT = ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ';', 1, 2 ) ) - *loReg.ItemNum = STR(THIS.n_ParentCount + 1,3) + loReg.PROMPT = CHRTRAN( ALLTRIM( STREXTRACT( tcLine, ' PROMPT ', ';', 1, 2 ) ), '"', '' ) *-- ANALISIS DEL "DEFINE BAR" IF ';' $ tcLine @@ -15233,10 +15439,10 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.MESSAGE = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) CASE LEFT( tcLine, 8 ) == 'PICTURE ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"' ) ) CASE LEFT( tcLine, 8 ) == 'PICTRES ' - loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, '"', '"', 1, 4 ) ) + loReg.RESNAME = ALLTRIM( STREXTRACT( tcLine, 'PICTRES ', ';', 1, 2 ) ) loReg.SYSRES = 1 OTHERWISE @@ -15278,14 +15484,26 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT CASE LEFT( tcLine, 17 ) == 'ON SELECTION BAR ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + lcBarName + ' ', '', 1, 2 ) ) + lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LEVELNAME + ' ', '', 1, 2 ) ) + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) DO CASE - CASE ' &'+'& ' $ lcExpr - loReg.OBJCODE = 80 && Procedure + *CASE ' &'+'& ' $ lcExpr + CASE NOT EMPTY(lcProcCode) + *lcProcName = ALLTRIM( STREXTRACT( lcExpr, 'DO ', '&'+'&', 1, 2 ) ) + 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 @@ -15330,7 +15548,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE LPARAMETERS toParentReg, tnNivel, tcEndProcedures, toHeader TRY - LOCAL loReg, I, lcText, lcTab, lcProcName, loEx AS EXCEPTION ; + LOCAL loReg, I, lcText, lcTab, lcExpr, lcProcName, lcProcCode, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' @@ -15341,7 +15559,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loBarPop = toParentReg *-- Actualización de procedimientos - lcProcName = THIS.get_ProcNameFromSnippet(loReg) + *lcProcName = THIS.get_ProcNameFromSnippet(loReg) *-- Options (ObjType:3) DO CASE @@ -15359,17 +15577,17 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDCASE - IF loReg.OBJCODE = 80 && Procedure + IF loReg.OBJCODE = 80 && Procedure de BAR o PAD *-- Reemplazo el nombre definitivo + lcExpr = loReg.PROCEDURE + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) + IF EMPTY(lcProcName) lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) ENDIF lcText = STRTRAN( lcText, '<>', lcProcName ) - tcEndProcedures = tcEndProcedures ; - + 'PROCEDURE ' + lcProcName + CR_LF ; - + ALLTRIM(loReg.Procedure) + CR_LF ; - + 'ENDPROC &' + '& ' + lcProcName + CR_LF + CR_LF + tcEndProcedures = tcEndProcedures + STRTRAN( lcProcCode, '<>', lcProcName ) + CR_LF ENDIF @@ -15400,52 +15618,6 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDPROC - PROCEDURE get_ProcNameFromSnippet - *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * toReg (v? IN ) Objeto registro - *--------------------------------------------------------------------------------------------------- - LPARAMETERS toReg - - LOCAL lcProcName, lcProcCode, laProcLines(1), lnProcLines - - *-- Actualización de procedimientos - IF toReg.OBJCODE = 80 && Procedure - lcProcName = '' - - IF NOT EMPTY(toReg.Procedure) - lnProcLines = ALINES(laProcLines, toReg.Procedure) - - FOR I = 1 TO lnProcLines - *-- Si existe el snippet #NAME, lo usa - IF EMPTY(lcProcName) AND UPPER( LEFT( ALLTRIM(laProcLines(I)), 6 ) ) == '#NAME ' - lcProcName = ALLTRIM( SUBSTR( ALLTRIM(laProcLines(I)), 7 ) ) - *ADEL(laProcLines,I) - *lnProcLines = lnProcLines - 1 - *DIMENSION laProcLines(lnProcLines) - *EXIT - ENDIF - - *-- Indento el código - laProcLines(I) = C_TAB + laProcLines(I) - ENDFOR - - IF NOT EMPTY(lcProcName) - *-- Rearmo el Procedure - WITH toReg - .Procedure = '' - FOR I = 1 TO lnProcLines - .Procedure = .Procedure + laProcLines(I) + CR_LF - ENDFOR - ENDWITH - ENDIF - ENDIF - ENDIF - - RETURN lcProcName - ENDPROC - - PROCEDURE get_DefineBarText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -15464,7 +15636,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE *-- DEFINE BAR *lcText = lcTab + '*----------------------------------' + CR_LF - lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM(EVL(toReg.Name,toReg.ItemNum)) + ' OF ' + ALLTRIM(toReg.LevelName) ; + lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM( EVL( toReg.Name, toReg.ItemNum ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' PROMPT "' + toReg.PROMPT + '"' IF NOT EMPTY(toReg.KeyName) @@ -15497,16 +15669,17 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE IF toReg.OBJCODE = 77 && Submenu loBarPop = THIS.Item(1).oReg - lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) ; + lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM( EVL( toReg.Name, toReg.ItemNum ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.Name) ELSE - lcText = lcText + lcTab + 'ON SELECTION BAR ' + ALLTRIM(toReg.ItemNum) + ' OF ' + ALLTRIM(toReg.LevelName) + lcText = lcText + lcTab + 'ON SELECTION BAR ' + ALLTRIM( EVL( toReg.Name, toReg.ItemNum ) ) + ' OF ' + ALLTRIM(toReg.LevelName) DO CASE CASE toReg.OBJCODE = 67 && Command lcText = lcText + ' ' + ALLTRIM(toReg.Command) CASE toReg.OBJCODE = 80 && Procedure - lcText = lcText + ' DO <>' + ' &'+'& ' + *lcText = lcText + ' DO <>' + ' &'+'& ' + lcText = lcText + ' DO <>' ENDCASE ENDIF ENDIF @@ -15597,7 +15770,8 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE CASE toReg.OBJCODE = 67 && Command lcText = lcText + ' ' + ALLTRIM(toReg.Command) CASE toReg.OBJCODE = 80 && Procedure - lcText = lcText + ' DO <>' + ' &'+'& ' + *lcText = lcText + ' DO <>' + ' &'+'& ' + lcText = lcText + ' DO <>' ENDCASE ENDIF ENDIF From 7c14118efc4544400046bb724dd5f6d46ad16c1e Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 2 Jan 2014 01:24:51 +0100 Subject: [PATCH 18/21] Changeset: 122 Fin desarrollo Menu > Texto > Menu! :-) --- foxbin2prg.pjt | Bin 304062 -> 310794 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 562 ++++++++++++++++++++++++++----------------------- 3 files changed, 293 insertions(+), 269 deletions(-) diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index e43a5b078375e68ad57104ec88c2deffbb332913..24a1d60af4eb79e587afc45ffbe898441ac0b91c 100644 GIT binary patch delta 25599 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 BF@pdA delta 19232 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 delta 76 zcmZ3-vyO+wfR{&ZBg-}x4r3D&6H60A^T~%;s&t_o69y=73sF#TQvd=}6R=nnP@IR6 PfkDB<*xX`rChJiEP&^JC diff --git a/foxbin2prg.prg b/foxbin2prg.prg index a17a5e6..60ffe64 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1194,14 +1194,14 @@ DEFINE CLASS c_conversor_base AS SESSION * RETURN: Memo desindentado *--------------------------------------------------------------------------------------------------- LPARAMETERS tcMemo, tcIndentacion - + LOCAL lcMemo, laLines(1), I lcMemo = '' - + FOR I = 1 TO ALINES( laLines, tcMemo ) lcMemo = lcMemo + SUBSTR( laLines(I), LEN(tcIndentacion) + 1 ) + CR_LF ENDFOR - + RETURN lcMemo ENDPROC @@ -2852,24 +2852,24 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base CREATE TABLE (THIS.c_OutputFile) ; ( 'OBJTYPE' Numeric(2) ; , 'OBJCODE' Numeric(2) ; - , 'NAME' Memo ; - , 'PROMPT' Memo ; - , 'COMMAND' Memo ; - , 'MESSAGE' Memo ; + , 'NAME' MEMO ; + , 'PROMPT' MEMO ; + , 'COMMAND' MEMO ; + , 'MESSAGE' MEMO ; , 'PROCTYPE' Numeric(1) ; - , 'PROCEDURE' Memo ; + , 'PROCEDURE' MEMO ; , 'SETUPTYPE' Numeric(1) ; - , 'SETUP' Memo ; + , 'SETUP' MEMO ; , 'CLEANTYPE' Numeric(1) ; - , 'CLEANUP' Memo ; - , 'MARK' Character(1) ; - , 'KEYNAME' Memo ; - , 'KEYLABEL' Memo ; - , 'SKIPFOR' Memo ; + , 'CLEANUP' MEMO ; + , 'MARK' CHARACTER(1) ; + , 'KEYNAME' MEMO ; + , 'KEYLABEL' MEMO ; + , 'SKIPFOR' MEMO ; , 'NAMECHANGE' Logical ; , 'NUMITEMS' Numeric(2) ; - , 'LEVELNAME' Character(10) ; - , 'ITEMNUM' Character(3) ; + , 'LEVELNAME' CHARACTER(10) ; + , 'ITEMNUM' CHARACTER(3) ; , 'COMMENT' MEMORY(4) ; , 'LOCATION' Numeric(2) ; , 'SCHEME' Numeric(2) ; @@ -14185,13 +14185,13 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE * y luego al generar el código lo muestran como Comando si es una sola línea, y si no como Procedure. *--------------------------------------------------------------------------------------------------- LPARAMETERS tcExpr, tcProcName, tcProcCode, tcSourceCode, tnIndentation, tlAddProcEndproc - + LOCAL laProcLines(1), lnLine_Count, I tcProcName = '' tcProcCode = '' tnIndentation = EVL(tnIndentation,0) lnLine_Count = ALINES( laProcLines, tcExpr ) - + IF lnLine_Count > 1 *-- ES UN PROCEDIMIENTO tcProcCode = tcExpr @@ -14218,14 +14218,15 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE ENDIF ENDIF ENDIF - + *-- Si se indicó indentación, se reprocesa el código del procedimiento IF NOT EMPTY(tcProcCode) AND (tnIndentation <> 0 OR tlAddProcEndproc) lnLine_Count = ALINES( laProcLines, tcProcCode ) tcProcCode = '' IF tlAddProcEndproc - tcProcCode = '*' + REPLICATE('-',34) + CR_LF + 'PROCEDURE <>' + CR_LF + *tcProcCode = '*' + REPLICATE('-',34) + CR_LF + 'PROCEDURE <>' + CR_LF + tcProcCode = 'PROCEDURE <>' + CR_LF ENDIF DO CASE @@ -14256,7 +14257,7 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE tcProcCode = tcProcCode + 'ENDPROC &' + '& <>' + CR_LF ENDIF ENDIF - + ENDPROC @@ -14321,30 +14322,6 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE THIS.oReg = toConversor.emptyRecord() loReg = THIS.oReg - WITH loReg - .OBJCODE = 22 - .PROCTYPE = 1 - .MARK = CHR(4) - .LOCATION = 1 - .SETUPTYPE = 1 - .CLEANTYPE = 1 - .ITEMNUM = STR(0,3) - 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 EMPTY(lcProcCode) - *-- Comando - .PROCEDURE = lcExpr - ELSE - *-- Procedure - lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) - .PROCEDURE = lcProcCode - ENDIF - ENDIF - ENDWITH - FOR I = I + 0 TO tnCodeLines THIS.set_Line( @tcLine, @taCodeLines, I ) @@ -14357,7 +14334,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE 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 + loReg.ObjType = toConversor.n_MenuType llBloque_MenuType_Analizado = .T. CASE NOT llBloque_SetupCode_Analizado AND THIS.analizarBloque_SetupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) @@ -14373,7 +14350,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE llBloque_Procedure_Analizado = .T. OTHERWISE && Otro valor - *-- No hay otros valores que reconocer + *EXIT ENDCASE ENDFOR @@ -14426,7 +14403,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE ENDFOR I = I - 1 - THIS.oReg.Setup = SUBSTR( lcText, 3 ) && Quito el primer CR_LF + THIS.oReg.SETUP = SUBSTR( lcText, 3 ) && Quito el primer CR_LF ENDIF CATCH TO loEx @@ -14512,18 +14489,92 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE TRY LOCAL loOptions AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' LOCAL loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcPropName, lcValue, lcComment, loEx AS EXCEPTION ; + LOCAL llBloqueEncontrado, lcExpr, lcProcName, lcProcCode, lcComment, loReg, loEx AS EXCEPTION ; , llBloque_SetupCode_Analizado - STORE '' TO lcPropName, lcValue, lcComment + STORE '' TO lcExpr, lcProcName, lcProcCode, lcComment + loReg = THIS.oReg IF LEFT(tcLine, LEN(C_MENUCODE_I)) == C_MENUCODE_I llBloqueEncontrado = .T. + *-- HEADER + WITH loReg + .OBJCODE = 22 + .PROCTYPE = 1 + .MARK = CHR(4) + .LOCATION = 1 + .SETUPTYPE = 1 + .CLEANTYPE = 1 + .ITEMNUM = STR(0,3) + + IF .ObjType = 4 && Shortcut menu + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ALL ', CR_LF ) ) + + IF NOT EMPTY(lcExpr) + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) + + IF EMPTY(lcProcCode) + *-- Comando + .PROCEDURE = lcExpr + ELSE + *-- Procedure + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + .PROCEDURE = lcProcCode + ENDIF + ENDIF + ELSE && .OBJTYPE = 1 ó 5 + 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 EMPTY(lcProcCode) + *-- Comando + .PROCEDURE = lcExpr + ELSE + *-- Procedure + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + .PROCEDURE = lcProcCode + ENDIF + ENDIF + ENDIF + ENDWITH + + 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 ) + THIS.ADD( loBarPop ) + + IF loReg.ObjType = 4 && Shortcut menu + *-- Creo option + loOption = CREATEOBJECT("CL_MENU_OPTION") + loOption.oReg = toConversor.emptyRecord() + WITH loOption.oReg + .ObjType = 3 + .OBJCODE = 77 + .PROMPT = '\><><> ENDTEXT - IF NOT EMPTY(loReg.Setup) + IF NOT EMPTY(loReg.SETUP) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> @@ -14645,74 +14700,35 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE IF EMPTY(lcProcCode) *-- Comando - lcText = lcText + 'ON SELECTION MENU ' + loBarPop.Name + ' ' + lcExpr + CR_LF - *TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * ON SELECTION MENU <> <> - *ENDTEXT + lcText = lcText + 'ON SELECTION MENU ' + loBarPop.NAME + ' ' + lcExpr + CR_LF ELSE *-- Procedure - lcProcName = EVL( lcProcName, CHRTRAN('SELECTION MENU ' + loBarPop.Name, ' ', '_') ) - lcText = lcText + 'ON SELECTION MENU ' + loBarPop.Name + ' DO ' + lcProcName + CR_LF - * ON SELECTION MENU <> DO <> && - *TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * ON SELECTION MENU <> DO <> - *ENDTEXT + 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 -*!* *-- Procedimiento del Menu Bar (ObjType:2, ObjCode:1) -*!* IF NOT EMPTY(loBarPop.PROCEDURE) -*!* lcExpr = loBarPop.PROCEDURE -*!* THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) - -*!* IF EMPTY(lcProcCode) -*!* *-- Comando -*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 -*!* ON SELECTION POPUP ALL <> -*!* ENDTEXT -*!* ELSE -*!* *-- Procedure -*!* lcProcName = EVL( lcProcName, CHRTRAN('SELECTION POPUP ALL', ' ', '_') ) -*!* * ON SELECTION POPUP ALL DO <> && -*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 -*!* ON SELECTION POPUP ALL DO <> -*!* ENDTEXT -*!* lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) -*!* lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF -*!* ENDIF -*!* ENDIF - CASE loHeader.ObjType = 4 - *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) -*!* IF NOT EMPTY(loReg.PROCEDURE) -*!* lcExpr = loReg.PROCEDURE -*!* THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) + IF NOT EMPTY(loHeader.PROCEDURE) + lcExpr = loHeader.PROCEDURE + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) -*!* IF EMPTY(lcProcCode) -*!* *-- Comando -*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 -*!* ON SELECTION POPUP <> <> -*!* ENDTEXT -*!* ELSE -*!* *-- Procedure -*!* lcProcName = EVL( lcProcName, CHRTRAN('SELECTION POPUP ' + THIS.Item(1).Item(1).Item(1).oReg.Name, ' ', '_') ) -*!* * ON SELECTION POPUP <> DO <> && -*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 -*!* ON SELECTION POPUP <> DO <> -*!* ENDTEXT -*!* lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) -*!* lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF -*!* ENDIF -*!* ENDIF + 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 - *TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * ACTIVATE POPUP <> - *ENDTEXT + 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 @@ -14724,7 +14740,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE + 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 <<>> @@ -14773,7 +14789,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE #ENDIF SELECT TABLABIN - + IF THIS.l_Debug toConversor.writeLog( '' ) toConversor.writeLog( REPLICATE('-',80) ) @@ -14795,8 +14811,8 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE * tnNivel (v! IN ) Nivel de indentación (solo para debug) * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos *--------------------------------------------------------------------------------------------------- - LPARAMETERS toObj as Collection, tnNivel, toConversor - LOCAL loReg, loEx as Exception + LPARAMETERS toObj AS COLLECTION, tnNivel, toConversor + LOCAL loReg, loEx AS EXCEPTION #IF .F. LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' @@ -14810,33 +14826,33 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE IF THIS.l_Debug toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; + 'ObjType=' + TRANSFORM(loReg.ObjType) ; - + ', ObjCode=' + TRANSFORM(loReg.ObjCode) ; + + ', ObjCode=' + TRANSFORM(loReg.OBJCODE) ; + ', Name=' + TRANSFORM(loReg.NAME) ; - + ', LevelName=' + TRANSFORM(loReg.LEVELNAME) ; - + ', ItemNum=' + TRANSFORM(loReg.ItemNum) ; - + ', Location=' + TRANSFORM(loReg.Location) ; + + ', LevelName=' + TRANSFORM(loReg.LevelName) ; + + ', ItemNum=' + TRANSFORM(loReg.ITEMNUM) ; + + ', Location=' + TRANSFORM(loReg.LOCATION) ; + ', Prompt=' + TRANSFORM(loReg.PROMPT) ; - + ', Message=' + TRANSFORM(loReg.Message) ; + + ', Message=' + TRANSFORM(loReg.MESSAGE) ; + ', KeyName=' + TRANSFORM(loReg.KEYNAME) ; + ', KeyLabel=' + TRANSFORM(loReg.KeyLabel) ; - + ', Comment=' + TRANSFORM(loReg.Comment) ; - + ', SkipFor=' + TRANSFORM(loReg.SkipFor) ) + + ', Comment=' + TRANSFORM(loReg.COMMENT) ; + + ', SkipFor=' + TRANSFORM(loReg.SKIPFOR) ) ENDIF - + ELSE IF THIS.l_Debug toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; - + 'Objeto [' + toObj.Class + '] sin registro oReg (nivel ' + TRANSFORM(tnNivel) + ')' ) + + 'Objeto [' + toObj.CLASS + '] sin registro oReg (nivel ' + TRANSFORM(tnNivel) + ')' ) ENDIF - + ENDIF - - IF toObj.Count > 0 THEN + + IF toObj.COUNT > 0 THEN FOR EACH loReg IN toObj FOXOBJECT THIS.UpdateMenu_Recursivo( loReg, tnNivel + 1, @toConversor ) ENDFOR ENDIF - + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON @@ -14858,6 +14874,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -14866,6 +14883,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 + n_ParentType = 0 PROCEDURE analizarBloque @@ -14888,67 +14906,78 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE LOCAL llBloqueEncontrado, lcSubName, lcComment, lnLast_I, loReg, lcExpr, lcProcName, lcProcCode ; , loEx AS EXCEPTION STORE '' TO lcSubName, lcComment, lcExpr, lcProcName, lcProcCode - - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg - loReg.OBJTYPE = 2 - loReg.PROCTYPE = 1 - loReg.ITEMNUM = STR(0,3) - *LEFT( tcLine, 13 ) == 'DEFINE POPUP ' - llBloqueEncontrado = .T. + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg + loReg.ObjType = 2 + loReg.PROCTYPE = 1 + 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 + THIS.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 + CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F + EXIT + + CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I + loReg.OBJCODE = 1 + loReg.NAME = '_MSYSMENU' + loReg.LevelName = loReg.NAME + loReg.SCHEME = IIF( loReg.OBJCODE = 1, 3, 4 ) + + IF THIS.n_ParentType = 4 EXIT - - CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I - loReg.OBJCODE = 1 - loReg.NAME = '_MSYSMENU' - loReg.LEVELNAME = loReg.NAME + ELSE 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 ' - loReg.OBJCODE = 0 - loReg.NAME = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) - 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 + CASE LEFT( tcLine, LEN('ON SELECTION POPUP ' + loReg.NAME) ) == 'ON SELECTION POPUP ' + loReg.NAME + EXIT - 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 - IF NOT loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - I = lnLast_I - llBloqueEncontrado = .F. - 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 + CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' + loReg.OBJCODE = 0 + 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) - OTHERWISE && Otro valor - *-- No - ENDCASE - ENDFOR + 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 + 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 CATCH TO loEx @@ -15018,16 +15047,16 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE lcText = lcText + loOption.toText(loReg, tnNivel+0, @tcEndProcedures, toHeader) ENDFOR ENDIF - + *-- Procedure del POPUP o MENU IF NOT EMPTY(loReg.PROCEDURE) lcExpr = loReg.PROCEDURE THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) IF EMPTY(lcProcName) - lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.Name, 'ALL' ) + ' ' + lcExpr + CR_LF + lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.NAME, 'ALL' ) + ' ' + lcExpr + CR_LF ELSE - lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.Name, 'ALL' ) + ' DO ' + lcProcName + CR_LF + lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.NAME, 'ALL' ) + ' DO ' + lcProcName + CR_LF tcEndProcedures = tcEndProcedures + STRTRAN( lcProcCode, '<>', lcProcName ) + CR_LF ENDIF @@ -15063,6 +15092,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -15071,6 +15101,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 + n_ParentType = 0 PROCEDURE analizarBloque @@ -15110,10 +15141,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE 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.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. @@ -15123,7 +15157,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE 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. @@ -15133,12 +15167,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE 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.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 ) I = I - 1 @@ -15147,14 +15182,15 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT OTHERWISE && Otro valor - *-- No + I = I - 1 + EXIT ENDCASE ENDFOR - CATCH TO loEx WHEN loEx.Message = 'Nivel_Anterior' + CATCH TO loEx WHEN loEx.MESSAGE = 'Nivel_Anterior' *-- OK. Volver a evaluar en el nivel anterior llBloqueEncontrado = .F. - + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON @@ -15202,17 +15238,13 @@ 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' ) ) - *IF LEFT(lcPadName,1) == '_' AND LEN(lcPadName) = 10 - * *-- Es un nombre temporal, no se guarda. - *ELSE - loReg.NAME = lcPadName - *ENDIF - loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + loReg = THIS.oReg + loReg.ObjType = 3 + lcPadName = ALLTRIM( STREXTRACT( tcLine, 'PAD ' , ' OF' ) ) + loReg.NAME = lcPadName + loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - IF loReg.LEVELNAME # THIS.c_ParentName + IF loReg.LevelName # THIS.c_ParentName EXIT ENDIF @@ -15241,12 +15273,12 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE 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, '"', '"' ) ) + loReg.KeyLabel = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) @@ -15271,14 +15303,14 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE 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 && + * 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 ) @@ -15294,13 +15326,15 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT CASE LEFT( tcLine, 17 ) == 'ON SELECTION PAD ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LEVELNAME + ' ', '', 1, 2 ) ) + lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LevelName + ' ', '', 1, 2 ) ) THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - + DO CASE - *CASE ' &'+'& ' $ lcExpr - CASE NOT EMPTY(lcProcCode) - *lcProcName = ALLTRIM( STREXTRACT( lcExpr, 'DO ', '&'+'&', 1, 2 ) ) + CASE EMPTY(lcProcCode) + loReg.OBJCODE = 67 + loReg.COMMAND = lcExpr + + OTHERWISE loReg.PROCEDURE = STRTRAN( lcProcCode, '<>', lcProcName ) IF EMPTY( loReg.PROCEDURE ) @@ -15311,10 +15345,6 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.PROCTYPE = 1 ENDIF - OTHERWISE - loReg.OBJCODE = 67 - loReg.COMMAND = lcExpr - ENDCASE I = I + 1 @@ -15386,17 +15416,18 @@ 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 LEFT(lcBarName,1) == '_' + 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 - loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - IF loReg.LEVELNAME # THIS.c_ParentName + loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + + IF loReg.LevelName # THIS.c_ParentName EXIT ENDIF @@ -15425,12 +15456,12 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE 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, '"', '"' ) ) + loReg.KeyLabel = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) @@ -15458,17 +15489,18 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE 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 && + * 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 ) @@ -15484,13 +15516,11 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT CASE LEFT( tcLine, 17 ) == 'ON SELECTION BAR ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LEVELNAME + ' ', '', 1, 2 ) ) + lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LevelName + ' ', '', 1, 2 ) ) THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - + DO CASE - *CASE ' &'+'& ' $ lcExpr CASE NOT EMPTY(lcProcCode) - *lcProcName = ALLTRIM( STREXTRACT( lcExpr, 'DO ', '&'+'&', 1, 2 ) ) loReg.PROCEDURE = STRTRAN( lcProcCode, '<>', lcProcName ) IF EMPTY( loReg.PROCEDURE ) @@ -15521,7 +15551,6 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDFOR I = I - 1 - *THIS.oReg.Cleanup = lcText ENDIF CATCH TO loEx @@ -15558,9 +15587,6 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lcTab = REPLICATE(CHR(9),tnNivel) loBarPop = toParentReg - *-- Actualización de procedimientos - *lcProcName = THIS.get_ProcNameFromSnippet(loReg) - *-- Options (ObjType:3) DO CASE CASE toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 0 @@ -15576,21 +15602,21 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDTEXT ENDCASE - + IF loReg.OBJCODE = 80 && Procedure de BAR o PAD *-- Reemplazo el nombre definitivo lcExpr = loReg.PROCEDURE THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) IF EMPTY(lcProcName) - lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) + lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) + '_FB2P' 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 @@ -15616,8 +15642,8 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE RETURN lcText ENDPROC - - + + PROCEDURE get_DefineBarText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -15629,29 +15655,29 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE LPARAMETERS toReg, toBarPop, tnNivel, toHeader TRY - LOCAL lcText, lcTab, loEx as Exception ; + LOCAL lcText, lcTab, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' lcTab = REPLICATE(CHR(9),tnNivel) lcText = '' *-- DEFINE BAR *lcText = lcTab + '*----------------------------------' + CR_LF - lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM( EVL( toReg.Name, toReg.ItemNum ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; + lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM( EVL( toReg.NAME, toReg.ITEMNUM ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' PROMPT "' + toReg.PROMPT + '"' - IF NOT EMPTY(toReg.KeyName) - lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KeyName + ', "' + toReg.KeyLabel + '"' + IF NOT EMPTY(toReg.KEYNAME) + lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KEYNAME + ', "' + toReg.KeyLabel + '"' ENDIF IF NOT EMPTY(toReg.SKIPFOR) lcText = lcText + ' ;' + CR_LF + lcTab + ' SKIP FOR ' + toReg.SKIPFOR ENDIF - IF NOT EMPTY(toReg.ResName) - IF toReg.SysRes = 1 - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.ResName + IF NOT EMPTY(toReg.RESNAME) + IF toReg.SYSRES = 1 + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.RESNAME ELSE - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.ResName + '"' + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.RESNAME + '"' ENDIF ENDIF @@ -15668,17 +15694,16 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lcText = lcText + CR_LF IF toReg.OBJCODE = 77 && Submenu - loBarPop = THIS.Item(1).oReg - lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM( EVL( toReg.Name, toReg.ItemNum ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; - + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.Name) + loBarPop = THIS.ITEM(1).oReg + lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM( EVL( toReg.NAME, toReg.ITEMNUM ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.NAME) ELSE - lcText = lcText + lcTab + 'ON SELECTION BAR ' + ALLTRIM( EVL( toReg.Name, toReg.ItemNum ) ) + ' OF ' + ALLTRIM(toReg.LevelName) - + lcText = lcText + lcTab + 'ON SELECTION BAR ' + ALLTRIM( EVL( toReg.NAME, toReg.ITEMNUM ) ) + ' OF ' + ALLTRIM(toReg.LevelName) + DO CASE CASE toReg.OBJCODE = 67 && Command - lcText = lcText + ' ' + ALLTRIM(toReg.Command) + lcText = lcText + ' ' + ALLTRIM(toReg.COMMAND) CASE toReg.OBJCODE = 80 && Procedure - *lcText = lcText + ' DO <>' + ' &'+'& ' lcText = lcText + ' DO <>' ENDCASE ENDIF @@ -15710,38 +15735,38 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE LPARAMETERS toReg, toBarPop, tnNivel, toHeader TRY - LOCAL lcText, lcTab, lnContainer, lnObject, loEx as Exception ; + LOCAL lcText, lcTab, lnContainer, lnObject, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' lcTab = REPLICATE(CHR(9),tnNivel) - toReg.Name = EVL(toReg.Name,SYS(2015)) + toReg.NAME = EVL(toReg.NAME,SYS(2015)) lcText = '' *-- DEFINE PAD *lcText = lcTab + '*----------------------------------' + CR_LF - lcText = lcText + lcTab + 'DEFINE PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) ; + lcText = lcText + lcTab + 'DEFINE PAD ' + ALLTRIM(toReg.NAME) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' PROMPT "' + toReg.PROMPT + '"' ; + ' COLOR SCHEME ' + TRANSFORM(toBarPop.SCHEME) - IF NOT EMPTY(toReg.Location) - lnContainer = toReg.Location % 2^4 - lnObject = INT( (toReg.Location - lnContainer) / 2^4 ) + IF NOT EMPTY(toReg.LOCATION) + lnContainer = toReg.LOCATION % 2^4 + lnObject = INT( (toReg.LOCATION - lnContainer) / 2^4 ) lcText = lcText + ' ;' + CR_LF + lcTab + ' NEGOTIATE ' + GETWORDNUM('NONE,LEFT,MIDDLE,RIGHT',lnContainer+1,',') ; + ', ' + GETWORDNUM('NONE,LEFT,MIDDLE,RIGHT',lnObject+1,',') ENDIF - IF NOT EMPTY(toReg.KeyName) - lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KeyName + ', "' + toReg.KeyLabel + '"' + IF NOT EMPTY(toReg.KEYNAME) + lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KEYNAME + ', "' + toReg.KeyLabel + '"' ENDIF IF NOT EMPTY(toReg.SKIPFOR) lcText = lcText + ' ;' + CR_LF + lcTab + ' SKIP FOR ' + toReg.SKIPFOR ENDIF - IF NOT EMPTY(toReg.ResName) - IF toReg.SysRes = 1 - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.ResName + IF NOT EMPTY(toReg.RESNAME) + IF toReg.SYSRES = 1 + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.RESNAME ELSE - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.ResName + '"' + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.RESNAME + '"' ENDIF ENDIF @@ -15760,17 +15785,16 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lcText = lcText + CR_LF IF toReg.OBJCODE = 77 && Submenu - loBarPop = THIS.Item(1).oReg - lcText = lcText + lcTab + 'ON PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) ; - + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.Name) + loBarPop = THIS.ITEM(1).oReg + lcText = lcText + lcTab + 'ON PAD ' + ALLTRIM(toReg.NAME) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.NAME) ELSE - lcText = lcText + lcTab + 'ON SELECTION PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) - + lcText = lcText + lcTab + 'ON SELECTION PAD ' + ALLTRIM(toReg.NAME) + ' OF ' + ALLTRIM(toReg.LevelName) + DO CASE CASE toReg.OBJCODE = 67 && Command - lcText = lcText + ' ' + ALLTRIM(toReg.Command) + lcText = lcText + ' ' + ALLTRIM(toReg.COMMAND) CASE toReg.OBJCODE = 80 && Procedure - *lcText = lcText + ' DO <>' + ' &'+'& ' lcText = lcText + ' DO <>' ENDCASE ENDIF From fccfcfc11887fc0072326eeeeae8085c0dc2731e Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 2 Jan 2014 01:26:29 +0100 Subject: [PATCH 19/21] =?UTF-8?q?Changeset:=20123=20Actualizaci=C3=B3n=20P?= =?UTF-8?q?J2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 738808e..2955c01 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -2,7 +2,7 @@ * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- -*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2013/12/27 00:21:18" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2014/01/02 01:26:10" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * LPARAMETERS tcDir @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "16" -_Revision = " 137" +_Revision = " 142" _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="1134231778" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1143081697" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() From a801a788f4782ee44e342e932b3364903d2bb45d Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 2 Jan 2014 02:11:45 +0100 Subject: [PATCH 20/21] =?UTF-8?q?Changeset:=20124=20-=20v1.16=20-=20Agrega?= =?UTF-8?q?do=20soporte=20bidireccional=20para=20conversi=C3=B3n=20de=20Me?= =?UTF-8?q?nus=20-=20Mejora=20del=20backup:=20Ahora=20tambi=C3=A9n=20se=20?= =?UTF-8?q?hace=20de=20los=20archivos=20de=20texto=20-=20Optimizaciones=20?= =?UTF-8?q?varias,=20limpieza=20de=20c=C3=B3digo,=20refactorizaciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...foxbin2prg__c_conversor_base__doBackup.prg | 14 +- foxbin2prg.pj2 | 6 +- foxbin2prg.pjt | Bin 310794 -> 310629 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 273 +++++++++--------- 5 files changed, 144 insertions(+), 149 deletions(-) diff --git a/TESTS/ut__foxbin2prg__c_conversor_base__doBackup.prg b/TESTS/ut__foxbin2prg__c_conversor_base__doBackup.prg index 8deb05e..b9108c7 100644 --- a/TESTS/ut__foxbin2prg__c_conversor_base__doBackup.prg +++ b/TESTS/ut__foxbin2prg__c_conversor_base__doBackup.prg @@ -24,12 +24,12 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__doBackup AS FxuTestCase OF FxuTes ******************************************************************************************************************************************* FUNCTION SETUP PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' - LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG" + LOCAL loObj AS c_foxbin2prg OF "FOXBIN2PRG.PRG" SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG') oFXU_LIB.setup_comun() - THIS.icObj = NEWOBJECT("c_conversor_bin_a_prg", "FOXBIN2PRG.PRG") + THIS.icObj = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") loObj = THIS.icObj loObj.l_Test = .T. @@ -59,7 +59,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__doBackup AS FxuTestCase OF FxuTes #IF .F. PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' #ENDIF - LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG" + LOCAL loObj AS c_foxbin2prg OF "FOXBIN2PRG.PRG" loObj = THIS.icObj IF PCOUNT() = 0 @@ -67,7 +67,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__doBackup AS FxuTestCase OF FxuTes RETURN .T. ENDIF - IF ISNULL(toEx) + IF VARTYPE(toEx) <> 'O' *-- Visualización de valores THIS.messageout( 'BackFile_1: ' + TRANSFORM(tcBackFile_1) ) THIS.messageout( 'BackFile_2: ' + TRANSFORM(tcBackFile_2) ) @@ -76,7 +76,9 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__doBackup AS FxuTestCase OF FxuTes *-- Evaluación de valores THIS.assertequals( .T., FILE(tcBackFile_1), "Existencia del archivo " + tcBackFile_1 ) - THIS.assertequals( .T., FILE(tcBackFile_2), "Existencia del archivo " + tcBackFile_2 ) + IF NOT EMPTY(tcBackFile_2) + THIS.assertequals( .T., FILE(tcBackFile_2), "Existencia del archivo " + tcBackFile_2 ) + ENDIF IF NOT EMPTY(tcBackFile_3) THIS.assertequals( .T., FILE(tcBackFile_3), "Existencia del archivo " + tcBackFile_3 ) ENDIF @@ -102,7 +104,7 @@ DEFINE CLASS ut__foxbin2prg__c_conversor_base__doBackup AS FxuTestCase OF FxuTes LOCAL lnCodError, lcMenError, lnCodError_Esperado ; , lcMemo, lcMemo_Salida, lcMemo_Esperado, lcBackFile_1, lcBackFile_2, lcBackFile_3 ; , loEx AS EXCEPTION - LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG" + LOCAL loObj AS c_foxbin2prg OF "FOXBIN2PRG.PRG" loObj = THIS.icObj loEx = NULL loObj.c_OutputFile = FORCEPATH( 'FB2P_DBC.DBC', oFXU_LIB.cPathDatosTest ) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index 2955c01..d34bf4d 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -2,7 +2,7 @@ * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- -*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2014/01/02 01:26:10" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2014/01/02 02:10:04" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * LPARAMETERS tcDir @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "16" -_Revision = " 142" +_Revision = " 143" _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="1143081697" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1143083147" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index 24a1d60af4eb79e587afc45ffbe898441ac0b91c..fba867d7def5cfc906b062f7eced98718642b2d6 100644 GIT binary patch delta 13784 zcmb`O2Ut{B*YDRp`^*eodQ+r|y@0(%VL(L@5Kyr(jxZ__K`GY6v7p!+>bA$0s4@2F zXo@ZBn_{f7L}Mhz=o^hCYBVb4{?8mhV*H-(KF_^*a+vj7yRE&>-fOROW}IE(`rAua z8={aCL=?Dpy`8Rx-^ikm+a;k$oqb<~SFX1Rao=)875T z8zt#D7ZC>LB?jx6#ypyrxzUd28qz)2;?m)=p)wEZUh;~lwBBh2$~uvQxkQgr zr9%hnUq|a-C+puD*1yiyzb@9luGYV9w7v9&<}#JJlS2twzv2`X*~J;UPOQusL+da! zlwA^%ORa39vOX$BHI2VE&5X*GwkcN2uZ!S^%982>>6L*t|6`yi{XYka(*Jv)|6!a! zII`M6HWY64jN)o#7I03{+J2s9tHY~xAycigAgW_^-g>)7HAr7^Q{axfXPeo=#F4zh z*>2Jc%_*s@2Ariw7wb{hT`H?bD@yb~+Eb)4ZAAX4fOJ#4fa+anmAmVXyK8M`hKWkM z*-}~9|I+Riqo!I6Q`LcWN*KT0|7}CH2bsiZ_8>3wgU_GZ7VUoJ-gF%= z(^A*4fHIkC!_#$2o-=}r_Hih_v?^sfgwMz_PQAUTXlF;SqN4-q7CjpV zL(%#xbwqJ%?y`4rXt9H>n_UR)d`_ejyGBaxdlxi6Y-_{q%IvWiZ1<*j93bs&Y^cxn z9`5Aty?5onB8kl^>UFQy-rT`ASFnv@y#s45N3pVwA|Xoh6b~F&O3|yA4PCtz$2T@& zJFEXcm5MsN%48FZw!W$*u;%ljQg_RRtTWM+N#9oDn^nt83kE0#p9OLeyxEovYwk~V8 zU~%H3L9B+D*n-s-7Y4C+ESFob&)wKs#i~~Sdk+Kpun0Cix2XwmB>7UTr$z;?_Wx`nEZx3}SI?f?|=EI5dcPNI4Z|3DqpO zRMszBYOEFJQWnlmTh@Qiy2=Coy%^|O18j3=WnsJ0^M=YA-YH{2Cu1Qxmpu1Dp$*l1 zq4`#0jr4X(RMMmBGhceAGM-uIJ&Lbd6Z|m<5QX=UECnDIT0>1DHm1zrboq zr5fv6lY+EjcMIlgU2K*QF0k(eMaK%`)#gtI4JDZmMlxTCNwfRxWR~ zExgh;Cwksov2Cr(Yun&c)rALLUmuqGr%v>&(Q6l;bV2M8IgeQ*mLxuS%*IRmT*brl ztiI4cVPVaBxmiy#<>Y$G=(%#s)T8va>kCbgTbZkJ6mohYJJ~4bQ;^v7gmsr<+*FTe zxmi7K!S*haq*JnWLUJFuY=kH-#+~@XhuK&hpR6zc_`55>MO`Pz2319!gRbQvSWGPadtj_ArOBTlF37=Q+_;gt{^Qf$t z>1j!O#e5}}Dkhb(=4_KNNm5&JuawYH!%rgExUx0@q9hw(U##b_?M2bv_S zH?7CM{;4B9bA9d29N29XA91OXRL)dyKIKx1WUR1ztSp7Gbz-Xw!Zuwhs?->|Waj4%A5dS_ zJ5uzxG}EZOjO?uNq`aJ;>I;`i+@tB`21+p_nPTE%l7}{|PIIh;yqcn-ladqT`*m(4 zdQakYr5%mLq)9wf@@ghNn#2P<#)d1+r0O$j)m&Udk#wcGD4oQ;q)sh_r7cNtHpx@^`RJAK*W#^1EW@bz<=JYXUX6K~zjP(}r zQ@96n6Q(IVY?xg_WlgKs4M^_|JxzJWbYq_J)Ue93-0YmZgq-YAxe;0E=qKNl+jfLn zW>a;y%15i3YO5kQM^SOyYq97kuggw|I#YRTHbo4Y%0pR}D45EFe4b2HD>+hHj>(v3 z!Z=uGd3W9yhn3=YCac9x6~+2YV{UF{#*jSmaw-oo4=YfM?JA19V7^x?bY9hThD1|Z zc20UXlQG?t^Zg99kwZm=MAIltFrx6EUG+3&<@?W5b@pT$IVx|w+R5Pss?wEAV#zG- zBHdXac1`16t;#D3oGE*VG6$>6!h4!VW_MYvHgTae#eR5rcy@ZOwa6k$r}3J|2z?58 z01lyc1-v%XiGBreQA;tofcp&hTdlTsrrf-oj8TRtES#)dY=qpniV{y6o{^qz%EJA@ zpm`YElx|3f=xMV?ZRtSKV{qT#UPYU^R@FLEMpiENuOZ%Q?q`Bc=e}+;HmIdGlxxZ} z#A4O;7fq&PVQvw<@L}t;O)d8o>!x#0ZIsfZomf7dhe#{;iNQ0tmtAyRR8(}An7C+- zxG|mAmJ+`bouRjliPOjSj*7nfmGGaz{aI7dN%@Esh8a9i`ujVjv9B&UTAv&pbzE$m z!RzRToUsljCKqx)_mcDK$kmouuVsb2rhD_NN`YK`|85sem6AEXDkYlgB}+sqN|;_u zD8xR#{YZRJ2*+;`M+&jMue=h!6vCKhWy+_YHVXUTG>N)1QS}-Zu`_uH|4oaSTgW}_ zlM(2YV3zyTRxFvx>$%@^P(qQm`e>fw>`Y!$`rB39p9vox7tXV=)eA(+Ss1jx=z|aU z<^f7GUG-*@#OztTrY@?UQevY{KfS3Hs#ohFt}E5tTPh{CYBggkD^#!6O*EU$gLVEL zloC6!a2EFn;GL{cz1q;uipriml_)OQCFaHsh>f#xV~^{_H?w&I9BxnXA^qJ&1kAym z8!I}`LCibZQ*Gx+%36=fiqA4B%f?QOoWsLBLK4+dJ4(VXQ7=^0T6Hsjl+>x0#w_*Bh|J6$oo}*K z=-p_jxH6x+nh#YdUPp-1-_@pC%F9-EMUT5GtEY0JmE8Z;@s}0)*Zmx?&{X#0dQa)c z9ecx=o^FVbjrM`U%*X??P&C%lV6nB52OMA;myrwqBAVr8qq5x}N^1`|P^pW+m}W}P z&oO;wReQnJ73xulf#W;gS1NlUOR)}Rjfia@s5%>~PFd3jp=ry=`^`Q(JydG?ywRt} zBUP)q;m1cJa3L0;zv#4(`?3+D|3V(fBE)+Oxp&RbCrZ_txMkRTiP>YLOk*XV9f=U#8ez8G+fho1+C;v()DGIgM$4XUd3VzA29EEmFe z2_k9XFl&pp{9UC+a8-+6GF5(a{LE2`KBTH%6ERom=C5&L=MwJOZq7udxK34Z<|LKh z?B=g2iaxZeo~1yPFTs7iIYR_4<(`8-EmX?uSCvnnt+G1Jh4U0@@UQUDV!o=cbo7?R zDp#BKqcv8Q)yaK}*S@`<&<_=T!>ZBcEh@h`i^6S+zEM@Zm>pKOc3%IJeQM#GjeHI& z`o>j_0!7bd+{^X)Aw}J!O1?~-rA>mkqQ;z_u>hqsOi7l(B-76uXKa! zw{Nf4@wB3ERyAbIIhEhEIQ4>}4c+R{jK*m;YC-QiDb*U8{AJ_MswTIrm}H#DL{UMey4Wjd$7R487- zy*vu>PMc9{1bj7w^o)+{y-3_y&YSyuQlb{UInx>c-0vm(;z_1( z1y=h`JFyj?E(TY%xblXji>oWRpT|eFRCV?7`U;1Y+^5cX0GL_qK~ue zC0cCf!Is-=`Bxh64Zq{KAu6*YNOr2U_II+kY~REaxxGVGnWM1V!he=GIIgz0j$tX^ z!he#4))hSmf5KmiiwE!;I^aB)E!o?-(MH_b$4A(sQ=f`XE&ca%{VKj$Y9@BKMx%Mj za00{h6PB-s-haVJIYDC+c)JBWAt$(}yn zjK%8^7(O&-q`^4Gn3ZOdsY`rf&kkZmKRG~ho*`=Ym%YV>ezJ$Oe~AiGf2feI-G_7qQ2<$8DrUdtc{!v~!W z=;eSUMi}HE>5e287~}@bQ+#HS>oPxa(;$bi5TP54kvoaHgVD0BNEnQk$s$jo`eKbj zQR3)eIUqRMUB>8+>gZhzU1FkRqmtCw#m8EQPZhFJ4q)R&9V5oOS6jpw(Y01&7%_?R z0I|R*2M3K0Rl2cG0{K>V^z(+7yNe%``kyuuFO}wc;X4H8x{64ANTuOo#1J^_k(fV3 zZit~K43&+nh2_8y`6#nJN0GD`fi-{GFgaLENtc(iT^3)HY+&O0P&vR7JWM`d$EJ#( zM$5z0k6JRn-xnPm>!}%8mtctqR!^ zUm&M?Saz?FPiy7L()y`l+B!MHQL~;B?AB8=TxXg1W}VzZJ|Z1GDA;9NZOh3a-DwtH4g55{2(0ipHAx z2z&~1qy0p^!5@QvhP?kMQ7ZT{GZPIvhHp>5CfW#!f*f!b8&-p_Lcy_+pW-Ep7q|v^?FH2N0fU0Qz*{d8UHp-#Ew~BzeY|&}8!!MI zV}@cIplvbHG$<0l#gK3QLNp)T8$9JE(Xm@ZE5QB1_aXoAfM_RpGPneC%nPFbfDhxSJX4DJ(HTVJKKrN$5VDot>P6I-9jOIe|1NbE5avMgA!8gFWY#H^j zXS4}?7hDRtwVc)+KI;#vprEgC>(Y%>W&KsgmvLOgsj<(8G)Oid^6Iq5{c+07ra_cg&}-{~AKE z5sJNlsMEN>yTNxL*F3|hKloGdA;_g?85zM}fIm8i+2a*T7Wf3X@ehpty2xlM_y_RP zODMEe7*2n&P3`GbO%^FDbei%Bf0r!CGg-f)#jYM6*eZYxrC7RYwqFit)IJ~_? z+woXC16&C1ub0R*UZT_BPr%<`FMr!tqNdJ>s^IJtiN4E~C>>l3o|G@qSo3=lMY$k) zK~d{{i9(l4G#>1MmEIB0X;U^yWOT)v04tAVCOlp(2loKG?v!Zc7ZR0&$AZ1Tl;|0r zd-}NHmV!U{k3_4#lV}t85V+eZc;~D{m%!J+z45GL9)jl>dv~IjP&i+fDD@|a^k83X z702rmrQMWh0=OO63C}3ec#_x+?hpPOa`Z!q{tJE|?0{f!;ctmrc;Nnn$GwnfD&zDn z_$zQziPHpIP6xm@!S(F8naX{0Fi#>s@L9;a{W%Q*_XNiUak^2D z(=l*5xB#iW8%~w?oDKS<}a2;3FyXX3PFIHxnGCm|Qz<@k*gPC9U#d#HP#(^PO@ za4OE>*oT~!fm6XHkhebKv;jO69P=k9-^ZMGfJcHqhr9_t1^5g+#}V;A4hMIa7o2{D zVlgV*hkUJ+(yD2FGA4{|LEt z8<`$~SAlOqZi!zR8f#-qf-gcgb&+X3_>vRizfD(}#&(zK1Qf-nFdni;51Foje+9?I zf(1W&svllL{5>VWHm^^hZQg@Mftpco3+bscVk zqA~aaEIM64fUv@p%1|$ zz`;0Ehv5pULzD$Bf!sY%gLObO8hj11eXxd_fhU4DLVk>Mw-a~q7egi)Nvkn>x!1Wyb416+DLz&$)>`NSj*rJ3sz%|blZm^Jibs)k;HSAzYgX{cm@ zhJ5Q0{RR$NsG+HgH8c}^2W)|CkA!e3*aqRZG301m-+}GGBO#B&br$RZUI%#_u8UwN za53b2xXf3faE2myrG}c|x&d|tr$9cvT0^(Mb-_;|>(}6Cvh|4?f-@ldZ`6<@I1(JR zMMGcX$^dr-KY?7dM?*Q_eDG1ol0`$GgJ*#2LEd~wW2S3RY=NTlVGSKbCgIfpaUc8u za^tVzLhx1a#cyzX&T42R_!ZdcoQB$6($Gg>Uz{I%uVXg1;FX40l;91JH{I7z1h_x= zN5~$}G?Wb3FW6jnpgTsablYbiDx9fFg=*^s;Cqr;|% zir_tFEu~J@(n0Vf@GQt{XJHoLt>B}OcMJSZyBQ)U_%dYMRa)u?z6*W_^8L+PdKc`7 z6Lis5yiTQET3Q1|6DU?d{%yaOE`gK4_rB25hhJ%_Lm2Wm@Yj$ZpVCq;SUHmGey>F& z)Y1mov=nzuOUJ<{z@s6Xe$i41_;>K1x3skHo|fXnv1@SRUb%-Ejd-M`=}^>$ zVk6{3xIP94fS*8id7`DAVC9To@HbqH$C$g|Cg4Vp^-M>P!M(vlA#bqNQFwErG2jmN zI=befqeej(UOd<3=iKq9duLj^=~C zai-US+^L<8PJ-KlQ#$IXMwE^`T0#bgLpFBPQ4jDa@RN8QMI`8GH8>Z19`cS}I@$<+ z4{UCesH0{{I@$%r6e!L?UX`q)L*SX5oq!96l{|Yb{KXts01{LV&ArvN5D1cmV zhK_o-MnB+eMP8z#RPb7`%W}ATgO1LDPk`%g)KTD8c(4tk8aM@V|D8ID2P;X;e8?*g z>1Y~QNn*}G9(!Cz<=~;Uu>Mv8cAv*RYm2yy3O6BpUewVR@aN!;kRz_>Xdn0_I0tep z68N*=U%*{|)zOVVbrjSNVHin=^jJslmg;CB*Z^Jxc>%6suo3LXZ0Ll84V8d5nxS|J zXclBcL)zmUK$2mCe5$PtIds76!4Dx1iL#+@!K=UvA#aVdA@7cOy8*roc}{;D8V;6` zlvLMe#5*NFUe{c!pAY|Pid*S{ELgCk&(|)AY3EmhS{7D9XLm6u zcr|$FJ(*^chIW9@fZH(*otJTfhTwLA%^D;-NN7xEDDFd{#aoA|E*jbcehhBrs-ZuT zfcys>1gk%4jpG>!$3-L@^}*L6H^%Xc?+>Xf_%h`7I4!&4G#v>33vxG{jze)e8o{NI zgK_#@1HT8p0y!Utop}LHyD3oA(P&BFv~s}dvnZpMcs947@QFZc0zFj@*(WoJ7UI{a;m@bucws%aL23uL#@8(MuVpR E2XLQMNB{r; delta 14031 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 L{|TAzTS?Ynb$z*3%B~}G] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -401,7 +403,93 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC - PROCEDURE ejecutar + PROCEDURE doBackup + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toEx (@? IN ) Objeto Exception con información del error + * tlRelanzarError (v? IN ) Indica si se debe relanzar el error + * tcBakFile_1 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,frx,lbx,dbf,dbc,mnx,vc2,sc2,pj2,etc) + * tcBakFile_2 (@? OUT) Nombre del archivo backup 2 (vct,sct,pjt,frt,lbt,fpt,dct,mnt,etc) + * tcBakFile_3 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,cdx,dcx,etc) + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3 + + #IF .F. + LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' + #ENDIF + + 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 ) + *-- Extensiones TEXTO + + 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 ) + OTHERWISE + THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) + ENDCASE + + *-- COPIA BACKUP + COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) + + 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 + + IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) + COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) + ENDIF + ENDIF + + CATCH TO toEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + IF tlRelanzarError + THROW + ENDIF + + ENDTRY + + RETURN + ENDPROC + + + PROCEDURE Ejecutar *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_InputFile (!v IN ) Nombre del archivo de entrada @@ -722,7 +810,6 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM FINALLY loFSO = NULL - THIS.o_FSO = NULL THIS.o_Conversor = NULL THIS.writeLog_Flush() @@ -732,6 +819,35 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC + PROCEDURE getNext_BAK + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tc_OutputFilename (!v IN ) Nombre del archivo de salida a crear el backup + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS tcOutputFileName + LOCAL lcNext_Bak, I + lcNext_Bak = '' + + FOR I = 0 TO 99 + IF I = 0 + IF NOT FILE( tcOutputFileName + '.BAK' ) + lcNext_Bak = '.BAK' + EXIT + ENDIF + ELSE + IF NOT FILE( tcOutputFileName + '.' + PADL(I,2,'0') + '.BAK' ) + lcNext_Bak = '.' + PADL(I,2,'0') + '.BAK' + EXIT + ENDIF + ENDIF + ENDFOR + + lcNext_Bak = EVL( lcNext_Bak, '.100.BAK' ) && Para que no quede nunca vacío + + RETURN lcNext_Bak + ENDPROC + + ******************************************************************************************************************* PROCEDURE normalizarCapitalizacionArchivos TRY @@ -920,12 +1036,10 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -1293,94 +1407,6 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* - PROCEDURE doBackup - *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * toEx (@? IN ) Objeto Exception con información del error - * tlRelanzarError (v? IN ) Indica si se debe relanzar el error - * tcBakFile_1 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,frx,lbx,dbf,dbc,mnx,vc2,sc2,pj2,etc) - * tcBakFile_2 (@? OUT) Nombre del archivo backup 2 (vct,sct,pjt,frt,lbt,fpt,dct,mnt,etc) - * tcBakFile_3 (@? OUT) Nombre del archivo backup 1 (vcx,scx,pjx,cdx,dcx,etc) - * toFoxbin2prg (v! IN ) Referencia al objeto principal - *--------------------------------------------------------------------------------------------------- - LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3, toFoxbin2prg - - #IF .F. - LOCAL toFoxbin2prg AS c_foxbin2prg OF 'FOXBIN2PRG.PRG' - #ENDIF - - 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, toFoxbin2prg.c_PJ2, toFoxbin2prg.c_VC2, toFoxbin2prg.c_SC2, toFoxbin2prg.c_FR2 ; - , toFoxbin2prg.c_LB2, toFoxbin2prg.c_DB2, toFoxbin2prg.c_DC2, toFoxbin2prg.c_MN2 ) - *-- Extensiones TEXTO - - 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 ) - OTHERWISE - THIS.writeLog( C_BACKUP_OF_LOC + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) - ENDCASE - - *-- COPIA BACKUP - COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) - - 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 - - IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) - COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) - ENDIF - ENDIF - - CATCH TO loEx - IF THIS.l_Debug AND _VFP.STARTMODE = 0 - SET STEP ON - ENDIF - - IF tlRelanzarError - THROW - ENDIF - - ENDTRY - - RETURN - ENDPROC - - ******************************************************************************************************************* PROCEDURE encode_SpecialCodes_1_31 LPARAMETERS tcText @@ -1426,32 +1452,6 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - ******************************************************************************************************************* - PROCEDURE getNext_BAK - LPARAMETERS tcOutputFileName - LOCAL lcNext_Bak, I - lcNext_Bak = '' - - FOR I = 0 TO 99 - IF I = 0 - IF NOT FILE( tcOutputFileName + '.BAK' ) - lcNext_Bak = '.BAK' - EXIT - ENDIF - ELSE - IF NOT FILE( tcOutputFileName + '.' + PADL(I,2,'0') + '.BAK' ) - lcNext_Bak = '.' + PADL(I,2,'0') + '.BAK' - EXIT - ENDIF - ENDIF - ENDFOR - - lcNext_Bak = EVL( lcNext_Bak, '.100.BAK' ) && Para que no quede nunca vacío - - RETURN lcNext_Bak - ENDPROC - - PROCEDURE getDBFmetadata *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -4163,7 +4163,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Creo la librería THIS.createClasslib() @@ -4440,7 +4440,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Creo el form THIS.createForm() @@ -4727,7 +4727,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Creo solo la cabecera del proyecto THIS.createProject() @@ -5450,7 +5450,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Creo el reporte THIS.createReport() @@ -5848,7 +5848,7 @@ DEFINE CLASS c_conversor_prg_a_dbf AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Identifico el inicio/fin de bloque, definición, cabecera y cuerpo del reporte THIS.identificarBloquesDeCodigo( @laCodeLines, lnCodeLines, @laBloquesExclusion, lnBloquesExclusion, @toTable ) @@ -6095,7 +6095,7 @@ DEFINE CLASS c_conversor_prg_a_dbc AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Creo la tabla *THIS.createTable() @@ -6258,7 +6258,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Creo la tabla THIS.createMenu() @@ -8014,7 +8014,7 @@ DEFINE CLASS c_conversor_vcx_a_prg AS c_conversor_bin_a_prg THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Genero el VC2 IF THIS.l_Test @@ -8179,7 +8179,7 @@ DEFINE CLASS c_conversor_scx_a_prg AS c_conversor_bin_a_prg THIS.write_ENDDEFINE_SiCorresponde( lnLastClass ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Genero el SC2 IF THIS.l_Test @@ -8484,7 +8484,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg ENDTEXT - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Genero el PJ2 IF THIS.l_Test @@ -8616,7 +8616,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg THIS.write_DETALLE_REPORTE( @loRegCur ) ENDIF - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Genero el FR2 IF THIS.l_Test @@ -8687,7 +8687,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, THIS.c_InputFile ) - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Genero el DB2 IF THIS.l_Test @@ -8768,7 +8768,7 @@ DEFINE CLASS c_conversor_dbc_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Genero el DC2 IF THIS.l_Test @@ -8838,7 +8838,7 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() - THIS.doBackup( .F., .T., '', '', '', toFoxbin2prg ) + toFoxbin2prg.doBackup( .F., .T., '', '', '' ) *-- Genero el DC2 IF THIS.l_Test @@ -14286,13 +14286,6 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE _SourceFile = '' - PROCEDURE INIT - DODEFAULT() - *-- - *THIS.ADDOBJECT("_Options", "CL_MENU_OPTIONS") - ENDPROC - - PROCEDURE analizarBloque *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) From c3363490371b1378bcdfeae4c9f933cb7c1c0e2d Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 2 Jan 2014 02:15:30 +0100 Subject: [PATCH 21/21] =?UTF-8?q?Changeset:=20125=20-=20Quitada=20funci?= =?UTF-8?q?=C3=B3n=20sin=20uso=20desindentarMemo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- foxbin2prg.pj2 | 6 +++--- foxbin2prg.pjt | Bin 310629 -> 310299 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 21 --------------------- 4 files changed, 3 insertions(+), 24 deletions(-) diff --git a/foxbin2prg.pj2 b/foxbin2prg.pj2 index d34bf4d..d1db1c9 100644 --- a/foxbin2prg.pj2 +++ b/foxbin2prg.pj2 @@ -2,7 +2,7 @@ * (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!! * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- -*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2014/01/02 02:10:04" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) +*< FOXBIN2PRG: Version="1.16" SourceFile="C:\DESA\foxbin2prg\foxbin2prg.pjx" Generated="2014/01/02 02:14:43" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * LPARAMETERS tcDir @@ -26,7 +26,7 @@ _LegalTrademark = "Open Source" _ProductName = " FOXBIN2PRG" _MajorVer = "1" _MinorVer = "16" -_Revision = " 143" +_Revision = " 144" _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="1143083147" ID="1130644423" ObjRev="544" /> + .ADD('foxbin2prg.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="1143083468" ID="1130644423" ObjRev="544" /> * .ITEM('__newproject.f2b').Remove() diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index fba867d7def5cfc906b062f7eced98718642b2d6..079947770e9ba6bbd37575271b5bdb523ba851bf 100644 GIT binary patch delta 11476 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 JPq@;*{{vHcA4LEF delta 11488 zcmZvi2V4}#`^Mkh*}J3nCcTNGQ2~1wI8>CPfDO^}gi}$P6iX603$Z5F=-7LW#;%t{ zW9%_%EHRcyjHt0hWA72=|LiSZh`)b6pUpkrXWp6Jot=GWW^vIgmz)2%SP_LDA)=ri zD{O4V9j;=YM%|bqBN{iEBiOj@SY#ch7H?PVIOI4^@O9M2rN$>|fax7zW%)(R{CVtrs9S`v zrrNNr(iy3nN%TdTLKL#dRxV@78+B2(|BCe*0QAn%*_2jzxvoSVAP4ibc!q z(40Dh56>4|n^{v#CCcBvW7I=MYD$ZhZxd&Ut-kHp_~axtC75juRp0vr?_QIe<=&icWWkhk4Wy6WhlzaFU-~F zWPhwL?5WSmFYKL|P}D*x_98=GW`34Ims()R%+}|`LKo>Gb&Vr`Xr)BhQ{1RbLqTzN zeqK~+abZ|%#kQkC**S)^(FF#%%45E*lzDokw0&RL$xxh@ooh%f*5?)&JMfB97GkqT ztCZFvp0|nB5;Nj>T_dZjS=Gtx^XQ4p&#QN5CCHv~vhxgjoI9r^J4=6%e{N)TY$nGm zrEbKpea+l#R&-I=i+JQ_=H9@cXi&{KDdHh4}?V(Ro?uyb?oE%VA2H6`AWLQrADy0t9rLj5sqN1GafyLwbUX=R}E>p^Fs>?g#@m{X>Jc&E(Wu6^>o~Xpw zRmY?l3UDXUlm1&X(U4aX@P*>pk|DRCcyx*(GrutFhZ$y*cc0AMh1wYOZrS@Qsk@Fz^fmm^1QsN&U&CF?Sdg{D zMkT_V>&uvjMk}AkW;;(WV6tEkgq7i&7>US0!*v;q}YTW+PJ&? zY8eX@8y%5de=*^hTqRI^bwd92c1nwjO^eeWKBb(*m-z5~%vUq;w3*Fsfp_IEN@0x= z)%~JuN#-Zw-uSW^s7CqM75p(;cb|4cE>hJj`tmOxI1$ev_HW*1A`2F7aot1~6tw<@ z9H}M`(&s7JAton(cnRJF!-)92LHU>X3Pg($@Awgf3#a()i7Zqo=XR4=ZFW;FaQ#H) z!8iZNtc7PhZ4wLjzGo+xTdZ+e9!|2QQ3ld0{`DjlA{^#tC$Uhm%$vWQgdvgc$Gs-A z0Qbg$=Fpl~URs+cOlIC1ZC$y@%G^2bS&ht4Gp=hCUna-7HI<93l}^+*Gega|&Mjrj z#$2umXrq8U#@n*?W~doFsDo_TqJIWsphRo6y5yKHcy_wPxU|m6+SG5V%YBFoXP6Ie zYswT>U({>)?kOx>c*QHGu)szm6O>l$D85FvKANbw_9VYQ@p;L426-gfbmxtxvIvjR z6s6dPQt{R*?^A3VFPX~fiY+tvvZ*W(eZGGx^A#TOD^t;lwTAF_Q&}zlow-U)7bQFC zv~e9VdFo;lqEl0&3V73L=>H?U&omY$>I(U|Y0TZbqEM;gP+bML7p;v>i_RpHv_s?;* z+4K15&snh1cC`|1PaU&ICFdBTI%XSkvWl9lS8QiW&K#9oQe2dsWzLG)?81}{N|7C< z6_(^>;>DM%J+F3ajJ1TX1{M&*9&_Ir zNUYIMc)JLs?9PERKh8H#^eZL0WhGgz4L@Z$ul=N+Qfw=uyuOl? z#PXVE56pG4xwRgDIFkhm`?=FB7MggbI>uhEsLXfr60M@zww9;7B#f?j?Te4zUzDXM zq8lid($~%reB3PN5w|5mcKy*m{~go1)NY%bDn&JVQ`cOv-VZ-*Ycum}vzd>0w1c@x zmu4}t8Gxxr8S9a8JZLua@SM>}_5&^cfG%b>S8o2ayHfb!yOq#W_Jb^yLi;GJ+{GV! z`E2G{dwhm$23vw&4^X(qmGeRT_t_XslLqq@xR_RKs2mbvsd6nx;SbNBQy}}HmbivR zJZTOK6rS_^In1-wv`^&X+Lq#+QiVTk=J`0;53|IX%J_b{nd|%-ni;Tjl3W~aDgJD# z!pdFF{6eOB|C1h?OjrE(9ld_G!ZmLD(Gs&|?&Dq+OaK3N!q&)seaqRU^$LG@6O%T| z{zsO$_|0ZEH(qbkE~W6pO0~X~{RWmwL3_F5T;}0&WuNRfwD{`}@aA(_h$j26**7<8 zoTWf@{yl$0E^72Y{m}8K;=k_)m*f9`T-#H!A7MFV{8@!RyyX7pWIvMB#_ACqa6vIX z44hLg`%#t#hyS7QhjEW8WWTW`Zrcro-Q^dyo4&Bfkk#3s&yrJ_oI{`Al#82?bDe+7 z-0ikxiE&9i zW>xYHoJ9q1s#MB8yl+Q=p-v0T2E1E$$xCdi=AQGh=FGF=t>+`VZn5DR^I4#a&P9oP z{{XYx`1JYA*JG`(;@3Q9FF(E?Wnx2r{>Oag(e`AJ9MjU$w~NCSu36`PBgOmh`kwK~ z1uV#hHf-hgdygfRlDiJl$ zE2NvwEMSQaY^D8TQ{Z~GQ{aPMFt>1Q!r$-hbCKnP1GBP=3Uc(L+XjEI>o=X=z#iM! zuKWu#C(%0_TFOuCWb4#61gkzjQ;8M&(yPqc^u;c=#Lm>@Ae$>Fg*|wqQz*Z@JI)#?_E5#nK8~%UJ2uPmWufUD zi^^33Hk@F?MR)l-juMb>Q3Z0qM0aeftBVRPs>pQw6#LoEw4$8(Ro}@hb94O6?@Yt* z{LXY%_85aW;e1oOD{P^_um8b9lq*|e60WlC0{^~()p9h)tdJYVrx=m=tgFn!^tgh3 zFS=ugSbgGE7PZ=R=mwkZ=)T6{thK0hrlC)nAPMVDIWJismF)&g$yX*k0tb73$69Kx zT*Ee#kBu}}wB2rr*k#B6VW(Jf!M={fUQrNF!~JTPmI~ zZS;^LRQ#roD%NsP7!ns?hG}^Y@Qu;feA1b}_xMDH>u&ArVjcJlQ-&0$Pw5_n% z*Gw;KOJg*=w88t!xn)|?K*|zqZ(CySnCu!!lH~rE#kp%y_jv8b(n;IDEyjIQWn*cX zz}GaDYAJp2*z{df=>&6sVu^WbQP1Ri_uyMwN+WEaTih3>$W~Ii$`+sUs(bAfM?dJ!=v~qIEw6~M=9kW&8gQPO5)uwS>r4-3s zV{xo3%Gz`%S;`f;E=B6=Vyav8=Wn(YU-YXTDBg1Ah zM2Ru06!VR2K3JlMh9;m!tb>?1`9W&Bzn$(6THm#q1zK9Y-A|7(671)}2~ z?vak)z&*T+{2RH4m&(5}d-!(wH+2ucCI4pa;og1mTe62I^_6Og6Zi1!zLKAK>w7-A zujK0&@dHDbt0^`?-oe<)zp*`1burPYaRmqYfxeQD=y90;(HD36;2f_)6|w3(_shWV z`EuSm15LgCou_9=!J@-mUYa5Kiy`;;(hQvH!6W`{h7_*8^h`blAD1P%@;4chz4-JQ zx9KN^icxQPL_ai~_=b1yC)E*ERs7?AXeh9XFYPDQ6~7VrF_~|R{O^8JJ<&trUj3yo z(NE$X`b#0fp^}7#&DV_GhOTFPTrUgAH_%?yVT=R1Hd~!;=N>!ZOBIrz=gX+^5ydH+bGkq0a7z2Y~@v%(r=DU$V4f^ zS$ZOz6{Bgk>0*{t(n{Jd9{84bTPC$qZKe*w3e&V@(j1M^VJA`4E}}SG>spN2lh7aS zCh7tH3j7E3?gK>q!56`U4-&mTMzjO`1ib1eqGd>Qe}OB(N1%`Xj2JLJYSSC&z%xYF zDtx;KCqO^LH#1MLqew+$NiVFb8gEvCAtRR{I z?gp-azJ85pIvA4!jk`{C@K2%z;B@eP=wBZYZ2^x3S3<`lQ``Y>5{;+;=vqnCR*gHA z8-Pxd1nLex27Uk?q!y?Y{0sOLbQp5P=ipz#N1>~bDQ1JOg11@=)YDd=)!@6}x6nQ8 z1^Nd31WXPB9ds7xFj!;6SRRa2(#Tz)yD*%=yP!{a3iKLW3p~*aAJp36JBWtJ8{PUf zv|VR`yz%E6EqEJriva@l11|udgU-;)7e%xjygFZ?Y z3Pz&w2?CYCI1Anf{pCyqfkkvvhgkxZeTf~m4Tdu~bgn?#I6feNoxuI)3v_7_P5^cT zk6tX$?xh0dg1x|5%P=sO3p5?<4PF9$d8I&0Z1DX3VU(>x7vpQwJ_H1U_d_4pDA3Q~ zP;mcE0_APNw$PTSF4%6XKwWSk!I;O*Lul1D+!44T%GW_heIrmRSPMQ6ePoY7v%uZK z*?R@rbWot}ws`&}FuETS=>AbW0t9>x=06Iw;3s?_vV#UkAIIMSPGVyPUIpF(tv!VU zybXLC+UK-D>ENBQ#z zd>I^7j=R4m&{=R5c*u412o5)UJQ9qH+#3ST!M7bBa6@o=e9`&-jX(pzIpCpq7tb=0 zj)LWZX_W8>CLjEH%z@}0ct7+jKfHe%V7!5`++U=h@I~Ypm|>t528y&ISfp~WBe-jb zNRz@vdIAmwN7NH(Oe7k0MDKv>Mv1hpg-9L2J;5n0MVin`q#|&Ca8zrNzQ)&tiQq}# z^jMKxlJWkXg0Tt4Pk5P+_Y$d*6VYLCes7UZ6p54tt^k*oh&1w3k+jZ4ufV=zL<*ZP z(rB;Ygh;Ew`@o$~inQU3NEg86;2zjw4#e)!){W>Nu+v46`u~nUAcDQ|rr2K*Df7BW zAA?(g9k4Tu!~Sg>I34^7I_{xJcfe!7c1Q;2jITs$;*RGJW7KPr#$%f`6nqHWNM!V} zHKT99*THpd7@c)w^a9NAW_;qrD9oKvqz927_zd*607e7BiQuGQMpx@HItb1Jmti~Q z+Kkb2@H+5*XyenijD~q4)4`Bp7@flI=v(kra8W#??Oho?1U~@l5*WFqF>>(2n82Gd zrYED1`Z3A?*8yijKgeP<3)~6pXJE8`2&2>BKH!K^IQhqn>eV9305AQ78R?7hj9S6? z7)I*}jM|nlDgciGKY>0qjnSvzCE)R&Gg`O=7X`iy)-GjKzLHUWZ=_oA$Ez51-@qsV z?1DGvB6RPKj3$CZ!LFMarEFoe0^Az>a0~Kp*nUQbVa$bb8@l;%Mp_@_b?|lQcBdIl z2VVgH34Q+(qpjd~;Ca6>3jUMP8*n6EwWH8;?lMaB#Y_ioaSyTg8I1?`0{4G_i+jju z9=Jca(g@h_h|x+IgJ8rzX5{^Z(PnTicn|by{O$TX@HBAJD@Gk(Gr9qu4ZaUu{+7`r z@KW$(EJEd%53hEY0pJl5 zjSe9CROXQqjan>GU?3i!6Y~G`r4miwh^q|3Oow;<&?X5B5Q%;TZvpE~xcdDPg#=^z z1;-tbXv#5(a==f)OHN7@^|M6#!EeC*p!?!D39bZBgC22CqBCG$R=qfwTbe;mC#*+ zR2T<%{=;FE18hT76anKC@G9shn0MQQCxXY-Mp=CoC4pCg_d|D%Qc(%`DEK<`jbqBr1$;D8A#s+^%B@47@c!ND_CG=8>B=HE}p*)j9kDd9A^+<2VM@n5yyG31GobE9*)akCveC@6*a_h z73>1;4Si~{iv9%G0Y8I|U4nl#5>8YfoDChYN=5eI7;x}<6&=HoZG_PY##6wY?J6n+ zmw*pIizXHA0Z#$U;J{kn4f%Bm|m!Q2y$co_YXuJPdHGK;%1y6xqIt4cY z-T*!Tz0Jtgq=`W4gmDqtdXbv?fbW9aLEm4erlDYaOrf(jV4b#AO-sNH!3&^o?pD(U za4PuTUNx;bq^35JSiXUeK|eXErXsLBCD-{`jZCPfmEhIj)xWCAm{hK&!!VA(7!GZ? zrlv~pU*N}os%h6fH6=&kwZW8o33}KgHGKy52d{$OhvO@7AowY?^HVi#0n2mzj92Jl z>|*YM8-hQAjukZY1l$8WNYEH*rL~5l8WW9x(Z*Io<<1%^1#WjH&<6Bi3nVqLu{R)ni-wY6$g7y?&9Dco29Y^tNB{$XX&T zgRet-oY&BL@E&km=;%ut+66ueE`(0N`uz;}8o1L94PAY#q2N|X!+yyB;u8%GeXF6F zFmzai%z~bQqXMi4`w3Qb#LkK;!K=XkKt}{y(ZJT22e8O6K%Z=BMRsj)_uz-n1GQFk z9J~lT6M93E6?wJA#|`jB=xOOzGz2UKApdU%Y{hX1h6<~cyjZM!mf`9IqGsTN<+$_J zcwZUz1YnOf$OYJ53lc^+xZXg40+U5@u*Rwxd;|JCHZEaKn2f;li$#jSMy0hgUQzH< z=v3?jl3lPIGh!L!@kpc}ux_vGj^_pbE)aiyXvfIpf&D+Y5;_>m?yry&g1~+~812Tg zx|BaJQsWg`n$V0X9%AEVi<$&Ni>yIv>5@X!L0-p{UTus4aM^U z8&z2CU`1m9-v_Jl)nUA|infEFfFoQ~^cV|}AHl)6=(Wu;J!8Rf9t)0e@D=C=n11nB zTj~V92;Ca9Wv6f>mQXOB13F`R9E9mn4}J?Bg4wSe{3-YnbO~m=8JO+HforSO#4%af zVRD)WPR3+)29r|-coBF)l$y#h`D9?S*$n=&i<%sJtLZs-C-@-r5X>bdMob?2V1x`- zQxJ}a;2*%3pfBKf2Hp>zipi!YCYRUXBVg4CHN9Df1~8f21@Bm|rl*(-=3y>)2wrPa zQyFr-8&bI%kEIQAeGyXoKCmq~?7Er)kgAO>kc+)woCa(~Dn1Af2kUJ#v<0bmBvNlf zu+CFMpCHxV1$P2BK&nkdYMqSKngD(aosUfV7Tg;g60ac}B(@RAe0kt~(A|*8dLwa_ zf~is%xzB#ynvTx-D2*N_E~7o3m>wt%lf@55_* bo3Gm=^$(E$IkEg7p19>dMD;=|D%AWxeJenF diff --git a/foxbin2prg.pjx b/foxbin2prg.pjx index 54b35bb5b4add9df2df8cef9b869601177707299..91aa6b7dfdfc22814bf113a67b801284af5e0381 100644 GIT binary patch delta 32 mcmZ3-vyNxOeimjEGt0?`Sn7ea#bg&&B^Dz?6O+kVtVaN+y9u5E delta 32 ocmZ3-vyNxOeimj!Go#6eSn8P#P0S~|uqv^bn_5^-&SE_R0H*Q@pa1{> diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 89734db..3a3a9cd 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1032,7 +1032,6 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; - + [] ; + [] ; + [] ; + [] ; @@ -1300,26 +1299,6 @@ DEFINE CLASS c_conversor_base AS SESSION ENDPROC - PROCEDURE DesindentarMemo - *--------------------------------------------------------------------------------------------------- - * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * tcMemo (v! IN ) Memo a desindentar - * tcIndentacion (v! IN ) Indentación utilizada - * RETURN: Memo desindentado - *--------------------------------------------------------------------------------------------------- - LPARAMETERS tcMemo, tcIndentacion - - LOCAL lcMemo, laLines(1), I - lcMemo = '' - - FOR I = 1 TO ALINES( laLines, tcMemo ) - lcMemo = lcMemo + SUBSTR( laLines(I), LEN(tcIndentacion) + 1 ) + CR_LF - ENDFOR - - RETURN lcMemo - ENDPROC - - ******************************************************************************************************************* PROCEDURE desnormalizarAsignacion LPARAMETERS tcAsignacion